一个标准的监控系统所具备的基本功能
1、数据的采集
2、为了展示其长期走势,将数据存储下来。
3、万一某次采样的结果不在认为合理的范围内,然后就会做出告警操作,尽早的让相关人员得知到此消息。
4、展示
对主机而言所需监控批标:
1、系统指标
(1)CPU
sys(消耗在系统空间的比例)、usr(用户空间的比例)、idle(空闲的比例)等
(2)memory
total(总大小)、used(已用空间大小)、free(空闲大小)、cached(放在缓存的大小)、buffer, shm(共享内存的大小)等
(3)IO
disk、network
2、业务指标
比如: 对于nginx服务,假如说nginx也算一个进程,他时而处于运行状态,时而处于睡眠状态,对于nginx本身来说,他每秒接受的请求数量,每秒处理的请求数量等,这些可以理解为业务指标。
数据采集
1、ssh接口
我们要监控的某个特定主机的某一项指标,如果这项指标是核心而且敏感的数据,普通用户是不具有权限的,要想获取到核心的数据,就要以管理员的身份来运行,可以用ssh账号连接认证来连接到监控的主机上,从而获取到核心的数据,来实现管理。
2、agent
在监控的目标主机上运行一个进程,这个进程可以与其控制端通过非系统的认证逻辑来进行认证,通过认证后,控制端就会向agent端做出一些操作,如查agent端以管理员来运行,就能在目标主机上获得管理员的权限 。
3、英特尔智慧平台接口
一些专业的服务器也可以不依赖于操作系统提供的系统级接口来监控,就算没装操作系统,也可以获取该主机的CPU、memory、IO用量,这种方式依赖硬件的接口,英特尔智慧平台接口。
4、jmx接口
在jvm虚拟机上有一个jmx接口,通过这个接口来获取数据指标,来完成监控。
对采集的数据进行存储
对于mysql
tps:每秒的事务数
qps:每秒的查询数
假如说,每5分钟收集一次数据,那么一小时就要采集12次,这12次采集的数据就是历史数据,将这12次采集的数据经过聚合运算得出聚合的结果,可能只有三四个数据项,最大、最小、平均值,这就是趋势数据。
所以为了展示数据的长期走势,多保留一些趋势数据,历史数据仅保存最近几个月的,但是这么一来,就会给数据库带来更大的压力,因为既要存趋势数据,又要存历史数据。
告警
如果一个监控系统监控到异常状态的信息,向用户发短信,就需要有一个前提,监控系统能够发短信,但是监控系统并不做这个工作,它只调用短信这个服务,就需要写一个程序,来调短信服务的api接口,这个程序写好之后就能够被监控系统所触发。
常见的监控系统
nagios: "难够死",是一个非常好的告警系统,但是没有提供存储系统。
Cacti: Cron+snmap+mysql,很好的展示系统,但是问题出现比较多
zabbix
1、支持多种接口的数据采集
agent ,snmp , ipmi , jmx
2、数据存储
mysql ,pgsql
3、告警: email script 脚本(短信、微信)
(1)可以告警升级,刚开始出现故障时,发短信给运维工程师,隔两个小时后没有解决问题,就发给他的领导,再隔两小时没解决,发给领导的领导。。。
(2)可以发远程命令,刚开始出现故障时,尤其服务故障,先不要立即发告警,在每个周期内,试图去解决问题,远程指挥目标主机重启一个服务,如果问题解决,就不用发告警,如果没有解决,就开始发告警。
4、展示:简单图、图形,screen, slide, show , map...
第三方的展示接口: grafana
zabbix常用的术语
host:要监控的网络设备,可由IP或DNS名称指定。
host group:主机的逻辑容器,主机组通常在给用户或用户组指定监控权限时使用。
item:一个特定的监控指标的相关的数据,每个item都由“key”进行标识。
trigger:一个表达式,用于评估某监控对象的某特定item内所接收到的数据是否在合理的范围内,即阈值。接收到的数据量大小阈值时,触发器状态由OK转为Problem,当数据量再次回归到合范围内,其状态将从Problem转换回OK。
event:即发生的一个值得关注的事情。
action:指对于特定事件事先定义的处理方法。
escalation:发送告警或执行远程命令的自定义方案。
media:发送通知的手段或通道,如email , jbber或sms等。
notification:通过选定的媒价向用户发送的有关某事件的消息。
remote command : 预定义的命令,可在被监控主机处于某特定条件时自动执行。
template:用于快速定义被监控主机的预设条目集合,通常包括item, trigger, graph, screent
application以及low-level discovery rule:模板可以直接链接至单个主机
application:一组item的集合。
web scennario:用于检测web站点可用性的一个或多个HTTP请求。
frontend:web接口
参考文章:https://www.cnblogs.com/1477717815fuming/p/7953981.html