|
zabbix介绍
zabbix简介
Zabbix是一个企业级的开源分布式监控解决方案,由一个国外的团队持续维护更新,软件可以自由下载使用。官方网站:http://www.zabbix.com官方文档:http://www.zabbix.com/documentation/2.0/manual/quickstart。Zabbix通过C/S模式采集数据,通过B/S模式在web端展示和配置。
Zabbix运行条件:
Server:Zabbix Server需运行在LAMP LNMP环境下,对硬件要求低。
Agent:目前已有的agent基本支持市面常见的OS,包含Linux、HPUX、Solaris、Sun、windows。
SNMP:支持各类常见的网络设备
zabbix功能
具备常见的商业监控软件所具备的功能(主机的性能监控、网络设备性能监控、数据库性能监控、FTP等通用协议监控、多种告警方式、详细的报表图表绘制)支持自动发现网络设备和服务器;支持分布式,能集中展示、管理分布式的监控点;扩展性强,server提供通用接口,可以自己开发完善各类监控。
优劣势
优点:开源,无软件成本投入;Server对设备性能要求低(实际测试环境:虚拟机CentOS5,2GCPU 1G内存,监控5台设备,CPU使用率基本保持在10%以下,内存剩余400M以上);支持设备多;支持分布式集中管理;开放式接口,扩展性强。
缺点:中文资料较少。
zabbix安装
lnmp环境搭建(略)
注意参数(PHP):
1
2
3
| CFLAGS= CXXFLAGS=./configure --prefix=/usr/local/php --with-config-file-path=/usr/local/php/etc--with-fpm-user=www --with-fpm-group=www --enable-fpm --disable-fileinfo--with-mysql=mysqlnd --with-mysqli=mysqlnd --with-pdo-mysql=mysqlnd--with-iconv-dir=/usr/local --with-freetype-dir --with-jpeg-dir --with-png-dir--with-zlib --with-libxml-dir=/usr --enable-xml --disable-rpath --enable-bcmath--enable-shmop --enable-exif --enable-sysvsem --enable-inline-optimization--with-curl --enable-mbregex --enable-mbstring --with-mcrypt --with-gd--enable-gd-native-ttf --with-openssl --with-mhash --enable-pcntl--enable-sockets --with-xmlrpc --enable-ftp --with-gettext --enable-zip--enable-soap --disable-ipv6 --disable-debug
makeZEND_EXTRA_LIBS='-liconv'
make install
|
php.ini配置参数
1
2
3
4
5
6
| max_execution_time= 300
memory_limit =128M
post_max_size =50M
upload_max_filesize= 2M
max_input_time =300
date.timezone ="Asia/Shanghai"
|
zabbix服务端安装
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
| wget http://jaist.dl.sourceforge.net/ ... zabbix-2.4.5.tar.gz
tar zxvfzabbix-2.4.5.tar.gz
cd zabbix-2.4.5
./configure --prefix=/usr/local/zabbix/ --enable-server --enable-agent --with-mysql--with-net-snmp --with-libcurl --with-libxml2
make &&make install
useradd -M –s /sbin/nologin zabbix
mysql -uroot -p-e "CREATE DATABASE zabbix CHARACTER SET utf8;"
mysql -uroot -pzabbix < database/mysql/schema.sql
mysql -uroot -pzabbix < database/mysql/images.sql
mysql -uroot -pzabbix < database/mysql/data.sql
vim/etc/services
zabbix-agent 10050/tcp
zabbix-agent 10060/udp
zabbix-trapper 10051/tcp
zabbix-trapper 10051/udp
vim/usr/local/zabbix/etc/zabbix_server.conf
DBName=zabbix
DBUser=root
DBPassword=123456
DBSocket=/tmp/mysql.sock
DBPort=3306
cd/usr/local/zabbix/bin/
for i in *;do ln-s /usr/local/zabbix/bin/${i} /usr/bin/${i};done
cd/usr/local/zabbix/sbin/
for i in *; do ln-s /usr/local/zabbix/sbin/${i} /usr/sbin/${i}; done
cp misc/init.d/fedora/core/zabbix_server/etc/init.d/
cpmisc/init.d/fedora/core/zabbix_agentd /etc/init.d/
chmod +x /etc/init.d/zabbix_*
sed -i's@BASEDIR=/usr/local/@BASEDIR=/usr/local/zabbix1/@' /etc/init.d/zabbix_server
sed -i's@BASEDIR=/usr/local/@BASEDIR=/usr/local/zabbix1/@' /etc/init.d/zabbix_agentd
/etc/init.d/zabbix_server start
/etc/init.d/zabbix_agentd start
chkconfig --add zabbix_server
chkconfig --addzabbix_agentd
chkconfig zabbix_agentd on
chkconfig zabbix_server on
cp –r frontends/php /data/wwwroot/htdocs/zabbix
chown -R www:www /data/wwwroot/htdocs/zabbix/
|
nginx配置:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
| server {
listen 80 backlog=8192;
server_name mon.leerw.com;
index index.html index.htm index.php;
root /data/wwwroot/htdocs;
access_log/data/weblogs/access_nginx.log combined;
location / {
try_files $uri $uri//index.php?$args;
}
location ~ ^(.+.php)(.*)$ {
fastcgi_split_path_info^(.+.php)(.*)$;
root /data/wwwroot/htdocs;
#fastcgi_passremote_php_ip:9000;
fastcgi_passunix:/dev/shm/php-cgi.sock;
fastcgi_param SCRIPT_FILENAME /scripts$fastcgi_script_name;
fastcgi_index index.php;
include fastcgi.conf;
}
service nginxrestart && service php-fpm restart
|
http://ip-address/zabbix进行安装
解决乱码问题:
C:\Windows\Fonts\simkai.ttf
上传到/data/wwwroot/htdocs/zabbix/fonts/
1
2
| sed -i's/DejaVuSans/simkai/g' ./include/defines.inc.php
service php-fpmrestart
|
安装完成后隐藏掉installation按钮,防止再次安装。# vim/data/www/coolnull.com/zabbix/include/menu.inc.php文件,注释以下内容,#为新添加的
1
2
3
4
5
6
7
8
| array(
'url' =>'report4.php',
'label' =>_('Notifications')
)#,
#array(
# 'url' => 'setup.php',
# 'label' => _('Installation')
#)
|
再次修改下admin密码
zabbix客户端安装
1
2
3
4
5
6
7
8
9
| # wget http://jaist.dl.sourceforge.net/ ... zabbix-2.4.5.tar.gz
# tar zxvfzabbix-2.4.5.tar.gz
# cd zabbix-2.4.5
# ./configure --prefix=/usr/local/zabbix --enable-agent
# make &&make install
# vim/usr/local/zabbix/etc/zabbix_agentd.conf
Server=172.16.100.106(zabbix server地址)
ServerActive=172.16.100.106
Hostname=Zabbixserver
|
启动客户端:
1
| /usr/local/zabbix/sbin/zabbix_agentd
|
zabbix监控主机
点击—组态—右上角—主机—创建主机
自定义监控
自定义主机组
一类的hosts可以归属到同一个host group,便于分类管理同一类设备。
创建主机
自定义模板
自定义监控需要理清一下问题:
Items:监控项,这里就是自定义key
Triggers:创建触发器。这里就是监控达到预警的阈值
Graphs:添加图形
自定义监控,可以在单台主机上添加,也可以先定义成模板应用到主机上,首先创建key.
这里以监控/etc/passwd的文件数为例:
创建key,操作客户端配置文件
1
2
3
4
5
6
7
8
9
10
11
12
| # vim /usr/local/zabbix/etc/zabbix_agentd.conf
UnsafeUserParameters=1
EnableRemoteCommands=0
Server=127.0.0.1,172.16.100.106
Include=/usr/local/zabbix/etc/zabbix_agentd.conf.d/
# cat /usr/local/zabbix/etc/zabbix_agentd.conf.d/count_line_passwd.conf
UserParameter=count.line.passwd,wc-l /etc/passwd|awk '{print $1}'
#/etc/init.d/zabbix_agentd restart
# zabbix_get -s 127.0.0.1 -k count.line.passwd
26
#
|
模板已经创建好,下面将模板应用于主机
监控主机
监控报警
定义通知介质
1
2
3
4
5
6
7
8
9
10
11
12
13
14
| # mkdir /data/wwwroot/htdocs/zabbix/alertscripts/
# cat /data/wwwroot/htdocs/zabbix/alertscripts/mail.sh
#!/bin/bash
#
to=$1
subject=$2
body=$3
/usr/local/bin/sendEmail -f mengtao10@163.com -t "$to" -ssmtp.163.com -u "$subject" -o message-content-type=html -omessage-charset=utf8 -xu mengtao10@163.com -xp vst123 -m "$body"2>> /tmp/22.log
# cat/usr/local/zabbix/etc/zabbix_server.conf | grep -i aler
# How often Zabbix will try to send unsentalerts (in seconds).
### Option:AlertScriptsPath
# Full path to location of custom alertscripts.
#AlertScriptsPath=${datadir}/zabbix/alertscripts
AlertScriptsPath=/data/wwwroot/htdocs/zabbix/alertscripts
|
安装sendEmail
配置action
事件通知配置
创建scree
创建slide show
创建自定义maps
zabbix自动添加主机
创建自动添加到相应的模板
这里我另外开启BT5操作系统,apt-get installzabbix-agent 然后修改配置文件Server 地址,zabbix服务器过一段时间的信息如下:
监控举例
zabbix监控MySQL
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
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
| # vim/usr/local/zabbix/bin/check_mysql_performance.sh
#!/bin/bash
#
MYSQL_SOCK="/tmp/mysql.sock"
MYSQL_PWD=123456
ARGS=1
if [ $# -ne"$ARGS" ]; then
echo "Please input oneargument:"
fi
case"$1" in
Uptime)
result=`mysqladmin -uroot-p${MYSQL_PWD} -S $MYSQL_SOCK status | cut -f 2 -d":" | cut -f1-d"T"`
echo $result
;;
Com_update)
result=`mysqladmin -uroot-p${MYSQL_PWD} -S $MYSQL_SOCK extended-status | grep -w"Com_update"|cut -d"|" -f3`
echo $result
;;
Slow_queries)
result=`mysqladmin -uroot-p${MYSQL_PWD} -S $MYSQL_SOCK status | cut -f5 -d":"|cut -f1-d"0"`
echo $result
;;
Com_select)
result=`mysqladmin -uroot-p${MYSQL_PWD} -S $MYSQL_SOCK extended-status |grep -w"Com_select"|cut -d"|" -f3`
echo $result
;;
Com_rollback)
result=`mysqladmin -uroot-p${MYSQL_PWD} -S $MYSQL_SOCK extended-status |grep -w"Com_rollback"|cut -d"|" -f3`
echo $result
;;
Questions)
result=`mysqladmin -uroot-p${MYSQL_PWD} -S $MYSQL_SOCK status|cut -f4 -d":"|cut -f1 -d"S"`
echo $result
;;
Com_insert)
result=`mysqladmin -uroot-p${MYSQL_PWD} -S $MYSQL_SOCK extended-status |grep -w"Com_insert"|cut -d"|" -f3`
echo $result
;;
Com_delete)
result=`mysqladmin -uroot-p${MYSQL_PWD} -S $MYSQL_SOCK extended-status |grep -w"Com_delete"|cut -d"|" -f3`
echo $result
;;
Com_commit)
result=`mysqladmin -uroot-p${MYSQL_PWD} -S $MYSQL_SOCK extended-status |grep -w"Com_commit"|cut -d"|" -f3`
echo $result
;;
Bytes_sent)
result=`mysqladmin -uroot-p${MYSQL_PWD} -S $MYSQL_SOCK extended-status |grep -w "Bytes_sent"|cut -d"|" -f3`
echo $result
;;
Bytes_received)
result=`mysqladmin -uroot-p${MYSQL_PWD} -S $MYSQL_SOCK extended-status |grep -w"Bytes_received" |cut -d"|" -f3`
echo $result
;;
Com_begin)
result=`mysqladmin -uroot-p${MYSQL_PWD} -S $MYSQL_SOCK extended-status |grep -w "Com_begin"|cut-d"|" -f3`
echo $result
;;
*)
echo"Usage:$0(Uptime|Com_update|Slow_queries|Com_select|Com_rollback|Questions)"
;;
esac
|
1
2
3
4
5
| # vim/usr/local/zabbix/etc/zabbix_agentd.conf
UserParameter=mysql.version,mysql-V
UserParameter=mysql.ping,mysqladmin-uroot -p123456 -S /tmp/mysql.sock ping | grep -c alive
UserParameter=mysql.status,/usr/local/zabbix/bin/check_mysql_performance.sh$1 $2
#/etc/init.d/zabbix_agentd restart
|
客户端进行简单的测试:
能否可以正常返回值
基本都enable可用状态
zabbix监控MySQL主从
在Slave上创建脚本:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
| # vim/usr/local/zabbix/bin/check_mysql.repl.sh
#!/bin/bash
# Authorby: Tommy.Gandolf
#
STATUS=$(/usr/local/mysql/bin/mysql-u root -p123456 -S /tmp/mysql.sock -e "show slave status\G" | grep-i "running")
IO_env=`echo$STATUS | grep IO | awk ' {print $2}'`
SQL_env=`echo$STATUS | grep SQL | awk '{print $2}'`
if ["$IO_env" = "Yes" -a "$SQL_env" = "Yes"]; then
echo "1"
else
echo "0"
fi
# vim/usr/local/zabbix/etc/zabbix_agentd.conf.d/check_mysql.repl.conf
UserParameter=check.mysql.repl,./usr/local/zabbix/bin/check_mysql.repl.sh
#./zabbix_agent.sh restart
|
创建模块
zabbix监控nginx
Nginx编译参数:
1
| ./configure--prefix=/usr/local/nginx/ --user=www --group=www--with-http_stub_status_module --with--http_spdy_module--with-http_http_spdy_module --with-http_ssl_module --with-ipv6--with-http_gzip_static_module --with-http_realip_module --with-http_flv_module--with-ld-opt='-ljemalloc' --with-http_stub_status_module
|
1
2
3
4
5
6
7
| location = /status
{
stub_status on;
access_log off;
allow 127.0.0.1;
allow 172.16.100.106;
}
|
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
46
47
48
49
50
51
| # vim/usr/local/nginx/sbin/nginx_status.sh
#!/bin/bash
# Scriptto fetch nginx statuses for tribily monitoring systems
#License: GPLv4
# SetVariables
BKUP_DATE=`/bin/date+%Y%m%d`
LOG="/var/log/nginx_status.log"
#HOST=`/sbin/ifconfigeth0 | sed -n '/inet /{s/.*addr://;s/ .*//;p}'`
HOST=`/sbin/ifconfigeth0 |grep "inet addr" |awk -F[:" "] '{print $13}'`
PORT="80"
#Functions to return nginx stats
functionactive {
/usr/bin/curl"http://$HOST:$PORT/status" 2>/dev/null| grep 'Active' | awk'{print $NF}'
}
functionreading {
/usr/bin/curl"http://$HOST:$PORT/status" 2>/dev/null| grep 'Reading' | awk'{print $2}'
}
functionwriting {
/usr/bin/curl"http://$HOST:$PORT/status" 2>/dev/null| grep 'Writing' | awk'{print $4}'
}
functionwaiting {
/usr/bin/curl"http://$HOST:$PORT/status" 2>/dev/null| grep 'Waiting' | awk'{print $6}'
}
functionaccepts {
/usr/bin/curl"http://$HOST:$PORT/status" 2>/dev/null| awk NR==3 | awk '{print$1}'
}
functionhandled {
/usr/bin/curl"http://$HOST:$PORT/status" 2>/dev/null| awk NR==3 | awk '{print$2}'
}
functionrequests {
/usr/bin/curl"http://$HOST:$PORT/status" 2>/dev/null| awk NR==3 | awk '{print$3}'
}
# Run therequested function
$1
# vim/usr/local/zabbix/etc/zabbix_agentd.conf.d/zabbix_agent.conf
#nginx_status_key
UserParameter=nginx.accepts,/usr/local/nginx/sbin/nginx_status.shaccepts
UserParameter=nginx.handled,/usr/local/nginx/sbin/nginx_status.shhandled
UserParameter=nginx.requests,/usr/local/nginx/sbin/nginx_status.shrequests
UserParameter=nginx.connections.active,/usr/local/nginx/sbin/nginx_status.shactive
UserParameter=nginx.connections.reading,/usr/local/nginx/sbin/nginx_status.shreading
UserParameter=nginx.connections.writing,/usr/local/nginx/sbin/nginx_status.shwriting
UserParameter=nginx.connections.waiting,/usr/local/nginx/sbin/nginx_status.shwaiting
#chmod +x/usr/local/nginx/sbin/nginx_status.sh
#/etc/init.d/zabbix_agentd restart
# zabbix_get -s 172.16.100.106 -k "nginx.connections.active"
3
#
|
zabbix监控Windows
解压安装包到相应的路径下,修改zabbix_agentd.win.conf文件,内容如下:
1
2
3
4
| Server=127.0.0.1,172.16.100.106
ServerActive=127.0.0.1,172.16.100.106
Hostname=OA
启动:
|
监控内容:CPU负载,可用内存,磁盘使用情况,内存使用情况对比
zabbix监控MySQL php-fpm 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
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
| # vim/usr/local/zabbix/bin/process_status.sh
#!/bin/bash
top-bn1>/var/log/zabbix/process.log
LOG=/var/log/zabbix/process.log
php_fpm(){
grep "php-fpm" $LOG |awk'{sum+=$6}; END{print sum}'
}
php_fpm_num(){
grep "php-fpm" $LOG |wc -l
}
nginx(){
grep "nginx" $LOG |awk'{sum+=$6}; END{print sum}'
}
nginx_num(){
grep "nginx" $LOG |wc -l
}
mysqld(){
grep "mysqld" $LOG |awk'{sum+=$6}; END{print sum}'
}
mysqld_num(){
grep "mysqld" $LOG |wc -l
}
case"$1" in
php_fpm)
php_fpm
;;
php_fpm_num)
php_fpm_num
;;
nginx)
nginx
;;
nginx_num)
nginx_num
;;
mysqld)
mysqld
;;
mysqld_num)
mysqld_num
;;
*)
echo "Usage: $0{php_fpm|php_fpm_num|nginx|nginx_num|mysqld|mysqld_num}"
esac
# chmod +x /usr/local/zabbix/bin/process_status.sh
# mkdir /var/log/zabbix
# chownzabbix:zabbix –R /var/log/zabbix
|
templates-application--item-trigger--graphs
监控TCP/IP连接状态
在被监控服务器上:
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
46
47
48
| vim/usr/local/zabbix/bin/tcp_status.sh
#!/bin/bash
#Author by:Tommy.Gandolf
#
check_status()
{
netstat -an|awk'/^tcp/{++S[$NF]}END{for (a in S)print a,S[a]}'
}
case"$1" in
TIME_WAIT)
check_status | grep TIME_WAIT | awk'{print $2}'
;;
ESTABLISHED)
check_status | grep ESTABLISHED | awk'{print $2}'
;;
LISTEN)
check_status | grep LISTEN | awk'{print $2}'
;;
CLOSE_WAIT)
check_status | grep CLOSE_WAIT | awk'{print $2}'
;;
FIN_WAIT1)
check_status | grep FIN_WAIT1 | awk'{print $2}'
;;
FIN_WAIT2)
check_status | grep FIN_WAIT2 | awk'{print $2}'
;;
SYN_RECV)
check_status | grep SYN_RECV | awk'{print $2}'
;;
*)
echo $"Usage: $0{TIME_WAIT|ESTABLISHED|LISTEN|CLOSE_WAIT|FIN_WAIT1|FIN_WAIT2|SYN_RECV}"
exit 2
esac
更改配置文件参数
# vim/usr/local/zabbix/etc/zabbix_agentd.conf
# For tcp status
UserParameter=check.time_wait,/usr/local/zabbix/bin/tcp_status.shTIME_WAIT
UserParameter=check.established,/usr/local/zabbix/bin/tcp_status.shESTABLISHED
UserParameter=check.listen,/usr/local/zabbix/bin/tcp_status.shLISTEN
UserParameter=check.close.wait,/usr/local/zabbix/bin/tcp_status.shCLOSE_WAIT
UserParameter=check.fin_wait1,/usr/local/zabbix/bin/tcp_status.shFIN_WAIT1
UserParameter=check.fin_wait2,/usr/local/zabbix/bin/tcp_status.shFIN_WAIT2
UserParameter=check.syn_recv,/usr/local/zabbix/bin/tcp_status.shSYN_RECV
#/etc/init.d/zabbix_agentd start
|
在监控服务器创建模板
最后来一张预览图:
END
|
|