您当前的位置:首页 > 电脑百科 > 网络技术 > 网络技术

监控系统设计

时间:2020-06-28 16:01:00  来源:  作者:

每日优鲜监控系统早期情况

系统覆盖不全

每日优鲜早期只有交易平台存在一套内部的业务监控系统,没有推广到全公司级别。大数据团队与自己的业务监控,运维团队有自己的基础监控。除了交易系统其他业务线的业务监控几乎为零,很多时候都是用户告知我们出问题了,而不是我们主动发现出问题了,导致问题发现的时候已经过去很久了。

监控类型不完善

监控内容主要是涉及日志中出现的数据统计,所以对PV、UV、JVM相关监控都没有,尤其对自身业务的监控几乎为零,我们无法实时的知道当前接口的访问量,错误率等信息;除此之外我们依赖的zookeeper、mq、redis、数据库等中间件的监控也基本没有,所以很难做到深入的排查。不过好在有一套pinpoint可以帮助故障和性能定位。但是这并不能代替业务监控。

监控系统选型和实现

选型

要实现一套监控系统,必须要保证数据的收集、存储和可视化,然后在基于此实现一套告警系统,最终实现数据的可视化与问题的触达。

可视化选型

在做监控系统选型的时候,最优先定下来的是可视化,即Grafana这套开源产品,因为其支持多数据源,同时也支持告警规则,除此之外其提供了一套完备的API,我们通过程序调用其API实现了监控数据可视化的自动化流程。

存储选型

第二个定下来的是存储系统,监控的数据基本都带有时序性,所以我们自然而然的朝着时序数据库(TSDB)方向进行选型。最终定下来的存储有两种:存储业务监控数据的OpenTSDB和存储中间件监控数据的Prometheus。

 

选择OpenTSDB的原因在于我们的业务数据需要长期保留,比如我们现在业务的监控数据已经存储了一年,大家可以轻易的查到​5.17​,​6.18​的历史大盘数据。

 

中间件等监控数据不需要保留太长时间,所以单独的采用了另一套存储Prometheus的TSDB,为什么选择它的,原因是Prometheus扩展性非常高,通过相关的exporter可以快速的开发一套针对性的中间件监控,同时社区也已经支持了很大一部分的中间件的exporter(收集服务暴露监控数据接口)。

数据收集

监控数据的收集从两方面做的,一方面是提供内存埋点的方式,即我们提供的monitor包,另一方面为了接入了老监控系统能够平滑迁移到新的监控系统上来,我们支持了基于日志的统计,可以统计pv、异常等信息。

 

日志收集也兼容原来的方案,即采用flume进行日志采集,kafka进行日志传输,日志统计系统进行日志数据消费、统计。

告警系统

为了方便与自研的监控系统实现自动化接入以及与现有的组织人员接入,对告警系统做了自研。

 

告警系统自动化接入: 业务接入监控,如果该业务在应用中心已经注册存在,那么监控系统在第一次收到业务发送的监控数据时,会调用告警平台接口创建告警应用,同时告警平台会根据App_code从应用中心拉取该app_code下所有相关研发人员,全程自动化。

 

灵活性: 告警平台除了自动化接入,也可以手动接入告警,手动维护告警人员,对外提供了告警接口,业务方可以根据自己的需求接入告警发送、消息通知等功能。

 

告警方式: 在告警系统上线之初支持短信、邮件、电话三种告警方式,去年年前紧急接入了lark,实现了第一版lark告警功能的接入,到现在告警平台已经对接了多个lark机器人,同时实现了群机器人的告警消息推送。

 

监控系统的架构

监控系统设计

 

监控系统的实现

业务监控

业务监控采用sdk和日志收集两种方式进行统计上报,其中monitor中内置了对数据库连接池的监控、JVM监控、dubbo提供者调用监控、dubbo消费监控等。

对于JVM监控采用内置的ManagementFactory获取

Dubbo和Http接口的pv和异常监控均采用拦截器的方式,直接集成在monitor中。

机器监控

机器监控的基础数据来源于运维团队的Prometheus,通过业务监控上报上来的机器IP拼接PromQL,并将机器的监控与业务监控的大盘集成,业务可以在业务监控大盘中看到自己的应用的资源使用情况。

中间件监控

中间件监控分为两种方式,早期的redis管理平台和rocketmq各自基于monitor sdk实现了自己的监控埋点,走的路线跟业务监控相同。

监控系统自身依赖的组件,如hdfs、kafka、opentsdb等直接采用prometheus exporter进行收集,组件内部维护了一组exporter。

监控图像自动生成

为了监控接入的便捷性,我们实现了监控大盘的自动生成,根据monitor内置的相关埋点进行默认的监控数据上报,如JVM、Dubbo、Http等。通过这些上报数据拼接JSON,同时调用Grafana的创建Dashboard的API接口,自动创建Dashboard,大致流程如下:

监控系统设计

 

机器的核心指标(cpu、内存、磁盘、带宽),通过应用上报的指标信息中的host tag,生成promql,通过promql从运维的prometheus数据源中获取,自动添加到大盘监控中。

 

监控接入全程自动化

为了方便业务快速接入监控,我们除了对监控自动生成大盘之外,还做了其他的处理,监控系统接入全程自动化,自动化过程如下图所示:

监控系统设计

 

  1. 监控数据网关触发安装filebeat流程,调用ocean平台的接口进行filebeat推送安装,实现wf日志的收集。
  2. 调用告警平台实现大盘对应的告警创建,告警平台根据监控数据网关推送的应用名从应用中心拉取该应用下的相关开发人员,实现告警的自动化设置。
  3. 监控大盘生成,通过业务推送的监控指标数据和告警地址拼接大盘模板,然后调用Grafana的接口实现界面的自动化创建和更新。
  4. 监控数据网关调用异常网关,实现异常网关对wf日志的top5日志统计
  5. 监控数据网关调用日志统计,实现wf的error和warning的pv统计以及异常统计

监控系统的推广历程

对监控埋点的认知

最开始推监控的时候大家对埋点的认知还比较浅,所以主要是通过日志方式进行接入,对埋点存在抵触心理。

监控系统分享

监控系统在一次分享大会上做过相关分享,主要分享通用的监控系统的架构是什么样,我们的Monitor监控实现是什么样,支持了哪些功能。

在分享会上再一次重点的宣讲了一下埋点的重要性,因为只有业务人员对自己所负责的业务最熟悉,所以为了方便第一时间发现问题,以及对自己的业务有全局的监控,那么就需要手动去埋点。以登陆功能为例,我们需要在登陆操作的每一步做埋点,我们需要知道登陆成功的pv,失败的pv,是什么原因失败,失败比例各占多少。

 

监控系统方面做的改进

Grafana改造

指标分组

指标分组主要是为了方便大家快速定位自己的埋点位置,比如我们有一组与用户登陆相关的埋点数据,埋点指标名称统一为UserLogin_前缀,那么在上报之后我们会自动进行分组,将UserLogin_xxx分到同一组下。为了快速定位一组埋点,对Grafana前端进行大盘进行了拆解显示,可以通过下拉的方式选择自己的埋点指标组,然后会过滤掉无用的展示,只展示该指标组下的内容。

监控系统设计

 

指标搜索

Grafana Git上很多人都对指标查询这个功能有需求,不过官方没有打算做,随着业务指标数量的递增,排查起来非常麻烦,为此,除了可以通过指标分组功能来实现过滤之外,还对指标搜索功能做了实现,可以通过搜索具体的指标来查看具体的单个指标。

监控系统设计

 

分时段告警

不同时段的指标的数据、趋势是不同的,有些业务基本上晚上都没有什么量,为了使得告警更准确,实现了第一版的单时段告警,可以实现在指定时间段内才会对指标进行监控。

这种方式已经满足了大部分的场景,但是业务是多样性的,指标数据、趋势也存在多样性。因此实现了第二个版本,分时段、分策略告警。咋不同时间段可以配置不同的告警策略,从而使得告警更加准确,更加的人性化。

监控系统设计

 

同环比

Grafana的指标图根据不同的数据类型,配置、查询方式等都不相同,Grafana的OpenTSDB数据源前端指标图默认无法将不同时间段的数据放在同一个指标图上,为了增加同环比的功能,对OpenTSDB的查询模块在前端做了扩展。做法如下:

  1. 对指标查询做标记,标记是否为同环比查询
  2. 查询时对时间进行计算
  3. 渲染前对时间进行计算
  4. 最终达到将不同时间段的数据展示在同一个指标图上。
监控系统设计

 


监控系统设计

 

告警分布式

Grafana官方的告警策略是不支持分布式的,因此扩展了其分布式告警的功能。

第一版分布式告警

在告警配置数量还在上百个、上千个的时候。在这个阶段,直接在数据库中加了一张锁表,用来处理分布式告警,发送告警前先获取锁,获取成功则继续发送,如果获取失败,取消告警的发送,即谁拿锁谁发送。同时引入了锁检查的任务。

第二版分布式告警

随着接入的应用和指标数达到了一定的量级,配置的告警策略也翻了好几倍,数据库实现的锁表出现一定的瓶颈。因此换了第二版本的实现,即对查询的告警策略数据进行拆分,每个节点跑一部分,实现分布式告警。

 

告警平台

告警回执、告警统计

针对告警信息做了定制化,添加告警回执、告警处理等功能,实现告警跟踪、溯源。

监控系统设计

告警回执

异常日志报出来

直接将出错内容通过告警发出来,业务方可以快速定位问题。默认取出现频率较高的top5异常。

监控系统设计

异常推送

监控系统未来方向

当前监控系统数据收集方面还是分钟级别,机器指标是十秒级别,无法发现峰值的qps,因为接下来的方向考虑加入秒级监控,实现分钟和秒级监控的灵活切换,需要的时候开通秒级监控,平时使用分钟级监控即可,当然,因为秒级监控很耗费性能,所以也可能单独的在谛听平台去做。

引入AI算法,对历史数据进行分析、趋势分析,实现告警的智能化,提前预知告警,防患于未然。

此外当前可观测技术已经越发趋于成熟,Metric、Logging、Tracing逐渐走向统一,三者可以相互跳转、帮助研发快速定位问题,也是我们值得思考的方向,当然我们现在也在逐步的将三者通过一些手段串联起来,加快问题的定位能力。



Tags:监控系统   点击:()  评论:()
声明:本站部分内容及图片来自互联网,转载是出于传递更多信息之目的,内容观点仅代表作者本人,如有任何标注错误或版权侵犯请与我们联系(Email:2595517585@qq.com),我们将及时更正、删除,谢谢。
▌相关推荐
监控系统硬盘怎么选择?常见的有绿盘、蓝盘、紫盘、黑盘、红盘分别代表了什么?有哪些不同呢?今天我们就来聊聊这个话题。在监控安装过程中,录像存储大多都是采用监控硬盘存储的。...【详细内容】
2021-09-22  Tags: 监控系统  点击:(180)  评论:(0)  加入收藏
Prometheus 是一款基于时序数据库的开源监控告警系统,说起 Prometheus 则不得不提 SoundCloud,这是一个在线音乐分享的平台,类似于做视频分享的 YouTube,由于他们在微服务架构的...【详细内容】
2021-08-26  Tags: 监控系统  点击:(59)  评论:(0)  加入收藏
一、手机APP远程监控PLC的意义: 随着网络技术和智能手机快速发展,远程通过手机APP对设备系统的控制单元PLC的运行进行远程预警监控的技术已经非常成熟。基于手机APP的PLC远程...【详细内容】
2021-08-25  Tags: 监控系统  点击:(116)  评论:(0)  加入收藏
监控系统在这里特指对数据中心的监控,主要针对数据中心内的硬件和软件进行监控和告警。企业的 IT 架构逐步从传统的物理服务器,迁移到以虚拟机为主导的 IaaS 云。无论基础架构...【详细内容】
2021-07-12  Tags: 监控系统  点击:(183)  评论:(0)  加入收藏
前言在GitHub上发现一个好玩的项目,不用安装其它任何依赖包,只要运行一个Python脚本就可以在局域网构建一个视频监控系统。果断试了一下,确实挺好玩的,现在分享给大家。 搭建方...【详细内容】
2021-03-16  Tags: 监控系统  点击:(172)  评论:(0)  加入收藏
WGCLOUD-v3.3.0更新说明,2021-01-261.新增,进程管理新增流量(读取/写入)指标2.新增,主机所有网卡流量(接收/发送)指标3.新增,数据源连接恢复后,发送恢复通知4.新增,win监控主机支...【详细内容】
2021-01-28  Tags: 监控系统  点击:(187)  评论:(0)  加入收藏
一、LibreNMS简单介绍LibreNMS是一款开源的,功能强大且功能丰富的自动发现的网络监控系统,基于PHP,使用SNMP协议。它支持广泛的操作系统,包括Linux,FreeBSD以及思科,Juniper,Broca...【详细内容】
2021-01-12  Tags: 监控系统  点击:(389)  评论:(0)  加入收藏
前言:大家好,我是薛哥。最近有很多读者咨询我,关于监控系统中IP地址如何选择?如何分配的问题,今天给一些刚入行的新人来讲解一些这方面的问题,分为三种情况,分包为小型的监控系统、...【详细内容】
2020-10-28  Tags: 监控系统  点击:(122)  评论:(0)  加入收藏
web项目性能很重要,开发迭代过程中难免会有所忽视,性能会伴随产品的迭代而有所衰减。特别在移动端,网络一直是一个很大的瓶颈,而页面却越来越大,功能越来越复杂。并没有简单的几...【详细内容】
2020-08-26  Tags: 监控系统  点击:(691)  评论:(0)  加入收藏
在DevOps和SRE流行的今天,在开发可靠性或实施DevOps实践时,企业决策的核心是统计数据。而企业数据信息中最重要的一环就是线上业务的监控信息,如果没有业务运行时间,网络负载和...【详细内容】
2020-08-10  Tags: 监控系统  点击:(54)  评论:(0)  加入收藏
▌简易百科推荐
写一个shell获取本机ip地址、网关地址以及dns信息。经常会遇到取本机ip、网关、dns地址,windows一个命令ipconfig /all全部获取到,但linux系统却并非如此。linux系统都自带ifc...【详细内容】
2021-12-27  K佬食古    Tags:shell   点击:(1)  评论:(0)  加入收藏
步骤1、配置 /etc/sysconfig/network-scripts/ifcfg-eth0 里的文件。it动力的CentOS下的ifcfg-eth0的配置详情:[root@localhost ~]# vim /etc/sysconfig/network-scripts/ifc...【详细内容】
2021-12-24  忆梦如风    Tags:网卡   点击:(9)  评论:(0)  加入收藏
1、查找当前目录下所有以.tar结尾的文件然后移动到指定目录find . -name “*.tar” -execmv {}./backup/ ;注解:find –name 主要用于查找某个文件名字,-exec 、xargs可...【详细内容】
2021-12-17  郭主任    Tags:运维   点击:(19)  评论:(0)  加入收藏
对于经常上网的朋友来说,除了手机购物上网,pc端玩网页游戏还是很多小伙伴首选的,但是有时候明明宽带链接上了,打开浏览器却出现上不了网的现象,下面小编要来跟大家说说电脑有网络...【详细内容】
2021-12-16  小白系统    Tags:网页无法打开   点击:(28)  评论:(0)  加入收藏
在访问像github、gitlab这样的外国网站时,很有可能会出现页面加载不出来或找不到页面的错误。这时候有的朋友就会以为是网络的问题,于是把Wifi断掉连上自己手机的热点,结果却还...【详细内容】
2021-12-15  启施技术IT狼叔    Tags:外网   点击:(14)  评论:(0)  加入收藏
网络地址来源:获取公网IP地址 https://ipip.yy.com/get_ip_info.phphttp://pv.sohu.com/cityjson?ie=utf-8http://www.ip168.com/json.do?view=myipaddress...【详细内容】
2021-12-15  韦廷华12    Tags:外网ip   点击:(14)  评论:(0)  加入收藏
准备好软件IPOP、用ENSP模拟一下华为交换机 启动交换机 <Huawei>sysEnter system view, return user view with Ctrl+Z.[Huawei]sysname FTPClient[FTPClient]interface vla...【详细内容】
2021-12-15  思源Edward    Tags:交换机   点击:(22)  评论:(0)  加入收藏
我们经常用到netstat命令查看主机连接状况,包括连接ip、端口、状态等,今天就练习下shell分析netsat结果。描述假设netstat命令运行的结果我们存储在nowcoder.txt里,格式如下:Pro...【详细内容】
2021-12-14  K佬食古    Tags:netstat   点击:(19)  评论:(0)  加入收藏
什么是滑动窗口?窗口是操作系统开辟的一块缓存空间,发送方在收到接收方ACK应答之前,必须在缓冲区保留已发送的数据,如果按期收到确认应答,数据就可以从缓冲区移除。什么是滑动窗...【详细内容】
2021-12-14  DifferentJava    Tags:TCP   点击:(28)  评论:(0)  加入收藏
概述日常管理华为路由设备过程中,难为会忘记设备登录密码,那么该如何重置设备登录密码吗?本期文章将全面向各位小伙伴总结分享。重置华为设备登录密码思路先行 采用console登录...【详细内容】
2021-12-10  onme0    Tags:   点击:(27)  评论:(0)  加入收藏
最新更新
栏目热门
栏目头条