史上最简单的日志告警方案,没有之一
如果你在意生产环境的稳定性,希望自己的服务出问题时及时发现,大概率就有日志监控告警的需求,比如发现日志中有 Error 或 Exception 关键字就告警,比如通过日志统计某个服务的 95 分位延迟数据,延迟过高就告警,比如通过日志统计某个服务的 status code,出现多个 5xx 就告警,等等。
日志可能存储在 ElasticSearch、Loki、ClickHouse 等系统中,告警系统的核心逻辑也比较清晰,就是根据用户配置的查询语句,周期性查询这些存储,并对查询结果做阈值判定,如果达到阈值就触发告警。比如统计 5 分钟内出现的 Error 数量,如果大于 10 就告警。
市面上提供日志告警的产品也有不少,比如 Elastalert、Grafana、FlashDuty 等,其中 FlashDuty 是最省事的,SaaS 产品,直接用就好,不需要自己搭建和维护。下面我以 FlashDuty 为例,介绍如何配置日志告警。
FlashDuty 是一个告警事件中心,其产品介绍地址:https://flashcat.cloud/product/flashduty/ 。核心提供两个能力:1)告警事件中心,可以把夜莺、Zabbix、Prometheus、云监控、蓝鲸等各类监控系统的告警汇聚在一个地方,做统一的告警收敛、聚合降噪、排班、认领、升级、派发、协作;2)FlashDuty 也直接提供告警引擎的能力,可以对接 VictoriaMetrics、M3DB、Prometheus、ClickHouse、MySQL、Oracle、Postgres、Loki、ElasticSearch 等数据源,直接查询数据源的数据做告警判定,不需要额外的监控系统,告警事件的产生和分发,FlashDuty 一肩挑。
1. 注册账号
首先需要免费注册一个 FlashDuty 账号,注册地址:https://console.flashcat.cloud/。注册之后会引导你自动创建一个协作空间,用于接收各类监控系统的告警事件,根据引导下一步下一步就行。这个是免费的,自动会有 14 天全功能试用期,如果到期了,手工转成免费套餐也可以继续使用。
2. 安装告警引擎
FlashDuty 做告警判定的组件称为告警引擎,需要安装在你的数据中心,最好是和要监控的日志库在同一个数据中心,这样可以减少网络延迟。从这里获取安装命令,一行命令搞定:
3. 配置数据源
以 ElasticSearch 举例,你的 ElasticSearch 的地址在哪里,得告诉 FlashDuty,配置为内网 IP 就行,虽然 FlashDuty 是 SaaS 的,但是告警引擎部署在你的数据中心,实际查询数据做告警判定都是由告警引擎完成的,所以数据源的地址配置为告警引擎可以访问的地址,我配置了一个 ElasticSearch 数据源,如下图所示:
4. 配置告警规则
现在就可以配置告警规则了,告警规则未来可能会有很多,这里使用树形分组做分门别类的管理。在告警规则管理页面,右键创建一个节点:
然后在这个节点下创建告警规则就可以了。我给大家举两个例子,一个是统计某个服务 5 分钟内出现的 Error 数量,如果大于 0 就告警,另一个是统计某个服务的 95 分位延迟,超过 500 毫秒就告警。
- 1、选择数据源类型,目前支持 Prometheus Like、ElasticSearch、Loki、ClickHouse、Oracle 等多种数据源类型,这里选择 ElasticSearch。
- 2、数据源,选择上一步配置的 ElasticSearch 数据源,支持通配符,我这里直接写成了
*
,表示生效到所有 ElasticSearch 数据源。 - 3、查询语句,ElasticSearch 支持 DSL 和 SQL 两种查询方式,目前版本支持的是 SQL 查询方式,后面再解释这个 SQL 的含义。
- 4、SQL 语句查询到的结果是一个二维表格,具体哪一列是监控数值,哪一列是作为标签,是需要我们告诉 FlashDuty 的,在标签字段、值字段这里配置。
- 5、告警阈值评估表达式,上例中配置的是 A 这个查询语句得到的结果,只要大于 0 就告警。
select count(*) as error_total from "app_a_*" where "@timestamp" > now() - INTERVAL 5 MINUTES and log_level = 'ERROR'
这个 SQL 语句的含义是:统计 5 分钟内,所有 app_a_* 开头的索引中,log_level 字段为 ERROR 的日志数量。
SQL 里放置 Table Name 的地方,写索引名,支持通配符,"@timestamp" > now() - INTERVAL 5 MINUTES
表示查询最近 5 分钟内的数据,now()
函数大家应该不陌生,INTERVAL 5 MINUTE
表示 5 分钟的时间区段,我的日志里表示时间的字段是 @timestamp
,因为是 @
开头的,比较特殊,用双引号括起来了,log_level 是日志中的某个字段,使用这个字段做过滤,只统计 ERROR 级别的日志。如果想直接统计日志原文中的关键字,也可以使用 log_message like '%ERROR%'
这样的语法。或者使用 MATCH 函数、QUERY 函数,跟 Kibana 里查询是一个道理。
更多匹配函数可以参考 ElasticSearch 官网文档:
https://www.elastic.co/guide/en/elasticsearch/reference/7.17/sql-functions-search.html
再给大家举个例子,统计某个服务的 95 分位延迟,如果超过 500 毫秒就告警,SQL 语句如下:
select PERCENTILE(request.request_time, 95) as "p95" from "log_restful__20*" where "@timestamp" > now() - INTERVAL 2 MINUTES
我的日志中 request.request_time
这个字段表示延迟数据,PERCENTILE 是分位函数,95 表示 95 分位,log_restful__20*
是索引名,我这个索引的命名有点奇葩,大家忽略,知道是怎么回事就行,我的原始数据长这样:
上图是在 Nightingale 里查询的日志原文。里边可以看到 request.request_time
字段。
5. 配置事件分发方式
告警规则最下面,有个配置叫【事件推送给 FlashDuty 的协作空间】,配置成你的协作空间就行,这样告警事件就会推送到你配置的协作空间,你就可以在协作空间里看到告警事件了。当然,你也可以做更精细化配置,不同的告警分发给不同的值班人,以及告警降噪的配置等等,这里就不展开了,入口在下面位置(某个协作空间的详情页面)。
总结
如上,我们演示了使用 FlashDuty 做日志告警的全流程,FlashDuty 的告警引擎功能当前是公测阶段,可以免费使用。注册地址:https://console.flashcat.cloud/。
欢迎加我好友,交流可观测性相关话题或了解我们的商业产品,我的微信号:picobyte
,加好友请备注您的公司、姓名、来意 🤝
扩展阅读:

低调大师中文资讯倾力打造互联网数据资讯、行业资源、电子商务、移动互联网、网络营销平台。
持续更新报道IT业界、互联网、市场资讯、驱动更新,是最及时权威的产业资讯及硬件资讯报道平台。
转载内容版权归作者及来源网站所有,本站原创内容转载请注明来源。
- 上一篇
Zabbix7.0 beta1发布,性能提升、架构优化等新功能抢先看
点击立即试用Zabbix7.0beta1 Zabbix7.0 beta 1 于1月30日发布!(正式版将于第一季度发布。) 7.0有什么新功能?本文一睹为快。 Zabbix7.0 聚焦于帮助用户通过性能优化和功能升级来快速响应业务需求,从而满足客户的高期望值,并提升IT 运维人员的生产力。在可扩展性与性能、稳定性与高可用、可观测性几个领域获得持续提升。 一、性能提升之异步数据采集 1.各进程配置参数说明 2.异步数据采集效果 二、架构优化之Zabbix Proxy高可用和负载均衡 1.主机如何分配给Zabbix Proxy group监控 2.高可用和负载均衡机制 3.Zabbix Agent参数配置 三、性能提升之Zabbix Proxy内存缓存 1.缓存模式设置 2.缓存模式差异 四、功能优化之监控项级别Timeout 五、性能提升之并行网络自动发现 六、功能优化之数据推送 七、功能优化之前端脚本输入参数 八、其它提升 九、新增模板和集成方案 一、性能提升之异步数据采集 Zabbix通过各种功能进程采集数据,例如Pollers、Trappers和Pingers等,但每个进程每次只能...
- 下一篇
deepin V23 Beta3 来了!快来看看有哪些更新和修复?
deepin V23 最后一个测试版本——Beta3来了! deepin V23 Beta3 版本对镜像预装包中 1400+ 包进行升级,新增了 250+ 软件包系统更新,并进一步优化功能体验,包括: 安装器支持 768P、1080P、2K、4K 屏幕界面自适应; 支持 Steam 原生应用正常安装和游戏运行; 系统底层依赖的更新升级:GCC、Qt、glibc 等等; 对启动器进行了代码层面重构提升了运行速度; 控制中心-时间日期-区域-国家地区支持根据用户所在的区域语言,设置本土化时间、日期格式; ...... 感谢每一位 deepiner 提供想法与建议,让我们一起为打造美观易用、安全可靠的开源操作系统而努力! 功能新增 【系统/安装】 镜像安装时 Grub 页面 safe 模式后增加了说明提示性文字,避免用户因不理解而错误使用 safe 模式安装问题; 安装器支持 768P、1080P、2K、4K 屏幕界面自适应; 对部分 i386 设备驱动进行了支持; 支持了 Steam 原生应用正常安装和游戏运行。 【系统仓库】 大量系统底层库得到更新,系统仓库整体约 4000+ 软件包更新...
相关文章
文章评论
共有0条评论来说两句吧...
文章二维码
点击排行
推荐阅读
最新文章
- SpringBoot2配置默认Tomcat设置,开启更多高级功能
- Docker使用Oracle官方镜像安装(12C,18C,19C)
- CentOS8编译安装MySQL8.0.19
- SpringBoot2初体验,简单认识spring boot2并且搭建基础工程
- Linux系统CentOS6、CentOS7手动修改IP地址
- CentOS8,CentOS7,CentOS6编译安装Redis5.0.7
- CentOS7安装Docker,走上虚拟化容器引擎之路
- CentOS7编译安装Cmake3.16.3,解决mysql等软件编译问题
- CentOS7,CentOS8安装Elasticsearch6.8.6
- CentOS8安装Docker,最新的服务器搭配容器使用