Zabbix的大用处
Zabbix从3.0之后就多了许多自带的监控项,比较常用的主要是CPU、内存、网卡这几方面的监控,但是作为一个合格的运维这远远的不够的,比如一些进程的状态,Nginx的会话情况,PHP的进程服务状态,Redis的键值,数据库的查询情况,服务器的温度等等这些都是我们应该时刻关注的,以为这些都对开发有一定的帮助,假如MySQL的查询过大多慢,那么开发看对应的监控找出问题所在,然后进行优化处理,还有就是可以对监控项设定一定的触发器完成自动化的操作,比如说,nginx无缘无故的挂掉了,那么可以设置一个动作,先发一封邮件警告,然后尝试帮你重启服务,如果尝试重启不行,那么就再发邮件通知你问题严重了。
Zabbix自带的常用项
agent.ping --- 检测客户端可达性。返回nothing表示不可达,1表示可达
system.cpu.load[] --- 检测CPU 负载。返回浮点数
system.cpu.util[] --- 检测CPU 使用率。返回浮点数
vfs.dev.read[] --- 检测磁盘读取数据。返回是 sps, ops, bps浮点类型,需要定义1024倍
vfs.dev.write[] --- 检测磁盘写入数据。返回是 sps, ops, bps浮点类型,需要定义1024倍
...还有很多很多,但是我这里就不一一列举了,因为从3.0开始Zabbix支持中文还不错,小伙伴们可以看描述即可
Zabbix的自定义常用项
内存相关的自定义项
vim /usr/local/zabbix/etc/zabbix_agentd.conf.d/catram.conf
UserParameter=ram.info[*],/bin/cat /proc/meminfo | awk '/^$1:/{print $$2}'
ram.info[Cached] --- 检测内存的缓存使用量,返回整数,需要定义1024倍
ram.info[MemFree] --- 检测内存的空余量,返回整数,需要定义1024倍
ram.info[Buffers] --- 检测内存的使用量,返回整数,需要定义1024倍
TCP相关的自定义项
vim /usr/local/zabbix/share/zabbix/alertscripts/tcp_connection.sh
#!/bin/bash
function ESTAB {
/usr/sbin/ss -ant | awk '{++s[$1]} END {for(k in s) print k,s[k]}' | grep 'ESTAB' | awk '{print $2}'
}
function TIMEWAIT {
/usr/sbin/ss -ant | awk '{++s[$1]} END {for(k in s) print k,s[k]}' | grep 'TIME-WAIT' | awk '{print $2}'
}
function LISTEN {
/usr/sbin/ss -ant | awk '{++s[$1]} END {for(k in s) print k,s[k]}' | grep 'LISTEN' | awk '{print $2}'
}
$1
vim /usr/local/zabbix/etc/zabbix_agentd.conf.d/cattcp.conf
UserParameter=tcp[*],/usr/local/zabbix/share/zabbix/alertscripts/tcp_connection.sh $1
tcp[TIMEWAIT] --- 检测TCP的驻留数,返回整数
tcp[ESTAB] --- 检测TCP的连接数,返回整数
tcp[LISTEN] --- 检测TCP的监听数,返回整数
Nginx相关的自定义项
vim /etc/nginx/conf.d/default.conf
location /nginx-status
{
stub_status on;
access_log off;
allow 127.0.0.1;
deny all;
}
vim /usr/local/zabbix/etc/zabbix_agentd.conf.d/nginx.conf
UserParameter=Nginx.status,[[ `service nginx status` =~ 'running' ]] && echo 1 || echo 0
UserParameter=Nginx.active,/usr/bin/curl -s "http://127.0.0.1:80/nginx-status" | awk '/Active/ {print $NF}'
UserParameter=Nginx.read,/usr/bin/curl -s "http://127.0.0.1:80/nginx-status" | grep 'Reading' | cut -d" " -f2
UserParameter=Nginx.wrie,/usr/bin/curl -s "http://127.0.0.1:80/nginx-status" | grep 'Writing' | cut -d" " -f4
UserParameter=Nginx.wait,/usr/bin/curl -s "http://127.0.0.1:80/nginx-status" | grep 'Waiting' | cut -d" " -f6
UserParameter=Nginx.accepted,/usr/bin/curl -s "http://127.0.0.1:80/nginx-status" | awk '/^[ \t]+[0-9]+[ \t]+[0-9]+[ \t]+[0-9]+/ {print $1}'
UserParameter=Nginx.handled,/usr/bin/curl -s "http://127.0.0.1:80/nginx-status" | awk '/^[ \t]+[0-9]+[ \t]+[0-9]+[ \t]+[0-9]+/ {print $2}'
UserParameter=Nginx.requests,/usr/bin/curl -s "http://127.0.0.1:80/nginx-status" | awk '/^[ \t]+[0-9]+[ \t]+[0-9]+[ \t]+[0-9]+/ {print $3}'
Nginx.status --- Nginx 服务状态,返回0表示异常,1表示正常
Nginx.active --- 检测Nginx正处理连接数,返回整数
Nginx.read --- 检测Nginx读取信息数,返回整数
Nginx.wrie --- 检测Nginx返回信息数,返回整数
Nginx.wait --- 检测Nginx驻留连接数,返回整数
Nginx.accepted --- 检测Nginx已处理连接数,返回整数
Nginx.handled --- 检测Nginx成功握手数,返回整数
Nginx.requests --- 检测Nginx成功请求数,返回整数
PHP相关的自定义项
vim /etc/nginx/conf.d/default.conf
location /status {
allow 127.0.0.1;
deny all;
fastcgi_param SCRIPT_FILENAME $fastcgi_script_name;
include fastcgi_params;
fastcgi_pass unix:/dev/shm/php5-fpm.sock;
}
vi /etc/php-fpm.d/www.conf
pm.status_path = /status
vim /usr/local/zabbix/etc/zabbix_agentd.conf.d/php.conf
UserParameter=PHP.status,[[ `service php-fpm status` =~ 'running' ]] && echo 1 || echo 0
UserParameter=PHP.listenqueue,/usr/bin/wget --quiet -O - http://127.0.0.1:80/status?auto | grep "listen queue:" | grep -vE "len|max" | awk '{print $3}'
UserParameter=PHP.idle,wget --quiet -O - http://127.0.0.1:80/status?auto | grep "idle processes" | awk '{print $3}'
UserParameter=PHP.active,wget --quiet -O - http://127.0.0.1:80/status?auto | grep "active" | awk '{print $3}'| grep -v "process"
UserParameter=PHP.conn,wget --quiet -O - http://127.0.0.1:80/status?auto | grep "accepted conn" | awk '{print $3}'
UserParameter=PHP.reached,wget --quiet -O - http://127.0.0.1:80/status?auto | grep "max children reached" | awk '{print $4}'
UserParameter=PHP.requests,wget --quiet -O - http://127.0.0.1:80/status?auto | grep "slow requests" | awk '{print $3}'
PHP.status --- PHP 服务状态,返回0表示异常,1表示正常
PHP.listenqueue --- 检测PHP队列数,返回整数
PHP.idle --- 检测PHP空闲进程数,返回整数
PHP.active --- 检测PHP活动进程数,返回整数
PHP.conn --- 检测PHP请求数,返回整数
PHP.reached --- 检测PHP达到限制次数,返回整数
PHP.requests --- 检测PHP慢请求数,返回整数
Redis相关的自定义项
vim /usr/local/zabbix/etc/zabbix_agentd.conf.d/redis.conf
UserParameter=Redis.Status,/usr/local/redis/bin/redis-cli -h 127.0.0.1 -p 6379 ping |grep -c PONG
UserParameter=Redis_conn[*],/usr/local/redis/bin/redis-cli -h $1 -p $2 info | grep -w "connected_clients" | awk -F':' '{print $2}'
UserParameter=Redis_rss_mem[*],/usr/local/redis/bin/redis-cli -h $1 -p $2 info | grep -w "used_memory_rss" | awk -F':' '{print $2}'
UserParameter=Redis_lua_mem[*],/usr/local/redis/bin/redis-cli -h $1 -p $2 info | grep -w "used_memory_lua" | awk -F':' '{print $2}'
UserParameter=Redis_cpu_sys[*],/usr/local/redis/bin/redis-cli -h $1 -p $2 info | grep -w "used_cpu_sys" | awk -F':' '{print $2}'
UserParameter=Redis_cpu_user[*],/usr/local/redis/bin/redis-cli -h $1 -p $2 info | grep -w "used_cpu_user" | awk -F':' '{print $2}'
UserParameter=Redis_cpu_sys_cline[*],/usr/local/redis/bin/redis-cli -h $1 -p $2 info | grep -w "used_cpu_sys_children" | awk -F':' '{print $2}'
UserParameter=Redis_cpu_user_cline[*],/usr/local/redis/bin/redis-cli -h $1 -p $2 info | grep -w "used_cpu_user_children" | awk -F':' '{print $2}'
UserParameter=Redis_keys_num[*],/usr/local/redis/bin/redis-cli -h $1 -p $2 info | grep -w "$1" | grep -w "keys" | grep db$3 | awk -F'=' '{print $2}' | awk -F',' '{print $1}'
UserParameter=Redis_loading[*],/usr/local/redis/bin/redis-cli -h $1 -p $2 info | grep loading | awk -F':' '{print $2}'
Redis.Status --- 检测Redis运行状态,返回整数
Redis_conn --- 检测Redis成功连接数,返回整数
Redis_rss_mem --- 检测Redis系统分配内存,返回整数
Redis_lua_mem --- 检测Redis引擎消耗内存,返回整数
Redis_cpu_sys --- 检测Redis主程序核心CPU消耗率,返回整数
Redis_cpu_user --- 检测Redis主程序用户CPU消耗率,返回整数
Redis_cpu_sys_cline --- 检测Redis后台核心CPU消耗率,返回整数
Redis_cpu_user_cline --- 检测Redis后台用户CPU消耗率,返回整数
Redis_keys_num --- 检测库键值数,返回整数
Redis_loading --- 检测Redis持久化文件状态,返回整数
MySQL相关的自定义项
vim /usr/local/zabbix/etc/zabbix_agentd.conf.d/mysql.conf
UserParameter=mysql.status,[[ `service mysqld status` =~ 'running' ]] && echo 1 || echo 0
UserParameter=mysql.Slave_IO_Running,[[ `mysql -uroot -p'123456' -h127.0.0.1 3 -e 'show slave status\G;' | grep Slave_IO_Running` =~ 'Yes' ]] && echo 1 || echo 0
UserParameter=mysql.Slave_SQL_Running,[[ `mysql -uroot -p'123456' -h127.0.0.1 -e 'show slave status\G;' | grep Slave_SQL_Running` =~ 'Yes' ]] && echo 1 || echo 0
UserParameter=mysql.Threads_connected,mysqladmin -uroot -p'123456' -h127.0.0.1 status | awk -F' ' '{print $4}'
UserParameter=mysql.Questions,mysqladmin -uroot -p'123456' -h127.0.0.1 status | awk -F' ' '{print $6}'
UserParameter=mysql.Slow_queries,mysqladmin -uroot -p'123456' -h127.0.0.1 status | awk -F' ' '{print $9}'
UserParameter=mysql.Opens,mysqladmin -uroot -p'123456' -h127.0.0.1 status | awk -F' ' '{print $11}'
UserParameter=mysql.Flush_tables,mysqladmin -uroot -p'123456' -h127.0.0.1 status | awk -F' ' '{print $14}'
UserParameter=mysql.Open_tables,mysqladmin -uroot -p'123456' -h127.0.0.1 status | awk -F' ' '{print $17}'
UserParameter=mysql.Queries_per_second_avg,mysqladmin -uroot -p'123456' -h127.0.0.1 status | awk -F' ' '{print $22}'
mysql.status --- MySQL 服务状态,返回0表示异常,1表示正常
mysql.Slave_IO_Running --- Slave IO 状态,返回0表示异常,1表示正常
mysql.Slave_SQL_Running --- Slave SQL 状态,返回0表示异常,1表示正常
mysql.Threads_connected --- 指开启的会话数,返回整数
mysql.Questions --- 服务器启动以来客户的问题查询查询数目,返回整数
mysql.Slow_queries --- 按字面意思是慢查询的意思,返回整数
mysql.Opens --- 服务器已经打开的数据库表的数量,返回整数
mysql.Flush_tables --- 服务器已经执行的flush ...、refresh和reload命令的数量,返回整数
mysql.Open_tables --- 通过命令是用的数据库的表的数量,以服务器启动开始,返回整数
mysql.Queries_per_second_avg --- select语句平均查询时间,返回浮点数
欢迎提出需求
后续如果遇到新的监控项需求,这篇博客也会更新上去,假如你有什么想要监控的,但有不知道该怎么监控可以在下方的评论区留言我看到后将第一时间为你解答,就算我不会,也会有其他的小伙伴和你一起思考当然,如果你非常关注监控运维的话,可以收藏这篇博客
待续。。。