这几年的工作中一直负责公司监控体系建设,从0-1构建了整个公司的分布式监控系统。之前在51cto博客也发布了很多关于Zabbix分布式监控的相关文章,很多文章点赞和阅读量都比较高,很有成就感。大家都知道,互联网技术更新很快,近几年docker、k8s、微服务和CICD更是各个公司技术主流。各种应用、微服务和docker等新技术的应用,业务调用和故障诊断会显的更加复杂。如何选择和使用各种优秀的监控软件来解决实际问题,让监控走在业务的前面,为业务服务,是每个运维甚至是领导应该思考的问题。完善的监控体系可以及时止损,发挥运维人员的价值,也能体系监控的重要性。在多年实践中总结和使用了一整套完善的监控体系,主要包括主机监控zabbix、日志监控graylog、微服务的监控prometheus、业务监控skywalking、第三方的APM拨测和集中展示工具grafana平台。形成了一整套大型互联网公司都在应用的监控体系。

1)Zabbix 分布式监控系统:系统从最初的2.2.1->3.2.0->4.0->5.0 到现在5.0版本平稳迭代升级。无论在功能、性能和稳定性方面都表现的非常出色。近几年无论是硬件、系统、网络、存储还是中间件出现的问题。Zabbix监控都能及时准确的报警,为公司业务稳定运行发挥了巨大的价值。目前实现了全站设备的监控。在服务器硬件监控方面通过HP管理工具+SNMPget+Zabbix自动发现功能来实现服务器硬盘、电源、风扇和环境温度等监控,我们这种监控方案也是行业里面最优秀的解决方案。在核心小机、存储等设备监控方面我们是通过SNMPTrap功能实现的,相比SNMPget定时获取数据来讲,snmpTrap更具有优势,出现问立即触发告警,更适合核心设备的监控。在中间件的监控方面,我们采集了服务最具代表性能的性能指标并根据我们多年运维经验控定制的报警条件。在自动化监控方面,通过大量的python|Shell程序写了很多自动化扫描程序并自动加入监控系统,比如全站url可用性监控、http证书的监控、中间件多实例的监控等等,减轻人为失误和工作量。在监控数据存储和性能优化方面,通过自动化按天分区解决MySQL性能问题,通过将MySQL Innodb存储引擎转换为Tokudb存储引擎来减少磁盘空间的使用,通过该引擎的转换可以节约80%左右硬盘空间,解决了数据存储的问题。在监控报警风暴的控制方面,通过Python程序把告警的消息推送到redis缓存里面,然后根据条件取重、合并并结合资产管理系统里面的信息做报警。实现了监控系统最头疼的告警风暴的控制功能。在分布式监控系统完善方面,始终坚持从发现问题->定位问题->总结问题->是否优化监控的思路进行,基本熟读zabbix官网,并积累了多丰富的实践经验。 zabbix.jpg 2)Graylog 日志收集系统:虽然Zabbix支持日志监控,由于在数据量、搜索和日志展示方面都比较弱化,只能做简单的日志报警。因此日志监控还是需要通过专业的工具来做。Graylog一款开源的日志聚合、分析、审计、展现和预警工具。相比ELK,Graylog更轻量,UI界面更美观,有丰富和完善的API接口。通过查看Dashboards报表就可以确认线上几千台设备是否有问题。目前收集了网络设备的日志、MySQL错误日志、Linux系统日志等。各种日志都按照错误级别做了统计分析,对应高级日志通过Graylog +Python程序实现微信和邮件的告警的功能。在几次线上业务MQ系统内核崩溃、系统文件系统损坏、CPU出现软锁和网络设备电源模块等问题的时都及时通过日志告警预警给相关人员。 graylog.png 3)Skywalking 全链路业务监控系统:接入监控不需要开发修改源码,只需引入skywalking的jar包即可。随着公司微服务推进,业务的调用和故障的诊断会显的更加复杂。skywalking监控主要用于监控用户请求链路和路径的监控(拓扑图),能追踪到调用链路各个环节是否正常(错误的原因)和耗时(DB查询、缓存查询等等),主要用于业务层面性性能优化和故障诊断。并对不同项目的报警做了定制,把不通项目的告警推送给相关负责人,通过Python程序实现了邮件和微信的双通道告警。 skywaling.jpg 4)Prometheus 监控系统:相比zabbix系统来说,prometheus对微服务的监控更具有优势,和Zabbix监控系统,取长补短,发挥各自的优势。并积极和开发沟通并推动公司微服务监控,实现了prometheus通过nacos注册中心的自动获取注册的微服务,主要监控到JVM在系统层面的负载、详细堆内存、连接池性能指标、微服务下面各个URL调用次数和返回的状态码,微服务的错误日志数量统计等。配合第三方granfana大屏展示,主要用于系统层面故障诊断和性能调优。 prometheus.jpg 5)Grafana前端统一展示平台:grafana是一款开源的专业的数据展示工具,界面美观,好用。有很好的权限控制功能。目前Grafana对接了Zabbix系统、Permontheus、MySQL里面的数据。很好的补充了监控在数据展示方面的不足。之前通过grafana在获取一天以上的监控数据的时候特别慢,通过google优化了grafana参数,现在获取数据特别快,对于按照整个频道查看数据特别方便、好用。

6)第三方APM拨测监控:APM拨测主要使用第三方提供的LM在全国各地监控网站的性能和可用性。并用于第三方服务的评估和选型,比如IDC机房和CDN选型等,在评估CDN的时候主要关注图片打开的整体性能和可用性等指标,在评估IDC机房的时候主要评估下载速度、可用性、和网络丢包率和时延等指标。

总结:在多年的运维监控工作中,遇到过各种各样的问题。每次故障都会从发生故障的症状、原因、如何排查、如何解决、如何完善监控的思路进行。对系统和业务的关键性能指标有比较深入的研究。比如提到系统的性能瓶颈,redis集群的性能瓶颈、消息队列的性能瓶颈等等都会立即想到关键的指标并通过系统命令结合监控进行排查。后期将会继续学习k8s相关的知识, 对公司的整个业务生命周期进行完整的监控(底层硬件、系统、网络、中间件、日志、微服务、业务端调用等)。不断提高自己解决分析问题和解决问题的能力。