แƒ›แƒ˜แƒ’แƒ แƒแƒชแƒ˜แƒ แƒœแƒแƒ’แƒ˜แƒแƒกแƒ˜แƒ“แƒแƒœ Icinga2-แƒจแƒ˜ แƒแƒ•แƒกแƒขแƒ แƒแƒšแƒ˜แƒแƒจแƒ˜

แƒ’แƒแƒฃแƒ›แƒแƒ แƒฏแƒแƒก แƒงแƒ•แƒ”แƒšแƒแƒก.

แƒ›แƒ” Linux-แƒ˜แƒก แƒกแƒ˜แƒกแƒขแƒ”แƒ›แƒฃแƒ แƒ˜ แƒแƒ“แƒ›แƒ˜แƒœแƒ˜แƒกแƒขแƒ แƒแƒขแƒแƒ แƒ˜ แƒ•แƒแƒ , แƒ แƒฃแƒกแƒ”แƒ—แƒ˜แƒ“แƒแƒœ แƒแƒ•แƒกแƒขแƒ แƒแƒšแƒ˜แƒแƒจแƒ˜ แƒ“แƒแƒ›แƒแƒฃแƒ™แƒ˜แƒ“แƒ”แƒ‘แƒ”แƒšแƒ˜ แƒžแƒ แƒแƒคแƒ”แƒกแƒ˜แƒฃแƒšแƒ˜ แƒ•แƒ˜แƒ–แƒ˜แƒ— 2015 แƒฌแƒ”แƒšแƒก แƒ’แƒแƒ“แƒแƒ•แƒ”แƒ“แƒ˜ แƒกแƒแƒชแƒฎแƒแƒ•แƒ แƒ”แƒ‘แƒšแƒแƒ“, แƒ›แƒแƒ’แƒ แƒแƒ› แƒ”แƒก แƒกแƒขแƒแƒขแƒ˜แƒ แƒแƒ  แƒ”แƒฎแƒ”แƒ‘แƒ แƒ˜แƒ›แƒแƒก, แƒ—แƒฃ แƒ แƒแƒ’แƒแƒ  แƒจแƒ”แƒฃแƒซแƒšแƒ˜แƒ แƒฆแƒแƒ แƒก แƒขแƒ แƒแƒฅแƒขแƒแƒ แƒ˜แƒก แƒ“แƒแƒฅแƒแƒฅแƒ•แƒ. แƒฃแƒ™แƒ•แƒ” แƒกแƒแƒ™แƒ›แƒแƒ แƒ˜แƒกแƒ˜ แƒแƒกแƒ”แƒ—แƒ˜ แƒกแƒขแƒแƒขแƒ˜แƒ แƒแƒ แƒกแƒ”แƒ‘แƒแƒ‘แƒก (แƒ—แƒฃแƒ›แƒชแƒ, แƒ—แƒฃ แƒ˜แƒœแƒขแƒ”แƒ แƒ”แƒกแƒ˜ แƒ˜แƒฅแƒœแƒ”แƒ‘แƒ, แƒแƒ›แƒแƒ–แƒ”แƒช แƒ“แƒแƒ•แƒฌแƒ”แƒ ), แƒแƒ›แƒ˜แƒขแƒแƒ› แƒ›แƒ˜แƒœแƒ“แƒ แƒ›แƒแƒ’แƒ˜แƒงแƒ•แƒ”แƒ—, แƒ—แƒฃ แƒ แƒแƒ’แƒแƒ  แƒ“แƒแƒ•แƒ˜แƒฌแƒงแƒ” แƒแƒ•แƒกแƒขแƒ แƒแƒšแƒ˜แƒแƒจแƒ˜ Linux-ops แƒ˜แƒœแƒŸแƒ˜แƒœแƒ แƒแƒ“ แƒ›แƒฃแƒจแƒแƒแƒ‘แƒ˜แƒกแƒแƒก แƒ”แƒ แƒ—แƒ˜ แƒ›แƒแƒœแƒ˜แƒขแƒแƒ แƒ˜แƒœแƒ’แƒ˜แƒก แƒกแƒ˜แƒกแƒขแƒ”แƒ›แƒ˜แƒ“แƒแƒœ แƒ›แƒ”แƒแƒ แƒ”แƒ–แƒ” แƒ›แƒ˜แƒ’แƒ แƒแƒชแƒ˜แƒ. แƒ™แƒ”แƒ แƒซแƒแƒ“ - Nagios => Icinga2.

แƒกแƒขแƒแƒขแƒ˜แƒ แƒœแƒแƒฌแƒ˜แƒšแƒแƒ‘แƒ แƒ˜แƒ• แƒขแƒ”แƒฅแƒœแƒ˜แƒ™แƒฃแƒ แƒ˜ แƒฎแƒแƒกแƒ˜แƒแƒ—แƒ˜แƒกแƒแƒ แƒ“แƒ แƒœแƒแƒฌแƒ˜แƒšแƒแƒ‘แƒ แƒ˜แƒ• แƒ”แƒฎแƒ”แƒ‘แƒ แƒแƒ“แƒแƒ›แƒ˜แƒแƒœแƒ”แƒ‘แƒ—แƒแƒœ แƒ™แƒแƒ›แƒฃแƒœแƒ˜แƒ™แƒแƒชแƒ˜แƒแƒก แƒ“แƒ แƒ™แƒฃแƒšแƒขแƒฃแƒ แƒแƒกแƒ แƒ“แƒ แƒกแƒแƒ›แƒฃแƒจแƒแƒ แƒ›แƒ”แƒ—แƒแƒ“แƒ”แƒ‘แƒจแƒ˜ แƒแƒ แƒกแƒ”แƒ‘แƒฃแƒš แƒ’แƒแƒœแƒกแƒฎแƒ•แƒแƒ•แƒ”แƒ‘แƒ”แƒ‘แƒ—แƒแƒœ แƒ“แƒแƒ™แƒแƒ•แƒจแƒ˜แƒ แƒ”แƒ‘แƒฃแƒš แƒžแƒ แƒแƒ‘แƒšแƒ”แƒ›แƒ”แƒ‘แƒก.

แƒกแƒแƒ›แƒฌแƒฃแƒฎแƒแƒ แƒแƒ“, โ€žcodeโ€œ แƒขแƒ”แƒ’แƒ˜ แƒแƒ  แƒฎแƒแƒ–แƒก แƒฃแƒกแƒ•แƒแƒ›แƒก Puppet-แƒกแƒ แƒ“แƒ yaml แƒ™แƒแƒ“แƒก, แƒแƒ›แƒ˜แƒขแƒแƒ› แƒ›แƒแƒ›แƒ˜แƒฌแƒ˜แƒ โ€žplaintextโ€œ-แƒ˜แƒก แƒ’แƒแƒ›แƒแƒงแƒ”แƒœแƒ”แƒ‘แƒ.

21 แƒฌแƒšแƒ˜แƒก 2016 แƒ“แƒ”แƒ™แƒ”แƒ›แƒ‘แƒ แƒ˜แƒก แƒ“แƒ˜แƒšแƒ˜แƒ— แƒแƒ แƒแƒœแƒแƒ˜แƒ แƒ˜ แƒžแƒ แƒแƒ‘แƒšแƒ”แƒ›แƒ แƒแƒ  แƒจแƒ”แƒ˜แƒœแƒ˜แƒจแƒœแƒ”แƒ‘แƒแƒ“แƒ. แƒ แƒแƒ’แƒแƒ แƒช แƒงแƒแƒ•แƒ”แƒšแƒ—แƒ•แƒ˜แƒก, แƒกแƒแƒ›แƒฃแƒจแƒแƒ แƒ“แƒฆแƒ˜แƒก แƒžแƒ˜แƒ แƒ•แƒ”แƒšแƒ˜ แƒœแƒแƒฎแƒ”แƒ•แƒแƒ แƒ˜ แƒกแƒแƒแƒ—แƒ˜แƒก แƒ’แƒแƒœแƒ›แƒแƒ•แƒšแƒแƒ‘แƒแƒจแƒ˜ แƒ•แƒ™แƒ˜แƒ—แƒฎแƒฃแƒšแƒแƒ‘แƒ“แƒ˜ Habr-แƒก, แƒ แƒแƒ’แƒแƒ แƒช แƒแƒ แƒแƒ แƒ”แƒ’แƒ˜แƒกแƒขแƒ แƒ˜แƒ แƒ”แƒ‘แƒฃแƒšแƒ˜ แƒแƒœแƒแƒœแƒ˜แƒ›แƒฃแƒ แƒ˜ แƒ›แƒแƒ›แƒฎแƒ›แƒแƒ แƒ”แƒ‘แƒ”แƒšแƒ˜, แƒงแƒแƒ•แƒแƒก แƒ•แƒกแƒ•แƒแƒ›แƒ“แƒ˜ แƒ“แƒ แƒฌแƒแƒ•แƒแƒฌแƒงแƒ“แƒ˜... แƒแƒ› แƒ›แƒฃแƒฎแƒšแƒ˜แƒก.

แƒ แƒแƒ“แƒ’แƒแƒœ แƒฉแƒ”แƒ›แƒ˜ แƒ™แƒแƒ›แƒžแƒแƒœแƒ˜แƒ แƒจแƒ”แƒ›แƒ—แƒฎแƒ•แƒ”แƒ•แƒ˜แƒ— แƒ˜แƒงแƒ”แƒœแƒ”แƒ‘แƒ“แƒ Nagios-แƒก, Redmine-แƒจแƒ˜ แƒ‘แƒ˜แƒšแƒ”แƒ—แƒ˜แƒก แƒจแƒ”แƒฅแƒ›แƒœแƒแƒกแƒ แƒ“แƒ แƒ‘แƒ›แƒฃแƒšแƒ˜แƒก แƒ–แƒแƒ’แƒแƒ“ แƒฉแƒแƒขแƒจแƒ˜ แƒ’แƒแƒ’แƒ–แƒแƒ•แƒœแƒแƒ–แƒ” แƒแƒ แƒฏแƒ”แƒ  แƒแƒ  แƒ›แƒ˜แƒคแƒ˜แƒฅแƒ แƒ˜แƒ, แƒ แƒแƒ“แƒ’แƒแƒœ แƒ›แƒœแƒ˜แƒจแƒ•แƒœแƒ”แƒšแƒแƒ•แƒœแƒแƒ“ แƒ›แƒ˜แƒ•แƒ˜แƒฉแƒœแƒ˜แƒ”. แƒ˜แƒœแƒ˜แƒชแƒ˜แƒแƒขแƒ˜แƒ•แƒ แƒ“แƒแƒกแƒฏแƒแƒ“แƒ˜แƒ แƒแƒ•แƒกแƒขแƒ แƒแƒšแƒ˜แƒแƒจแƒ˜แƒช แƒ™แƒ˜, แƒแƒ›แƒ˜แƒขแƒแƒ› แƒฌแƒแƒ›แƒงแƒ•แƒแƒœแƒ›แƒ แƒ˜แƒœแƒŸแƒ˜แƒœแƒ”แƒ แƒ›แƒ แƒžแƒ แƒแƒ‘แƒšแƒ”แƒ›แƒ แƒ›แƒ” แƒ“แƒแƒ›แƒแƒ‘แƒ แƒแƒšแƒ, แƒ แƒแƒ“แƒ’แƒแƒœ แƒ›แƒ” แƒแƒฆแƒ›แƒแƒ•แƒแƒฉแƒ˜แƒœแƒ”.

แƒ”แƒ™แƒ แƒแƒœแƒ˜แƒก แƒแƒœแƒแƒ‘แƒ”แƒญแƒ“แƒ˜ Redmine-แƒ“แƒแƒœแƒ›แƒ˜แƒ’แƒ แƒแƒชแƒ˜แƒ แƒœแƒแƒ’แƒ˜แƒแƒกแƒ˜แƒ“แƒแƒœ Icinga2-แƒจแƒ˜ แƒแƒ•แƒกแƒขแƒ แƒแƒšแƒ˜แƒแƒจแƒ˜

แƒฉแƒ•แƒ”แƒœแƒก แƒ’แƒแƒœแƒงแƒแƒคแƒ˜แƒšแƒ”แƒ‘แƒแƒจแƒ˜, แƒกแƒแƒœแƒแƒ› แƒ—แƒฅแƒ•แƒ”แƒœแƒก แƒแƒ–แƒ แƒก แƒ’แƒแƒ›แƒแƒ—แƒฅแƒ•แƒแƒ›แƒ—, แƒฉแƒ•แƒ”แƒฃแƒšแƒ”แƒ‘แƒ แƒ˜แƒ•, แƒ”แƒ แƒ—แƒ˜ แƒแƒšแƒขแƒ”แƒ แƒœแƒแƒขแƒ˜แƒ•แƒ˜แƒก แƒจแƒ”แƒ—แƒแƒ•แƒแƒ–แƒ”แƒ‘แƒแƒ, แƒ—แƒฃแƒœแƒ“แƒแƒช แƒแƒ แƒฉแƒ”แƒ•แƒแƒœแƒ˜ แƒแƒจแƒ™แƒแƒ แƒ แƒ˜แƒงแƒแƒก, แƒแƒ›แƒ˜แƒขแƒแƒ› แƒ“แƒแƒ•แƒ˜แƒฌแƒงแƒ” Google-แƒจแƒ˜ แƒ˜แƒ›แƒ˜แƒ—, แƒ—แƒฃ แƒ แƒแƒ›แƒ”แƒšแƒ˜ แƒ›แƒแƒœแƒ˜แƒขแƒแƒ แƒ˜แƒœแƒ’แƒ˜แƒก แƒกแƒ˜แƒกแƒขแƒ”แƒ›แƒ”แƒ‘แƒ˜แƒ แƒแƒ›แƒŸแƒแƒ›แƒแƒ“ แƒแƒฅแƒขแƒฃแƒแƒšแƒฃแƒ แƒ˜, แƒ แƒแƒ“แƒ’แƒแƒœ แƒ แƒฃแƒกแƒ”แƒ—แƒจแƒ˜, แƒฉแƒ”แƒ›แƒก แƒ‘แƒแƒšแƒ แƒกแƒแƒ›แƒฃแƒจแƒแƒ แƒแƒ“แƒ’แƒ˜แƒšแƒ–แƒ”, แƒ›แƒฅแƒแƒœแƒ“แƒ แƒฉแƒ”แƒ›แƒ˜แƒ•แƒ” แƒฎแƒ”แƒšแƒœแƒแƒ™แƒ”แƒ—แƒ˜ แƒกแƒ˜แƒกแƒขแƒ”แƒ›แƒ, แƒซแƒแƒšแƒ˜แƒแƒœ แƒžแƒ แƒ˜แƒ›แƒ˜แƒขแƒ˜แƒฃแƒšแƒ˜, แƒ›แƒแƒ’แƒ แƒแƒ› แƒ›แƒ˜แƒฃแƒฎแƒ”แƒ“แƒแƒ•แƒแƒ“ แƒแƒ›แƒ˜แƒกแƒ, แƒกแƒแƒ™แƒ›แƒแƒแƒ“ แƒคแƒฃแƒœแƒฅแƒชแƒ˜แƒแƒœแƒแƒšแƒฃแƒ แƒ˜ แƒ“แƒ แƒแƒกแƒ แƒฃแƒšแƒ”แƒ‘แƒ“แƒ แƒ›แƒ˜แƒกแƒ—แƒ•แƒ˜แƒก แƒ“แƒแƒ™แƒ˜แƒกแƒ แƒ”แƒ‘แƒฃแƒš แƒงแƒ•แƒ”แƒšแƒ แƒ“แƒแƒ•แƒแƒšแƒ”แƒ‘แƒแƒก. Python, แƒกแƒแƒœแƒฅแƒข-แƒžแƒ”แƒขแƒ”แƒ แƒ‘แƒฃแƒ แƒ’แƒ˜แƒก แƒžแƒแƒšแƒ˜แƒขแƒ”แƒฅแƒœแƒ˜แƒ™แƒฃแƒ แƒ˜ แƒฃแƒœแƒ˜แƒ•แƒ”แƒ แƒกแƒ˜แƒขแƒ”แƒขแƒ˜ แƒ“แƒ แƒ›แƒ”แƒขแƒ แƒ แƒ›แƒแƒ แƒ—แƒแƒ•แƒ”แƒœ. แƒแƒ แƒ, แƒ›แƒ”แƒขแƒ แƒ แƒกแƒแƒจแƒ˜แƒœแƒ”แƒšแƒ”แƒ‘แƒแƒ. แƒ”แƒก แƒžแƒ˜แƒ แƒแƒ“แƒ˜แƒ (11 แƒฌแƒšแƒ˜แƒแƒœแƒ˜ แƒ›แƒฃแƒจแƒแƒแƒ‘แƒ) แƒ“แƒ แƒชแƒแƒšแƒ™แƒ” แƒกแƒขแƒแƒขแƒ˜แƒ˜แƒก แƒฆแƒ˜แƒ แƒกแƒ˜แƒ, แƒ›แƒแƒ’แƒ แƒแƒ› แƒแƒฎแƒšแƒ แƒแƒ แƒ.

แƒชแƒแƒขแƒ แƒ แƒแƒ› แƒฉแƒ”แƒ›แƒก แƒแƒ›แƒŸแƒแƒ›แƒ˜แƒœแƒ“แƒ”แƒš แƒแƒ“แƒ’แƒ˜แƒšแƒแƒก แƒ˜แƒœแƒคแƒ แƒแƒกแƒขแƒ แƒฃแƒฅแƒขแƒฃแƒ แƒ˜แƒก แƒ™แƒแƒœแƒคแƒ˜แƒ’แƒฃแƒ แƒแƒชแƒ˜แƒแƒจแƒ˜ แƒชแƒ•แƒšแƒ˜แƒšแƒ”แƒ‘แƒ”แƒ‘แƒ˜แƒก แƒจแƒ”แƒขแƒแƒœแƒ˜แƒก แƒฌแƒ”แƒกแƒ”แƒ‘แƒ˜แƒก แƒจแƒ”แƒกแƒแƒฎแƒ”แƒ‘. แƒ™แƒแƒ“แƒ˜แƒก แƒžแƒ แƒ˜แƒœแƒชแƒ˜แƒžแƒแƒ“ Puppet-แƒก, Gitlab-แƒกแƒ แƒ“แƒ แƒ˜แƒœแƒคแƒ แƒแƒกแƒขแƒ แƒฃแƒฅแƒขแƒฃแƒ แƒแƒก แƒ•แƒ˜แƒงแƒ”แƒœแƒ”แƒ‘แƒ—, แƒแƒ›แƒ˜แƒขแƒแƒ›:

  • แƒ•แƒ˜แƒ แƒขแƒฃแƒแƒšแƒฃแƒ  แƒ›แƒแƒœแƒฅแƒแƒœแƒ”แƒ‘แƒ–แƒ” แƒคแƒแƒ˜แƒšแƒ”แƒ‘แƒ˜แƒก แƒฎแƒ”แƒšแƒ˜แƒ— แƒจแƒ”แƒชแƒ•แƒšแƒ˜แƒ— SSH-แƒ˜แƒก แƒกแƒแƒจแƒฃแƒแƒšแƒ”แƒ‘แƒ˜แƒ— แƒฎแƒ”แƒšแƒ˜แƒ— แƒชแƒ•แƒšแƒ˜แƒšแƒ”แƒ‘แƒ”แƒ‘แƒ˜แƒก แƒจแƒ”แƒขแƒแƒœแƒ แƒจแƒ”แƒฃแƒซแƒšแƒ”แƒ‘แƒ”แƒšแƒ˜แƒ. แƒกแƒแƒ›แƒ˜ แƒฌแƒšแƒ˜แƒก แƒ’แƒแƒœแƒ›แƒแƒ•แƒšแƒแƒ‘แƒแƒจแƒ˜ แƒแƒ›แƒ“แƒ”แƒœแƒ˜ แƒ’แƒแƒ›แƒแƒ™แƒ แƒ˜แƒขแƒ˜แƒ™แƒ”แƒก, แƒ‘แƒแƒšแƒ แƒ”แƒ แƒ—แƒ˜ แƒ™แƒ•แƒ˜แƒ แƒ˜แƒก แƒฌแƒ˜แƒœ แƒ˜แƒงแƒ แƒ“แƒ แƒแƒ แƒแƒ›แƒ’แƒแƒœแƒ˜แƒ แƒ‘แƒแƒšแƒ แƒจแƒ”แƒ›แƒ—แƒฎแƒ•แƒ”แƒ•แƒ แƒงแƒแƒคแƒ˜แƒšแƒ˜แƒงแƒ. แƒกแƒ”แƒ แƒ˜แƒแƒ–แƒฃแƒšแƒแƒ“, แƒ™แƒแƒœแƒคแƒ˜แƒ’แƒฃแƒ แƒแƒชแƒ˜แƒแƒจแƒ˜ แƒ”แƒ แƒ—แƒ˜ แƒฎแƒแƒ–แƒ˜แƒก แƒจแƒ”แƒชแƒ•แƒšแƒแƒก, แƒกแƒ”แƒ แƒ•แƒ˜แƒกแƒ˜แƒก แƒ’แƒแƒ“แƒแƒขแƒ•แƒ˜แƒ แƒ—แƒ•แƒแƒก แƒ“แƒ แƒžแƒ แƒแƒ‘แƒšแƒ”แƒ›แƒ˜แƒก แƒ’แƒแƒ“แƒแƒญแƒ แƒแƒก 10 แƒฌแƒแƒ›แƒ˜ แƒกแƒญแƒ˜แƒ แƒ“แƒ”แƒ‘แƒ. แƒจแƒ”แƒฅแƒ›แƒ”แƒœแƒ˜แƒ— แƒแƒฎแƒแƒšแƒ˜ แƒคแƒ˜แƒšแƒ˜แƒแƒšแƒ˜ Gitlab-แƒจแƒ˜, แƒ“แƒแƒแƒญแƒ˜แƒ แƒ”แƒ— แƒชแƒ•แƒšแƒ˜แƒšแƒ”แƒ‘แƒ”แƒ‘แƒ˜แƒก แƒจแƒ”แƒขแƒแƒœแƒแƒก, แƒ“แƒแƒ”แƒšแƒแƒ“แƒ”แƒ— r10k-แƒ˜แƒก แƒ’แƒแƒจแƒ•แƒ”แƒ‘แƒแƒก Puppetmaster-แƒ–แƒ”, แƒ’แƒแƒฃแƒจแƒ•แƒ˜แƒ— Puppet --environment=mybranch แƒ“แƒ แƒ“แƒแƒ”แƒšแƒแƒ“แƒ”แƒ— แƒ™แƒ˜แƒ“แƒ”แƒ• แƒ แƒแƒ›แƒ“แƒ”แƒœแƒ˜แƒ›แƒ” แƒฌแƒฃแƒ—แƒ˜, แƒกแƒแƒœแƒแƒ› แƒงแƒ•แƒ”แƒšแƒแƒคแƒ”แƒ แƒ˜ แƒ’แƒแƒจแƒ•แƒ”แƒ‘แƒฃแƒšแƒ˜ แƒ˜แƒฅแƒœแƒ”แƒ‘แƒ - แƒ›แƒ˜แƒœแƒ˜แƒ›แƒฃแƒ› 5 แƒฌแƒฃแƒ—แƒ˜.
  • แƒœแƒ”แƒ‘แƒ˜แƒกแƒ›แƒ˜แƒ”แƒ แƒ˜ แƒชแƒ•แƒšแƒ˜แƒšแƒ”แƒ‘แƒ แƒฎแƒแƒ แƒชแƒ˜แƒ”แƒšแƒ“แƒ”แƒ‘แƒ Gitlab-แƒจแƒ˜ แƒจแƒ”แƒ แƒฌแƒงแƒ›แƒ˜แƒก แƒ›แƒแƒ—แƒฎแƒแƒ•แƒœแƒ˜แƒก แƒจแƒ”แƒฅแƒ›แƒœแƒ˜แƒ— แƒ“แƒ แƒฃแƒœแƒ“แƒ แƒ“แƒแƒ›แƒขแƒ™แƒ˜แƒชแƒ“แƒ”แƒก แƒ’แƒฃแƒœแƒ“แƒ˜แƒก แƒกแƒฃแƒš แƒ›แƒชแƒ˜แƒ แƒ” แƒ”แƒ แƒ—แƒ˜ แƒฌแƒ”แƒ•แƒ แƒ˜แƒก แƒ›แƒ˜แƒ”แƒ . แƒ’แƒฃแƒœแƒ“แƒ˜แƒก แƒฎแƒ”แƒšแƒ›แƒซแƒฆแƒ•แƒแƒœแƒ”แƒšแƒ˜แƒก แƒ›แƒ˜แƒ”แƒ  แƒ’แƒแƒ“แƒแƒฌแƒงแƒ•แƒ”แƒขแƒ˜แƒšแƒ˜ แƒ›แƒœแƒ˜แƒจแƒ•แƒœแƒ”แƒšแƒแƒ•แƒแƒœแƒ˜ แƒชแƒ•แƒšแƒ˜แƒšแƒ”แƒ‘แƒ”แƒ‘แƒ˜แƒกแƒ—แƒ•แƒ˜แƒก แƒกแƒแƒญแƒ˜แƒ แƒแƒ แƒแƒ แƒ˜ แƒแƒœ แƒกแƒแƒ›แƒ˜ แƒ“แƒแƒ›แƒขแƒ™แƒ˜แƒชแƒ”แƒ‘แƒ.
  • แƒงแƒ•แƒ”แƒšแƒ แƒชแƒ•แƒšแƒ˜แƒšแƒ”แƒ‘แƒ แƒแƒ›แƒ แƒ—แƒฃ แƒ˜แƒ› แƒ’แƒ–แƒ˜แƒ— แƒขแƒ”แƒฅแƒกแƒขแƒฃแƒ แƒ˜แƒ (แƒ แƒแƒ“แƒ’แƒแƒœ Puppet-แƒ˜แƒก แƒ›แƒแƒœแƒ˜แƒคแƒ”แƒกแƒขแƒ”แƒ‘แƒ˜, แƒกแƒ™แƒ แƒ˜แƒžแƒขแƒ”แƒ‘แƒ˜ แƒ“แƒ Hiera แƒ›แƒแƒœแƒแƒชแƒ”แƒ›แƒ”แƒ‘แƒ˜ แƒขแƒ”แƒฅแƒกแƒขแƒฃแƒ แƒ˜แƒ), แƒ‘แƒ˜แƒœแƒแƒ แƒฃแƒšแƒ˜ แƒคแƒแƒ˜แƒšแƒ”แƒ‘แƒ˜แƒก แƒ’แƒแƒ›แƒแƒงแƒ”แƒœแƒ”แƒ‘แƒ แƒ›แƒ™แƒแƒชแƒ แƒแƒ“ แƒแƒ™แƒ แƒซแƒแƒšแƒฃแƒšแƒ˜แƒ แƒ“แƒ แƒ›แƒแƒ—แƒ˜ แƒ“แƒแƒกแƒแƒ›แƒขแƒ™แƒ˜แƒชแƒ”แƒ‘แƒšแƒแƒ“ แƒ›แƒงแƒแƒ แƒ˜ แƒ›แƒ˜แƒ–แƒ”แƒ–แƒ˜แƒ แƒกแƒแƒญแƒ˜แƒ แƒ.

แƒแƒกแƒ” แƒ แƒแƒ›, แƒฉแƒ”แƒ›แƒก แƒ›แƒ˜แƒ”แƒ  แƒ’แƒแƒœแƒฎแƒ˜แƒšแƒฃแƒšแƒ˜ แƒ•แƒแƒ แƒ˜แƒแƒœแƒขแƒ”แƒ‘แƒ˜ แƒ˜แƒงแƒ:

  • แƒ›แƒฃแƒœแƒ˜แƒœแƒ˜ - แƒ—แƒฃ แƒ˜แƒœแƒคแƒ แƒแƒกแƒขแƒ แƒฃแƒฅแƒขแƒฃแƒ แƒแƒจแƒ˜ 10-แƒ–แƒ” แƒ›แƒ”แƒขแƒ˜ แƒกแƒ”แƒ แƒ•แƒ”แƒ แƒ˜แƒ, แƒแƒ“แƒ›แƒ˜แƒœแƒ˜แƒกแƒขแƒ แƒ˜แƒ แƒ”แƒ‘แƒ แƒฏแƒแƒฏแƒแƒฎแƒ”แƒ—แƒแƒ“ แƒ˜แƒฅแƒชแƒ”แƒ•แƒ (แƒ“แƒแƒœ แƒแƒ› แƒ›แƒฃแƒฎแƒšแƒ˜แƒก. แƒแƒ›แƒ˜แƒก แƒ’แƒแƒ›แƒแƒชแƒ“แƒ˜แƒก แƒ’แƒแƒœแƒกแƒแƒ™แƒฃแƒ—แƒ แƒ”แƒ‘แƒฃแƒšแƒ˜ แƒกแƒฃแƒ แƒ•แƒ˜แƒšแƒ˜ แƒแƒ  แƒ›แƒฅแƒแƒœแƒ“แƒ, แƒแƒ›แƒ˜แƒขแƒแƒ› แƒ›แƒ˜แƒก แƒกแƒ˜แƒขแƒงแƒ•แƒแƒก แƒ“แƒแƒ•แƒฃแƒฏแƒ”แƒ แƒ”).
  • Zabbix โ€” แƒ“แƒ˜แƒ“แƒ˜ แƒฎแƒแƒœแƒ˜แƒ, แƒ แƒฃแƒกแƒ”แƒ—แƒจแƒ˜ แƒงแƒแƒคแƒœแƒ˜แƒกแƒแƒก แƒ•แƒคแƒ˜แƒฅแƒ แƒแƒ‘แƒ“แƒ˜ แƒ›แƒแƒกแƒ–แƒ”, แƒ›แƒแƒ’แƒ แƒแƒ› แƒฉแƒ”แƒ›แƒ˜ แƒแƒ›แƒแƒชแƒแƒœแƒ”แƒ‘แƒ˜แƒกแƒ—แƒ•แƒ˜แƒก แƒ–แƒ”แƒ“แƒ›แƒ”แƒขแƒ˜ แƒแƒฆแƒ›แƒแƒฉแƒœแƒ“แƒ. แƒแƒฅ โ€” แƒ›แƒแƒ›แƒ˜แƒฌแƒ˜แƒ แƒ›แƒ˜แƒกแƒ˜ แƒ’แƒแƒฃแƒฅแƒ›แƒ”แƒ‘แƒ, แƒ แƒแƒ“แƒ’แƒแƒœ Puppet-แƒก แƒ™แƒแƒœแƒคแƒ˜แƒ’แƒฃแƒ แƒแƒชแƒ˜แƒ˜แƒก แƒ›แƒ”แƒœแƒ”แƒฏแƒ”แƒ แƒแƒ“ แƒ“แƒ Gitlab-แƒก แƒ•แƒ”แƒ แƒกแƒ˜แƒ”แƒ‘แƒ˜แƒก แƒ™แƒแƒœแƒขแƒ แƒแƒšแƒ˜แƒก แƒกแƒ˜แƒกแƒขแƒ”แƒ›แƒแƒ“ แƒ•แƒ˜แƒงแƒ”แƒœแƒ”แƒ‘แƒ“แƒ˜. แƒ˜แƒ› แƒ“แƒ แƒแƒก, แƒ แƒแƒ›แƒ“แƒ”แƒœแƒแƒ“แƒแƒช แƒ›แƒ” แƒ’แƒแƒ•แƒ˜แƒ’แƒ”, Zabbix แƒ›แƒ—แƒ”แƒš แƒ™แƒแƒœแƒคแƒ˜แƒ’แƒฃแƒ แƒแƒชแƒ˜แƒแƒก แƒ›แƒแƒœแƒแƒชแƒ”แƒ›แƒ—แƒ แƒ‘แƒแƒ–แƒแƒจแƒ˜ แƒ˜แƒœแƒแƒฎแƒแƒ•แƒก, โ€‹โ€‹แƒแƒ›แƒ˜แƒขแƒแƒ› แƒ’แƒแƒฃแƒ’แƒ”แƒ‘แƒแƒ แƒ˜ แƒ˜แƒงแƒ, แƒ—แƒฃ แƒ แƒแƒ’แƒแƒ  แƒฃแƒœแƒ“แƒ แƒ›แƒ”แƒ›แƒแƒ แƒ—แƒ แƒ™แƒแƒœแƒคแƒ˜แƒ’แƒฃแƒ แƒแƒชแƒ˜แƒ แƒ›แƒ˜แƒ›แƒ“แƒ˜แƒœแƒแƒ แƒ” แƒžแƒ˜แƒ แƒแƒ‘แƒ”แƒ‘แƒจแƒ˜ แƒ“แƒ แƒ แƒแƒ’แƒแƒ  แƒฃแƒœแƒ“แƒ แƒ—แƒ•แƒแƒšแƒงแƒฃแƒ แƒ˜ แƒแƒ“แƒ”แƒ•แƒœแƒ”แƒ‘แƒฃแƒšแƒ˜แƒงแƒ แƒชแƒ•แƒšแƒ˜แƒšแƒ”แƒ‘แƒ”แƒ‘แƒก.
  • แƒžแƒ แƒแƒ›แƒ”แƒ—แƒ”แƒก แƒจแƒ”แƒกแƒแƒฎแƒ”แƒ‘ แƒกแƒแƒ‘แƒแƒšแƒแƒแƒ“ แƒ•แƒ˜แƒ›แƒกแƒฏแƒ”แƒšแƒ”แƒ‘แƒ—, แƒ’แƒแƒœแƒงแƒแƒคแƒ˜แƒšแƒ”แƒ‘แƒแƒจแƒ˜ แƒแƒ แƒกแƒ”แƒ‘แƒฃแƒšแƒ˜ แƒ’แƒแƒœแƒฌแƒงแƒแƒ‘แƒ˜แƒ—, แƒ›แƒแƒ’แƒ แƒแƒ› แƒ˜แƒ› แƒ“แƒ แƒแƒก แƒ›แƒ” แƒ˜แƒก แƒแƒ  แƒ“แƒแƒ•แƒ”แƒฃแƒคแƒšแƒ” แƒ“แƒ แƒ•แƒ”แƒ  แƒ•แƒแƒฉแƒ•แƒ”แƒœแƒ” แƒ แƒ”แƒแƒšแƒฃแƒ แƒ˜ แƒกแƒแƒ›แƒฃแƒจแƒแƒ แƒœแƒ˜แƒ›แƒฃแƒจแƒ˜ (แƒ™แƒแƒœแƒชแƒ”แƒคแƒชแƒ˜แƒ˜แƒก แƒ“แƒแƒ›แƒขแƒ™แƒ˜แƒชแƒ”แƒ‘แƒ), แƒแƒ›แƒ˜แƒขแƒแƒ› แƒ›แƒ˜แƒกแƒ˜ แƒ›แƒ˜แƒขแƒแƒ•แƒ”แƒ‘แƒ แƒ›แƒแƒ›แƒ˜แƒฌแƒ˜แƒ.
  • แƒแƒกแƒ”แƒ•แƒ” แƒแƒ แƒกแƒ”แƒ‘แƒแƒ‘แƒ“แƒ แƒ แƒแƒ›แƒ“แƒ”แƒœแƒ˜แƒ›แƒ” แƒกแƒฎแƒ•แƒ แƒ•แƒแƒ แƒ˜แƒแƒœแƒขแƒ˜, แƒ แƒแƒ›แƒšแƒ”แƒ‘แƒ˜แƒช แƒแƒœ แƒกแƒ˜แƒกแƒขแƒ”แƒ›แƒ˜แƒก แƒกแƒ แƒฃแƒš แƒ แƒ”แƒ“แƒ˜แƒ–แƒแƒ˜แƒœแƒก แƒ›แƒแƒ˜แƒ—แƒฎแƒแƒ•แƒ“แƒ, แƒแƒœ แƒกแƒแƒฌแƒงแƒ˜แƒก/แƒ›แƒ˜แƒขแƒแƒ•แƒ”แƒ‘แƒฃแƒš แƒ›แƒ“แƒ’แƒแƒ›แƒแƒ แƒ”แƒแƒ‘แƒแƒจแƒ˜ แƒ˜แƒงแƒ แƒ“แƒ แƒ˜แƒ›แƒแƒ•แƒ” แƒ›แƒ˜แƒ–แƒ”แƒ–แƒ˜แƒ— แƒฃแƒแƒ แƒงแƒแƒคแƒ˜แƒš แƒ˜แƒฅแƒœแƒ.

แƒกแƒแƒ‘แƒแƒšแƒแƒแƒ“, Icinga2-แƒ–แƒ” แƒจแƒ”แƒ•แƒฉแƒ”แƒ แƒ“แƒ˜ แƒกแƒแƒ›แƒ˜ แƒ›แƒ˜แƒ–แƒ”แƒ–แƒ˜แƒก แƒ’แƒแƒ›แƒ:

1 โ€” แƒ—แƒแƒ•แƒกแƒ”แƒ‘แƒแƒ“แƒแƒ‘แƒ Nrpe-แƒกแƒ—แƒแƒœ (แƒ™แƒšแƒ˜แƒ”แƒœแƒขแƒ˜แƒก แƒกแƒ”แƒ แƒ•แƒ˜แƒกแƒ˜, แƒ แƒแƒ›แƒ”แƒšแƒ˜แƒช แƒแƒ›แƒแƒฌแƒ›แƒ”แƒ‘แƒก Nagios-แƒ˜แƒก แƒ‘แƒ แƒซแƒแƒœแƒ”แƒ‘แƒ”แƒ‘แƒก). แƒ”แƒก แƒซแƒแƒšแƒ˜แƒแƒœ แƒ›แƒœแƒ˜แƒจแƒ•แƒœแƒ”แƒšแƒแƒ•แƒแƒœแƒ˜ แƒ˜แƒงแƒ, แƒ แƒแƒ“แƒ’แƒแƒœ แƒ˜แƒ› แƒ“แƒ แƒแƒก แƒฉแƒ•แƒ”แƒœ แƒ’แƒ•แƒฅแƒแƒœแƒ“แƒ 135 (แƒแƒฎแƒšแƒ 2019 แƒฌแƒ”แƒšแƒก แƒแƒ แƒ˜แƒก 165) แƒ•แƒ˜แƒ แƒขแƒฃแƒแƒšแƒฃแƒ แƒ˜ แƒ›แƒแƒœแƒฅแƒแƒœแƒ แƒฃแƒแƒ›แƒ แƒแƒ•แƒ˜ แƒ›แƒแƒ แƒ’แƒ”แƒ‘แƒฃแƒšแƒ˜ แƒกแƒ”แƒ แƒ•แƒ˜แƒกแƒ˜แƒ—/แƒจแƒ”แƒ›แƒแƒฌแƒ›แƒ”แƒ‘แƒ˜แƒ— แƒ“แƒ แƒแƒ› แƒงแƒ•แƒ”แƒšแƒแƒคแƒ แƒ˜แƒก แƒฎแƒ”แƒšแƒแƒฎแƒšแƒ แƒ’แƒแƒ™แƒ”แƒ—แƒ”แƒ‘แƒ แƒœแƒแƒ›แƒ“แƒ•แƒ˜แƒšแƒ˜ แƒขแƒ™แƒ˜แƒ•แƒ˜แƒšแƒ˜ แƒ˜แƒฅแƒœแƒ”แƒ‘แƒแƒ“แƒ.
2 - แƒงแƒ•แƒ”แƒšแƒ แƒ™แƒแƒœแƒคแƒ˜แƒ’แƒฃแƒ แƒแƒชแƒ˜แƒ˜แƒก แƒคแƒแƒ˜แƒšแƒ˜ แƒขแƒ”แƒฅแƒกแƒขแƒ˜แƒ, แƒ แƒแƒช แƒแƒ›แƒแƒ แƒขแƒ˜แƒ•แƒ”แƒ‘แƒก แƒแƒ› แƒกแƒแƒ™แƒ˜แƒ—แƒฎแƒ˜แƒก แƒ แƒ”แƒ“แƒแƒฅแƒขแƒ˜แƒ แƒ”แƒ‘แƒแƒก, แƒฅแƒ›แƒœแƒ˜แƒก แƒจแƒ”แƒ แƒฌแƒงแƒ›แƒ˜แƒก แƒ›แƒแƒ—แƒฎแƒแƒ•แƒœแƒ”แƒ‘แƒก แƒ˜แƒ›แƒ˜แƒก แƒกแƒแƒœแƒแƒฎแƒแƒ•แƒแƒ“, แƒ—แƒฃ แƒ แƒ แƒ“แƒแƒ”แƒ›แƒแƒขแƒ แƒแƒœ แƒฌแƒแƒ˜แƒจแƒแƒšแƒ.
3 แƒแƒ แƒ˜แƒก แƒชแƒแƒชแƒฎแƒแƒšแƒ˜ แƒ“แƒ แƒ›แƒ–แƒแƒ แƒ“แƒ˜ OpenSource แƒžแƒ แƒแƒ”แƒฅแƒขแƒ˜. แƒฉแƒ•แƒ”แƒœ แƒ’แƒ•แƒ˜แƒงแƒ•แƒแƒ แƒก OpenSource แƒ“แƒ แƒฌแƒ•แƒšแƒ˜แƒšแƒ˜ แƒจแƒ”แƒ•แƒ˜แƒขแƒแƒœแƒ”แƒ— แƒ›แƒแƒกแƒจแƒ˜ แƒžแƒ แƒแƒ‘แƒšแƒ”แƒ›แƒ”แƒ‘แƒ˜แƒก แƒ’แƒแƒ“แƒแƒกแƒแƒญแƒ แƒ”แƒšแƒแƒ“ Pull Requests-แƒ˜แƒกแƒ แƒ“แƒ Issues-แƒ˜แƒก แƒจแƒ”แƒฅแƒ›แƒœแƒ˜แƒ—.

แƒ›แƒแƒจ แƒแƒกแƒ”, แƒ“แƒแƒ•แƒ˜แƒฌแƒงแƒ”แƒ—, Icinga2.

แƒžแƒ˜แƒ แƒ•แƒ”แƒšแƒ˜, แƒ แƒแƒกแƒแƒช แƒจแƒ”แƒ•แƒ”แƒฏแƒแƒฎแƒ”, แƒฉแƒ”แƒ›แƒ˜ แƒ™แƒแƒšแƒ”แƒ’แƒ”แƒ‘แƒ˜แƒก แƒ˜แƒœแƒ”แƒ แƒชแƒ˜แƒ แƒ˜แƒงแƒ. แƒงแƒ•แƒ”แƒšแƒ แƒ›แƒ˜แƒฉแƒ•แƒ”แƒฃแƒšแƒ˜ แƒ˜แƒงแƒ Nagios/Nadzhios-แƒก (แƒ—แƒฃแƒ›แƒชแƒ แƒแƒฅแƒแƒช แƒ™แƒ˜ แƒ•แƒ”แƒ  แƒจแƒ”แƒ—แƒแƒœแƒฎแƒ›แƒ“แƒœแƒ”แƒœ แƒ›แƒ˜แƒก แƒฌแƒแƒ แƒ›แƒแƒ—แƒฅแƒ›แƒแƒ–แƒ”) แƒ“แƒ CheckMK แƒ˜แƒœแƒขแƒ”แƒ แƒคแƒ”แƒ˜แƒกแƒก. Icinga-แƒก แƒ˜แƒœแƒขแƒ”แƒ แƒคแƒ”แƒ˜แƒกแƒ˜ แƒกแƒ แƒฃแƒšแƒ˜แƒแƒ“ แƒ’แƒแƒœแƒกแƒฎแƒ•แƒแƒ•แƒ”แƒ‘แƒฃแƒšแƒแƒ“ แƒ’แƒแƒ›แƒแƒ˜แƒงแƒฃแƒ แƒ”แƒ‘แƒ (แƒ”แƒก แƒ›แƒ˜แƒœแƒฃแƒกแƒ˜ แƒ˜แƒงแƒ), แƒ›แƒแƒ’แƒ แƒแƒ› แƒจแƒ”แƒกแƒแƒซแƒšแƒ”แƒ‘แƒ”แƒšแƒ˜แƒ แƒ›แƒแƒฅแƒœแƒ˜แƒšแƒแƒ“ แƒ›แƒแƒแƒ แƒ’แƒแƒ— แƒ˜แƒก, แƒ แƒแƒช แƒ’แƒญแƒ˜แƒ แƒ“แƒ”แƒ‘แƒแƒ— แƒคแƒ˜แƒšแƒขแƒ แƒ”แƒ‘แƒ˜แƒก แƒ’แƒแƒ›แƒแƒงแƒ”แƒœแƒ”แƒ‘แƒ˜แƒ—, แƒคแƒแƒฅแƒขแƒ˜แƒฃแƒ แƒแƒ“ แƒœแƒ”แƒ‘แƒ˜แƒกแƒ›แƒ˜แƒ”แƒ แƒ˜ แƒžแƒแƒ แƒแƒ›แƒ”แƒขแƒ แƒ˜แƒกแƒ—แƒ•แƒ˜แƒก (แƒ”แƒก แƒžแƒšแƒ˜แƒฃแƒกแƒ˜ แƒ˜แƒงแƒ, แƒ›แƒแƒ’แƒ แƒแƒ› แƒ›แƒ” แƒแƒ›แƒ˜แƒกแƒ—แƒ•แƒ˜แƒก แƒ“แƒ˜แƒ“แƒ˜ แƒ‘แƒ แƒซแƒแƒšแƒ แƒ’แƒแƒ•แƒฌแƒ˜แƒ”).

แƒคแƒ˜แƒšแƒขแƒ แƒ”แƒ‘แƒ˜แƒ›แƒ˜แƒ’แƒ แƒแƒชแƒ˜แƒ แƒœแƒแƒ’แƒ˜แƒแƒกแƒ˜แƒ“แƒแƒœ Icinga2-แƒจแƒ˜ แƒแƒ•แƒกแƒขแƒ แƒแƒšแƒ˜แƒแƒจแƒ˜

แƒจแƒ”แƒแƒคแƒแƒกแƒ”แƒ— แƒ’แƒแƒ“แƒแƒฎแƒ•แƒ”แƒ•แƒ˜แƒก แƒ–แƒแƒšแƒ˜แƒก แƒ–แƒแƒ›แƒ˜แƒกแƒ แƒ“แƒ แƒ’แƒแƒ“แƒแƒฎแƒ•แƒ”แƒ•แƒ˜แƒก แƒ•แƒ”แƒšแƒ˜แƒก แƒ–แƒแƒ›แƒ˜แƒก แƒ—แƒแƒœแƒแƒคแƒแƒ แƒ“แƒแƒ‘แƒ.

แƒ›แƒ”แƒแƒ แƒ”แƒช, แƒงแƒ•แƒ”แƒšแƒ แƒ›แƒ˜แƒฉแƒ•แƒ”แƒฃแƒšแƒ˜ แƒ˜แƒงแƒ แƒ›แƒ—แƒ”แƒšแƒ˜ แƒ˜แƒœแƒคแƒ แƒแƒกแƒขแƒ แƒฃแƒฅแƒขแƒฃแƒ แƒ˜แƒก แƒ”แƒ แƒ— แƒ›แƒแƒœแƒ˜แƒขแƒแƒ แƒ–แƒ” แƒœแƒแƒฎแƒ•แƒแƒก, แƒ แƒแƒ“แƒ’แƒแƒœ CheckMk แƒกแƒแƒจแƒฃแƒแƒšแƒ”แƒ‘แƒแƒก แƒ˜แƒซแƒšแƒ”แƒแƒ“แƒ แƒ˜แƒ›แƒฃแƒจแƒแƒแƒก แƒ แƒแƒ›แƒ“แƒ”แƒœแƒ˜แƒ›แƒ” Nagios แƒฐแƒแƒกแƒขแƒ—แƒแƒœ, แƒ›แƒแƒ’แƒ แƒแƒ› Icinga-แƒก แƒ˜แƒœแƒขแƒ”แƒ แƒคแƒ”แƒ˜แƒกแƒก แƒแƒ›แƒ˜แƒก แƒ’แƒแƒ™แƒ”แƒ—แƒ”แƒ‘แƒ แƒแƒ  แƒจแƒ”แƒ”แƒซแƒšแƒ (แƒกแƒ˜แƒœแƒแƒ›แƒ“แƒ•แƒ˜แƒšแƒ”แƒจแƒ˜, แƒจแƒ”แƒ”แƒซแƒšแƒ, แƒ›แƒแƒ’แƒ แƒแƒ› แƒแƒ›แƒแƒ–แƒ” แƒฅแƒ•แƒ”แƒ›แƒแƒ— แƒ›แƒแƒ’แƒ˜แƒงแƒ•แƒ”แƒ‘แƒ˜แƒ—). แƒแƒšแƒขแƒ”แƒ แƒœแƒแƒขแƒ˜แƒ•แƒ แƒ˜แƒงแƒ Thruk-แƒ˜แƒก แƒกแƒแƒฎแƒ”แƒšแƒ˜แƒ— แƒชแƒœแƒแƒ‘แƒ˜แƒšแƒ˜ แƒ แƒแƒ›, แƒ›แƒแƒ’แƒ แƒแƒ› แƒ›แƒ˜แƒกแƒ›แƒ แƒ“แƒ˜แƒ–แƒแƒ˜แƒœแƒ›แƒ แƒ’แƒฃแƒœแƒ“แƒ˜แƒก แƒงแƒ•แƒ”แƒšแƒ แƒฌแƒ”แƒ•แƒ แƒ˜ แƒ’แƒแƒแƒ’แƒ˜แƒŸแƒ, แƒ’แƒแƒ แƒ“แƒ แƒ”แƒ แƒ—แƒ˜แƒกแƒ - แƒ›แƒ˜แƒกแƒ˜ แƒจแƒ”แƒ›แƒแƒ—แƒแƒ•แƒแƒ–แƒ”แƒ‘แƒ˜แƒก (แƒแƒ แƒ แƒ›แƒ”).

แƒ—แƒ แƒฃแƒ™แƒ˜แƒก แƒชแƒ”แƒชแƒฎแƒšแƒจแƒ˜ แƒฉแƒแƒ’แƒ“แƒ”แƒ‘แƒ - แƒ’แƒฃแƒœแƒ“แƒ˜แƒก แƒ”แƒ แƒ—แƒกแƒฃแƒšแƒแƒ•แƒแƒœแƒ˜ แƒ’แƒแƒ“แƒแƒฌแƒงแƒ•แƒ”แƒขแƒ˜แƒšแƒ”แƒ‘แƒแƒ›แƒ˜แƒ’แƒ แƒแƒชแƒ˜แƒ แƒœแƒแƒ’แƒ˜แƒแƒกแƒ˜แƒ“แƒแƒœ Icinga2-แƒจแƒ˜ แƒแƒ•แƒกแƒขแƒ แƒแƒšแƒ˜แƒแƒจแƒ˜

แƒ แƒแƒ›แƒ“แƒ”แƒœแƒ˜แƒ›แƒ”แƒ“แƒฆแƒ˜แƒแƒœแƒ˜ แƒ˜แƒ“แƒ”แƒ”แƒ‘แƒ˜แƒก แƒ’แƒ”แƒœแƒ”แƒ แƒ˜แƒ แƒ”แƒ‘แƒ˜แƒก แƒจแƒ”แƒ›แƒ“แƒ”แƒ’, แƒ’แƒแƒ›แƒ˜แƒฉแƒœแƒ“แƒ แƒ™แƒšแƒแƒกแƒขแƒ”แƒ แƒฃแƒšแƒ˜ แƒ›แƒแƒœแƒ˜แƒขแƒแƒ แƒ˜แƒœแƒ’แƒ˜แƒก แƒ˜แƒ“แƒ”แƒ, แƒกแƒแƒ“แƒแƒช แƒฌแƒแƒ แƒ›แƒแƒ”แƒ‘แƒ˜แƒก แƒ–แƒแƒœแƒแƒจแƒ˜ แƒ˜แƒฅแƒœแƒ”แƒ‘แƒ แƒ”แƒ แƒ—แƒ˜ แƒ›แƒ—แƒแƒ•แƒแƒ แƒ˜ แƒฐแƒแƒกแƒขแƒ˜ แƒ“แƒ แƒแƒ แƒ˜ แƒ›แƒแƒœแƒ - แƒ”แƒ แƒ—แƒ˜ dev/test-แƒจแƒ˜ แƒ“แƒ แƒ”แƒ แƒ—แƒ˜ แƒ’แƒแƒ แƒ” แƒฐแƒแƒกแƒขแƒ˜, แƒ แƒแƒ›แƒ”แƒšแƒ˜แƒช แƒ›แƒ“แƒ”แƒ‘แƒแƒ แƒ”แƒแƒ‘แƒก แƒกแƒฎแƒ•แƒ แƒžแƒ แƒแƒ•แƒแƒ˜แƒ“แƒ”แƒ แƒ—แƒแƒœ, แƒฉแƒ•แƒ”แƒœแƒ˜ แƒกแƒ”แƒ แƒ•แƒ˜แƒกแƒ”แƒ‘แƒ˜แƒก แƒ›แƒแƒœแƒ˜แƒขแƒแƒ แƒ˜แƒœแƒ’แƒ˜แƒก แƒ›แƒ˜แƒ–แƒœแƒ˜แƒ— แƒ™แƒšแƒ˜แƒ”แƒœแƒขแƒ˜แƒก แƒแƒœ แƒ’แƒแƒ แƒ” แƒ“แƒแƒ›แƒ™แƒ•แƒ˜แƒ แƒ•แƒ”แƒ‘แƒšแƒ˜แƒก แƒ—แƒ•แƒแƒšแƒกแƒแƒ–แƒ แƒ˜แƒกแƒ˜แƒ—. แƒแƒ› แƒ™แƒแƒœแƒคแƒ˜แƒ’แƒฃแƒ แƒแƒชแƒ˜แƒแƒ› แƒกแƒแƒจแƒฃแƒแƒšแƒ”แƒ‘แƒ แƒ›แƒแƒ’แƒ•แƒชแƒ, แƒงแƒ•แƒ”แƒšแƒ แƒžแƒ แƒแƒ‘แƒšแƒ”แƒ›แƒ แƒ”แƒ แƒ— แƒ•แƒ”แƒ‘ แƒ˜แƒœแƒขแƒ”แƒ แƒคแƒ”แƒ˜แƒกแƒจแƒ˜ แƒ’แƒ•แƒ”แƒœแƒแƒฎแƒ แƒ“แƒ แƒกแƒแƒ™แƒ›แƒแƒแƒ“ แƒ™แƒแƒ แƒ’แƒแƒ“ แƒ›แƒฃแƒจแƒแƒแƒ‘แƒ“แƒ, แƒ›แƒแƒ’แƒ แƒแƒ› Puppet... Puppet-แƒ˜แƒก แƒžแƒ แƒแƒ‘แƒšแƒ”แƒ›แƒ แƒ˜แƒก แƒ˜แƒงแƒ, แƒ แƒแƒ› แƒ›แƒ—แƒแƒ•แƒแƒ แƒ˜ แƒฐแƒแƒกแƒขแƒ˜ แƒแƒฎแƒšแƒ แƒกแƒ˜แƒกแƒขแƒ”แƒ›แƒแƒจแƒ˜ แƒแƒ แƒกแƒ”แƒ‘แƒฃแƒšแƒ˜ แƒงแƒ•แƒ”แƒšแƒ แƒฐแƒแƒกแƒขแƒ˜แƒกแƒ แƒ“แƒ แƒกแƒ”แƒ แƒ•แƒ˜แƒกแƒ˜แƒก/แƒจแƒ”แƒ›แƒแƒฌแƒ›แƒ”แƒ‘แƒ˜แƒก แƒจแƒ”แƒกแƒแƒฎแƒ”แƒ‘ แƒฃแƒœแƒ“แƒ แƒกแƒชแƒแƒ“แƒœแƒแƒ“แƒ แƒ“แƒ แƒ›แƒแƒ—แƒ˜ แƒ–แƒแƒœแƒ”แƒ‘แƒก แƒจแƒแƒ แƒ˜แƒก แƒ’แƒแƒœแƒแƒฌแƒ˜แƒšแƒ”แƒ‘แƒ แƒฃแƒฌแƒ”แƒ•แƒ“แƒ (dev-test, staging-prod, ext), แƒ›แƒแƒ’แƒ แƒแƒ› แƒชแƒ•แƒšแƒ˜แƒšแƒ”แƒ‘แƒ”แƒ‘แƒ˜แƒก แƒ’แƒแƒ’แƒ–แƒแƒ•แƒœแƒแƒก Icinga API-แƒ˜แƒก แƒกแƒแƒจแƒฃแƒแƒšแƒ”แƒ‘แƒ˜แƒ— แƒ แƒแƒ›แƒ“แƒ”แƒœแƒ˜แƒ›แƒ” แƒฌแƒแƒ›แƒ˜ แƒกแƒญแƒ˜แƒ แƒ“แƒ”แƒ‘แƒ, แƒฎแƒแƒšแƒ Puppet-แƒ˜แƒก แƒ™แƒแƒขแƒแƒšแƒแƒ’แƒ˜แƒก แƒงแƒ•แƒ”แƒšแƒ แƒกแƒ”แƒ แƒ•แƒ˜แƒกแƒ˜แƒก แƒจแƒ”แƒ“แƒ’แƒ”แƒœแƒแƒก แƒงแƒ•แƒ”แƒšแƒ แƒฐแƒแƒกแƒขแƒ˜แƒกแƒ—แƒ•แƒ˜แƒก แƒ แƒแƒ›แƒ“แƒ”แƒœแƒ˜แƒ›แƒ” แƒฌแƒฃแƒ—แƒ˜ แƒกแƒญแƒ˜แƒ แƒ“แƒ”แƒ‘แƒ. แƒแƒ›แƒแƒจแƒ˜ แƒ˜แƒกแƒ”แƒ• แƒ›แƒ” แƒ›แƒแƒ“แƒแƒœแƒแƒจแƒแƒฃแƒšแƒ”แƒ‘แƒ”แƒœ, แƒ—แƒฃแƒ›แƒชแƒ แƒฃแƒ™แƒ•แƒ” แƒ แƒแƒ›แƒ“แƒ”แƒœแƒฏแƒ”แƒ แƒ›แƒ” แƒแƒ•แƒฎแƒกแƒ”แƒœแƒ˜, แƒ แƒแƒ’แƒแƒ  แƒ›แƒฃแƒจแƒแƒแƒ‘แƒก แƒ”แƒก แƒงแƒ•แƒ”แƒšแƒแƒคแƒ”แƒ แƒ˜ แƒ“แƒ แƒ แƒแƒขแƒแƒ› แƒกแƒญแƒ˜แƒ แƒ“แƒ”แƒ‘แƒ แƒแƒ›แƒ“แƒ”แƒœ แƒฎแƒแƒœแƒก.

แƒ›แƒ”แƒกแƒแƒ›แƒ” - แƒคแƒ˜แƒคแƒฅแƒ”แƒ‘แƒ˜แƒก แƒ—แƒแƒ˜แƒ’แƒฃแƒšแƒ˜ - แƒ˜แƒกแƒ”แƒ—แƒ˜ แƒ แƒแƒ›, แƒ แƒแƒช แƒ–แƒแƒ’แƒแƒ“แƒ˜ แƒกแƒ˜แƒกแƒขแƒ”แƒ›แƒ˜แƒ“แƒแƒœ แƒ’แƒแƒ›แƒแƒ˜แƒ แƒฉแƒ”แƒ•แƒ, แƒ แƒแƒ“แƒ’แƒแƒœ แƒ›แƒแƒ— แƒ แƒแƒฆแƒแƒช แƒ’แƒแƒœแƒกแƒแƒ™แƒฃแƒ—แƒ แƒ”แƒ‘แƒฃแƒšแƒ˜ แƒแƒฅแƒ•แƒ—, แƒแƒ›แƒ˜แƒขแƒแƒ› แƒ–แƒแƒ’แƒแƒ“แƒ˜ แƒฌแƒ”แƒกแƒ”แƒ‘แƒ˜ แƒ›แƒแƒ—แƒ–แƒ” แƒแƒ  แƒ•แƒ แƒชแƒ”แƒšแƒ“แƒ”แƒ‘แƒ. แƒ”แƒก แƒžแƒ แƒแƒ‘แƒšแƒ”แƒ›แƒ แƒคแƒ แƒแƒœแƒขแƒแƒšแƒฃแƒ แƒ˜ แƒจแƒ”แƒขแƒ”แƒ•แƒ˜แƒ— แƒ›แƒแƒ’แƒ•แƒแƒ แƒ“แƒ - แƒ—แƒฃ แƒกแƒ˜แƒ’แƒœแƒแƒšแƒ˜แƒ–แƒแƒชแƒ˜แƒแƒ, แƒ›แƒแƒ’แƒ แƒแƒ› แƒกแƒ˜แƒœแƒแƒ›แƒ“แƒ•แƒ˜แƒšแƒ”แƒจแƒ˜ แƒงแƒ•แƒ”แƒšแƒแƒคแƒ”แƒ แƒ˜ แƒ™แƒแƒ แƒ’แƒแƒ“แƒแƒ, แƒ›แƒแƒจแƒ˜แƒœ แƒแƒฅ แƒฃแƒคแƒ แƒ แƒฆแƒ แƒ›แƒแƒ“ แƒฃแƒœแƒ“แƒ แƒฉแƒแƒฃแƒฆแƒ แƒ›แƒแƒ•แƒ“แƒ”แƒ— แƒ“แƒ แƒ’แƒแƒแƒ แƒ™แƒ•แƒ˜แƒแƒ—, แƒ แƒแƒขแƒแƒ› แƒ›แƒแƒคแƒ แƒ—แƒฎแƒ˜แƒšแƒ”แƒ‘แƒก, แƒ—แƒฃแƒ›แƒชแƒ แƒแƒ  แƒฃแƒœแƒ“แƒ แƒ›แƒแƒคแƒ แƒ—แƒฎแƒ˜แƒšแƒแƒก. แƒแƒœ แƒžแƒ˜แƒ แƒ˜แƒฅแƒ˜แƒ— - แƒ แƒแƒขแƒแƒ› แƒ•แƒแƒ แƒ“แƒ”แƒ‘แƒ แƒžแƒแƒœแƒ˜แƒ™แƒแƒจแƒ˜ แƒœแƒแƒ’แƒ˜แƒแƒกแƒ˜ แƒ“แƒ แƒ แƒแƒขแƒแƒ› แƒแƒ แƒ แƒ˜แƒฉแƒ˜แƒœแƒ’แƒ.

แƒ›แƒ”แƒแƒ—แƒฎแƒ”, Nagios แƒแƒฅ แƒฉแƒ”แƒ›แƒ–แƒ” แƒกแƒแƒ›แƒ˜ แƒฌแƒšแƒ˜แƒ— แƒแƒ“แƒ แƒ” แƒ›แƒฃแƒจแƒแƒแƒ‘แƒ“แƒ แƒ“แƒ แƒ—แƒแƒ•แƒ“แƒแƒžแƒ˜แƒ แƒ•แƒ”แƒšแƒแƒ“ แƒฃแƒคแƒ แƒ แƒ›แƒ”แƒขแƒแƒ“ แƒ”แƒœแƒ“แƒแƒ‘แƒแƒ“แƒœแƒ”แƒœ, แƒ•แƒ˜แƒ“แƒ แƒ” แƒฉแƒ”แƒ›แƒก แƒแƒฎแƒšแƒแƒ“แƒจแƒ”แƒฅแƒ›แƒœแƒ˜แƒš แƒฐแƒ˜แƒžแƒกแƒขแƒ”แƒ แƒฃแƒš แƒกแƒ˜แƒกแƒขแƒ”แƒ›แƒแƒก, แƒแƒ›แƒ˜แƒขแƒแƒ› แƒงแƒแƒ•แƒ”แƒš แƒฏแƒ”แƒ แƒ–แƒ”, แƒ แƒแƒชแƒ Icinga แƒžแƒแƒœแƒ˜แƒ™แƒแƒก แƒ˜แƒฌแƒ•แƒ”แƒ•แƒ“แƒ, แƒแƒ แƒแƒ•แƒ˜แƒœ แƒแƒ แƒแƒคแƒ”แƒ แƒก แƒแƒ™แƒ”แƒ—แƒ”แƒ‘แƒ“แƒ, แƒกแƒแƒœแƒแƒ› Nagios แƒ˜แƒ›แƒแƒ•แƒ” แƒกแƒแƒ™แƒ˜แƒ—แƒฎแƒ˜แƒ— แƒแƒ  แƒแƒฆแƒคแƒ แƒ—แƒแƒ•แƒแƒœแƒ“แƒ”แƒ‘แƒแƒ“แƒ. แƒ—แƒฃแƒ›แƒชแƒ, Icinga แƒซแƒแƒšแƒ˜แƒแƒœ แƒ˜แƒจแƒ•แƒ˜แƒแƒ—แƒแƒ“ แƒแƒ•แƒ แƒชแƒ”แƒšแƒ”แƒ‘แƒ“แƒ แƒ แƒ”แƒแƒšแƒฃแƒ  แƒ’แƒแƒœแƒ’แƒแƒจแƒก Nagios-แƒ›แƒ“แƒ” แƒ“แƒ แƒแƒ›แƒแƒก แƒกแƒ”แƒ แƒ˜แƒแƒ–แƒฃแƒš แƒœแƒแƒ™แƒšแƒแƒ•แƒแƒœแƒ”แƒ‘แƒแƒ“ แƒ›แƒ˜แƒ•แƒ˜แƒฉแƒœแƒ”แƒ•, แƒ แƒแƒ›แƒ”แƒšแƒกแƒแƒช โ€žแƒ“แƒแƒกแƒ™แƒ•แƒœแƒ”แƒ‘แƒ˜แƒกโ€œ แƒ’แƒแƒœแƒงแƒแƒคแƒ˜แƒšแƒ”แƒ‘แƒแƒจแƒ˜ แƒ’แƒแƒœแƒ•แƒ˜แƒฎแƒ˜แƒšแƒแƒ•.

แƒกแƒแƒ‘แƒแƒšแƒแƒแƒ“, แƒ”แƒฅแƒกแƒžแƒšแƒฃแƒแƒขแƒแƒชแƒ˜แƒแƒจแƒ˜ แƒ’แƒแƒจแƒ•แƒ”แƒ‘แƒ 5 แƒ—แƒ•แƒ”แƒ–แƒ” แƒ›แƒ”แƒขแƒ˜ แƒฎแƒœแƒ˜แƒ— แƒ’แƒแƒ“แƒแƒ˜แƒ“แƒ (แƒกแƒ˜แƒœแƒแƒ›แƒ“แƒ•แƒ˜แƒšแƒ”แƒจแƒ˜, แƒ“แƒแƒ’แƒ”แƒ’แƒ›แƒ˜แƒšแƒ˜ แƒ˜แƒงแƒ 28 แƒฌแƒšแƒ˜แƒก 2018 แƒ˜แƒ•แƒœแƒ˜แƒกแƒก - 3 แƒฌแƒšแƒ˜แƒก 2018 แƒ“แƒ”แƒ™แƒ”แƒ›แƒ‘แƒ”แƒ แƒก), แƒซแƒ˜แƒ แƒ˜แƒ—แƒแƒ“แƒแƒ“ โ€žแƒžแƒแƒ แƒ˜แƒขแƒ”แƒขแƒ˜แƒก แƒจแƒ”แƒ›แƒแƒฌแƒ›แƒ”แƒ‘แƒ˜แƒกโ€œ แƒ’แƒแƒ›แƒ - แƒ”แƒก แƒกแƒ˜แƒกแƒฃแƒšแƒ”แƒšแƒ”แƒ, แƒ แƒแƒชแƒ Nagios-แƒจแƒ˜ แƒ แƒแƒ›แƒ“แƒ”แƒœแƒ˜แƒ›แƒ” แƒกแƒ”แƒ แƒ•แƒ˜แƒกแƒ˜แƒ, แƒ แƒแƒ›แƒ”แƒšแƒ—แƒ แƒจแƒ”แƒกแƒแƒฎแƒ”แƒ‘แƒแƒช แƒ‘แƒแƒšแƒ แƒ แƒแƒ›แƒ“แƒ”แƒœแƒ˜แƒ›แƒ” แƒฌแƒšแƒ˜แƒก แƒ’แƒแƒœแƒ›แƒแƒ•แƒšแƒแƒ‘แƒแƒจแƒ˜ แƒแƒ แƒแƒ•แƒ˜แƒก แƒแƒ แƒแƒคแƒ”แƒ แƒ˜ แƒกแƒ›แƒ”แƒœแƒ˜แƒ, แƒ›แƒแƒ’แƒ แƒแƒ› แƒแƒฎแƒšแƒ, แƒฏแƒแƒœแƒ“แƒแƒ‘แƒ, แƒฃแƒ›แƒ˜แƒ–แƒ”แƒ–แƒแƒ“ แƒ’แƒแƒ›แƒแƒกแƒชแƒ”แƒก แƒ™แƒ แƒ˜แƒขแƒ˜แƒ™แƒ แƒ“แƒ แƒ›แƒแƒ›แƒ˜แƒฌแƒ˜แƒ แƒแƒฎแƒกแƒœแƒ, แƒ—แƒฃ แƒ แƒแƒขแƒแƒ› แƒแƒ  แƒแƒ แƒ˜แƒแƒœ แƒ˜แƒกแƒ˜แƒœแƒ˜ แƒฉแƒ”แƒ›แƒก แƒžแƒแƒœแƒ”แƒšแƒจแƒ˜ แƒ“แƒ แƒ›แƒแƒ›แƒ˜แƒฌแƒ˜แƒ แƒ›แƒแƒ—แƒ˜ Icinga-แƒจแƒ˜ แƒ“แƒแƒ›แƒแƒขแƒ”แƒ‘แƒ, แƒ แƒแƒ—แƒ โ€žแƒžแƒแƒ แƒ˜แƒขแƒ”แƒขแƒ˜แƒก แƒจแƒ”แƒ›แƒแƒฌแƒ›แƒ”แƒ‘แƒ แƒ“แƒแƒกแƒ แƒฃแƒšแƒ”แƒ‘แƒฃแƒšแƒ˜แƒงแƒโ€œ (Nagios-แƒจแƒ˜ แƒงแƒ•แƒ”แƒšแƒ แƒกแƒ”แƒ แƒ•แƒ˜แƒกแƒ˜/แƒจแƒ”แƒ›แƒแƒฌแƒ›แƒ”แƒ‘แƒ แƒจแƒ”แƒ”แƒกแƒแƒ‘แƒแƒ›แƒ”แƒ‘แƒ Icinga-แƒจแƒ˜ แƒแƒ แƒกแƒ”แƒ‘แƒฃแƒš แƒกแƒ”แƒ แƒ•แƒ˜แƒกแƒ”แƒ‘แƒก/แƒจแƒ”แƒ›แƒแƒฌแƒ›แƒ”แƒ‘แƒ”แƒ‘แƒก).

แƒ’แƒแƒœแƒฎแƒแƒ แƒชแƒ˜แƒ”แƒšแƒ”แƒ‘แƒ:
แƒžแƒ˜แƒ แƒ•แƒ”แƒšแƒ˜ แƒแƒ แƒ˜แƒก แƒ™แƒแƒ“แƒ˜แƒกแƒ แƒ“แƒ แƒ›แƒแƒœแƒแƒชแƒ”แƒ›แƒ”แƒ‘แƒ˜แƒก แƒแƒ›แƒ˜, แƒ›แƒแƒ’แƒแƒšแƒ˜แƒ—แƒแƒ“, Puppet Style-แƒจแƒ˜. แƒงแƒ•แƒ”แƒšแƒ แƒ›แƒแƒœแƒแƒชแƒ”แƒ›แƒ˜, แƒแƒ‘แƒกแƒแƒšแƒฃแƒขแƒฃแƒ แƒแƒ“ แƒงแƒ•แƒ”แƒšแƒแƒคแƒ”แƒ แƒ˜, แƒฃแƒœแƒ“แƒ แƒ˜แƒงแƒแƒก Hiera-แƒจแƒ˜ แƒ“แƒ แƒกแƒฎแƒ•แƒ แƒแƒ แƒแƒคแƒ”แƒ แƒ˜. แƒงแƒ•แƒ”แƒšแƒ แƒ™แƒแƒ“แƒ˜ .pp แƒคแƒแƒ˜แƒšแƒ”แƒ‘แƒจแƒ˜แƒ. แƒชแƒ•แƒšแƒแƒ“แƒ”แƒ‘แƒ˜, แƒแƒ‘แƒกแƒขแƒ แƒแƒฅแƒชแƒ˜แƒ”แƒ‘แƒ˜, แƒคแƒฃแƒœแƒฅแƒชแƒ˜แƒ”แƒ‘แƒ˜ - แƒงแƒ•แƒ”แƒšแƒแƒคแƒ”แƒ แƒ˜ pp-แƒจแƒ˜ แƒ›แƒ˜แƒ“แƒ˜แƒก.
แƒจแƒ”แƒ“แƒ”แƒ’แƒแƒ“, แƒฉแƒ•แƒ”แƒœ แƒ’แƒ•แƒแƒฅแƒ•แƒก แƒ•แƒ˜แƒ แƒขแƒฃแƒแƒšแƒฃแƒ แƒ˜ แƒ›แƒแƒœแƒฅแƒแƒœแƒ”แƒ‘แƒ˜แƒก แƒ”แƒ แƒ—แƒแƒ‘แƒšแƒ˜แƒแƒ‘แƒ (แƒฌแƒ”แƒ แƒ˜แƒก แƒ›แƒแƒ›แƒ”แƒœแƒขแƒ˜แƒกแƒ—แƒ•แƒ˜แƒก 165) แƒ“แƒ 68 แƒ•แƒ”แƒ‘ แƒแƒžแƒšแƒ˜แƒ™แƒแƒชแƒ˜แƒ, แƒ แƒแƒ›แƒ”แƒšแƒ—แƒ แƒคแƒฃแƒœแƒฅแƒชแƒ˜แƒแƒœแƒ˜แƒ แƒ”แƒ‘แƒ แƒ“แƒ SSL แƒกแƒ”แƒ แƒ—แƒ˜แƒคแƒ˜แƒ™แƒแƒขแƒ”แƒ‘แƒ˜แƒก แƒ•แƒแƒšแƒ˜แƒ“แƒฃแƒ แƒแƒ‘แƒ แƒ›แƒแƒœแƒ˜แƒขแƒแƒ แƒ˜แƒœแƒ’แƒก แƒกแƒแƒญแƒ˜แƒ แƒแƒ”แƒ‘แƒก. แƒ—แƒฃแƒ›แƒชแƒ, แƒ˜แƒกแƒขแƒแƒ แƒ˜แƒฃแƒšแƒ˜ แƒžแƒ แƒแƒ‘แƒšแƒ”แƒ›แƒ”แƒ‘แƒ˜แƒก แƒ’แƒแƒ›แƒ, แƒแƒžแƒšแƒ˜แƒ™แƒแƒชแƒ˜แƒ”แƒ‘แƒ˜แƒก แƒ›แƒแƒœแƒ˜แƒขแƒแƒ แƒ˜แƒœแƒ’แƒ˜แƒก แƒ˜แƒœแƒคแƒแƒ แƒ›แƒแƒชแƒ˜แƒ แƒแƒฆแƒ”แƒ‘แƒฃแƒšแƒ˜แƒ แƒชแƒแƒšแƒ™แƒ” gitlab แƒกแƒแƒชแƒแƒ•แƒ˜แƒ“แƒแƒœ แƒ“แƒ แƒ›แƒแƒœแƒแƒชแƒ”แƒ›แƒ—แƒ แƒคแƒแƒ แƒ›แƒแƒขแƒ˜ แƒแƒ  แƒจแƒ”แƒชแƒ•แƒšแƒ˜แƒšแƒ Puppet 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
              }
            }
          }
        }
      }
    }
  }
}

แƒ›แƒแƒกแƒžแƒ˜แƒœแƒซแƒšแƒ˜แƒกแƒ แƒ“แƒ แƒกแƒ”แƒ แƒ•แƒ˜แƒกแƒ˜แƒก แƒ™แƒแƒœแƒคแƒ˜แƒ’แƒฃแƒ แƒแƒชแƒ˜แƒ˜แƒก แƒ™แƒแƒ“แƒ˜แƒช แƒกแƒแƒจแƒ˜แƒœแƒšแƒแƒ“ แƒ’แƒแƒ›แƒแƒ˜แƒงแƒฃแƒ แƒ”แƒ‘แƒ:

แƒ›แƒแƒœแƒ˜แƒขแƒแƒ แƒ˜แƒœแƒ’แƒ˜/แƒ™แƒแƒœแƒคแƒ˜แƒ’แƒฃแƒ แƒแƒชแƒ˜แƒ.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',
  }

}

แƒ›แƒ” แƒฏแƒ”แƒ  แƒ™แƒ˜แƒ“แƒ”แƒ• แƒ•แƒ›แƒฃแƒจแƒแƒแƒ‘ แƒแƒ› แƒœแƒฃแƒ“แƒšแƒ–แƒ” แƒ“แƒ แƒ•แƒชแƒ“แƒ˜แƒšแƒแƒ‘ แƒ›แƒ˜แƒก แƒ’แƒแƒฃแƒ›แƒฏแƒแƒ‘แƒ”แƒกแƒ”แƒ‘แƒแƒก, แƒ แƒแƒ›แƒ“แƒ”แƒœแƒแƒ“แƒแƒช แƒจแƒ”แƒ›แƒ˜แƒซแƒšแƒ˜แƒ. แƒ—แƒฃแƒ›แƒชแƒ, แƒกแƒฌแƒแƒ แƒ”แƒ“ แƒแƒ› แƒ™แƒแƒ“แƒ›แƒ แƒ›แƒแƒ›แƒชแƒ แƒกแƒแƒจแƒฃแƒแƒšแƒ”แƒ‘แƒ แƒ’แƒแƒ›แƒแƒ›แƒ”แƒงแƒ”แƒœแƒ”แƒ‘แƒ˜แƒœแƒ แƒ›แƒแƒ แƒขแƒ˜แƒ•แƒ˜ แƒ“แƒ แƒ’แƒแƒกแƒแƒ’แƒ”แƒ‘แƒ˜ แƒกแƒ˜แƒœแƒขแƒแƒฅแƒกแƒ˜ Hiera-แƒจแƒ˜:

แƒ›แƒแƒœแƒแƒชแƒ”แƒ›แƒ—แƒ

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_แƒžแƒแƒ แƒขแƒ˜ โ€” แƒ’แƒแƒ›แƒแƒ˜แƒงแƒ”แƒœแƒ”แƒ— แƒ˜แƒ’แƒ˜, แƒกแƒฎแƒ•แƒ แƒจแƒ”แƒ›แƒ—แƒฎแƒ•แƒ”แƒ•แƒแƒจแƒ˜ 443. แƒ›แƒแƒ’แƒแƒšแƒ˜แƒ—แƒแƒ“, jabber-แƒ˜แƒก แƒ•แƒ”แƒ‘ แƒ˜แƒœแƒขแƒ”แƒ แƒคแƒ”แƒ˜แƒกแƒ˜ 9090-แƒ–แƒ”แƒ แƒ’แƒแƒ—แƒ˜แƒจแƒฃแƒšแƒ˜, แƒฎแƒแƒšแƒ Unifi โ€” 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 แƒ—แƒ•แƒ˜แƒก แƒ’แƒแƒœแƒ›แƒแƒ•แƒšแƒแƒ‘แƒแƒจแƒ˜ แƒ’แƒ•แƒฅแƒแƒœแƒ“แƒ, แƒแƒœ แƒ”แƒ แƒ—แƒ˜, แƒ›แƒแƒซแƒ•แƒ”แƒšแƒ”แƒ‘แƒฃแƒšแƒ˜ แƒ“แƒ แƒ“แƒแƒฃแƒชแƒ•แƒ”แƒšแƒ˜.
  • hosts/services(checks) แƒ›แƒแƒœแƒแƒชแƒ”แƒ›แƒ—แƒ แƒกแƒขแƒ แƒฃแƒฅแƒขแƒฃแƒ แƒ แƒแƒฎแƒšแƒ (แƒฉแƒ”แƒ›แƒ˜ แƒแƒ–แƒ แƒ˜แƒ—) แƒ‘แƒ”แƒ•แƒ แƒแƒ“ แƒฃแƒคแƒ แƒ แƒ˜แƒ™แƒ˜แƒ—แƒฎแƒ”แƒ‘แƒ แƒ“แƒ แƒ’แƒแƒกแƒแƒ’แƒ”แƒ‘แƒ˜แƒ. แƒกแƒฎแƒ•แƒ”แƒ‘แƒ˜แƒกแƒ—แƒ•แƒ˜แƒก แƒ”แƒก แƒแƒกแƒ” แƒแƒจแƒ™แƒแƒ แƒ แƒแƒ  แƒ˜แƒงแƒ, แƒแƒ›แƒ˜แƒขแƒแƒ› แƒแƒ“แƒ’แƒ˜แƒšแƒแƒ‘แƒ แƒ˜แƒ• แƒ•แƒ˜แƒ™แƒ˜แƒจแƒ˜ แƒ แƒแƒ›แƒ“แƒ”แƒœแƒ˜แƒ›แƒ” แƒ’แƒ•แƒ”แƒ แƒ“แƒ˜แƒก แƒ’แƒแƒ™แƒ”แƒ—แƒ”แƒ‘แƒ แƒ›แƒแƒ›แƒ˜แƒฌแƒ˜แƒ, แƒ แƒแƒ—แƒ แƒแƒ›แƒ”แƒฎแƒกแƒœแƒ, แƒ—แƒฃ แƒ แƒแƒ’แƒแƒ  แƒ›แƒฃแƒจแƒแƒแƒ‘แƒก แƒ”แƒก แƒงแƒ•แƒ”แƒšแƒแƒคแƒ”แƒ แƒ˜ แƒ“แƒ แƒ แƒ แƒกแƒแƒ“ แƒฃแƒœแƒ“แƒ แƒจแƒ”แƒ›แƒ”แƒกแƒฌแƒแƒ แƒ”แƒ‘แƒ˜แƒœแƒ.
  • แƒแƒ แƒกแƒ”แƒ‘แƒแƒ‘แƒก แƒจแƒ”แƒ›แƒแƒฌแƒ›แƒ”แƒ‘แƒ”แƒ‘แƒ˜แƒก แƒ›แƒแƒฅแƒœแƒ˜แƒšแƒ˜ แƒ™แƒแƒœแƒคแƒ˜แƒ’แƒฃแƒ แƒแƒชแƒ˜แƒ˜แƒก แƒจแƒ”แƒกแƒแƒซแƒšแƒ”แƒ‘แƒšแƒแƒ‘แƒ แƒชแƒ•แƒšแƒแƒ“แƒ”แƒ‘แƒ˜แƒกแƒ แƒ“แƒ แƒคแƒฃแƒœแƒฅแƒชแƒ˜แƒ”แƒ‘แƒ˜แƒก แƒ’แƒแƒ›แƒแƒงแƒ”แƒœแƒ”แƒ‘แƒ˜แƒ—, แƒ›แƒแƒ’แƒแƒšแƒ˜แƒ—แƒแƒ“, http_regexp แƒจแƒ”แƒ›แƒแƒฌแƒ›แƒ”แƒ‘แƒ˜แƒกแƒ—แƒ•แƒ˜แƒก, แƒ›แƒแƒกแƒžแƒ˜แƒœแƒซแƒšแƒ˜แƒก แƒžแƒแƒ แƒแƒ›แƒ”แƒขแƒ แƒ”แƒ‘แƒจแƒ˜ แƒจแƒ”แƒ˜แƒซแƒšแƒ”แƒ‘แƒ แƒ›แƒ˜แƒ—แƒ˜แƒ—แƒ”แƒ‘แƒฃแƒšแƒ˜ แƒ˜แƒงแƒแƒก แƒกแƒแƒซแƒ˜แƒ”แƒ‘แƒ แƒœแƒ˜แƒ›แƒฃแƒจแƒ˜, แƒ“แƒแƒ‘แƒ แƒฃแƒœแƒ”แƒ‘แƒ˜แƒก แƒ™แƒแƒ“แƒ˜, URL แƒ“แƒ แƒžแƒแƒ แƒขแƒ˜.
  • แƒแƒ แƒกแƒ”แƒ‘แƒแƒ‘แƒก แƒ แƒแƒ›แƒ“แƒ”แƒœแƒ˜แƒ›แƒ” แƒ“แƒแƒคแƒ, แƒ แƒแƒ›แƒ”แƒšแƒ—แƒแƒ’แƒแƒœ แƒ—แƒ˜แƒ—แƒแƒ”แƒฃแƒšแƒ˜แƒกแƒ—แƒ•แƒ˜แƒก แƒจแƒ”แƒ’แƒ˜แƒซแƒšแƒ˜แƒแƒ— แƒ’แƒแƒœแƒกแƒแƒ–แƒฆแƒ•แƒ แƒแƒ— แƒœแƒแƒฉแƒ•แƒ”แƒœแƒ”แƒ‘แƒ˜ แƒกแƒ˜แƒ’แƒœแƒแƒšแƒ˜แƒ–แƒแƒชแƒ˜แƒ˜แƒก แƒกแƒแƒ™แƒฃแƒ—แƒแƒ แƒ˜ แƒกแƒ˜แƒ แƒ“แƒ แƒ›แƒแƒ แƒ—แƒแƒ— แƒ”แƒก แƒงแƒ•แƒ”แƒšแƒแƒคแƒ”แƒ แƒ˜ Puppet-แƒ˜แƒกแƒ แƒ“แƒ แƒจแƒ”แƒ แƒฌแƒงแƒ›แƒ˜แƒก แƒ›แƒแƒ—แƒฎแƒแƒ•แƒœแƒ”แƒ‘แƒ˜แƒก แƒกแƒแƒจแƒฃแƒแƒšแƒ”แƒ‘แƒ˜แƒ—.

Cons:

  • แƒ’แƒฃแƒœแƒ“แƒ˜แƒก แƒฌแƒ”แƒ•แƒ แƒ”แƒ‘แƒ˜แƒก แƒ˜แƒœแƒ”แƒ แƒชแƒ˜แƒ - Nagios แƒ›แƒฃแƒจแƒแƒแƒ‘แƒ“แƒ, แƒ›แƒฃแƒจแƒแƒแƒ‘แƒ“แƒ แƒ“แƒ แƒ›แƒฃแƒจแƒแƒแƒ‘แƒ“แƒ, แƒ—แƒฅแƒ•แƒ”แƒœแƒ˜ แƒ”แƒก Isinga แƒ™แƒ˜ แƒ’แƒแƒ›แƒฃแƒ“แƒ›แƒ”แƒ‘แƒ˜แƒ— แƒฎแƒแƒ แƒ•แƒ”แƒ–แƒ”แƒ‘แƒ˜แƒ— แƒ›แƒฃแƒจแƒแƒแƒ‘แƒก แƒ“แƒ แƒแƒœแƒ”แƒšแƒ”แƒ‘แƒก. แƒ“แƒ แƒ แƒแƒ’แƒแƒ  แƒจแƒ”แƒ›แƒ˜แƒซแƒšแƒ˜แƒ แƒแƒฅ แƒ˜แƒกแƒขแƒแƒ แƒ˜แƒ˜แƒก แƒœแƒแƒฎแƒ•แƒ? แƒฏแƒแƒœแƒ“แƒแƒ‘แƒ, แƒ˜แƒก แƒแƒ  แƒ’แƒแƒœแƒแƒฎแƒšแƒ“แƒ”แƒ‘แƒ... (แƒœแƒแƒ›แƒ“แƒ•แƒ˜แƒšแƒ˜ แƒžแƒ แƒแƒ‘แƒšแƒ”แƒ›แƒ แƒ˜แƒก แƒแƒ แƒ˜แƒก, แƒ แƒแƒ› แƒกแƒ˜แƒ’แƒœแƒแƒšแƒ˜แƒ–แƒแƒชแƒ˜แƒ˜แƒก แƒ˜แƒกแƒขแƒแƒ แƒ˜แƒ แƒแƒ•แƒขแƒแƒ›แƒแƒขแƒฃแƒ แƒแƒ“ แƒแƒ  แƒ’แƒแƒœแƒแƒฎแƒšแƒ“แƒ”แƒ‘แƒ, แƒ›แƒฎแƒแƒšแƒแƒ“ F5-แƒ˜แƒ—)
  • แƒกแƒ˜แƒกแƒขแƒ”แƒ›แƒ˜แƒก แƒ˜แƒœแƒ”แƒ แƒชแƒ˜แƒ - แƒ แƒแƒ“แƒ”แƒกแƒแƒช แƒ•แƒ”แƒ‘ แƒ˜แƒœแƒขแƒ”แƒ แƒคแƒ”แƒ˜แƒกแƒจแƒ˜ แƒ•แƒแƒฌแƒ™แƒแƒžแƒฃแƒœแƒ”แƒ‘ โ€žแƒ’แƒแƒœแƒแƒฎแƒšแƒ”แƒ‘แƒแƒ–แƒ”โ€œ (แƒจแƒ”แƒแƒ›แƒแƒฌแƒ›แƒ” แƒแƒฎแƒšแƒ) - แƒจแƒ”แƒกแƒ แƒฃแƒšแƒ”แƒ‘แƒ˜แƒก แƒจแƒ”แƒ“แƒ”แƒ’แƒ˜ แƒ“แƒแƒ›แƒแƒ™แƒ˜แƒ“แƒ”แƒ‘แƒฃแƒšแƒ˜แƒ แƒ›แƒแƒ แƒกแƒ–แƒ” แƒแƒ แƒกแƒ”แƒ‘แƒฃแƒš แƒแƒ›แƒ˜แƒœแƒ“แƒ–แƒ”, แƒ’แƒแƒœแƒกแƒแƒ™แƒฃแƒ—แƒ แƒ”แƒ‘แƒ˜แƒ— แƒ แƒ—แƒฃแƒš แƒกแƒ”แƒ แƒ•แƒ˜แƒกแƒ”แƒ‘แƒ–แƒ”, แƒ แƒแƒ›แƒ”แƒšแƒ—แƒ แƒจแƒ”แƒกแƒ แƒฃแƒšแƒ”แƒ‘แƒแƒก แƒแƒ—แƒแƒ‘แƒ˜แƒ— แƒฌแƒแƒ›แƒ˜ แƒกแƒญแƒ˜แƒ แƒ“แƒ”แƒ‘แƒ. แƒแƒกแƒ”แƒ—แƒ˜ แƒจแƒ”แƒ“แƒ”แƒ’แƒ˜ แƒœแƒแƒ แƒ›แƒแƒšแƒฃแƒ แƒ˜แƒ. แƒ›แƒ˜แƒ’แƒ แƒแƒชแƒ˜แƒ แƒœแƒแƒ’แƒ˜แƒแƒกแƒ˜แƒ“แƒแƒœ Icinga2-แƒจแƒ˜ แƒแƒ•แƒกแƒขแƒ แƒแƒšแƒ˜แƒแƒจแƒ˜
  • แƒ–แƒแƒ’แƒแƒ“แƒแƒ“, แƒแƒ แƒ˜ แƒกแƒ˜แƒกแƒขแƒ”แƒ›แƒ˜แƒก แƒ’แƒ•แƒ”แƒ แƒ“แƒ˜แƒ’แƒ•แƒ”แƒ แƒ“ แƒ›แƒฃแƒจแƒแƒแƒ‘แƒ˜แƒก แƒœแƒแƒฎแƒ”แƒ•แƒแƒ แƒฌแƒšแƒ˜แƒฃแƒ แƒ˜ แƒกแƒขแƒแƒขแƒ˜แƒกแƒขแƒ˜แƒ™แƒ˜แƒก แƒ›แƒ˜แƒฎแƒ”แƒ“แƒ•แƒ˜แƒ—, Nagios แƒงแƒแƒ•แƒ”แƒšแƒ—แƒ•แƒ˜แƒก แƒฃแƒคแƒ แƒ แƒกแƒฌแƒ แƒแƒคแƒแƒ“ แƒ›แƒฃแƒจแƒแƒแƒ‘แƒ“แƒ, แƒ•แƒ˜แƒ“แƒ แƒ” Icinga แƒ“แƒ แƒ”แƒก แƒซแƒแƒšแƒ˜แƒแƒœ แƒ›แƒแƒฆแƒ˜แƒ–แƒ˜แƒแƒœแƒ”แƒ‘แƒ“แƒ. แƒ›แƒ”แƒฉแƒ•แƒ”แƒœแƒ”แƒ‘แƒ, แƒ แƒแƒ› แƒขแƒแƒ˜แƒ›แƒ”แƒ แƒ”แƒ‘แƒ—แƒแƒœ แƒ“แƒแƒ™แƒแƒ•แƒจแƒ˜แƒ แƒ”แƒ‘แƒ˜แƒ— แƒ แƒแƒฆแƒแƒช แƒแƒฃแƒ แƒ˜แƒ”แƒก แƒ“แƒ แƒจแƒ”แƒ›แƒแƒฌแƒ›แƒ”แƒ‘แƒ แƒงแƒแƒ•แƒ”แƒš แƒฎแƒฃแƒ— แƒฌแƒฃแƒ—แƒจแƒ˜ แƒ”แƒ แƒ—แƒฎแƒ”แƒš แƒฎแƒ“แƒ”แƒ‘แƒ แƒกแƒ˜แƒœแƒแƒ›แƒ“แƒ•แƒ˜แƒšแƒ”แƒจแƒ˜ แƒงแƒแƒ•แƒ”แƒš 5:30-แƒ–แƒ” แƒแƒœ แƒ แƒแƒฆแƒแƒช แƒ›แƒกแƒ’แƒแƒ•แƒกแƒจแƒ˜.
  • แƒ—แƒฃ แƒกแƒ”แƒ แƒ•แƒ˜แƒกแƒก แƒœแƒ”แƒ‘แƒ˜แƒกแƒ›แƒ˜แƒ”แƒ  แƒ“แƒ แƒแƒก แƒ’แƒแƒ“แƒแƒขแƒ•แƒ˜แƒ แƒ—แƒแƒ•แƒ— (systemctl restart icinga2) - แƒงแƒ•แƒ”แƒšแƒ แƒจแƒ”แƒ›แƒแƒฌแƒ›แƒ”แƒ‘แƒ, แƒ แƒแƒ›แƒ”แƒšแƒ˜แƒช แƒ˜แƒ› แƒ“แƒ แƒแƒก แƒ›แƒ˜แƒ›แƒ“แƒ˜แƒœแƒแƒ แƒ”แƒแƒ‘แƒ“แƒ, แƒ™แƒ แƒ˜แƒขแƒ˜แƒ™แƒฃแƒš แƒกแƒ˜แƒ’แƒœแƒแƒšแƒ˜แƒ–แƒแƒชแƒ˜แƒแƒก แƒ’แƒแƒ›แƒแƒ˜แƒ›แƒฃแƒจแƒแƒ•แƒ”แƒ‘แƒก. แƒ”แƒ™แƒ แƒแƒœแƒ–แƒ” แƒ“แƒ แƒ’แƒ•แƒ”แƒ แƒ“แƒ˜แƒ“แƒแƒœ แƒ˜แƒกแƒ” แƒฉแƒแƒœแƒก, แƒ—แƒ˜แƒ—แƒฅแƒแƒก แƒงแƒ•แƒ”แƒšแƒแƒคแƒ”แƒ แƒ˜ แƒฉแƒแƒ›แƒแƒ˜แƒœแƒ’แƒ แƒ (แƒ“แƒแƒ“แƒแƒกแƒขแƒฃแƒ แƒ”แƒ‘แƒฃแƒšแƒ˜ แƒจแƒ”แƒชแƒ“แƒแƒ›แƒ).

แƒ›แƒแƒ’แƒ แƒแƒ› แƒกแƒแƒ”แƒ แƒ—แƒ แƒฏแƒแƒ›แƒจแƒ˜, แƒ”แƒก แƒ›แƒฃแƒจแƒแƒแƒ‘แƒก.

แƒฌแƒงแƒแƒ แƒ: www.habr.com

แƒจแƒ”แƒ˜แƒซแƒ˜แƒœแƒ”แƒ— แƒกแƒแƒ˜แƒ›แƒ”แƒ“แƒ แƒฐแƒแƒกแƒขแƒ˜แƒœแƒ’แƒ˜ DDoS แƒ“แƒแƒชแƒ•แƒ˜แƒก แƒ›แƒฅแƒแƒœแƒ” แƒกแƒแƒ˜แƒขแƒ”แƒ‘แƒ˜แƒกแƒ—แƒ•แƒ˜แƒก, VPS VDS แƒกแƒ”แƒ แƒ•แƒ”แƒ แƒ”แƒ‘แƒ˜แƒกแƒ—แƒ•แƒ˜แƒก ๐Ÿ”ฅ แƒจแƒ”แƒ˜แƒซแƒ˜แƒœแƒ”แƒ— แƒกแƒแƒ˜แƒ›แƒ”แƒ“แƒ แƒ•แƒ”แƒ‘แƒกแƒแƒ˜แƒขแƒ˜แƒก แƒฐแƒแƒกแƒขแƒ˜แƒœแƒ’แƒ˜ DDoS แƒ“แƒแƒชแƒ•แƒ˜แƒ—, VPS VDS แƒกแƒ”แƒ แƒ•แƒ”แƒ แƒ”แƒ‘แƒ˜ | ProHoster