Docker监控
Docker监控
随着线上服务的全面容器化,对Docker容器的监控就很重要。传统的监控系统是物理机的监控,在一个物理机跑多个容器的情况下 ,。 为了更好的监控容器运行情况 可以使用cAdvisor+Prometheus+Grafana组合进行Docker监控,或者采用cAdvisor+InfluxDB+Grafana组合进行Docker监控。
cAdvisor+Prometheus+Grafana
其中cAdvisor是专门用来采集数据的工具,也是google公司的开源产品
Prometheus是数据源,用来存储cAdvisor获取到的数据
Grafana用来作为前端展示,它支持多种数据源
部署cAdvisor
[root@docker ~]# docker pull google/cadvisor
[root@docker ~]# docker run -itd --name=cadvisor -v /:/rootfs:ro -v /var/run:/var/run:ro -v /sys:/sys:ro -v /var/lib/docker/:/var/lib/docker:ro -v /dev/disk/:/dev/disk:ro -p 8080:8080 --detach=true --privileged --device=/dev/kms
g google/cadvisor
通过访问8080端口查看
查看docker界面
由于cAdvisor提供的操作界面略显简陋,而且需要在不同页面之间跳转,并且只能监控一个Docker host,实用性缺陷不足。但cAdvisor可以将监控到的数据导出给第三方工具,由这些工具进一步加工处理。
我们可以把cAdvisor定位为一个监控数据收集器,收集和导出数据是它的强项,而非展示数据。
Prometheus
我们通常将Prometheus称为现代监控系统的基石。它是一款开源的系统监控和警报工具包,最初由SoundCloud开发,现在已成为CNCF(云原生计算基金会)的毕业项目。Prometheus的主要特点是多维数据模型、灵活的查询语言、高效的时间序列数据库以及易于集成的客户端库。
以下是Prometheus的核心组件和特点:
- 多维数据模型:Prometheus使用键值对来标识时间序列数据,通过指标名称和多个标签(labels)来唯一确定一个时间序列。这种模型使得数据可以灵活地聚合和切片。
- PromQL查询语言:Prometheus提供了一种功能强大的查询语言PromQL,允许用户实时选择和聚合时间序列数据。
- 拉取模型:Prometheus主要通过HTTP协议从配置的目标中拉取指标。同时也支持推送时间序列数据通过中间网关(Pushgateway)的方式。
- 时间序列数据库:Prometheus自带一个高效的时序数据库,用于存储采集到的数据。同时支持本地存储和远程存储。
- 服务发现:Prometheus支持多种服务发现机制,可以自动发现要监控的目标,如Kubernetes、Consul等。
- 告警功能:Prometheus包含一个告警管理器(Alertmanager),可以处理来自Prometheus服务器的告警,并进行去重、分组、路由以及通过多种方式(如Email、PagerDuty等)发送告警。
- 可视化:Prometheus提供了一个基本的Web UI,但通常与Grafana结合使用,以创建丰富的仪表盘。
- 易于集成:有许多客户端库和导出器(exporters)可以轻松地将应用程序和服务的指标暴露给Prometheus。
Prometheus基本原理是通过HTTP协议周期性抓取被监控组件的状态,这样做的好处是任意组件只要提供HTTP接口就可以接入监控系统,不需要任何SDK或者其他的集成过程。这样做非常适合虚拟化环境比如VM或者Docker
我们通常将提供被监控组件信息的HTTP接口称为Exporter。Exporter作为Prometheus监控体系中的重要组成部分,负责从目标组件收集数据,并将其转换为Prometheus可识别的格式。
目前,互联网公司常用的多种组件均有社区维护的Exporter可供直接使用,例如:
- Varnish:可通过
varnish_exporter
获取监控指标 - Haproxy:可通过
haproxy_exporter
获取监控指标 - Nginx:可通过
nginx_exporter
获取监控指标(注意:Nginx需要开启状态页或使用第三方模块) - MySQL:可通过
mysqld_exporter
获取监控指标 - Linux系统:可通过
node_exporter
获取系统信息,包括磁盘、内存、CPU、网络等
此外,几乎所有的常见组件都可以在Prometheus的官方GitHub仓库(https://github.com/prometheus)或社区中找到对应的Exporter
部署prometheus
先编写prometheus的配置文件,将cadvisor的数据源添加进来,然后做时钟同步
[root@docker ~]# mkdir -p /etc/prometheus
[root@docker ~]# vim /etc/prometheus/prometheus.ymlglobal:scrape_interval: 15sevaluation_interval: 15salerting:alertmanagers:- static_configs:- targets:rule_files:scrape_configs:- job_name: 'prometheus'static_configs:- targets: ['192.168.100.10:9092']- job_name: 'cadvisor'static_configs:- targets: ['192.168.100.10:8080']
[root@docker ~]# chmod 777 /etc/prometheus/prometheus.yml
[root@docker ~]# systemctl restart chronyd
[root@docker ~]# systemctl enable chronyd
[root@docker ~]# hwclock -w
将编辑好的文件映射到容器中,启动时加上–web.enable-lifecycle的作用是启用远程热加载配置文件,在修改prometheus配置文件后不用重启容器即可生效
[root@docker ~]# docker pull prom/prometheus
[root@docker ~]# docker run -itd --name=prometheus -p 9092:9090 -v /etc/prometheus/prometheus.yml:/etc/prometheus/prometheus.yml prom/prometheus --config.file=/etc/prometheus/prometheus.yml --web.enable-lifecycle
访问9092/targets端口查看
Grafana
Grafana 是一款开源的数据可视化和监控分析平台,它可以将各种数据源中的指标数据转化为直观的图表和仪表盘,帮助用户实时监控系统状态和分析历史趋势。
部署grafana
[root@docker ~]# docker pull grafana/grafana
[root@docker ~]# docker run -itd --name=grafana -p 3000:3000 grafana/grafana
访问3030,账号和密码默认为admin
创建源数据
选择prometheus
修改
然后提交
添加仪表盘
输入193然后load加载
选择prometheus
然后点击import
然后就可以查看到docker的监控页面了,我们还可以去grafana官网查看id来更改模板