āĻ…āĻ¸ā§āĻŸā§āϰ⧇āϞāĻŋāϝāĻŧāĻžāϰ Nagios āĻĨ⧇āϕ⧇ Icinga2-āϤ⧇ āĻŽāĻžāχāĻ—ā§āϰ⧇āĻļāύ

āĻšāĻžāχ āϏāĻŦāĻžāχ

āφāĻŽāĻŋ āĻāĻ•āϜāύ āϞāĻŋāύāĻžāĻ•ā§āϏ āϏāĻŋāĻ¸ā§āĻŸā§‡āĻŽ āĻĒā§āϰāĻļāĻžāϏāĻ•, āφāĻŽāĻŋ 2015 āϏāĻžāϞ⧇ āĻāĻ•āϟāĻŋ āĻ¸ā§āĻŦāĻžāϧ⧀āύ āĻĒ⧇āĻļāĻžāĻĻāĻžāϰ āĻ­āĻŋāϏāĻžāϝāĻŧ āϰāĻžāĻļāĻŋāϝāĻŧāĻž āĻĨ⧇āϕ⧇ āĻ…āĻ¸ā§āĻŸā§āϰ⧇āϞāĻŋāϝāĻŧāĻžāϝāĻŧ āϚāϞ⧇ āĻāϏ⧇āĻ›āĻŋ, āϤāĻŦ⧇ āύāĻŋāĻŦāĻ¨ā§āϧāϟāĻŋ āϕ⧀āĻ­āĻžāĻŦ⧇ āĻāĻ•āϟāĻŋ āĻļā§‚āĻ•āϰ⧇āϰ āϜāĻ¨ā§āϝ āĻāĻ•āϟāĻŋ āĻŸā§āĻ°ā§āϝāĻžāĻ•ā§āϟāϰ āĻļ⧁āϰ⧁ āĻ•āϰāĻŦ⧇āύ āϏ⧇ āϏāĻŽā§āĻĒāĻ°ā§āϕ⧇ āĻĨāĻžāĻ•āĻŦ⧇ āύāĻžāĨ¤ āχāϤāĻŋāĻŽāĻ§ā§āϝ⧇āχ āĻĒāĻ°ā§āϝāĻžāĻĒā§āϤ āĻāχ āϧāϰāύ⧇āϰ āύāĻŋāĻŦāĻ¨ā§āϧ āϰāϝāĻŧ⧇āϛ⧇ (āϤāĻŦ⧁āĻ“, āϝāĻĻāĻŋ āφāĻ—ā§āϰāĻš āĻĨāĻžāϕ⧇ āϤāĻŦ⧇ āφāĻŽāĻŋ āĻāϟāĻŋ āϏāĻŽā§āĻĒāĻ°ā§āϕ⧇āĻ“ āϞāĻŋāĻ–āĻŦ), āϤāĻžāχ āφāĻŽāĻŋ āϕ⧀āĻ­āĻžāĻŦ⧇ āĻ…āĻ¸ā§āĻŸā§āϰ⧇āϞāĻŋāϝāĻŧāĻžāϝāĻŧ āĻāĻ•āϜāύ āϞāĻŋāύāĻžāĻ•ā§āϏ-āĻ…āĻĒāϏ āχāĻžā§āϜāĻŋāύāĻŋāϝāĻŧāĻžāϰ āĻšāĻŋāϏāĻžāĻŦ⧇ āφāĻŽāĻžāϰ āĻ•āĻžāϜ āĻ•āϰāĻžāϰ āϏāĻŽāϝāĻŧ, āĻāĻ•āϟāĻŋ āϏāĻŋāĻ¸ā§āĻŸā§‡āĻŽ āĻŽāύāĻŋāϟāϰāĻŋāĻ‚ āĻĨ⧇āϕ⧇ āĻŽāĻžāχāĻ—ā§āϰ⧇āĻļāύ āĻļ⧁āϰ⧁ āĻ•āϰ⧇āĻ›āĻŋ āϏ⧇ āϏāĻŽā§āĻĒāĻ°ā§āϕ⧇ āĻ•āĻĨāĻž āĻŦāϞāϤ⧇ āϚāĻžāχāĨ¤ āĻ…āĻ¨ā§āϝ⧇āϰ āĻĒā§āϰāϤāĻŋ. āĻŦāĻŋāĻļ⧇āώ āĻ•āϰ⧇ - Nagios => Icinga2.

āύāĻŋāĻŦāĻ¨ā§āϧāϟāĻŋ āφāĻ‚āĻļāĻŋāĻ•āĻ­āĻžāĻŦ⧇ āĻĒā§āϰāϝ⧁āĻ•ā§āϤāĻŋāĻ—āϤ āĻāĻŦāĻ‚ āφāĻ‚āĻļāĻŋāĻ•āĻ­āĻžāĻŦ⧇ āĻŽāĻžāύ⧁āώ⧇āϰ āϏāĻžāĻĨ⧇ āϝ⧋āĻ—āĻžāϝ⧋āĻ— āĻāĻŦāĻ‚ āϏāĻ‚āĻ¸ā§āĻ•ā§ƒāϤāĻŋ āĻāĻŦāĻ‚ āĻ•āĻžāĻœā§‡āϰ āĻĒāĻĻā§āϧāϤāĻŋāϰ āĻĒāĻžāĻ°ā§āĻĨāĻ•ā§āϝ⧇āϰ āϏāĻžāĻĨ⧇ āϏāĻŽā§āĻĒāĻ°ā§āĻ•āĻŋāϤ āϏāĻŽāĻ¸ā§āϝāĻžāϗ⧁āϞāĻŋ āϏāĻŽā§āĻĒāĻ°ā§āϕ⧇āĨ¤

āĻĻ⧁āĻ°ā§āĻ­āĻžāĻ—ā§āϝāĻŦāĻļāϤ, "āϕ⧋āĻĄ" āĻŸā§āϝāĻžāĻ—āϟāĻŋ āĻĒ⧁āϤ⧁āϞ āĻāĻŦāĻ‚ āχāϝāĻŧāĻžāĻŽāϞ āϕ⧋āĻĄ āĻšāĻžāχāϞāĻžāχāϟ āĻ•āϰ⧇ āύāĻž, āϤāĻžāχ āφāĻŽāĻžāϕ⧇ "āĻĒā§āϞ⧇āύāĻŸā§‡āĻ•ā§āϏāϟ" āĻŦā§āϝāĻŦāĻšāĻžāϰ āĻ•āϰāϤ⧇ āĻšāϝāĻŧ⧇āĻ›āĻŋāϞāĨ¤

21āĻļ⧇ āĻĄāĻŋāϏ⧇āĻŽā§āĻŦāϰ, 2016 āĻāϰ āϏāĻ•āĻžāϞ⧇ āϕ⧋āύ āĻāĻžāĻŽā§‡āϞāĻžāϰ āϞāĻ•ā§āώāĻŖ āĻ›āĻŋāϞ āύāĻžāĨ¤ āϝāĻĨāĻžāϰ⧀āϤāĻŋ, āφāĻŽāĻŋ āĻ•āĻžāĻœā§‡āϰ āĻĻāĻŋāύ⧇āϰ āĻĒā§āϰāĻĨāĻŽ āφāϧ āϘāĻ¨ā§āϟāĻžāϰ āĻŽāĻ§ā§āϝ⧇ āĻāĻ•āϜāύ āĻ…āύāĻŋāĻŦāĻ¨ā§āϧāĻŋāϤ āĻŦ⧇āύāĻžāĻŽā§€ āĻŦā§āϝāĻŦāĻšāĻžāϰāĻ•āĻžāϰ⧀āϰ āĻĻā§āĻŦāĻžāϰāĻž āĻšāĻžāĻŦāϰ āĻĒāĻĄāĻŧāĻ›āĻŋāϞāĻžāĻŽ, āĻ•āĻĢāĻŋ āĻĒāĻžāύ āĻ•āϰāĻžāϰ āϏāĻŽāϝāĻŧ, āĻāĻŦāĻ‚ āĻĻ⧇āĻ–āϤ⧇ āĻĒ⧇āϞāĻžāĻŽ āĻāχ āύāĻŋāĻŦāĻ¨ā§āϧāϟāĻŋ.

āϝ⧇āĻšā§‡āϤ⧁ āφāĻŽāĻžāϰ āϕ⧋āĻŽā§āĻĒāĻžāύāĻŋ Nagios āĻŦā§āϝāĻŦāĻšāĻžāϰ āĻ•āϰ⧇āϛ⧇, āĻĻ⧁āĻŦāĻžāϰ āϚāĻŋāĻ¨ā§āϤāĻž āύāĻž āĻ•āϰ⧇, āφāĻŽāĻŋ āϰ⧇āĻĄāĻŽāĻžāχāύ⧇ āĻāĻ•āϟāĻŋ āϟāĻŋāĻ•āĻŋāϟ āϤ⧈āϰāĻŋ āĻ•āϰ⧇āĻ›āĻŋ āĻāĻŦāĻ‚ āϏāĻžāϧāĻžāϰāĻŖ āĻšā§āϝāĻžāĻŸā§‡ āϞāĻŋāĻ™ā§āĻ•āϟāĻŋ āĻĒāĻžāĻ āĻŋāϝāĻŧ⧇āĻ›āĻŋ, āĻ•āĻžāϰāĻŖ āφāĻŽāĻŋ āĻāϟāĻŋāϕ⧇ āϗ⧁āϰ⧁āĻ¤ā§āĻŦāĻĒā§‚āĻ°ā§āĻŖ āĻŦāϞ⧇ āĻŽāύ⧇ āĻ•āϰ⧇āĻ›āĻŋāĨ¤ āωāĻĻā§āϝ⧋āĻ—āϟāĻŋ āĻāĻŽāύāĻ•āĻŋ āĻ…āĻ¸ā§āĻŸā§āϰ⧇āϞāĻŋāϝāĻŧāĻžāϤ⧇āĻ“ āĻļāĻžāĻ¸ā§āϤāĻŋāϝ⧋āĻ—ā§āϝ, āϤāĻžāχ āφāĻŽāĻŋ āĻāϟāĻŋ āφāĻŦāĻŋāĻˇā§āĻ•āĻžāϰ āĻ•āϰāĻžāϰ āĻĒāϰ āĻĨ⧇āϕ⧇ āĻĒā§āϰāϧāĻžāύ āĻĒā§āϰāĻ•ā§ŒāĻļāϞ⧀ āφāĻŽāĻžāϰ āωāĻĒāϰ āϏāĻŽāĻ¸ā§āϝāĻžāϟāĻŋ āĻĒāĻŋāύ āĻ•āϰ⧇āϛ⧇āύāĨ¤

āϰ⧇āĻĄāĻŽāĻžāχāύ āĻĨ⧇āϕ⧇ āĻ¸ā§āĻ•ā§āϰāĻŋāύāĻļāϟāĻ…āĻ¸ā§āĻŸā§āϰ⧇āϞāĻŋāϝāĻŧāĻžāϰ Nagios āĻĨ⧇āϕ⧇ Icinga2-āϤ⧇ āĻŽāĻžāχāĻ—ā§āϰ⧇āĻļāύ

āφāĻŽāĻžāĻĻ⧇āϰ āĻŦāĻŋāĻ­āĻžāϗ⧇, āφāĻĒāύāĻžāϰ āĻŽāϤāĻžāĻŽāϤ āĻĒā§āϰāĻ•āĻžāĻļ āĻ•āϰāĻžāϰ āφāϗ⧇, āĻĒāĻ›āĻ¨ā§āĻĻāϟāĻŋ āϏ⧁āĻ¸ā§āĻĒāĻˇā§āϟ āĻšāϞ⧇āĻ“ āĻ…āĻ¨ā§āϤāϤ āĻāĻ•āϟāĻŋ āĻŦāĻŋāĻ•āĻ˛ā§āĻĒ āĻ…āĻĢāĻžāϰ āĻ•āϰāĻžāϰ āĻĒā§āϰāĻĨāĻž āϰāϝāĻŧ⧇āϛ⧇, āϤāĻžāχ āφāĻŽāĻŋ āϗ⧁āĻ—āϞāĻŋāĻ‚ āĻ•āϰ⧇ āĻļ⧁āϰ⧁ āĻ•āϰ⧇āĻ›āĻŋ āĻŦāĻ°ā§āϤāĻŽāĻžāύ⧇ āϕ⧋āύ āϧāϰāύ⧇āϰ āĻŽāύāĻŋāϟāϰāĻŋāĻ‚ āϏāĻŋāĻ¸ā§āĻŸā§‡āĻŽāϗ⧁āϞāĻŋ āĻĒā§āϰāĻžāϏāĻ™ā§āĻ—āĻŋāĻ•, āϝ⧇āĻšā§‡āϤ⧁ āϰāĻžāĻļāĻŋāϝāĻŧāĻžāϝāĻŧ āφāĻŽāĻžāϰ āĻļ⧇āώ āĻ•āĻžāĻœā§‡āϰ āϜāĻžāϝāĻŧāĻ—āĻžāϝāĻŧ āφāĻŽāĻŋ āφāĻŽāĻžāϰ āύāĻŋāϜāĻ¸ā§āĻŦ āĻ¸ā§āĻŦ-āϞāĻŋāĻ–āĻŋāϤ āϏāĻŋāĻ¸ā§āĻŸā§‡āĻŽ āĻ›āĻŋāϞ, āϖ⧁āĻŦ āφāĻĻāĻŋāĻŽ, āĻ•āĻŋāĻ¨ā§āϤ⧁ āϤāĻž āϏāĻ¤ā§āĻ¤ā§āĻŦ⧇āĻ“ āĻŦ⧇āĻļ āĻ•āĻžāϜ āĻ•āϰ⧇ āĻāĻŦāĻ‚ āĻāϟāĻŋāϤ⧇ āύāĻŋāĻ°ā§āϧāĻžāϰāĻŋāϤ āϏāĻŽāĻ¸ā§āϤ āĻ•āĻžāϜ āϏāĻŽā§āĻĒāĻžāĻĻāύ āĻ•āϰ⧇āĨ¤ āĻĒāĻžāχāĻĨāύ, āϏ⧇āĻ¨ā§āϟ āĻĒāĻŋāϟāĻžāĻ°ā§āϏāĻŦāĻžāĻ°ā§āĻ— āĻĒāϞāĻŋāĻŸā§‡āĻ•āύāĻŋāĻ• āĻāĻŦāĻ‚ āĻŽā§‡āĻŸā§āϰ⧋āϰ āύāĻŋāϝāĻŧāĻŽāĨ¤ āύāĻž, āĻĒāĻžāϤāĻžāϞ āϰ⧇āϞ āĻ–āĻžāϰāĻžāĻĒ. āĻāϟāĻŋ āĻŦā§āϝāĻ•ā§āϤāĻŋāĻ—āϤ (11 āĻŦāĻ›āϰ⧇āϰ āĻ•āĻžāϜ) āĻāĻŦāĻ‚ āĻāĻ•āϟāĻŋ āĻĒ⧃āĻĨāĻ• āύāĻŋāĻŦāĻ¨ā§āϧ⧇āϰ āϝ⧋āĻ—ā§āϝ, āĻ•āĻŋāĻ¨ā§āϤ⧁ āĻāĻ–āύ āύāϝāĻŧāĨ¤

āφāĻŽāĻžāϰ āĻŦāĻ°ā§āϤāĻŽāĻžāύ āϜāĻžāϝāĻŧāĻ—āĻžāϝāĻŧ āĻ…āĻŦāĻ•āĻžāĻ āĻžāĻŽā§‹ āĻ•āύāĻĢāĻŋāĻ—āĻžāϰ⧇āĻļāύ⧇ āĻĒāϰāĻŋāĻŦāĻ°ā§āϤāύ āĻ•āϰāĻžāϰ āύāĻŋāϝāĻŧāĻŽ āϏāĻŽā§āĻĒāĻ°ā§āϕ⧇ āĻāĻ•āϟ⧁āĨ¤ āφāĻŽāϰāĻž āϕ⧋āĻĄ āύ⧀āϤāĻŋ āĻšāĻŋāϏāĻžāĻŦ⧇ āĻĒ⧁āϤ⧁āϞ, āĻ—āĻŋāϟāĻ˛ā§āϝāĻžāĻŦ āĻāĻŦāĻ‚ āĻ…āĻŦāĻ•āĻžāĻ āĻžāĻŽā§‹ āĻŦā§āϝāĻŦāĻšāĻžāϰ āĻ•āϰāĻŋ, āϤāĻžāχ:

  • āĻ­āĻžāĻ°ā§āϚ⧁āϝāĻŧāĻžāϞ āĻŽā§‡āĻļāĻŋāύ⧇ āĻŽā§āϝāĻžāύ⧁āϝāĻŧāĻžāϞāĻŋ āϕ⧋āύ⧋ āĻĢāĻžāχāϞ āĻĒāϰāĻŋāĻŦāĻ°ā§āϤāύ āĻ•āϰ⧇ SSH-āĻāϰ āĻŽāĻžāĻ§ā§āϝāĻŽā§‡ āϕ⧋āύ⧋ āĻŽā§āϝāĻžāύ⧁āϝāĻŧāĻžāϞ āĻĒāϰāĻŋāĻŦāĻ°ā§āϤāύ āĻšāϝāĻŧ āύāĻžāĨ¤ āϤāĻŋāύ āĻŦāĻ›āϰ⧇āϰ āĻ•āĻžāĻœā§‡āϰ āĻŽāĻ§ā§āϝ⧇, āφāĻŽāĻŋ āĻāϰ āϜāĻ¨ā§āϝ āĻ…āύ⧇āĻ•āĻŦāĻžāϰ āĻāĻ•āϟāĻŋ āϟ⧁āĻĒāĻŋ āĻĻāĻŋāϝāĻŧ⧇ āφāϘāĻžāϤ āĻĒ⧇āϝāĻŧ⧇āĻ›āĻŋ, āĻļ⧇āώ āϏāĻŽāϝāĻŧāϟāĻŋ āĻāĻ• āϏāĻĒā§āϤāĻžāĻš āφāϗ⧇ āĻāĻŦāĻ‚ āφāĻŽāĻŋ āĻŽāύ⧇ āĻ•āϰāĻŋ āύāĻž āϝ⧇ āĻāϟāĻŋ āĻļ⧇āώ āϏāĻŽāϝāĻŧ āĻ›āĻŋāϞāĨ¤ āĻ āĻŋāĻ• āφāϛ⧇, āϏāĻ¤ā§āϝāĻŋāχ - āĻ•āύāĻĢāĻŋāĻ—āĻžāϰ⧇ āĻāĻ•āϟāĻŋ āϞāĻžāχāύ āϏāĻ‚āĻļā§‹āϧāύ āĻ•āϰ⧁āύ, āĻĒāϰāĻŋāώ⧇āĻŦāĻžāϟāĻŋ āĻĒ⧁āύāϰāĻžāϝāĻŧ āϚāĻžāϞ⧁ āĻ•āϰ⧁āύ āĻāĻŦāĻ‚ āĻĻ⧇āϖ⧁āύ āϏāĻŽāĻ¸ā§āϝāĻžāϟāĻŋ āϏāĻŽāĻžāϧāĻžāύ āĻšāϝāĻŧ⧇āϛ⧇ āĻ•āĻŋāύāĻž - 10 āϏ⧇āϕ⧇āĻ¨ā§āĻĄāĨ¤ āĻ—āĻŋāϟāĻ˛ā§āϝāĻžāĻŦ⧇ āĻāĻ•āϟāĻŋ āύāϤ⧁āύ āĻļāĻžāĻ–āĻž āϤ⧈āϰāĻŋ āĻ•āϰ⧁āύ, āĻĒāϰāĻŋāĻŦāĻ°ā§āϤāύāϗ⧁āϞāĻŋ āĻ•āϰ⧁āύ, āĻĒāĻžāĻĒ⧇āϟāĻŽāĻžāĻ¸ā§āϟāĻžāϰ⧇ āĻ•āĻžāϜ āĻ•āϰāĻžāϰ āϜāĻ¨ā§āϝ r10k āĻāϰ āϜāĻ¨ā§āϝ āĻ…āĻĒ⧇āĻ•ā§āώāĻž āĻ•āϰ⧁āύ, Puppet -environment=mybranch āϚāĻžāϞāĻžāύ āĻāĻŦāĻ‚ āĻāϟāĻŋ āϏāĻŦ āĻ•āĻžāϜ āύāĻž āĻšāĻ“āϝāĻŧāĻž āĻĒāĻ°ā§āϝāĻ¨ā§āϤ āφāϰāĻ“ āĻ•āϝāĻŧ⧇āĻ• āĻŽāĻŋāύāĻŋāϟ āĻ…āĻĒ⧇āĻ•ā§āώāĻž āĻ•āϰ⧁āύ - āĻ¨ā§āϝ⧂āύāϤāĻŽ 5 āĻŽāĻŋāύāĻŋāϟ⧎
  • āĻ—āĻŋāϟāĻ˛ā§āϝāĻžāĻŦ⧇ āĻāĻ•āϟāĻŋ āĻŽāĻžāĻ°ā§āϜ āϰāĻŋāϕ⧋āϝāĻŧ⧇āĻ¸ā§āϟ āϤ⧈āϰāĻŋ āĻ•āϰ⧇ āϝ⧇āϕ⧋āύ⧋ āĻĒāϰāĻŋāĻŦāĻ°ā§āϤāύ āĻ•āϰāĻž āĻšāϝāĻŧ āĻāĻŦāĻ‚ āĻ•āĻŽāĻĒāĻ•ā§āώ⧇ āĻāĻ•āϜāύ āĻĻāϞ⧇āϰ āϏāĻĻāĻ¸ā§āϝ āĻĻā§āĻŦāĻžāϰāĻž āĻ…āύ⧁āĻŽā§‹āĻĻāĻŋāϤ āĻšāϤ⧇ āĻšāĻŦ⧇āĨ¤ āĻĻāϞ⧇āϰ āύ⧇āϤ⧃āĻ¤ā§āĻŦ āĻĻā§āĻŦāĻžāϰāĻž āϏāĻŋāĻĻā§āϧāĻžāĻ¨ā§āϤ āύ⧇āĻ“āϝāĻŧāĻž āĻŦāĻĄāĻŧ āĻĒāϰāĻŋāĻŦāĻ°ā§āϤāύ⧇āϰ āϜāĻ¨ā§āϝ āĻĻ⧁āχ āĻŦāĻž āϤāĻŋāύāϟāĻŋ āĻ…āύ⧁āĻŽā§‹āĻĻāύ⧇āϰ āĻĒā§āϰāϝāĻŧā§‹āϜāύ āĻšāϝāĻŧāĨ¤
  • āϏāĻŽāĻ¸ā§āϤ āĻĒāϰāĻŋāĻŦāĻ°ā§āϤāύāϗ⧁āϞāĻŋ āĻāĻ• āĻŦāĻž āĻ…āĻ¨ā§āϝāĻ­āĻžāĻŦ⧇ āĻĒāĻžāĻ ā§āϝ (āϝ⧇āĻšā§‡āϤ⧁ āĻĒ⧁āϤ⧁āϞ āĻĒā§āϰāĻ•āĻžāĻļ, āĻ¸ā§āĻ•ā§āϰāĻŋāĻĒā§āϟ āĻāĻŦāĻ‚ āĻšāĻŋāϰāĻž āĻĄā§‡āϟāĻž āĻĒāĻžāĻ ā§āϝ), āĻŦāĻžāχāύāĻžāϰāĻŋāϗ⧁āϞāĻŋ āĻ…āĻ¤ā§āϝāĻ¨ā§āϤ āύāĻŋāĻ°ā§ā§ŽāϏāĻžāĻšāĻŋāϤ āĻāĻŦāĻ‚ āĻāχ āϜāĻžāϤ⧀āϝāĻŧ āĻĢāĻžāχāϞāϗ⧁āϞāĻŋ āĻ…āύ⧁āĻŽā§‹āĻĻāύ āĻ•āϰāĻžāϰ āϜāĻ¨ā§āϝ āĻāĻ•āϟāĻŋ āĻŦāĻžāĻ§ā§āϝāϤāĻžāĻŽā§‚āϞāĻ• āĻ•āĻžāϰāĻŖ āĻĨāĻžāĻ•āĻž āĻĻāϰāĻ•āĻžāϰāĨ¤

āϏ⧁āϤāϰāĻžāĻ‚, āφāĻŽāĻŋ āĻŦāĻŋāĻŦ⧇āϚāύāĻž āĻ•āϰāĻž āĻŦāĻŋāĻ•āĻ˛ā§āĻĒāϗ⧁āϞāĻŋ:

  • āĻŽā§āύāĻŋāύ - āϝāĻĻāĻŋ āĻ…āĻŦāĻ•āĻžāĻ āĻžāĻŽā§‹āϤ⧇ 10 āϟāĻŋāϰ āĻŦ⧇āĻļāĻŋ āϏāĻžāĻ°ā§āĻ­āĻžāϰ āĻĨāĻžāϕ⧇ āϤāĻŦ⧇ āĻĒā§āϰāĻļāĻžāϏāύ āύāϰāϕ⧇ āĻĒāϰāĻŋāĻŖāϤ āĻšāϝāĻŧ (āĻĨ⧇āϕ⧇ āĻāχ āύāĻŋāĻŦāĻ¨ā§āϧāϟāĻŋ āĻāϰ. āĻāϟāĻŋ āĻĒāϰ⧀āĻ•ā§āώāĻž āĻ•āϰāĻžāϰ āφāĻŽāĻžāϰ āϕ⧋āύ āĻŦāĻŋāĻļ⧇āώ āχāĻšā§āĻ›āĻž āĻ›āĻŋāϞ āύāĻž, āϤāĻžāχ āφāĻŽāĻŋ āĻāϟāĻŋāϰ āϜāĻ¨ā§āϝ āϤāĻžāϰ āĻ•āĻĨāĻž āύāĻŋāϝāĻŧ⧇āĻ›āĻŋāϞāĻžāĻŽ)āĨ¤
  • āĻœā§āϝāĻžāĻŦāĻŋāĻ•ā§āϏ - āφāĻŽāĻŋ āϰāĻžāĻļāĻŋāϝāĻŧāĻžāϝāĻŧ āĻĢāĻŋāϰ⧇ āĻāϟāĻŋāϕ⧇ āĻĻā§€āĻ°ā§āϘāĻĻāĻŋāύ āϧāϰ⧇ āĻĻ⧇āĻ–āĻ›āĻŋāϞāĻžāĻŽ, āĻ•āĻŋāĻ¨ā§āϤ⧁ āϤāĻžāϰāĻĒāϰ⧇ āĻāϟāĻŋ āφāĻŽāĻžāϰ āĻ•āĻžāĻœā§‡āϰ āϜāĻ¨ā§āϝ āĻ…āĻĒā§āϰāϝāĻŧā§‹āϜāύ⧀āϝāĻŧ āĻ›āĻŋāϞāĨ¤ āĻāĻ–āĻžāύ⧇ - āĻ•āύāĻĢāĻŋāĻ—āĻžāϰ⧇āĻļāύ āĻŽā§āϝāĻžāύ⧇āϜāĻžāϰ āĻšāĻŋāϏāĻžāĻŦ⧇ āĻĒāĻžāĻĒ⧇āϟ āĻāĻŦāĻ‚ āϏāĻ‚āĻ¸ā§āĻ•āϰāĻŖ āύāĻŋāϝāĻŧāĻ¨ā§āĻ¤ā§āϰāĻŖ āĻŦā§āϝāĻŦāĻ¸ā§āĻĨāĻž āĻšāĻŋāϏāĻžāĻŦ⧇ āĻ—āĻŋāϟāĻ˛ā§āϝāĻžāĻŦ āĻŦā§āϝāĻŦāĻšāĻžāϰ⧇āϰ āĻ•āĻžāϰāϪ⧇ āĻŦāĻžāϤāĻŋāϞ āĻ•āϰāϤ⧇ āĻšāϝāĻŧ⧇āĻ›āĻŋāϞāĨ¤ āϏ⧇āχ āϏāĻŽāϝāĻŧ⧇, āϝāϤāĻĻā§‚āϰ āφāĻŽāĻŋ āĻŦ⧁āĻāϤ⧇ āĻĒ⧇āϰ⧇āĻ›āĻŋ, Zabbix āϏāĻŽāĻ—ā§āϰ āĻ•āύāĻĢāĻŋāĻ—āĻžāϰ⧇āĻļāύ āĻĄāĻžāϟāĻžāĻŦ⧇āϏ⧇ āϏāĻžā§āϚāϝāĻŧ āĻ•āϰ⧇, āĻāĻŦāĻ‚ āϤāĻžāχ āĻŦāĻ°ā§āϤāĻŽāĻžāύ āĻ…āĻŦāĻ¸ā§āĻĨāĻžāϰ āĻ…āϧ⧀āύ⧇ āĻ•āύāĻĢāĻŋāĻ—āĻžāϰ⧇āĻļāύ āϕ⧀āĻ­āĻžāĻŦ⧇ āĻĒāϰāĻŋāϚāĻžāϞāύāĻž āĻ•āϰāĻž āϝāĻžāϝāĻŧ āĻāĻŦāĻ‚ āϕ⧀āĻ­āĻžāĻŦ⧇ āĻĒāϰāĻŋāĻŦāĻ°ā§āϤāύāϗ⧁āϞāĻŋ āĻŸā§āĻ°ā§āϝāĻžāĻ• āĻ•āϰāĻž āϝāĻžāϝāĻŧ āϤāĻž āĻĒāϰāĻŋāĻˇā§āĻ•āĻžāϰ āĻ›āĻŋāϞ āύāĻžāĨ¤
  • āĻĄāĻŋāĻĒāĻžāĻ°ā§āϟāĻŽā§‡āĻ¨ā§āĻŸā§‡āϰ āĻŽā§‡āϜāĻžāϜ āĻĻā§āĻŦāĻžāϰāĻž āĻŦāĻŋāϚāĻžāϰ āĻ•āϰ⧇ āφāĻŽāϰāĻž āĻļ⧇āώ āĻĒāĻ°ā§āϝāĻ¨ā§āϤ āĻĒā§āϰāĻŽāĻŋāĻĨāĻŋāωāϏ⧇āϰ āĻ•āĻžāϛ⧇ āφāϏāĻŦ, āĻ•āĻŋāĻ¨ā§āϤ⧁ āϏ⧇āχ āϏāĻŽāϝāĻŧ⧇ āφāĻŽāĻŋ āĻāϟāĻŋ āφāϝāĻŧāĻ¤ā§āϤ āĻ•āϰāĻŋāύāĻŋ āĻāĻŦāĻ‚ āϏāĻ¤ā§āϝāĻŋāĻ•āĻžāϰ⧇āϰ āĻ•āĻžāĻ°ā§āϝāĻ•āϰ⧀ āύāĻŽā§āύāĻž (āϧāĻžāϰāĻŖāĻžāϰ āĻĒā§āϰāĻŽāĻžāĻŖ) āĻĒā§āϰāĻĻāĻ°ā§āĻļāύ āĻ•āϰāϤ⧇ āϏāĻ•ā§āώāĻŽ āĻ›āĻŋāϞāĻžāĻŽ āύāĻž, āϤāĻžāχ āφāĻŽāĻžāϕ⧇ āĻĒā§āϰāĻ¤ā§āϝāĻžāĻ–ā§āϝāĻžāύ āĻ•āϰāϤ⧇ āĻšāϝāĻŧ⧇āĻ›āĻŋāϞāĨ¤
  • āĻāĻ›āĻžāĻĄāĻŧāĻžāĻ“ āφāϰāĻ“ āĻŦ⧇āĻļ āĻ•āϝāĻŧ⧇āĻ•āϟāĻŋ āĻŦāĻŋāĻ•āĻ˛ā§āĻĒ āĻ›āĻŋāϞ āϝ⧇āϗ⧁āϞāĻŋāϰ āϜāĻ¨ā§āϝ āĻšāϝāĻŧ āϏāĻŋāĻ¸ā§āĻŸā§‡āĻŽā§‡āϰ āϏāĻŽā§āĻĒā§‚āĻ°ā§āĻŖ āĻĒ⧁āύāĻ°ā§āύāĻŋāĻ°ā§āĻŽāĻžāϪ⧇āϰ āĻĒā§āϰāϝāĻŧā§‹āϜāύ āĻ›āĻŋāϞ, āĻ…āĻĨāĻŦāĻž āϤāĻžāĻĻ⧇āϰ āĻļ⧈āĻļāĻŦāĻ•āĻžāϞ⧇ / āĻĒāϰāĻŋāĻ¤ā§āϝāĻ•ā§āϤ āĻ›āĻŋāϞ āĻāĻŦāĻ‚ āĻāĻ•āχ āĻ•āĻžāϰāϪ⧇ āĻĒā§āϰāĻ¤ā§āϝāĻžāĻ–ā§āϝāĻžāύ āĻ•āϰāĻž āĻšāϝāĻŧ⧇āĻ›āĻŋāϞāĨ¤

āĻļ⧇āώ āĻĒāĻ°ā§āϝāĻ¨ā§āϤ, āφāĻŽāĻŋ āϤāĻŋāύāϟāĻŋ āĻ•āĻžāϰāϪ⧇ Icinga2 āĻ āĻ¸ā§āĻĨāĻŋāϰ āĻšāϝāĻŧ⧇āĻ›āĻŋ:

1 - Nrpe āĻāϰ āϏāĻžāĻĨ⧇ āϏāĻžāĻŽāĻžā§āϜāĻ¸ā§āϝ (āĻāĻ•āϟāĻŋ āĻ•ā§āϞāĻžāϝāĻŧ⧇āĻ¨ā§āϟ āĻĒāϰāĻŋāώ⧇āĻŦāĻž āϝāĻž āύāĻžāĻ—āĻŋāĻ“āϏ āĻĨ⧇āϕ⧇ āĻ•āĻŽāĻžāĻ¨ā§āĻĄ āĻšā§‡āĻ• āϚāĻžāϞāĻžāϝāĻŧ)āĨ¤ āĻāϟāĻŋ āϖ⧁āĻŦāχ āϗ⧁āϰ⧁āĻ¤ā§āĻŦāĻĒā§‚āĻ°ā§āĻŖ āĻ›āĻŋāϞ, āĻ•āĻžāϰāĻŖ āϏ⧇āχ āϏāĻŽāϝāĻŧ⧇ āφāĻŽāĻžāĻĻ⧇āϰ āĻ•āĻžāϛ⧇ 135āϟāĻŋ (āĻāĻ–āύ 2019 āϏāĻžāϞ⧇ 165āϟāĻŋ āφāϛ⧇) āĻ•āĻžāĻ¸ā§āϟāĻŽ-āϞāĻŋāĻ–āĻŋāϤ āĻĒāϰāĻŋāώ⧇āĻŦāĻž/āĻšā§‡āĻ•āϗ⧁āϞāĻŋāϰ āĻāĻ•āϟāĻŋ āϗ⧁āĻšā§āĻ› āϏāĻš āĻ­āĻžāĻ°ā§āϚ⧁āϝāĻŧāĻžāϞ āĻŽā§‡āĻļāĻŋāύ āĻ›āĻŋāϞ, āĻāĻŦāĻ‚ āĻāϟāĻŋāϕ⧇ āĻĒ⧁āύāϰāĻžāϝāĻŧ āĻ•āϰāĻž āϏāĻ¤ā§āϝāĻŋāχ āĻāĻ•āϟāĻŋ āĻ•āĻˇā§āĻŸā§‡āϰ āĻŦāĻŋāώāϝāĻŧ āĻšāĻŦ⧇⧎
2 - āϏāĻŽāĻ¸ā§āϤ āĻ•āύāĻĢāĻŋāĻ—āĻžāϰ⧇āĻļāύ āĻĢāĻžāχāϞāϗ⧁āϞāĻŋ āĻĒāĻžāĻ ā§āϝ, āϝāĻž āĻāχ āĻŦāĻŋāώāϝāĻŧāϟāĻŋāϕ⧇ āϏāĻŽā§āĻĒāĻžāĻĻāύāĻž āĻ•āϰāĻž āϏāĻšāϜ āĻ•āϰ⧇ āϤ⧋āϞ⧇, āϕ⧀ āϝ⧁āĻ•ā§āϤ āĻŦāĻž āĻŽā§āϛ⧇ āĻĢ⧇āϞāĻž āĻšāϝāĻŧ⧇āϛ⧇ āϤāĻž āĻĻ⧇āĻ–āĻžāϰ āĻ•ā§āώāĻŽāϤāĻž āϏāĻš āĻŽāĻžāĻ°ā§āϜ āĻ…āύ⧁āϰ⧋āϧ āϤ⧈āϰāĻŋ āĻ•āϰ⧇⧎
3 āĻāĻ•āϟāĻŋ āĻœā§€āĻŦāĻ¨ā§āϤ āĻ“ āωāĻ¨ā§āύāϝāĻŧāύāĻļā§€āϞ āĻ“āĻĒ⧇āύāϏ⧋āĻ°ā§āϏ āĻĒā§āϰāĻ•āĻ˛ā§āĻĒāĨ¤ āφāĻŽāϰāĻž āϏāĻ¤ā§āϝāĻŋāχ āĻ“āĻĒ⧇āύāϏ⧋āĻ°ā§āϏāϕ⧇ āĻ­āĻžāϞ⧋āĻŦāĻžāϏāĻŋ āĻāĻŦāĻ‚ āϏāĻŽāĻ¸ā§āϝāĻž āϏāĻŽāĻžāϧāĻžāύ⧇āϰ āϜāĻ¨ā§āϝ āĻĒ⧁āϞ āϰāĻŋāϕ⧋āϝāĻŧ⧇āĻ¸ā§āϟ āĻāĻŦāĻ‚ āχāĻ¸ā§āϝ⧁ āϤ⧈āϰāĻŋ āĻ•āϰ⧇ āĻāϤ⧇ āϏāĻŽā§āĻ­āĻžāĻŦā§āϝ āϏāĻŦ āϧāϰāύ⧇āϰ āĻ…āĻŦāĻĻāĻžāύ āϰāĻžāĻ–āĻŋāĨ¤

āϏ⧁āϤāϰāĻžāĻ‚, āϚāϞ⧁āύ, Icinga2.

āĻĒā§āϰāĻĨāĻŽ āϝ⧇ āĻŦāĻŋāώāϝāĻŧāϟāĻŋāϰ āϏāĻŽā§āĻŽā§āĻ–ā§€āύ āĻšāϤ⧇ āĻšāϝāĻŧ⧇āĻ›āĻŋāϞ āϤāĻž āĻšāϞ āφāĻŽāĻžāϰ āϏāĻšāĻ•āĻ°ā§āĻŽā§€āĻĻ⧇āϰ āϜāĻĄāĻŧāϤāĻžāĨ¤ āĻĒā§āϰāĻ¤ā§āϝ⧇āϕ⧇āχ āύāĻžāĻ—āĻŋāĻ“āϏ/āύāĻžāĻ—āĻŋāĻ“āϏ (āϝāĻĻāĻŋāĻ“ āĻāĻ–āĻžāύ⧇āĻ“ āϤāĻžāϰāĻž āϕ⧀āĻ­āĻžāĻŦ⧇ āĻāϟāĻŋ āωāĻšā§āϚāĻžāϰāĻŖ āĻ•āϰāϤ⧇ āĻšāϝāĻŧ āϏ⧇ āĻŦāĻŋāώāϝāĻŧ⧇ āϏāĻŽāĻā§‹āϤāĻžāϝāĻŧ āφāϏāϤ⧇ āĻĒāĻžāϰ⧇āύāĻŋ) āĻāĻŦāĻ‚ āĻšā§‡āĻ•āĻāĻŽāϕ⧇ āχāĻ¨ā§āϟāĻžāϰāĻĢ⧇āϏ⧇ āĻ…āĻ­ā§āϝāĻ¸ā§āϤāĨ¤ āφāχāϏāĻŋāĻ‚āĻ—āĻž āχāĻ¨ā§āϟāĻžāϰāĻĢ⧇āϏāϟāĻŋ āϏāĻŽā§āĻĒā§‚āĻ°ā§āĻŖ āφāϞāĻžāĻĻāĻž āĻĻ⧇āĻ–āĻžāϝāĻŧ (āĻāϟāĻŋ āĻāĻ•āϟāĻŋ āĻŦāĻŋāϝāĻŧā§‹āĻ— āĻ›āĻŋāϞ), āϤāĻŦ⧇ āφāĻ•ā§āώāϰāĻŋāĻ• āĻ…āĻ°ā§āĻĨ⧇ āϝ⧇ āϕ⧋āύāĻ“ āĻĒā§āϝāĻžāϰāĻžāĻŽāĻŋāϟāĻžāϰ⧇āϰ āϜāĻ¨ā§āϝ āĻĢāĻŋāĻ˛ā§āϟāĻžāϰ āĻŦā§āϝāĻŦāĻšāĻžāϰ āĻ•āϰ⧇ āφāĻĒāύāĻžāϰ āϝāĻž āĻĻ⧇āĻ–āϤ⧇ āĻšāĻŦ⧇ āϤāĻž āύāĻŽāύ⧀āϝāĻŧāĻ­āĻžāĻŦ⧇ āĻ•āĻžāĻ¸ā§āϟāĻŽāĻžāχāϜ āĻ•āϰāĻž āϏāĻŽā§āĻ­āĻŦ (āĻāϟāĻŋ āĻāĻ•āϟāĻŋ āĻĒā§āϞāĻžāϏ āĻ›āĻŋāϞ, āϤāĻŦ⧇ āφāĻŽāĻŋ āĻāϟāĻŋāϰ āϜāĻ¨ā§āϝ āĻ…āύ⧇āĻ• āϞāĻĄāĻŧāĻžāχ āĻ•āϰ⧇āĻ›āĻŋ)āĨ¤

āĻĢāĻŋāĻ˛ā§āϟāĻžāϰāĻ…āĻ¸ā§āĻŸā§āϰ⧇āϞāĻŋāϝāĻŧāĻžāϰ Nagios āĻĨ⧇āϕ⧇ Icinga2-āϤ⧇ āĻŽāĻžāχāĻ—ā§āϰ⧇āĻļāύ

āĻ¸ā§āĻ•ā§āϰāϞ āĻŦāĻžāϰ⧇āϰ āφāĻ•āĻžāϰ⧇āϰ āϏāĻžāĻĨ⧇ āĻ¸ā§āĻ•ā§āϰ⧋āϞ āĻ•ā§āώ⧇āĻ¤ā§āϰ⧇āϰ āφāĻ•āĻžāϰ⧇āϰ āĻ…āύ⧁āĻĒāĻžāϤ āĻ…āύ⧁āĻŽāĻžāύ āĻ•āϰ⧁āύāĨ¤

āĻĻā§āĻŦāĻŋāϤ⧀āϝāĻŧāϤ, āĻĒā§āϰāĻ¤ā§āϝ⧇āϕ⧇āχ āĻāĻ•āϟāĻŋ āĻŽāύāĻŋāϟāϰ⧇ āϏāĻŽā§āĻĒā§‚āĻ°ā§āĻŖ āĻ…āĻŦāĻ•āĻžāĻ āĻžāĻŽā§‹ āĻĻ⧇āĻ–āϤ⧇ āĻ…āĻ­ā§āϝāĻ¸ā§āϤ, āĻ•āĻžāϰāĻŖ CheckMk āφāĻĒāύāĻžāϕ⧇ āĻŦ⧇āĻļ āĻ•āϝāĻŧ⧇āĻ•āϟāĻŋ Nagios āĻšā§‹āĻ¸ā§āĻŸā§‡āϰ āϏāĻžāĻĨ⧇ āĻ•āĻžāϜ āĻ•āϰāϤ⧇ āĻĻ⧇āϝāĻŧ, āĻ•āĻŋāĻ¨ā§āϤ⧁ Icinga āχāĻ¨ā§āϟāĻžāϰāĻĢ⧇āϏ āĻāϟāĻŋ āĻ•āϰāϤ⧇ āĻĒāĻžāϰ⧇āύāĻŋ (āφāϏāϞ⧇, āĻāϟāĻŋ āĻĒāĻžāϰ⧇, āϤāĻŦ⧇ āύ⧀āĻšā§‡ āφāϰāĻ“ āĻŦ⧇āĻļāĻŋ)āĨ¤ āĻŦāĻŋāĻ•āĻ˛ā§āĻĒāϟāĻŋ āĻ›āĻŋāϞ āĻĨā§āϰ⧁āĻ• āύāĻžāĻŽāĻ• āĻ•āĻŋāϛ⧁, āĻ•āĻŋāĻ¨ā§āϤ⧁ āĻāϟāĻŋāϰ āĻĄāĻŋāϜāĻžāχāύ āĻāĻ•āϜāύāϕ⧇ āĻ›āĻžāĻĄāĻŧāĻž āϏāĻŦāĻžāχāϕ⧇ āĻĻāϞ⧇ āϠ⧇āϞ⧇ āĻĻāĻŋāϝāĻŧ⧇āϛ⧇ - āϝāĻŋāύāĻŋ āĻāϟāĻŋāϰ āĻĒāϰāĻžāĻŽāĻ°ā§āĻļ āĻĻāĻŋāϝāĻŧ⧇āϛ⧇āύ (āφāĻŽāĻŋ āύāϝāĻŧ)āĨ¤

āĻĨā§āϰ⧁āĻ• āϚ⧁āĻ˛ā§āϞāĻŋāϤ⧇ - āĻĻāϞ⧇āϰ āϏāĻ°ā§āĻŦāϏāĻŽā§āĻŽāϤ āϏāĻŋāĻĻā§āϧāĻžāĻ¨ā§āϤāĻ…āĻ¸ā§āĻŸā§āϰ⧇āϞāĻŋāϝāĻŧāĻžāϰ Nagios āĻĨ⧇āϕ⧇ Icinga2-āϤ⧇ āĻŽāĻžāχāĻ—ā§āϰ⧇āĻļāύ

āĻ•āϝāĻŧ⧇āĻ•āĻĻāĻŋāύ⧇āϰ āĻŦ⧁āĻĻā§āϧāĻŋāĻŽāĻ¤ā§āϤāĻžāϰ āĻĒāϰ, āφāĻŽāĻŋ āĻ•ā§āϞāĻžāĻ¸ā§āϟāĻžāϰ āĻŽāύāĻŋāϟāϰāĻŋāĻ‚āϝāĻŧ⧇āϰ āϧāĻžāϰāĻŖāĻžāϟāĻŋ āĻĒā§āϰāĻ¸ā§āϤāĻžāĻŦ āĻ•āϰ⧇āĻ›āĻŋ, āϝāĻ–āύ āĻĒā§āϰ⧋āĻĄāĻžāĻ•āĻļāύ āĻœā§‹āύ⧇ āĻāĻ•āϜāύ āĻŽāĻžāĻ¸ā§āϟāĻžāϰ āĻšā§‹āĻ¸ā§āϟ āĻĨāĻžāϕ⧇ āĻāĻŦāĻ‚ āĻĻ⧁āϟāĻŋ āĻ¸ā§āϞ⧇āĻ­ āĻĨāĻžāϕ⧇ - āĻāĻ•āϟāĻŋ āĻĄā§‡āĻ­/āĻŸā§‡āĻ¸ā§āĻŸā§‡ āĻāĻŦāĻ‚ āĻāĻ•āϟāĻŋ āĻŦāĻšāĻŋāϰāĻžāĻ—āϤ āĻšā§‹āĻ¸ā§āϟ āĻ…āĻ¨ā§āϝ āϏāϰāĻŦāϰāĻžāĻšāĻ•āĻžāϰ⧀āϤ⧇ āĻĨāĻžāϕ⧇ āϝāĻžāϤ⧇ āφāĻŽāĻžāĻĻ⧇āϰ āĻĒāĻ°ā§āϝāĻŦ⧇āĻ•ā§āώāĻŖ āĻ•āϰāĻž āϝāĻžāϝāĻŧāĨ¤ āĻāĻ•āϟāĻŋ āĻ•ā§āϞāĻžāϝāĻŧ⧇āĻ¨ā§āϟ āĻŦāĻž āĻāĻ•āϟāĻŋ āĻŦāĻšāĻŋāϰāĻžāĻ—āϤ āĻĒāĻ°ā§āϝāĻŦ⧇āĻ•ā§āώāĻ• āĻĻ⧃āĻˇā§āϟāĻŋāϕ⧋āĻŖ āĻĨ⧇āϕ⧇ āϏ⧇āĻŦāĻž. āĻāχ āĻ•āύāĻĢāĻŋāĻ—āĻžāϰ⧇āĻļāύāϟāĻŋ āĻāĻ•āϟāĻŋ āĻ“āϝāĻŧ⧇āĻŦ āχāĻ¨ā§āϟāĻžāϰāĻĢ⧇āϏ⧇ āϏāĻŽāĻ¸ā§āϤ āϏāĻŽāĻ¸ā§āϝāĻž āĻĻ⧇āĻ–āĻž āϏāĻŽā§āĻ­āĻŦ āĻ•āϰ⧇āϛ⧇ āĻāĻŦāĻ‚ āĻŦ⧇āĻļ āĻ­āĻžāϞ āĻ•āĻžāϜ āĻ•āϰ⧇āϛ⧇, āĻ•āĻŋāĻ¨ā§āϤ⧁ āĻĒāĻžāĻĒ⧇āϟ... āĻĒāĻžāĻĒ⧇āĻŸā§‡āϰ āϏāĻŽāĻ¸ā§āϝāĻž āĻšāϞ āϝ⧇ āĻŽāĻžāĻ¸ā§āϟāĻžāϰ āĻšā§‹āĻ¸ā§āϟāϕ⧇ āĻāĻ–āύ āϏāĻŋāĻ¸ā§āĻŸā§‡āĻŽā§‡āϰ āϏāĻŽāĻ¸ā§āϤ āĻšā§‹āĻ¸ā§āϟ āĻāĻŦāĻ‚ āĻĒāϰāĻŋāώ⧇āĻŦāĻž/āĻšā§‡āĻ• āϏāĻŽā§āĻĒāĻ°ā§āϕ⧇ āϜāĻžāύāϤ⧇ āĻšāĻŦ⧇ āĻāĻŦāĻ‚ āĻœā§‹āύāϗ⧁āϞāĻŋāϰ āĻŽāĻ§ā§āϝ⧇ āϤāĻžāĻĻ⧇āϰ āĻŦāĻŋāϤāϰāĻŖ āĻ•āϰāϤ⧇ (dev-test, staging-prod, ext), āĻ•āĻŋāĻ¨ā§āϤ⧁ Icinga API-āĻāϰ āĻŽāĻžāĻ§ā§āϝāĻŽā§‡ āĻĒāϰāĻŋāĻŦāĻ°ā§āϤāύāϗ⧁āϞāĻŋ āĻĒāĻžāĻ āĻžāϤ⧇ āĻ•āϝāĻŧ⧇āĻ• āϏ⧇āϕ⧇āĻ¨ā§āĻĄ āϏāĻŽāϝāĻŧ āϞāĻžāϗ⧇, āĻ•āĻŋāĻ¨ā§āϤ⧁ āϏāĻŽāĻ¸ā§āϤ āĻšā§‹āĻ¸ā§āĻŸā§‡āϰ āϜāĻ¨ā§āϝ āϏāĻŽāĻ¸ā§āϤ āĻĒāϰāĻŋāώ⧇āĻŦāĻžāϰ āĻĒāĻžāĻĒ⧇āϟ āĻĄāĻŋāϰ⧇āĻ•ā§āϟāϰāĻŋ āϏāĻ‚āĻ•āϞāύ āĻ•āϰāϤ⧇ āĻ•āϝāĻŧ⧇āĻ• āĻŽāĻŋāύāĻŋāϟ āϏāĻŽāϝāĻŧ āϞāĻžāϗ⧇āĨ¤ āĻāϟāĻŋ āĻāĻ–āύāĻ“ āφāĻŽāĻžāϰ āωāĻĒāϰ āĻĻā§‹āώāĻžāϰ⧋āĻĒ āĻ•āϰāĻž āĻšāĻšā§āϛ⧇, āϝāĻĻāĻŋāĻ“ āφāĻŽāĻŋ āχāϤāĻŋāĻŽāĻ§ā§āϝ⧇āχ āĻŦ⧇āĻļ āĻ•āϝāĻŧ⧇āĻ•āĻŦāĻžāϰ āĻŦā§āϝāĻžāĻ–ā§āϝāĻž āĻ•āϰ⧇āĻ›āĻŋ āĻ•āĻŋāĻ­āĻžāĻŦ⧇ āϏāĻŦāĻ•āĻŋāϛ⧁ āĻ•āĻžāϜ āĻ•āϰ⧇ āĻāĻŦāĻ‚ āϕ⧇āύ āĻāϟāĻŋ āĻāϤ āϏāĻŽāϝāĻŧ āύ⧇āϝāĻŧāĨ¤

āϤ⧃āϤ⧀āϝāĻŧāϤ, āĻāĻ–āĻžāύ⧇ āĻāĻ•āϗ⧁āĻšā§āĻ› āĻ¸ā§āύ⧋āĻĢā§āϞ⧇āĻ•ā§āϏ āϰāϝāĻŧ⧇āϛ⧇ - āϝ⧇āϗ⧁āϞāĻŋ āϏāĻžāϧāĻžāϰāĻŖ āϏāĻŋāĻ¸ā§āĻŸā§‡āĻŽ āĻĨ⧇āϕ⧇ āφāϞāĻžāĻĻāĻž āĻ•āĻžāϰāĻŖ āϤāĻžāĻĻ⧇āϰ āĻŽāĻ§ā§āϝ⧇ āĻŦāĻŋāĻļ⧇āώ āĻ•āĻŋāϛ⧁ āϰāϝāĻŧ⧇āϛ⧇, āϤāĻžāχ āϏāĻžāϧāĻžāϰāĻŖ āύāĻŋāϝāĻŧāĻŽāϗ⧁āϞāĻŋ āϤāĻžāĻĻ⧇āϰ āĻ•ā§āώ⧇āĻ¤ā§āϰ⧇ āĻĒā§āϰāϝ⧋āĻœā§āϝ āύāϝāĻŧāĨ¤ āĻāϟāĻŋ āĻāĻ•āϟāĻŋ āϏāĻŽā§āĻŽā§āĻ– āφāĻ•ā§āϰāĻŽāĻŖ āĻĻā§āĻŦāĻžāϰāĻž āϏāĻŽāĻžāϧāĻžāύ āĻ•āϰāĻž āĻšāϝāĻŧ⧇āĻ›āĻŋāϞ - āϝāĻĻāĻŋ āĻ…ā§āϝāĻžāϞāĻžāĻ°ā§āĻŽ āĻĨāĻžāϕ⧇ āϤāĻŦ⧇ āĻŦāĻžāĻ¸ā§āϤāĻŦ⧇ āϏāĻŦāĻ•āĻŋāϛ⧁ āĻ āĻŋāĻ•āĻ āĻžāĻ• āĻĨāĻžāϕ⧇, āϤāĻŦ⧇ āφāĻŽāĻžāϕ⧇ āφāϰāĻ“ āĻ—āĻ­ā§€āϰāĻ­āĻžāĻŦ⧇ āĻ–āύāύ āĻ•āϰāϤ⧇ āĻšāĻŦ⧇ āĻāĻŦāĻ‚ āϕ⧇āύ āĻāϟāĻŋ āφāĻŽāĻžāϕ⧇ āϏāϤāĻ°ā§āĻ• āĻ•āϰ⧇ āϤāĻž āϖ⧁āρāĻœā§‡ āĻŦ⧇āϰ āĻ•āϰāϤ⧇ āĻšāĻŦ⧇, āϝāĻĻāĻŋāĻ“ āĻāϟāĻŋ āωāϚāĻŋāϤ āύāϝāĻŧāĨ¤ āĻŦāĻž āϤāĻĻā§āĻŦāĻŋāĻĒāϰ⧀āϤ - āϕ⧇āύ āύāĻžāĻ—āĻŋāĻ“āϏ āφāϤāĻ™ā§āĻ•āĻŋāϤ, āĻ•āĻŋāĻ¨ā§āϤ⧁ āφāχāϏāĻŋāĻ‚āĻ—āĻž āĻ•āϰ⧇ āύāĻžāĨ¤

āϚāϤ⧁āĻ°ā§āĻĨāϤ, āύāĻžāĻ—āĻŋāĻ“āϏ āĻāĻ–āĻžāύ⧇ āφāĻŽāĻžāϰ āφāϗ⧇ āϤāĻŋāύ āĻŦāĻ›āϰ āĻ•āĻžāϜ āĻ•āϰ⧇āϛ⧇ āĻāĻŦāĻ‚ āφāĻŽāĻžāϰ āύāϤ⧁āύ āĻĢā§āϝāĻžāĻ‚āϞāĻžāĻĄ āĻšāĻŋāĻĒāĻ¸ā§āϟāĻžāϰ āϏāĻŋāĻ¸ā§āĻŸā§‡āĻŽā§‡āϰ āϤ⧁āϞāύāĻžāϝāĻŧ āĻĒā§āϰāĻžāĻĨāĻŽāĻŋāĻ•āĻ­āĻžāĻŦ⧇ āϤāĻžāϰ āωāĻĒāϰ āĻŦ⧇āĻļāĻŋ āφāĻ¸ā§āĻĨāĻž āĻ›āĻŋāϞ, āϤāĻžāχ āĻĒā§āϰāϤāĻŋāĻŦāĻžāϰ āφāχāϏāĻŋāĻ™ā§āĻ—āĻž āφāϤāĻ™ā§āϕ⧇āϰ āϜāĻ¨ā§āĻŽ āĻĻāĻŋāϝāĻŧ⧇āϛ⧇, āύāĻžāĻ—āĻŋāĻ“āϏ āĻāĻ•āχ āĻŦāĻŋāώāϝāĻŧ⧇ āωāĻ¤ā§āϤ⧇āϜāĻŋāϤ āύāĻž āĻšāĻ“āϝāĻŧāĻž āĻĒāĻ°ā§āϝāĻ¨ā§āϤ āϕ⧇āω āĻ•āĻŋāϛ⧁āχ āĻ•āϰ⧇āύāĻŋāĨ¤ āĻ•āĻŋāĻ¨ā§āϤ⧁ āϖ⧁āĻŦ āĻ•āĻŽāχ Icinga Nagios āĻāϰ āĻšā§‡āϝāĻŧ⧇ āφāϗ⧇ āϏāĻ¤ā§āϝāĻŋāĻ•āĻžāϰ⧇āϰ āĻ…ā§āϝāĻžāϞāĻžāĻ°ā§āĻŽ āϤ⧈āϰāĻŋ āĻ•āϰ⧇āϛ⧇ āĻāĻŦāĻ‚ āφāĻŽāĻŋ āĻāϟāĻŋāϕ⧇ āĻāĻ•āϟāĻŋ āϗ⧁āϰ⧁āϤāϰ āϏāĻŽāĻ¸ā§āϝāĻž āĻŦāϞ⧇ āĻŽāύ⧇ āĻ•āϰāĻŋ, āϝāĻž āφāĻŽāĻŋ "āωāĻĒāϏāĻ‚āĻšāĻžāϰ" āĻŦāĻŋāĻ­āĻžāϗ⧇ āĻ•āĻĨāĻž āĻŦāϞāĻŦāĨ¤

āĻĢāϞāĻ¸ā§āĻŦāϰ⧂āĻĒ, āĻ•āĻŽāĻŋāĻļāύāĻŋāĻ‚ 5 āĻŽāĻžāϏ⧇āϰāĻ“ āĻŦ⧇āĻļāĻŋ āϏāĻŽāϝāĻŧ āϧāϰ⧇ āĻŦāĻŋāϞāĻŽā§āĻŦāĻŋāϤ āĻšāϝāĻŧ⧇āĻ›āĻŋāϞ (āφāϏāϞ⧇ 28 āϜ⧁āύ, 2018-āĻāϰ āϜāĻ¨ā§āϝ āĻĒāϰāĻŋāĻ•āĻ˛ā§āĻĒāύāĻž āĻ•āϰāĻž āĻšāϝāĻŧ⧇āĻ›āĻŋāϞ - 3 āĻĄāĻŋāϏ⧇āĻŽā§āĻŦāϰ, 2018), āĻĒā§āϰāϧāĻžāύāϤ "āĻĒā§āϝāĻžāϰāĻŋāϟāĻŋ āĻšā§‡āĻ•" āĻāϰ āĻ•āĻžāϰāϪ⧇ - āϏ⧇āχ āĻŦāĻžāĻœā§‡ āĻ•āĻĨāĻž āϝāĻ–āύ āύāĻžāĻ—āĻŋāĻ“āϏ⧇ āĻŦ⧇āĻļ āĻ•āϝāĻŧ⧇āĻ•āϟāĻŋ āĻĒāϰāĻŋāώ⧇āĻŦāĻž āϰāϝāĻŧ⧇āϛ⧇ āϝāĻž āϕ⧇āω āϜāĻžāύ⧇ āύāĻž āϏāĻŽā§āĻĒāĻ°ā§āϕ⧇ āĻ—āϤ āĻ•āϝāĻŧ⧇āĻ• āĻŦāĻ›āϰ āϧāϰ⧇ āĻ•āĻŋāϛ⧁āχ āĻļ⧁āύāĻŋāύāĻŋ, āĻ•āĻŋāĻ¨ā§āϤ⧁ āĻāĻ–āύāχ āϤāĻžāϰāĻž āĻŦāĻŋāύāĻž āĻ•āĻžāϰāϪ⧇ āϏāĻŽāĻžāϞ⧋āϚāύāĻž āĻ•āϰ⧇āϛ⧇ āĻāĻŦāĻ‚ āφāĻŽāĻžāϕ⧇ āĻŦā§āϝāĻžāĻ–ā§āϝāĻž āĻ•āϰāϤ⧇ āĻšāϝāĻŧ⧇āĻ›āĻŋāϞ āϕ⧇āύ āϤāĻžāϰāĻž āφāĻŽāĻžāϰ āĻĒā§āϝāĻžāύ⧇āϞ⧇ āĻ›āĻŋāϞ āύāĻž āĻāĻŦāĻ‚ āϤāĻžāĻĻ⧇āϰ āφāχāϏāĻŋāĻ‚āĻ—āĻžāϤ⧇ āϝ⧁āĻ•ā§āϤ āĻ•āϰāϤ⧇ āĻšāϝāĻŧ⧇āĻ›āĻŋāϞ āϝāĻžāϤ⧇ "āĻĒā§āϝāĻžāϰāĻŋāϟāĻŋ āĻšā§‡āĻ• āϏāĻŽā§āĻĒā§‚āĻ°ā§āĻŖ" (āύāĻžāĻ—āĻŋāĻ“āϏ⧇ āϏāĻŽāĻ¸ā§āϤ āĻĒāϰāĻŋāώ⧇āĻŦāĻž/āĻšā§‡āĻ• Icinga-āĻāϰ āĻĒāϰāĻŋāώ⧇āĻŦāĻž/āĻšā§‡āĻ•āϗ⧁āϞāĻŋāϰ āϏāĻžāĻĨ⧇ āĻŽāĻŋāϞ⧇ āϝāĻžāϝāĻŧ)

āĻŦāĻžāĻ¸ā§āϤāĻŦāĻžāϝāĻŧāύ:
āĻĒā§āϰāĻĨāĻŽāϟāĻŋ āĻšāϞ āϕ⧋āĻĄ āĻŦāύāĻžāĻŽ āĻĄā§‡āϟāĻž āϝ⧁āĻĻā§āϧ, āϝ⧇āĻŽāύ āĻĒāĻžāĻĒ⧇āϟ āĻ¸ā§āϟāĻžāχāϞāĨ¤ āϏāĻŽāĻ¸ā§āϤ āĻĄā§‡āϟāĻž, āĻāϕ⧇āĻŦāĻžāϰ⧇ āϏāĻŦāĻ•āĻŋāϛ⧁, āĻ…āĻŦāĻļā§āϝāχ āĻšāĻŋāϝāĻŧāĻžāϰ⧇ āĻĨāĻžāĻ•āϤ⧇ āĻšāĻŦ⧇ āĻāĻŦāĻ‚ āĻ…āĻ¨ā§āϝ āĻ•āĻŋāϛ⧁ āύāϝāĻŧ⧎ āϏāĻŽāĻ¸ā§āϤ āϕ⧋āĻĄ .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 }

āĻ…āĻ°ā§āĻĨāĻžā§Ž, āĻāϏāĻāϏāĻāϞ āĻšā§‡āĻ• āϏāĻŦāϏāĻŽāϝāĻŧ āϏāĻ•ā§āϰāĻŋāϝāĻŧ āĻĨāĻžāϕ⧇āĨ¤ āφāĻŽāĻŋ āϏāĻŋāύāĻŸā§āϝāĻžāĻ•ā§āϏ āĻĒā§āϰāϤāĻŋāĻ¸ā§āĻĨāĻžāĻĒāύ āĻ•āϰ⧇ āĻāϟāĻŋ āϏāĻŽāĻžāϧāĻžāύ āĻ•āϰ⧇āĻ›āĻŋ:

http_ssl: no

āϤāĻĨā§āϝāĻ“:

āĻĒ⧇āĻļāĻžāĻĻāĻžāϰāϰāĻž:

  • āφāĻŽāĻžāĻĻ⧇āϰ āĻāĻ–āύ āĻāĻ•āϟāĻŋ āĻŽāύāĻŋāϟāϰāĻŋāĻ‚ āϏāĻŋāĻ¸ā§āĻŸā§‡āĻŽ āφāϛ⧇, āĻĻ⧁āϟāĻŋ āύāϝāĻŧ, āϝ⧇āĻŽāύāϟāĻŋ āφāĻŽāϰāĻž āĻ—āϤ 7-8 āĻŽāĻžāϏ āϧāϰ⧇ āĻ•āϰ⧇āĻ›āĻŋ, āĻ…āĻĨāĻŦāĻž āĻāĻ•āϟāĻŋ āĻĒ⧁āϰāĻžāύ⧋ āĻāĻŦāĻ‚ āĻĻ⧁āĻ°ā§āĻŦāϞāĨ¤
  • āĻšā§‹āĻ¸ā§āϟ/āĻĒāϰāĻŋāώ⧇āĻŦāĻž(āĻšā§‡āĻ•) āĻĄā§‡āϟāĻž āĻ¸ā§āĻŸā§āϰāĻžāĻ•āϚāĻžāϰ āĻāĻ–āύ (āφāĻŽāĻžāϰ āĻŽāϤ⧇) āĻ…āύ⧇āĻ• āĻŦ⧇āĻļāĻŋ āĻĒāĻ āύāϝ⧋āĻ—ā§āϝ āĻāĻŦāĻ‚ āĻŦā§‹āϧāĻ—āĻŽā§āϝāĨ¤ āĻ…āĻ¨ā§āϝāĻĻ⧇āϰ āϜāĻ¨ā§āϝ, āĻāϟāĻŋ āĻāϤāϟāĻž āϏ⧁āĻ¸ā§āĻĒāĻˇā§āϟ āĻ›āĻŋāϞ āύāĻž, āϤāĻžāχ āφāĻŽāĻžāϕ⧇ āĻ¸ā§āĻĨāĻžāύ⧀āϝāĻŧ āωāχāĻ•āĻŋāϤ⧇ āĻ•āϝāĻŧ⧇āĻ•āϟāĻŋ āĻĒ⧃āĻˇā§āĻ āĻž āĻĒā§‹āĻ¸ā§āϟ āĻ•āϰāϤ⧇ āĻšāϝāĻŧ⧇āĻ›āĻŋāϞ āϝ⧇ āĻāϟāĻŋ āϕ⧀āĻ­āĻžāĻŦ⧇ āĻ•āĻžāϜ āĻ•āϰ⧇ āĻāĻŦāĻ‚ āϕ⧋āĻĨāĻžāϝāĻŧ āϕ⧀ āϏāĻŽā§āĻĒāĻžāĻĻāύāĻž āĻ•āϰāϤ⧇ āĻšāĻŦ⧇ āϤāĻž āĻŦā§āϝāĻžāĻ–ā§āϝāĻž āĻ•āϰāϤ⧇āĨ¤
  • āϭ⧇āϰāĻŋāϝāĻŧ⧇āĻŦāϞ āĻāĻŦāĻ‚ āĻĢāĻžāĻ‚āĻļāύ āĻŦā§āϝāĻŦāĻšāĻžāϰ āĻ•āϰ⧇ āĻšā§‡āĻ•āϗ⧁āϞāĻŋ āύāĻŽāύ⧀āϝāĻŧāĻ­āĻžāĻŦ⧇ āĻ•āύāĻĢāĻŋāĻ—āĻžāϰ āĻ•āϰāĻž āϏāĻŽā§āĻ­āĻŦ, āωāĻĻāĻžāĻšāϰāĻŖāĻ¸ā§āĻŦāϰ⧂āĻĒ, http_regexp āĻšā§‡āĻ• āĻ•āϰāϤ⧇, āĻ•āĻžāĻ™ā§āĻ•ā§āώāĻŋāϤ āĻĒā§āϝāĻžāϟāĻžāĻ°ā§āύ, āϰāĻŋāϟāĻžāĻ°ā§āύ āϕ⧋āĻĄ, url āĻāĻŦāĻ‚ āĻĒā§‹āĻ°ā§āϟ āĻšā§‹āĻ¸ā§āϟ āϏ⧇āϟāĻŋāĻ‚āϏ⧇ āϏ⧇āϟ āĻ•āϰāĻž āϝ⧇āϤ⧇ āĻĒāĻžāϰ⧇āĨ¤
  • āĻŦ⧇āĻļ āĻ•āϝāĻŧ⧇āĻ•āϟāĻŋ āĻĄā§āϝāĻžāĻļāĻŦā§‹āĻ°ā§āĻĄ āϰāϝāĻŧ⧇āϛ⧇, āϝāĻžāϰ āĻĒā§āϰāϤāĻŋāϟāĻŋāϰ āϜāĻ¨ā§āϝ āφāĻĒāύāĻŋ āĻĒā§āϰāĻĻāĻ°ā§āĻļāĻŋāϤ āĻ…ā§āϝāĻžāϞāĻžāĻ°ā§āĻŽāϗ⧁āϞāĻŋāϰ āφāĻĒāύāĻžāϰ āύāĻŋāϜāĻ¸ā§āĻŦ āϤāĻžāϞāĻŋāĻ•āĻž āύāĻŋāĻ°ā§āϧāĻžāϰāĻŖ āĻ•āϰāϤ⧇ āĻĒāĻžāϰ⧇āύ āĻāĻŦāĻ‚ āĻĒ⧁āϤ⧁āϞ āĻāĻŦāĻ‚ āĻŽāĻžāĻ°ā§āϜ āĻ…āύ⧁āϰ⧋āϧ⧇āϰ āĻŽāĻžāĻ§ā§āϝāĻŽā§‡ āĻāχ āϏāĻŽāĻ¸ā§āϤ āĻĒāϰāĻŋāϚāĻžāϞāύāĻž āĻ•āϰāϤ⧇ āĻĒāĻžāϰ⧇āύāĨ¤

āĻ•āύāϏ:

  • āĻĻāϞ⧇āϰ āϏāĻĻāĻ¸ā§āϝāĻĻ⧇āϰ āϜāĻĄāĻŧāϤāĻž - āύāĻžāĻ—āĻŋāĻ“āϏ āĻ•āĻžāϜ āĻ•āϰ⧇āϛ⧇āύ, āĻ•āĻžāϜ āĻ•āϰ⧇āϛ⧇āύ āĻāĻŦāĻ‚ āĻ•āĻžāϜ āĻ•āϰ⧇āϛ⧇āύ āĻāĻŦāĻ‚ āφāĻĒāύāĻžāϰ āĻāχ āχāϏāĻŋāĻ™ā§āĻ—āĻž āĻ•ā§āϰāĻŽāĻžāĻ—āϤ āĻŦāĻ—āĻŋ āĻāĻŦāĻ‚ āϧ⧀āϰāĨ¤ āφāĻĒāύāĻŋ āĻ•āĻŋāĻ­āĻžāĻŦ⧇ āĻāĻ–āĻžāύ⧇ āχāϤāĻŋāĻšāĻžāϏ āĻĻ⧇āĻ–āϤ⧇ āĻĒāĻžāϰ⧇āύ? āĻ“āĻš, āĻ…āĻ­āĻŋāĻļāĻžāĻĒ, āĻāϟāĻŋ āφāĻĒāĻĄā§‡āϟ āĻ•āϰāĻž āĻšāϝāĻŧāύāĻŋ... (āφāϏāϞ āϏāĻŽāĻ¸ā§āϝāĻž āĻšāϞ āĻ…ā§āϝāĻžāϞāĻžāĻ°ā§āĻŽ āχāϤāĻŋāĻšāĻžāϏ āĻ¸ā§āĻŦāϝāĻŧāĻ‚āĻ•ā§āϰāĻŋāϝāĻŧāĻ­āĻžāĻŦ⧇ āφāĻĒāĻĄā§‡āϟ āĻšāϝāĻŧ āύāĻž, āĻļ⧁āϧ⧁āĻŽāĻžāĻ¤ā§āϰ F5 āĻĻā§āĻŦāĻžāϰāĻž)
  • āϏāĻŋāĻ¸ā§āĻŸā§‡āĻŽā§‡āϰ āϜāĻĄāĻŧāϤāĻž - āϝāĻ–āύ āφāĻŽāĻŋ āĻ“āϝāĻŧ⧇āĻŦ āχāĻ¨ā§āϟāĻžāϰāĻĢ⧇āϏ⧇ "āφāĻĒāĻĄā§‡āϟ" (āĻāĻ–āύāχ āĻšā§‡āĻ• āĻ•āϰ⧁āύ) āĻ•ā§āϞāĻŋāĻ• āĻ•āϰāĻŋ - āĻāĻ•ā§āϏāĻŋāĻ•āĻŋāωāĻļāύ āĻĢāϞāĻžāĻĢāϞ āĻŽāĻ™ā§āĻ—āϞ āĻ—ā§āϰāĻšā§‡āϰ āφāĻŦāĻšāĻžāĻ“āϝāĻŧāĻžāϰ āωāĻĒāϰ āύāĻŋāĻ°ā§āĻ­āϰ āĻ•āϰ⧇, āĻŦāĻŋāĻļ⧇āώāϤ āϜāϟāĻŋāϞ āĻĒāϰāĻŋāώ⧇āĻŦāĻžāϗ⧁āϞāĻŋāϰ āωāĻĒāϰ āϝ⧇āϗ⧁āϞāĻŋ āϚāĻžāϞāĻžāύ⧋āϰ āϜāĻ¨ā§āϝ āĻ•āϝāĻŧ⧇āĻ• āϏ⧇āϕ⧇āĻ¨ā§āĻĄā§‡āϰ āĻĒā§āϰāϝāĻŧā§‹āϜāύ āĻšāϝāĻŧ⧎ āĻāĻŽāύ āĻĢāϞāĻžāĻĢāϞ āĻ¸ā§āĻŦāĻžāĻ­āĻžāĻŦāĻŋāĻ•āĨ¤ āĻ…āĻ¸ā§āĻŸā§āϰ⧇āϞāĻŋāϝāĻŧāĻžāϰ Nagios āĻĨ⧇āϕ⧇ Icinga2-āϤ⧇ āĻŽāĻžāχāĻ—ā§āϰ⧇āĻļāύ
  • āϏāĻžāϧāĻžāϰāĻŖāĻ­āĻžāĻŦ⧇, āĻĒāĻžāĻļāĻžāĻĒāĻžāĻļāĻŋ āĻĻ⧁āϟāĻŋ āϏāĻŋāĻ¸ā§āĻŸā§‡āĻŽā§‡āϰ āĻ…āĻĒāĻžāϰ⧇āĻļāύ⧇āϰ āĻ›āϝāĻŧ āĻŽāĻžāϏ⧇āϰ āĻĒāϰāĻŋāϏāĻ‚āĻ–ā§āϝāĻžāύ āĻ…āύ⧁āϏāĻžāϰ⧇, āύāĻžāĻ—āĻŋāĻ“āϏ āϏāĻŦāϏāĻŽāϝāĻŧ āφāχāϏāĻŋāĻ™ā§āĻ—āĻžāϰ āĻšā§‡āϝāĻŧ⧇ āĻĻā§āϰ⧁āϤ āĻ•āĻžāϜ āĻ•āϰ⧇āϛ⧇ āĻāĻŦāĻ‚ āĻāϟāĻŋ āφāĻŽāĻžāϕ⧇ āϏāĻ¤ā§āϝāĻŋāχ āĻŦāĻŋāϰāĻ•ā§āϤ āĻ•āϰ⧇āϛ⧇āĨ¤ āφāĻŽāĻžāϰ āĻ•āĻžāϛ⧇ āĻŽāύ⧇ āĻšāĻšā§āϛ⧇ āϤāĻžāϰāĻž āϟāĻžāχāĻŽāĻžāϰ⧇āϰ āϏāĻžāĻĨ⧇ āĻ•āĻŋāϛ⧁ āĻ—ā§‹āϞāĻŽāĻžāϞ āĻ•āϰ⧇āϛ⧇ āĻāĻŦāĻ‚ āĻĒā§āϰāϤāĻŋ āĻĒāĻžāρāϚ āĻŽāĻŋāύāĻŋāĻŸā§‡ āĻšā§‡āĻ• āĻ•āϰāĻž āĻšāϝāĻŧ, āφāϏāϞ⧇ āĻāϟāĻŋ āĻĒā§āϰāϤāĻŋ 5:30 āĻŦāĻž āĻāϰāĻ•āĻŽ āĻ•āĻŋāϛ⧁ āϘāĻŸā§‡āĨ¤
  • āφāĻĒāύāĻŋ āϝāĻĻāĻŋ āϝ⧇āϕ⧋āύ āϏāĻŽāϝāĻŧ⧇ āĻĒāϰāĻŋāώ⧇āĻŦāĻžāϟāĻŋ āĻĒ⧁āύāϰāĻžāϝāĻŧ āϚāĻžāϞ⧁ āĻ•āϰ⧇āύ (systemctl restart icinga2) - āϏ⧇āχ āϏāĻŽāϝāĻŧ⧇ āĻĒā§āϰāĻ—āϤāĻŋāĻļā§€āϞ āϏāĻŽāĻ¸ā§āϤ āĻšā§‡āĻ• āĻāĻ•āϟāĻŋ āϗ⧁āϰ⧁āϤāϰ āĻ…ā§āϝāĻžāϞāĻžāĻ°ā§āĻŽ āϤ⧈āϰāĻŋ āĻ•āϰāĻŦ⧇ āĻĒāĻ°ā§āĻĻāĻžāϝāĻŧ āĻāĻŦāĻ‚ āĻŦāĻžāχāϰ⧇ āĻĨ⧇āϕ⧇ āĻŽāύ⧇ āĻšāĻšā§āϛ⧇ āϝ⧇āύ āϏāĻŦāĻ•āĻŋāϛ⧁ āĻĒāĻĄāĻŧ⧇ āϗ⧇āϛ⧇ (āύāĻŋāĻļā§āϚāĻŋāϤ āĻŦāĻžāĻ—).

āĻ•āĻŋāĻ¨ā§āϤ⧁ āϏāĻžāĻŽāĻ—ā§āϰāĻŋāĻ•āĻ­āĻžāĻŦ⧇, āĻāϟāĻŋ āĻ•āĻžāϜ āĻ•āϰ⧇āĨ¤

āωāĻ¤ā§āϏ: www.habr.com

DDoS āϏ⧁āϰāĻ•ā§āώāĻž, VPS VDS āϏāĻžāĻ°ā§āĻ­āĻžāϰ āϏāĻš āϏāĻžāχāϟāϗ⧁āϞāĻŋāϰ āϜāĻ¨ā§āϝ āύāĻŋāĻ°ā§āĻ­āϰāϝ⧋āĻ—ā§āϝ āĻšā§‹āĻ¸ā§āϟāĻŋāĻ‚ āĻ•āĻŋāύ⧁āύ đŸ”Ĩ DDoS āϏ⧁āϰāĻ•ā§āώāĻž āϏāĻš āύāĻŋāĻ°ā§āĻ­āϰāϝ⧋āĻ—ā§āϝ āĻ“āϝāĻŧ⧇āĻŦāϏāĻžāχāϟ āĻšā§‹āĻ¸ā§āϟāĻŋāĻ‚ āĻ•āĻŋāύ⧁āύ, VPS VDS āϏāĻžāĻ°ā§āĻ­āĻžāϰ | ProHoster