监控系统就是一套解决应用、服务或系统故障发现、故障预警、故障定位,运行状态展示等多种功能融合一体的一个解决文案。也可以称之为一套系统。 监控系统是整个运维环节,乃至整个产品生命周期中最重要的一环,事前及时预警发现故障,事后提供翔实的数据用于追查定位问题。监控系统作为一个成熟的运维产品,业界有很多开源的实现可供选择。 所以,要设计一套企业级的监控方案,要考虑的方方面面还是很多的,今天,就给大家分享一些需要考虑的点,从这些点出发,再去结合业务场景去设计一套更适合自己企业的监控方案。

监控目标

明白监控的重要性以及使用监控要实现的业务目标 通常包括以下三点:
  • 对目标系统进行实时监控
  • 监控可以实时反馈目标系统的当前状态 目标系统硬件、软件、业务是否正常、目前处于何种状态
  • 保证目标系统可靠性,业务可以持续稳定运行 有问题第一时间反馈出来,便于运维人员处理

监控方法

  • 了解监控对象 例如:CPU如何工作?
  • 性能基准指标 例如: CPU使用率、负载、用户态、内核态、上下文切换
  • 报警阈值定义 例如: CPU负载高的定义,内核态、用户态多少算高
  • 故障处理流程 如何更高效处理故障的流程

监控核心

  • 发现问题
  • 定位问题
  • 解决问题
  • 总结问题,对故障原因及问题防范进行归纳总结,避免以后重复出现

监控工具

老牌监控

  • Cacti
  • Nagios
  • smokeping

流行监控

  • Zabbix
  • OpenFalcon
  • Prometheus+Grafana
  • 滴滴开源夜莺Nightingale
  • smartping(专用于网络监控)
  • LEPUS天兔(专用于监控数据库)
  • 自研

第三方监控

  • 监控宝
  • 听云
  • newrelic

监控流程

  • 采集
通过SNMP、Agent、ICMP、SSH、IPMI等对系统进行数据采集
  • 存储
各类数据库服务,MySQL、PostgreSQL
  • 分析
提供图形及时间线情况信息,方便我们定位故障所在
  • 展示
指标信息、指标趋势展示
  • 报警
电话、邮件、微信、短信、报警升级机制
  • 处理
故障级别判定,找响应人员进行快速处理

监控指标

硬件监控

机器硬件:CPU温度、物理磁盘、虚拟磁盘、主板温度、磁盘阵列。IPMI工具无法获取到硬件的状态,可以借助MegaCli工具探测Raid磁盘队列状态,https://www.ibm.com/developerworks/cn/linux/l-ipmi/ ### 系统监控 + 主机存活 + CPU、内存、硬盘、使用率 + inode + 负载 + 网卡出入带宽 + TCP连接数 + 磁盘读写、只读

应用监控

MySQL

  • 服务可用性
  • 内存使用率
  • 磁盘使用
  • 主从不同步及延迟
  • 备份情况
  • 连接数

Redis、Redis Cluster

  • 负载
  • 内存使用率
  • 连接数量
  • qps

Nginx

  • 状态码
  • 连接状态信息
  • RabbitMQ
  • PHP-FPM
  • OpenLDAP - 接入IP - 调用次数
  • Zimbra
  • OpenVPN - 版本信息、当前在线 - 用户、分配IP、客户端连接IP、通过IP获取地址位置、接收发送流量 连接时间 时长 连接ID
  • ELK
  • Graylog
  • GitLab
  • Jenkins
  • MongoDB
  • HAproxy

网络监控

  • 网络质量
  • 公网出口
  • 专线带宽
  • 网络设备

安全监控

  • URL、API监控
  • 自研
  • 阿里云方案

性能监控(APM)java|php|go|nodejs|分布式链路追踪

  • PinPoint
  • Zipkin
  • SkyWalking
  • CAT、Jaeger

业务监控

电商业务为例:
  • 每分钟产生多少订单
  • 每分钟注册多少用户
  • 每分钟多少活跃用户
  • 每天有多少推广活动
  • 推广活动引入多少用户
  • 推广活动引入多少流量
  • 推广活动引入多少利润

其他

  • SSL证书监控
  • 存活性 进程是否还在,端口监听、Log滚动
  • 健康指标 MQ消息堆积量
  • 接口监控 API成功率,延迟情况,QPS等等

监控报警

  • 邮件
  • 短信
  • 钉钉、微信、企业微信等其他即时通信软件
  • 电话

报警处理

故障自愈: 服务器宕机自动启动。利用软件机制supervisorsystemd或者自定义脚本实现。

综合监控

硬件监控

通过SNMP来进行路由器交换机的监控、其他内容使用IPMI实现。如果都是公有云,可以忽略这部分内容。

服务监控

  • 服务自带 - Nginx自带status模块 - PHP相应status模块 - MySQL利用percona官方工具进行监控
  • 通过自定义方法获取数据 - MySQL show global status xxx; - Redis info指令信息
  • 网络监控(混合云架构) - smokeping - smartping
  • 安全监控 - 云服务直接用云安全组即可,或者补充本机iptables - 硬件防火墙 - Web服务使用Nginx+Lua实现Web层面的防火墙,或者Openresty
  • 日志监控 - ELK、Graylog实现异常日志,错误日志关键字的监控
  • 业务监控 - 确定监控指标,监控起来,业务不同各不相同
  • 流量分析 - 建议使用百度统计,Google统计,商业,研发嵌入代码实现。 - 或者使用piwik
  • 可视化 - Dashboard
  • 自动化监控 - 通过API,批量操作

监控总结

完整的监控系统,需要对业务有详尽的了解,软件只是手段。