在Docker中运行Prometheus、Grafana和Alertmanager
首先
我使用Docker同时运行了Prometheus、Grafana和Alertmanager。同时,我设置了Alertmanager向Slack发送通知。
Prometheus是什么?
Prometheus 是一款开源的监控工具,最初是在2012年由 SoundCloud 开发的。随后被多家企业采用,项目变得非常活跃。
其特点是使用多维数据模型和基于 HTTP 的拉取式通信进行时序数据收集,并支持图形和仪表盘。
Grafana是什么?
Grafana是一款可以与Prometheus和InfluxDB集成并进行图表绘制的数据仪表盘软件。
Prometheus自带的图表绘制功能定制性较低,当监控的服务器数量增多时,变得非常难以阅读。因此,推荐使用Grafana来自定义仪表盘。
AlertManager是一个监控系统组件。
Alertmanager可以在客户端发生故障时,通过邮件、Slack、Hipchat等途径发送通知。通知规则本身是在Prometheus中设置的,而Alertmanager主要负责定义通知发送到哪个工具。
实施
最终的目录结构如下所示。
├── docker-compose.yaml
├── prometheus
│ ├── alert.rules
│ └── prometheus.yaml
└── alertmanager
└── config.yaml
docker-compose文件
首先是docker-compose.yaml文件。为了测试警报功能,我们创建一个虚拟的node-exporter容器。
version: '3'
services:
prometheus:
image: prom/prometheus
container_name: prometheus
volumes:
- ./prometheus:/etc/prometheus
command: "--config.file=/etc/prometheus/prometheus.yaml"
ports:
- 9090:9090
restart: always
exporter:
image: prom/node-exporter:latest
container_name: node-exporter
ports:
- 9100:9100
restart: always
grafana:
image: grafana/grafana
container_name: grafana
ports:
- 3000:3000
restart: always
alertmanager:
image: prom/alertmanager
container_name: alertmanager
volumes:
- ./alertmanager:/etc/alertmanager
command: "--config.file=/etc/alertmanager/config.yaml"
ports:
- 9093:9093
restart: always
神谱. yaml
下面是prometheus.yaml文件。它定义了监控目标、通知规则和向alertmanager发送通知的设置。
global:
scrape_interval: 15s
evaluation_interval: 15s
external_labels:
monitor: 'codelab-monitor'
rule_files:
- /etc/prometheus/alert.rules
alerting:
alertmanagers:
- scheme: http
static_configs:
- targets:
- alertmanager:9093
scrape_configs:
- job_name: 'prometheus'
static_configs:
- targets:
- prometheus:9090
- node-exporter:9100
提醒规则
下一步是alert.rules。在这里,我们将设置通知,如果实例宕机了5分钟,就会发送通知。
groups:
- name: example
rules:
- alert: instance_down
expr: up == 0
for: 5m
labels:
severity: critical
annotations:
summary: "Instance {{ $labels.instance }} down"
description: "{{ $labels.instance }} of job {{ $labels.job }} has been down for more than 5 minutes."
配置文件.yaml
最后是config.yaml文件。该文件用于设置alertmanager的通知目标。本次设置将通知发送到Slack。
global:
slack_api_url: 'https://hooks.slack.com/services/***/***/******'
route:
receiver: 'slack'
receivers:
- name: 'slack'
slack_configs:
- channel: '#alerts'
执行
让我们亲自试一试。
$ docker-compose up -d
确认
普罗米修斯
您可以确认两个实例的状态为“up”。
Grafana 是一个数据可视化和监控仪表盘工具。
选择Prometheus作为Data Sources后将显示如下界面,但只需在HTTP URL中输入http://localhost:9090,选择Browser作为Access,点击Save&Test按钮即可完成设置。
从仪表板标签导入Prometheus 2.0统计数据。
让我们实际看看仪表板。默认情况下显示了各种图表。您也可以自定义。
告警管理器
访问 http://localhost:9093/#/status。确保在config文件中准确写入了Slack的信息。
如果这个设置未能正常工作,那么就会保持默认设置状态,并且无法通过Slack进行通知。为了试验,让node-exporter容器停止。
$ docker container stop node-exporter
然后5分钟后,您可以在Slack上收到通知并进行确认。
总结
使用Docker创建了Prometheus、Grafana和Alertmanager的容器,并解释了通知流程发送到Slack。顺便提一下,由于可以通过设置文件创建Grafana的图表,因此在使用Docker时最好创建一个文件。