热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

监控ui_做了10年监控系统,有些经验想和你分享

前言都说监控系统是运维的第三只眼睛,因此一旦线上出问题,业务方第一反应是,监控系统有没有提前告警?是不是告警太多被淹没了&#

4da2257f46210f4caf344162b8f11c6f.gif

2058e23d3310f1af4e270b6eb11ed1b6.png

前言

都说监控系统是运维的第三只眼睛,因此一旦线上出问题,业务方第一反应是,监控系统有没有提前告警?是不是告警太多被淹没了?为啥没有把根因报出来?上面的三个质疑,相信做过监控的同学都会深有体会。我做了10年的监控,背锅不少,在2021年的第一天,我想跟你聊一聊我的一些心得。

什么是监控

做监控前,先问自己一个问题。监控的本质是什么?我的理解是测并实施制,监测并告警只是第一步,有效的控制才是根本。

0f2e17f1dc9189f6d85947ed92a1c19c.png

42818eff2ef284223da0bca3e018ea83.png

  • 数据采集:采集的方式有很多种,包括日志埋点进行采集(通过Logstash、Filebeat等进行上报和解析),JMX标准接口输出监控指标,被监控对象提供RESTAPI进行数据采集(如Hadoop、ES),系统命令行,统一的SDK进行侵入式的埋点和上报等。

  • 数据传输:将采集的数据以TCP、UDP或者HTTP协议的形式上报给监控系统,有主动Push模式,也有被动Pull模式。

  • 数据存储:有使用MySQL、Oracle等RDBMS存储的,也有使用时序数据库RRDTool、OpentTSDB、InfluxDB存储的,还有使用HBase存储的。

  • 数据展示:数据指标的图形化展示。

  • 监控告警:灵活的告警设置,以及支持邮件、短信、IM等多种通知通道。

所以做监控的最终目的是先于用户发现问题,提供有价值的告警,并闭环解决。

监控1.0

08年刚到WS的时候,CDN业务规模还很小,公司就几百台机器,监控项不到20种。当时过去的时候,阿贤已经把监控系统都搭得差不多了,基本能满足业务初期的监控需求,监测服务器的死活,服务状态异常squid/lighttpd/rsync/snmp。

ad3b7422abc6da8ab5c93b502ef58d9d.png

架构说明:

  • pingServer服务端部署在内网,它从CDN平台获取监控组及组对应的监控机,为监控机分配监控测试任务

  • wsPoller对测试任务进行远程测试,并根据测试结果产生报警发送至告警平台

  • 通过SNMPOID扩展增加监控的采集项

存在的问题:

  • 单点策告警,容易误报

  • wsPoller无法根据自身的网络、负载自动踢除

  • 机器性能监控缺失

  • 不支持本地采集

监控2.0

随着客户对服务质量的要求变高,监控1.0的弊端开始显露。09年初,我们决定开发监控2.0。

团队在研究完Nagios、Cacti、Zabbix开源系统后,发现这些系统在扩展性方面,告警运维值班便捷性上满足不了我司的运维需求。

苗辉是当时的leader,这家伙就喜欢自己折腾个东西出来,而我当时心里挺犹豫,有开源的不用,为啥要从0到1自己搞。只是这个家伙"吹牛"还是可以的,把老板说服了,带着4~5个应届生,我们就开干了。单单设计文档我们就整了100多页,方案来回讨论了有1个月,团队苦逼的搞了大半年,alpha版本终于上线了。

f2c2771c36b549360afd939c2dbc0c3e.png

架构说明:

  • wsmsagent——wsMS的数据收集接口;

  • MI——wsMS的数据中转加工站;

  • AL——wsMS的告警分析;

  • RRDS——wsMS的监控数据绘图引擎;

  • SCHEDULER——wsMS自动均衡的决策中心;

  • SCADA——wsMS的通用采集监测组件;

  • UI——展示界面。

监控3.0

这个系统线上运营了2年,2011年随着机器规模迅速增加到7K+,平台开始爆发出各种问题:

  • 机器增加到2万的时候,监控数据单表1天超过5亿条数据,复杂的SQL告警规则查询耗时太长;

  • 原始告警移到历史告警通过Insert和Delete,性能太低;

  • 通过数据持久化再分析生成告警,已经满足不了实时性的要求;

  • 复杂的告警规则通过SQL已经无法支持;

  • 新增一种采集类型的数据,都需要二次开发,成本较高;

  • 每天有2W+的告警,运维根本处理不过来;

  • 监控和告警数据很多,为什么还是有不少故障监控没有发现?

这个时候苗辉跑去百度了,我一个人压力山大。当时外部对监控不是很满意,告警刷屏时有发生。

2015年底我决定搞监控3.0,以构建立体化的监控体系为目标,将告警分层,覆盖从基础设施->组件->产品服务->客户业务的四层告警。自上而下做告警定位,由下而上确定告警影响范围。建立告警间的相互关联关系,当出现一个严重级别的告警时,能展示告警的影响范围。

架构图


c16cbefb9b5f72dcfaf855f2d3052b5f.png

调度系统


3a22e555ecd233ef435646e6865bd169.png

UI层:提供任务类型配置、任务分配结果查询,任务状态查询,组件状态查。2)由UI-master,UI-slave组成,利用LVS或NGNIX做主从。

任务调度层:根据原始任务状态,监控机状态,任务配置状态决策是否进行任务分配,通过zeroMQ向任务分配层发送分配任务2)同时定时向任务加载层发送任务加载任务3)有core-master,core-slave组成,利用zk或hzelcast做主从。

任务加载层:负责接收Core-master的加载任务,向外部系统获取原始任务,写入mysql

任务分配层:负责接收Core-master的分配任务,执行分配策略,将数据写入memcache

数据缓存层:memcahe缓存任务分配结果,cachedump定时将分配结果快照写入mysql

任务分发层:负责接收scada或其他采集客户端的请求,将任务分发给采集端

ZeroMQ:zeroMQ,消息队列,可自动实现负载均衡

Monitor:负责调度平台可视化数据维护,包含各组件的运行状态,任务加载,调度,分配,分发状态

ZK/hazelcast:分布式协调系统,用于core组件进行主备选举,机房内部署集群,设置iptable只允许同机房访问。

告警决策


c9fa5c23e3bd0fedac0f1578005e2caf.png

NodeCluster

消息生产集群,接入不同的数据源类型,生产待计算的原始消息。如接收sdn推送的监控采集数据,以每一行为一条计算数据提交。

MessageCluster

使用kafka消息中间件,暂存计算消息。实现数据的流式输入。

JstormCluster

核心计算集群,基于storm的java版本,改进HA问题和计算性能优化。

MonitorCluster

集群状态监控,负责进行集群内部的组件状态、topology计算状态的监控报警

ThorUI

UI作为实时计算平台的运营界面,主要任务是各个组件的运行状态收集、消息任务配置、监控报警展示、系统配置等。

数据库性能调优

在监控2.0阶段,监控数据是存储在MySQL,监控数据每天达到750G+,单表每天数据量10亿条,数据查询非常慢。我们对监控表做读写分离和水平分表看下测试的效果,但测试的结果让我们大失所望。

0e0b13a7cd8ce2e81f64de9ed03cfa4d.png

  • 读写分离和单实例的查询和更新响应时间没有太大的区别;

  • 通过mycat的水平分表,在大量数据下有优势,但小量数据则无优势。所谓大量数据,表内数据最好在千万级别以上,插入量最好在百万级别以上。

上述两个方案行不通,我们决定采用第3种方案,表分区方案。即以5分钟为一分区,根据每个监控对象实际需求创建分区数,由crontab脚本定时执行,执行时根据总时长、监控数据保留时长、当前时间,数据计算出要删除的分区,truncate分区数据。表分区方案将delete和load、select隔离在不同分区,减少delete对load、select的影响。通过一段时间的测试,发现测试效果还是不错的,比之前有一定幅度的提升。

5562cb465e7d991580df501c038ee2fd.png

如何基于开源快速搭建一个监控系统

1.zabbix

如果你的公司机器规模少于1000台,没有用到K8S,告警逻辑也不复杂,那推荐你用zabbix,基本能满足企业内部普通的IT运维。

6c703ad31a649e335c08b20da59ccfb9.png


2.Prometheus+Clickhouse

如果你的公司机器规模大于5000台,并且是通过容器化编排部署,告警逻辑也较为复杂,推荐Prometheus+Clickhouse。可参考之前的文章。

8a6b5f7a0ff2f5e3ae5467712d1890f0.png


3.Prometheus+Telegraf+influxdb

Telegraf是实现数据采集‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍的工具。Telegraf 具有内存占用小的特点,通过插件系统开发人员可轻松添加支持其他服务的扩展。在平台监控系统中,可以使用 Telegraf 采集多种组件的运行信息,而不需要自己手写脚本定时采集,大大降低数据获取的难度。

dfc3f028f5c588f4a19806b5676cbc03.png

总结

最后,我总结出来做好监控很重要的4个点:

  • 一定要建立体系化的监控告警平台,确定监控scope,避免成为“背锅侠”。

  • 监控不只是运维的事,研发设计要把组件监控纳入进来。

  • 监控越往前做越有效,等到组件上线运营后再补充的代价是极高的。

  • 监控发展的必经之路,少->全->精,要避免告警风暴,做到精准。

    23ffc9c42f0795af6406775682ad0c08.png

50e336e9bce51aef0d908a9b634fb295.gif

简介 

基哥,座标厦门,目前专注运维架构,DevOps的落地实践。欢迎添加我的微信号(hongdiji)一起学习交流。

c69d3e0029ff72fc64225d1652567912.png

长按扫码关注

一个在看,小编会开心一整天...128895f0ae5a72dc5b13392ac235ba57.png



推荐阅读
  • TiDB | TiDB在5A级物流企业核心系统的应用与实践
    TiDB在5A级物流企业核心系统的应用与实践前言一、业务背景科捷物流概况神州金库简介二、现状与挑战神州金库现有技术体系业务挑战应对方案三、TiDB解决方案测试迁移收益问题四、说在最 ... [详细]
  • 云原生应用最佳开发实践之十二原则(12factor)
    目录简介一、基准代码二、依赖三、配置四、后端配置五、构建、发布、运行六、进程七、端口绑定八、并发九、易处理十、开发与线上环境等价十一、日志十二、进程管理当 ... [详细]
  • flowable工作流 流程变量_信也科技工作流平台的技术实践
    1背景随着公司业务发展及内部业务流程诉求的增长,目前信息化系统不能够很好满足期望,主要体现如下:目前OA流程引擎无法满足企业特定业务流程需求,且移动端体 ... [详细]
  • Oracle优化新常态的五大禁止及其性能隐患
    本文介绍了Oracle优化新常态中的五大禁止措施,包括禁止外键、禁止视图、禁止触发器、禁止存储过程和禁止JOB,并分析了这些禁止措施可能带来的性能隐患。文章还讨论了这些禁止措施在C/S架构和B/S架构中的不同应用情况,并提出了解决方案。 ... [详细]
  • 从Oracle安全移植到国产达梦数据库的DBA实践与攻略
    随着我国对信息安全和自主可控技术的重视,国产数据库在党政机关、军队和大型央企等行业中得到了快速应用。本文介绍了如何降低从Oracle到国产达梦数据库的技术门槛,保障用户现有业务系统投资。具体包括分析待移植系统、确定移植对象、数据迁移、PL/SQL移植、校验移植结果以及应用系统的测试和优化等步骤。同时提供了移植攻略,包括待移植系统分析和准备移植环境的方法。通过本文的实践与攻略,DBA可以更好地完成Oracle安全移植到国产达梦数据库的工作。 ... [详细]
  • Django + Ansible 主机管理(有源码)
    本文给大家介绍如何利用DjangoAnsible进行Web项目管理。Django介绍一个可以使Web开发工作愉快并且高效的Web开发框架,能够以最小的代价构建和维护高 ... [详细]
  • 本文介绍了Java工具类库Hutool,该工具包封装了对文件、流、加密解密、转码、正则、线程、XML等JDK方法的封装,并提供了各种Util工具类。同时,还介绍了Hutool的组件,包括动态代理、布隆过滤、缓存、定时任务等功能。该工具包可以简化Java代码,提高开发效率。 ... [详细]
  • 如何用UE4制作2D游戏文档——计算篇
    篇首语:本文由编程笔记#小编为大家整理,主要介绍了如何用UE4制作2D游戏文档——计算篇相关的知识,希望对你有一定的参考价值。 ... [详细]
  • 使用Ubuntu中的Python获取浏览器历史记录原文: ... [详细]
  • 本文讨论了在数据库打开和关闭状态下,重新命名或移动数据文件和日志文件的情况。针对性能和维护原因,需要将数据库文件移动到不同的磁盘上或重新分配到新的磁盘上的情况,以及在操作系统级别移动或重命名数据文件但未在数据库层进行重命名导致报错的情况。通过三个方面进行讨论。 ... [详细]
  • Linux如何安装Mongodb的详细步骤和注意事项
    本文介绍了Linux如何安装Mongodb的详细步骤和注意事项,同时介绍了Mongodb的特点和优势。Mongodb是一个开源的数据库,适用于各种规模的企业和各类应用程序。它具有灵活的数据模式和高性能的数据读写操作,能够提高企业的敏捷性和可扩展性。文章还提供了Mongodb的下载安装包地址。 ... [详细]
  • mysql-cluster集群sql节点高可用keepalived的故障处理过程
    本文描述了mysql-cluster集群sql节点高可用keepalived的故障处理过程,包括故障发生时间、故障描述、故障分析等内容。根据keepalived的日志分析,发现bogus VRRP packet received on eth0 !!!等错误信息,进而导致vip地址失效,使得mysql-cluster的api无法访问。针对这个问题,本文提供了相应的解决方案。 ... [详细]
  • 在Oracle11g以前版本中的的DataGuard物理备用数据库,可以以只读的方式打开数据库,但此时MediaRecovery利用日志进行数据同步的过 ... [详细]
  • 背景应用安全领域,各类攻击长久以来都危害着互联网上的应用,在web应用安全风险中,各类注入、跨站等攻击仍然占据着较前的位置。WAF(Web应用防火墙)正是为防御和阻断这类攻击而存在 ... [详细]
  • 一次上线事故,30岁+的程序员踩坑经验之谈
    本文主要介绍了一位30岁+的程序员在一次上线事故中踩坑的经验之谈。文章提到了在双十一活动期间,作为一个在线医疗项目,他们进行了优惠折扣活动的升级改造。然而,在上线前的最后一天,由于大量数据请求,导致部分接口出现问题。作者通过部署两台opentsdb来解决问题,但读数据的opentsdb仍然经常假死。作者只能查询最近24小时的数据。这次事故给他带来了很多教训和经验。 ... [详细]
author-avatar
射手座的双子55
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有