2 ZABBIX监控平台概述
2.1 重要组件
[图片上传失败...(image-831067-1551362576388)]
1)zabbix server:负责接收agent发送的报告信息的核心组件,所有配置、统计数据及操作数据都由它组织进行;
2)database storage:专用于存储所有配置信息,以及由zabbix收集的数据;
3)web interface:zabbix的GUI接口;
4)proxy:可选组件,常用于监控节点很多的分布式环境中,代理server收集部分数据转发到server,可以减轻server的压力;
5)agent:部署在被监控的主机上,负责收集主机本地数据如cpu、内存、数据库等数据发往server端或proxy端;
另外,zabbix server、proxy、agent都有自己的配置文件以及log文件,重要的参数需要在这里配置,后面会详细说明。
2.2 通信流程
一个监控系统运行的大概的流程是这样的:
agentd需要安装到被监控的主机上,它负责定期收集各项数据,并发送到zabbix server端,zabbix server将数据存储到数据库中,zabbix web根据数据在前端进行展现和绘图。这里agentd收集数据分为主动和被动两种模式:
主动:agent请求server获取主动的监控项列表,并主动将监控项内需要检测的数据提交给server/proxy
被动:server向agent请求获取监控项的数据,agent返回数据。
【主动监测】通信过程如下:
zabbix首先向ServerActive配置的IP请求获取active items,获取并提交active tiems数据值server或者proxy。很多人会提出疑问:zabbix多久获取一次active items?它会根据配置文件中的RefreshActiveChecks的频率进行,如果获取失败,那么将会在60秒之后重试。分两个部分:
Ø 获取ACTIVE ITEMS列表
² Agent打开TCP连接(主动检测变成Agent打开)
² Agent请求items检测列表
² Server返回items列表
² Agent 处理响应
² 关闭TCP连接
² Agent开始收集数据
Ø 主动检测提交数据过程如下:
² Agent建立TCP连接
² Agent提交items列表收集的数据
² Server处理数据,并返回响应状态
² 关闭TCP连接
【被动监测】通信过程如下:
² Server打开一个TCP连接
² Server发送请求agent.ping\n
² Agent接收到请求并且响应<HEADER><DATALEN>1
² Server处理接收到的数据1
² 关闭TCP连接
这里,有人可以看出来,被动模式每次都需要打开一个tcp连接,这样当监控项越来越多时,就会出现server端性能问题了。
那实际监控中是用主动的还是被动的呢?这里主要涉及两个地方:
1、新建监控项目时,选择的是zabbix代理还是zabbix端点代理程式(主动式),前者是被动模式,后者是主动模式。
2、agentd配置文件中StartAgents参数的设置,如果为0,表示禁止被动模式,否则开启。一般建议不要设置为0,因为监控项目很多时,可以部分使用主动,部分使用被动模式。
2.3 主要功能
1)Application monitoring 应用监控数据库/SSH/Apache/Nginx等应用程序的监控。
2)Server monitoring 服务器监控CPU,内存,SWAP,磁盘空间,网卡流量的监控等,可以通过浏览器实时查看Graphs。
3)Network monitoring 网络设备监控支持Cisco, Juniper, 3Com等网络设备,网络设备通过SNMP(SNMP (v1,v2,v3) devices)协议进行监控。
4)添加自定义监控,对于Zabbix无法满足的监控,可以添加自定义监控。
2.4 主要优势
1)安装配置简单,支持多种语言,包括中文。
2)系统自带多种监控模板,可以直接使用。
3)支持分布式部署和WEB集中管理(通过WEB页面设置或查看报警结果)。
4)自动发现主机和网络设备(discovery of file systems,network interfaces,hosts and netwrok devices)。
5)WEB监控:可以监控WEB下载速度,返回码及响应时间。
6)提供实时和历史的监控分析数据。
7)EMAIL报警,按照故障级别|服务器类型|业务类型发送EMAIL邮件到相关负责人。
2.5 主要劣势
1)需要在被监控机器上面安装agent。
2)All configuration information都存储在数据库里面,数据库是整个监控平台的瓶颈。
3 ZABBIX安装部署
- 在线yum安装
在线安装比较简单,直接用yum安装即可,这里不再赘述
- 源码安装
指导地址;
https://www.zabbix.com/documentation/3.4/zh/manual/installation/install
4 监控需求
4.1 主机监控
4.1.1 内存监控
内存监控可以直接内置的键值:
vm.memory.size[available]
触发器:
{vm.memory.size[available].**last(**0**)**}<200M
在触发器里面自定义需要警报的大小和级别
[图片上传失败...(image-220513-1551362576386)]
[图片上传失败...(image-6c62eb-1551362576386)]
4.1.2 磁盘监控
磁盘监控可以直接内置的键值(/app为需要监控的目录):
vfs.fs.inode[/app,pfree]
触发器(这里的数字为剩余百分比):
{vfs.fs.inode[/app,pfree].**last(**0**)**}<20
在触发器里面自定义需要警报的大小和级别
[图片上传失败...(image-cdad02-1551362576386)]
4.1.3 Cpu监控
CPU监控可以直接内置的键值:
system.cpu.load[percpu,avg1]
触发器(这里的数字为linux中的top/核数):
{system.cpu.load[percpu,avg1].**avg(**5m**)**}>5
在触发器里面自定义需要警报的大小和级别
[图片上传失败...(image-43c7e0-1551362576386)]
[图片上传失败...(image-e795b3-1551362576386)]
4.1.4 网络IO监控
网络监控可以直接内置的键值:
net.if.in[ens160] net.if.out[ens160]
[图片上传失败...(image-c6f36a-1551362576386)]
4.2 中间件监控
4.2.1 MQ监控
MQ主要监控有管理页面code,连接数,堆积消息数
- 管理页面code
键值:
active.status[xxx.xxx.xxx.xxx:8161]
触发器:
{active.status[xxx.xxx.xxx.xxx:8161].**last()**}<>200
监控脚本:
UserParameter=active.status[*],curl -I -m 10 -o /dev/null -s -w %{http_code} -uadmin:admin http://$1/admin/queues.jsp
[图片上传失败...(image-52bc1e-1551362576381)]
- 连接数
键值:
active.connections[xxx.xxx.xxx.xxx:8161]
触发器:
{active.connections[xxx.xxx.xxx.xxx:8161].last()}>10
监控脚本:
UserParameter=active.connections[*],curl -s -uadmin:admin http://$1/admin/connections.jsp | grep -c tcp://
[图片上传失败...(image-241bf6-1551362576381)]
- 堆积消息数
键值:
active.status[xxx.xxx.xxx.xxx:8161]
触发器:
{active.status[xxx.xxx.xxx.xxx:8161].**last()**}<>200
监控脚本:
UserParameter=active.queues[*],sh /etc/zabbix/zabbix_agentd.d/check.sh active_queues $1 $2
(上面所用的check.sh会在最后面附上)
4.2.2 ES监控
ES监控主要有9200页面code,连接数
- 页面code
键值:
es.status[xxx.xxx.xxx.xxx:9200]
触发器:
{ es.status[xxx.xxx.xxx.xxx:9200].**last()**}<>200
监控脚本:
UserParameter=es.status[*],curl -I -m 10 -o /dev/null -s -w %{http_code} [http://$1](http://$1)
[图片上传失败...(image-3b0c5-1551362576381)]
- 连接数
键值:
es.connections[xxx.xxx.xxx.xxx:9200]
触发器:
{ es.connections[xxx.xxx.xxx.xxx:9200].last()}>50
监控脚本:
UserParameter=es.connections[*],sh /etc/zabbix/zabbix_agentd.d/check.sh es_connection $1
(上面所用的check.sh会在最后面附上)
[图片上传失败...(image-38c167-1551362576381)]
4.2.3 Mysql监控
对于Mysql的监控有mysqladmin ping和连接数查询
- MysqlAdminPing
键值:
mysql.ping[xxx.xxx.xxx.xxx,xxx,xxxx]
触发器:
{ mysql.ping[xxx.xxx.xxx.xxx,xxx,xxx].last()}<>1
监控脚本:
UserParameter=mysql.ping[*],/app/mysql/mysqladmin -u$2 -h$1 -p$3 ping 2>/dev/null | grep -c alive
[图片上传失败...(image-bb5112-1551362576381)]
- 连接数
键值:
mysql.connections[xxx.xxx.xxx.xxx,xxx,xxx]
触发器:
{ mysql.connections[xxx.xxx.xxx.xxx,xxx,xxx].last()}>100
监控脚本:
UserParameter=mysql.connections[*],/app/mysql/mysqladmin -u$2 -h$1 -p$3 status 2>/dev/null |cut -d " " -f5
[图片上传失败...(image-114427-1551362576381)]
4.3 应用监控
4.3.1 应用端口方式监控
内置键值:
net.tcp.listen[8080]
触发器:
{ net.tcp.listen[8080].last()}=0
[图片上传失败...(image-f3ce83-1551362576385)]
4.3.2 应用进程名方式监控
内置键值:
proc.num[,mcbadm,all,hello-springboot]
(mcbadm是用户名, hello-springboot是应用名)
触发器:
{proc.num[,mcbadm,all,hello-springboot].last()}=0
[图片上传失败...(image-adf7ca-1551362576381)]
4.4 安全监控
4.4.1 账号
- 登录人数
键值:
login-user
触发器:
{login-user.last()}>3
监控脚本:
UserParameter=login-user,who|wc -l
[图片上传失败...(image-77756b-1551362576381)]
5 附件
- check.sh
#!/bin/bash
# -------------------------------------------------------------------------------
# FileName: check.sh
# Revision: 1.0
# 这个脚本是为了解决zabbix中例如awk里面参数冲突的问题
# -------------------------------------------------------------------------------
# 参数是否正确
#if [ $# -ne "1" ];then
# echo "arg error!"
#fi
# 获取数据
case $1 in
active_queues)
result=`curl -s -uadmin:admin http://$2/admin/queues.jsp | grep -A 5 "$3</a></td>"|awk -F '<' '{print $2}'|sed 's/td>//g'|head -2|tail -1`
echo $result
;;
es_connection)
result=`curl -s http://$2/_nodes/stats | awk -F 'current_open' '{print $2}' | cut -d "," -f 1 | cut -d ":" -f 2`
echo $result
;;
*)
echo "Usage:$0(active_queues|es_connection)"
;;
esac
网友评论