nagios和ganglia

老生常谈–监控

很远很久以前,看到过运维的同事在搞监控系统,自己这个苦逼的开发也在有空闲的时间里面,玩玩而已。

服务器是用了腾讯云的,裸机~~,系统是ubuntu的。
参考了idevit

INSTALL NAGIOS

这次的安装是源码安装,现在ubuntu的apt-get安装了nagios还是3版本的,所以还是多折腾,去下载源码咯。
先安装一些依赖的软件:

1
apt-get install libperl-dev libpng12-dev libgd2-xpm-dev build-essential php5-gd wget nginx spwan-fcgi fcgiwrap php5-fpm 

本次的安装时4.1.1版本的。

1
2
wget https://assets.nagios.com/downloads/nagioscore/releases/nagios-4.1.1.tar.gz
wget http://www.nagios-plugins.org/download/nagios-plugins-2.1.1.tar.gz

下载解压到服务器之中~

创建用户nagios和用户组nagcmd

1
2
3
4
adduser --system --no-create-home --disabled-login --group nagios
groupadd nagcmd
usermod -G nagcmd nagios
usermod -a -G nagcmd www-data

配置nagios源码安装:

1
2
3
4
5
6
7
8
9
cd nagios-4.1.1
./configure --prefix /usr/local/nagios --sysconfdir=/etc/nagios --with-command-user=nagios --with-command-group=nagcmd
#这里会检测所需的环境~
make all
make install
make install-init
make install-config
make install-commandmode
#这里是将开始编译,安装到指定目录,分发配置文件和配置了命令

安装完毕之后,这时候你可以把安装包里面的插件cp过来

1
2
cp -rvf contrib/eventhandlers/ /usr/local/nagios/libexec/
chown -R nagios:nagios /usr/local/nagios/libexec/eventhandlers

nagios需要验证用户的权限,由于本次安装不想使用apache,选用了nginx,所以这次是通过以下的命令来生产用户验证的文件的。

1
2
3
wget http://trac.edgewall.org/export/10791/trunk/contrib/htpasswd.py
chmod +x htpasswd.py
htpasswd.py -c -b /etc/nagios/htpasswd.users nagiosadmin password

这里的nagiosadmin是用户名,而password是密码,如果想要重新修改用户名的话,需要在/etc/nagios/cfg.cfg文件中加入权限。
比如用户名是catlittlechen的话,可以修改成下面这样子

1
authorized_for_system_information=nagiosadmin,catlittlechen

安装下nagios官方提供的插件

1
2
3
4
cd nagios-plugins-2.1.1
./configure --with-nagios-user=nagios --with-nagios-group=nagios
make
make install

之后可以通过执行下面的指令来验证下是否成功的配置了nagios

1
/usr/local/nagios/bin/nagios -v /etc/nagios/nagios.cfg

启动的时候,这边的找了下,发现在/etc/rc.d/下,有一个nagios的脚本,就链接过来了/etc/init.d/nagios,然后就可以执行下面的命令启动来。

1
service nagios start

弱弱的说,nginx配置在最下面~

INSTALL GANGLIA

安装ganglia只是为了便捷的弥补下nagios只有定时检测的特性,当然,你可以尝试安装pnp4nagios来完成这个功能,但是ganglia更加的强大一些,而且真得简单啊。
命令:

1
apt-get install -y ganglia-monitor rrdtool gmetad ganglia-webfrontend

这时候需要修改两个地方的配置文件

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
vim /etc/ganglia/gmetad.conf
#data_source "my cluster" localhost
data_source "cat chen" localhost
vim /etc/ganglia/gmond.conf
cluster {
#name = "unspecified"
name = "cat chen"
owner = "unspecified"
latlong = "unspecified"
url = "unspecified"
}
udp_send_channel {
#mcast_join = 239.2.11.71
host = localhost
port = 8649
ttl = 1
}
udp_recv_channel {
#mcast_join = 239.2.11.71
port = 8649
#bind = 239.2.11.71
}

然后执行下面的语句重启下服务

1
service ganglia-monitor restart && service gmetad restart

杠杠的,ganglia就这么搞定了~
这里为了习惯问题,我还执行了以下的命令

1
2
cp -r /usr/share/ganglia-webfrontend/  /var/www/
mv /var/www/ganglia-webfrontend /var/www/ganglia

Nagios && Ganglia

最后,当然是配合ganglia和nagios了。

1
2
3
4
git clone https://github.com/ganglia/monitor-core/
cp monitor-core/contrib/check_ganglia.py /usr/local/nagios/libexec
chown nagios:nagios check_ganglia.py
chmod +x check_ganglia.py

为了让nagios可以使用这个插件,需要在command配置中加入以下的配置

1
2
3
4
5
vim /etc/nagios/objects/commands.cfg
define command {
command_name check_ganglia
command_line $USER1$/check_ganglia.py -h $HOSTNAME$ -m $ARG1$ -w $ARG2$ -c $ARG3$
}

然后就可以在配置项目里面配置相应的监控目标,比如我简答的配置如下

1
2
3
4
5
6
7
8
9
10
11
12
13
14
vim /etc/nagios/objects/localhost.cfg
define service {
use local-service
host_name localhost
service_description Ganglia Bytes Out
check_command check_ganglia!bytes_out!80000!100000
}

define service {
use local-service
host_name localhost
service_description Ganglia Disk Free
check_command check_ganglia!disk_free!20!10
}

更加详细的配置,好书推荐,可以参考下nagios_cn

nginx配置:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
server {
listen 10086
server_name nagios.catlittlechen.com;
access_log /var/log/nginx/nagios.access.log;
error_log /var/log/nginx/nagios.error.log;

auth_basic "Restricted Nagios Area!";
auth_basic_user_file /etc/nagios/htpasswd.users;

root /var/www;
index index.php index.html;

location /nagios {
index index.php;
alias /usr/local/nagios/share/;
}

location /ganglia {
index index.php index.html index.htm;
}

location ~ ^/nagios/(.*\.php)$ {
alias /usr/local/nagios/share/$1;
include /etc/nginx/fastcgi.conf;
fastcgi_pass unix:/var/run/php5-fpm.sock;
}

location ~ \.cgi$ {
root /usr/local/nagios/sbin/;
rewrite ^/nagios/cgi-bin/(.*)\.cgi /$1.cgi break;
fastcgi_param AUTH_USER $remote_user;
fastcgi_param REMOTE_USER $remote_user;
include /etc/nginx/fastcgi.conf;
fastcgi_pass unix:/var/run/fcgiwrap.socket;
}

location ~ \.php$ {
include /etc/nginx/fastcgi.conf;
fastcgi_pass unix:/var/run/php5-fpm.sock;
}

location ~ /\.ht {
deny all;
}
}

晒图,别吐槽我的垃圾服务器

ganglia
nagios