如何使用日志数据创建警报
如何使用日志数据创建警报规则
Loki 存储您的日志,只为每个日志流索引标签。将 Loki 与 Grafana 报警结合使用是跟踪环境中发生事件的强大方法。您可以根据日志行中的内容创建指标警报规则,以通知您的团队。更棒的是,您可以将日志消息中的标签数据直接添加到警报通知中。
在本教程中,您将
- 生成示例日志并使用 Promtail 将其拉取到 Grafana。
- 基于 Loki 查询 (LogQL) 创建警报规则。
- 创建 Webhook 联系点以将警报通知发送到。
提示
查看我们的高级警报教程,探索警报实例和通知路由等高级主题。
开始之前
Grafana Cloud 用户
作为 Grafana Cloud 用户,您无需安装任何内容。
继续到生成示例日志。
Grafana OSS 用户
为了在本地运行 Grafana 堆栈,请确保您已安装以下应用程序。
- Docker Compose(包含在 macOS 和 Windows 的 Docker for Desktop 中)
- Git
为了演示使用 Grafana 堆栈观察数据,请将文件下载到您的本地机器。
下载并保存一个 Docker compose 文件以运行 Grafana、Loki 和 Promtail。
wget https://raw.githubusercontent.com/grafana/loki/v2.8.0/production/docker-compose.yaml -O docker-compose.yaml
运行 Grafana 堆栈。
docker compose up -d
第一次运行 docker compose up -d
时,Docker 会下载本教程所需的所有资源。这可能需要几分钟时间,具体取决于您的网络连接。
注意
如果您已经在系统上运行了 Grafana、Loki 或 Prometheus,您可能会看到错误,因为 Docker 镜像试图使用您的本地安装正在使用的端口。如果是这种情况,请停止服务,然后再次运行命令。
提示
或者,您可以在我们的交互式学习环境中尝试此示例:开始使用 Grafana 报警。
这是一个配置完整的环境,所有依赖项都已安装。
在Grafana Killercoda 存储库中提供反馈、报告错误和提出问题。
生成示例日志
下载并保存一个生成日志的 Python 文件。
wget https://raw.githubusercontent.com/grafana/tutorial-environment/master/app/loki/web-server-logs-simulator.py
执行日志生成 Python 脚本。
python3 ./web-server-logs-simulator.py | sudo tee -a /var/log/web_requests.log
脚本故障排除
如果您在 Explore 中看不到示例日志
- 输出文件是否存在,检查
/var/log/web_requests.log
以查看它是否包含日志。 - 如果文件为空,请检查您是否按照上述步骤创建了文件。
- 如果文件存在,请验证 promtail 容器是否正在运行。
- 在 Grafana Explore 中,检查时间范围是否仅限于过去 5 分钟。
创建联系点
除了是一个开源的可观测性工具之外,Grafana 还拥有自己的内置警报服务。这意味着,您可以随时收到有关数据中感兴趣事件的通知,甚至可以在可视化效果中查看这些事件的图表。
在本步骤中,我们将设置一个新的联系点。此联系点将使用webhook集成。为了使此操作正常工作,我们还需要一个用于接收警报的 webhook 集成端点。我们将使用Webhook.site快速设置测试端点。这样我们可以确保我们的警报确实向某个地方发送了通知。
在您的浏览器中,登录您的 Grafana Cloud 帐户。
OSS 用户:要登录,请导航至https://127.0.0.1:3000,Grafana 运行的地方。
在另一个选项卡中,转至Webhook.site。
复制您的唯一 URL。
您的 webhook 端点现在正在等待第一个请求。
接下来,让我们在 Grafana 的警报 UI 中配置一个联系点,以将通知发送到我们的 webhook 端点。
返回 Grafana。在 Grafana 的侧边栏中,将鼠标悬停在警报(铃铛)图标上,然后单击联系点。
单击+ 添加联系点。
在名称中,写Webhook。
在集成中,选择Webhook。
在URL中,粘贴 webhook 端点的端点。
单击测试,然后单击发送测试通知以将测试警报发送到您的 webhook 端点。
导航回Webhook.site。在左侧,现在有一个
POST /
条目。单击它以查看 Grafana 发送了哪些信息。返回 Grafana 并单击保存联系点。
我们已经创建了一个虚拟的 Webhook 端点,并在 Grafana 中创建了一个新的警报联系点。现在,我们可以创建警报规则并将其链接到此新集成。
创建警报规则
接下来,我们将建立一个警报规则在 Grafana 警报中,当警报规则被触发和解决时通知我们。
- 在 Grafana 中,导航至警报>警报规则。
- 单击新的警报规则。
- 为您的警报规则输入警报规则名称。使其简短且描述性,因为这将显示在您的警报通知中。例如,web-requests-logs
定义查询和警报条件
在本节中,我们定义查询、表达式(用于操作数据)以及必须满足的触发警报的条件。
从下拉菜单中选择Loki数据源。
在查询编辑器中,通过单击右侧的按钮切换到代码模式。
粘贴下面的查询。
sum by (message)(count_over_time({filename="/var/log/web_requests.log"} != "status=200" | pattern "<_> <message> duration<_>" [10m]))
此查询将计算状态码不是 200(OK)的日志行数,然后使用瞬时查询和括号中指示的时间间隔,按消息类型对结果集求和。它使用 LogQL 模式解析器添加一个名为message
的新标签,其中包含日志行的级别、方法、url 和状态。
您可以使用解释查询切换按钮来全面解释查询语法。可选的日志生成脚本将创建一个类似于下面示例的样本日志行
2023-04-22T02:49:32.562825+00:00 level=info method=GET url=test.com status=200 duration=171ms
注意
如果您使用的是自己的日志,请修改 LogQL 查询以匹配您自己的日志消息。请参阅 Loki 文档以了解模式解析器。
删除“B”减少表达式(单击垃圾桶图标)。减少表达式默认情况下会出现,在这种情况下,它是不需要的,因为查询的数据已经被减少了。请注意,阈值表达式现在是您的警报条件。
在“C”阈值表达式中
- 将输入更改为“A”以选择数据源。
- 输入
0
作为阈值。这是警报规则应该触发的值。高于此值会触发警报规则。
单击预览以运行查询。
它应该从状态码不是 200(OK)的日志行中返回警报实例,并且满足警报条件。警报规则触发的条件是任何超过
0
阈值的事件。由于 Loki 查询返回了超过零个警报实例,因此警报规则处于触发
状态。
设置评估行为
一个评估组定义了警报规则何时触发,它基于两个设置
- 评估组:警报规则的评估频率。
- 评估间隔:条件必须满足多长时间才能开始触发。这允许您的数据在触发警报之前稳定下来,有助于减少不必要的通知频率。
要设置评估
- 在文件夹中,单击+ 新文件夹并输入一个名称。例如:web-server-alerts。此文件夹将包含我们的警报。
- 在评估组中,重复上述步骤以创建一个新的评估组。我们将将其命名为1m-evaluation。
- 选择一个评估间隔(警报将被评估的频率)。例如,每
1m
(1分钟)。 - 将挂起时间设置为
0s
(零秒),以便在条件满足时立即触发警报规则。
配置标签和通知
选择您想要接收警报通知的联系点。
- 在联系点下,从下拉菜单中选择Webhook。
- 单击右上角的保存规则并退出。
触发警报规则
由于 Python 脚本将继续生成与警报规则条件匹配的日志数据,因此,一旦评估间隔结束,您应该在 Webhook 端点中收到警报通知。
提示
查看我们的高级警报教程,探索警报实例和通知路由等高级主题。