使用 Icinga 监控 PostgreSQL

来自 PostgreSQL wiki
转至导航转至搜索

首先,我们必须查找要安装 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