第一章 监控家族
1.1 为什么选择监控?
因为在一个IT集群中或者是一个大环境中,包括各种硬件设备、软件设备等系统的构成也是极其复杂的。
多种应用构成负载的IT业务系统,保证这些资源的正常运转,是一个公司IT部门的职责。而要让这些应用能够稳定地运行,则需要专业IT人员进行设计、架构、维护和调优。在这个过程中,为了及时掌握基础环境和业务应用系统的可用性,需要获取各个组件的运行状态,如CPU的利用率、系统的复制、服务的运行、端口的连通、带宽流量、网站访问状态码等信息。而这一切都离不开监控系统。
1.2 监控系统的实现
一个监控系统的组成大体可以分为两部分:数据采集部分(客户端)和数据存储分析告警展示部分(服务器端),这两部分构成了监控系统的基本模型。
数据采集的工作模式可以分为被动模式(服务端到客户端采集数据)和主动模式(客户端主动上报数据到服务器端)。通常,大多数监控系统应该能同时支持这两种模式。被动模式对服务器的开销较大,适合小规模的监控环境:主动模式对服务器的开销较小,适合大规模的监控环境。
采集数据的协议方式可以分为两种:专用客户端采集和共用协议采集(SNMP、SSH、Telnet等)
对于采集到的监控数据,可以将其存储到数据库或者文本或者其他方式,具体采用哪一种,应根据实际需求来决定。
1.3 开源的监控系统软件
1. MRTG
MRTG(Multi RouteTrffic Grapher)是一套可用来绘制网络流量图的软件,由瑞士奥尔滕的Tobias Oetiker与Dave Rand所开发,以GPL授权。
MRTG最好的版本是1995年推出的,用perl语言携程,可跨平台使用,数据采集用SNMP协议,MRTG将手机到的数据通过Web页面以GIF或者PNG格式绘制出图像。
2. cacti
cacti(英文含义为仙人掌)是一套基于PHP、MySQL、SNMP和RRDtool开发的网络流量监测图形分析工具,它通过snmpget来获取数据使用RRDtool绘图,但使用者无须了解RRDtool复杂的参数。2提供了非常强大的数据和用户管理功能,可以指定每一个用户能查看树状结构、主机设备以及任何一张图,还可以与LDAP结合进行用户认证,同时也能自定义模板。在历史数据展示监控方面,其功能相当不错。
Cacti通过添加模板,使不同设备的监控添加具有可复用性,并且具备可自定义绘图的功能,具有强大的运算能力(数据的叠加功能)
3. SmokePing
Smokeping主要用于监视网络性能,包括常规的ping、www服务器性能、DNS查询性能、SSH性能等。底层也是用RRDtool做支持,特点是绘制图非常漂亮,玩过丢包和延迟用颜色和阴影来标示,支持将多张图叠放在一起,其做着还开发了MRTG和RRDtll等工具。Smokeping的站点为:http://tobi.oetiker.cn/hp
4. graphite
Graphite是一个用于采集网站实时信息并进行统计的开源项目。Graphite服务支持平均每分钟4800次更新操作,采用简单文本协议,具有绘图功能,其即插即用的功能可方便地用于任何需要监控的系统上。
和其他监控工具不同额是,Graphite本身并部手机具体的数据,这些数据收集的工作通常由第三方工具或插件完成,可以说,Graphite是一个绘图工具。
5. nagios
Nagios是一个企业级的个系统,可监控服务的运行状态和网络信息等,并能监视所指定的本地或远程主机参数以及服务,同时提供异常告警通知功能等。
Nagios可运行在Linux和UNIX平台上。同时提供一个可选的基于刘安琪的Web界面,以方便系统管理人员查看网络状态、各种系统问题、以及日志等
Nagios的功能侧重于监控服务的可用性,能急事根据触发条件告警。
目前Nagios也占领了一定的市场份额,不过Nagios并没有与时俱进,已经不能满足于多变的监控需求,架构的扩展性和使用的便捷性有待增强,其高级功能集成在上夜班Nagios XI中。
6. Zenoss Core
Zenoss Core(简称Zenoss)是开源企业级IT管理软件,它允许IT管理员依靠歹意的WEB控制台来监控网络架构的状态和健康度。
Zenoss Core的强大功能来自深入的列表与配置管理数据库,用于发现和管理公司IT环境的各类资产(包括服务器、网络和其他结构设备)。Zenoss可以创建关键资产清单和对应的组件级别(接口、服务、进程、已安装的软件等)建立好模型后,Zenoss就可以监控和报告IT架构中各种资源的状态和性能状况了。同时还提供与CMDB关联的事件和错误管理系统,以协助提高各类事件和提醒的管理效率,以此提高IT管理人员的效率。
7. ganglia
Grnglia是一个跨平台的、可扩展的、高性能的分布式监控系统,如集群和网格。它基于分层设计,使用广泛的技术,用RRDtool存储数据。具有可视化界面,适合对集群系统的自动化监控。其精心设计的数据结构和算法使得监控端到被监控端的连接开销非常低。目前已经有成千上万的集群正在使用这个监控系统,可以轻松的处 理2000个节点的集群环境。
8. openTSDB
开源监控系统OpenTSDB用Hbase存储所有时序(无须采样)的数据,来构建一个分布式、可伸缩的时间序列数据库。它支持秒级数据采集,支持永久存储,可以做容量规划,并很容易地接入到现有的告警系统里。
OpenTSDB可以从大规模的集群(包括集群中的网络设备、操作系统、应用程序)中获取相应的采集指标,并进行存储、索引和服务,从而使这些数据更容易让人理解,如Web化、图形化等。
9. zabbix
Zabbix是一个分布式监控系统,支持多种采集方式和采集客户端,有专用的Agent代理,也支持SNMP、IPMI、JMX、Telnet、SSH等多种协议,它将采集到的数据存放到数据库,然后对其进行分析整理,达到条件触发告警。其灵活的扩展性和丰富的功能是其他监控系统所不能比的。相对来说,它的总体功能做的非常优秀。
从以上各种监控系统的对比来看,Zabbix都是具有优势的,其丰富的功能、可扩展的能力、二次开发的能力和简单易用的特点,读者只要稍加学习,即可构建自己的监控系统。
第二章 自动化监控zabbix
2.1 zabbix简介
随着云计算、虚拟化的大规模应用,以及未来移动互联网、物联网等的兴起,Zabbix的使用将越来越广泛,应用场合也越来越多。目前,不少互联网公司、云计算公司、系统集成软件公司、外包服务公司等,都有对Zabbix进行二次开发和大规模使用。所以,可以断言,Zabbix在未来将会引领监控软件的潮流。
Zabbix适合中小型企业、大中型企业的用户使用。单个Server节点可以支持上万台设备,每秒可以处理1.5万次请求,理论上可以支持5万台设备。
Zabbix自身的定位是中型企业和大型企业,如果在特大型环境中使用,需要解决大并发、大压力的问题,这对使用者提出了更高的要求。
Zabbix是一个企业级的高度集成开源监控软件,提供分布式监控解决方案,可以用来监控设备、服务等的可用性和性能,其产品不分企业版和社区版,是一个真正的源代码开放产品,用户可以*下载并使用该软件。
Zabbix SIA公司是Zabbix的官方技术团队成立的公司。其运作模式是商业软件的开源—软件的使用免费,服务收费。其为用户提供咨询、技术支持服务、定制开发、解决方案、人员培训等。
2.2 zabbix功能特性
2.2.1 数据收集
- 可用、性能检测
- 支持agent、SNMP(包括trapping和polling)、IPMI、JMX、SSH、telnet等
- 自定义检测
- 自定义收集数据的频率
- 服务器端/客户端/代理端模式
2.2.2 灵活的触发器
- 可以定义非常灵活的阈值和多种相关联的条件
2.2.3 高度可定制的告警
- 发送通知,可定制包括告警级别、动作升级、收件人和媒体类型。
- 通知可以使用全局宏变量和自定义的变量。
- 自动处理功能包括远程命令的自动调用和执行。
2.2.4 实时的绘图功能
- 监控项将数据实施绘制在图形上。
2.2.5 web监控能力
- Zabbix可以模拟浏览器请求一个网站,并检查返回值和响应时间。
2.2.6 多种可视化的展示
- 可以自定义监控的展示图,将多种监控数据集中展示到一张图中。
- 网络拓扑图。
- 自定义Screens和Slide shows可以将多种图形集中展示。
- 报表功能。
- 资源使用情况的监控展示。
2.2.7 历史数据的存储
- 数据存储在数据库中。
- 历史数据的存放周期可配置。
- 定期删除过期的历史数据。
2.2.8 配置非常容易
- 配置比较简单,只需要以下两步即可。
- 第一步:添加设备。
- 第二步:应用模板即可完成监控。
2.2.9 使用模板
- 模板可以分组
- 模板具有可继承性。
2.2.10 网络发现
- 支持自动发现网络设备和服务器(可以通过配置自动发现服务规则实现。)
- Agent自动发现
- 支持自动发现实现动态监控的批量监控(支持自定义)内置的自动发现包括文件系统、网络接口、SNMP OLD,可定制自动发现。
2.2.11 快速的访问接口
- Web页面基于PHP
- 远程访问。
- 日志审计。
2.2.12 API功能
- 应用API功能可以方便地和其他系统结合,包括手机客户端的使用。
2.2.13 系统权限
- 不同的用户展示监控的资源不同。
- 对用户的身份认证
2.2.14 程序特性
- 用C语言编写,其性能和内存开销非常小。
2.2.15 大型环境的支持
- 利用Zabbix-Proxy方式即可轻松构建远程监控。
2.3 zabbix监控的原理
zabbix需要布置一个服务端,并依照监控需求在去布置多个客户端agent,agent安装在被监控的主机上,并且负责定期去收集客户端监控的各项本地数据,agent收集到数据以后,会将数据实时的发送到服务端zabbix server,zabbix server收到数据以后,会将数据存储到数据库中,用户基于zabbix web做成数据图像并且展现在前端,方便查看。 可以利用zabbix来监控某个具体的项目,并且可以为该项目设置一个key值,一旦当key值达到当初设定的阈值时,实现平台的报警。报警包括(邮件、微信、短信),发送命令(shell命令、reboot、restart、install等)
2.4 如果你去到一家公司,如何入手监控
cacti Nagios Zabbix
1.硬件监控(防火墙、路由器、交换机、服务器)
2.系统监控 (Windows/Linux CPU、内存、网络、磁盘、进程数、TCP连接状态)
3.应用监控 (Nginx、PHP、Tomcat、MySQL、NFS、Redis)
4.日志监控 (ElkStack 收集、存储、分析、展示)
5.安全监控 (IPtables/Firewalld限制来源IP、Nginx+Lua实现WAF防火墙)
6.网络监控 (全国各地实时延迟)
7.WEB监控 (请求时间、响应时间、加载时间)
8.业务监控 (产生多少用户注册、产生多少订单、成交收益)
2.5 运维面试中,常常会被问题监控相关的问题,那么这个问题到底该如何来回答,我针对本文给大家提供了一个简单的回答思路。
1.硬件监控。
通过SNMP来进行路由器交换机的监控(这些可以跟一些厂商沟通来了解如何做)、服务器的温度以及其他,可以通过IPMI来实现。当然如果没有硬件全都是云,直接跳过这一步骤。
2.系统监控。
如CPU的负载,上下文切换、内存使用率、磁盘读写、磁盘使用率、磁盘inode使用率。当然这些都是需要配置触发器,因为默认太低会频繁报警。
3.服务监控。
比如公司用的LNMP架构,nginx自带Status模块、PHP也有相关的Status、MySQL的话可以通过percona官方工具来进行监控。Redis这些通过自身的info获取信息进行过滤等。方法都类似。要么服务自带。要么通过脚本来实现想监控的内容,以及报警和图形功能。
4.网络监控。
如果是云主机又不是跨机房,那么可以选择不监控网络。当然你说我们是跨机房以及如何如何。推荐使用smokeping来做网络相关的监控。或者直接交给你们的网络工程师来做,因为术业有专攻。
5.安全监控。
如果是云主机可以考虑使用自带的安全防护。当然也可以使用iptables。如果是硬件,那么推荐使用硬件防火墙。使用云可以购买防DDOS,避免出现故障导致down机一天。如果是系统,那么权限、密码、备份、恢复等基础方案要做好。web同时也可以使用Nginx+Lua来实现一个web层面的防火墙。当然也可以使用集成好的openresty。
6.Web监控。
web监控的话题其实还是很多。比如可以使用自带的web监控来监控页面相关的延迟、js响应时间、下载时间、等等。这里我推荐使用专业的商业软件,监控宝或听云来实现。毕竟人家全国各地都有机房。(如果本身是多机房那就另说了)
7.日志监控。
如果是web的话可以使用监控Nginx的50x、40x的错误日志,PHP的ERROR日志。其实这些需求无非是,收集、存储、查询、展示,我们其实可以使用开源的ELKstack来实现。Logstash(收集)、elasticsearch(存储+搜索)、kibana(展示)
8.业务监控。
我们上面做了那么多,其实最终还是保证业务的运行。这样我们做的监控才有意义。所以业务层面这块的监控需要和开发以及总监开会讨论,监控比较重要的业务指标,(需要开会确认)然后通过简单的脚本就可以实现,最后设置触发器即可
9.流量分析。
平时我们分析日志都是拿awk sed xxx一堆工具来实现。这样对我们统计ip、pv、uv不是很方便。那么可以使用百度统计、google统计、商业,让开发嵌入代码即可。为了避免隐私也可以使用piwik来做相关的流量分析。
10.可视化。
通过screen以及引入一些第三方的库来美化界面,同时我们也需要知道,订单量突然增加、突然减少。或者说突然来了一大波流量,这流量从哪儿来,是不是推广了,还是被攻击了。可以结合监控平来梳理各个系统之间的业务关系。
11.自动化监控。
如上我们做了那么多的工作,当然不能是一台一台的来加key实现。可以通过Zabbix的主动模式以及被动模式来实现。当然最好还是通过API来实现。
12.分布式监控