监控项:CPU 的利用率、系统的负载、服务的运行、端口的连通、带宽流量、网站访问状态码等信息。而这一切都离不开监控系统。
在监控软件中,开源的解决方案有流量监控(MRTG、Cacti、SmokePing、Graphite 等)和性能告警(Nagios、Zabbix、Zenoss Core、Ganglia、OpenTSDB等)可供选择,并且每种软件都有自己的特点和功能,各自的侧重点和目标不完全相同,在设计理念和实现方法上也大同小异,但都具有共同特征,例如,采集数据、分析展示、告警以及简单的故障自动处理。最终都能达到对IT 系统服务可用性的一个完全展示。
在一个监控系统中,构成要素为监控服务器端程序、数据存储、被采集节点等相关模块,其告警分析和自动故障处理功能由服务器端执行。
在数据采集完成之后,需要对采集到的数据进行分析和处理,判断是否有异常,是否属于告警条件。告警条件如何设置呢?通常是根据实际的经验值、业务需求来设置告警阈值。达到告警条件时,则发送告警信息给管理人员,然而,对于有些故障,我们希望程序能自动处理,减少人工干预,让程序自动修复,只在出现严重故障、程序无法判断的时候,才告警通知管理人员处理。
一个监控系统往往需要集成资产管理,可以从逻辑上展示业务和功能的信息,通过对其进行数据分析,做到对投资与回报的一个反馈展示,为资产的合理规划与使用提供了依据。
从工作模式来看,监控系统的数据采集可以分为两种:主动监控和被动监控
常见的监控系统性能采集指标:
监控系统需要根据实际应用的需求,实时 /非实时地采集和展示数据。另外,包括历史趋势数据的展示和分析,以及容量报表、可用性报告的生成。
支持多种方式,如短信、邮件、IM 和其他接口
简而言之,监控数据的采集、存储、分析和故障报告是每个监控系统的基本功能,其他复杂的附加功能则是监控系统的增值业务。
Zabbix 是一个分布式监控系统,支持多种采集方式和采集客户端,有专用的Agent(代理),也可以支持SNMP、IPMI、JMX、Telnet、SSH 等多种协议,它将采集到的数据存放到数据库,然后对其进行分析整理,达到条件触发告警。其灵活的扩展性和丰富的功能是其他监控系统所不能比的。
zabbix是一个基于Web界面的,提供分布式系统监控以及网络监视功能的企业级的开源解决方案。
zabbix主要由2部分构成zabbix server和zabbix agent,可选组建zabbix proxy zabbix server可以通过SNMP,zabbix agent,fping端口监视等方法对远程服务器或网络状态完成监视,数据收集等功能。同时支持Linux以及Unix平台,Windows平台只能安装客户端。
①具备常见的商业监控软件所具备的功能:主机的性能监控、网络设备性能监控、数据库性能监控、FTP 等通用协议监控、多种告警方式、详细的报表图表绘制
②支持自动发现网络设备和服务器:可以通过配置自动发现服务器规则来实现
③支持自动发现(low discovery)key 实现动态监控项的批量监控:需写脚本
④支持分布式,能集中展示、管理分布式的监控点
⑤扩展性强,server 提供通用接口(api 功能),可以自己开发完善各类监控(根据相关接口编写程序实现)编写插件容易,可以自定义监控项,报警级别的设置。
⑥数据收集
可用和性能检测
支持snmp(包括trapping and polling),IPMI,JMX,SSH,TELNET
自定义的检测
自定义收集数据的频率
服务器/代理和客户端模式
灵活的触发器
可以定义非常灵活的问题阈值,称为触发器,从后端数据库的参考值
高可定制的报警
发送通知,可定制的报警升级,收件人,媒体类型
通知可以使用宏变量有用的变量
自动操作包括远程命令
实时的绘图功能
监控项实时的将数据绘制在图形上面
WEB 监控能力
ZABBIX 可以模拟鼠标点击了一个网站,并检查返回值和响应时间
优点:
1、开源,无软件成本投入
2、Server 对设备性能要求低
3、支持设备多,自带多种监控模板
4、支持分布式集中管理,有自动发现功能,可以实现自动化监控
5、开放式接口,扩展性强,插件编写容易
6、当监控的item 比较多服务器队列比较大时可以采用被动状态,
被监控客户端主动从
7、server 端去下载需要监控的item 然后取数据上传到server 端。这种方式对服务器的负载比较小。
8、Api 的支持,方便与其他系统结合
缺点:
需在被监控主机上安装agent,所有数据都存在数据库里,产生的数据据很大,瓶颈主要在数据库。
http://repo.zabbix.com/zabbix/
Zabbix 通过C/S 模式采集数据,通过B/S模式在web 端展示和配置。
被监控端:主机通过安装agent 方式采集数据,网络设备通过SNMP 方式采集数据
Server 端:通过收集SNMP 和agent 发送的数据,写入数据库(MySQL,ORACLE 等),再通过php+apache 在web 前端展示。
Server
:Zabbix Server 需运行在LAMP(Linux+Apache+Mysql+PHP)环境下(或者LNMP),对硬件要求低
Agent
:目前已有的agent 基本支持市面常见的OS,包含Linux、HPUX、Solaris、Sun、windows
SNMP(简单网络管理协议UDP161):支持各类常见的网络设备
硬件监控:Zabbix、IPMI、lnterface
系统监控:Zabbix、Agent、Interface
Java监控:Zabbix、JMX、lnterface
网络设备监控:Zabbix、SNMP、lnterface
应用服务监控:Zabbix、Agent、UserParameter
MySQL数据库监控:percona-monitoring-plulgins
URL监控:Zabbix Web监控
1 、主机(host):要监控的网络设备,可由IP或DNS名称指定;或者说是要监控的设备就叫做主机
2、主机组(host group):主机的逻辑容器,可以包含主机和模板,但同一个组织内的主机和模板不能互相链接;主机组通常在给用户或用户组指派监控权限时使用;
3、监控项(item):一个特定监控指标的相关的数据;这些数据来自于被监控对象;item是zabbix进行数据收集的核心,相对某个监控对象,每个item都由"key"标识;
4、触发器(trigger):一个表达式,用于评估某监控对象的特定item内接收到的数据是否在合理范围内,也就是阈值;接收的数据量大于阈值时,触发器状态将从"OK"转变为"Problem",当数据再次恢复
到合理范围,又转变为"OK";
5、事件(event):触发一个值得关注的事情,比如触发器状态转变,新的agent或重新上线的agent的自动注册等;
6、动作(action):指对于特定事件事先定义的处理方法,如发送通知,何时执行操作;
7、报警升级(escalation):发送警报或者执行远程命令的自定义方案,如每隔5分钟发送一次警报,共发送5次等;
8、媒介(media):发送通知的手段或者通道,如Email、Jabber或者SMS等;
9、通知(notification):通过选定的媒介向用户发送的有关某事件的信息;
10、远程命令(remote command):预定义的命令,可在被监控主机处于某特定条件下时自动执行;
11、模板(template):用于快速定义被监控主机的预设条目集合,通常包含了item、trigger、graph、screen、application以及low-level discovery rule;模板可以直接链接至某个主机;
12、应用(application):一组item的集合;
13、web场景(web scennario):用于检测web站点可用性的一个或多个HTTP请求;
14、前端(frontend):Zabbix的web接口;
默认情况下 zabbix 包含 5 个程序: zabbix_agentd、 zabbix_get、 zabbix_proxy、zabbix_sender、zabbix_server,另外zabbix_java_gateway 是可选,需要另外安装。
zabbix_agentd
:客户端守护进程,收集客户端数据,例如 cpu 负载、内存、硬盘使用情况等
zabbix_get
:zabbix 工具,单独使用的命令,通常在 server 或者proxy 端执行, 用户获取被监控端数据, 通常用于排错。例如在 server 端获取不到客户端的内存数据,我们可以使用 zabbix_get 获取客户端的内容的方式来做故障排查。
zabbix_sender
:zabbix 工具,用于发送数据给 server 或者 proxy,通常用于耗时比较长的 check,并且与 trapper 配合使用。 生存环境中,个别非常耗时间 check 经常导致 zabbix 超时。于是我们在脚本执行完毕之后,使用 sender 主动提交数据。
zabbix_server
:zabbix 服务端守护进程。
zabbix_proxy
:zabbix 代理守护进程。功能类似 server,唯一不同的是它只是一个中转站,它需要把收集到的数据提交/被提交到 server 里。 一般跨机房、地区的环境需要用到 proxy。
zabbix_java_gateway
:zabbix2.0 之后引入的一个功能。顾名思义: Java 网关,类似 agentd,但是只用于 Java 方面。需要特别注意的是,它只能主动去获取数据,而不能被动获取数据。它的数据最终会给到 server 或者 proxy。
zabbix_agentd、 zabbix_get、 zabbix_sender、 zabbix_proxy、zabbix_java_gateway 的数据最终都是提交到 server
备注:当然不是数据都是主动提交给 zabbix_server,大多数情况下都是 server 主动去取数据。
Zabbix 服务器运行的环境为Linux(UNIX)+PHP+Web Service+DataBase,这里的Web Service 可以为
Nginx、Apache,DataBase 可以为MySQL、Oracle、PostgreSQL 等。本文基于zabbix 4.4.
关闭防火墙和selinux
systemctl stop firewalld
systemctl disable firewalld
vim /etc/selinux/config
SELINUX=disabled
setenforce 0
步骤:
1.准备LAMP环境:时间同步设置php时区以及初始化数据库
[root@zabbix-server ~]# yum install httpd mariadb mariadb-server php php-mysqlphp-gd -y
[root@zabbix-server ~]# vim /etc/httpd/conf.d/zabbix.conf
php_value date.timezone Asia/Shanghai
[root@zabbix-server ~]# systemctl start mariadb
[root@zabbix-server ~]#mysql_secure_installation
Enter current password for root (enter for none): 回车键
Set root password? [Y/n] y
设置密码(123456)
Remove anonymous users? [Y/n] y
Disallow root login remotely? [Y/n] y
Remove test database and access to it? [Y/n] y
Reload privilege tables now? [Y/n] y
2.配置zabbix yum源,安装zabbix server
[root@zabbix-server ~]# vim /etc/yum.repos.d/zabbix.repo
[zabbix]
name=aliyun - zabbix - $basearch
baseurl=https://mirrors.aliyun.com/zabbix/zabbix/4.4/rhel/7/$basearch/
enabled=1
gpgcheck=0
[root@zabbix-server ~]# yum install -y zabbix-server-mysql zabbix-web-mysql zabbix-agent -y
[root@zabbix-server ~]# rpm -qa | grep zabbix
zabbix-agent-4.4.10-1.el7.x86_64
zabbix-server-mysql-4.4.10-1.el7.x86_64
zabbix-web-4.4.10-1.el7.noarch
zabbix-get-4.4.10-1.el7.x86_64
zabbix-web-mysql-4.4.10-1.el7.noarch
3.创建zabbix数据库及用户,并且将zabbix数据导入数据库
创建zabbix数据库及用户
MariaDB [(none)]>create database zabbix character set utf8 collate utf8_bin;
Query OK, 1 row affected (0.000 sec)
MariaDB [(none)]> grant all privileges on zabbix.* to
-> zabbix@localhost identified by 'zabbix';
Query OK, 0 rows affected (0.704 sec)
MariaDB [(none)]> flush privileges;
Query OK, 0 rows affected (0.001 sec)
zabbix数据导入数据库
[root@zabbix-server ~]# cd /usr/share/doc/zabbix-server-mysql-*/
[root@zabbix-server zabbix-server-mysql-*]# zcat create.sql.gz | mysql -uzabbix -p zabbix
4.修改zabbix配置文件
[root@zabbix-server ~]# grep ^DB /etc/zabbix/zabbix_server.conf
DBName=zabbix
DBUser=zabbix
DBPassword=zabbix
5.启动服务
[root@zabbix-server ~]# systemctl restart zabbix-server.service httpd.service
[root@zabbix-server ~]# systemctl enable zabbix-server.service httpd.service
[root@zabbix-server ~]# netstat -lnupt | egrep '80|10051'
tcp 0 0 0.0.0.0:10051 0.0.0.0:* LISTEN 11013/zabbix_server
tcp6 0 0 :::80 :::* LISTEN 11011/httpd
tcp6 0 0 :::10051 :::* LISTEN 11013/zabbix_server
6.浏览器进入http://192.168.131.108/zabbix界面进行安装
登录zabbix:默认用户名:Admin,密码:zabbix
Administration->user->
解决中文乱码问题:
1)上传文件到 zabbix 的fonts中
找到本地 C:\Windows\Fonts\simkai.ttf(楷体)上传到服务器 zabbix 网站目录 fonts 目录下。
查找zabbix的fonts目录:
[root@zabbix-server ~]# find / -name *font*
/usr/share/zabbix/assets/fonts/
将windows的simkai.ttf上传到这个目录下:
[root@zabbix-server ~]# cd /usr/share/zabbix/assets/fonts/
[root@zabbix-server fonts]# #进行上传,并且将之前的字体删除
simkai.ttf
2)修改 zabbix php 配置文件
[root@zabbix-server ~]# sed -i 's/graphfont/simkai/g' /usr/share/zabbix/include/defines.inc.php
Zabbix的监控流程可以简单描述为:数据采集–>数据存储–>数据分析–>数据展示–>监控报警
数据采集:Zabbix通过SNMP、Agent、ICMP、SSH、IPMI等进行数据采集
数据存储:Zabbix存储在MySQL上,也可以存储在其他数据库
数据展示:web界面展示、(移动APP、java_php开发一个web界面也可以)
数据报警:邮件报警、微信报警、短信报警、报警升级机制
步骤:
1.Linux服务器安装agent代理程序
[root@linux-server1 ~]# vim /etc/yum.repos.d/zabbix.repo
[zabbix]
name=aliyun - zabbix - $basearch
baseurl=https://mirrors.aliyun.com/zabbix/zabbix/4.4/rhel/7/$basearch/
enabled=1
gpgcheck=0
[root@linux-server1 ~]# yum install -y zabbix-agent -y
2.修改zabbbix-agent配置文件:添加zabbix服务器地址
[root@linux-server1 ~]# vim /etc/zabbix/zabbix_agentd.conf
Server=192.168.95.100 #主动模式,配置的都是zabbix服务器地址
ServerActive=192.168.95.100 #被动模式
Hostname=linux-server1
zabbix-server和linux-server1都配置hosts解析:
[root@linux-server1 ~]# vim /etc/hosts
192.168.131.108 zabbix-server
192.168.131.107 linux-server1
3.启动zabbix-agent服务
[root@linux-server1 ~]# systemctl start zabbix-agent.service
[root@linux-server1 ~]# systemctl enable zabbix-agent.service
[root@linux-server1 ~]# netstat -lnupt | grep 10050
tcp 0 0 0.0.0.0:10050 0.0.0.0:* LISTEN 10747/zabbix_agentd
tcp6 0 0 :::10050 :::* LISTEN 10747/zabbix_agentd
4.在zabbix-server192.168.131.107上安装zabbix-get用于主动获取客户端数据
[root@zabbix-server ~]# yum install zabbix-get.x86_64 -y
5.测试Zabbix客户端与Zabbix服务端通信是否正常:
在zabbix-server192.168.131.107上进行测试:
[root@zabbix-server ~]# zabbix_get -s 192.168.131.108 -k system.uptime
44567
[root@zabbix-server ~]# zabbix_get -s 192.168.131.107 -k system.uname
Linux node1 3.10.0-1127.18.2.el7.x86_64 #1 SMP Sun Jul 26 15:27:06 UTC 2020 x86_64
[root@zabbix-server ~]# zabbix_get -s 192.168.131.107 -k system.hostname
linux-server1
6.在zabbix的web界面完成:添加主机、嵌套模板监控/手动为主机添加监控项item、为监控创建图形、为监控创建聚合图形screen
6.1添加主机:配置->主机->创建主机
6.2嵌套模板监控:
第一台主机以及模板添加完成之后,我们便可以查到最新的数据,例如 cpu、内存、硬盘等情况,查看最新监测数据
6.3手动为主机添加监控项item: key+参数组成
6.4为监控创建图形
可以预览图形:
6.5为监控创建聚合图形screen
然后点击构造函数:
然后点击更改:
点击cloud1设置进行配置:
进入route进行配置IP地址和配置snmp:
<Huawei>sys
Enter system view, return user view with Ctrl+Z.
[Huawei]interface Ethernet 0/0/0
[Huawei-Ethernet0/0/0]ip address 192.168.131.104 24
[Huawei]snmp-agent community read zabbix #设置zabbix团体名具有只读权限
[Huawei]snmp-agent sys-info version all #设置SNMP所有版本支持
[Huawei]snmp-agent target-host trap address udp-domain 192.168.131.108 udp-port 161 params securityname zabbix #设置zabbix-server地址
[Huawei]snmp-agent trap enable #开启设备trap告警开关
Warning: All switches of SNMP trap/notification will be open. Continue? [Y/N]:y
测试该设备的地址是否与zabbix-server是否相通:
[Huawei]ping 192.168.131.108
PING 192.168.131.108: 56 data bytes, press CTRL_C to break
Reply from 192.168.131.108: bytes=56 Sequence=1 ttl=64 time=30 ms
Reply from 192.168.131.108: bytes=56 Sequence=2 ttl=64 time=20 ms
Reply from 192.168.131.108: bytes=56 Sequence=3 ttl=64 time=1 ms
Reply from 192.168.131.108: bytes=56 Sequence=4 ttl=64 time=30 ms
Reply from 192.168.131.108: bytes=56 Sequence=5 ttl=64 time=1 ms
--- 192.168.131.108 ping statistics ---
5 packet(s) transmitted
5 packet(s) received
0.00% packet loss
round-trip min/avg/max = 1/16/30 ms
[root@zabbix-server ~]# ping 192.168.131.104
PING 192.168.131.104 (192.168.131.104) 56(84) bytes of data.
64 bytes from 192.168.131.104: icmp_seq=1 ttl=255 time=118 ms
64 bytes from 192.168.131.104: icmp_seq=2 ttl=255 time=22.2 ms
^C
--- 192.168.131.104 ping statistics ---
2 packets transmitted, 2 received, 0% packet loss, time 1001ms
rtt min/avg/max/mdev = 22.242/70.368/118.495/48.127 ms
在zabbix的web界面创建网络设备的主机和监控项等:
创建主机群组和主机以及模板:
添加自定义监控项小结:
1、添加用户自定义参数(在/etc/zabbix/zabbix.agent.d/定义了一个nginx.conf步骤如上)
2、重启zabbix-agent
3、在Server端使用zabbix_get测试获取
4、在web界面创建item(监控项),并且为之创建图形
步骤:
1.客户端安装nginx,并且编辑配置文件:状态模块配置
[root@linux-server1 ~]# yum install nginx -y
Nginx状态模块配置:
[root@node1 ~]# cat /etc/nginx/conf.d/default.conf
server {
listen 80;
server_name localhost;
location /status {
stub_status on;
access_log off;
allow 192.168.131.0/24;
deny all;
}
}
[root@node1 ~]# systemctl restart nginx
测试:使用zabbix来监控活动连接数,通过status状态模块为前提
[root@zabbix-server ~]# curl 192.168.131.107/status
Active connections: 1
server accepts handled requests
1 1 1
Reading: 0 Writing: 1 Waiting: 0
[root@zabbix-server ~]# curl -s 192.168.131.107/status | awk '/Active/ {print $3}'
1
2.Nginx客户端安装zabbix agent,并且编写用户自定义监控
[root@linux-server1 ~]# yum install -y zabbix-agent -y
[root@linux-server1 ~]# cd /etc/zabbix/zabbix_agentd.d/
方法一:
[root@linux-server1 zabbix_agentd.d]# vim nginx.conf
UserParameter=nginx.active,/usr/bin/curl -s http://192.168.131.107/status | awk '/Active/ {print $3}'
方法二:在自定义监控时使用脚本(我们这里使用方法二)
[root@linux-server1 ~]# vim /scripts/check_nginx.sh
HOST=192.168.131.107
RT="80"
# 检测 nginx 进程是否存
function ping {
/sbin/pidof nginx | wc -l
}
# 检测 nginx 性能
function active {
/usr/bin/curl -s http://$HOST/status | awk '/Active/ {print $3}'
}
function reading {
/usr/bin/curl -s http://$HOST/status | awk '/Reading/ {print $2}'
}
function writing {
/usr/bin/curl -s http://$HOST/status | awk '/Writing/ {print $4}'
}
function waiting {
/usr/bin/curl -s http://$HOST/status | awk '/Waiting/ {print $6}'
}
function accepts {
/usr/bin/curl -s http://$HOST/status | awk 'NR==3 {print $1}'
}
function handled {
/usr/bin/curl -s http://$HOST/status | awk 'NR==3 {print $2}'
}
function requests {
/usr/bin/curl -s http://$HOST/status | awk 'NR==3 {print $3}'
}
#调用函数
$1
[root@linux-server1 ~]# chmod +x /scripts/check_nginx.sh
[root@linux-server1 zabbix_agentd.d]# vim nginx.conf
UserParameter=nginx.status[*],/scripts/check_nginx.sh $1
重启zabbix-agent
[root@linux-server1 zabbix_agentd.d]# systemctl restart zabbix-agent.service
3.在Server端使用zabbix_get测试
[root@zabbix-server ~]# zabbix_get -s 192.168.131.107 -k nginx.active
1
[root@zabbix-server ~]# zabbix_get -s 192.168.131.107 -k nginx.status[ping]1
[root@zabbix-server ~]# zabbix_get -s 192.168.131.107 -k nginx.status[reading]
0
[root@zabbix-server ~]# zabbix_get -s 192.168.131.107 -k nginx.status[active]
1
4.1在web界面为主机创建nginx.active监控项:此时的web界面的键值为自定义在zabbix-agent子配置文件时配置的key名
监测->最新数据->linux-server1
4.2为主机导入模板,此模板对应的是自定义监控的脚本中的内容
配置->模板->导入模板
配置->主机->模板->进行选择模板
监测->最新数据->linux-server1
############【接下来我们了解自定义监控】############:
在客户端配置文件zabbix_angentd.conf里面配置UserParameter
/etc/zabbix/zabbix_agentd.conf,/etc/zabbix/zabbix_agentd.d/*.conf 【工作时最好写在这个子目录下】
语法:UserParameter=key,command
用户自定义参数包含一个key和一个命令(或者也可以是一个脚本),key必须整个系统唯一,配置好之后,重启客户端。然后创建item监控项,在key的位置填上我们自定义的key即可。
示例1:监控Linux服务器根分区磁盘使用百分比
[root@linux-server1 ~]#vim /etc/zabbix/zabbix_agentd.conf
UserParameter=Per_of_root,/bin/df -Th | awk '/\/$/ {print +$(NF-1)}'
UserParameter=mysql.ping[*],/mysqladmin -u$1 -p$2 ping | grep -c alive
[root@linux-server1 ~]# systemctl restart zabbix-agent.service
Zabbix服务器端测试:
[root@zabbix-server ~]# zabbix_get -s 192.168.131.107 -k Per_of_root
39
注意:和shell脚本不同的是,名称执行成功返回1,失败返回0
如下为灵活的用户自定义参数:UserParameter=key[*],command,大概意思就是命令中需要的值以key中的参数来传递,这样的话使得自定义参数更加灵活。
参数 | 描述 |
---|---|
Key | 唯一. [*]表示里面可以传递多个参数 |
Command | 需要执行的脚本, key 的[]里面的参数一一对应$1 到$9,一共 9 个参数。 $0 表示脚本命令. |
【注意事项】:
awk ’{ print $$2 }’
,之前就遇到过这个问题,不停的测试自己脚本输出正常,但是zabbix却拿不到数据,原来是出在这里。为了防止和参数冲突,所以zabbix做了这个规定。示例2:获取内存空间大小示例:
[root@linux-server1 ~]#vim /etc/zabbix/zabbix_agentd.conf
UserParameter=memory.usage[*],awk '/^$1:/ {print$$2}' /proc/meminfo
[root@linux-server1 ~]# systemctl restart zabbix-agent.service
Zabbix服务器端测试:
[root@zabbix-server ~]# zabbix_get -s 192.168.131.107 -k memory.usage[Cached]
890220
[root@zabbix-server ~]# zabbix_get -s 192.168.131.107 -k memory.usage[MemTotal]
1863012
php-fpm和nginx一样内建了一个状态页。
步骤:
1.linux客户端安装php-fpm,并且编辑nginx.conf添加ngx_status模块和php-fpm.d/用于启用php-fpm状态ngx_status功能
[root@linux-server1 ~]# vim /etc/nginx/nginx.conf
server {
server_name localhost;
root /usr/share/nginx/html;
index index.html index.htm index.php;
location ~ ^/(ngx_status|ping)$ {
include fastcgi_params;
fastcgi_pass 127.0.0.1:9000;
fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
allow 192.168.131.0/24;
deny all;
}
}
[root@linux-server1 ~]# vim /etc/php-fpm.d/www.conf
pm.status_path=/ngx_status
重启nginx/php-fpm:测试在zabbix-server是否访问到ngx_status
[root@linux-server1 ~]# systemctl restart nginx php-fpm
[root@zabbix-server ~]# curl -s 192.168.131.107/ngx_status?xml
<?xml version="1.0" ?>
<status>
<pool>www</pool>
<process-manager>dynamic</process-manager>
<start-time>1597466755</start-time>
<start-since>61</start-since>
<accepted-conn>2</accepted-conn>
<listen-queue>0</listen-queue>
<max-listen-queue>0</max-listen-queue>
<listen-queue-len>128</listen-queue-len>
<idle-processes>4</idle-processes>
<active-processes>1</active-processes>
<total-processes>5</total-processes>
<max-active-processes>1</max-active-processes>
<max-children-reached>0</max-children-reached>
<slow-requests>0</slow-requests>
</status>
2.linux客户端安装zabbix-agent,并且自定义php-fpm监控
[root@linux-server1 ~]# vim /etc/zabbix/zabbix_agentd.d/UserParameter.conf
UserParameter=php-fpm.status[*],/usr/bin/curl -s http://$1/ngx_status?xml |grep $2 | awk -F"[<>]" '{print $$3}'
3.重启zabbix-agent服务,在zabbix-server使用zabbix_get测试
[root@linux-server1 zabbix_agentd.d]# systemctl restart nginx
[root@zabbix-server ~]# zabbix_get -s 192.168.131.107 -k php-fpm.status[192.168.131.107,accepted-conn]
6
4.为linux-server1导入模板,观察最新数据
配置->模板->导入
配置->主机->模板->选择
监测->最新数据->linux-server1
php-fpm状态开启详解
Zabbix 默认提供了一个监控JMX,通过java gateway来监控java。
JAVA GATEWAY需要独立安装,相当于一个网关,因为zabbix_server和zabbix-agent不可以直接获取java信息。所以需要一个代理来获取。
准备环境:
• Zabbix Server 4.4 (ip: 192.168.131.108)
• 运行Java应用的主机 以下简称Server-A (已被Zabbix监控) (ip:192.168.131.107)
步骤:
1.Zabbix Server通过Zabbix Java gateway收集JMX监控数据,因此首先需要安装Zabbix-Java-gateway然后启动,同时修改zabbix server配置文件,重启。
[root@zabbix-server ~]# yum install zabbix-java-gateway -y
[root@zabbix-server ~]# systemctl enable --now zabbix-java-gateway
Created symlink from /etc/systemd/system/multi-user.target.wants/zabbix-java-gateway.service to /usr/lib/systemd/system/zabbix-java-gateway.service.
[root@zabbix-server ~]# netstat -lnupt | grep 1005
tcp 0 0 0.0.0.0:10051 0.0.0.0:* LISTEN 12496/zabbix_server
tcp6 0 0 :::10051 :::* LISTEN 12496/zabbix_server
tcp6 0 0 :::10052 :::* LISTEN 83677/java
[root@zabbix-server ~]# vim /etc/zabbix/zabbix_server.conf
JavaGateway=192.168.131.108
JavaGatewayPort=10052
StartJavaPollers=5 #根据客户端数来写
[root@zabbix-server ~]# systemctl restart zabbix-server
[root@zabbix-server ~]# ps -ef | grep java
zabbix 83677 1 4 11:40 ? 00:00:08 java -server -Dlogback.configurationFile=/etc/zabbix/zabbix_java_gateway_logback.xml -classpath lib:lib/android-json-4.3_r3.1.jar:lib/logback-classic-0.9.27.jar:lib/logback-core-0.9.27.jar:lib/slf4j-api-1.6.1.jar:bin/zabbix-java-gateway-4.4.10.jar -Dzabbix.pidFile=/var/run/zabbix/zabbix_java.pid -Dsun.rmi.transport.tcp.responseTimeout=3000 com.zabbix.gateway.JavaGateway
zabbix 83886 83875 0 11:43 ? 00:00:00 /usr/sbin/zabbix_server: java poller #1 [got 0 values in 0.000013 sec, idle 5 sec]
zabbix 83887 83875 0 11:43 ? 00:00:00 /usr/sbin/zabbix_server: java poller #2 [got 0 values in 0.000035 sec, idle 5 sec]
zabbix 83889 83875 0 11:43 ? 00:00:00 /usr/sbin/zabbix_server: java poller #3 [got 0 values in 0.000075 sec, idle 5 sec]
zabbix 83890 83875 0 11:43 ? 00:00:00 /usr/sbin/zabbix_server: java poller #4 [got 0 values in 0.000033 sec, idle 5 sec]
zabbix 83891 83875 1 11:43 ? 00:00:00 /usr/sbin/zabbix_server: java poller #5 [got 0 values in 0.000038 sec, idle 5 sec]
root 83956 81778 0 11:43 pts/0 00:00:00 grep --color=auto java
2.在Server-A安装jDk,tomcat;并且开启JMX远程监控,设置无密码认证然后重启tomcat
[root@Server-A ~]# yum install -y jdk-8u261-linux-x64.rpm
[root@Server-A ~]# java -version
java version "1.8.0_60"
Java(TM) SE Runtime Environment (build 1.8.0_60-b27)
Java HotSpot(TM) 64-Bit Server VM (build 25.60-b23, mixed mode)
[root@linux-server1 ~]# tar -zxf apache-tomcat-8.5.20.tar.gz -C /usr/local/
[root@linux-server1 ~]# cd /usr/local/apache-tomcat-8.5.20/
[root@linux-server1 apache-tomcat-8.5.20]# vim bin/catalina.sh
#监控的主机VA_OPTS="$JAVA_OPTS -Dcom.sun.management.jmxremote"
JAVA_OPTS="$JAVA_OPTS -Djava.rmi.server.hostname=192.168.131.107" #监控的主机
JAVA_OPTS="$JAVA_OPTS -Dcom.sun.management.jmxremote.port=12345" #监控的端口
JAVA_OPTS="$JAVA_OPTS -Dcom.sun.management.jmxremote.rmi.port=12345"
JAVA_OPTS="$JAVA_OPTS -Dcom.sun.management.jmxremote.authenticate=false" #关闭用户名密码认证
JAVA_OPTS="$JAVA_OPTS -Dcom.sun.management.jmxremote.ssl=false" 关闭ssl认证
[root@linux-server1 apache-tomcat-8.5.20]# ./bin/startup.sh
Using CATALINA_BASE: /usr/local/tomcat
Using CATALINA_HOME: /usr/local/tomcat
Using CATALINA_TMPDIR: /usr/local/tomcat/temp
Using JRE_HOME: /usr/java/jdk1.8.0_60
Using CLASSPATH: /usr/local/tomcat/bin/bootstrap.jar:/usr/local/tomcat/bin/tomcat-juli.jar
Tomcat started.
[root@linux-server1 apache-tomcat-8.5.20]# netstat -lnupt | egrep 12345
tcp6 0 0 :::12345 :::* LISTEN 111887/java
我们可以在 windows上面安装jdk ,使用jconsole.exe文件运行,进行jdk自带的JAVA监控和管理控制台。我的jconsole.exe存放在D:\jdk\bin下
双击jconsole.exe:
点击不安全的连接就可以看见相关信息:
3.在zabbix web界面配置JMX:创建主机使用模板监控,或者自定义监控项,再或者导入模板获得监控项
服务启动后,需要在zabbix界面为Server-A主机上增加JMX监控。
点击【配置】-【主机】-选择【Server-A】
实际上Zabbix 4.4自带了两个JMX模板Template App Apache Tomcat JMX和Template App Generic Java JMX模板一个可以监控Tomcat应用、一个可以监控普通Java应用。
本文采用自定义的方式创建JMX监控项:堆内内存监控项、JVM线程总数监控、Tomcat请求总数监控等
检测->最新数据->server-A:
创建聚合图形:
导入模板:
套用模板:
监测->最新数据:
监控Web 不依赖于agent,是server直接发送请求的
1.Zabbix监控web服务器访问性能
zabbix 对 web 性能的监控,通过它可以了解 web 站点的可用性以及性能。最终将各项指标绘制到图形中,这样我们可以了解到一个站点的下载速度、响应速度等。
需要注意的是在安装 zabbix server 需要增加 libcurl 的支持。
1)web 检测数据搜集说明:
web 整个检测中会收集如下数据:
整个 web 监控规则中的页面平均下载速度,秒为单位
检测阶段发生的错误次数
最后一个错误消息
web 检测的任何一个阶段都会收集如下数据:
每秒的下载速度
响应时间
响应代码(http code,如 200、 301 等)