Docker实践(八):Prometheus + Grafana + 钉钉搭建监控告警系统

栏目: 数据库 · 发布时间: 4年前

内容简介:ubuntu安装详见:docker安装详见:docker-compose安装详见:

环境说明:

主机名 Docker版本 Prometheus版本 Node exporter版本 cAdvisor版本 Grafana版本 ip地址
docker01 18.09.2 2.9.2 0.18.0 v0.32.0 v6.1.6 172.27.9.71
docker02 18.09.2 / 0.18.0 v0.32.0 / 172.27.9.75

ubuntu安装详见: Ubuntu16.04.5以lvm方式安装全记录

docker安装详见: Ubuntu16.04安装Docker

docker-compose安装详见: Docker Compose实践

一、Prometheus简介

Prometheus是一套开源的系统监控报警框架,提供了监控数据搜集、存储、处理、可视化和告警一套完整的解决方案,该项目于2012年在SoundCloud上创建,拥有非常活跃的开发人员和用户社区,许多公司和组织都采用了Prometheus。作为一个独立的开源项目,Prometheus于2016年正式加入Cloud Native Computing Foundation,成为受欢迎度仅次于Kubernetes的项目。

Prometheus特点:

  • 多维数据模型,其中时间序列数据通过metric名和键值对来区分。
  • 灵活而强大的查询语句(PromQL)
  • 不依赖分布式存储,可直接在本地工作
  • 通过HTTP使用pull模式采集时间序列数据
  • 可以采用push gateway的方式把时间序列数据推送至 Prometheus server 端
  • 可以通过服务发现或者静态配置去获取监控的 targets
  • 支持多种图形和仪表盘模式

二、Prometheus架构

Docker实践(八):Prometheus + Grafana + 钉钉搭建监控告警系统

组件:

Prometheus生态圈由多个组件组成,其中许多是可选的:

  • Prometheus Server: 用于抓取和存储时间序列数据。
  • Client Library:为需要监控的服务生成相应的 metrics 并暴露给 Prometheus server。
  • Push Gateway:主要用于短期的jobs。
  • Exporters: 用于暴露已有的第三方服务的metrics给Prometheus。
  • Alertmanager: 用于处理告警。
  • 其他的支持工具。

大多数普罗米修斯组件都是用 go 编写的,这使得它们很容易作为静态二进制文件进行构建和部署。

工作流程:

1.Prometheus server 定期从配置好的 jobs 或者 exporters 中拉 metrics,或者接收来自 Pushgateway 发过来的 metrics,或者从其他的 Prometheus server 中拉 metrics。

2.Prometheus server 在本地存储收集到的 metrics,并运行已定义好的 alert.rules,记录新的时间序列或者向 Alertmanager 推送警报。

3.Alertmanager 根据配置文件,对接收到的警报进行处理,发出告警。

4.在图形界面中,可视化采集数据。

三、Prometheus搭建

1. 环境说明

主机名 Prometheus Server Node Exporter cAdvisor Grafana
docker01
docker02 × ×

通过Prometheus监控 docker 01和docker02,其中Node Exporter用于监控host,cAdvisor用于监控容器,这两个监控软件两个节点都部署。Prometheus Server和Grafana只在docker01上部署,充当监控监控服务器。

2. 监控主机部署

2.1 docker-compose.yml配置

root@docker02:~# more docker-compose.yml 
version: '3.7'

services:
  node-exporter:
    image: prom/node-exporter:latest
    network_mode: 'host'
    container_name: node-exporter
    restart: unless-stopped
    ports:
      - '9100:9100'
    command:
      - '--path.procfs=/host/proc'
      - '--path.sysfs=/host/sys'
      - '--collector.filesystem.ignored-mount-points=^/(sys|proc|dev|host|etc)($$|/)'
    volumes:
      - /proc:/host/proc
      - /sys:/host/sys
      - /:/rootfs

  cadvisor:
    image: google/cadvisor:latest
    network_mode: 'host'
    container_name: cadvisor
    restart: unless-stopped
    ports:
      - '8080:8080'
    volumes:
      - /:/rootfs:ro
      - /var/run:/var/run:rw
      - /sys:/sys:ro
      - /var/lib/docker/:/var/lib/docker:ro

2.2 运行docker-compose

root@docker02:~# docker-compose up -d

Docker实践(八):Prometheus + Grafana + 钉钉搭建监控告警系统

2.3 查看Node Exporter监控数据

http://172.27.9.75:8080/metrics

Docker实践(八):Prometheus + Grafana + 钉钉搭建监控告警系统

2.4 查看cAdvisor监控数据

http://172.27.9.75:8080/metrics

Docker实践(八):Prometheus + Grafana + 钉钉搭建监控告警系统

3. 监控服务器部署

3.1 prometheus.yml配置

root@docker01:~# more prometheus.yml 
global:             # 全局设置,可以被覆盖
  scrape_interval: 15s              # 抓取采样数据的时间间隔,每15秒去被监控机上采样,即数据采集频率
  evaluation_interval: 15s          # 监控数据规则的评估频率,比如设置文件系统使用率>75%发出告警则每15秒执行一次该规则,进行文件系统检查
  external_labels:              # 与外部通信时用的外部标签
    monitor: 'nodecontainer-monitor'

scrape_configs:             # 抓取配置
  - job_name: 'prometheus'              # 任务名,全局唯一
    scrape_interval: 5s             # 本任务的抓取间隔,覆盖全局配置
    static_configs:             # 静态目标配置
      # 抓取地址,路径为默认的/metrics
      - targets: ['localhost:9090','localhost:8080','localhost:9100','172.27.9.75:8080','172.27.9.75:9100']

3.2 docker-compose.yml配置

root@docker01:~# more docker-compose.yml 
version: '3.7'

services:
  prometheus:
    image: prom/prometheus:latest
    network_mode: 'host'
    container_name: prometheus
    restart: unless-stopped
    ports:
      - '9090:9090'
    volumes:
      - /root/prometheus.yml:/etc/prometheus/prometheus.yml
    depends_on:
      - cadvisor

  node-exporter:
    image: prom/node-exporter:latest
    network_mode: 'host'
    container_name: node-exporter
    restart: unless-stopped
    ports:
      - '9100:9100'
    command:
      - '--path.procfs=/host/proc'
      - '--path.sysfs=/host/sys'
      - '--collector.filesystem.ignored-mount-points=^/(sys|proc|dev|host|etc)($$|/)'
    volumes:
      - /proc:/host/proc
      - /sys:/host/sys
      - /:/rootfs

  cadvisor:
    image: google/cadvisor:latest
    network_mode: 'host'
    container_name: cadvisor
    restart: unless-stopped
    ports:
      - '8080:8080'
    volumes:
      - /:/rootfs:ro
      - /var/run:/var/run:rw
      - /sys:/sys:ro
      - /var/lib/docker/:/var/lib/docker:ro

  grafana:
    image: grafana/grafana:latest
    network_mode: 'host'
    container_name: grafana
    restart: unless-stopped
    ports:
      - '3000:3000'
    user: '0'
    volumes:
      - ./data/grafana:/var/lib/grafana
    environment:
      - GF_SECURITY_ADMIN_PASSWORD=admin
      - GF_SERVER_ROOT_URL=http://172.27.9.71:3000

grafana登陆地址为http://172.27.9.71:3000 ,密码为admin,容器grafana要以root用户执行,否则会报权限错误。

3.3 运行docker-compose

root@docker01:~# docker-compose up -d

Docker实践(八):Prometheus + Grafana + 钉钉搭建监控告警系统 Docker实践(八):Prometheus + Grafana + 钉钉搭建监控告警系统

3.4 查看Prometheus监控数据

3.4.1 配置文件查看

3.4.2 监控信息查看

3.4.3 查看指定监控项

http://172.27.9.71:9090

比如查看cpu五分钟负载

Docker实践(八):Prometheus + Grafana + 钉钉搭建监控告警系统

四、Grafana配置

1. 登陆grafana

http://172.27.9.71:3000

Docker实践(八):Prometheus + Grafana + 钉钉搭建监控告警系统

2. 添加DataSource

Docker实践(八):Prometheus + Grafana + 钉钉搭建监控告警系统

选择Prometheus

Docker实践(八):Prometheus + Grafana + 钉钉搭建监控告警系统

配置DataSource

Docker实践(八):Prometheus + Grafana + 钉钉搭建监控告警系统

3. Dashboards配置

3.1 下载Dashboards

3.2 导入 Dashboards

Docker实践(八):Prometheus + Grafana + 钉钉搭建监控告警系统

分别导入docker-monitoring_rev1.json和node-exporter-full_rev13.json用于展示container和host的监控

Docker实践(八):Prometheus + Grafana + 钉钉搭建监控告警系统

4. Grafana监控展示

4.1 容器监控展示

Docker实践(八):Prometheus + Grafana + 钉钉搭建监控告警系统

4.2 host监控展示

Docker实践(八):Prometheus + Grafana + 钉钉搭建监控告警系统 Docker实践(八):Prometheus + Grafana + 钉钉搭建监控告警系统

五、钉钉告警配置

1. 钉钉添加机器人

钉钉通过机器人来接收告警信息

Docker实践(八):Prometheus + Grafana + 钉钉搭建监控告警系统

选择自定义

Docker实践(八):Prometheus + Grafana + 钉钉搭建监控告警系统

添加

Docker实践(八):Prometheus + Grafana + 钉钉搭建监控告警系统 Docker实践(八):Prometheus + Grafana + 钉钉搭建监控告警系统

机器人名称自定义为:loong576,添加到工作通知loong576,也可以添加到群

Docker实践(八):Prometheus + Grafana + 钉钉搭建监控告警系统

复制webhook,完成机器人添加

2. Grafana新增告警项

新增告警通道DingDing

Docker实践(八):Prometheus + Grafana + 钉钉搭建监控告警系统 Docker实践(八):Prometheus + Grafana + 钉钉搭建监控告警系统

Name为自定义Ding-Alerts,Type选择DingDing,url为之前复制的webhook,测试正常,保存

Docker实践(八):Prometheus + Grafana + 钉钉搭建监控告警系统

3. 新增告警项

本文以监控容器内存使用率为例介绍grafana如何通过钉钉机器人发送告警信息

3.1 编辑Memory Usage

Docker实践(八):Prometheus + Grafana + 钉钉搭建监控告警系统

3.2 创建Alert

Docker实践(八):Prometheus + Grafana + 钉钉搭建监控告警系统

3.3 Alert配置

Docker实践(八):Prometheus + Grafana + 钉钉搭建监控告警系统 当容器内存使用率大于150M时发送告警信息

3.4 验证告警配置

Docker实践(八):Prometheus + Grafana + 钉钉搭建监控告警系统

3.5 保存告警配置

Docker实践(八):Prometheus + Grafana + 钉钉搭建监控告警系统

3.6 告警信息查看

Docker实践(八):Prometheus + Grafana + 钉钉搭建监控告警系统

手机端也会同步收到告警信息

Docker实践(八):Prometheus + Grafana + 钉钉搭建监控告警系统

至此完成钉钉告警信息的发送,当然,也可以新增dashboard,选择Graph方式自定义展示和告警项

Docker实践(八):Prometheus + Grafana + 钉钉搭建监控告警系统 Docker实践(八):Prometheus + Grafana + 钉钉搭建监控告警系统

目前Grafana只支持Graph添加报警规则,有一定局限性。

docker-compose和prometheus配置文件已上传github: https://github.com/loong576/prometheus.git

本文参考:

1. https://grafana.com/docs/features/datasources/prometheus/

2. https://prometheus.io/docs/introduction/overview/

3. https://open-doc.dingtalk.com/microapp/serverapi2/qf2nxq

4. https://docs.docker.com/compose/reference/overview/


以上就是本文的全部内容,希望本文的内容对大家的学习或者工作能带来一定的帮助,也希望大家多多支持 码农网

查看所有标签

猜你喜欢:

本站部分资源来源于网络,本站转载出于传递更多信息之目的,版权归原作者或者来源机构所有,如转载稿涉及版权问题,请联系我们

Linux 系统编程(第二版)

Linux 系统编程(第二版)

Robert Love / 东南大学出版社 / 2014-1-1 / 78

如何编写那些直接依赖于Linux内核和核心系统库提供的服务的软件?通过《Linux系统编程(第2版)(影印版)》,Linux内核参与者RobertLove(洛夫)为你提供了Linux系统编程方面的教程,Linux系统调用的参考手册,以及对于如何编写更聪明和更快的代码的来自内部人士的建议。Love清晰地指出了POSIX标准函数和Linux特别提供服务之间的差异。通过关于多线程的新章节,这本修订和扩展......一起来看看 《Linux 系统编程(第二版)》 这本书的介绍吧!

随机密码生成器
随机密码生成器

多种字符组合密码

MD5 加密
MD5 加密

MD5 加密工具

RGB HSV 转换
RGB HSV 转换

RGB HSV 互转工具