从 0 开始安装 Prometheus + Grafana + 飞书监控配置(Webhook)

从 0 开始安装 Prometheus + Grafana + 飞书监控配置(Webhook)

老增 1,033 2021-02-05

prometheus_grafana

  • 系统版本: Centos 7.6
  • 安装方式: docker-compose
  • 本次安装了 AlertManager 但是因为规则配置叫麻烦, 最终未使用, 而是直接使用 Grafana 的 Alert 功能

安装环境

1. 安装docker

# 只升级所有包,不升级软件和系统内核
yum -y upgrade

# 安装需要的软件包, yum-util 提供yum-config-manager功能,另两个是devicemapper驱动依赖
yum install -y yum-utils device-mapper-persistent-data lvm2

# 设置 yum 源(阿里),加速
yum-config-manager --add-repo http://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo

# 查看可用版本列表
yum list docker-ce --showduplicates | sort -r

# 选择一个版本安装 版本号含义: 年份.月份.更新
yum -y install docker-ce-19.03.15

# 启动docker daemon 如果没有权限可执行 gpasswd -a $USER docker
systemctl start docker

2. 安装 docker-compose

# 下载最新版本的 docker-compose 到 /usr/bin 目录下
curl -L https://github.com/docker/compose/releases/download/1.28.2/docker-compose-`uname -s`-`uname -m` -o /usr/bin/docker-compose

# 给 docker-compose 授权
chmod +x /usr/bin/docker-compose

安装 Prometheus + Grafana

编写各个配置文件

配置文件的详细信息, 见文末【资料】一节

创建文件夹 & 复制上传配置文件

# 创建文件夹, 这里放到home目录下
mkdir -p /home/monitor/prometheus/config/rules
mkdir -p /home/monitor/grafana/config

# docker-compose的设置, 将配置文件复制到对应目录下
/home/monitor/docker-compose.yml
/home/monitor/prometheus/config/prometheus.yml
/home/monitor/prometheus/config/alertmanager.yml
/home/monitor/grafana/config/grafana.ini

启动服务

cd /home/monitor

# grafana 需要特殊权限, 修改到472用户组即可
chown 472:472 grafana -R

docker-compose up -d

此时, 可通过访问 http://localhost:3000 查看 grafana 界面进行配置. 初始登录帐密: admin/admin , 第一次登录需要修改 admin 的密码.

相关配置

Grafana 基础配置

  • 关联 Prometheus 数据源
    点击右边菜单条的齿轮按钮 DataSource 配置数据源, 选择 Prometheus Url 填写 Prometheus 服务的地址, 如: http://localhost:9090 其余默认即可.

图表配置

配置仪表盘

新建一个 DashBoard , 仪表盘中可以添加各种图表. 仪表盘本身可设置一些参数, 点击右上角 齿轮 按钮配置, 主要有两个:

  • General: 设置仪表盘的基本信息, 如名字, 标签, 分组等
  • variables: 设置各种参数, 这些参数可以在查看仪表盘时进行过滤, 也可以在图表配置中使用, 例如:
    • 固定参数
      仪表盘固定参数
    • 根据 prometheus 输出过滤的参数, 比如 instance. 使用PromQL 语法
      仪表盘可变参数

配置图表

  • Query : 图表的查询信息
    • 图表的 Query 使用的是 PromQL 语法
    • 可添加多条 Query (可能来源不同等)
    • 右边设置面板可设置各种现实属性, 显示过滤, 不同 Query 的坐标轴等

配置飞书通知

参考资料: https://www.feishu.cn/hc/zh-CN/articles/360049067675

  1. 在需要通知会话中 @Grafana 助手 , 点击返回的消息, 复制Webhook地址, 点击 【保存】
  2. 打开 Grafana, 点击 Alert > Notification, 配置该 WebHook 地址. 保存. 其中 【Notification settings】说明如下:
  • Include images:
    • 发送通知时附带此刻的截图
    • 6.x 版本中如果勾选 "Include image", 会无法发出通知
    • 7.x 版本中勾选 "Include image" 但实际并不会发送截图
  • Disable Resolve Message
    • 问题解决后不用发 [OK] 通知, 如果不勾选, 则每次报警解除后, 会发送一条内容一样的报警信息, 只是Title改为 [OK]
  • Send reminders
    • 只要报警未解除就一直发送消息, 发送的间隔不能低于Alert配置的数据采集间隔. 如果不勾选, 则只在触发的那一刻发送一次通知
  1. 打开需要添加监控的图表, 点击 Edit > Alert 配置该图标的告警信息, Grafana 不支持对带参数的 Query 进行配置, 所以如果需要检测带参数的 Query , 参考思路如下

如果选了带参数的Query会报错: Template variables are not supported in alert queries

a. 只监控特定某条数据

  • 在原图表中添加一条 Query, 写死参数, 并将该 Query 隐藏. 在Alert 选择该 Query 进行配置
    统计指定数据

b. 监控所有数据

  • 新增一个图表, 调整 Query , 去掉参数, 并根据该参数进行分组. 在 Alert 中进行配置. 此时任意一条数据触发 Alert, 便会产生报警, 报警信息中会把所有触发的数据罗列出来.
    数据分组统计
  1. Alert 中 Notifications>Send to 选择在第 2 步配置的地址. 其他配置信息如下:
    Alert设置
    完成

资料

docker-compose.yml
# /home/monitor

version: '2'

networks:
    monitor:
        driver: bridge

services: 
  prometheus:
    image: prom/prometheus:latest
    container_name: prometheus
    hostname: prometheus
    restart: always
    ports: 
      - '9090:9090'
    volumes: 
      - './prometheus/config:/config'
      - './prometheus/data/prometheus:/prometheus/data'
    command: 
      - '--config.file=/config/prometheus.yml'
      - '--web.enable-lifecycle' # 支持热更新
    networks:
      - monitor

  # alertmanager 没有不用配置此节
  alertmanager:
    image: prom/alertmanager:latest
    container_name: alertmanager
    hostname: alertmanager
    restart: always
    ports: 
      - '9093:9093'
    volumes: 
      - './prometheus/config:/config'
      - './prometheus/data/alertmanager:/alertmanager/data'
    command: 
      - '--config.file=/config/alertmanager.yml'
    networks:
      - monitor

  grafana:
    image: grafana/grafana:latest
    container_name: grafana
    hostname: grafana
    restart: always
    ports: 
      - '3000:3000'
    volumes: 
      - './grafana/config/grafana.ini:/etc/grafana/grafana.ini'
      - './grafana/data/grafana:/var/lib/grafana'
    networks:
      - monitor
prometheus.yml
# 文件地址: /home/monitor/prometheus/config

# 默认设置
global:
  scrape_interval: 5s
  scrape_timeout: 1s

# 报警规则文件地址, 没有则不用
rule_files:
  - "rules/*.yml"

# 报警设置, 没有则不用
alerting:
  alertmanagers:
  - scheme: http
    static_configs:
    - targets:
      - "alertmanager:9093"

scrape_configs:
  # 服务名称, 任意
  - job_name: server_1
    # 服务配置地址, 根据 http(s)://{target}/metrics 应该可访问到 prometheus 采集的数据
    static_configs:
      - targets: ["198.168.0.1:8080","198.168.0.2:8080"]

  # 支持配置一系列不同的job
  - job_name: server_2
    scrape_interval: 15s  # 特殊设置
    static_configs:
      - targets: ["192.168.0.3"]
grafana.ini
; 应该不使用这个报警
; 文件位置 /home/monitor/grafana/config
; [server]
; 地址设置, 在配置诸如飞书,钉钉这些webhook时会用到
root_url: https://grafana.myhost.com

; 其他设置信息参考:  
; 官网: https://grafana.com/docs/grafana/latest/administration/configuration/
; 博客园参考: https://www.cnblogs.com/shhnwangjian/p/6911415.html

参考内容: