有句话叫“无监控不运维”,我们在生产中,产品上线需要事先做测试,我们怎么才能知道它的性能参数是否符合我们的要求,是否满足正常上线的需求,就要通过监控,监控重要指标是否满足要求,监控是否哪有异常,等等;
现在很多监控系统,其中用处最广的就数Zabbix!!
nagios:告警系统,默认不提供存储系统,不能实现长期趋势显示;
Cacti:只是展示界面,周期性对SNMP接口采集数据,然后数据放在mysql中,展示出来;(Cron+SNMP+MySql)
Zabbix简介:
Zabbix
是一个基于WEB界面的提供分布式系统监视
以及网络监视功能的企业级的开源解决方案。
监视各种参数,保证服务器系统
的安全运营;并提供灵活的通知机制以让系统管理员
快速定位/解决存在的各种问题;可以实现跨机房的分布式应用监控;
系统监视:
包括监视事件和监视性能,
前者检测IIS不正常运行的原因,后者用于建立用户系统性能的基准。
监控流程大致分:数据采集、数据存储、告警和展示;
数据采集通道:
1、
SNMP:Simple Network Management Protocol:简单网络管理协议:具有
数据采集功能和一部分监控功能;大部分的网络功能设备都可以,默认内嵌有snmp接口;
2、 IPMI :硬件平台须有这类接口才能实现;
3、agent: 默认使用的;
4、JMX:Java Management eXtensions:
JVM內建的
管理扩展接口:
获取
Jvm
内部关键数据指标;
采集到的数据的类型:
数值:
整数
浮点数
字符串:
字符串
文本
agent端采集数据是通过item监控项实现的;item有两个重要参数:Key和Type
Type:使用哪类接口与其相关的Type才有效;一般用的是是agent interface,主要用主动(Zabbix agent(active))和被动(Zabbix agent)两项;
Key:可以使内建命令,或者远程命令(自定义的);可以带参数;每一个Key在命令行对应一个命令,可以获取到相关数据;
主动监控:由agent端主动向server端发送采集的数据;
被动监控:由server端向agent端要采集数据;
存储的值:
As is:不对数据做任何处理
Delta:(simple change),本次采样减去前一次采样的值的结果
Delta:(change per second),本次采样减去前一次采样的值,再除以经过的时长;
触发器trigger:界定某特定的item采集到的数据的非合理区间或非合理状态:是逻辑表达式;
可取最近十次的平均值;
触发器存在可调用的函数:
nodata()
,
last()
,
date()
,
time()
,
now()
,
dayofmonth()
,
...
eg
:last
(
0
)
==last
(
#1
)
-----
》使用最后一次采集到的数据
Severity
严重级别
Not classified
未分级
Information
一般级别
Warning
警报
Average
橙色警报
High
红色警报
Disaster
灾难级的警报
触发器表达式:{hostname:key[paramters].function(arguments)}
即:{主机名:key[参数].相关函数(参数)}算术表达式 阈值
如下图所示:收集数据信息方式:
1、
server端可以通过zabbix_get去agent端要数据;
2、
由agent端通过zabbix_sender向server发送数据;
3、由proxy代理接收agent采集的数据,然后再交于server统一存储;
用proxy代理收集数据可以减轻server的负担,本来要与所有的agent通信采集数据,现在只需要与proxy一个通信就可以了;当然也可以将部分agent分给proxy,部分agent分给server直接通信;
在server端上的/etc/zabbix/zabbix_server.conf配置文件中主要定义跟数据库相关信息;日志文件:
/var/log/zabbix/zabbix_server.log;
在proxy端,配置文件:/etc/zabbix/zabbix_proxy.conf;日志文件:/var/log/zabbix/zabbix_proxy.log;
在agent端:配置文件:
/etc/zabbix/zabbix_agentd.conf;日志文件:
/var/log/zabbix/zabbix_agentd.log;
Zabbix程序组件:
zabbix_server:服务端守护进程;接收agent发送的报告信息,任务:配置、统计数据、操作数据;
Zabbix_database:专用于存储所有配置信息,以及由zabbix收集的数据;
Web Interface:zabbix的GUI接口,通常与server运行在同一台主机上;
zabbix_get:命令行工具,手动测试向agent发起数据采集请求;
zabbix_sender:命令行工具,运行于agent端,手动向server端发送数据;
zabbix_proxy:可选组件,常用于分布监控环境中,代理server收集部分被监控端的监控数据,并统一发给server;
zabbix_agent:agent守护进程;部署在被监控主机上(server上也要配置,被监控),负责收集本地数据并发给server或者proxy;
相关术语(又叫逻辑主件):
主机(host):被监控的物理设备实体;可由ip或者DNS名称指定;
主机组(host group):将一类主机组合,(还可以套模板----》即:使组内的主机都一样的模板(监控指标等一系列设定),方便管理);
监控项(item):每一个被监控主机上的可被采集的指标;对于监控对象,每个item都是由“key”标识的;
触发器(trigger):对采集的数据进行不合理空间评估,不满足OK,满足就报警;一个表达式
事件(event):每当触发器执行一次OK---Problem(|Problem---OK)就会产生事件,或者,新的agent或重新上线的agent的自动注册也会引起事件的发生;
四种事件源:trigger(触发), discovery(主机发现), auto registration(自动注册), internal(Zabbix自身发生的内部事件)
动作(action):事件的处理方法,通过包含操作(如发送通知)和条件(何时执行操作);
报警升级(escalation):执行的动作:发送警报或者执行远程命令的自定义方案;
媒介(media):发送通知的手段或通道;eg:Email,SMS(目前我们大陆用不了)
通知(notification):向特定用户发送其关注的事情
采集--》判断阈值范围,满足就OK,不满足就触发事件,事件发生的动作,
远程命令(remote command):预定义的命令,被监控主机处于某特定条件时自动执行;
模板(template):用于快速定义被监控主机的预设条目集合,通常包含:item、trigger、graph、screen、application和low-level discovery rule;模板可以直接链接到单个主机;
应用(application):同一类item的集合;
web场景(web scennario):
前端:zabbix的web接口
工作过程简述:
当zabbixserver定期的接收到agent发送来(sender)的采集数据后(或从agent端要(get)过来数据后),存到mysql,然后进行一些计算(最大值、最小值、平均值等);但在存储之前,要先判断一下是否满足触发器定义的表达式,即是否在合理取值范围内,合理---OK,不合理---Problem,一旦触发器有状态改变,就会触发一个事件发生,事件会伴随着定义的一个动作(eg:执行远程命令,或者报警);过一段时间,若想查看之前的数据变化,就可以打开展示接口查看;
即:
采集---》判断阈值范围---》若是有从OK变problem或者由problem变OK的状态转换----》触发事件的发生---》执行一些动作