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的核心组件和特点:

  1. 多维数据模型:Prometheus使用键值对来标识时间序列数据,通过指标名称和多个标签(labels)来唯一确定一个时间序列。这种模型使得数据可以灵活地聚合和切片。
  2. PromQL查询语言:Prometheus提供了一种功能强大的查询语言PromQL,允许用户实时选择和聚合时间序列数据。
  3. 拉取模型:Prometheus主要通过HTTP协议从配置的目标中拉取指标。同时也支持推送时间序列数据通过中间网关(Pushgateway)的方式。
  4. 时间序列数据库:Prometheus自带一个高效的时序数据库,用于存储采集到的数据。同时支持本地存储和远程存储。
  5. 服务发现:Prometheus支持多种服务发现机制,可以自动发现要监控的目标,如Kubernetes、Consul等。
  6. 告警功能:Prometheus包含一个告警管理器(Alertmanager),可以处理来自Prometheus服务器的告警,并进行去重、分组、路由以及通过多种方式(如Email、PagerDuty等)发送告警。
  7. 可视化:Prometheus提供了一个基本的Web UI,但通常与Grafana结合使用,以创建丰富的仪表盘。
  8. 易于集成:有许多客户端库和导出器(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.yml

global:
  scrape_interval: 15s
  evaluation_interval: 15s

alerting:
  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来更改模板

相关推荐
板鸭〈小号〉2 小时前
Socket网络编程(2)-command_server
运维·服务器
维尔切3 小时前
Docker 存储与数据共享
运维·docker·容器
温柔一只鬼.3 小时前
Docker快速入门——第四章Docker镜像
运维·docker·容器
程序猿费益洲3 小时前
Docker 网络详解:(三)四大网络模式
网络·docker·容器
一只代码狗3 小时前
Docker Desktop在MAC上无法强制关闭的命令清理方式
macos·docker·php
温柔一只鬼.4 小时前
Docker快速入门——Windowns系统下Docker安装(2025最新理解与完整,附带WSL1如何升级为WSL2)
运维·docker·容器
何朴尧4 小时前
centos/cuos如何开启软件源
linux·运维·centos
派阿喵搞电子5 小时前
关于使用docker部署srs服务器的相关指令
服务器·docker·容器
啊啊啊啊8435 小时前
Kubernetes 1.20集群部署
云原生·容器·kubernetes