玩转 Mimir
玩转 Mimir
Grafana Mimir 是一个分布式、水平可扩展、高可用的 Prometheus 长期存储。
在本教程中,您将:
- 使用 Docker Compose 在本地运行 Grafana Mimir
- 运行 Prometheus 抓取一些指标并远程写入 Grafana Mimir
- 运行 Grafana 探索 Grafana Mimir 仪表盘
- 在 Grafana Mimir 中配置一个测试记录规则和告警
前提条件
- Git
- Docker 和 Docker Compose
- 您的主机上端口
9000
和9009
可用
提示
或者,您可以在我们的互动学习环境中尝试此示例:玩转 Mimir。
这是一个已配置好所有依赖项的完整环境。
下载教程配置
- 使用 Git 命令行创建 Grafana Mimir 仓库的副本
git clone https://github.com/grafana/mimir.git cd mimir
- 进入教程目录
cd docs/sources/mimir/get-started/play-with-grafana-mimir/
注意
本教程中的说明假定您的工作目录是
docs/sources/mimir/get-started/play-with-grafana-mimir/
。
启动 Grafana Mimir 及依赖项
使用以下 Docker 命令开始运行您的本地设置
docker compose up -d
此命令启动:
- Grafana Mimir
- 三个 monolithic-mode Mimir 实例以提供高可用性
- 已启用多租户(租户 ID 为
demo
)
- Minio
- 用于存储块、规则和告警的 S3 兼容持久存储
- Prometheus
- 抓取 Grafana Mimir 指标,然后将其写回 Grafana Mimir 以确保已摄取指标的可用性
- Grafana
- 包含一个预装的数据源以查询 Grafana Mimir
- 包含用于监控 Grafana Mimir 的预装仪表盘
- 负载均衡器
- 一个简单的基于 NGINX 的负载均衡器,用于在主机上暴露 Grafana Mimir 端点
下图说明了这些组件之间的关系:
以下端口将在主机上暴露:
- Grafana 位于
https://:9000
- Grafana Mimir 位于
https://:9009
要了解更多关于 Grafana Mimir 配置的信息,您可以查看配置文件 config/mimir.yaml
。
探索 Grafana Mimir 仪表盘
在您的本地主机上打开 Grafana https://:9000
并查看显示 Grafana Mimir 集群状态和健康状况的仪表盘。这些仪表盘会查询 Grafana Mimir 以获取它们显示的指标。
首先,我们建议查看这些仪表盘:
几点注意事项
- 通常在 Grafana Mimir 启动几分钟后,仪表盘中才会显示有意义的指标。
- 由于本教程运行的 Grafana Mimir 没有 query-scheduler 或 memcached,因此相关面板预计会是空的。
Grafana 中安装的仪表盘取自 Grafana Mimir mixin,它包含了 Grafana Labs 监控 Grafana Mimir 的最佳实践仪表盘、记录规则和告警。要了解更多关于 mixin 的信息,请查看 Grafana Mimir mixin 文档。要了解 Grafana 如何连接到 Grafana Mimir,请查看 Mimir 数据源。
配置您的第一个记录规则
记录规则允许您预先计算频繁使用或计算成本高昂的表达式,并将其结果保存为一组新的时序数据。在本节中,您将使用 Grafana 提供的工具在 Grafana Mimir 中配置一个记录规则。
- 打开 Grafana 告警。
- 点击 New recording rule(新建记录规则),您也可以在此配置记录规则。
- 配置记录规则
- 给规则命名,例如
sum:up
。 - 在 Select data source(选择数据源)字段中选择 Mimir。
- 在右侧的 Builder | Code(构建器 | 代码)字段中选择 Code(代码)。
- 在 Metrics browser(指标浏览器)查询字段中输入
sum(up)
。 - 在 Namespace(命名空间)字段中输入
example-namespace
。 - 在 Group(分组)字段中输入
example-group
。 - 从右上角点击 Save and exit(保存并退出)按钮。
- 给规则命名,例如
您的 sum:up
记录规则将显示处于 up
状态(即可抓取)的 Mimir 实例数量。该规则现正在 Grafana Mimir ruler 中创建,很快就可以进行查询
- 打开 Grafana Explore 并查询记录规则生成的时序数据,配置后可能需要最多一分钟才能显示
sum:up
- 确认查询返回的值是
3
,这是当前在您的本地设置中运行的 Mimir 实例数量。
配置您的第一个告警规则
告警规则允许您基于 PromQL 表达式定义告警条件,并将触发的告警通知发送到 Grafana Mimir Alertmanager。在本节中,您将使用 Grafana 提供的工具在 Grafana Mimir 中配置一个告警规则。
- 打开 Grafana 告警。
- 点击 New alert rule(新建告警规则)。
- 配置告警规则
- 在 Rule name(规则名称)字段中输入
MimirNotRunning
。 - 在 Select data source(选择数据源)字段中选择 Mimir。
- 在 Metrics browser(指标浏览器)查询字段中输入
count(up == 0)
。这目前显示no data
(无数据),因为所有实例都在运行。
- 在 Rule name(规则名称)字段中输入
- 向下滚动到 Set evaluation behavior(设置评估行为)
- 选择
New folder
(新建文件夹)并在 Folder name(文件夹名称)字段中输入example-folder
。 - 选择
New evaluation group
(新建评估组)并在 Group name(分组名称)字段中输入example-group
。将评估间隔设置为30s
。
- 选择
- 向下滚动到 Configure labels and notifications(配置标签和通知)
- 选择
Contract point
(联系点)下拉菜单并选择grafana-default-email
。
- 选择
- 点击 Save rule and exit(保存规则并退出)按钮。
您的 MimirNotRunning
告警规则现正在 Grafana Mimir ruler 中创建,并且预计在 Grafana Mimir 实例数量少于三个时触发。您可以通过打开 Grafana 告警 页面并展开“example-namespace > example-group”行来检查其状态。状态应为“Normal”(正常),因为所有三个实例都在运行。
为了看到告警触发,我们可以引入 Grafana Mimir 集群中的一次故障
- 突然终止三个 Grafana Mimir 实例中的一个
docker compose kill mimir-3
- 打开 Grafana 告警 并查看
MimirNotRunning
告警的状态,该状态在大约一分钟后应切换到“Pending”(待处理)状态,再过一分钟后切换到“Firing”(触发中)状态。注意:由于我们突然终止了一个 Mimir 实例,Grafana 告警 UI 在查询规则时可能会暂时显示错误:该错误很快会自动解决,一旦 Grafana Mimir 内部健康检查检测到已终止的实例不健康。
Grafana Mimir Alertmanager 尚未配置通过通知通道发送告警。要配置 Alertmanager,您可以在 Grafana 中打开 Contact points(联系点)页面并设置您偏好的通知通道。请注意,在此示例中电子邮件接收器不起作用,因为没有 SMTP 服务器正在运行。
在重新添加已终止的 Mimir 实例以解决告警之前,请进入 Grafana Explore 页面并查询您的 sum:up
记录规则。您应该会看到 sum:up
的值已降至 2
,因为有一个实例已停止。您还会注意到,即使有一个实例停止,对此规则和所有其他指标的查询仍然有效。这表明像本演示中三个实例部署这样的高可用 Grafana Mimir 设置对于单个节点的故障具有弹性。
要解决告警并从故障中恢复,请重新启动突然终止的 Grafana Mimir 实例
- 启动 Grafana Mimir 实例
docker-compose start mimir-3
- 打开 Grafana 告警 并查看
MimirNotRunning
告警的状态,该状态应在大约 30 秒后切换回“Normal”(正常)状态。
总结
在本教程中,您在本地启动了高可用设置的 Grafana Mimir 以及一个将一些指标远程写入 Grafana Mimir 的 Prometheus 实例。然后,您使用 Grafana 查询存储在 Mimir 中的这些指标,并在一些 Grafana 仪表盘中将它们可视化。最后,您通过 Grafana 告警 UI 配置了一个记录规则和一个告警,并验证了当条件满足时,告警按预期触发。
完成本教程后,运行此 Docker 命令释放所有 Docker 资源
docker-compose down -v