基于夜莺快速构建日志告警平台
共 2550字,需浏览 6分钟
·
2022-10-15 12:54
在收集到日志之后,我们通常会有下面几类基于日志做告警的需求:
统计日志中的 ERROR 关键字出现次数,超过阈值则发出告警; 从网关日志中提取服务接口的 QPS,出现较大波动则发出告警; 从网关日志中提取服务接口的延迟,延迟太高则发出告警;
我们可以基于夜莺的的整体流程,快速构建一个日志告警平台来满足上述的需求,本文从产品设计,架构设计,代码实现三个方面,来介绍如何基于夜莺来构建日志告警平台。为了满足大家的好奇心,我们来先看一张效果图,下图是告警历史详情页的截图。
产品设计
通过前文的介绍,我们的需求已经比较明确了,将应用的日志收集起来,在平台上配置告警规则,根据配置的规则触发告警通知,收到通知之后,我们在页面上可以看到和告警数据相关的日志原文,便于快速定位问题。
夜莺监控已经支持了告警规则配置页面和告警详情查看页面,所以我们可以直接复用这两个页面。当收到告警通知,点击到告警详情页时,夜莺目前的告警详情页只有查看时序数据的能力,没有查看日志原文的能力,所以还需要增加在详情页查看日志原文的能力。所以为了支持日志告警能力,在产品层面我们需要对夜莺的两个页面(告警规则页面、告警历史详情页面)进行改造。
架构设计
产品设计确定之后,我们来进行架构设计,首先看一下夜莺已有的能力
n9e-webapi 提供各种配置管理、即时数据查询、告警历史详情查看的能力 n9e-server 提供同步规则、查询数据、产生异常点、生成告警事件、告警屏蔽、告警订阅、告警通知的能力。
如果要增加日志告警能力,我们可以发现在产生异常点之后,n9e-server 后续的一系列能力是可以复用的,所以我们可以得到下面的架构图
从上图我们可以发现,日志告警模块只要实现下面4个功能即可:
同步告警规则; 从日志中提取 metric 数据和原文; 根据规则判断数据是否异常; 异常点发送给 n9e-server;
搞清楚要做什么事情之后,下面我们要开始动手写代码了。
代码实现
本小节主要是介绍日志告警模块代码实现的思路,我们可以开发一个独立的模块,主要是实现下面四个功能。
同步告警规则
我们可以通过定期查询 n9e-webapi 提供的 api 来同步告警规则,同步逻辑可以参考 n9e-server 模块 https://github.com/ccfos/nightingale/blob/main/src/server/memsto/alert_rule_cache.go 的逻辑,将从数据库查询,改成从 api 获取即可。
日志中查询 metric 数据和原文
Elasticsearch 提供了 bucket aggregations[1] 和 metric aggregations[2] 的 api,通过这两个 api ,我们可以根据查询条件查到对应的 metric 数据。通过 es 的 search api,我们可以根据查询条件查到日志原文。
根据规则判断数据是否异常
这个功能可以参考 n9e-server 的告警规则判断逻辑,代码在 https://github.com/ccfos/nightingale/blob/main/src/server/engine/worker.go loopFilterRules() 定期获取规则,然后生成异常点检测任务,Work() 实现了产生异常点的功能。
异常点发送给 n9e-server
n9e-server 提供了接收异常点然后产生告警事件的接口,产生异常点之后,我们把异常点 push 给 n9e-server 的 api[3] 即可,之后的告警事件处理流程,全部由 n9e-server 来负责。
最终效果
通过夜莺日志告警插件,我们可以在夜莺平台,实现日志场景下的监控告警体系建设。
One more thing
快猫星云技术团队已经实现了夜莺日志告警这个模块,如果您在使用夜莺监控,遇到了 Metric 监控覆盖不到的场景,需要对日志进行监控告警,可以点击阅读原文链接购买试用,团队版首次试用费用只需 29 元, 感兴趣的可以用起来:)
关于快猫星云
快猫星云,一家云原生智能运维科技公司,秉承着让监控分析变简单的初心和使命,致力于打造先进的云原生监控分析平台,结合人工智能技术,提升云原生时代数字化服务的稳定性保障能力。快猫星云团队是开源项目夜莺监控的主要贡献者、项目管理委员会核心成员。
关于夜莺监控
一款开源云原生监控分析系统,采用 All-In-One 的设计,集数据采集、可视化、监控告警、数据分析于一体,与云原生生态紧密集成,提供开箱即用的企业级监控分析和告警能力,已有众多企业选择将 Prometheus + AlertManager + Grafana 的组合方案升级为使用夜莺监控。夜莺监控,由滴滴开发和开源,并于 2022 年 5 月 11 日,捐赠予中国计算机学会开源发展委员会(CCF ODC),为 CCF ODC 成立后接受捐赠的第一个开源项目。
夜莺监控项目文档站点:https://n9e.github.io 欢迎大家在 github 上 star 夜莺项目:https://github.com/ccfos/nightingale 加入夜莺交流社群请添加微信:flashcats
参考资料
bucket aggregations: https://www.elastic.co/guide/en/elasticsearch/reference/current/search-aggregations-bucket.html
[2]metric aggregations: https://www.elastic.co/guide/en/elasticsearch/reference/current/search-aggregations-metrics.html
[3]api: https://github.com/ccfos/nightingale/blob/main/src/server/router/router.go#L106