一、前言
随着 Kubernetes 使用越来越广泛,日志集中收集、展示、告警等都需要考虑的事情。Kubernetes 日志收集方案一般有下面几种:
- 1、日志收集组件以
Daemonset
形式运行在 Kubernetes Node 中,业务容器日志目录统一挂载到Node节点指定的目录,日志收集组件读取对应的目录。 - 2、日志收集组件以
Daemonset
形式运行在 Kubernetes Node 中,收集业务容器标准输出stdout
和stderr
日志。 - 3、日志收集组件以
Sidecar
形式和业务容器运行在一个pod中,把业务日志目录挂载出来,让同一个Pod中日志收集容器能读取到。
日志收集到集中日志平台,但是另一个问题来了,应该如何对业务日志告警?
下面是一个 Kubernetes 日志收集架构图,比较开源的解决方案。
二、日志格式
下面例举两个日志例子,一个是 Nginx 访问日志,另一个是 Java 业务日志格式
- 1、nginx 访问日志格式
1 | { |
- 2、java 业务日志格式
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15{
"@timestamp": "2022-10-20T19:14:26.875+08:00",
"level": "INFO",
"appName": "test-service",
"requestId": "",
"remoteIp": "",
"traceId": "",
"spanId": "",
"parent": "",
"thread": "XNIO-1 task-14",
"class": "c.c.common.security.util.SecurityUtil",
"line": "118",
"message": "没有登录",
"stack_trace": "java.lang.ClassCastException: null\n"
}
三、告警要求
- 1、Nginx 访问日志,1分钟内,需要把 Http 状态码是
404、429、499、5xx
大于10条就告警 - 2、java 业务日志格式,1分钟内,日志级别(level)是
ERROR
并且总数大于10条就告警 - 3、通过
钉钉机器人
或者飞书机器人
告警
四、如何根据日志告警?
本文日志存储在
Elasticsearch
中
本文使用 ElastAlert
服务来实现告警,简单介绍下 ElastAlert 是什么?
ElastAlert
是一个简单的框架,用于从检索Elasticsearch中的数据异常,尖峰等来实现告警。
它通过将Elasticsearch与两种类型的组件(规则类型和警报)结合使用。定期查询Elasticsearch,并将数据传递到规则类型,该规则类型确定找到任何匹配项。发生匹配时,它会发出一个或多个警报,这些警报根据不同的类型采取相应的措施。
ElastAlert由一组规则配置,每个规则定义一个查询,一个规则类型和一组警报。
ElastAlert 特性
- 架构简单,定制灵活
- 支持多种匹配规则(频率、阈值、数据变化、黑白名单、变化率等)
- 支持多种警报类型(邮件、HTTP POST、自定义脚本等,
默认不支持 钉钉机器人、飞书机器人等
) - 匹配项汇总报警,重复警报抑制,报警失败重试和过期
- 可用性强,状态信息保存到Elasticsearch的索引中
- 过程的调试和审计等
ElastAlert 可用性
- ElastAlert 将其状态保存到 Elasticsearch,启动后,将恢复之前停止的状态
- 如果 Elasticsearch 没有响应,ElastAlert 将等到恢复后才继续
- 抛出错误的警报可能会在一段时间内自动重试
ElastAlert 部署
项目地址:https://github.com/bitsensor/elastalert.git,官方提供 docker 镜像,但并不是很好用,这里作者重新构建一个docker镜像。
ElastAlert 告警监控展示
- 1、钉钉机器人告警展示
- 2、飞书机器人告警展示
构建 elastalert 镜像
1 | # 下载 ElastAlert 代码 |
上传到 dockerhub 个人仓库中,提供给大家下载1
$ docker push yangpeng2468/elastalert:v0.2.4
配置 ElastAlert 并启动
- 1、首先创建 config.json 配置文件
1 | # 创建配置文件目录 |
- 2、创建 elastalert.yaml 配置文件
1 | $ vim config/elastalert.yaml |
- 3、创建 nginx 访问日志报警文件
1 | $ vim rules/nginx.yaml |
- 4、创建 java 业务日志报警文件
1 | $ vim rules/java.yaml |
- 5、创建 ElastAlert 镜像启动脚本
1 | $ cd /data/elastalert |
五、参考文档
---本文结束感谢您的阅读。微信扫描二维码,关注我的公众号---
本文链接: https://www.yp14.cn/2022/10/23/业务日志告警如何做/
版权声明: 本作品采用 知识共享署名-非商业性使用-相同方式共享 4.0 国际许可协议 进行许可。转载请注明出处!