This shows you the differences between two versions of the page.
| — |
icinga:icinga_configuration_page2 [2020/04/10 17:38] (current) |
||
|---|---|---|---|
| Line 1: | Line 1: | ||
| + | ===== 2. Icinga Configuration ===== | ||
| + | |||
| + | |||
| + | |[[:icinga:icinga_confgiguration|Page 1]] |[[:icinga:icinga_configuration_page2|Page 2]] |[[:icinga:icinga_configuration_page3|Page 3]] |[[:icinga:icinga_configuration_page4|Page 4]] | | ||
| + | |||
| + | |||
| + | The main Icinga configuration file is /etc/icinga/icinga.cfg , additional configurations are stored in /etc/icinga/commands.cfg and /etc/icinga/resource.cfg . Usually the default configuration is ok, so you don't have to change these files. | ||
| + | |||
| + | |||
| + | The first thing you should change is the contact details in /etc/icinga/objects/contacts_icinga.cfg so that notifications are sent to the correct email address: | ||
| + | |||
| + | |||
| + | <code> | ||
| + | vi /etc/icinga/objects/contacts_icinga.cfg | ||
| + | </code> | ||
| + | |||
| + | |||
| + | <code> | ||
| + | [...] | ||
| + | define contact{ | ||
| + | contact_name root | ||
| + | alias Falko Timme | ||
| + | service_notification_period 24x7 | ||
| + | host_notification_period 24x7 | ||
| + | service_notification_options w,u,c,r | ||
| + | host_notification_options d,r | ||
| + | service_notification_commands notify-service-by-email | ||
| + | host_notification_commands notify-host-by-email | ||
| + | email me@myself.com | ||
| + | } | ||
| + | [...] | ||
| + | </code> | ||
| + | |||
| + | |||
| + | The service checks for localhost are defined in /etc/icinga/objects/localhost_icinga.cfg - take a look at that file: | ||
| + | |||
| + | |||
| + | <file> | ||
| + | cat /etc/icinga/objects/localhost_icinga.cfg | ||
| + | </file> | ||
| + | |||
| + | |||
| + | <file> | ||
| + | # A simple configuration file for monitoring the local host | ||
| + | # This can serve as an example for configuring other servers; | ||
| + | # Custom services specific to this host are added here, but services | ||
| + | # defined in icinga-common_services.cfg may also apply. | ||
| + | # | ||
| + | |||
| + | define host{ | ||
| + | use generic-host ; Name of host template to use | ||
| + | host_name localhost | ||
| + | alias localhost | ||
| + | address 127.0.0.1 | ||
| + | } | ||
| + | |||
| + | # Define a service to check the disk space of the root partition | ||
| + | # on the local machine. Warning if <20% free, critical if | ||
| + | # <10% free space on partition. | ||
| + | |||
| + | define service{ | ||
| + | use generic-service ; Name of service template to use | ||
| + | host_name localhost | ||
| + | service_description Disk Space | ||
| + | check_command check_all_disks!20%!10% | ||
| + | } | ||
| + | |||
| + | # Define a service to check the number of currently logged in | ||
| + | # users on the local machine. Warning if> 20 users, critical | ||
| + | # if> 50 users. | ||
| + | |||
| + | define service{ | ||
| + | use generic-service ; Name of service template to use | ||
| + | host_name localhost | ||
| + | service_description Current Users | ||
| + | check_command check_users!20!50 | ||
| + | } | ||
| + | |||
| + | # Define a service to check the number of currently running procs | ||
| + | # on the local machine. Warning if> 250 processes, critical if | ||
| + | #> 400 processes. | ||
| + | |||
| + | define service{ | ||
| + | use generic-service ; Name of service template to use | ||
| + | host_name localhost | ||
| + | service_description Total Processes | ||
| + | check_command check_procs!250!400 | ||
| + | } | ||
| + | |||
| + | # Define a service to check the load on the local machine. | ||
| + | |||
| + | define service{ | ||
| + | use generic-service ; Name of service template to use | ||
| + | host_name localhost | ||
| + | service_description Current Load | ||
| + | check_command check_load!5.0!4.0!3.0!10.0!6.0!4.0 | ||
| + | |||
| + | } | ||
| + | </file> | ||
| + | |||
| + | |||
| + | Let's check out the /etc/nagios-plugins/config/disk.cfg file: | ||
| + | |||
| + | |||
| + | <code> | ||
| + | cat /etc/nagios-plugins/config/disk.cfg | ||
| + | </code> | ||
| + | |||
| + | |||
| + | | | ||
| + | |||
| + | |||
| + | <code> | ||
| + | |||
| + | # 'check_disk' command definition | ||
| + | define command{ | ||
| + | command_name check_disk | ||
| + | command_line /usr/lib/nagios/plugins/check_disk -w '$ARG1$' -c '$ARG2$' -e -p '$ARG3$' | ||
| + | } | ||
| + | |||
| + | # 'check_all_disks' command definition | ||
| + | define command{ | ||
| + | command_name check_all_disks | ||
| + | command_line /usr/lib/nagios/plugins/check_disk -w '$ARG1$' -c '$ARG2$' -e | ||
| + | } | ||
| + | |||
| + | # 'ssh_disk' command definition | ||
| + | define command{ | ||
| + | command_name ssh_disk | ||
| + | command_line /usr/lib/nagios/plugins/check_by_ssh -H '$HOSTADDRESS$' -C __GESHI_QUOT__ /usr/lib/nagios/plugins/check_disk -w '$ARG1$' -c '$ARG2$' -e -p '$ARG3$'__GESHI_QUOT__ | ||
| + | } | ||
| + | |||
| + | #### | ||
| + | # use these c | ||
| + | </code>[[:icinga:icinga_confgiguration|Page1]] [[:icinga:icinga_configuration_page3|Page3]] | ||
| + | |||
| + | |||
| + | <code> | ||
| + | hecks, if you want to test IPv4 connectivity on IPv6 enabled systems | ||
| + | #### | ||
| + | |||
| + | # 'ssh_disk_4' command definition | ||
| + | define command{ | ||
| + | command_name ssh_disk_4 | ||
| + | command_line /usr/lib/nagios/plugins/check_by_ssh -H '$HOSTADDRESS$' -C " /usr/lib/nagios/plugins/check_disk -w '$ARG1$' -c '$ARG2$' -e -p '$ARG3$'" -4 | ||
| + | } | ||
| + | </code> | ||
| + | |||
| + | |||
| + | | | ||
| + | |||
| + | |||
| + | As you see, the check_all_disks command is defined as /usr/lib/nagios/plugins/check_disk -w '$ARG1$' -c '$ARG2$' -e . If you take a look at the /etc/icinga/objects/localhost_icinga.cfg file again, you see that we have the line check_command check_all_disks!20%!10% in it. Icinga allows us to pass command line arguments to service checks by separating them with an exclamation mark ( ! ), so check_command check_all_disks!20%!10% means we pass 20% as the first command line argument and 10% as the second command line argument to the /usr/lib/nagios/plugins/check_disk -w '$ARG1$' -c '$ARG2$' -e command so that it finally translates to /usr/lib/nagios/plugins/check_disk -w '20%' -c '10%' -e. | ||
| + | |||
| + | |||
| + | If you want to pass a command line argument that contains an exclamation mark, you must escape the exclamation mark with a backslash:<nowiki> \</nowiki>! | ||
| + | |||
| + | |||
| + | To find out what command line arguments a plugin can take, call that plugin with the –help switch. For example, to find out how the check_disk plugin can be used, run | ||
| + | |||
| + | |||
| + | <code> | ||
| + | /usr/lib/nagios/plugins/check_disk --help | ||
| + | </code> | ||
| + | |||
| + | |||
| + | With this knowledge you can modify the service checks in /etc/icinga/objects/localhost_icinga.cfg to your likings, and you can add/modify plugin configurations in the /etc/nagios-plugins/config directory. | ||
| + | |||
| + | |||
| + | Now let's assume we want to add a service check for MySQL, we first take a look at the appropriate plugin configuration: | ||
| + | |||
| + | |||
| + | <code> | ||
| + | cat /etc/nagios-plugins/config/mysql.cfg | ||
| + | </code> | ||
| + | |||
| + | |||
| + | <code> | ||
| + | # 'check_mysql' command definition | ||
| + | define command{ | ||
| + | command_name check_mysql | ||
| + | command_line /usr/lib/nagios/plugins/check_mysql -H '$HOSTADDRESS$' | ||
| + | } | ||
| + | |||
| + | # 'check_mysql_cmdlinecred' command definition | ||
| + | define command{ | ||
| + | command_name check_mysql_cmdlinecred | ||
| + | command_line /usr/lib/nagios/plugins/check_mysql -H '$HOSTADDRESS$' -u '$ARG1$' -p '$ARG2$' | ||
| + | } | ||
| + | |||
| + | # 'check_mysql_database' command definition | ||
| + | define command{ | ||
| + | command_name check_mysql_database | ||
| + | command_line /usr/lib/nagios/plugins/check_mysql -d '$ARG3$' -H '$HOSTADDRESS$' -u '$ARG1$' -p '$ARG2$' | ||
| + | } | ||
| + | </code> | ||
| + | |||
| + | |||
| + | The command I want to use is check_mysql_cmdlinecred - this takes a MySQL username and a password as arguments (besides the host address which is taken from the host_name parameter of the service check definition. I want to use the MySQL user nagios with the password howtoforge here, so I add the following section to /etc/icinga/objects/localhost_icinga.cfg : | ||
| + | |||
| + | |||
| + | <code> | ||
| + | vi /etc/icinga/objects/localhost_icinga.cfg | ||
| + | </code> | ||
| + | |||
| + | |||
| + | <code> | ||
| + | [...] | ||
| + | define service{ | ||
| + | use generic-service | ||
| + | host_name localhost | ||
| + | service_description MySQL | ||
| + | check_command check_mysql_cmdlinecred!nagios!howtoforge | ||
| + | } | ||
| + | </code> | ||
| + | |||
| + | |||
| + | Before we restart Icinga, we must create the MySQL user nagios with the password howtoforge : | ||
| + | |||
| + | |||
| + | <code> | ||
| + | mysql -u root -p | ||
| + | |||
| + | GRANT USAGE ON *.* TO nagios@localhost IDENTIFIED BY 'howtoforge'; | ||
| + | GRANT USAGE ON *.* TO nagios@localhost.localdomain IDENTIFIED BY 'howtoforge'; | ||
| + | FLUSH PRIVILEGES; | ||
| + | </code> | ||
| + | |||
| + | |||
| + | quit; | ||
| + | |||
| + | |||
| + | (The USAGE privilege is a synonym for 'no privileges', i.e., the nagios user can connect to MySQL, but not alter or read any data.) | ||
| + | |||
| + | |||
| + | Now we restart Icinga so that our changes take effect: | ||
| + | |||
| + | |||
| + | <code> | ||
| + | /etc/init.d/icinga restart | ||
| + | </code> | ||
| + | |||
| + | |||
| + | If you check localhost 's services in the Icinga web interface now, you should see that a check for MySQL has been added: | ||
| + | |||
| + | |||
| + | [[http://static.howtoforge.com/images/icinga_monitoring_ubuntu_11.10/big/4.png|{{http://static.howtoforge.com/images/icinga_monitoring_ubuntu_11.10/4.png?nolink&380x275}}]] | ||
| + | |||
| + | |||
| + | [[http://static.howtoforge.com/images/icinga_monitoring_ubuntu_11.10/big/4.png|http://static.howtoforge.com/images/icinga_monitoring_ubuntu_11.10/big/4.png]]Likewise, we can add checks for SMTP, POP3, and IMAP - these are just connection checks, so we don't need any arguments: | ||
| + | |||
| + | |||
| + | <code> | ||
| + | vi /etc/icinga/objects/localhost_icinga.cfg | ||
| + | </code> | ||
| + | |||
| + | |||
| + | <code> | ||
| + | [...] | ||
| + | define service{ | ||
| + | use generic-service | ||
| + | host_name localhost | ||
| + | service_description SMTP | ||
| + | check_command check_smtp | ||
| + | } | ||
| + | define service{ | ||
| + | use generic-service | ||
| + | host_name localhost | ||
| + | service_description POP3 | ||
| + | check_command check_pop | ||
| + | } | ||
| + | define service{ | ||
| + | use generic-service | ||
| + | host_name localhost | ||
| + | service_description IMAP | ||
| + | check_command check_imap | ||
| + | } | ||
| + | </code> | ||
| + | |||
| + | |||
| + | Restart Icinga… | ||
| + | |||
| + | |||
| + | /etc/init.d/icinga restart | ||
| + | |||
| + | |||
| + | … and a few moments later you should see the new checks in the Icinga web interface: | ||
| + | |||
| + | |||
| + | [[http://static.howtoforge.com/images/icinga_monitoring_ubuntu_11.10/big/5.png|{{http://static.howtoforge.com/images/icinga_monitoring_ubuntu_11.10/5.png?nolink&379x275}}]] | ||
| + | |||
| + | |||
| + | [[http://static.howtoforge.com/images/icinga_monitoring_ubuntu_11.10/big/5.png|http://static.howtoforge.com/images/icinga_monitoring_ubuntu_11.10/big/5.png]]You might have noticed the SSH and HTTP checks for localhost which are not defined in /etc/icinga/objects/localhost_icinga.cfg . These are defined in hostgroup s in the /etc/icinga/objects/hostgroups_icinga.cfg file. A hostgroup allows us to run a service check for multiple servers and define it only once. Take a look at that file: | ||
| + | |||
| + | |||
| + | cat /etc/icinga/objects/hostgroups_icinga.cfg | ||
| + | |||
| + | |||
| + | <code> | ||
| + | # Some generic hostgroup definitions | ||
| + | |||
| + | # A simple wildcard hostgroup | ||
| + | define hostgroup { | ||
| + | hostgroup_name all | ||
| + | alias All Servers | ||
| + | members * | ||
| + | } | ||
| + | |||
| + | # A list of your Debian GNU/Linux servers | ||
| + | define hostgroup { | ||
| + | hostgroup_name debian-servers | ||
| + | alias Debian GNU/Linux Servers | ||
| + | members localhost | ||
| + | } | ||
| + | |||
| + | # A list of your web servers | ||
| + | define hostgroup { | ||
| + | hostgroup_name http-servers | ||
| + | alias HTTP servers | ||
| + | members localhost | ||
| + | } | ||
| + | |||
| + | # A list of your ssh-accessible servers | ||
| + | define hostgroup { | ||
| + | hostgroup_name ssh-servers | ||
| + | alias SSH servers | ||
| + | members localhost | ||
| + | } | ||
| + | </code> | ||
| + | |||
| + | |||
| + | As you see, we have a hostgroup called http-servers and a hostgroup called ssh-servers , and localhost is a member of each of these groups. The service checks for the hostgroup s are defined in /etc/icinga/objects/services_icinga.cfg . This file contains service checks and refers to the hostgroup s to which these checks should be applied by using the hostgroup_name parameter: | ||
| + | |||
| + | |||
| + | <code> | ||
| + | cat /etc/icinga/objects/services_icinga.cfg | ||
| + | </code> | ||
| + | |||
| + | |||
| + | <code> | ||
| + | # check that web services are running | ||
| + | define service { | ||
| + | hostgroup_name http-servers | ||
| + | service_description HTTP | ||
| + | check_command check_http | ||
| + | use generic-service | ||
| + | notification_interval 0 ; set> 0 if you want to be renotified | ||
| + | } | ||
| + | |||
| + | # check that ssh services are running | ||
| + | define service { | ||
| + | hostgroup_name ssh-servers | ||
| + | service_description SSH | ||
| + | check_command check_ssh | ||
| + | use generic-service | ||
| + | notification_interval 0 ; set> 0 if you want to be renotified | ||
| + | } | ||
| + | </code> | ||
| + | |||
| + | |||
| + | As you see, the SSH and HTTP service checks are defined here. | ||
| + | |||
| + | |||
| + | |[[:icinga:icinga_confgiguration|Page 1]] |[[:icinga:icinga_configuration_page2|Page 2]] |[[:icinga:icinga_configuration_page3|Page 3]] |[[:icinga:icinga_configuration_page4|Page 4]] | | ||
| + | |||
| + | |||
| + | \\ | ||