zabbix 监控实战

zabbix 监控实战


1 硬件监控

使用SNMP监控交换机

1.在交换机上开启snmp:

snmp-agent 
snmp-agent community read Test@123  #设置团体名为Test@123
snmp-agent sys-info version all 
snmp-agent target-host inform address udp-domain 192.168.20.200 udp-port 161 params securityname Test@123 v2c
#udp-domain 192.168.20.200   //zabbix服务器ip地址
#udp-port 161 //监听端口
snmp-agent trap enable   //开启snmp

2.在zabbix上添加监控:
创建switch主机添加switch分组,设置SNMP interfaces,添加Template SNMP Device模板,定义宏:{$SNMP_COMMUNITY} = Test@123
这里写图片描述

IPMI监控服务器硬件

建议使用自定义item,本地执行ipmitool命令来获取数据(Zabbix IPMI监控效率较低)
1.配置服务器的IPMI地址和用户密码
2.服务端使用ipmitool测试

yum install -y OpenIPMI ipmitool
ipmitool -H 192.168.20.80 -Uroot -L user sensor list

3.服务器端配置zabbix IPMI pollers

sed -i '/# StartIPMIPollers=0/aStartIPMIPollers=5' zabbix_server.conf
service zabbix-server restart

4.创建主机分组,添加IPMI interfaces,

2 系统监控

系统监控标准(CPU、内存、硬盘、网络、进程、TCP连接数)可以通过 基础模板Template OS Linux(完全足够) 来监控,根据自己的业务来调整合适的触发器以及图形等,即可。

CPU
关于CPU,有3个重要的概念:上下文切换(context switchs),运行队列(Run queue)和使用率(utilization)。这也是我们CPU监控的三个重点。通常情况下,每个处理器的运行队列要小于等于3,CPU 利用率中user/system比例维持在70/30,上下文切换要根据系统繁忙程度来综合考量。

监控工具:top vmstat mpstat sysstat。(top: P CPU使用率排序、M 内存使用率排序;mpstat 1 10:每秒执行一次,执行10次)

内存
Linux虚拟内存是一个庞大的东东,通常我们需要监控内存的使用率、SWAP使用率、同时可以通过内存的使用率曲线来发现某些服务的内存溢出等。
监控工具:free vmstat。

IO
IO分为磁盘IO和网络IO。除了在做性能调优我们要监控更详细的数据外,那么日常监控,只关注磁盘使用率、io wait即可,网络也是监控网卡流量即可。
监控工具:iostat iotop iftop

TCP监控
在很多情况下有必要监控TCP的状态,可以使用netstat或者ss来获取所有的TCP连接,来展现11种不同的TCP连接状态的数量,可以在大并发中及时发现TCP的相关故障。

其它
运行的进程数、登陆用户、文件加密等。

3 应用服务监控

规范:
在agent端创建存放自定义脚本的路径:

mkdir /etc/zabbix/scripts

明确 agent端Include的内容:

vim /etc/zabbix/zabbix_agentd.conf 
Include=/etc/zabbix/zabbix_agentd.d/*.conf

TCP监控

1.编写监控tcp连接数的shell脚本,并添加执行权限

# cat /etc/zabbix/scripts/tcp_status.sh 
#!/bin/bash
#
[ $# -ne 1 ] && echo "Usage:CLOSE-WAIT|CLOSED|CLOSING|ESTAB|FIN-WAIT-1|FIN-WAIT-2|LAST-ACK|LISTEN|SYN-RECV SYN-SENT|TIME-WAIT" && exit 1
tcp_status_fun(){
        TCP_STAT=$1
        #netstat -n | awk '/^tcp/ {++state[$NF]} END {for(key in state) print key,state[key]}' > /tmp/netstat.tmp
        ss -ant | awk 'NR>1 {++s[$1]} END {for(k in s) print k,s[k]}' > /tmp/ss.tmp
        TCP_STAT_VALUE=$(grep "$TCP_STAT" /tmp/ss.tmp | cut -d ' ' -f2)
        if [ -z $TCP_STAT_VALUE ];then
                TCP_STAT_VALUE=0
        fi
        echo $TCP_STAT_VALUE
}
tcp_status_fun $1

添加执行权限:
chmod +x tcp_status.sh

2.自定义tcp item:

# cat /etc/zabbix/zabbix_agentd.d/tcp.conf 
UserParameter=tcp_status[*],/bin/bash /etc/zabbix/scripts/tcp_status.sh "$1"

3.重启zabbix-agent,修改配置文件必须重启

systemctl restart  zabbix-agent

4.服务端使用Zabbix_get测试是否能正常获取值

zabbix_get -s 127.0.0.1 -k tcp_status[ESTAB]

5.web界面,导入tcp模板,创建主机并关联tcp模板
这里写图片描述
这里写图片描述

LISTEN:等待从任何远端TCP 和端口的连接请求。
SYN_SENT:发送完一个连接请求后等待一个匹配的连接请求。
SYN_RECEIVED:发送连接请求并且接收到匹配的连接请求以后等待连接请求确认。
ESTABLISHED:表示一个打开的连接,接收到的数据可以被投递给用户。连接的数据传输阶段的正常状态。
FIN_WAIT_1:等待远端TCP 的连接终止请求,或者等待之前发送的连接终止请求的确认。
FIN_WAIT_2:等待远端TCP 的连接终止请求。
CLOSE_WAIT:等待本地用户的连接终止请求。
CLOSING:等待远端TCP 的连接终止请求确认。

LAST_ACK:等待先前发送给远端TCP 的连接终止请求的确认(包括它字节的连接终止请求的确认)
TIME_WAIT:等待足够的时间过去以确保远端TCP 接收到它的连接终止请求的确认。
TIME_WAIT 两个存在的理由:
1.可靠的实现tcp全双工连接的终止;
2.允许老的重复分节在网络中消逝。
CLOSED:不在连接状态(这是为方便描述假想的状态,实际不存在)

nginx监控

1.nginx配置开启状态页
在nginx.conf的Server标签中添加如下内容:

location /nginx_status {
    stub_status on;
    access_log  off;
    allow 127.0.0.1;
    deny all;
}   
#如果编译安装需指定--with-http_stub_status_modul,
#可以/usr/local/nginx/sbin/nginx -V查看编译参数

2.本地访问nginx status测试

# curl http://127.0.0.1/nginx_status
Active connections: 1       
server accepts handled requests
 1 1 1 
Reading: 0 Writing: 1 Waiting: 0    

参数说明:

Active connections: 正处理的活动链接数1个
server accepts handled requests 启动到现在总共处理了1个连接 , 成功创建1次握手, 总共处理了1个请求
Reading: 读取客户端的连接数
Writing: 响应数据到客户端的数量
Waiting: 已经处理完正在等候下一次请求指令的驻留链接,开启Keep-alive的情况下,这个值等于active-(reading + writing)

3.编写nginx的shell脚本,并添加执行权限(如果端口不一致需要修改脚本端口)

# cat /etc/zabbix/scripts/nginx_status.sh 
#!/bin/bash
#Date Time:
#AUTHOR:
#Description:监控nginx性能及进程状态

NGINX_PORT=80
NGINX_HOST=127.0.0.1

#检测nginx进程是否存在
ping(){
        /usr/sbin/pidof nginx |wc -l
}

#检测nginx性能
active(){
        /usr/bin/curl "http://$NGINX_HOST:$NGINX_PORT/nginx_status/" 2>/dev/null| grep 'Active' | awk '{print $NF}'
}
reading(){
        /usr/bin/curl "http://$NGINX_HOST:$NGINX_PORT/nginx_status/" 2>/dev/null| grep 'Reading' | awk '{print $2}'
}
writing(){
        /usr/bin/curl "http://$NGINX_HOST:$NGINX_PORT/nginx_status/" 2>/dev/null| grep 'Writing' | awk '{print $4}'
}
waiting(){
        /usr/bin/curl "http://$NGINX_HOST:$NGINX_PORT/nginx_status/" 2>/dev/null| grep 'Waiting' | awk '{print $6}'
}
accepts(){
        /usr/bin/curl "http://$NGINX_HOST:$NGINX_PORT/nginx_status/" 2>/dev/null| awk NR==3 | awk '{print $1}'
}
handled(){
        /usr/bin/curl "http://$NGINX_HOST:$NGINX_PORT/nginx_status/" 2>/dev/null| awk NR==3 | awk '{print $2}'
}
requests(){
        /usr/bin/curl "http://$NGINX_HOST:$NGINX_PORT/nginx_status/" 2>/dev/null| awk NR==3 | awk '{print $3}'
}

#执行
$1

给脚本添加执行权限

chmod +x nginx_status.sh    

4.自定义nginx item

# cat /etc/zabbix/zabbix_agentd.d/nginx.conf 
UserParameter=nginx.status[*],/bin/bash /etc/zabbix/scripts/nginx_status.sh "$1"

5.重启zabbix-agent

systemctl restart  zabbix-agent

6.服务端测试,一定使用Zabbix_get来获取值

zabbix_get -s 192.168.20.201 -k nginx.status[writing]

7.web界面,导入nginx模板,创建主机并关联nginx模板
这里写图片描述
这里写图片描述

PHP-FPM监控

php-fpm和nginx一样内建了一个状态页
1.启用php-fpm状态功能

vim /usr/local/php-fastcgi/etc/php-fpm.conf   #我php-fpm存放路径
pm.status_path = /phpfpm_status

2.PHP-FPM工作模式通常与Nginx结合使用,修改nginx.conf的配置文件,通过Nginx访问PHP-FPM状态

location ~ ^/(phpfpm_status|ping)$ {
        include fastcgi_params;
        fastcgi_pass    127.0.0.1:9000;
        fastcgi_param SCRIPT_FILENAME $fastcgi_script_name;
}

3.访问测试phpfpm_status

# curl http://127.0.0.1/phpfpm_status
pool:                 www
process manager:      dynamic
start time:           01/Apr/2018:01:27:38 +0800
start since:          56
accepted conn:        2
listen queue:         0
max listen queue:     0
listen queue len:     128
idle processes:       4
active processes:     1
total processes:      5
max active processes: 1
max children reached: 0
slow requests:        0 

PHP-FPM状态说明:

pool                #fpm池名称,大多数为www
process manager     #进程管理方式dynamic或者static
start time          #启动日志,如果reload了fpm,时间会更新
start since         #运行时间
accepted conn       #当前池接受的请求数
listen queue        #请求等待队列,如果这个值不为0,那么需要增加FPM的进程数量
max listen queue    #请求等待队列最高的数量
listen queue len    #socket等待队列长度
idle processes      #空闲进程数量
active processes    #活跃进程数量
total processes     #总进程数量
max active processes #最大的活跃进程数量(FPM启动开始计算)
max children reached #程最大数量限制的次数,如果这个数量不为0,那说明你的最大进程数量过小,可以适当调整。
slow requests       #启用了php-fpm slow-log,缓慢请求的数量

php-fpm状态页比较个性化的一个地方是它可以带参数,可以带参数json、xml、html并且前面三个参数可以分别和full做一个组合。

# curl http://127.0.0.1/phpfpm_status?full
pool:                 www
process manager:      dynamic
start time:           01/Apr/2018:01:27:38 +0800
start since:          814786
accepted conn:        133645
listen queue:         0
max listen queue:     0
listen queue len:     128
idle processes:       5
active processes:     1
total processes:      6
max active processes: 2
max children reached: 0
slow requests:        0

************************
pid:                  22466
state:                Idle
start time:           01/Apr/2018:01:27:38 +0800
start since:          814786
requests:             22281
request duration:     182
request method:       GET
request URI:          /phpfpm_status
content length:       0
user:                 -
script:               -
last request cpu:     0.00
last request memory:  262144
************************
......

说明:

pid              #进程PID,可以单独kill这个进程. You can use this PID to kill a long running process.
state            #当前进程的状态 (Idle, Running, …)
start time       #进程启动的日期
start since      #当前进程运行时长
requests         #当前进程处理了多少个请求
request duration #请求时长(微妙)
request method   #请求方法 (GET, POST, …)
request URI      #请求URI
content length   #请求内容长度 (仅用于 POST)
user             #用户 (PHP_AUTH_USER) (or ‘-’ 如果没设置)
script           #PHP脚本 (or ‘-’ if not set)
last request cpu #最后一个请求CPU使用率。
last request memorythe   #上一个请求使用的内存        

php-fpm状态页非常使用,使用zabbix或者nagios监控可以考虑使用xml或者默认方式。用web的话,推荐使用html,表格会比较清晰。
4.不使用额外脚本,直接自定义key

# cat /etc/zabbix/zabbix_agentd.d/phpfpm.conf 
UserParameter=php-fpm.status[*],/usr/bin/curl -s "http://127.0.0.1/phpfpm_status?xml" | grep "<$1>" | awk -F '>|<' '{print $$3}' 

5.重启zabbix-agent

systemctl restart  zabbix-agent

6.服务端测试,一定使用Zabbix_get来获取值

zabbix_get -s 192.168.20.201 -k "php-fpm.status[active-processes]"  

7.导入模板
这里写图片描述
这里写图片描述

mysql监控

percona Monitoring Plugins是一个高质量的组件,为MySQL数据库添加企业级的监控和图表功能。其脚本使用PHP实现,故而Zabbix-Agent需要安装php环境。

1.php脚本用来数据采集
2.shell 调用这个php
3.zabbix配置文件
4.zabbix模板文件
创建zabbix监控专用用户。

1.安装percona Monitoring Plugins

yum install -y http://www.percona.com/downloads/percona-release/redhat/0.1-3/percona-release-0.1-3.noarch.rpm
yum install percona-zabbix-templates php php-mysql
#yum install -y https://www.percona.com/downloads/percona-monitoring-plugins/percona-monitoring-plugins-1.1.8/binary/redhat/7/x86_64/percona-zabbix-templates-1.1.8-1.noarch.rpm

目录结构

# tree /var/lib/zabbix/percona/
/var/lib/zabbix/percona/
├── scripts
│   ├── get_mysql_stats_wrapper.sh
│   └── ss_get_mysql_stats.php  
└── templates
    ├── userparameter_percona_mysql.conf
    └── zabbix_agent_template_percona_mysql_server_ht_2.0.9-sver1.1.8.xml

2.将key的的自配置文件复制至/etc/zabbix_agentd.conf.d目录下

cp /var/lib/zabbix/percona/templates/userparameter_percona_mysql.conf /etc/zabbix/zabbix_agentd.d/

3.修改脚本中的MySQL用户名和密码(可以单独建立一个用来做监控)

vim /var/lib/zabbix/percona/scripts/ss_get_mysql_stats.php
$mysql_user = 'zabbix';
$mysql_pass = '123456';

4.重启zabbix-agent

systemctl restart zabbix-agent

5.使用Zabbix_get来测试获取值

zabbix_get -s 127.0.0.1 -k MySQL.pool-read-requests

6.导入percona自带模板(直接导入会有问题)
这里写图片描述
这里写图片描述

tomcat监控

JMX:(使用Zabbix Java Gateway代理)
在Zabbix中,JMX监控数据的获取由专门的代理程序来实现,即Zabbix-Java-Gateway来负责数据的采集,Zabbix-Java-Gateway和JMX的Java程序之间通信获取数据。
对应关系:zabbix_server开启java poller,zabbix_java开启JavaGateway,端口为10052,tomcat JMX 开启12345提供性能数据。
数据获取:java poller <–> JavaGateway <–> Tomcat:12345

编译安装的zabbix server 需要加上–enable-java以支持jmx监控,如果之前zabbix server没加,需要重新编译安装。
* 编译参数* ./configure –prefix=/usr/bin/zabbix –enable-server –enable-agent –with-mysql –with-net-snmp –with-libcurl –with-libxml2 –enable-java

配置JMX监控的步骤:
1)安装Zabbix-Java-Gateway。

yum install -y zabbix-java-gateway

2)配置zabbix_java_gateway.conf参数。(默认即可)
启动zabbix-java-gateway服务:

systemctl start zabbix-java-gateway.service

3)配置zabbix-server.conf参数。

#vim /etc/zabbix/zabbix_server.conf
JavaGateway=127.0.0.1       #java gateway地址(如果和zabbix-server装一起可以写127.0.0.1)
JavaGatewayPort=10052
StartJavaPollers=5          #启动进程轮询java gateway

4)Tomcat应用开启JMX协议。
修改tomcat/bin/下的catalina.sh,添加如下内容:

vim /usr/local/tomcat/bin/catalina.sh  添加
CATALINA_OPTS="
-Dcom.sun.management.jmxremote      #启用远程监控JMX
-Dcom.sun.management.jmxremote.authenticate=false       #不开启用户密码认证
-Dcom.sun.management.jmxremote.ssl=false
-Dcom.sun.management.jmxremote.port=12345      #jmx远程端口,Zabbix添加时必须一致
-Djava.rmi.server.hostname=192.168.20.56"      #运行tomcat服务IP

重启服务:

systemctl restart zabbix-server

5)ZabbixWeb配置JMX监控的Java应用
这里写图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值