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

相关推荐
小小管写大大码8 小时前
如何让vscode变得更智能?vscode接入claude实现自动编程
运维·ide·vscode·自动化·编辑器·ai编程·腾讯云ai代码助手
zhang133830890758 小时前
CG-09H 超声波风速风向传感器 加热型 ABS材质 重量轻 没有机械部件
大数据·运维·网络·人工智能·自动化
Fᴏʀ ʏ꯭ᴏ꯭ᴜ꯭.9 小时前
Keepalived VIP迁移邮件告警配置指南
运维·服务器·笔记
物联网软硬件开发-轨物科技9 小时前
【轨物洞见】告别“被动维修”!预测性运维如何重塑老旧电站的资产价值?
运维·人工智能
程序员允诺9 小时前
[DevOps实战] 彻底解决依赖地狱:如何编译全静态、可移植的 Xorriso 工具
运维·devops
酣大智9 小时前
接口模式参数
运维·网络·网络协议·tcp/ip
一只自律的鸡10 小时前
【Linux驱动】bug处理 ens33找不到IP
linux·运维·bug
!chen10 小时前
linux服务器静默安装Oracle26ai
linux·运维·服务器
莫大33010 小时前
2核2G云服务器PHP8.5+MySQL9.0+Nginx(LNMP)安装WordPress网站详细教程
运维·服务器·nginx
刚刚入门的菜鸟10 小时前
php-curl
运维·web安全·php