Docker实践(八):Prometheus + Grafana + 钉钉搭建监控告警系统
环境说明:
主机名 | 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.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
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.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
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
2. 添加DataSource
选择Prometheus
配置DataSource
3. Dashboards配置
3.1 下载Dashboards
下载链接:https://grafana.com/dashboards?dataSource=prometheus&category=docker
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
本文参考:
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/
低调大师中文资讯倾力打造互联网数据资讯、行业资源、电子商务、移动互联网、网络营销平台。
持续更新报道IT业界、互联网、市场资讯、驱动更新,是最及时权威的产业资讯及硬件资讯报道平台。
转载内容版权归作者及来源网站所有,本站原创内容转载请注明来源。
- 上一篇
ReentrantReadWriteLock(可以重入的读写锁)源码浅析
一、ReentrantReadWriteLock简介 上一篇文章我们将讲到的ReentrantLock和Synchronized锁,都属于排他锁,也就是说只会有一个线程获取锁;而我们今天讲的ReentrantReadWriteLock(读写锁)是支持多个线程同时获取锁的在获取读锁时;但是在获取到写锁时,其它的写锁和读锁都会阻塞;其实可以看出读写锁,维护了一对锁,一个写锁,其实是个排他锁,一个读锁,是共享锁;通过分离读锁和写锁,使得并发性相比一般的排他锁有很大的提升;读写锁的性能比排他锁好,因为在大多数场景中读是多于写的;读写锁提供了,公平性的选择、重新进入(该锁支持重进入,以读写锁线程为例:读线程在获取读锁之后,能够再次获取读锁。而写线程在获取了写锁之后能够再次获取写锁,同时也可以获取读锁)和锁降级(遵循获取写锁、获取读锁在释放写锁的次序,写锁能够降级成为读锁)等特性。 二、ReentrantReadWriteLock基本成员我们先来看一张ReentrantReadWriteLock类图Sync是一个内部类,继承AQS,主要实现AQS的一些方法。基本成员简介 static final ...
- 下一篇
(活动已结束)1周年 | 专栏有优惠,分享还得赏
老用户福利 每邀请一位好友成功购买专栏, 即可获得30%高提成,上不封顶, 还有机会获得万元现金大奖。 具体详情,咨询小助手微信(cto51boke2),回复“FX”。 To 亲爱的朋友 2018年5月,51CTO订阅专栏上线了。 至今,我们已经上线了50+个专栏,依托技术大牛实操经验,深入技术的方方面面:一线运维、架构升级、安全体系 、网络设计、编程语言...... 在51CTO订阅专栏成立一周年的时间里,我们第一次送出这个 超级福利!——每邀请一位好友成功购买专栏,即可获得30%高提成,上不封顶! 参与步骤 第一步:成功订阅专栏>>>(老用户可直接从第二步开始) 第二步:生成自己的专属分享海报,分享给好友(墙裂建议一对一分享,圈子越小,效果越好) 2.1 打开<我的订阅专栏>2.2 选中要分享的专栏2.3 进入【分享赚】2.4 生成分享海报2.5 分享给好友 第三步:好友成功订阅后,你将获得30%成交额的奖励金,可提现!(举个例子:39元成交额的30%=11.7)3.1 进入<分享有赏>3.2 达标后提现提现网址: https://blog...
相关文章
文章评论
共有0条评论来说两句吧...
文章二维码
点击排行
推荐阅读
最新文章
- CentOS7设置SWAP分区,小内存服务器的救世主
- CentOS7编译安装Gcc9.2.0,解决mysql等软件编译问题
- CentOS7编译安装Cmake3.16.3,解决mysql等软件编译问题
- CentOS8安装Docker,最新的服务器搭配容器使用
- Docker使用Oracle官方镜像安装(12C,18C,19C)
- Docker安装Oracle12C,快速搭建Oracle学习环境
- CentOS关闭SELinux安全模块
- CentOS6,7,8上安装Nginx,支持https2.0的开启
- SpringBoot2全家桶,快速入门学习开发网站教程
- CentOS8编译安装MySQL8.0.19