环境说明:
主机名 | 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 架构
组件:
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 监控 docker01 和 docker02, 其中 Node Exporter 用于监控 host,cAdvisor 用于监控容器, 这两个监控软件两个节点都部署. Prometheus Server 和 Grafana 只在 docker01 上部署, 充当监控监控服务器.
2. 监控主机部署
2.1 docker-compose.YAML 配置
- root@docker02:~# more docker-compose.YAML
- 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
2.3 查看 Node Exporter 监控数据
http://172.27.9.75:8080/metrics
2.4 查看 cAdvisor 监控数据
http://172.27.9.75:8080/metrics
3. 监控服务器部署
3.1 prometheus.YAML 配置
- root@docker01:~# more prometheus.YAML
- 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.YAML 配置
- root@docker01:~# more docker-compose.YAML
- version: '3.7'
- services:
- prometheus:
- image: prom/prometheus:latest
- network_mode: 'host'
- container_name: prometheus
- restart: unless-stopped
- ports:
- - '9090:9090'
- volumes:
- - /root/prometheus.YAML:/etc/prometheus/prometheus.YAML
- 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
3.4 查看 Prometheus 监控数据
3.4.1 配置文件查看
http://172.27.9.71:9090/config
3.4.2 监控信息查看
http://172.27.9.71:9090/metrics
3.4.3 查看指定监控项
http://172.27.9.71:9090/
比如查看 CPU 五分钟负载
四, Grafana 配置
1. 登陆 grafana
http://172.27.9.71:3000/
2. 添加 DataSource
选择 Prometheus
配置 DataSource
3. Dashboards 配置
3.1 下载 Dashboards
下载链接:
3.2 导入 Dashboards
分别导入 docker-monitoring_rev1.JSON 和 node-exporter-full_rev13.JSON 用于展示 container 和 host 的监控
4. Grafana 监控展示
4.1 容器监控展示
4.2 host 监控展示
五, 钉钉告警配置
1. 钉钉添加机器人
钉钉通过机器人来接收告警信息
选择自定义
添加
机器人名称自定义为: loong576, 添加到工作通知 loong576, 也可以添加到群
复制 webhook, 完成机器人添加
2. Grafana 新增告警项
新增告警通道 DingDing
Name 为自定义 Ding-Alerts,Type 选择 DingDing,url 为之前复制的 webhook, 测试正常, 保存
3. 新增告警项
本文以监控容器内存使用率为例介绍 grafana 如何通过钉钉机器人发送告警信息
3.1 编辑 Memory Usage
3.2 创建 Alert
3.3 Alert 配置
当容器内存使用率大于 150M 时发送告警信息
3.4 验证告警配置
3.5 保存告警配置
3.6 告警信息查看
手机端也会同步收到告警信息
至此完成钉钉告警信息的发送, 当然, 也可以新增 dashboard, 选择 Graph 方式自定义展示和告警项
目前 Grafana 只支持 Graph 添加报警规则, 有一定局限性.
docker-compose 和 prometheus 配置文件已上传 GitHub: https://github.com/loong576/prometheus.git
本文参考:
- ;
- https://prometheus.io/docs/introduction/overview/ ;
- ;
来源: http://blog.51cto.com/3241766/2394283