เจ†เจธเจŸเฉเจฐเฉ‡เจฒเฉ€เจ† เจตเจฟเฉฑเจš เจจเจพเจ—เฉ€เจ“เจธ เจคเฉ‹เจ‚ เจ†เจˆเจธเจฟเฉฐเจ—เจพ 2 เจคเฉฑเจ• เจชเฉเจฐเจตเจพเจธ

เจนเจพเจˆ เจนเจฐ เจ•เฉ‹เจˆ

เจฎเฉˆเจ‚ เจ‡เฉฑเจ• เจฒเฉ€เจจเจ•เจธ เจธเจฟเจธเจŸเจฎ เจชเฉเจฐเจธเจผเจพเจธเจ• เจนเจพเจ‚, เจฎเฉˆเจ‚ 2015 เจตเจฟเฉฑเจš เจ‡เฉฑเจ• เจธเฉเจคเฉฐเจคเจฐ เจชเฉ‡เจธเจผเฉ‡เจตเจฐ เจตเฉ€เจœเจผเฉ‡ 'เจคเฉ‡ เจฐเฉ‚เจธ เจคเฉ‹เจ‚ เจ†เจธเจŸเจฐเฉ‡เจฒเฉ€เจ† เจ—เจฟเจ†, เจชเจฐ เจฒเฉ‡เจ– เจ‡เจธ เจฌเจพเจฐเฉ‡ เจจเจนเฉ€เจ‚ เจนเฉ‹เจตเฉ‡เจ—เจพ เจ•เจฟ เจ‡เฉฑเจ• เจธเฉ‚เจฐ เจฒเจˆ เจŸเจฐเฉˆเจ•เจŸเจฐ เจ•เจฟเจตเฉ‡เจ‚ เจธเจผเฉเจฐเฉ‚ เจ•เจฐเจจเจพ เจนเฉˆเฅค เจ…เจœเจฟเจนเฉ‡ เจฒเฉ‡เจ– เจชเจนเจฟเจฒเจพเจ‚ เจนเฉ€ เจ•เจพเจซเจผเฉ€ เจนเจจ (เจซเจฟเจฐ เจตเฉ€, เจœเฉ‡เจ•เจฐ เจ•เฉ‹เจˆ เจฆเจฟเจฒเจšเจธเจชเฉ€ เจนเฉˆ, เจคเจพเจ‚ เจฎเฉˆเจ‚ เจ‡เจธ เจฌเจพเจฐเฉ‡ เจตเฉ€ เจฒเจฟเจ–เจพเจ‚เจ—เจพ), เจ‡เจธ เจฒเจˆ เจฎเฉˆเจ‚ เจ‡เจธ เจฌเจพเจฐเฉ‡ เจ—เฉฑเจฒ เจ•เจฐเจจเจพ เจšเจพเจนเจพเจ‚เจ—เจพ เจ•เจฟ เจ•เจฟเจตเฉ‡เจ‚, เจ‡เฉฑเจ• เจฒเฉ€เจจเจ•เจธ-เจ“เจชเจธ เจ‡เฉฐเจœเฉ€เจจเฉ€เจ…เจฐ เจตเจœเฉ‹เจ‚ เจ†เจธเจŸเฉเจฐเฉ‡เจฒเฉ€เจ† เจตเจฟเฉฑเจš เจฎเฉ‡เจฐเฉ‡ เจ•เฉฐเจฎ เจคเฉ‡, เจฎเฉˆเจ‚ เจ‡เฉฑเจ• เจธเจฟเจธเจŸเจฎ เจจเจฟเจ—เจฐเจพเจจเฉ€ เจคเฉ‹เจ‚ เจฎเจพเจˆเจ—เฉเจฐเฉ‡เจธเจผเจจ เจธเจผเฉเจฐเฉ‚ เจ•เฉ€เจคเจพเฅค เจ•เจฟเจธเฉ‡ เจนเฉ‹เจฐ เจจเฉ‚เฉฐ. เจ–เจพเจธ เจคเฉŒเจฐ 'เจคเฉ‡ - Nagios => Icinga2.

เจฒเฉ‡เจ– เจ…เฉฐเจธเจผเจ• เจคเฉŒเจฐ 'เจคเฉ‡ เจคเจ•เจจเฉ€เจ•เฉ€ เจนเฉˆ เจ…เจคเฉ‡ เจ…เฉฐเจธเจผเจ• เจคเฉŒเจฐ 'เจคเฉ‡ เจฒเฉ‹เจ•เจพเจ‚ เจจเจพเจฒ เจธเฉฐเจšเจพเจฐ เจ…เจคเฉ‡ เจธเฉฑเจญเจฟเจ†เจšเจพเจฐ เจ…เจคเฉ‡ เจ•เฉฐเจฎ เจ•เจฐเจจ เจฆเฉ‡ เจคเจฐเฉ€เจ•เจฟเจ†เจ‚ เจตเจฟเฉฑเจš เจ…เฉฐเจคเจฐ เจจเจพเจฒ เจœเฉเฉœเฉ€เจ†เจ‚ เจธเจฎเฉฑเจธเจฟเจ†เจตเจพเจ‚ เจฌเจพเจฐเฉ‡ เจนเฉˆเฅค

เจฌเจฆเจ•เจฟเจธเจฎเจคเฉ€ เจจเจพเจฒ, "เจ•เฉ‹เจก" เจŸเฉˆเจ— เจ•เจ เจชเฉเจคเจฒเฉ€ เจ…เจคเฉ‡ yaml เจ•เฉ‹เจก เจจเฉ‚เฉฐ เจ‰เจœเจพเจ—เจฐ เจจเจนเฉ€เจ‚ เจ•เจฐเจฆเจพ เจนเฉˆ, เจ‡เจธเจฒเจˆ เจฎเฉˆเจจเฉ‚เฉฐ "เจชเจฒเฉ‡เจจเจŸเฉˆเจ•เจธเจŸ" เจฆเฉ€ เจตเจฐเจคเฉ‹เจ‚ เจ•เจฐเจจเฉ€ เจชเจˆเฅค

21 เจฆเจธเฉฐเจฌเจฐ, 2016 เจฆเฉ€ เจธเจตเฉ‡เจฐ เจจเฉ‚เฉฐ เจฎเฉเจธเฉ€เจฌเจค เจฆเฉ‡ เจ•เฉ‹เจˆ เจธเฉฐเจ•เฉ‡เจค เจจเจนเฉ€เจ‚ เจธเจจ. เจ†เจฎ เจตเจพเจ‚เจ—, เจฎเฉˆเจ‚ เจ•เฉฐเจฎ เจตเจพเจฒเฉ‡ เจฆเจฟเจจ เจฆเฉ‡ เจชเจนเจฟเจฒเฉ‡ เจ…เฉฑเจงเฉ‡ เจ˜เฉฐเจŸเฉ‡ เจตเจฟเฉฑเจš เจ‡เฉฑเจ• เจ—เฉˆเจฐ-เจฐเจœเจฟเจธเจŸเจฐเจก เจ…เจ—เจฟเจ†เจค เจ‰เจชเจญเฉ‹เจ—เจคเจพ เจฆเฉเจ†เจฐเจพ เจนเจพเจฌเจฐ เจชเฉœเฉเจน เจฐเจฟเจนเจพ เจธเฉ€, เจ•เฉŒเจซเฉ€ เจชเฉ€เจ‚เจฆเฉ‡ เจนเฉ‹เจ, เจ…เจคเฉ‡ เจธเจพเจนเจฎเจฃเฉ‡ เจ†เจ‡เจ† เจ‡เจน เจฒเฉ‡เจ–.

เจ•เจฟเจ‰เจ‚เจ•เจฟ เจฎเฉ‡เจฐเฉ€ เจ•เฉฐเจชเจจเฉ€ เจจเฉ‡ เจจเจพเจ—เจฟเจ“เจธ เจฆเฉ€ เจตเจฐเจคเฉ‹เจ‚ เจ•เฉ€เจคเฉ€ เจนเฉˆ, เจฌเจฟเจจเจพเจ‚ เจฆเฉ‹ เจตเจพเจฐ เจธเฉ‹เจšเฉ‡, เจฎเฉˆเจ‚ เจฐเฉˆเฉฑเจกเจฎเจพเจˆเจจ เจตเจฟเฉฑเจš เจ‡เฉฑเจ• เจŸเจฟเจ•เจŸ เจฌเจฃเจพเจˆ เจ…เจคเฉ‡ เจฒเจฟเฉฐเจ• เจจเฉ‚เฉฐ เจœเจจเจฐเจฒ เจšเฉˆเจŸ เจฒเจˆ เจญเฉ‡เจœเจฟเจ†, เจ•เจฟเจ‰เจ‚เจ•เจฟ เจฎเฉˆเจ‚ เจ‡เจธเจจเฉ‚เฉฐ เจฎเจนเฉฑเจคเจตเจชเฉ‚เจฐเจจ เจธเจฎเจเจฟเจ†. เจชเจนเจฟเจฒเจ•เจฆเจฎเฉ€ เจ†เจธเจŸเฉเจฐเฉ‡เจฒเฉ€เจ† เจตเจฟเฉฑเจš เจตเฉ€ เจธเจœเจผเจพเจฏเฉ‹เจ— เจนเฉˆ, เจ‡เจธ เจฒเจˆ เจฒเฉ€เจก เจ‡เฉฐเจœเฉ€เจจเฉ€เจ…เจฐ เจจเฉ‡ เจฎเฉˆเจจเฉ‚เฉฐ เจ‡เจธเจฆเฉ€ เจ–เฉ‹เจœ เจ•เจฐเจจ เจคเฉ‹เจ‚ เจฌเจพเจ…เจฆ เจธเจฎเฉฑเจธเจฟเจ† เจจเฉ‚เฉฐ เจชเจฟเฉฐเจจ เจ•เจฐ เจฆเจฟเฉฑเจคเจพเฅค

Redmine เจคเฉ‹เจ‚ เจธเจ•เจฐเฉ€เจจเจธเจผเจพเจŸเจ†เจธเจŸเฉเจฐเฉ‡เจฒเฉ€เจ† เจตเจฟเฉฑเจš เจจเจพเจ—เฉ€เจ“เจธ เจคเฉ‹เจ‚ เจ†เจˆเจธเจฟเฉฐเจ—เจพ 2 เจคเฉฑเจ• เจชเฉเจฐเจตเจพเจธ

เจธเจพเจกเฉ‡ เจตเจฟเจญเจพเจ— เจตเจฟเฉฑเจš, เจ†เจชเจฃเฉ€ เจฐเจพเจ เจœเจผเจพเจนเจฐ เจ•เจฐเจจ เจคเฉ‹เจ‚ เจชเจนเจฟเจฒเจพเจ‚, เจ˜เฉฑเจŸเฉ‹ เจ˜เฉฑเจŸ เจ‡เฉฑเจ• เจตเจฟเจ•เจฒเจช เจฆเฉ€ เจชเฉ‡เจธเจผเจ•เจธเจผ เจ•เจฐเจจ เจฆเจพ เจฐเจฟเจตเจพเจœ เจนเฉˆ, เจญเจพเจตเฉ‡เจ‚ เจšเฉ‹เจฃ เจธเจชเฉฑเจธเจผเจŸ เจนเฉ‹เจตเฉ‡, เจ‡เจธ เจฒเจˆ เจฎเฉˆเจ‚ เจ—เฉ‚เจ—เจฒเจฟเฉฐเจ— เจฆเฉเจ†เจฐเจพ เจธเจผเฉเจฐเฉ‚ เจ•เฉ€เจคเจพ เจ•เจฟ เจ•เจฟเจธ เจคเจฐเฉเจนเจพเจ‚ เจฆเฉ‡ เจจเจฟเจ—เจฐเจพเจจเฉ€ เจชเฉเจฐเจฃเจพเจฒเฉ€เจ†เจ‚ เจตเจฐเจคเจฎเจพเจจ เจตเจฟเฉฑเจš เจขเฉเจ•เจตเฉ‡เจ‚ เจนเจจ, เจ•เจฟเจ‰เจ‚เจ•เจฟ เจฐเฉ‚เจธ เจตเจฟเฉฑเจš เจฎเฉ‡เจฐเฉ‡ เจ•เฉฐเจฎ เจฆเฉ‡ เจ†เจ–เจฐเฉ€ เจธเจฅเจพเจจ 'เจคเฉ‡ เจฎเฉˆเจ‚ เจฎเฉ‡เจฐเฉ€ เจ†เจชเจฃเฉ€ เจธเจตเฉˆ-เจฒเจฟเจ–เจค เจชเฉเจฐเจฃเจพเจฒเฉ€ เจธเฉ€, เจฌเจนเฉเจค เจนเฉ€ เจฎเฉเฉฑเจขเจฒเฉ€, เจชเจฐ เจ‡เจธ เจฆเฉ‡ เจฌเจพเจตเจœเฉ‚เจฆ เจ‡เจธ เจจเฉ‚เฉฐ เจธเฉŒเจ‚เจชเฉ‡ เจ—เจ เจธเจพเจฐเฉ‡ เจ•เจพเจฐเจœ เจ•เจพเจซเจผเฉ€ เจ•เฉฐเจฎ เจ…เจคเฉ‡ เจชเฉเจฐเจฆเจฐเจธเจผเจจ เจ•เจฐ เจฐเจฟเจนเจพ เจธเฉ€เฅค เจชเจพเจˆเจฅเจจ, เจธเฉ‡เจ‚เจŸ เจชเฉ€เจŸเจฐเจธเจฌเจฐเจ— เจชเฉŒเจฒเฉ€เจŸเฉˆเจ•เจจเจฟเจ• เจ…เจคเฉ‡ เจฎเฉˆเจŸเจฐเฉ‹ เจจเจฟเจฏเจฎเฅค เจจเจนเฉ€เจ‚, เจธเจฌเจตเฉ‡เจ… เจ–เจฐเจพเจฌ เจนเฉˆเฅค เจ‡เจน เจจเจฟเฉฑเจœเฉ€ เจนเฉˆ (11 เจธเจพเจฒ เจฆเจพ เจ•เฉฐเจฎ) เจ…เจคเฉ‡ เจ‡เฉฑเจ• เจตเฉฑเจ–เจฐเฉ‡ เจฒเฉ‡เจ– เจฆเฉ‡ เจฏเฉ‹เจ— เจนเฉˆ, เจชเจฐ เจนเฉเจฃ เจจเจนเฉ€เจ‚เฅค

เจฎเฉ‡เจฐเฉ‡ เจฎเฉŒเจœเฉ‚เจฆเจพ เจธเจฅเจพเจจ 'เจคเฉ‡ เจฌเฉเจจเจฟเจ†เจฆเฉ€ เจขเจพเจ‚เจšเฉ‡ เจฆเฉ€ เจธเฉฐเจฐเจšเจจเจพ เจตเจฟเฉฑเจš เจฌเจฆเจฒเจพเจ… เจ•เจฐเจจ เจฆเฉ‡ เจจเจฟเจฏเจฎเจพเจ‚ เจฌเจพเจฐเฉ‡ เจฅเฉ‹เฉœเฉเจนเจพ เจœเจฟเจนเจพเฅค เจ…เจธเฉ€เจ‚ เจ•เฉ‹เจก เจธเจฟเจงเจพเจ‚เจค เจตเจœเฉ‹เจ‚ เจ•เจ เจชเฉเจคเจฒเฉ€, เจ—เจฟเจŸเจฒเจฌ เจ…เจคเฉ‡ เจฌเฉเจจเจฟเจ†เจฆเฉ€ เจขเจพเจ‚เจšเฉ‡ เจฆเฉ€ เจตเจฐเจคเฉ‹เจ‚ เจ•เจฐเจฆเฉ‡ เจนเจพเจ‚, เจ‡เจธ เจฒเจˆ:

  • เจตเจฐเจšเฉเจ…เจฒ เจฎเจธเจผเฉ€เจจเจพเจ‚ 'เจคเฉ‡ เจ•เจฟเจธเฉ‡ เจตเฉ€ เจซเจพเจˆเจฒ เจจเฉ‚เฉฐ เจนเฉฑเจฅเฉ€เจ‚ เจฌเจฆเจฒ เจ•เฉ‡ SSH เจฆเฉเจ†เจฐเจพ เจ•เฉ‹เจˆ เจฆเจธเจคเฉ€ เจคเจฌเจฆเฉ€เจฒเฉ€ เจจเจนเฉ€เจ‚ เจ•เฉ€เจคเฉ€ เจœเจพเจ‚เจฆเฉ€เฅค เจคเจฟเฉฐเจจ เจธเจพเจฒเจพเจ‚ เจฆเฉ‡ เจ•เฉฐเจฎ เจฆเฉŒเจฐเจพเจจ, เจฎเฉˆเจ‚ เจ‡เจธ เจฒเจˆ เจ•เจˆ เจตเจพเจฐ เจŸเฉ‹เจชเฉ€ เจจเจพเจฒ เจฎเจพเจฐเจฟเจ†, เจ†เจ–เจฐเฉ€ เจตเจพเจฐ เจ‡เฉฑเจ• เจนเจซเจผเจคเจพ เจชเจนเจฟเจฒเจพเจ‚ เจธเฉ€ เจ…เจคเฉ‡ เจฎเฉˆเจจเฉ‚เฉฐ เจจเจนเฉ€เจ‚ เจฒเฉฑเจ—เจฆเจพ เจ•เจฟ เจ‡เจน เจ†เจ–เจฐเฉ€ เจตเจพเจฐ เจธเฉ€เฅค เจ–เฉˆเจฐ, เจ…เจธเจฒ เจตเจฟเฉฑเจš - เจธเฉฐเจฐเจšเจจเจพ เจตเจฟเฉฑเจš เจ‡เฉฑเจ• เจฒเจพเจˆเจจ เจจเฉ‚เฉฐ เจ เฉ€เจ• เจ•เจฐเฉ‹, เจธเฉ‡เจตเจพ เจจเฉ‚เฉฐ เจฎเฉเฉœ เจšเจพเจฒเฉ‚ เจ•เจฐเฉ‹ เจ…เจคเฉ‡ เจตเฉ‡เจ–เฉ‹ เจ•เจฟ เจ•เฉ€ เจธเจฎเฉฑเจธเจฟเจ† เจนเฉฑเจฒ เจนเฉ‹ เจ—เจˆ เจนเฉˆ - 10 เจธเจ•เจฟเฉฐเจŸ. Gitlab เจตเจฟเฉฑเจš เจ‡เฉฑเจ• เจจเจตเฉ€เจ‚ เจธเจผเจพเจ–เจพ เจฌเจฃเจพเจ“, เจคเจฌเจฆเฉ€เจฒเฉ€เจ†เจ‚ เจจเฉ‚เฉฐ เจ…เฉฑเจ—เฉ‡ เจตเจงเจพเจ“, Puppetmaster 'เจคเฉ‡ เจ•เฉฐเจฎ เจ•เจฐเจจ เจฒเจˆ r10k เจฆเฉ€ เจ‰เจกเฉ€เจ• เจ•เจฐเฉ‹, Puppet -environment=mybranch เจšเจฒเจพเจ“ เจ…เจคเฉ‡ เจ•เฉเจ เจฎเจฟเฉฐเจŸ เจนเฉ‹เจฐ เจ‰เจกเฉ€เจ• เจ•เจฐเฉ‹ เจœเจฆเฉ‹เจ‚ เจคเฉฑเจ• เจ‡เจน เจธเจญ เจ•เฉฐเจฎ เจจเจนเฉ€เจ‚ เจ•เจฐเจฆเจพ - เจ˜เฉฑเจŸเฉ‹-เจ˜เฉฑเจŸ 5 เจฎเจฟเฉฐเจŸเฅค
  • Gitlab เจตเจฟเฉฑเจš เจ‡เฉฑเจ• เจฎเจฐเจœ เจฌเฉ‡เจจเจคเฉ€ เจฌเจฃเจพ เจ•เฉ‡ เจ•เฉ‹เจˆ เจตเฉ€ เจฌเจฆเจฒเจพเจ… เจ•เฉ€เจคเจพ เจœเจพเจ‚เจฆเจพ เจนเฉˆ เจ…เจคเฉ‡ เจ˜เฉฑเจŸเฉ‹-เจ˜เฉฑเจŸ เจ‡เฉฑเจ• เจŸเฉ€เจฎ เจฎเฉˆเจ‚เจฌเจฐ เจฆเฉเจ†เจฐเจพ เจฎเจจเจœเจผเฉ‚เจฐ เจ•เฉ€เจคเจพ เจœเจพเจฃเจพ เจšเจพเจนเฉ€เจฆเจพ เจนเฉˆเฅค เจŸเฉ€เจฎ เจฒเฉ€เจก เจฆเฉเจ†เจฐเจพ เจฒเจ เจ—เจ เจฎเฉเฉฑเจ– เจฌเจฆเจฒเจพเจ… เจฒเจˆ เจฆเฉ‹ เจœเจพเจ‚ เจคเจฟเฉฐเจจ เจฎเจจเจœเจผเฉ‚เจฐเฉ€เจ†เจ‚ เจฆเฉ€ เจฒเฉ‹เฉœ เจนเฉเฉฐเจฆเฉ€ เจนเฉˆเฅค
  • เจธเจพเจฐเฉ€เจ†เจ‚ เจคเจฌเจฆเฉ€เจฒเฉ€เจ†เจ‚ เจ•เจฟเจธเฉ‡ เจจเจพ เจ•เจฟเจธเฉ‡ เจคเจฐเฉ€เจ•เฉ‡ เจจเจพเจฒ เจŸเฉˆเจ•เจธเจŸ เจนเฉเฉฐเจฆเฉ€เจ†เจ‚ เจนเจจ (เจ•เจฟเจ‰เจ‚เจ•เจฟ เจ•เจ เจชเฉเจคเจฒเฉ€ เจฎเฉˆเจจเฉ€เจซเฉˆเจธเจŸ, เจธเจ•เฉเจฐเจฟเจชเจŸ เจ…เจคเฉ‡ เจนเฉ€เจฐเจพ เจกเฉ‡เจŸเจพ เจŸเฉˆเจ•เจธเจŸ เจนเจจ), เจฌเจพเจˆเจจเจฐเฉ€เจ†เจ‚ เจฌเจนเฉเจค เจจเจฟเจฐเจพเจธเจผ เจนเจจ เจ…เจคเฉ‡ เจ…เจœเจฟเจนเฉ€เจ†เจ‚ เจซเจพเจˆเจฒเจพเจ‚ เจจเฉ‚เฉฐ เจฎเจจเจœเจผเฉ‚เจฐเฉ€ เจฆเฉ‡เจฃ เจฒเจˆ เจ‡เฉฑเจ• เจฎเจœเจฌเฉ‚เจฐ เจ•เจพเจฐเจจ เจนเฉ‹เจฃ เจฆเฉ€ เจฒเฉ‹เฉœ เจนเฉˆเฅค

เจ‡เจธ เจฒเจˆ, เจฎเฉˆเจ‚ เจตเจฟเจšเจพเจฐเฉ‡ เจ—เจ เจตเจฟเจ•เจฒเจช:

  • เจฎเฉเจจเจฟเจจ - เจœเฉ‡ เจฌเฉเจจเจฟเจ†เจฆเฉ€ เจขเจพเจ‚เจšเฉ‡ เจตเจฟเฉฑเจš 10 เจคเฉ‹เจ‚ เจตเฉฑเจง เจธเจฐเจตเจฐ เจนเจจ, เจคเจพเจ‚ เจชเฉเจฐเจธเจผเจพเจธเจจ เจจเจฐเจ• เจตเจฟเฉฑเจš เจฌเจฆเจฒ เจœเจพเจ‚เจฆเจพ เจนเฉˆ (เจคเฉ‹เจ‚ เจ‡เจน เจฒเฉ‡เจ–. เจฎเฉˆเจจเฉ‚เฉฐ เจ‡เจธ เจฆเฉ€ เจœเจพเจ‚เจš เจ•เจฐเจจ เจฆเฉ€ เจ•เฉ‹เจˆ เจ–เจพเจธ เจ‡เฉฑเจ›เจพ เจจเจนเฉ€เจ‚ เจธเฉ€, เจ‡เจธ เจฒเจˆ เจฎเฉˆเจ‚ เจ‡เจธเจฆเฉ‡ เจฒเจˆ เจ‰เจธเจฆเจพ เจธเจผเจฌเจฆ เจฒเจฟเจ†)เฅค
  • เจœเจผเฉˆเจฌเจฟเจ•เจธ - เจฎเฉˆเจ‚ เจ‡เจธเจจเฉ‚เฉฐ เจฒเฉฐเจฌเฉ‡ เจธเจฎเฉ‡เจ‚ เจคเฉ‹เจ‚ เจฆเฉ‡เจ– เจฐเจฟเจนเจพ เจธเฉ€, เจตเจพเจชเจธ เจฐเฉ‚เจธ เจตเจฟเฉฑเจš, เจชเจฐ เจซเจฟเจฐ เจ‡เจน เจฎเฉ‡เจฐเฉ‡ เจ•เฉฐเจฎเจพเจ‚ เจฒเจˆ เจฌเฉ‡เจฒเฉ‹เฉœเจพ เจธเฉ€เฅค เจ‡เฉฑเจฅเฉ‡ - เจ‡เฉฑเจ• เจธเฉฐเจฐเจšเจจเจพ เจชเฉเจฐเจฌเฉฐเจงเจ• เจฆเฉ‡ เจคเฉŒเจฐ เจคเฉ‡ เจ•เจ เจชเฉเจคเจฒเฉ€ เจ…เจคเฉ‡ เจ‡เฉฑเจ• เจธเฉฐเจธเจ•เจฐเจฃ เจจเจฟเจฏเฉฐเจคเจฐเจฃ เจธเจฟเจธเจŸเจฎ เจฆเฉ‡ เจคเฉŒเจฐ เจคเฉ‡ เจ—เจฟเจŸเจฒเฉˆเจฌ เจฆเฉ€ เจตเจฐเจคเฉ‹เจ‚ เจ•เจพเจฐเจจ เจฐเฉฑเจฆ เจ•เจฐเจจเจพ เจชเจฟเจ†เฅค เจ‰เจธ เจธเจฎเฉ‡เจ‚, เจœเจฟเฉฑเจฅเฉ‹เจ‚ เจคเฉฑเจ• เจฎเฉˆเจ‚ เจธเจฎเจเจฟเจ†, เจœเจผเฉˆเจฌเจฟเจ•เจธ เจธเจพเจฐเฉ€ เจธเฉฐเจฐเจšเจจเจพ เจจเฉ‚เฉฐ เจกเฉ‡เจŸเจพเจฌเฉ‡เจธ เจตเจฟเฉฑเจš เจธเจŸเฉ‹เจฐ เจ•เจฐเจฆเจพ เจนเฉˆ, เจ…เจคเฉ‡ เจ‡เจธเจฒเจˆ เจ‡เจน เจธเจชเฉฑเจธเจผเจŸ เจจเจนเฉ€เจ‚ เจธเฉ€ เจ•เจฟ เจฎเฉŒเจœเฉ‚เจฆเจพ เจนเจพเจฒเจคเจพเจ‚ เจตเจฟเฉฑเจš เจธเฉฐเจฐเจšเจจเจพ เจจเฉ‚เฉฐ เจ•เจฟเจตเฉ‡เจ‚ เจชเฉเจฐเจฌเฉฐเจงเจฟเจค เจ•เจฐเจจเจพ เจนเฉˆ เจ…เจคเฉ‡ เจคเจฌเจฆเฉ€เจฒเฉ€เจ†เจ‚ เจจเฉ‚เฉฐ เจ•เจฟเจตเฉ‡เจ‚ เจŸเจฐเฉˆเจ• เจ•เจฐเจจเจพ เจนเฉˆเฅค
  • เจชเฉเจฐเฉ‹เจฎเฉ€เจฅเฉ€เจ…เจธ เจ‰เจน เจนเฉˆ เจœเฉ‹ เจ…เจธเฉ€เจ‚ เจตเจฟเจญเจพเจ— เจฆเฉ‡ เจฎเฉ‚เจก เจฆเฉเจ†เจฐเจพ เจจเจฟเจฐเจฃเจพ เจ•เจฐเจฆเฉ‡ เจนเฉ‹เจ เจ…เฉฐเจค เจตเจฟเฉฑเจš เจ†เจตเจพเจ‚เจ—เฉ‡, เจชเจฐ เจ‰เจธ เจธเจฎเฉ‡เจ‚ เจฎเฉˆเจ‚ เจ‡เจธ เจตเจฟเฉฑเจš เจฎเฉเจนเจพเจฐเจค เจจเจนเฉ€เจ‚ เจฐเฉฑเจ–เจฆเจพ เจธเฉ€ เจ…เจคเฉ‡ เจ…เจธเจฒ เจตเจฟเฉฑเจš เจ•เฉฐเจฎ เจ•เจฐเจจ เจตเจพเจฒเฉ‡ เจจเจฎเฉ‚เจจเฉ‡ (เจธเฉฐเจ•เจฒเจช เจฆเจพ เจธเจฌเฉ‚เจค) เจฆเจพ เจชเฉเจฐเจฆเจฐเจธเจผเจจ เจ•เจฐเจจ เจฆเฉ‡ เจฏเฉ‹เจ— เจจเจนเฉ€เจ‚ เจธเฉ€, เจ‡เจธ เจฒเจˆ เจฎเฉˆเจจเฉ‚เฉฐ เจ‡เจจเจ•เจพเจฐ เจ•เจฐเจจเจพ เจชเจฟเจ†เฅค
  • เจ‡เฉฑเจฅเฉ‡ เจ•เจˆ เจนเฉ‹เจฐ เจตเจฟเจ•เจฒเจช เจตเฉ€ เจธเจจ เจœเจฟเจจเฉเจนเจพเจ‚ เจจเฉ‚เฉฐ เจœเจพเจ‚ เจคเจพเจ‚ เจธเจฟเจธเจŸเจฎ เจฆเฉ‡ เจธเฉฐเจชเฉ‚เจฐเจจ เจชเฉเจจเจฐ-เจตเจฐเจ• เจฆเฉ€ เจฒเฉ‹เฉœ เจธเฉ€, เจœเจพเจ‚ เจ‰เจนเจจเจพเจ‚ เจฆเฉ‡ เจฌเจšเจชเจจ เจตเจฟเฉฑเจš / เจ›เฉฑเจก เจฆเจฟเฉฑเจคเฉ‡ เจ—เจ เจธเจจ เจ…เจคเฉ‡ เจ‰เจธเฉ‡ เจ•เจพเจฐเจจ เจ•เจฐเจ•เฉ‡ เจฐเฉฑเจฆ เจ•เจฐ เจฆเจฟเฉฑเจคเฉ‡ เจ—เจ เจธเจจเฅค

เจ…เฉฐเจค เจตเจฟเฉฑเจš, เจฎเฉˆเจ‚ เจคเจฟเฉฐเจจ เจ•เจพเจฐเจจเจพเจ‚ เจ•เจฐเจ•เฉ‡ Icinga2 'เจคเฉ‡ เจธเฉˆเจŸเจฒ เจนเฉ‹ เจ—เจฟเจ†:

1 - Nrpe (เจ‡เฉฑเจ• เจ•เจฒเจพเจ‡เฉฐเจŸ เจธเฉ‡เจตเจพ เจœเฉ‹ Nagios เจคเฉ‹เจ‚ เจ•เจฎเจพเจ‚เจก เจšเฉˆเจ• เจšเจฒเจพเจ‰เจ‚เจฆเฉ€ เจนเฉˆ) เจจเจพเจฒ เจ…เจจเฉเจ•เฉ‚เจฒเจคเจพเฅค เจ‡เจน เจฌเจนเฉเจค เจฎเจนเฉฑเจคเจตเจชเฉ‚เจฐเจจ เจธเฉ€, เจ•เจฟเจ‰เจ‚เจ•เจฟ เจ‰เจธ เจธเจฎเฉ‡เจ‚ เจธเจพเจกเฉ‡ เจ•เฉ‹เจฒ 135 (เจนเฉเจฃ 2019 เจตเจฟเฉฑเจš 165 เจนเจจ) เจ•เจธเจŸเจฎ-เจฒเจฟเจ–เฉ€เจ†เจ‚ เจธเฉ‡เจตเจพเจตเจพเจ‚/เจšเฉˆเจ•เจพเจ‚ เจฆเฉ‡ เจเฉเฉฐเจก เจตเจพเจฒเฉ€เจ†เจ‚ เจตเจฐเจšเฉเจ…เจฒ เจฎเจธเจผเฉ€เจจเจพเจ‚ เจธเจจ, เจ…เจคเฉ‡ เจ‡เจธ เจธเจญ เจจเฉ‚เฉฐ เจฆเฉเจฌเจพเจฐเจพ เจ•เจฐเจจเจพ เจ‡เฉฑเจ• เจ…เจธเจฒ เจฆเจฐเจฆ เจนเฉ‹เจฃเจพ เจธเฉ€เฅค
2 - เจธเจพเจฐเฉ€เจ†เจ‚ เจธเฉฐเจฐเจšเจจเจพ เจซเจพเจˆเจฒเจพเจ‚ เจŸเฉˆเจ•เจธเจŸ เจนเจจ, เจœเฉ‹ เจ‡เจธ เจฎเจพเจฎเจฒเฉ‡ เจจเฉ‚เฉฐ เจธเฉฐเจชเจพเจฆเจฟเจค เจ•เจฐเจจเจพ เจ†เจธเจพเจจ เจฌเจฃเจพเจ‰เจ‚เจฆเฉ€เจ†เจ‚ เจนเจจ, เจ‡เจน เจฆเฉ‡เจ–เจฃ เจฆเฉ€ เจฏเฉ‹เจ—เจคเจพ เจจเจพเจฒ เจฎเจฐเจœ เจฌเฉ‡เจจเจคเฉ€เจ†เจ‚ เจฌเจฃเจพเจ‰เจ‚เจฆเฉ€เจ†เจ‚ เจนเจจ เจ•เจฟ เจ•เฉ€ เจœเฉ‹เฉœเจฟเจ† เจœเจพเจ‚ เจฎเจฟเจŸเจพเจ‡เจ† เจ—เจฟเจ† เจนเฉˆเฅค
3 เจ‡เฉฑเจ• เจœเฉ€เจตเจค เจ…เจคเฉ‡ เจตเจฟเจ•เจพเจธเจธเจผเฉ€เจฒ เจ“เจชเจจเจธเฉ‹เจฐเจธ เจชเฉเจฐเฉ‹เจœเฉˆเจ•เจŸ เจนเฉˆเฅค เจ…เจธเฉ€เจ‚ เจธเฉฑเจšเจฎเฉเฉฑเจš เจ“เจชเจจเจธเฉ‹เจฐเจธ เจจเฉ‚เฉฐ เจชเจฟเจ†เจฐ เจ•เจฐเจฆเฉ‡ เจนเจพเจ‚ เจ…เจคเฉ‡ เจธเจฎเฉฑเจธเจฟเจ†เจตเจพเจ‚ เจจเฉ‚เฉฐ เจนเฉฑเจฒ เจ•เจฐเจจ เจฒเจˆ เจชเฉเฉฑเจฒ เจฌเฉ‡เจจเจคเฉ€เจ†เจ‚ เจ…เจคเฉ‡ เจฎเฉเฉฑเจฆเฉ‡ เจฌเจฃเจพ เจ•เฉ‡ เจ‡เจธ เจตเจฟเฉฑเจš เจนเจฐ เจธเฉฐเจญเจต เจฏเฉ‹เจ—เจฆเจพเจจ เจฆเจฟเฉฐเจฆเฉ‡ เจนเจพเจ‚เฅค

เจ‡เจธ เจฒเจˆ, เจšเจฒเฉ‹, เจ†เจˆเจธเจฟเฉฐเจ—เจพ 2.

เจธเจญ เจคเฉ‹เจ‚ เจชเจนเจฟเจฒเจพเจ‚ เจฎเฉˆเจจเฉ‚เฉฐ เจฎเฉ‡เจฐเฉ‡ เจธเจพเจฅเฉ€เจ†เจ‚ เจฆเฉ€ เจœเฉœเจคเจพ เจฆเจพ เจธเจพเจนเจฎเจฃเจพ เจ•เจฐเจจเจพ เจชเจฟเจ†เฅค เจนเจฐ เจ•เฉ‹เจˆ Nagios/Naggios (เจนเจพเจฒเจพเจ‚เจ•เจฟ เจ‡เฉฑเจฅเฉ‡ เจตเฉ€ เจ‰เจน เจ‡เจธเจฆเจพ เจ‰เจšเจพเจฐเจจ เจ•เจฟเจตเฉ‡เจ‚ เจ•เจฐเจจเจพ เจนเฉˆ เจ‡เจธ เจฌเจพเจฐเฉ‡ เจธเจฎเจเฉŒเจคเจพ เจจเจนเฉ€เจ‚ เจ•เจฐ เจธเจ•เฉ‡) เจ…เจคเฉ‡ CheckMK เจ‡เฉฐเจŸเจฐเจซเฉ‡เจธ เจฒเจˆ เจตเจฐเจคเจฟเจ† เจœเจพเจ‚เจฆเจพ เจนเฉˆเฅค เจ†เจˆเจธเจฟเฉฐเจ—เจพ เจ‡เฉฐเจŸเจฐเจซเฉ‡เจธ เจชเฉ‚เจฐเฉ€ เจคเจฐเฉเจนเจพเจ‚ เจตเฉฑเจ–เจฐเจพ เจฆเจฟเจ–เจพเจˆ เจฆเจฟเฉฐเจฆเจพ เจนเฉˆ (เจ‡เจน เจ‡เฉฑเจ• เจ˜เจŸเจพเจ“ เจธเฉ€), เจชเจฐ เจ•เจฟเจธเฉ‡ เจตเฉ€ เจชเฉˆเจฐเจพเจฎเฉ€เจŸเจฐ เจฒเจˆ เจซเจฟเจฒเจŸเจฐเจพเจ‚ เจฆเฉ€ เจตเจฐเจคเฉ‹เจ‚ เจ•เจฐเจฆเฉ‡ เจนเฉ‹เจ เจคเฉเจนเจพเจจเฉ‚เฉฐ เจฒเจšเจ•เจฆเจพเจฐ เจขเฉฐเจ— เจจเจพเจฒ เจ…เจจเฉเจ•เฉ‚เจฒเจฟเจค เจ•เจฐเจจเจพ เจธเฉฐเจญเจต เจนเฉˆ (เจ‡เจน เจ‡เฉฑเจ• เจชเจฒเฉฑเจธ เจธเฉ€, เจชเจฐ เจฎเฉˆเจ‚ เจ‡เจธเจฆเฉ‡ เจฒเจˆ เจฌเจนเฉเจค เจฒเฉœเจฟเจ†)เฅค

เจซเจฟเจฒเจŸเจฐเจ†เจธเจŸเฉเจฐเฉ‡เจฒเฉ€เจ† เจตเจฟเฉฑเจš เจจเจพเจ—เฉ€เจ“เจธ เจคเฉ‹เจ‚ เจ†เจˆเจธเจฟเฉฐเจ—เจพ 2 เจคเฉฑเจ• เจชเฉเจฐเจตเจพเจธ

เจธเจ•เฉเจฐเฉ‹เจฒ เจชเฉฑเจŸเฉ€ เจฆเฉ‡ เจ†เจ•เจพเจฐ เจ…เจคเฉ‡ เจธเจ•เฉเจฐเฉ‹เจฒ เจ–เฉ‡เจคเจฐ เจฆเฉ‡ เจ†เจ•เจพเจฐ เจฆเฉ‡ เจ…เจจเฉเจชเจพเจค เจฆเจพ เจ…เฉฐเจฆเจพเจœเจผเจพ เจฒเจ—เจพเจ“เฅค

เจฆเฉ‚เจœเจพ, เจนเจฐ เจ•เฉ‹เจˆ เจ‡เฉฑเจ• เจฎเจพเจจเฉ€เจŸเจฐ 'เจคเฉ‡ เจชเฉ‚เจฐเฉ‡ เจฌเฉเจจเจฟเจ†เจฆเฉ€ เจขเจพเจ‚เจšเฉ‡ เจจเฉ‚เฉฐ เจฆเฉ‡เจ–เจฃ เจฒเจˆ เจตเจฐเจคเจฟเจ† เจœเจพเจ‚เจฆเจพ เจนเฉˆ, เจ•เจฟเจ‰เจ‚เจ•เจฟ CheckMk เจคเฉเจนเจพเจจเฉ‚เฉฐ เจ•เจˆ Nagios เจฎเฉ‡เจœเจผเจฌเจพเจจเจพเจ‚ เจจเจพเจฒ เจ•เฉฐเจฎ เจ•เจฐเจจ เจฆเฉ€ เจ‡เจœเจพเจœเจผเจค เจฆเจฟเฉฐเจฆเจพ เจนเฉˆ, เจชเจฐ Icinga เจ‡เฉฐเจŸเจฐเจซเฉ‡เจธ เจ…เจœเจฟเจนเจพ เจจเจนเฉ€เจ‚ เจ•เจฐ เจธเจ•เจฟเจ† (เจ…เจธเจฒ เจตเจฟเฉฑเจš, เจ‡เจน เจนเฉ‹ เจธเจ•เจฆเจพ เจนเฉˆ, เจชเจฐ เจนเฉ‡เจ เจพเจ‚ เจ‡เจธ 'เจคเฉ‡ เจนเฉ‹เจฐ)เฅค เจฌเจฆเจฒ เจจเฉ‚เฉฐ เจฅเฉเจฐเฉเจ• เจ•เจฟเจนเจพ เจœเจพเจ‚เจฆเจพ เจธเฉ€, เจชเจฐ เจ‡เจธ เจฆเฉ‡ เจกเจฟเจœเจผเจพเจˆเจจ เจจเฉ‡ เจŸเฉ€เจฎ 'เจคเฉ‡ เจ‡เฉฑเจ• เจจเฉ‚เฉฐ เจ›เฉฑเจก เจ•เฉ‡ เจนเจฐ เจ•เจฟเจธเฉ‡ เจจเฉ‚เฉฐ เจ—เฉˆเจ— เจฌเจฃเจพ เจฆเจฟเฉฑเจคเจพ - เจœเจฟเจธ เจจเฉ‡ เจ‡เจธเจฆเจพ เจธเฉเจเจพเจ… เจฆเจฟเฉฑเจคเจพ (เจฎเฉˆเจ‚ เจจเจนเฉ€เจ‚)เฅค

เจฅเจฐเฉ‚เจ• เจญเฉฑเจ เฉ€ เจตเจฟเฉฑเจš - เจŸเฉ€เจฎ เจฆเจพ เจธเจฐเจฌเจธเฉฐเจฎเจคเฉ€ เจจเจพเจฒ เจซเฉˆเจธเจฒเจพเจ†เจธเจŸเฉเจฐเฉ‡เจฒเฉ€เจ† เจตเจฟเฉฑเจš เจจเจพเจ—เฉ€เจ“เจธ เจคเฉ‹เจ‚ เจ†เจˆเจธเจฟเฉฐเจ—เจพ 2 เจคเฉฑเจ• เจชเฉเจฐเจตเจพเจธ

เจ•เฉเจ เจฆเจฟเจจเจพเจ‚ เจฆเฉ‡ เจตเจฟเจšเจพเจฐ-เจตเจŸเจพเจ‚เจฆเจฐเฉ‡ เจคเฉ‹เจ‚ เจฌเจพเจ…เจฆ, เจฎเฉˆเจ‚ เจ•เจฒเฉฑเจธเจŸเจฐ เจจเจฟเจ—เจฐเจพเจจเฉ€ เจฆเจพ เจตเจฟเจšเจพเจฐ เจชเฉเจฐเจธเจคเจพเจตเจฟเจค เจ•เฉ€เจคเจพ, เจœเจฆเฉ‹เจ‚ เจ‰เจคเจชเจพเจฆเจจ เจœเจผเฉ‹เจจ เจตเจฟเฉฑเจš เจ‡เฉฑเจ• เจฎเจพเจธเจŸเจฐ เจนเฉ‹เจธเจŸ เจ…เจคเฉ‡ เจฆเฉ‹ เจธเจฒเฉ‡เจต เจนเฉเฉฐเจฆเฉ‡ เจนเจจ - เจ‡เฉฑเจ• เจฆเฉ‡เจต/เจŸเฉˆเจธเจŸ เจตเจฟเฉฑเจš เจ…เจคเฉ‡ เจ‡เฉฑเจ• เจฌเจพเจนเจฐเฉ€ เจนเฉ‹เจธเจŸ เจฆเฉ‚เจœเฉ‡ เจชเฉเจฐเจฆเจพเจคเจพ 'เจคเฉ‡ เจธเจฅเจฟเจค เจนเฉเฉฐเจฆเจพ เจนเฉˆ เจคเจพเจ‚ เจœเฉ‹ เจธเจพเจกเฉ€ เจจเจฟเจ—เจฐเจพเจจเฉ€ เจ•เฉ€เจคเฉ€ เจœเจพ เจธเจ•เฉ‡เฅค เจ‡เฉฑเจ• เจ—เจพเจนเจ• เจœเจพเจ‚ เจ‡เฉฑเจ• เจฌเจพเจนเจฐเฉ€ เจจเจฟเจฐเฉ€เจ–เจ• เจฆเฉ‡ เจฆเฉเจฐเจฟเจธเจผเจŸเฉ€เจ•เฉ‹เจฃ เจคเฉ‹เจ‚ เจธเฉ‡เจตเจพเจตเจพเจ‚เฅค เจ‡เจธ เจธเฉฐเจฐเจšเจจเจพ เจจเฉ‡ เจ‡เฉฑเจ• เจตเฉˆเฉฑเจฌ เจ‡เฉฐเจŸเจฐเจซเฉ‡เจธ เจตเจฟเฉฑเจš เจธเจพเจฐเฉ€เจ†เจ‚ เจธเจฎเฉฑเจธเจฟเจ†เจตเจพเจ‚ เจจเฉ‚เฉฐ เจฆเฉ‡เจ–เจฃเจพ เจธเฉฐเจญเจต เจฌเจฃเจพเจ‡เจ† เจ…เจคเฉ‡ เจ•เจพเจซเจผเฉ€ เจตเจงเฉ€เจ† เจขเฉฐเจ— เจจเจพเจฒ เจ•เฉฐเจฎ เจ•เฉ€เจคเจพ, เจชเจฐ เจ•เจ เจชเฉเจคเจฒเฉ€... เจ•เจ เจชเฉเจคเจฒเฉ€ เจจเจพเจฒ เจธเจฎเฉฑเจธเจฟเจ† เจ‡เจน เจธเฉ€ เจ•เจฟ เจฎเจพเจธเจŸเจฐ เจนเฉ‹เจธเจŸ เจจเฉ‚เฉฐ เจนเฉเจฃ เจธเจฟเจธเจŸเจฎ เจตเจฟเฉฑเจš เจธเจพเจฐเฉ‡ เจฎเฉ‡เจœเจผเจฌเจพเจจเจพเจ‚ เจ…เจคเฉ‡ เจธเฉ‡เจตเจพเจตเจพเจ‚/เจšเฉˆเจ•เจพเจ‚ เจฌเจพเจฐเฉ‡ เจชเจคเจพ เจนเฉ‹เจฃเจพ เจšเจพเจนเฉ€เจฆเจพ เจธเฉ€ เจ…เจคเฉ‡ เจ‰เจนเจจเจพเจ‚ เจจเฉ‚เฉฐ เจœเจผเฉ‹เจจเจพเจ‚ (dev-test, staging-prod, ext) เจตเจฟเจšเจ•เจพเจฐ เจตเฉฐเจกเจฃ เจฒเจˆ, เจชเจฐ Icinga API เจฐเจพเจนเฉ€เจ‚ เจคเจฌเจฆเฉ€เจฒเฉ€เจ†เจ‚ เจญเฉ‡เจœเจฃ เจตเจฟเฉฑเจš เจ•เฉเจ เจธเจ•เจฟเฉฐเจŸ เจฒเฉฑเจ—เจฆเฉ‡ เจนเจจ, เจชเจฐ เจธเจพเจฐเฉ‡ เจฎเฉ‡เจœเจผเจฌเจพเจจเจพเจ‚ เจฒเจˆ เจธเจพเจฐเฉ€เจ†เจ‚ เจธเฉ‡เจตเจพเจตเจพเจ‚ เจฆเฉ€ เจ•เจ เจชเฉเจคเจฒเฉ€ เจกเจพเจ‡เจฐเฉˆเจ•เจŸเจฐเฉ€ เจจเฉ‚เฉฐ เจ•เฉฐเจชเจพเจ‡เจฒ เจ•เจฐเจจ เจตเจฟเฉฑเจš เจ•เฉเจ เจฎเจฟเฉฐเจŸ เจฒเฉฑเจ—เจฆเฉ‡ เจนเจจเฅค เจ‡เจน เจ…เจœเฉ‡ เจตเฉ€ เจฎเฉ‡เจฐเฉ‡ 'เจคเฉ‡ เจฆเฉ‹เจธเจผ เจฒเจ—เจพเจ‡เจ† เจœเจพ เจฐเจฟเจนเจพ เจนเฉˆ, เจนเจพเจฒเจพเจ‚เจ•เจฟ เจฎเฉˆเจ‚ เจชเจนเจฟเจฒเจพเจ‚ เจนเฉ€ เจ•เจˆ เจตเจพเจฐ เจธเจฎเจเจพเจ‡เจ† เจนเฉˆ เจ•เจฟ เจธเจญ เจ•เฉเจ เจ•เจฟเจตเฉ‡เจ‚ เจ•เฉฐเจฎ เจ•เจฐเจฆเจพ เจนเฉˆ เจ…เจคเฉ‡ เจ‡เจน เจธเจญ เจ•เฉเจ เจ‡เฉฐเจจเจพ เจธเจฎเจพเจ‚ เจ•เจฟเจ‰เจ‚ เจฒเฉˆเจ‚เจฆเจพ เจนเฉˆเฅค

เจคเฉ€เจธเจฐเจพ, เจ‡เฉฑเจฅเฉ‡ เจธเจจเฉ‹เจซเจฒเฉ‡เจ•เจธ เจฆเจพ เจ‡เฉฑเจ• เจธเจฎเฉ‚เจน เจนเฉˆ - เจ‰เจน เจšเฉ€เจœเจผเจพเจ‚ เจœเฉ‹ เจ†เจฎ เจชเฉเจฐเจฃเจพเจฒเฉ€ เจคเฉ‹เจ‚ เจตเฉฑเจ–เจฐเฉ€เจ†เจ‚ เจนเจจ เจ•เจฟเจ‰เจ‚เจ•เจฟ เจ‰เจนเจจเจพเจ‚ เจ•เฉ‹เจฒ เจ•เฉเจ เจ–เจพเจธ เจนเฉˆ, เจ‡เจธ เจฒเจˆ เจ‰เจนเจจเจพเจ‚ 'เจคเฉ‡ เจ†เจฎ เจจเจฟเจฏเจฎ เจฒเจพเจ—เฉ‚ เจจเจนเฉ€เจ‚ เจนเฉเฉฐเจฆเฉ‡ เจนเจจเฅค เจ‡เจน เจ‡เฉฑเจ• เจซเจฐเฉฐเจŸเจฒ เจ…เจŸเฉˆเจ• เจฆเฉเจ†เจฐเจพ เจนเฉฑเจฒ เจ•เฉ€เจคเจพ เจ—เจฟเจ† เจธเฉ€ - เจœเฉ‡เจ•เจฐ เจ…เจฒเจพเจฐเจฎ เจนเจจ, เจชเจฐ เจ…เจธเจฒ เจตเจฟเฉฑเจš เจธเจญ เจ•เฉเจ เจ•เฉเจฐเจฎ เจตเจฟเฉฑเจš เจนเฉˆ, เจคเจพเจ‚ เจฎเฉˆเจจเฉ‚เฉฐ เจกเฉ‚เฉฐเจ˜เจพเจˆ เจจเจพเจฒ เจ–เฉ‹เจฆเจฃ เจฆเฉ€ เจœเจผเจฐเฉ‚เจฐเจค เจนเฉˆ เจ…เจคเฉ‡ เจ‡เจน เจชเจคเจพ เจฒเจ—เจพเจ‰เจฃ เจฆเฉ€ เจœเจผเจฐเฉ‚เจฐเจค เจนเฉˆ เจ•เจฟ เจ‡เจน เจฎเฉˆเจจเฉ‚เฉฐ เจ•เจฟเจ‰เจ‚ เจธเฉเจšเฉ‡เจค เจ•เจฐเจฆเจพ เจนเฉˆ, เจนเจพเจฒเจพเจ‚เจ•เจฟ เจ‡เจน เจจเจนเฉ€เจ‚ เจนเฉ‹เจฃเจพ เจšเจพเจนเฉ€เจฆเจพ เจนเฉˆ. เจœเจพเจ‚ เจ‡เจธ เจฆเฉ‡ เจ‰เจฒเจŸ - เจ•เจฟเจ‰เจ‚ เจจเจพเจ—เฉ€เจ“เจธ เจ˜เจฌเจฐเจพเจ‰เจ‚เจฆเฉ‡ เจนเจจ, เจชเจฐ เจ†เจˆเจธเจฟเฉฐเจ—เจพ เจจเจนเฉ€เจ‚ เจ•เจฐเจฆเจพ.

เจšเฉŒเจฅเจพ, เจจเจพเจ—เจฟเจ“เจธ เจจเฉ‡ เจฎเฉ‡เจฐเฉ‡ เจคเฉ‹เจ‚ เจชเจนเจฟเจฒเจพเจ‚ เจ‡เฉฑเจฅเฉ‡ เจคเจฟเฉฐเจจ เจธเจพเจฒเจพเจ‚ เจฒเจˆ เจ•เฉฐเจฎ เจ•เฉ€เจคเจพ เจ…เจคเฉ‡ เจธเจผเฉเจฐเฉ‚ เจตเจฟเฉฑเจš เจฎเฉ‡เจฐเฉ‡ เจจเจตเฉ‡เจ‚ เจนเจฟเจชเจธเจŸเจฐ เจธเจฟเจธเจŸเจฎ เจจเจพเจฒเฉ‹เจ‚ เจ‰เจธ เจตเจฟเฉฑเจš เจตเจงเฉ‡เจฐเฉ‡ เจญเจฐเฉ‹เจธเจพ เจธเฉ€, เจ‡เจธ เจฒเจˆ เจนเจฐ เจตเจพเจฐ เจ†เจˆเจธเจฟเฉฐเจ—เจพ เจจเฉ‡ เจ˜เจฌเจฐเจพเจนเจŸ เจชเฉˆเจฆเจพ เจ•เฉ€เจคเฉ€, เจ•เจฟเจธเฉ‡ เจจเฉ‡ เจตเฉ€ เจ•เฉเจ เจจเจนเฉ€เจ‚ เจ•เฉ€เจคเจพ เจœเจฆเฉ‹เจ‚ เจคเฉฑเจ• เจจเจพเจ—เฉ€เจ“เจธ เจ‰เจธเฉ‡ เจฎเฉเฉฑเจฆเฉ‡ เจฌเจพเจฐเฉ‡ เจ‰เจคเจธเจผเจพเจนเจฟเจค เจจเจนเฉ€เจ‚ เจนเฉเฉฐเจฆเจพเฅค เจชเจฐ เจฌเจนเฉเจค เจ˜เฉฑเจŸ เจนเฉ€ เจ†เจˆเจธเจฟเฉฐเจ—เจพ เจจเฉ‡ เจจเจพเจ—เจฟเจ“เจธ เจคเฉ‹เจ‚ เจชเจนเจฟเจฒเจพเจ‚ เจ…เจธเจฒ เจ…เจฒเจพเจฐเจฎ เจคเจฟเจ†เจฐ เจ•เฉ€เจคเฉ‡ เจนเจจ เจ…เจคเฉ‡ เจฎเฉˆเจ‚ เจ‡เจธเจจเฉ‚เฉฐ เจ‡เฉฑเจ• เจ—เฉฐเจญเฉ€เจฐ เจธเจฎเฉฑเจธเจฟเจ† เจธเจฎเจเจฆเจพ เจนเจพเจ‚, เจœเจฟเจธ เจฌเจพเจฐเฉ‡ เจฎเฉˆเจ‚ "เจธเจฟเฉฑเจŸเจพ" เจญเจพเจ— เจตเจฟเฉฑเจš เจ—เฉฑเจฒ เจ•เจฐเจพเจ‚เจ—เจพเฅค

เจจเจคเฉ€เจœเฉ‡ เจตเจœเฉ‹เจ‚, เจ•เจฎเจฟเจธเจผเจจเจฟเฉฐเจ— เจตเจฟเฉฑเจš 5 เจฎเจนเฉ€เจจเจฟเจ†เจ‚ เจคเฉ‹เจ‚ เจตเฉฑเจง เจฆเฉ‡เจฐเฉ€ เจนเฉ‹เจˆ (28 เจœเฉ‚เจจ, 2018 เจฒเจˆ เจฏเฉ‹เจœเจจเจพเจฌเฉฑเจง, เจ…เจธเจฒ เจตเจฟเฉฑเจš - 3 เจฆเจธเฉฐเจฌเจฐ, 2018), เจฎเฉเฉฑเจ– เจคเฉŒเจฐ 'เจคเฉ‡ "เจชเฉˆเจฐเจฟเจŸเฉ€ เจœเจพเจ‚เจš" เจฆเฉ‡ เจ•เจพเจฐเจจ - เจ‰เจน เจฌเจ•เจตเจพเจธ เจœเจฆเฉ‹เจ‚ เจจเจพเจ—เฉ€เจ“เจธ เจตเจฟเฉฑเจš เจ•เจˆ เจธเฉ‡เจตเจพเจตเจพเจ‚ เจนเจจ เจœเจฟเจจเฉเจนเจพเจ‚ เจฌเจพเจฐเฉ‡ เจ•เฉ‹เจˆ เจจเจนเฉ€เจ‚ เจœเจพเจฃเจฆเจพเฅค เจฌเจพเจฐเฉ‡ เจชเจฟเจ›เจฒเฉ‡ เจฆเฉ‹ เจธเจพเจฒเจพเจ‚ เจคเฉ‹เจ‚ เจ•เฉเจ เจจเจนเฉ€เจ‚ เจธเฉเจฃเจฟเจ† เจนเฉˆ, เจชเจฐ เจนเฉเจฃเฉ‡ เจ‰เจจเฉเจนเจพเจ‚ เจจเฉ‡ เจฌเจฟเจจเจพเจ‚ เจ•เจฟเจธเฉ‡ เจ•เจพเจฐเจจ เจฆเฉ‡ เจ†เจฒเฉ‹เจšเจจเจพ เจ•เฉ€เจคเฉ€ เจ…เจคเฉ‡ เจฎเฉˆเจจเฉ‚เฉฐ เจ‡เจน เจฆเฉฑเจธเจฃเจพ เจชเจฟเจ† เจ•เจฟ เจ‰เจน เจฎเฉ‡เจฐเฉ‡ เจชเฉˆเจจเจฒ 'เจคเฉ‡ เจ•เจฟเจ‰เจ‚ เจจเจนเฉ€เจ‚ เจธเจจ เจ…เจคเฉ‡ เจ‰เจจเฉเจนเจพเจ‚ เจจเฉ‚เฉฐ เจ†เจˆเจธเจฟเฉฐเจ—เจพ เจตเจฟเฉฑเจš เจธเจผเจพเจฎเจฒ เจ•เจฐเจจเจพ เจชเจฟเจ† เจคเจพเจ‚ เจ•เจฟ "เจชเฉˆเจฐเจฟเจŸเฉ€ เจœเจพเจ‚เจš เจชเฉ‚เจฐเจพ" (เจจเจพเจ—เจฟเจ“เจธ เจตเจฟเฉฑเจš เจธเจพเจฐเฉ€เจ†เจ‚ เจธเฉ‡เจตเจพเจตเจพเจ‚/เจšเฉˆเจ•เจพเจ‚ เจ†เจˆเจธเจฟเฉฐเจ—เจพ เจตเจฟเฉฑเจš เจธเฉ‡เจตเจพเจตเจพเจ‚/เจšเฉˆเจ•เจพเจ‚ เจจเจพเจฒ เจฎเฉ‡เจฒ เจ–เจพเจ‚เจฆเฉ€เจ†เจ‚ เจนเจจ)

เจฒเจพเจ—เฉ‚ เจ•เจฐเจจ:
เจชเจนเจฟเจฒเจพ เจ•เฉ‹เจก เจฌเจจเจพเจฎ เจกเจพเจŸเจพ เจฏเฉเฉฑเจง เจนเฉˆ, เจœเจฟเจตเฉ‡เจ‚ เจ•เจฟ เจ•เจ เจชเฉเจคเจฒเฉ€ เจธเจผเฉˆเจฒเฉ€. เจธเจพเจฐเจพ เจกเจพเจŸเจพ, เจฌเจฟเจฒเจ•เฉเจฒ เจธเจญ เจ•เฉเจ, เจนเฉ€เจฐเจพ เจตเจฟเฉฑเจš เจนเฉ‹เจฃเจพ เจšเจพเจนเฉ€เจฆเจพ เจนเฉˆ เจ…เจคเฉ‡ เจนเฉ‹เจฐ เจ•เฉเจ เจจเจนเฉ€เจ‚เฅค เจธเจพเจฐเจพ เจ•เฉ‹เจก .pp เจซเจพเจˆเจฒเจพเจ‚ เจตเจฟเฉฑเจš เจนเฉˆเฅค เจตเฉ‡เจฐเฉ€เจเจฌเจฒ, เจเจฌเจธเจŸเจฐเฉˆเจ•เจธเจผเจจ, เจซเฉฐเจ•เจธเจผเจจ - เจธเจญ เจ•เฉเจ pp เจตเจฟเฉฑเจš เจœเจพเจ‚เจฆเจพ เจนเฉˆเฅค
เจจเจคเฉ€เจœเฉ‡ เจตเจœเฉ‹เจ‚, เจธเจพเจกเฉ‡ เจ•เฉ‹เจฒ เจตเจฐเจšเฉเจ…เจฒ เจฎเจธเจผเฉ€เจจเจพเจ‚ (เจฒเจฟเจ–เจฃ เจฆเฉ‡ เจธเจฎเฉ‡เจ‚ 165) เจ…เจคเฉ‡ 68 เจตเฉˆเจฌ เจเจชเจฒเฉ€เจ•เฉ‡เจธเจผเจจเจพเจ‚ เจนเจจ เจœเจฟเจจเฉเจนเจพเจ‚ เจฆเฉ€ เจ•เจพเจฐเจ—เฉเจœเจผเจพเจฐเฉ€ เจ…เจคเฉ‡ SSL เจธเจฐเจŸเฉ€เจซเจฟเจ•เฉ‡เจŸเจพเจ‚ เจฆเฉ€ เจตเฉˆเจงเจคเจพ เจฒเจˆ เจจเจฟเจ—เจฐเจพเจจเฉ€ เจ•เจฐเจจ เจฆเฉ€ เจฒเฉ‹เฉœ เจนเฉˆเฅค เจชเจฐ เจ‡เจคเจฟเจนเจพเจธเจ• เจนเฉ‡เจฎเฉ‹เจฐเฉ‹เจ‡เจกเจœเจผ เจฆเฉ‡ เจ•เจพเจฐเจจ, เจจเจฟเจ—เจฐเจพเจจเฉ€ เจเจชเจฒเฉ€เจ•เฉ‡เจธเจผเจจเจพเจ‚ เจฒเจˆ เจœเจพเจฃเจ•เจพเจฐเฉ€ เจ‡เฉฑเจ• เจตเฉฑเจ–เจฐเฉ€ เจ—เจฟเจŸเจฒเฉˆเจฌ เจฐเจฟเจชเฉ‹เจœเจผเจŸเจฐเฉ€ เจคเฉ‹เจ‚ เจฒเจˆ เจœเจพเจ‚เจฆเฉ€ เจนเฉˆ เจ…เจคเฉ‡ เจ•เจ เจชเฉเจคเจฒเฉ€ 3 เจคเฉ‹เจ‚ เจกเจพเจŸเจพ เจซเจพเจฐเจฎเฉˆเจŸ เจจเจนเฉ€เจ‚ เจฌเจฆเจฒเจฟเจ† เจ—เจฟเจ† เจนเฉˆ, เจœเฉ‹ เจ•เจฟ เจธเฉฐเจฐเจšเจจเจพ เจตเจฟเฉฑเจš เจตเจพเจงเฉ‚ เจ—เฉเฉฐเจเจฒเจคเจพ เจชเฉˆเจฆเจพ เจ•เจฐเจฆเจพ เจนเฉˆเฅค

เจเจชเจฒเฉ€เจ•เฉ‡เจธเจผเจจเจพเจ‚ เจฒเจˆ เจ•เจ เจชเฉเจคเจฒเฉ€-เจ•เฉ‹เจก, เจคเฉเจนเจพเจกเฉ€เจ†เจ‚ เจ…เฉฑเจ–เจพเจ‚ เจฆเฉ€ เจฐเฉฑเจ–เจฟเจ† เจ•เจฐเฉ‹

define profiles::services::monitoring::docker_apps(
  Hash $app_list,
  Hash $apps_accessible_from,
  Hash $apps_access_list,
  Hash $webhost_defaults,
  Hash $webcheck_defaults,
  Hash $service_overrides,
  Hash $targets,
  Hash $app_checks,
  )
{
#### APPS ####
  $zone = $name
  $app_list.each | String $app_name, Hash $app_data |
  {

    $notify_group = { 'notify_group' => ($webcheck_defaults[$zone]['notify_group'] + pick($app_data['notify_group'], {} )) } # adds notifications for default group (systems) + any group defined in int/pm_docker_apps.eyaml

    $data = merge($webhost_defaults, $apps_accessible_from, $app_data)

    $site_domain = $app_data['site_domain']

    $regexp = pick($app_data['check_regex'], 'html')        # Pick a regex to check

    $check_url = $app_data['check_url'] ? {
      undef   => { 'http_uri' => '/' },
      default => { 'http_uri' => $app_data['check_url'] }
    }

    $check_regex = $regexp ?{
      'absent' => {},
      default  => {'http_expect_body_regex' => $regexp}
    }

    $site_domain.each | String $vhost, Hash $vdata | {        # Split an app by domains if there are two or more
      $vhost_name = {'http_vhost' => $vhost}

      $vars = $data['vars'] + $vhost_name + $check_regex + $check_url

      $web_ipaddress = is_array($vdata['web_ipaddress']) ? {  # Make IP-address an array if it's not, because askizzy has 2 ips and it's an array
        true  => $vdata['web_ipaddress'],
        false => [$vdata['web_ipaddress']],
      }

      $access_from_zones = [$zone] + $apps_access_list[$data['accessible_from']] # Merge default zone (where the app is defined) and extra zones if they exist
      $web_ipaddress.each | String $ip_address | {            # For each IP (if we have multiple)
        $suffix = length($web_ipaddress) ? {                  # If we have more than one - add IP as a suffix to this hostname to avoid duplicating resources
          1       => '',
          default => "_${ip_address}"
        }
        $octets = split($ip_address, '.')
        $ip_tag = "${octets[2]}.${octets[3]}" # Using last octet only causes a collision between nginx-vip 203.15.70.94 and ext. ip 49.255.194.94

        $access_from_zones.each | $zone_prefix |{
          $zone_target = $targets[$zone_prefix]

          $nginx_vip_name = "${zone_prefix}_nginx-vip-${ip_tag}" # If it's a host for ext - prefix becomes 'ext_' (ext_nginx-vip...)
          $nginx_host_vip = {
            $nginx_vip_name => {
              ensure        => present,
              target        => $zone_target,
              address       => $ip_address,
              check_command => 'hostalive',
              groups        => ['nginx_vip',],
            }
          }

          $ssl_vars = $app_checks['ssl']
          $regex_vars = $app_checks['http'] + $vars + $webcheck_defaults[$zone] + $notify_group

          if !defined( Profiles::Services::Monitoring::Host[$nginx_vip_name] ) {
          ensure_resources('profiles::services::monitoring::host', $nginx_host_vip)
          }

          if !defined( Icinga2::Object::Service["${nginx_vip_name}_ssl"] ) {
            icinga2::object::service {"${nginx_vip_name}_ssl":
              ensure         => $data['ensure'],
              assign         => ["host.name == $nginx_vip_name",],
              groups         => ['webchecks',],
              check_command  => 'ssl',
              check_interval => $service_overrides['ssl']['check_interval'],
              target         => $targets['services'],
              apply          => true,
              vars           => $ssl_vars
            }
          }
          if $regexp != 'absent'{
            if !defined(Icinga2::Object::Service["${vhost}${$suffix} regex"]){
              icinga2::object::service {"${vhost}${$suffix} regex":
                ensure          => $data['ensure'],
                assign          => ["match(*_nginx-vip-${ip_tag}, host.name)",],
                groups          => ['webchecks',],
                check_command   => 'http',
                check_interval  => $service_overrides['regex']['check_interval'],
                target          => $targets['services'],
                enable_flapping => true,
                apply           => true,
                vars            => $regex_vars
              }
            }
          }
        }
      }
    }
  }
}

เจฎเฉ‡เจœเจผเจฌเจพเจจเจพเจ‚ เจ…เจคเฉ‡ เจธเฉ‡เจตเจพเจตเจพเจ‚ เจฒเจˆ เจ•เฉŒเจ‚เจซเจฟเจ—เจฐเฉ‡เจธเจผเจจ เจ•เฉ‹เจก เจตเฉ€ เจญเจฟเจ†เจจเจ• เจฆเจฟเจ–เจพเจˆ เจฆเจฟเฉฐเจฆเจพ เจนเฉˆ:

monitoring/config.pp


class profiles::services::monitoring::config(
  Array $default_config,
  Array $hostgroups,
  Hash $hosts = {},
  Hash $host_defaults,
  Hash $services,
  Hash $service_defaults,
  Hash $service_overrides,
  Hash $webcheck_defaults,
  Hash $servicegroups,
  String $servicegroup_target,
  Hash $user_defaults,
  Hash $users,
  Hash $oncall,
  Hash $usergroup_defaults,
  Hash $usergroups,
  Hash $notifications,
  Hash $notification_defaults,
  Hash $notification_commands,
  Hash $timeperiods,
  Hash $webhost_defaults,
  Hash $apps_access_list,
  Hash $check_commands,
  Hash $hosts_api = {},
  Hash $targets = {},
  Hash $host_api_defaults = {},
)
{

  # Profiles::Services::Monitoring::Hostgroup <<| |>> # will be enabled when we move to icinga completely
#### APPS ####
  case $location {
    'int', 'ext': {
      $apps_by_zone = {}
    }
    'pm': {
      $int_apps         = hiera('int_docker_apps')
      $int_app_defaults = hiera('int_docker_app_common')

      $st_apps          = hiera('staging_docker_apps')
      $srs_apps         = hiera('pm_docker_apps_srs')
      $pm_apps          = hiera('pm_docker_apps') + $st_apps + $srs_apps
      $pm_app_defaults  = hiera('pm_docker_app_common')

      $apps_by_zone = {
        'int' => $int_apps,
        'pm'  => $pm_apps,
      }

      $app_access_by_zone = {
        'int' => {'accessible_from' => $int_app_defaults['accessible_from']},
        'pm'  => {'accessible_from' => $pm_app_defaults['accessible_from']},
      }
    }

    default: {
      fail('Please ensure the node has $location fact set (int, pm, ext)')
    }
  }

  file { '/etc/icinga2/conf.d/':
    ensure  => directory,
    recurse => true,
    purge   => true,
    owner   => 'icinga',
    group   => 'icinga',
    mode    => '0750',
    notify  => Service['icinga2'],
  }

  $default_config.each | String $file_name |{
    file {"/etc/icinga2/conf.d/${file_name}":
      ensure => present,
      source => "puppet:///modules/profiles/services/monitoring/default_config/${file_name}",
      owner  => 'icinga',
      group  => 'icinga',
      mode    => '0640',
    }
  }

  $app_checks = {
    'ssl' => $services['webchecks']['checks']['ssl']['vars'],
    'http' => $services['webchecks']['checks']['http_regexp']['vars']
  }

  $apps_by_zone.each | String $zone, Hash $app_list | {
    profiles::services::monitoring::docker_apps{$zone:
      app_list             => $app_list,
      apps_accessible_from => $app_access_by_zone[$zone],
      apps_access_list     => $apps_access_list,
      webhost_defaults     => $webhost_defaults,
      webcheck_defaults    => $webcheck_defaults,
      service_overrides    => $service_overrides,
      targets              => $targets,
      app_checks           => $app_checks,
    }
  }

####    HOSTS    ####

  # Profiles::Services::Monitoring::Host <<| |>> # This is for spaceship invasion when it's ready.
  $hosts_has_large_disks = query_nodes('mountpoints.*.size_bytes >= 1099511627776')

  $hosts.each | String $hostgroup, Hash $list_of_hosts_with_settings | {           # Splitting site lists by hostgroups - docker_host/gluster_host/etc
    $list_of_hosts_in_group = $list_of_hosts_with_settings['hosts']
    $hostgroup_settings     = $list_of_hosts_with_settings['settings']
    $merged_hostgroup_settings = deep_merge($host_defaults, $list_of_hosts_with_settings['settings'])
    $list_of_hosts_in_group.each | String $host_name, Hash $host_settings |{  # Splitting grouplists by hosts
      # Is this host in the array $hosts_has_large_disks ? If so set host.vars.has_large_disks
      if ( $hosts_has_large_disks.reduce(false) | $found, $value| { ( $value =~ "^${host_name}" ) or $found } ) {
        $vars_has_large_disks = { 'has_large_disks' => true }
      } else {
        $vars_has_large_disks = {}
      }
      $host_data = deep_merge($merged_hostgroup_settings, $host_settings)
      $hostgroup_settings_vars = pick($hostgroup_settings['vars'], {})
      $host_settings_vars = pick($host_settings['vars'], {})
      $host_notify_group = delete_undef_values($host_defaults['vars']['notify_group'] + $hostgroup_settings_vars['notify_group'] + $host_settings_vars['notify_group'])
      $host_data_vars = delete_undef_values(deep_merge($host_data['vars'] , {'notify_group' => $host_notify_group}, $vars_has_large_disks)) # Merging vars separately

      $hostgroups = delete_undef_values([$hostgroup] + $host_data['groups'])

      profiles::services::monitoring::host{$host_name:
        ensure             => $host_data['ensure'],
        display_name       => $host_data['display_name'],
        address            => $host_data['address'],
        groups             => $hostgroups,
        target             => $host_data['target'],
        check_command      => $host_data['check_command'],
        check_interval     => $host_data['check_interval'],
        max_check_attempts => $host_data['max_check_attempts'],
        vars               => $host_data_vars,
        template           => $host_data['template'],
      }
    }
  }
  if !empty($hosts_api){                                                                # All hosts managed by API
    $hosts_api.each | String $zone, Hash $hosts_api_zone | {                            # Split api hosts by zones
      $hosts_api_zone.each | String $hostgroup, Hash $list_of_hosts_with_settings | {   # Splitting site lists by hostgroups - docker_host/gluster_host/etc
        $list_of_hosts_in_group = $list_of_hosts_with_settings['hosts']
        $hostgroup_settings     = $list_of_hosts_with_settings['settings']
        $merged_hostgroup_settings = deep_merge($host_api_defaults, $list_of_hosts_with_settings['settings'])
        $list_of_hosts_in_group.each | String $host_name, Hash $host_settings |{        # Splitting grouplists by hosts
          # Is this host in the array $hosts_has_large_disks ? If so set host.vars.has_large_disks
          if ( $hosts_has_large_disks.reduce(false) | $found, $value| { ( $value =~ "^${host_name}" ) or $found } ) {
            $vars_has_large_disks = { 'has_large_disks' => true }
          } else {
            $vars_has_large_disks = {}
          }
          $host_data = deep_merge($merged_hostgroup_settings, $host_settings)
          $hostgroup_settings_vars = pick($hostgroup_settings['vars'], {})

          $host_settings_vars = pick($host_settings['vars'], {})
          $host_api_notify_group = delete_undef_values($host_defaults['vars']['notify_group'] + $hostgroup_settings_vars['notify_group'] + $host_settings_vars['notify_group'])
          $host_data_vars = delete_undef_values(deep_merge($host_data['vars'] , {'notify_group' => $host_api_notify_group}, $vars_has_large_disks))
          $hostgroups = delete_undef_values([$hostgroup] + $host_data['groups'])

          if defined(Profiles::Services::Monitoring::Host[$host_name]){
            $hostname = "${host_name}_from_${zone}"
          }
          else
          {
            $hostname = $host_name
          }
          profiles::services::monitoring::host{$hostname:
            ensure             => $host_data['ensure'],
            display_name       => $host_data['display_name'],
            address            => $host_data['address'],
            groups             => $hostgroups,
            target             => "${host_data['target_base']}/${zone}/hosts.conf",
            check_command      => $host_data['check_command'],
            check_interval     => $host_data['check_interval'],
            max_check_attempts => $host_data['max_check_attempts'],
            vars               => $host_data_vars,
            template           => $host_data['template'],
          }
        }
      }
    }
  }

#### END OF HOSTS ####

####   SERVICES   ####

  $services.each | String $service_group, Hash $s_list |{             # Service_group and list of services in that group
    $service_list = $s_list['checks']                                 # List of actual checks, separately from SG settings
    $service_list.each | String $service_name, Hash $data |{

      $merged_defaults = merge($service_defaults, $s_list['settings']) # global service defaults + service group defaults
      $merged_data = merge($merged_defaults, $data)

      $settings_vars = pick($s_list['settings']['vars'], {})
      $this_service_vars = pick($data['vars'], {})
      $all_service_vars = delete_undef_values($service_defaults['vars'] + $settings_vars + $this_service_vars)

      # If we override default check_timeout, but not nrpe_timeout, make nrpe_timeout the same as check_timeout
      if ( $merged_data['check_timeout'] and ! $this_service_vars['nrpe_timeout'] ) {
        # NB: Icinga will convert 1m to 60 automatically!
        $nrpe = { 'nrpe_timeout' => $merged_data['check_timeout'] }
      } else {
        $nrpe = {}
      }

      # By default we use nrpe and all commands are run via nrpe. So vars.nrpe_command = $service_name is a default value
      # If it's server-side Icinga command - we don't need 'nrpe_command'
      # but there is no harm to have that var and the code is shorter

      if $merged_data['check_command'] == 'nrpe'{
        $check_command = $merged_data['vars']['nrpe_command'] ? {
          undef   => { 'nrpe_command' => $service_name },
          default => { 'nrpe_command' => $merged_data['vars']['nrpe_command'] }
        }
      }else{
        $check_command = {}
      }

      # Assembling $vars from Global Default service settings, servicegroup settings, this particular check settings and let's not forget nrpe settings.
      if $all_service_vars['graphite_template'] {
        $graphite_template = {'check_command' => $all_service_vars['graphite_template']}
      }else{
        $graphite_template = {'check_command' => $service_name}
      }
      $service_notify = [] + pick($settings_vars['notify_group'], []) + pick($this_service_vars['notify_group'], []) # pick is required everywhere, otherwise becomes "The value '' cannot be converted to Numeric"

      $service_notify_group = $service_notify ? {
        []      => $service_defaults['vars']['notify_group'],
        default => $service_notify
      } # Assing default group (systems) if no other groups are defined

      $vars = $all_service_vars + $nrpe + $check_command + $graphite_template + {'notify_group' => $service_notify_group}

      # This needs to be merged separately, because merging it as part of MERGED_DATA overwrites arrays instead of merging them, so we lose some "assign" and "ignore" values

      $assign = delete_undef_values($service_defaults['assign'] + $s_list['settings']['assign'] + $data['assign'])
      $ignore = delete_undef_values($service_defaults['ignore'] + $s_list['settings']['ignore'] + $data['ignore'])

      icinga2::object::service {$service_name:
        ensure             => $merged_data['ensure'],
        apply              => $merged_data['apply'],
        enable_flapping    => $merged_data['enable_flapping'],
        assign             => $assign,
        ignore             => $ignore,
        groups             => [$service_group],
        check_command      => $merged_data['check_command'],
        check_interval     => $merged_data['check_interval'],
        check_timeout      => $merged_data['check_timeout'],
        check_period       => $merged_data['check_period'],
        display_name       => $merged_data['display_name'],
        event_command      => $merged_data['event_command'],
        retry_interval     => $merged_data['retry_interval'],
        max_check_attempts => $merged_data['max_check_attempts'],
        target             => $merged_data['target'],
        vars               => $vars,
        template           => $merged_data['template'],
      }
    }
  }
#### END OF SERVICES ####

#### OTHER BORING STUFF ####

  $servicegroups.each | $servicegroup, $description |{
    icinga2::object::servicegroup{ $servicegroup:
      target       => $servicegroup_target,
      display_name => $description
    }
  }

  $hostgroups.each| String $hostgroup |{
    profiles::services::monitoring::hostgroup { $hostgroup:}
  }

  $notifications.each | String $name, Hash $settings |{

    $assign = pick($notification_defaults['assign'], []) + $settings['assign']
    $ignore = pick($notification_defaults['ignore'], []) + $settings['ignore']

    $merged_settings = $settings + $notification_defaults

    icinga2::object::notification{$name:
      target       => $merged_settings['target'],
      apply        => $merged_settings['apply'],
      apply_target => $merged_settings['apply_target'],
      command      => $merged_settings['command'],
      interval     => $merged_settings['interval'],
      states       => $merged_settings['states'],
      types        => $merged_settings['types'],
      assign       => delete_undef_values($assign),
      ignore       => delete_undef_values($ignore),
      user_groups  => $merged_settings['user_groups'],
      period       => $merged_settings['period'],
      vars         => $merged_settings['vars'],
    }
  }

  # Merging notification settings for users with other settings
  $users_oncall = deep_merge($users, $oncall)
  # Magic. Do not touch.
  create_resources('icinga2::object::user', $users_oncall, $user_defaults)
  create_resources('icinga2::object::usergroup', $usergroups, $usergroup_defaults)
  create_resources('icinga2::object::timeperiod',$timeperiods)
  create_resources('icinga2::object::checkcommand', $check_commands)
  create_resources('icinga2::object::notificationcommand', $notification_commands)

  profiles::services::sudoers { 'icinga_runs_ping_l2':
    ensure            => present,
    sudoersd_template => 'profiles/os/redhat/centos7/sudoers/icinga.erb',
  }

}

เจฎเฉˆเจ‚ เจ…เจœเฉ‡ เจตเฉ€ เจ‡เจนเจจเจพเจ‚ เจจเฉ‚เจกเจฒเจœเจผ 'เจคเฉ‡ เจ•เฉฐเจฎ เจ•เจฐ เจฐเจฟเจนเจพ เจนเจพเจ‚ เจ…เจคเฉ‡ เจœเจฟเฉฐเจจเจพ เจธเฉฐเจญเจต เจนเฉ‹ เจธเจ•เฉ‡ เจ‰เจนเจจเจพเจ‚ เจจเฉ‚เฉฐ เจฌเจฟเจนเจคเจฐ เจฌเจฃเจพ เจฐเจฟเจนเจพ เจนเจพเจ‚เฅค เจนเจพเจฒเจพเจ‚เจ•เจฟ, เจ‡เจน เจ‡เจน เจ•เฉ‹เจก เจธเฉ€ เจœเจฟเจธ เจจเฉ‡ เจธเจพเจจเฉ‚เฉฐ เจนเฉ€เจฐเจพ เจตเจฟเฉฑเจš เจ‡เฉฑเจ• เจธเจงเจพเจฐเจจ เจ…เจคเฉ‡ เจธเจฎเจเจฃ เจฏเฉ‹เจ— เจธเฉฐเจŸเฉˆเจ•เจธ เจฆเฉ€ เจตเจฐเจคเฉ‹เจ‚ เจ•เจฐเจจ เจฆเฉ€ เจ‡เจœเจพเจœเจผเจค เจฆเจฟเฉฑเจคเฉ€:

เจกเจพเจŸเจพ

profiles::services::monitoring::config::services:
  perf_checks:
    settings:
      check_interval: '2m'
      assign:
        - 'host.vars.type == linux'
    checks:
      procs: {}
      load: {}
      memory: {}
      disk:
        check_interval: '5m'
        vars:
          notification_period: '24x7'
      disk_iops:
        vars:
          notifications:
            - 'silent'
      cpu:
        vars:
          notifications:
            - 'silent'
      dns_fqdn:
        check_interval: '15m'
        ignore:
          - 'xenserver in host.groups'
        vars:
          notifications:
            - 'silent'
      iftraffic_nrpe:
        vars:
          notifications:
            - 'silent'
  logging:
    settings:
      assign:
        - 'logserver in host.groups'
    checks:
       rsyslog: {}
      nginx_limit_req_other: {}
      nginx_limit_req_s2s: {}
      nginx_limit_req_s2x: {}
      nginx_limit_req_srs: {}
     logstash: {}
      logstash_api:
        vars:
          notifications:
            - 'silent'

เจธเจพเจฐเฉ€เจ†เจ‚ เจœเจพเจ‚เจšเจพเจ‚ เจจเฉ‚เฉฐ เจธเจฎเฉ‚เจนเจพเจ‚ เจตเจฟเฉฑเจš เจตเฉฐเจกเจฟเจ† เจ—เจฟเจ† เจนเฉˆ, เจนเจฐเฉ‡เจ• เจธเจฎเฉ‚เจน เจตเจฟเฉฑเจš เจกเจฟเจซเฉŒเจฒเจŸ เจธเฉˆเจŸเจฟเฉฐเจ—เจพเจ‚ เจนเฉเฉฐเจฆเฉ€เจ†เจ‚ เจนเจจ เจœเจฟเจตเฉ‡เจ‚ เจ•เจฟ เจ‡เจนเจจเจพเจ‚ เจšเฉˆเจ•เจพเจ‚ เจจเฉ‚เฉฐ เจ•เจฟเฉฑเจฅเฉ‡ เจ…เจคเฉ‡ เจ•เจฟเฉฐเจจเฉ€ เจตเจพเจฐ เจšเจฒเจพเจ‰เจฃเจพ เจนเฉˆ, เจ•เจฟเจนเฉœเฉ€เจ†เจ‚ เจธเฉ‚เจšเจจเจพเจตเจพเจ‚ เจญเฉ‡เจœเจฃเฉ€เจ†เจ‚ เจนเจจ เจ…เจคเฉ‡ เจ•เจฟเจธ เจจเฉ‚เฉฐ เจญเฉ‡เจœเจฃเฉ€เจ†เจ‚ เจนเจจเฅค

เจนเจฐเฉ‡เจ• เจšเฉˆเจ• เจตเจฟเฉฑเจš, เจคเฉเจธเฉ€เจ‚ เจ•เจฟเจธเฉ‡ เจตเฉ€ เจตเจฟเจ•เจฒเจช เจจเฉ‚เฉฐ เจ“เจตเจฐเจฐเจพเจˆเจก เจ•เจฐ เจธเจ•เจฆเฉ‡ เจนเฉ‹, เจ…เจคเฉ‡ เจ‡เจน เจธเจญ เจ†เจ–เจฟเจฐเจ•เจพเจฐ เจธเจฎเฉเฉฑเจšเฉ‡ เจคเฉŒเจฐ 'เจคเฉ‡ เจธเจพเจฐเฉ€เจ†เจ‚ เจœเจพเจ‚เจšเจพเจ‚ เจฆเฉ€เจ†เจ‚ เจกเจฟเจซเฉŒเจฒเจŸ เจธเฉˆเจŸเจฟเฉฐเจ—เจพเจ‚ เจจเฉ‚เฉฐ เจœเฉ‹เฉœเจฆเจพ เจนเฉˆเฅค เจ‡เจธ เจฒเจˆ เจ…เจœเจฟเจนเฉ€ เจฌเจ•เจตเจพเจธ เจจเฉ‚เฉฐ config.pp เจตเจฟเฉฑเจš เจฒเจฟเจ–เจฟเจ† เจ—เจฟเจ† เจนเฉˆ - เจ‡เจน เจธเจฎเฉ‚เจน เจธเฉˆเจŸเจฟเฉฐเจ—เจพเจ‚ เจ…เจคเฉ‡ เจซเจฟเจฐ เจนเจฐเฉ‡เจ• เจตเจฟเจ…เจ•เจคเฉ€เจ—เจค เจœเจพเจ‚เจš เจจเจพเจฒ เจธเจพเจฐเฉ€เจ†เจ‚ เจกเจฟเจซเฉŒเจฒเจŸ เจธเฉˆเจŸเจฟเฉฐเจ—เจพเจ‚ เจจเฉ‚เฉฐ เจฎเจฟเจฒเจพเจ‰เจ‚เจฆเจพ เจนเฉˆเฅค

เจ‡เฉฑเจ• เจนเฉ‹เจฐ เจฌเจนเฉเจค เจฎเจนเฉฑเจคเจตเจชเฉ‚เจฐเจจ เจคเจฌเจฆเฉ€เจฒเฉ€ เจธเฉˆเจŸเจฟเฉฐเจ—เจพเจ‚ เจตเจฟเฉฑเจš เจซเฉฐเจ•เจธเจผเจจเจพเจ‚ เจฆเฉ€ เจตเจฐเจคเฉ‹เจ‚ เจ•เจฐเจจ เจฆเฉ€ เจฏเฉ‹เจ—เจคเจพ เจธเฉ€, เจ‰เจฆเจพเจนเจฐเจจ เจฒเจˆ, http_regex เจฆเฉ€ เจœเจพเจ‚เจš เจ•เจฐเจจ เจฒเจˆ เจชเฉ‹เจฐเจŸ, เจเจกเจฐเฉˆเฉฑเจธ เจ…เจคเฉ‡ url เจจเฉ‚เฉฐ เจฌเจฆเจฒเจฃ เจฆเจพ เจ•เฉฐเจฎเฅค

http_regexp:
  assign:
    - 'host.vars.http_regex'
    - 'static_sites in host.groups'
  check_command: 'http'
  check_interval: '1m'
  retry_interval: '20s'
  max_check_attempts: 6
  http_port: '{{ if(host.vars.http_port) { return host.vars.http_port } else { return 443 } }}'
  vars:
    notification_period: 'host.vars.notification_period'
    http_vhost: '{{ if(host.vars.http_vhost) { return host.vars.http_vhost } else { return host.name } }}'
    http_ssl: '{{ if(host.vars.http_ssl) { return false } else { return true } }}'
    http_expect_body_regex: 'host.vars.http_regex'
    http_uri: '{{ if(host.vars.http_uri) { return host.vars.http_uri } else { return "/" } }}'
    http_onredirect: 'follow'
    http_warn_time: 8
    http_critical_time: 15
    http_timeout: 30
    http_sni: true

เจ‡เจธเจฆเจพ เจฎเจคเจฒเจฌ เจนเฉˆ - เจœเฉ‡ เจนเฉ‹เจธเจŸ เจชเจฐเจฟเจญเจพเจธเจผเจพ เจตเจฟเฉฑเจš เจ‡เฉฑเจ• เจตเฉ‡เจฐเฉ€เจเจฌเจฒ เจนเฉˆ http_port โ€” เจ‡เจธเจฆเฉ€ เจตเจฐเจคเฉ‹เจ‚ เจ•เจฐเฉ‹, เจจเจนเฉ€เจ‚ เจคเจพเจ‚ 443เฅค เจ‰เจฆเจพเจนเจฐเจจ เจฒเจˆ, เจœเฉˆเจฌเจฐ เจตเฉˆเฉฑเจฌ เจ‡เฉฐเจŸเจฐเจซเฉ‡เจธ 9090 'เจคเฉ‡ เจนเฉˆเจ‚เจ— เจนเฉเฉฐเจฆเจพ เจนเฉˆ, เจ…เจคเฉ‡ เจฏเฉ‚เจจเฉ€เจซเจพเจˆ 7443 'เจคเฉ‡ เจนเฉˆเจ‚เจ— เจนเฉเฉฐเจฆเจพ เจนเฉˆเฅค
http_vhost เจฎเจคเจฒเจฌ DNS เจจเฉ‚เฉฐ เจจเจœเจผเจฐเจ…เฉฐเจฆเจพเจœเจผ เจ•เจฐเฉ‹ เจ…เจคเฉ‡ เจ‡เจธ เจเจกเจฐเฉˆเฉฑเจธ เจจเฉ‚เฉฐ เจฒเจ“เฅค
เจœเฉ‡เจ•เจฐ uri เจฎเฉ‡เจœเจผเจฌเจพเจจ เจตเจฟเฉฑเจš เจจเจฟเจฐเจฆเจฟเจธเจผเจŸ เจนเฉˆ, เจคเจพเจ‚ เจ‡เจธเจฆเจพ เจชเจพเจฒเจฃ เจ•เจฐเฉ‹, เจจเจนเฉ€เจ‚ เจคเจพเจ‚ โ€œ/โ€ เจฒเจ“เฅค

http_ssl เจฆเฉ‡ เจจเจพเจฒ เจ‡เฉฑเจ• เจฎเจœเจผเจพเจ•เฉ€เจ† เจ•เจนเจพเจฃเฉ€ เจธเจพเจนเจฎเจฃเฉ‡ เจ†เจˆ - เจ‡เจน เจฒเจพเจ— เจฎเฉฐเจ— 'เจคเฉ‡ เจกเจฟเจธเจ•เจจเฉˆเจ•เจŸ เจจเจนเฉ€เจ‚ เจ•เจฐเจจเจพ เจšเจพเจนเฉเฉฐเจฆเจพ เจธเฉ€. เจฎเฉˆเจ‚ เจฒเฉฐเจฌเฉ‡ เจธเจฎเฉ‡เจ‚ เจคเฉ‹เจ‚ เจ‡เจธ เจฒเจพเจˆเจจ เจฌเจพเจฐเฉ‡ เจ‰เจฒเจเจฃ เจตเจฟเฉฑเจš เจธเฉ€ เจœเจฆเฉ‹เจ‚ เจคเฉฑเจ• เจ‡เจน เจฎเฉ‡เจฐเฉ‡ 'เจคเฉ‡ เจจเจนเฉ€เจ‚ เจ†เจ‡เจ† เจ•เจฟ เจนเฉ‹เจธเจŸ เจชเจฐเจฟเจญเจพเจธเจผเจพ เจตเจฟเฉฑเจš เจตเฉ‡เจฐเฉ€เจเจฌเจฒ เจนเฉˆ:

http_ssl: false

เจชเฉเจฐเจ—เจŸเจพเจตเฉ‡ เจตเจฟเฉฑเจš เจฌเจฆเจฒเจฟเจ†

if(host.vars.http_ssl) { return false } else { return true }

เจจเฉ‚เฉฐ เจเฉ‚เจ เฉ‡ เจ…เจคเฉ‡ เจ…เฉฐเจค เจตเจฟเฉฑเจš เจ‡เจน เจฌเจพเจนเจฐ เจ•เจพเจฎเฉเจ•

if(false) { return false } else { return true }

เจญเจพเจต, ssl เจœเจพเจ‚เจš เจนเจฎเฉ‡เจธเจผเจพ เจ•เจฟเจฐเจฟเจ†เจธเจผเฉ€เจฒ เจนเฉเฉฐเจฆเฉ€ เจนเฉˆเฅค เจฎเฉˆเจ‚ เจ‡เจธเจจเฉ‚เฉฐ เจธเฉฐเจŸเฉˆเจ•เจธ เจจเฉ‚เฉฐ เจฌเจฆเจฒ เจ•เฉ‡ เจนเฉฑเจฒ เจ•เฉ€เจคเจพ:

http_ssl: no

เจธเจฟเฉฑเจŸเจพ:

เจชเฉเจฐเฉ‹:

  • เจธเจพเจกเฉ‡ เจ•เฉ‹เจฒ เจนเฉเจฃ เจ‡เฉฑเจ• เจจเจฟเจ—เจฐเจพเจจเฉ€ เจชเฉเจฐเจฃเจพเจฒเฉ€ เจนเฉˆ, เจฆเฉ‹ เจจเจนเฉ€เจ‚, เจœเจฟเจตเฉ‡เจ‚ เจ•เจฟ เจธเจพเจกเฉ‡ เจ•เฉ‹เจฒ เจชเจฟเจ›เจฒเฉ‡ 7-8 เจฎเจนเฉ€เจจเจฟเจ†เจ‚ เจคเฉ‹เจ‚ เจนเฉˆ, เจœเจพเจ‚ เจ‡เฉฑเจ• เจœเฉ‹ เจชเฉเจฐเจพเจฃเจพ เจ…เจคเฉ‡ เจ•เจฎเจœเจผเฉ‹เจฐ เจนเฉˆเฅค
  • เจฎเฉ‡เจœเจผเจฌเจพเจจ/เจธเฉ‡เจตเจพเจตเจพเจ‚ (เจšเฉˆเฉฑเจ•) เจกเจพเจŸเจพ เจขเจพเจ‚เจšเจพ เจนเฉเจฃ (เจฎเฉ‡เจฐเฉ€ เจฐเจพเจ เจตเจฟเฉฑเจš) เจฌเจนเฉเจค เจœเจผเจฟเจ†เจฆเจพ เจชเฉœเฉเจนเจจเจฏเฉ‹เจ— เจ…เจคเฉ‡ เจธเจฎเจเจฃ เจฏเฉ‹เจ— เจนเฉˆเฅค เจฆเฉ‚เจœเจฟเจ†เจ‚ เจฒเจˆ, เจ‡เจน เจ‡เฉฐเจจเจพ เจธเจชเฉฑเจธเจผเจŸ เจจเจนเฉ€เจ‚ เจธเฉ€, เจ‡เจธเจฒเจˆ เจฎเฉˆเจจเฉ‚เฉฐ เจ‡เจน เจฆเฉฑเจธเจฃ เจฒเจˆ เจธเจฅเจพเจจเจ• เจตเจฟเจ•เฉ€ 'เจคเฉ‡ เจ•เฉเจ เจชเฉฐเจจเฉ‡ เจชเฉ‹เจธเจŸ เจ•เจฐเจจเฉ‡ เจชเจ เจ•เจฟ เจ‡เจน เจธเจญ เจ•เจฟเจตเฉ‡เจ‚ เจ•เฉฐเจฎ เจ•เจฐเจฆเจพ เจนเฉˆ เจ…เจคเฉ‡ เจ•เจฟเฉฑเจฅเฉ‡ เจธเฉฐเจชเจพเจฆเจฟเจค เจ•เจฐเจจเจพ เจนเฉˆเฅค
  • เจตเฉ‡เจฐเฉ€เจเจฌเจฒ เจ…เจคเฉ‡ เจซเฉฐเจ•เจธเจผเจจเจพเจ‚ เจฆเฉ€ เจตเจฐเจคเฉ‹เจ‚ เจ•เจฐเจ•เฉ‡ เจšเฉˆเจ•เจพเจ‚ เจจเฉ‚เฉฐ เจฒเจšเจ•เจฆเจพเจฐ เจขเฉฐเจ— เจจเจพเจฒ เจ•เฉŒเจ‚เจซเจฟเจ—เจฐ เจ•เจฐเจจเจพ เจธเฉฐเจญเจต เจนเฉˆ, เจ‰เจฆเจพเจนเจฐเจจ เจฒเจˆ, http_regexp เจฆเฉ€ เจœเจพเจ‚เจš เจ•เจฐเจจ เจฒเจˆ, เจฒเฉ‹เฉœเฉ€เจ‚เจฆเจพ เจชเฉˆเจŸเจฐเจจ, เจฐเจฟเจŸเจฐเจจ เจ•เฉ‹เจก, url เจ…เจคเฉ‡ เจชเฉ‹เจฐเจŸ เจนเฉ‹เจธเจŸ เจธเฉˆเจŸเจฟเฉฐเจ—เจพเจ‚ เจตเจฟเฉฑเจš เจธเฉˆเฉฑเจŸ เจ•เฉ€เจคเฉ‡ เจœเจพ เจธเจ•เจฆเฉ‡ เจนเจจเฅค
  • เจ‡เฉฑเจฅเฉ‡ เจ•เจˆ เจกเฉˆเจธเจผเจฌเฉ‹เจฐเจก เจนเจจ, เจœเจฟเจจเฉเจนเจพเจ‚ เจตเจฟเฉฑเจšเฉ‹เจ‚ เจนเจฐ เจ‡เฉฑเจ• เจฒเจˆ เจคเฉเจธเฉ€เจ‚ เจชเฉเจฐเจฆเจฐเจธเจผเจฟเจค เจ…เจฒเจพเจฐเจฎ เจฆเฉ€ เจ†เจชเจฃเฉ€ เจ–เฉเจฆ เจฆเฉ€ เจธเฉ‚เจšเฉ€ เจจเฉ‚เฉฐ เจชเจฐเจฟเจญเจพเจธเจผเจฟเจค เจ•เจฐ เจธเจ•เจฆเฉ‡ เจนเฉ‹ เจ…เจคเฉ‡ เจ‡เจธ เจธเจญ เจจเฉ‚เฉฐ เจ•เจ เจชเฉเจคเจฒเฉ€ เจ…เจคเฉ‡ เจฎเจฐเจœ เจฌเฉ‡เจจเจคเฉ€เจ†เจ‚ เจฆเฉเจ†เจฐเจพ เจชเฉเจฐเจฌเฉฐเจงเจฟเจค เจ•เจฐ เจธเจ•เจฆเฉ‡ เจนเฉ‹เฅค

เจจเฉเจ•เจธเจพเจจ:

  • เจŸเฉ€เจฎ เจฆเฉ‡ เจฎเฉˆเจ‚เจฌเจฐเจพเจ‚ เจฆเฉ€ เจœเฉœเจคเจพ - เจจเจพเจ—เจฟเจ“เจธ เจจเฉ‡ เจ•เฉฐเจฎ เจ•เฉ€เจคเจพ, เจ•เฉฐเจฎ เจ•เฉ€เจคเจพ เจ…เจคเฉ‡ เจ•เฉฐเจฎ เจ•เฉ€เจคเจพ, เจ…เจคเฉ‡ เจคเฉเจนเจพเจกเจพ เจ‡เจน เจ‡เจธเจฟเฉฐเจ—เจพ เจฒเจ—เจพเจคเจพเจฐ เจฌเฉฑเจ—เจพ เจ…เจคเฉ‡ เจนเฉŒเจฒเฉ€ เจนเฉˆเฅค เจคเฉเจธเฉ€เจ‚ เจ‡เฉฑเจฅเฉ‡ เจ‡เจคเจฟเจนเจพเจธ เจจเฉ‚เฉฐ เจ•เจฟเจตเฉ‡เจ‚ เจฆเฉ‡เจ– เจธเจ•เจฆเฉ‡ เจนเฉ‹? เจ“เจน, เจฌเจฆเจจเจพเจฎ, เจ‡เจน เจ…เจชเจกเฉ‡เจŸ เจจเจนเฉ€เจ‚ เจนเฉ‹เจ‡เจ† เจนเฉˆ... (เจ…เจธเจฒ เจธเจฎเฉฑเจธเจฟเจ† เจ‡เจน เจนเฉˆ เจ•เจฟ เจ…เจฒเจพเจฐเจฎ เจ‡เจคเจฟเจนเจพเจธ เจ†เจชเจฃเฉ‡ เจ†เจช เจ…เจชเจกเฉ‡เจŸ เจจเจนเฉ€เจ‚ เจนเฉเฉฐเจฆเจพ, เจธเจฟเจฐเจซ F5 เจฆเฉเจ†เจฐเจพ)
  • เจธเจฟเจธเจŸเจฎ เจฆเฉ€ เจœเฉœเจคเจพ - เจœเจฆเฉ‹เจ‚ เจฎเฉˆเจ‚ เจตเฉˆเฉฑเจฌ เจ‡เฉฐเจŸเจฐเจซเฉ‡เจธ เจตเจฟเฉฑเจš "เจ…เจชเจกเฉ‡เจŸ" (เจนเฉเจฃเฉ‡ เจšเฉˆเฉฑเจ• เจ•เจฐเฉ‹) 'เจคเฉ‡ เจ•เจฒเจฟเฉฑเจ• เจ•เจฐเจฆเจพ เจนเจพเจ‚ - เจฒเจพเจ—เฉ‚ เจ•เจฐเจจ เจฆเจพ เจจเจคเฉ€เจœเจพ เจฎเฉฐเจ—เจฒ 'เจคเฉ‡ เจฎเฉŒเจธเจฎ 'เจคเฉ‡ เจจเจฟเจฐเจญเจฐ เจ•เจฐเจฆเจพ เจนเฉˆ, เจ–เจพเจธ เจ•เจฐเจ•เฉ‡ เจ—เฉเฉฐเจเจฒเจฆเจพเจฐ เจธเฉ‡เจตเจพเจตเจพเจ‚ 'เจคเฉ‡ เจœเจฟเจจเฉเจนเจพเจ‚ เจจเฉ‚เฉฐ เจšเจฒเจพเจ‰เจฃ เจฒเจˆ เจ•เจˆ เจธเจ•เจฟเฉฐเจŸเจพเจ‚ เจฆเฉ€ เจฒเฉ‹เฉœ เจนเฉเฉฐเจฆเฉ€ เจนเฉˆเฅค เจ…เจœเจฟเจนเจพ เจจเจคเฉ€เจœเจพ เจ†เจฎ เจนเฉˆ. เจ†เจธเจŸเฉเจฐเฉ‡เจฒเฉ€เจ† เจตเจฟเฉฑเจš เจจเจพเจ—เฉ€เจ“เจธ เจคเฉ‹เจ‚ เจ†เจˆเจธเจฟเฉฐเจ—เจพ 2 เจคเฉฑเจ• เจชเฉเจฐเจตเจพเจธ
  • เจ†เจฎ เจคเฉŒเจฐ 'เจคเฉ‡, เจฆเฉ‹เจตเจพเจ‚ เจชเฉเจฐเจฃเจพเจฒเฉ€เจ†เจ‚ เจฆเฉ‡ เจจเจพเจฒ-เจจเจพเจฒ เจšเฉฑเจฒเจฃ เจฆเฉ‡ เจ›เฉ‡ เจฎเจนเฉ€เจจเจฟเจ†เจ‚ เจฆเฉ‡ เจ…เฉฐเจ•เฉœเจฟเจ†เจ‚ เจฆเฉ‡ เจ…เจจเฉเจธเจพเจฐ, เจจเจพเจ—เจฟเจ“เจธ เจจเฉ‡ เจนเจฎเฉ‡เจธเจผเจพ เจ†เจˆเจธเจฟเฉฐเจ—เจพ เจจเจพเจฒเฉ‹เจ‚ เจคเฉ‡เจœเจผเฉ€ เจจเจพเจฒ เจ•เฉฐเจฎ เจ•เฉ€เจคเจพ เจ…เจคเฉ‡ เจ‡เจธ เจจเฉ‡ เจฎเฉˆเจจเฉ‚เฉฐ เจธเฉฑเจšเจฎเฉเฉฑเจš เจชเจฐเฉ‡เจธเจผเจพเจจ เจ•เฉ€เจคเจพ. เจ‡เจน เจฎเฉˆเจจเฉ‚เฉฐ เจœเจพเจชเจฆเจพ เจนเฉˆ เจ•เจฟ เจ‰เจนเจจเจพเจ‚ เจจเฉ‡ เจŸเจพเจˆเจฎเจฐเจพเจ‚ เจจเจพเจฒ เจ•เฉเจ เจ—เฉœเจฌเฉœ เจ•เฉ€เจคเฉ€ เจนเฉˆ เจ…เจคเฉ‡ เจœเจพเจ‚เจš เจนเจฐ เจชเฉฐเจœ เจฎเจฟเฉฐเจŸเจพเจ‚ เจตเจฟเฉฑเจš เจ•เฉ€เจคเฉ€ เจœเจพเจ‚เจฆเฉ€ เจนเฉˆ, เจ…เจธเจฒ เจตเจฟเฉฑเจš เจ‡เจน เจนเจฐ 5:30 เจตเจœเฉ‡ เจœเจพเจ‚ เจ…เจœเจฟเจนเจพ เจ•เฉเจ เจนเฉเฉฐเจฆเจพ เจนเฉˆเฅค
  • เจœเฉ‡เจ•เจฐ เจคเฉเจธเฉ€เจ‚ เจ•เจฟเจธเฉ‡ เจตเฉ€ เจธเจฎเฉ‡เจ‚ เจธเฉ‡เจตเจพ เจจเฉ‚เฉฐ เจฎเฉเฉœ เจšเจพเจฒเฉ‚ เจ•เจฐเจฆเฉ‡ เจนเฉ‹ (systemctl เจฐเฉ€เจธเจŸเจพเจฐเจŸ icinga2) - เจธเจพเจฐเฉ€เจ†เจ‚ เจœเจพเจ‚เจšเจพเจ‚ เจœเฉ‹ เจ‰เจธ เจธเจฎเฉ‡เจ‚ เจšเฉฑเจฒ เจฐเจนเฉ€เจ†เจ‚ เจธเจจ, เจ‡เฉฑเจ• เจจเจพเจœเจผเฉเจ• เจ…เจฒเจพเจฐเจฎ เจชเฉˆเจฆเจพ เจ•เจฐเจจเจ—เฉ‡เฅค เจธเจ•เจฐเฉ€เจจ 'เจคเฉ‡ เจ…เจคเฉ‡ เจฌเจพเจนเจฐเฉ‹เจ‚ เจ…เจœเจฟเจนเจพ เจฒเจ—เจฆเจพ เจนเฉˆ เจœเจฟเจตเฉ‡เจ‚ เจธเจญ เจ•เฉเจ เจกเจฟเฉฑเจ— เจ—เจฟเจ† เจนเฉ‹เจตเฉ‡ (เจชเฉเจธเจผเจŸเฉ€ เจ•เฉ€เจคเฉ€ เจฌเฉฑเจ—).

เจชเจฐ เจ•เฉเฉฑเจฒ เจฎเจฟเจฒเจพ เจ•เฉ‡, เจ‡เจน เจ•เฉฐเจฎ เจ•เจฐเจฆเจพ เจนเฉˆ.

เจธเจฐเฉ‹เจค: www.habr.com

DDoS เจธเฉเจฐเฉฑเจ–เจฟเจ†, VPS VDS เจธเจฐเจตเจฐเจพเจ‚ เจตเจพเจฒเฉ€เจ†เจ‚ เจธเจพเจˆเจŸเจพเจ‚ เจฒเจˆ เจญเจฐเฉ‹เจธเฉ‡เจฏเฉ‹เจ— เจนเฉ‹เจธเจŸเจฟเฉฐเจ— เจ–เจฐเฉ€เจฆเฉ‹ ๐Ÿ”ฅ DDoS เจธเฉเจฐเฉฑเจ–เจฟเจ†, VPS VDS เจธเจฐเจตเจฐเจพเจ‚ เจจเจพเจฒ เจญเจฐเฉ‹เจธเฉ‡เจฏเฉ‹เจ— เจตเฉˆเฉฑเจฌเจธเจพเจˆเจŸ เจนเฉ‹เจธเจŸเจฟเฉฐเจ— เจ–เจฐเฉ€เจฆเฉ‹ | ProHoster