环境说明:
主机名 | 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是一套开源的系统监控报警框架,提供了监控数据搜集、存储、处理、可视化和告警一套完整的解决方案,该项目于2012年在SoundCloud上创建,拥有非常活跃的开发人员和用户社区,许多公司和组织都采用了Prometheus。作为一个独立的开源项目,Prometheus于2016年正式加入Cloud Native Computing Foundation,成为受欢迎度仅次于Kubernetes的项目。
Prometheus特点:
- 多维数据模型,其中时间序列数据通过metric名和键值对来区分。
- 灵活而强大的查询语句(PromQL)
- 不依赖分布式存储,可直接在本地工作
- 通过HTTP使用pull模式采集时间序列数据
- 可以采用push gateway的方式把时间序列数据推送至 Prometheus server 端
- 可以通过服务发现或者静态配置去获取监控的 targets
- 支持多种图形和仪表盘模式
组件:
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 Server | Node Exporter | cAdvisor | Grafana |
---|---|---|---|---|
docker01 | √ | √ | √ | √ |
docker02 | × | √ | √ | × |
通过Prometheus监控docker01和docker02,其中Node Exporter用于监控host,cAdvisor用于监控容器,这两个监控软件两个节点都部署。Prometheus Server和Grafana只在docker01上部署,充当监控监控服务器。
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
root@docker02:~# docker-compose up -d
http://172.27.9.75:8080/metrics
http://172.27.9.75:8080/metrics
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']
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用户执行,否则会报权限错误。
root@docker01:~# docker-compose up -d
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五分钟负载
http://172.27.9.71:3000
下载链接:https://grafana.com/dashboards?dataSource=prometheus&category=docker
分别导入docker-monitoring_rev1.json和node-exporter-full_rev13.json用于展示container和host的监控
添加
机器人名称自定义为:loong576,添加到工作通知loong576,也可以添加到群
复制webhook,完成机器人添加
新增告警通道DingDing
Name为自定义Ding-Alerts,Type选择DingDing,url为之前复制的webhook,测试正常,保存
本文以监控容器内存使用率为例介绍grafana如何通过钉钉机器人发送告警信息
至此完成钉钉告警信息的发送,当然,也可以新增dashboard,选择Graph方式自定义展示和告警项
目前Grafana只支持Graph添加报警规则,有一定局限性。