使用 Icinga 监控 PostgreSQL
首先,我们必须查找要安装 Icinga 的系统的相应软件包,或下载源代码。
https://www.icinga.org/download/packages/
使用的是架构为 x86_64 的 RHEL 6,因此指向一个 .rpm 以添加 RepoForge 存储库,其中包含安装所需的软件包。
wget http://pkgs.repoforge.org/rpmforge-release/rpmforge-release-0.5.3-1.el6.rf.x86_64.rpm sudo rpm -i rpmforge-release-0.5.3-1.el6.rf.x86_64.rpm
现在,我们可以安装必需的软件包。
sudo yum install icinga icinga-idoutils-libdbi-pgsql icinga-web php-pgsql nagios-plugins nagios-plugins-nrpe
icinga 软件包是 Icinga 的基础,icinga-idoutils-libdbi-pgsql 是连接 Icinga 要使用的数据库(我们将使用一个 Postgres 数据库)所必需的,icinga-web 是前端,我们使用 php-pgsql 来让 php 能够连接 Postgres 数据库,而 nagios-plugins 包含了大多数监控所需的插件。
修改 pg_hba.conf。
sudo su - postgres vim /var/lib/pgsql/9.2/data/pg_hba.conf
并添加下列行:
host icinga icinga 127.0.0.1/32 trust host icinga_web icinga_web 127.0.0.1/32 trust
为 Icinga 和 Icinga-web 准备用户和数据库。
postgres=# CREATE USER icinga; postgres=# ALTER USER icinga WITH PASSWORD 'icinga'; postgres=# CREATE DATABASE icinga; postgres=# CREATE USER icinga_web; postgres=# ALTER USER icinga_web WITH PASSWORD 'icinga' createdb; postgres=# CREATE DATABASE icinga_web; postgres=# SELECT pg_reload_conf(); postgres=# \q
并运行脚本来创建数据库架构和初始数据(这些脚本以及其他配置文件的位置可能会因安装目录而异)。
psql -h 127.0.0.1 -U icinga -d icinga < /usr/share/doc/icinga-idoutils-libdbi-pgsql-1.8.4/db/pgsql/pgsql.sql psql -h 127.0.0.1 -U icinga_web -d icinga_web < /usr/share/icinga-web/etc/schema/pgsql.sql
编辑 icinga-web 的数据库配置文件,指示它如何连接到数据库。
vim /usr/share/icinga-web/app/config/databases.xml
并修改以下行:
<ae:parameter name="dsn">pgsql://icinga_web:[email protected]:5432/icinga_web</ae:parameter> <ae:parameter name="dsn">pgsql://icinga:[email protected]:5432/icinga</ae:parameter>
也修改 ido2db 的配置文件。
sudo vim /etc/icinga/ido2db.cfg
编辑以下行:
db_host=127.0.0.1
现在,我们可以启动服务。
sudo /etc/init.d/icinga start sudo /etc/init.d/httpd start sudo /etc/init.d/ido2db start
要添加统计图表,我们必须安装 pnp4nagios(对于 RHEL6,该软件包位于 EPEL 存储库中,或可以从以下来源编译:http://sourceforge.net/projects/pnp4nagios/files/)。
wget http://dl.fedoraproject.org/pub/epel/6/x86_64/epel-release-6-8.noarch.rpm sudo rpm -i epel-release-6-8.noarch.rpm sudo yum install pnp4nagios
编辑以下配置文件:
sudo vim /etc/pnp4nagios/npcd.cfg
修改以下行:
user = icinga group = icinga
config.php
sudo vim /etc/pnp4nagios/config.php
编辑此行:
$conf['nagios_base'] = "/icinga/cgi-bin";
icinga.cfg
sudo vim /etc/icinga/icinga.cfg
使用以下行:
process_performance_data=1 host_perfdata_file=/var/lib/pnp4nagios/host-perfdata service_perfdata_file=/var/lib/pnp4nagios/service-perfdata service_perfdata_file_template=DATATYPE::SERVICEPERFDATA\tTIMET::$TIMET$\tHOSTNAME::$HOSTNAME$\tSERVICEDESC::$SERVICEDESC$\tSERVICEPERFDATA::$SERVICEPERFDATA$\tSERVICECHECKCOMMAND::$SERVICECHECKCOMMAND$\tHOSTSTATE::$HOSTSTATE$\tHOSTSTATETYPE::$HOSTSTATETYPE$\tSERVICESTATE::$SERVICESTATE$\tSERVICESTATETYPE::$SERVICESTATETYPE$ host_perfdata_file_template=DATATYPE::HOSTPERFDATA\tTIMET::$TIMET$\tHOSTNAME::$HOSTNAME$\tHOSTPERFDATA::$HOSTPERFDATA$\tHOSTCHECKCOMMAND::$HOSTCHECKCOMMAND$\tHOSTSTATE::$HOSTSTATE$\tHOSTSTATETYPE::$HOSTSTATETYPE$ service_perfdata_file_mode=a host_perfdata_file_mode=a service_perfdata_file_processing_interval=30 host_perfdata_file_processing_interval=30 service_perfdata_file_processing_command=process-service-perfdata-file host_perfdata_file_processing_command=process-host-perfdata-file
commands.cfg
sudo vim /etc/icinga/objects/commands.cfg
添加以下内容:
# pnp define command{ command_name process-service-perfdata-file command_line /bin/mv /var/lib/pnp4nagios/service-perfdata /var/spool/pnp4nagios/ } define command{ command_name process-host-perfdata-file command_line /bin/mv /var/lib/pnp4nagios/host-perfdata /var/spool/pnp4nagios/ }
安装 pnp4nagios 会创建一些具有“nagios”用户权限的目录,我们必须将其更改为“icinga”用户。
sudo chown icinga:icinga /var/lib/pnp4nagios/ sudo chown icinga:icinga /var/spool/pnp4nagios/
我们必须为 Apache 创建一个凭据文件。
sudo htpasswd -c /etc/icinga/htpasswd.users icingaadmin
并指示 Apache 使用它。
sudo vim /etc/httpd/conf.d/pnp4nagios.conf
编辑以下行:
AuthUserFile /etc/icinga/htpasswd.users
启动 npcd 服务,并重启 icinga 和 apache 服务。
sudo /etc/init.d/npcd start sudo /etc/init.d/icinga restart sudo /etc/init.d/httpd restart
为了监控 Postgres,我们将使用 check_postgres 插件。
cd /usr/lib64/nagios/plugins/ sudo wget http://bucardo.org/downloads/check_postgres.tar.gz tar -xzf check_postgres.tar.gz
我们必须将 check_postgres 命令添加到文件 /etc/icinga/objects/commands.cfg 中。
# check_postgres define command { command_name check_postgres command_line $USER1$/check_postgres-2.20.1/check_postgres.pl -H $HOSTADDRESS$ --action $ARG1$ -w $ARG2$ -c $ARG3$ }
注意:要能够使用 check_postgres 监控远程机器,需要在远程主机的 pg_hba.conf 中具有相应条目,该条目向监控服务器授予相应权限。
可在 icinga.cfg 文件中规定要加载的配置文件,默认有一个用于定义 localhost 监控的文件
cfg_file=/etc/icinga/objects/localhost.cfg
要包含其他要监控的主机,可添加另一行指示要使用的文件
cfg_file=/etc/icinga/objects/host.cfg
创建该文件
sudo vim /etc/icinga/objects/host.cfg
然后添加主机的定义(带相应 IP)和要监控的服务
define host{ use linux-server host_name server1 alias server1 address 192.168.0.114 } # check_postgres_locks define service{ use generic-service host_name server1 service_description PGSQL Locks check_command check_postgres!locks!40!80 } # check_postgres_txn_idle define service{ use generic-service host_name server1 service_description PGSQL Txn_idle check_command check_postgres!txn_idle!’20 minutes’!’4 hours’ } # check_postgres_bloat define service{ use generic-service host_name server1 service_description PGSQL Bloat check_command check_postgres!bloat!30%!60% }
要能够监控主机的其他方面(例如,进程数量),必须在主机中安装 nagios-plugin 和 nrpe-server,本示例中使用一台 Debian 机器
sudo apt-get install nagios-nrpe-server nagios-plugins
我们必须编辑配置文件 /etc/nagios/nrpe.cfg,以便指定要从中执行监控的 IP
allowed_hosts=192.168.0.110
然后重新启动 nrpe 服务
sudo /etc/init.d/nagios-nrpe-server restart
将 check_nrpe 命令添加到 /etc/icinga/objects/commands.cfg
# check_nrpe define command { command_name check_nrpe command_line $USER1$/check_nrpe -H $HOSTADDRESS$ -c $ARG1$ }
然后将希望监控的内容的命令添加到定义主机的文件中(/etc/icinga/objects/host.cfg)
# total_processes define service{ use generic-service host_name server1 service_description Total Processes check_command check_nrpe!check_total_procs }
可在远程主机上执行的可用命令在该主机的文件 /etc/nagios/nrpe.cfg 中定义,并且我们还能根据可用的插件添加更多命令。
要能够启用邮件通知,我们首先必须能够通过终端发送电子邮件,为此可以安装和配置某些邮件服务器,如 Postfix。
邮件服务器启动运行后,我们必须将联系人详细信息添加到 /etc/icinga/objects/contacts.cfg
define contact { contact_name cchapi host_notifications_enabled 1 host_notification_period 24x7 host_notification_options d,u,r host_notification_commands notify-host-by-email service_notifications_enabled 1 service_notification_period 24x7 service_notification_options w,u,c,r service_notification_commands notify-service-by-email email [email protected] }
然后将联系人添加到我们希望收到通知的服务或主机(以及想要的通知选项)
# total_processes define service{ use generic-service host_name server1 service_description Total Processes notification_period 24x7 notification_interval 60 notification_options u,c,w,r check_command check_nrpe!check_total_procs contacts cchapi }
最后,在 /etc/icinga/objects/commands.cfg 中添加发送电子邮件的命令
# 'notify-host-by-email' command definition define command { command_name notify-host-by-email command_line /usr/bin/printf "%b" "***** Icinga *****\n\nNotification Type: $NOTIFICATIONTYPE$\nHost: $HOSTNAME$\nState: $HOSTSTATE$\nAddress: $HOSTADDRESS$\nInfo: $HOSTOUTPUT$\n\nDate/Time: $LONGDATETIME$\n" | /bin/mailx -s "** $NOTIFICATIONTYPE$ Host Alert: $HOSTNAME$ is $HOSTSTATE$ **" $CONTACTEMAIL$ } # 'notify-service-by-email' command definition define command { command_name notify-service-by-email command_line /usr/bin/printf "%b" "***** Icinga *****\n\nNotification Type: $NOTIFICATIONTYPE$\n\nService: $SERVICEDESC$\nHost: $HOSTALIAS$\nAddress: $HOSTADDRESS$\nState: $SERVICESTATE$\n\nDate/Time: $LONGDATETIME$\n\nAdditional Info:\n\n $SERVICEOUTPUT$\n" | /bin/mailx -s "** $NOTIFICATIONTYPE$ Service Alert: $HOSTALIAS$/$SERVICEDESC$ is $SERVICESTATE$ **" $CONTACTEMAIL$ }
这是在使用 Postfix 作为邮件服务器时的操作。
对 Icinga 服务进行重新加载,以便加载新配置
/etc/init.d/icinga reload