本文共 3515 字,大约阅读时间需要 11 分钟。
监控系统:监控什么 为什么要监控 不应该允许没有被监控的系统上线了 对信息系统的监控分为多个层面 监控指标有哪些:硬件指标(状态是否ok,资源是否满足需要) 软件程序本身工作是否正常 业务指标,(每秒使用数量,查询数量)根据这些指标来判断是否有不正常的情况 sensor传感器:必须要对监控的指标做到精确采样 磁盘IO,内存状态都需要长期监控,这个指标每次采样只能获取当下的量,要想对比一周当中磁盘io,内存使用情况到底如何,对于这种应用来讲,需要把数据裁量以后,存储下来,所以对监控系统来讲 第一对传感器sensor做所谓的采样操作,还需要做存储,因此,一个完整的监控系统还要有存储能力(一类是历史数据,一类是趋势数据) 数据是要存储,存储下面的目的是,能够对比获取数据的走势,对于数据走势,尽可能以最直观的方式。对存储下来的数据,要提供一个较为直观的接口来展示,用户系统的展示系统 光展示还不够,当某个指标超出一定的值,就需要报警,以便采取相关处理方式
监控是贯穿整个运维从头至尾的工作 采样:就需要以周期性地一定频率获取某个关注的指标数据,关注两个问题,1用什么去采样,2.采样数据如何发送给存储系统以便于存储 ansible(ssh,也可以每台机器部署一个agent) 被监控对象:主机,交换机,路由,ups(主机以外的一般都是用smp来实现监控) 这里强调对主机的监控,ssh链接主机,通过这个通道,执行命令,对于返回结果获取某指标 也可以通过agent来监控 工作机制,监控机,网络管理系统NMS,IPMI智能平台管理接口(很多服务器硬件都是有这个接口的,直接在硬件层面去采样) (远程连接通道 agent,master一般称为NMS,master告诉agent获取某指标,agent获取指标后,返回给NMS) 很早以前就有监控系统的通用协议snmp简单网络管理协议,simple network management protocol,上世纪80年代就诞生了 一个非常有弹性的agent 无论linux还是windows,都能实现,交换机路由器设备一般都内建了snmp的监控端,只要交换机启用snmp功能,就能接收snmp接口 snmp需要在每个机器上启动一个程序,才能去监控,这个程序就叫snmp 这写程序监控的信息发送给NMS,网路管理系统 snmp是没把饭吧监控的数据存储下来,因为默认没有存储功能 就需要额外配置一个存储的数据 拿snmp来讲,是比较难完成监控任务的 cacti,只是封装了snmp协议的功能,能够自动地帮外面把某个你想定义的周期性监控数据功能给你定义成能够周期性完成的任务,并且采集到的数据,还要能存储在cacti指定的存储系统上,这个对cacti还要,还能随时存储在Icacti所指定的存储系统,通常用rrd round ready database的数据库 现在很多的监控系统都在应用层面上支持snmp,用来监控那些仅支持snmp的设备, 还有一种常用的监控通道 JMX(management extension) java管理扩展,要监控jvm(java virtual machine)虚拟机,就需要提高专门的数据采样接口,JMX 这就是监控系统的采集数据通道有哪些 接下来是该如何去存储数据,把数据存储下来,以便能展示一段时间内的数据 历史数据:每次采样的结果,保存半年,时长较短 趋势数据(一段时间之内的,最大值,最小值,平均值等聚合起来的数据)据合数据,保存时长较长周期内的数据, 存在文件里显然以后查找起来比较麻烦,建议使用存储系统,如关系型数据库mysql,pgsql,oracle rrd非关系型数据库 roundrobin database 轮询数据库(每三十秒采集一次,保存半年,都是有规律的,这是一个环状数据库,有固定的槽位,每一个槽位可以用来存储一次的采集结果,3个月到头了,重信覆盖掉,之前的三个月 zabbix就是用的mysql 还有一种是nosql,redis/mongodb 还有一种时间序列数据库,专门用来存放时间序列数据的 报警采取哪种措施,邮件,短信,微信 这种功能有一个最通行的方式就是脚本,有了提醒为什么还要监控工程师,有哪位有时候人工只能是十分可靠的 直接通过主机来进行展示 WebGui接口,GuI接口,现在每个人都有手机,因此也可以使用APP cacti通常只能采样,保存,不展示,不报警,nagios通常指的是,采样,报警,不存储,展示,因此通常把cacti和nagios结合起来一起使用 后来就用zabbix,脚本写的多强大,zabbix就有多强大 用zabbix的LTS版本 long time supports 长期维护的版本 可以支持监控模板的配置 还可以自动扫描一个网段,扫描之后,使用某些指标去判断主机的类型,比如linux主机就套用linux模版,windows就套用windows模版,如果出现故障,就报警,发现好了,就继续把他加进来 如果不在同一个机房,zabbix还支持分布式监控,把不同的主机分组,每组有个监控代理主机,每个主机在本地收集好数据以后打包,由zabbixserver统一收集到数据库,能够对应连接到获取的数据 所有的监控系统都大同小异 zabbixserver通过各种接口采集数据 web页面的响应时间 如果监控的数量过多,zabbix还可以委托给代理,这就是分布式监控的机制 更为细致的zabbix架构形式 **通常需要三种服务器角色 server 1 zabbix server (用来监控核心组件) server2zabbi web gui (监控)展示 server3 专门做存储 zabbix server是一个守护进程,需要对主机进行周期性的采样,采样取到后,保存到database中,采样之前可以管理自己测试一下zabbix get(手动发命令到监控端采集数据)支持不支持监控 ** zabbix采样的思路有两种,有zabbix服务器决定来决定每隔多少时间去被监控端拉取一次数据 被动监控 还有一种方式是被监控主机,周期性地向服务端直接报告,报告客户端某个数据,这种是被监控端主动去 主动监控 active 一般在规模较小的环境中被动监控比较用的多 但是当你的监控项达到上万个指标来讲,如果每次都要让zabbixserver自己去拉取的话,对于zabbixserver而言是 个考验 所以这个时候用主动模式反而好一点 无论是哪一种都是由agent和server中间通讯,所以agent也是一个守护进程 它们都需要有一个端口随时等待着通讯 都有配置文件和守护进程文件 逻辑组件 zabbix要监控哪一个主机时,就需要先把主机加进来,也可以分成一个组,交换机一个组,路由一个组 websrv一个组,dbsrv一个组,对每个监控指标都有一个监控项,多个相关的监控项可以放在一起,作为组 application,应用 这个应用仅仅是将多个应用放在一起 可以对一个监控或多个监控项,定义触发器,一旦满足条件会触发,一个事件,这个事件可以被关注的 人看到,触发器对每个监控指标来讲,一旦在某个时间超出了预定的值,就认为触发报警 触发器只是一个表达式,如果cpu利用率大于百分之90,就触发,一符合条件就超出这个区间了,会触发产生一个事件 触发器只是评估你的数据是否合理,如果不合理会立即产生一个事件event,这个事件可以由监控,关注这个事件的人或者组件来看到这个事件是否产生 监控这个事件的叫action,动作,触发器可以产生事件,事件可以被某个动作所关注,一旦产生事件,就能触发这个工作 动作有两类,可以先指定脚本然后再去发送报警,事实上,action对不同的事务还不一样,触发器能触发事件,zabbix支持网络发现,发现事件,比如某台主机上线了 定义的触发器有级别,事情的严重性也有级别 cpu有正在连接数,等待连接数,断开,就可以放在一起按时 监控项可以定义触发器是一个表达式 事件可以触发动作action 通知是你的信息本身 一旦触发事件,先执行远程命令 zabbix poller服务器端,用于实现轮循数据的 poller是用来存储轮循数据的 items有很多监控项 host属于主机组,triggers 触发器 actions 工作 maintenance 例行维护,就任何时候都不会报警 如果想快速监控主机,可以套模版template 当监控进程太多 ,poller的数量也必须增多转载地址:http://nbkgn.baihongyu.com/