原文地址:http://liangweilinux.blog.51cto.com/8340258/1914591php
监控是整个运维乃至整个产品生命周期中最重要的一环,事前及时预警发现故障,过后提供详实的数据用于追查定位问题。
目前业界有不少不错的开源产品可供选择。选择一款开源的监控系统,是一个省时省力,效率最高的方案。固然对监控不是很明白的朋友们,看了如下文章可能会对监控整个体系有比较深入的认识。java
ps:本文内容较多,文章篇幅很长,能够先收藏,后续慢慢阅读。node
咱们先来了解什么是监控,监控的重要性以及监控的目标,固然每一个人所在的行业不一样、公司不一样、业务不一样、岗位不一样、对监控的理解也不一样,可是咱们须要注意,监控是须要站在公司的业务角度去考虑,而不是针对某个监控技术的使用。
监控目标linux
既然咱们了解到了监控的重要性、以及监控的目的,那么下面咱们须要了解下监控有哪些方法。ios
监控方法nginx
1.了解监控对象:咱们要监控的对象你是否了解呢?好比CPU究竟是如何工做的?
2.性能基准指标:咱们要监控这个东西的什么属性?好比CPU的使用率、负载、用户态、内核态、上下文切换。
3.报警阈值定义:怎么样才算是故障,要报警呢?好比CPU的负载到底多少算高,用户态、内核态分别跑多少算高?
4.故障处理流程:收到了故障报警,那么咱们怎么处理呢?有什么更高效的处理流程吗?git
咱们了解了监控的方法、监控对象、性能指标、报警阈值定义、以及故障处理流程几步骤,固然咱们更须要知道监控的核心是什么?
监控核心github
1.发现问题:当系统发生故障报警,咱们会收到故障报警的信息
2.定位问题:故障邮件通常都会写某某主机故障、具体故障的内容,咱们须要对报警内容进行分析,好比一台服务器连不上:咱们就须要考虑是网络问题、仍是负载过高致使长时间没法链接,又或者某开发触发了防火墙禁止的相关策略等等,咱们就须要去分析故障具体缘由。
3.解决问题:固然咱们了解到故障的缘由后,就须要经过故障解决的优先级去解决该故障。
4.总结问题:当咱们解决完重大故障后,须要对故障缘由以及防范进行总结概括,避免之后重复出现。web
下面咱们须要选择一款合适公司业务的监控工具进行监控,这里我对监控工具进行了简单的分类
监控工具面试
老牌监控:
MRTG(Multi Route Trffic Grapher)是一套可用来绘制网络流量图的软件,由瑞士奥尔滕的Tobias Oetiker与Dave Rand所开发,以GPL受权。
MRTG最好的版本是1995年推出的,用perl语言写成,可跨平台使用,数据采集用SNMP协议,MRTG将手机到的数据经过Web页面以GIF或者PNG格式绘制出图像。
Grnglia是一个跨平台的、可扩展的、高性能的分布式监控系统,如集群和网格。它基于分层设计,使用普遍的技术,用RRDtool存储数据。具备可视化界面,适合对集群系统的自动化监控。其精心设计的数据结构和算法使得监控端到被监控端的链接开销很是低。目前已经有成千上万的集群正在使用这个监控系统,能够轻松的处理2000个节点的集群环境。
Cacti(英文含义为仙人掌)是一套基于PHP、MySQL、SNMP和RRDtool开发的网络流量监测图形分析工具,它经过snmpget来获取数据使用RRDtool绘图,但使用者无须了解RRDtool复杂的参数。提供了很是强大的数据和用户管理功能,能够指定每个用户能查看树状结构、主机设备以及任何一张图,还能够与LDAP结合进行用户认证,同时也能自定义模板。在历史数据展现监控方面,其功能至关不错。
Cacti经过添加模板,使不一样设备的监控添加具备可复用性,而且具有可自定义绘图的功能,具备强大的运算能力(数据的叠加功能)
Nagios是一个企业级监控系统,可监控服务的运行状态和网络信息等,并能监视所指定的本地或远程主机状态以及服务,同时提供异常告警通知功能等。
Nagios可运行在Linux和UNIX平台上。同时提供Web界面,以方便系统管理人员查看网络状态、各类系统问题、以及系统相关日志等
Nagios的功能侧重于监控服务的可用性,能根据监控指标状态触发告警。
目前Nagios也占领了必定的市场份额,不过Nagios并无与时俱进,已经不能知足于多变的监控需求,架构的扩展性和使用的便捷性有待加强,其高级功能集成在商业版Nagios XI中。
Smokeping主要用于监视网络性能,包括常规的ping、www服务器性能、DNS查询性能、SSH性能等。底层也是用RRDtool作支持,特色是绘制图很是漂亮,网络丢包和延迟用颜色和阴影来标示,支持将多张图叠放在一块儿,其做者还开发了MRTG和RRDtll等工具。
Smokeping的站点为:http://tobi.oetiker.cn/hp
开源监控系统OpenTSDB用Hbase存储全部时序(无须采样)的数据,来构建一个分布式、可伸缩的时间序列数据库。它支持秒级数据采集,支持永久存储,能够作容量规划,并很容易地接入到现有的告警系统里。
OpenTSDB能够从大规模的集群(包括集群中的网络设备、操做系统、应用程序)中获取相应的采集指标,并进行存储、索引和服务,从而使这些数据更容易让人理解,如Web化、图形化等。
王牌监控
Zabbix是一个分布式监控系统,支持多种采集方式和采集客户端,有专用的Agent代理,也支持SNMP、IPMI、JMX、Telnet、SSH等多种协议,它将采集到的数据存放到数据库,而后对其进行分析整理,达到条件触发告警。其灵活的扩展性和丰富的功能是其余监控系统所不能比的。相对来讲,它的整体功能作的很是优秀。
从以上各类监控系统的对比来看,Zabbix都是具备优点的,其丰富的功能、可扩展的能力、二次开发的能力和简单易用的特色,读者只要稍加学习,便可构建本身的监控系统。
小米的监控系统:open-falcon。open-falcon的目标是作最开放、最好用的互联网企业级监控产品。
OWL是TalkingData公司推出的一款开源分布式监控系统OWLgithub地址
三方监控:
如今市场上有不少不错的第三方监控,好比:监控宝、监控易、听云、还有不少云厂商自带监控,可是在这里咱们不打算着重介绍,若是想了解三方监控可自行上官网咨询。(避免说广告植入)
上面介绍了这么多,那么到底选择什么监控工具最合适呢,我这里推荐几款开源监控工具:zabbix、Open-Falcon、LEPUS天兔(专用于监控数据库)。
可是本文仍是基于zabbix来构建整个监控体系生态圈。
那么下面咱们就来聊聊,zabbix的整个流程:
监控流程
1.数据采集: Zabbix经过SNMP、Agent、ICMP、SSH、IPMI等对系统进行数据采集
2.数据存储: Zabbix存储在MySQL上,也能够存储在其余数据库服务
3.数据分析: 当咱们过后须要复盘分析故障时,zabbix能给咱们提供图形以及时间等相关信息,方面咱们肯定故障所在。
4.数据展现: web界面展现、(移动APP、java_php开发一个web界面也能够)
5.监控报警:电话报警、邮件报警、微信报警、短信报警、报警升级机制等(不管什么报警均可以)
6.报警处理:当接收到报警,咱们须要根据故障的级别进行处理,好比:重要紧急、重要不紧急,等。根据故障的级别,配合相关的人员进行快速处理。
咱们上面了解了监控方法、目标、流程、也了解了监控有哪些工具,可能有人会疑惑,咱们具体要监控写什么东西,那么我在这里进行了分类整理:
硬件监控
系统监控
应用监控
网络监控
流量分析
日志监控
安全监控
API监控
性能监控
业务监控
早期咱们经过机房巡检的方式,查看硬件设备灯光闪烁状况判断是否故障,这样很是浪费人力,而且是重复性无技术含量的工做,你们懂得。
硬件监控
固然咱们如今能够经过IPMI对硬件详细状况进行监控,并对CPU、内存、磁盘、温度、风扇、电压等设置报警设置报警阈值(自行对监控报警内容编写合理的报警范围)
IPMI监控硬件服务参考资料
IPMI工具没法获取到硬件的状态,能够借助MegaCli工具探测Raid磁盘队列状态
zabbix提供IPMI监控模板:Zabbix IPMI Interface
系统自带的IPMI模板只能监控,风扇,电源,和部分温度
中小型企业基本全是Linux服务器,那么咱们确定是要监控起系统资源的使用状况,系统监控是监控体系的基础。
监控主要对象:
CPU有几个重要的概念:上下文切换、运行队列和使用率。
这也是咱们CPU监控的几个重点指标。
一般状况,每一个处理器的运行队列不要高于3,CPU 利用率中用“户态/内核态”比例维持在70/30,空闲状态维持在50%,上下文切换要根据系统繁忙程度来综合考量。
针对CPU经常使用的工具备:htop、top、vmstat、mpstat、dstat、glances
zabbix提供系统监控模板:Zabbix Agent Interface
CPU总体状态
上下文切换
负载状态
内存:一般咱们须要监控内存的使用率、SWAP使用率、同时能够经过zabbix描绘内存使用率的曲线图形发现某服务内存溢出等。
针对内存经常使用的工具备: free、top、vmstat、glances
内存使用率
IO分为磁盘IO和网络IO。除了在作性能调优咱们要监控更详细的数据外,那么平常监控,只关注磁盘使用率、磁盘吞吐量、磁盘写入繁忙程度,网络也是监控网卡流量便可。
经常使用工具备:iostat、iotop、df、iftop、sar、glances
磁盘使用率
磁盘读/写吞吐
磁盘读/写次数
网卡进出口流量
TCP监控:在不少状况下有必要监控TCP的状态,可使用netstat或者ss来获取全部的TCP链接,来展示11种不一样的TCP链接状态的数量,能够在大并发中及时发现TCP的相关故障。
TCP11种状态信息
其它的系统监控还有运行的进程端口、进程数、登录用户、Open File等(详细查看zabbix自带OS Linux模板)
其余相关监控
把硬件监控和系统监控研究明白后,咱们进一步操做是须要登录到服务器上查看服务器运行了哪些服务,都须要监控起来。
应用服务监控也是监控体系中比较重要的内容,例如:
LVS、Haproxy、Docker、Nginx、PHP、Memcached、Redis、MySQL、Rabbitmq等等,相关的服务都须要使用zabbix监控起来。
nginx_status
PHP-FPM_status
Redis_status
JVM监控
笔者以前写过服务监控详细的操做过程,这里就不一一展现,详情访问:zabbix监控各类应用服务
zabbix提供应用服务监控:Zabbix Agent UserParameter
zabbix提供的Java监控:Zabbix JMX Interface
percona提供MySQL数据库监控:percona-monitoring-plulgins
做为一个针对全国用户的电商网站,时刻掌握各地到机房的网络状态也是必须的。
网络监控是咱们构建监控平台是必需要考虑的,尤为是针对有多个机房的场景,各个机房之间的网络状态,机房和全国各地的网络状态都是咱们须要重点关注的对象,那么如何掌握这些状态信息呢?咱们须要借助于网络监控工具Smokeping。
Smokeping 是rrdtool的做者Tobi Oetiker的做品,是用Perl写的,主要是监视网络性能,www 服务器性能,dns查询性能等,使用rrdtool绘图,并且支持分布式,直接从多个agent进行数据的汇总。
同时,因为本身监控点比较少,还能够借助不少商业的监控工具,好比监控宝、听云、基调、博瑞等。同时这些服务提供商还能够帮助你监控CDN的状态。
smokeping
监控宝
网站流量分析对于运维人员来讲,更是一门必须掌握的知识了。好比对于一家电商公司来讲:
经过对订单来源的统计和分析,能够了解咱们在某个网站上的广告投入有没有收到预期的效果。
能够区分不一样地区的访问人数、甚至商品交易额等。
百度统计、google分析、站长工具等等,只须要在页面嵌入一个js便可。
可是,数据始终是在对方手中,个性化定制不方便,因而google出一个叫piwik的开源分析工具
piwik
百度统计
一般状况下,随着系统的运行,操做系统会产生系统日志,应用程序会产生应用程序的访问日志、错误日志,运行日志,网络日志,咱们可使用ELK来进行日志监控。
对于日志监控来讲,最见的需求就是收集、存储、查询、展现,开源社区正好有相对应的开源项目:
logstash(收集) + elasticsearch(存储+搜索) + kibana(展现)
咱们将这三个组合起来的技术称之为ELK Stack,因此说ELK Stack指的是Elasticsearch、Logstash、Kibana技术栈的结合。
若是收集了日志信息,那么若是部署更新有异常出现,能够当即在kibana上看到。
Elk日志展现
固然也能够经过Zabbix过滤错误日志来进行告警。
zabbix日志展现
虽然Linux开源的安全产品很多,好比四层iptables,七层WEB防御nginx+lua实现WAF,最后将相关的日志都收至Elkstack,经过图形化进行不一样的攻击类型展现。可是始终是一件比较耗费时间,而且我的效果并非很好。这个时候咱们能够选择接入第三方服务厂商。
某某三方安全
三方厂商提供全面的漏洞库,涵盖服务、后门、数据库、配置检测、CGI、SMTP等多种类型
全面检测主机、Web应用漏洞自主挖掘和行业共享相结合第一时间更新0day漏洞,杜绝最新安全隐患
因为API变得愈来愈重要,很显然咱们也须要这样的数据来分辨咱们提供的 API是否可以正常运做。
监控API接口GET、POST、PUT、DELETE、HEAD、OPTIONS的请求
可用性、正确性、响应时间为三大重性能指标
API监控
三方API监控
响应时间
全面监控网页性能,DNS响应时间、HTTP创建链接时间、页面性能指数、响应时间、可用率、元素大小等
zabbix提供URL监控:Zabbix Web 监控
Zabbix站点监控
终端响应时间
第三方监控监控大盘。各种图表一目了然,全面体现网页性能健康情况。
没有业务指标监控的监控平台,不是一个完善的监控平台,一般在咱们的监控系统中,必须将咱们重要的业务指标进行监控,并设置阈值进行告警通知。好比电商行业:
每分钟产生多少订单,
每分钟注册多少用户,
天天有多少活跃用户,
天天有多少推广活动,
推广活动引入多少用户,
推广活动引入多少流量,
推广活动引入多少利润,
今天商品打包出库多少,
今天退货商品有多少,
等等 重要指标均可以加入zabbix上,而后经过screen展现。
注:因为业务监控图表,涉及到隐私的数据太多,就不截图。
故障报警通知的方式有不少种,固然咱们最经常使用的仍是短信,邮件
短信报警
邮件报警
通常报警后咱们故障如何处理,首先,咱们能够经过告警升级机制先自动处理,好比nginx服务down了,能够设置告警升级自动启动nginx。
可是若是通常业务出现了严重故障,咱们一般根据故障的级别,故障的业务,来指派不一样的运维人员进行处理。
固然不一样业务形态、不一样架构、不一样服务可能采用的方式都不一样,这个没有一个固定的模式套用。
在运维面试中,经常会被问题监控相关的问题,那么这个问题到底该如何来回答,我针对本文给你们提供了一个简单的回答思路。
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.分布式监控
真正想作到更完整的监控体系,目前的开源软件,确实没法很好的知足,有条件的公司都开始本身开发本身的监控系统,好比小米开源的Open-Falcon。
也有比较好的开源的监控框架如Sensu等,再加上influxdb、grafana能够用来定制符合本身企业的监控平台。
固然我说的仍是很简单,经验有限、思路也仅能提供这么多。以上就是我分享对监控的一些方法和心得。(老鸟勿喷)