监控知识体系

监控知识体系

  1. 监控目标

    1
    2
    3
    4
    5
    6
    7
    8
    * 对系统不间断实时监控
    实际上是对系统不间断的实时监控
    * 实时反馈系统当前状态
    我们监控某个硬件,或者某个系统,都是需要能实时看到当前系统的状态,是正常,异常,或者故障
    * 保证服务可靠性安全性
    我们监控的目的就是要保证系统,服务,业务正常运行
    * 保证业务持续稳定运行
    如果我们的监控做得很完善,即使出现故障,能第一时间接收到故障报警,在第一时间处理解决,从而保证业务持续性的稳定运行
  2. 监控方法

    1
    2
    3
    4
    5
    6
    7
    8
    * 了解监控对象
    我们要监控的对象你是否了解呢?比如CPU到底是如何工作的?
    * 性能基准指标
    我们要监控这个东西的什么属性?比如CPU的使用率,负载,用户态,内核态,上下文切换
    * 报警阈值定义
    怎么样才算是故障,要报警呢?比如CPU的负载到底多少算高,用户态,内核态分别跑多少算高?
    * 故障处理流程
    收到了故障报警,那么我们怎么处理呢?有什么更高效的处理流程吗?
  3. 监控核心

    1
    2
    3
    4
    5
    6
    7
    8
    * 发现问题
    当系统发生故障报警,我们会收到故障报警的信息
    * 定位问题
    故障邮件一般都会写某某主机故障,具体故障的内容,我们需要对报警内容进行分析,比如一台服务器连不上:我们就需要考虑是网络问题,还是负载太高导致长时间无法连接,又或者某开发触发了防火墙禁止的相关策略等等,我们就需要去分析故障具体原因
    * 解决问题
    当然我们了解到故障的原因后,就需要通过故障解决的优先级去解决该故障
    * 总结问题
    当我们解决完重大故障后,需要对故障原因以及防范进行总结归纳,避免以后重复出现
  4. 监控工具

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    * 老牌监控
    * MRTG
    MRTG是一套可用来绘制网络流量图的软件
    * Grnglia
    Grnglia一个跨平台的,可扩展的,高性能的分布式监控系统,如集群和网格
    * Cacti
    Cacti是一套基于PHP,MySQL,SNMP和RRDtool开发的网络流量监测图形分析工具,它通过snmpget来获取数据使用RRDtool绘图,但使用者无须了解RRDtool复杂的参数
    * Nagios
    Nagios是一个企业级监控系统,可监控服务的运行状态和网络信息等,并能监视所指定的本地或远程主机状态以及服务,同时提供异常告警通知功能等
    * Smokeping
    Smokeping主要用于监视网络性能,包括常规的ping,www服务器性能,DNS查询性能,SSH性能等
    * OpenTSDB
    OpenTSDB用Hbase存储所有时序的数据,来构建一个分布式,可伸缩的时间序列数据库
    * 王牌监控
    * Zabbix
    Zabbix是一个分布式监控系统,支持多种采集方式和采集客户端,有专用的Agent代理,也支持SNMP、IPMI、JMX、Telnet、SSH等多种协议,它将采集到的数据存放到数据库,然后对其进行分析整理,达到条件触发告警
    * open-falcon
    open-falcon的目标是做最开放,最好用的互联网企业级监控产品
    * OWL
    OWL是TalkingData公司推出的一款开源分布式监控系统
    * LEPUS天兔
    LEPUS天兔转用于监控数据库
    * 三方监控
    * 监控宝
    * 听云
  5. 监控流程

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    1.数据采集
    Zabbix通过SNMP、Agent、ICMP、SSH、IPMI等对系统进行数据采集
    2.数据存储
    Zabbix存储在MySQL上,也可以存储在其他数据库服务
    3.数据分析
    当我们事后需要复盘分析故障时,zabbix能给我们提供图形以及时间等相关信息,方面我们确定故障所在
    4.数据展示
    web界面展示,(移动APP、java_php开发一个web界面也可以)
    5.监控报警
    电话报警、邮件报警、微信报警、短信报警、报警升级机制等
    6.报警处理
    当接收到报警,我们需要根据故障的级别进行处理,比如:重要紧急,重要不紧急等.根据故障的级别,配合相关的人员进行快速处理
  6. 监控指标

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    * 硬件监控(Zabbix IPMI Interface)
    * CPU温度
    * 物理磁盘
    * 虚拟磁盘
    * 主板温度
    * 磁盘阵列
    * 系统监控(Zabbix Agent Interface)
    * CPU
    * CPU整体百分比
    * 用户态使用百分比
    * 内核态使用百分比
    * 每个CPU使用情况
    * 磁盘
    * 磁盘读/写吞吐(MBps)
    * 磁盘读/写次数(次/s)
    * 内存
    * 内存使用量
    * 内存剩余量
    * 网络
    * 网卡出/入带宽(kbps)
    * 网卡出/入包量(个/s)
    * 进程
    * 进程端口监听
    * 应用监控(Zabbix Agent UserParameter)
    * LVS、Haproxy、Docker、Nginx、PHP、Memcached、Redis、MySQL、Rabbitmq等
    * java监控(Zabbix JMX Interface)
    * 网络设备监控(Zabbix SNMP Interface)
    * 网络监控
    Smokeping是rrdtool的作者Tobi Oetiker的作品,是用Perl写的,主要是监视网络性能,www 服务器性能,dns查询性能等,使用rrdtool绘图,而且支持分布式,直接从多个agent进行数据的汇总
    * 流量分析
    google出一个叫piwik的开源分析工具
    * 日志监控
    对于日志监控来说,最见的需求就是收集,存储,查询,展示,开源社区正好有相对应的开源项目:logstash(收集) + elasticsearch(存储+搜索) + kibana(展示)
    * 安全监控
    三方厂商提供全面的漏洞库,涵盖服务,后门,数据库,配置检测,CGI,SMTP等多种类型
    全面检测主机,Web应用漏洞自主挖掘和行业共享相结合第一时间更新0day漏洞,杜绝最新安全隐患
    * API监控
    监控API接口GET、POST、PUT、DELETE、HEAD、OPTIONS的请求
    可用性、正确性、响应时间为三大重性能指标
    * 性能监控
    全面监控网页性能,DNS响应时间、HTTP建立连接时间、页面性能指数、响应时间、可用率、元素大小等
    zabbix提供URL监控:Zabbix Web 监控
    * 业务监控
    以电商为例:
    * 每分钟产生多少订单
    * 每分钟注册多少用户
    * 每天有多少活跃用户
    * 每天有多少推广活动
    * 推广活动引入多少用户
    * 推广活动引入多少流量
    * 推广活动引入多少利润
    * 今天商品打包出库多少
    * 今天退货商品有多少
    * 等等
  7. 监控报警

    1
    2
    3
    4
    5
    * 电话
    * 短信
    * 微信
    * 邮箱
    * 任意
  8. 报警处理

    1
    2
    3
    4
    * 故障自愈
    * 故障级别
    * 业务划分
    * 人员划分
  9. 面试监控

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    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.分布式监控
  10. 监控链接文章

  1. 监控体系图
    监控系统图 下载 密码:u1wz
    监控体系图