一个标准的监控系统所具备的基本功能:
1.数据的采集
2.为了展示其长期走势,将数据存储下来
3.万一某次采样的结果不在被认为是合理的范围内,然后就会做出告警操作,尽早的让相关人员得知到此消息
4.展示
监控的对象除了主机之外,还包括主机之间的流量
对主机而言所需监控指标:
系统指标:CPU,memery,IO(Disk,Network)
1.CPU:sys(消耗在系统空间的比例),usr(用户空间的比例),idle(空闲的比例),,,等
2.memery:total(总大小),userd(已用空间大小),free(空闲大小),cached(放在缓存的大小),buffer,shm(共享内存的大小),,,等
3.IO
以上只是系统指标
系统一旦起来,会运行很多进程,对进程而言,他有多少个,他的变化量,处于运行状态的,处于睡眠状态的,处于僵死状态的等,,,这些又是指标
业务指标:比如:对于nginx服务,假如说nginx也算是一个进程,他时而处于运行状态,时而处于睡眠状态,对于nginx本身来说,他每秒接受的请求数量,每秒处理的请求数量等,这些可以理解为业务指标。
数据采集 1.ssh接口(监控中最为简单的方式)我们要监控的某个特定主机的某一项指标,如果这项指标是核心而敏感的数据,普通用户是不具有权限的,要想获取到核心的数据,就要以管理员的身份来运行,可以用ssh账号远程连接认证来连接到监控的主机上,从而获取到核心的数据,来实现管理。
2.agent
在监控的目标主机上运行一个进程,这个进程可以与其控制端通过非系统的认证逻辑来进行认证,即便用户获得了认证的信息,也不能获得系统级权限。通过了认证后,控制端就会只会agent端做出一些操作,如果agent端以管理员身份来运行,就能在目标主机上获得设计者设计的权限。
3.英特尔智慧平台接口一些专业的服务器也可以不依赖于操作系统提供的系统级接口来监控,就算没装操作系统,也可以获取该主机的CPU,memery,IO用量,这种方式依赖硬件级的接口,英特尔智慧平台接口
4.jmx接口在jvm虚拟机上有一个jmx接口,通过这个接口来获取数据指标,来完成监控
对采集的数据进行存储
对于mysql
tps:每秒的事务数
qps:每秒的查询数
历史数据:每一次采样都保存下来的数据
趋势数据:按照固定的时间长度做聚合运算后仅保留有限数据项的数据
假如说,每5分钟收集一次数据,那么一小时就要采集12次,这12次采集的数据就是历史数据,将这12次采集的数据经过聚合运算得出聚合的结果,可能只有三四个数据项,最大,最小,平均值,这就是趋势数据。
所以为了展示数据的长期走势,多保留一些趋势数据,历史数据仅保留最近几个月的,但是这么一来,就会给数据库带来的更大的压力,因为既要存储趋势数据,又要存储历史数据,为了解决这个问题,早期使用关系型数据库作为存储系统,后来也有了一些其他的方案,例如:rrd(cacti),round-robin-database轮询数据库
数据存储就像围绕一个圆进行存储,当存满了之后,再有新的数据来存储,就会覆盖原来最早存储的数据。
告警获取用户可以及时得到信息的接口,然后向用户传递信息
如果一个监控系统监控到异常状态的信息,向用户发短信,就需要有一个前提,监控系统能够发短信,但是监控系统并不做这个工作,他只调用发短信这个服务,就需要写一个程序,来调短信服务的api接口,这个程序写好之后能够被监控系统所触发即可。
展示展示界面越绚丽,简单美观,让看的人少动脑,就越受欢迎。
常见的监控系统Nagios:"难够死",是一个非常好的告警系统,但是没有提供存储系统
Cacti:Cron+SNMP+Mysql,很好的展示系统,但是问题出现比较多
zabbix:整合了上面提到的四种功能的监控系统
1.支持多种接口完成数据采集:agent,SNMP,IPMI(英特尔智慧平台接口),jmx
2.数据存储:mysql,pgsql
3告警:email,script脚本(短信,微信)