Zabbix
zabbix是一种开源监控软件,能实现各种强大监控功能(数据采集,展示,报警)等功能。
监控的过程
数据采集—>数据存储—>数据显示
时间序列数据(趋式,陡式),采集点连成线会生成数据趋式图
报警:采集到的数据超出阈值(如系统应用指标,文件变化,应用状态)
Zabbix监控实现
zabbix可使用Zabbix-Agent,ICMP,SNMP,HTTP,JMX,IPMI来监控客户端
IPMI(interlligent platform management interface)智慧平台管理接口,原本是一种inter架构企业系统的周边设备采用的一种工业标准
IPMI也是一个开放免费标准,使用者无需支付额外费用就可以使用
通常一些服务器如DELL,IBM支持这种接口
Zabbix可监控对象
设备/软件:
设备:服务器,路由交换设备,IO设备
网络设备:snmp,ssh,ipmi
软件:操作系统,网络,应用
支持操作系统有:linux,windows,freebsd,aix,solaris,hp-unix
偶发现故障:
主机down机,服务不可用,主机不可达
严重事件:
数据节点宕机,磁盘满等
主机性能指标:
趋势数据(时间序列):
SNMP协议
架构:
C/S架构:被监控端(Agent),监控端(NMS),
udp协议:Agent:161端口,NMS:162端口
工作模式:
NMS向Agent采集数据
Agent向NMS报告数据
NMS请求Agent修改配置
组件:
MIB(管理信息库)management information base
OID(object id)
SMI(MIB表示符)
NMP协议
SNMP说明
NMS可发起对Agent操作有:GET,GETNEXT,SET,TRAP
SNMP中的MIB定义被管理对象的一系列信息,每个Agent都有本地MIB库
Agent操作:Response
SNMP仅仅实现数据采集功能
SNMP协议版本
snmp版本有v1,v2,v3
V1:无验证
V2C:社区,NMS->Agent 双方共享一个秘钥,认证过程明文
V3:实现认证加密和解密功能,但是用的少
Linux实现snmp是net-snmp程序包
Windows实现snmp是在控制面板中找到程序SNMP
开源监控工具对比
Cacti
php实现利用SNMP收集数据即使绘图展示,报警功能不够理想
cacti仅关注数据收集,数据展示,但是对报警功能较弱
cacti利用RRD库(round robin database)环状数据库,只能保存固定时长
Nagios
仅关注是否超出阈值,监控功能强大(短信,网关等),可以报警升级,也可以维护时间暂停报警,定义各组件依赖关系,不适合大规模监控
nagios只是关注超出阈值状态转换,完成报警
如果需要增加图标显示需要安装pnp4nagios插件,如果需要存数据库需要NDOUtils,如果需要分布式需要NSCA
icinga是Nagios变种
Zabbix
能够实现各种强大监控功能(数据采集,展示,报警等)
支持MySQL,PgSQL,Oracle,DB2,SQLite
其他监控软件
OpenNMS
ZenOS
GangLia 强大的集合绘图,将多个主机组成一个趋势图
Open-Falcon 小米开源监控系统
Zabbix监控功能
zabbix agent,snmp,ping,ssh,ipmi,web监控,数据库监控,内部监控,内部支持复杂计算,自定义命令监控
zabbix agent,snmp,ipmi可以监控CPU、内存、网络、磁盘、服务、日志、文件监控
web监控可以监控到 响应时间、下载速度、响应代码、获取特定要求内容、支持http/https
报警方式:email、sms、jabber、chat message、自定义命令
Zabbix组件
zabbix-server:(C)
zabbix-agent:(C)
zabbix-web:GUI接口设定展示zabbix(php)
zabbix-proxy:分布式监控环境中专用组件(大规模才能用到)
Zabbix安装
配置需求
版本 | 平台 | cpu/内存 | 数据库 | 监控主机 |
---|---|---|---|---|
Small | ubuntu linux | PII 350MHz 256M | SQLite | 20 |
Medium | ubuntu linux64 bit | AMD Athlon 3200+ 2G | MySQL InnoDB | 500 |
Large | ubuntu linux64 bit | Inter Dual Core6400 4G | RAID10 MySQL InnoDB or PostgreSQL | >1000 |
Very large | RedHat Enterprise | Inter Xeon 2*CPU 8G | Fatst RAID10 MySQL or PostgreSQL | >10000 |
zabbix数据
配置数据:很小
历史数据:50bytes/1m
历史趋势数据:128bytes/1m
事件数据:130bytes/1m
通常五分钟采集一次,一个监控项目就是320bytes,一小时3.8KB,一年就是34M,一台机器34M
zabbix数据计算公式
假设,如果一个主机60个监控项,1k个主机就是6万个监控项目。zabbix database需要用到的空间,60000/60 = 1000条,默认90天,趋势图默认一年
历史数据
历史数据 = 天数 x 每秒处理数据量 x 24 x 3600 x 50Bytes
每个历史数据50bytes
90x1000x24x3600x50 三个月产生360G数据
趋势数据
趋势数据 = 天数 x 监控项数 x 24 x 128bytes
每个趋势数据大概128bytes,按小时保存,假设保存一年
365x6000x24x128 一年大概62G数据
事件数据
事件数据 = 天数 x 86400 X 130bytes
每个事件数据大概130bytes,假设保存一年
365 x 86400 x 130bytes 一年大约3G数据
每分钟取一次数据,每秒请求数据大概千次,数据库写压力巨大(建议,监控5分钟取一次)
Zabbix安装
yum安装
1 | 需要实现安装mysql or PostreSQL |
源码安装
下载zabbix源码包
1 | 需事先安装好LAMP平台,编译zabbix同时安装server和agent,并支持将数据放入mysql数据库中 |
安装Server端,
1 | ./configure --enable-server --with-mysql --with-net-snmp --with-libcurl |
安装Agent端
1 | ./configure --enable-agent --with-ssh2 |
导入数据库
1 | #导入数据库顺序(schema.sql,images.sql,data.sql) |
Zabbix配置文件
Zabbix-Server端
1 | /etc/zabbix/zabbix_server.conf |
Zabbix-Agent端
1 | /etc/zabbix/zabbix_agent.conf |
Zabbix Server Process
1 | watchdog |
Zabbix配置详解
Zabbix术语
1 | 主机(host) 要监控的网络设备,由ip或dns名称指定 |
Item 监控项
一个特定监控指标的相关数据,这些数据来自于被监控对象,对于item是zabbix进行数据收集的核心,没有item将没有数据;相对某监控对象来说,每个item都是由”key”标识
监控项
是zabbix服务器用于监控一个特定对象上的一个特定指标,并负载针对其收集相关监控数据
如CPU每分钟平均负载可以是一个item,每五分钟平均负载是一个item
在比如特定网口接受报文速率也是一个item
每一个item都拥有相应的的类型”type”
例如”zabbix_agent”,“snmp”,“external check”,“IPMI Agent”,“SSH Agent”,“JMX Agent”
Zabbix服务器会自动使用相应类型的协议或机制同时被监控端通讯
监控项Key
zabbix服务器在与被监控端通讯时就使用相应的协议或机制去询问被监控端这个key值,被监控端则调用与此key对应的监控脚本获取数据并返回给服务端
key的命名只能使用”0-9a-zA-Z_-.”等字符,且可以接受参数,其命令习惯如system.cpu.load[<cpi>,<mode>]
,其中括号中的内容为参数,且分别可按次序使用$1,$2,进行引用,此实例中仅有两个参数
若要使用不定数目的参数,则使用”*”表示
zabbix有需要预先定义的key,获取详细地址
https://www.zabbix.com/documentation/2.0/manual/items/itemtypes/zabbx_agent
对于每一个Item,zabbix服务器还定义了这么存储这个item数据以及数据采集频率及历史数据的保存时长等,
多个item还可归类为一个由”Application”定义逻辑组
数据库查看zabbix自定义的Key
1 | USE zabbix; |
如何获取Key
1 | ZABBIX/bin/zabbix_get -s IP -p PORT -k "system.uname" |
创建Item过程
1 | configuration- - > hosts - - >(选择对应主机的items) - - >create item |
Item多类型
zabbix-agent:工作模式passive,active
网卡流量相关:
net.if.in[if,<mode>]
进入
net.if.out[if,<mode>]
流出
net.if.total[if,<mode>]
总流量if:接口 如eth0
mode: bytes,packets,erros,dropped
实例:create items
key:
net.if.in[eth0,bytes]
监控eth0网卡store value:delta(speed per second),计算上一次和这一次
端口相关
net.tcp.listen[port]
#监听的端口,布尔值float
net.tcp.port[<ip>,port]
net.tcp.service[service,<ip>,<port>]
net.upd.listen[port]
进程相关
kernel.maxfiles
最大文件数
kernel.maxproc
最大进程数
cpu相关
system.cpu.intr
中断次数
system.cpu.load[<cpu>,<mode>]
负载
system.cpu.num[<type>]
CPU颗数
system.cpu.switches
CPU上下文切换次数
system.cpu.util[<cpu>,<type>,<mode>]
CPU利用率
磁盘io或文件系统相关
vfs.dev.read[<device>,<type>,<mode>]
磁盘读
vfs.dev.write[<device>,<type>,<mode>]
磁盘写
vfs.fs.inode[fs,<mode>]
磁盘inode值
用户可定义item:
关键:选取一个唯一的key
命令:收集数据的命令或脚本
Trigger 触发器
监控项 仅负责收集收据,而通常收集数据的目的还包括在某指标对应的数据超出合理范围时给相关人员发送告警信息,该工作就是触发器来定义用于为监控项所收集的数据定义阈值,每一个触发器仅能关联至一个监控项,但可以为一个监控项同时使用多个触发器(一个trigger只能属于一个item,但一个item可以有多个trigger)
事实上为一个监控项定义多个具有不同阈值的触发器可以实现不同级别的报警功能
一个触发器由一个表达式构成,它定义了监控项所采取的数据的一个阈值
一旦某次采集的数据超出了此触发器定义的阈值,触发器状态会转换成”problem”;而采取的数据再次回归至合理规范内时,其状态将重新返回到”ok”
触发器表达式高度灵活,可以创建出非常复杂的测试条件
触发器格式
1 | {<server>:<key>.<function>(<parameter>)}<operator><constant> |
触发器依赖关系
在一个网络中,主机的可用性之间可能存在依赖关系
例如当某网关主机不可达时,其背后的所有主机都将无法正常访问
如果所有主机都配置触发器并设定了相关的通知功能,相关人员将会接受到许多告警信息,这既不利于快速定位,也会浪费资源
正确定义的触发器依赖关系可以避免类似情况发生,他将使用通知机制仅发送最根本的问题相关告警
目前zabbix不能直接定义主机间的依赖关系,其依赖关系仅能通过触发器来定义
触发器等级
SEVERITY | DEFINITION | COLOUR |
---|---|---|
Not Classified | 未知级别 | Grey |
Infromation | 一般信息 | Light Green |
Warning | 警告信息 | Yellow |
Average | 一般故障 | Orange |
Hight | 高级别故障 | Red |
Disaster | 致命故障 | Bright Red |
触发器状态
zabbix server每次接受到items的新数据时,对items当前采样值进行判断,即与trigger表达式进行比较
OK
PROPLEM
触发器创建过程
Configuration - - > Host - - > Triggers - - > Create trigger
Trigger名称使用宏
(HOST.HOST),{HOST.NAME},{HOST.IP},{HOST.CONN},{HOST.DNS}
触发条件一般为事件:
Trigger events: ok—>proplem
Discovery event: zabbix的network discovery工作时发现主机
Auto registration event:主动模式的agent注册时发生的时间
Internal event:item变成不在被支持,或者trigger变成未知状态
Operations的功能:
动作:
send message: 发送通知手段如下
EMAIL,SMS,Jabber,Scripts,EZ texting
Remote command:远程命令
配置send message
定义media
定义用户
配置要发送消息;action就已经定义好
配置Remote Command
前提:执行命令需要agent开启执行远程命令zabbix_agent.conf
EnableRemoteCommands=1
是否开启远程执行命令
LogRemoteCommands=1
是否将命令记录到日志中给zabbix定义sudo规则/etc/sudoers
zabbix ALL=(ALL) ALL
特别注意:Remote Command不支持active模式的agent ,不支持代理模式 ,命令长度不得超过255个字符 ,远程命令可以使用宏定义 ,zabbix server仅执行命令,不关心命令是否执行成功
注意:
如果用到以其他用户身份执行命令的话,那么命令本身要以sudo方式运行
sudo /etc/rc.d/init.d/httpd restart
注释agent上的sudoers文件,需要注释(sudo模式下需要一个真实的tty)
Default requiretty
报警升级可以使用setp定义几次处理可以邮件升级。
Template 模板
用于快速定义被监控主机的预设定条目集合,通常包含item,trigger,graph,screen,application以及low-level discovery rule(自动发现);模板可以直接链接到单个主机
模板是一系列配置的集合,它可以方便地快速部署在某监控对象上,并支持重复应用,此配置可通过”链接”方式应用于指定的主机
items trggers graphs applications screens(since zabbix 2.0) low-level discovery rules(since zabbix 2.0)
将模板应用至某主机上时,其定义的所有条目都会自动添加
模板的另一个好处在于,必要时,修改了模板,应用的主机都会相应作出修改
创建模板
configuration –> templates
在模板上按需添加item,trigger,screen,graph,application以及发现规则
模板可以嵌套
macros 宏
宏是一种抽象(abstraction),它根据一系列预定义的规则替换一定文本模式,而解释器或者编译器在遇到宏时会自动进行这一模式的替换类似,zabbix基于宏保存预设文本模式,并且调用时将其替换为其中文本.
zabbix有许多内置宏
如{HOST.NAME} {HOST.IP} {TRIGGER.DESCRIPTION} {TRIGGER.NAME} {TRIGGER.EVENTS.ACK}等 ,详细信息参考文档
https://www.zabbix.com/documentation/3.0/manual/appendix/macros
为了更强的灵活性,zabbix还支持在全局,模板或者主机级别使用用户自定义宏(user macro)
用户自定义宏使用”${MACRO}”这种特殊的语法格式
宏可以应用在Item keys和descriptions,trigger名称和表达式,主机接口ip/dns以端口,discovery机制的snmp协议的相关信息中等
宏名称只能使用大写字母、数字、下划线
参考https://www.zabbix.com/documentation/3.0/manual/appendix/macros/supported_by_location
宏替换次序
首先是主机级别的宏
其次是当前主机上的上一级模板中(直接连接至主机的模板)的宏,多个一级模板按其ID号排序
再接着就是二级模板中的宏,而后以此类推
最后检查的是全局宏
zabbix如果无法查找某主机定义的宏,则不会对其进行替换操作,要使用用户自定义宏,有一下两种途径
全局宏:”administratorion” –> general —> macros macro:{$NGINX_PORT} value:80
主机或模板级别的宏:编辑相应主机或模板的属性即可,(只针对当前主机.主机级别最高)
总结:
宏分为两类:
内建:{MACRO_NAME}
自建:${MACRO_NAME}
三个级别使用:
global全局
template模板
host主机
优先级:host —> template—>global
在某级别找到后直接使用不会往后查找
Web Scennario web场景
用于检测web站定可用性一个或多个http请求
zabbix还可对web站点可用性的可用性检测
创建web监控需要先定义一个web方案(scenarios)
web方案包含一个或多个http请求或”步骤)step” ,步骤(step)的执行过程按照预先定义的顺序进行执行
通过web监控可实现获取如下信息
整个web方案中所有的步骤平均下载速度
失败的步骤号
失败的报错信息
在web方案的具体步骤中,可按需进行如下信息
该步骤的下载速度
回应时间
回应状态吗
zabbix可以检测获取到html页面中是否包含预设的字符串,可以实现登陆和页面点击
创建web方案
创建web方案前提需要创建一个使用的应用(application)
可以在”hosts”或者”templates”上创建应用
如果在”templates”上创建应用,则需要将此”templates”连接至要监控其web的主机上方能使此”application”
步骤:
configuration–>web(zabbix2.4)
configuration–>templates(host)–>web(zabbix3.0)
例子:
1 | scenario |
Zabbix自动发现
zabbix提供网络发现(network discovery),低级发现(low level discovery)
Network Discovery网络发现
HTTP,ICMP,LDAP,SSH,TCP,SNMP,Telnet,Zabbix_agent 扫描指定网络内的主机
一旦主机被发现,如果对其进行操作,由action来决定
LLD:low level discovery 低级发现
自动添加或者移除主机,链接至模板或删除链接,添加监控项,将主机添加至分组,定义触发器
执行远程脚本
Network Discovery
网络发现是zabbix最具特色功能,他能够根据用户实现定义的规则自动添加监控的主机或服务
发现中的事件有如下两种:
服务:service discovered,service lost,service up,service down
主机:host discovered,host lost,host up,host down
zabbix的网络发现功能可基于如下信息进行
1 | IP rang |
网络发现通常包含:discovery和action
discovery中的事件:
service up service down
host up host down
service discovery service lost
host discovery host lost
action中网络发现中事件可以触发action,从而自动执行指定的操作
sending notifications
adding/remove hosts
enabling/disabling host
adding hosts to a group
remove hosts from a group
linking hosts to/unlinking from a template
executing remote scripts
这些事件的配置还可以基于设备类型,ip,状态、上线/离线等进行配置
接口添加
网络发现中添加主机时会自动创建interface
the service detected,如果基于snmp检测成功,会创建snmp接口
如果某服务同时响应给了agent和snmp则两种接口都会创建
如果同一种机制(如agent)返回非唯一数据,则第一个接口被识别为默认,其他的为额外接口
即便是某主机开始时只有agent接口,后来通过snmp发现他,同样会添加额外snmp接口
不同主机如果返回了相同数据,则第一个主机将被添加,余下的主机会被当作第一个主机额外的接口
Auto Registation
自动注册配置 需要修改agnet配置
1
2
3
4
5
6
7
8 ListenIP=192.168.0.100 #192.168.0.100是agent的地址,最好指定本地地址不要使用0.0.0.0
ListenPort=10050
Server=192.168.0.1
ServerActive=192.168.0.1 #192.168.0.1是zabbixserver的ip,重要
Hostname=iis
HostMetadata=ariis #用于唯一标识主机,只能用于自动注册,最多255个字符
#HostMetadateItem= #也可以使用item获取数据,通常使用systen.uname 发给服务端自动注册
配置自动注册
configuration—>actions–>Event source(Auto registration)–>create action
action:
name: auto_reg
new condition: host metadata like ariis #主机元数据
operations:
default subject 自动注册
default Message 主机名称{HOST.HOST} 主机地址:{HOST.IP} 主机端口:{HOST.PORT}
Operations: send message to user: 邮件通知用户
add to host groups 添加主机组
links to templates 连接模板
支持使用agent(active)类型的item key:
Low Level Discovery
LLD低级发现特定变量名称:区别不同主机应用使用items值不一样(如eth0跟em0)
1
2
3
4 > IFNAME
> #FSNAME #大多数针对网络接口,文件系统
> #自定义脚本实现相应功能
>
添加针对对应变量的items:
返回值是json格式,方便数据交换
查看zabbix agent内置的keys
1
2
3 > USE zabbix
> select key_ from items where key_ LIKE '%discovery%';
>
配置过程
configuration—>templates(host)—>discovery rules—>create discovery rule
1 | discovery rule |
filters
1 | Type of calculation |
item
1 | key:net.if.in[#IFNAME,bytes] |
Zabbix报警
定义发送机制(这里官方提示需要用tls/ssl认证发送,可以使用脚本发送邮件)
邮件方式:
administration—>media types
name:zabbix_mail
type:email
SMTP server:exmail.com.cn
SMTP helo:exmail.com.cn
SMTP email:zabbix@exmail.com.cn
enable:enable
脚本方式:
1 | tail -n10 /etc/mail.rc |
创建用户以及发送报警级别邮件
administration—>users—>users–>create user
user
alias:SA_OPS
Name:zhuxy
last name:zhuxuyue
groups:zabbix administrators
password:
….
media
type:zabbix_mail
send to:admin@exmail.com.cn
when active:1-7,00:00-24:00 7*24
use if severity: 定义报警级别(什么级别发给什么用户)
status:enabled
定义发送内容
configuration –> actions–>create action
Action
Name:cpu problems
defalt subject: {TRIGGER.STATUS}:{TRIGGER.NAME} #标题:trigger状态和trigger名称
default message: #正文
recovery message: #如果状态从proplem转换成ok发送信息
enable:enable
conditions 发送条件
type of calculation:[and|or|custom expression] 类型条件,如果下列conditions都满足就发送邮件(and),满足其中一个就发邮件(or),可以自定义表达式
conditions:
A Maintenace status not in maintenance 维护状态不在维护中,如果状态在维护中应该不能发报警
B Trigger value = PROBLEM
C Trigger = node1:cpu too many interrupta
operations
default operation setp duration 300 #每次报警时长(默认1小时),最小60s
action operations
operation details: setp from 1
to 2 #从第一步到第二步就是10分钟(1步5分钟)
setp duration 0
operation type send message|remote command #如果10分钟后要么发送报警,要么执行远程命令
send to user groups #发个组
send to user #发给用户
send only to :email #仅通过email发送信息(可以使用all就是所有报警机制都发送),如果问题严重建议使用短信,电话,微信发送信息
default message #默认信息
conditions: #条件
action:
触发条件一般为时间:
trigger events: ok –> proplem
discovery event:zabbix的network discovery工作时发现主机
autho registration event:主动模式的agent注册时产生的时间
internal events:items变成不在被支持,或者trigger变成未知状态
用户参数
zabbix 内置了许多item keys:
user parameters实现自定义item key,实现特有数据指标监控
syntax语法:
UserParameter=<key>,<command>
UserParameter=key[*].command
需要重启agent才可以生效
实例:
1 | UserParameter=Nginx.active[*],/usr/bin/curl -s "http://$1:$2/status" | awk '/^Active/ {print $NF}' |
实例:比如监控agent端的内存
1 | zabbix-agent端 |
Zabbix分布式监控
分布式监控概述
proxy and node
Zabbix三种架构
server-agent
server-node-agent
server-proxy-agent
Zabbix分布式监控概述
zabbix能高效的监控分布式it架构
在大型环境中zabbix提供两种解决方案
使用代理(proxy)
使用节点(node)
Proxy or Node
代理(proxy)用于本区域数据收集,并将数据发送给server
节点(node)提供完整的zabbix server用于建立分布式监控中的层级
Proxy | Node | |
---|---|---|
Lightweight轻量级 | YES | NO |
GUI图形接口 | NO | YES |
Works idependently独立工作 | YES | YES |
EASY maintenance 易维护 | YES | NO |
Automatic DB create 数据库自动创建 | YES | NO |
Local Administration 本地管理 | NO | YES |
Ready for embedded hardware 嵌入式监控 | YES | NO |
One way tcp connections 单向TCP连接 | YES | YES |
Centralised configuration 集中配置 | YES | NO |
Generates notifications 生成通知 | NO | YES |
Proxy:高性能,可以独立工作,易于维护,支持自动创建数据库,支持嵌入式监控,只支持一路TCP连接,支持集中配置。
不支持GUI接口,不支持本地管理,不支持通知
Server-Node-Client:特性
解决host过多时单台server面临性能瓶颈问题
使用多个instance
每个instance是独立的一套zabbix,有database和frontend(optional)
支持热插拔,Node和Server的连接可以随时断开,不影响node正常运行
node定时给server发送configuration,history,event
server定时给node发送configuration
所有配置变更只能node节点操作,不能在server操作 (http://www.zabbix.com/forum/showthread.php?t=20863)
支持树状结构,Node可以是个server
Server-Proxy-Client工作特性
proxy不会向server同步configuration,只接受
proxy的数据库定时回将数据传送给server,proxy本地数据库只保存最近有没有发送的数据
Proxy 对比 Node
Node本身是一台server,有完整的Web页面,完整的数据库,他将数据源源不断的传送给Master
proxy只有一个proxy的daemon进程,proxy也有自己的数据库,但他的数据库智慧保存一定时间的数据,他与master通信是将一批信息打包后发送给master,master将这些数据merge入master数据库
master-proxy相比master-node优点有如下几点:
proxy压力小,数据库只存一定时间数据
master压力变小,数据不是源源不断获取,减小io压力
架构清晰,便于维护
Zabbix-proxy安装
1 | #需要安装mysql |
Server端配置Proxy
administration–>proxies
proxy name:Zabbix-Proxy-NJYFXJ
proxy mode:active|passive (拉取|主动推送)
hosts proxy hosts
Create host
Monitored by proxy:Zabbix-Proxy-NJYFXJ
Zabbix常用模板
官方模板:
1 | zabbix常用模板 |