无监控,不运维,监控是自动化运维的重要组成部分。下面是常用的监控对象以及监控指标:
硬件监控
电源状态、CPU状态、机器温度、风扇状态、物理磁盘、raid状态、内存状态、网卡状态
服务器基础监控
数据库监控
数据库连接数、QPS、TPS、并行处理的会话数、缓存命中率、主从延时、锁状态、慢查询
中间件监控
应用监控
目前主流的监控软件比如zabbix、Prometheus、Nagios等各有优劣。选择监控工具的原则是根据公司业务场景选择。
Zabbix是老牌监控软件的优秀代表,监控功能很全面,使用也很广泛。核心组件采用C语言开发,Web端采用PHP开发。
优势:
劣势:
Open-falcon 是小米2015年开源的企业级监控工具,采用Go和Python语言开发。小米初期也使用的Zabbix进行监控,但是机器量和业务量上来后,Zabbix就有些力不从心了。因此,后来自主研发了Open-Falcon,在架构设计上吸取了Zabbix的经验,同时很好地解决了Zabbix的诸多痛点。这是一款灵活、高性能且易扩展的新一代监控方案,目前小米、美团、滴滴等超过200家公司在使用它。
优势:
劣势:
Prometheus(普罗米修斯)是2015年正式发布的开源监控系统,采用Go语言开发。它有Google与k8s的强力支持,开源社区异常火爆。
Prometheus 的未来前景被相当看好,号称下一代监控,它和Open-Falcon最大不同在于:数据采集是基于Pull模式的,而不是Push模式,并且架构非常简单。
优势:
劣势:
面对监控系统的选型问题,需要先明确清楚监控需求:要监控的对象有哪些?机器数量和监控指标有多少?需要具备什么样的告警功能?
Zabbix是一个监控软件,其可以监控各种网络参数,支持灵活的告警机制,可以使得运维人员快速定位故障、解决问题。
Zabbix支持分布式功能,支持主动和被动两种数据收集模式,支持复杂架构下的监控解决方案,也支持web页面,为主机监控提供了良好直观的展现。
zabbix支持监控各种系统平台,包括Linux和Windows等主流操作系统,也可以借助SNMP或者是SSH协议监控路由交换设备。zabbix如果部署在服务器上,可以监控其CPU、内存、网络性能等硬件参数,也可以监控具体的服务或者应用程序、服务运行情况及性能。
硬件监控
Zabbix IPMI Interface ,通过IPMI接口进行监控,我们可以通过标准的IPMI硬件接口,监控被监控对象的物理特征,比如电压、温度、风扇状态、电源状态等。
系统监控
Zabbix Agent Interface ,通过专用的代理程序进行监控,与常见的master/agent模型类似,如果被监控对象支持对应的agent,推荐首选这种方式。
Java监控
Zabbix JMX Interface ,通过JMX进行监控,JMX(java management extensions,即java管理扩展),监控JVM虚拟机时,使用这种方法是非常不错的选择。
网络设备监控
Zabbix SNMP Interface ,通过SNMP协议与被监控对象进行通信,SNMP协议的全称为simple network management protocol,被译为简单网络管理协议,通常来说,我们无法在路由器、交换机这种硬件上安装agent,但是这些硬件都支持SNMP协议。
应用服务监控
Zabbix Agent UserParameter
MySQL数据库监控
percona-monitoring-plulgins
URL监控
Zabbix Web 监控
zabbix主要由以下5个组件构成:
Server
zabbix server是zabbix的核心组件,server内部存储了所有的配置信息、统计信息和操作信息。zabbix agent会向zabbix server报告可用性、完整性及其他统计信息。
web页面
web页面也是zabbix的一部分,通常和zabbix server位于一台物理设备上,但是在特殊情况下也可以分开配置。web页面主要提供了直观的监控信息,以方便运维人员监控管理。
数据库
zabbix数据库内存储了配置信息、统计信息等zabbix的相关内容。
proxy
zabbix proxy可以根据具体生产环境进行采用或者放弃。如果使用了zabbix proxy,则其会替代zabbix server采集数据信息,可以很好的分担zabbix server的负载。zabbix proxy通常运用与架构过大、zabbix server负载过重,或者是企业设备跨机房、跨网段、zabbix server无法与zabbix agent直接通信的场景。
Agent
zabbix agent通常部署在被监控目标上,用于主动监控本地资源和应用程序,并将监控的数据发送给zabbix server。
在实际的工作环境中,根据网络环境和监控的规模不同,zabbix一共有三种框架,分别是server_client架构、master_node_client架构和server_proxy_client架构。
server_client架构
zabbix最简单的架构,监控设备和被监控设备之间直接相连,zabbix_server 和 zabbix_client 之间直接进行数据交互。
zabbix_proxy_client架构
proxy是连接 server 和 client 之间的桥梁,其本身不存放数据,只是将zabbix_agent端发来的数据暂存,然后再提交给server。这种架构一般用于跨机房、跨网络的中型网络架构。
在server_proxy_client架构中,server设备的宕机会导致整个系统瘫痪而无法正常工作。
master_node_client架构
master_node_client架构是zabbix最复杂的架构。一般用于跨机房、跨网络、监控设备较多的大型网络架构。与server_proxy_client架构相比,master_node_client架构的主要区别在于node与proxy上.
在master_node_client架构中,每个node可以理解为一个小的server端,在自己的配置文件和数据库,node下游可以直接连接client,也可以再次经过proxy代理后连接client。
在master_node_client架构中,master设备宕机不会影响node节点的正常工作。
Zabbix在进行监控时,zabbix客户端要安装在被监控设备上,负责定期收集数据,并将其发送给zabbix服务端;Zabbix服务端要安装在监控设备上,其将zabbix客户端发送的数据存储的数据库中,zabbix web根据数据在前端进行展示和绘图。
在默认的情况下,zabbix有6个工作进程;分别是 zabbix_agentd,zabbix_get,zabbix_proxy,zabbix_sender,zabbix_server 和 zabbix_gateway。
其中,zabbix_java_gateway是可选进程。这6个进程的作用如下:
zabbix_agentd
zabbix-agentd为zabbix客户端守护进程 ,主要负责收集客户端监控项数据。
zabbix_server
zabbix_server为zabbix服务端守护进程,主要负责收集zabbix客户端数据。(端口为10051)
zabbix_proxy
zabbix_proxy是zabbix的代理程序,其功能类似于server,作用上类似于一个中转站,最终会把收集的数据再次提交给zabbix_server。
zabbix_get
zabbix_get作为zabbix工具,通常运行在zabbix_server或者zabbix_proxy上,用于远程获取客户端信息,通常用于排错。
zabbix_sender
zabbix_sender也是zabbix的一个工具,通常运行在zabbix的客户端,用于耗时比较长的检查,其作用是主动发送数据。
zabbix_java_gateway
zabbix_java_gateway是zabbix2.0以后引入的新功能,可以用于JAVA方面的设备;但是只能主动获取数据,而不能被动获取数据。
zabbix的学习需要掌握一些zabbix的常用术语,zabbix常用术语列举如下:
主机(host):要监控的设备,可以由IP或者是主机名(必须可解析)指定。
主机组(host group):主机的逻辑容器,包含主机和模板,主机组通常在给用户或者是用户组指派监控权限时使用。
监控项(item):一个特定监控指标的相关数据,比如内存的大小、CPU的使用率,甚至是服务的运行状态等等。监控项数据来源于被监控对象,并且每个监控项都由一个key来标识。
触发器(trigger):一个表达式,用于评估监控项的值是否在合理的范围内。当接收的值超出触发器的规定时,就被认为是故障,如果超出后再次符合,就被认为是正常。
事件(event):触发器触发的一个特定事件,或者是zabbix定义的一个自动上线注册主机的事件。
动作(action):指根据配置,zabbix对于触发器触发的特定事件进行处理的具体措施,如执行某个脚本,或者是向管理员邮箱发送邮件等等。
报警升级(escalation):发送警报或者是执行远程命令的自定义方案。
媒介(media):发送通知(告警)的手段,如微信、邮件、钉钉等等。
通知(notification):通过指定的媒介,向用户发送的有关事件的信息。
远程命令(remote command):指运维人员提前写好的命令,可以让被监控主机在触发事件后执行。
模板(template):用于快速定义被监控主机的预设条目集合,通常包括了监控项、触发器、应用等,模板可以直接链接至某个主机。
应用(application):一组监控项的集合。
web场景(web scennario):用于检测web站点可用性的一个或多个HTTP请求。
前端(frontend):zabbix的web接口。
这些术语,后文中直接使用而不过多赘述,在企业技术交流中也会经常使用。