在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

确认

普罗米修斯

prometheus.png

您可以确认两个实例的状态为“up”。

Grafana 是一个数据可视化和监控仪表盘工具。

grafana.png

选择Prometheus作为Data Sources后将显示如下界面,但只需在HTTP URL中输入http://localhost:9090,选择Browser作为Access,点击Save&Test按钮即可完成设置。

grafana2.png

从仪表板标签导入Prometheus 2.0统计数据。

grafana3.png

让我们实际看看仪表板。默认情况下显示了各种图表。您也可以自定义。

grafana4.png

告警管理器

访问 http://localhost:9093/#/status。确保在config文件中准确写入了Slack的信息。

如果这个设置未能正常工作,那么就会保持默认设置状态,并且无法通过Slack进行通知。为了试验,让node-exporter容器停止。

$ docker container stop node-exporter

然后5分钟后,您可以在Slack上收到通知并进行确认。

alertmanager2.png

总结

使用Docker创建了Prometheus、Grafana和Alertmanager的容器,并解释了通知流程发送到Slack。顺便提一下,由于可以通过设置文件创建Grafana的图表,因此在使用Docker时最好创建一个文件。

广告
将在 10 秒后关闭
bannerAds