cAdvisor + Prometheus收集本机和docker容器数据

本文涉及的产品
可观测可视化 Grafana 版,10个用户账号 1个月
可观测监控 Prometheus 版,每月50GB免费额度
简介: cAdvisor + Prometheus收集本机和docker容器数据

cAdvisor + Prometheus收集本机和docker容器数据

在这个万物结可容器化的时代,监控显的尤为重要,在本篇文章,我们将对服务器的相关容器和本机数据利用 Cadvisor 进行收集,通过 Prometheus 作为数据源,利用 Grafana 进行展示。

dockerkubernetes 集群的监控有多种,比如:

  • docker: cAdvisor 收集本机以及容器的监控数据
  • kubernetes:cAdvisor+InfluxDB+Grafana
  • kubernetes:Heapster+InfluxDB+Grafana

下面简单说一下谷歌 cAdvisor普罗米修斯 结合的监控,在 grafana 展示,各个文档请看官方介绍

https://prometheus.io/
https://github.com/google/cadvisor

部署Cadvisor

具体操作是在每台运行 docker 服务的主机上都跑一个 cAdvisor 容器, 博主这边是采用 docker-compose 的方式进行部署,然后我先给大家贴一下 yml

cadvisor:
    image: google/cadvisor
    restart: always
    ports:
      - "8080:8080"
    volumes:
      - /:/rootfs:ro
      - /var/run:/var/run:rw
      - /sys:/sys:ro
      - /var/lib/docker/:/var/lib/docker:ro

当容器的 STATUSUP 的时候就成功启动了, cAdvisor 为我们提供主机的信息的相关 API:

http://IP:8080/metrics
http://IP:8080/containers
http://IP:8080/docker

默认访问的的话,大概就是这个样子,也有相关数据的可视化图表,但是这远远不够,我们还是统一采用 grafana,进行集中式展示,方便查看各个主机的信息,在使用 grafana 之前,我们还需要将这些数据用 Prometheus 进行收集

image.png

注意

有可能启动会出现这个问题:

W1112 08:18:11.930612       1 manager.go:349] Could not configure a source for OOM detection, disabling OOM events: open /dev/kmsg: no such file or directory
E1112 08:18:58.568289       1 static.go:75] Failed to write response: write tcp 172.19.0.6:8080->61.140.208.205:53633: write: broken pipe
W1112 08:48:55.102473       1 container.go:409] Failed to create summary reader for "/docker/42ef2fbef15ce20a5fc2caaebaccc7712b179855ce8384f34cbdae1f7d30920f": none of the resources are being tracked.
I1114 02:36:19.568227       1 manager.go:1212] Exiting thread watching subcontainers
I1114 02:36:19.568254       1 manager.go:432] Exiting global housekeeping thread
I1114 02:36:19.568269       1 cadvisor.go:212] Exiting given signal: terminated
W1114 02:36:20.574582       1 manager.go:349] Could not configure a source for OOM detection, disabling OOM events: open /dev/kmsg: no such file or directory
I1114 02:37:41.416194       1 manager.go:1212] Exiting thread watching subcontainers
I1114 02:37:41.416215       1 manager.go:432] Exiting global housekeeping thread
I1114 02:37:41.416227       1 cadvisor.go:212] Exiting given signal: terminated
W1114 02:37:42.407178       1 manager.go:349] Could not configure a source for OOM detection, disabling OOM events: open /dev/kmsg: no such file or directory

之后处理方法如下:

sudo mount -o remount,rw '/sys/fs/cgroup'
sudo ln -s /sys/fs/cgroup/cpu,cpuacct /sys/fs/cgroup/cpuacct,cpu

部署Prometheus

这个我们也采用 docker-compose 进行部署,统一方便

prometheus:
    image: prom/prometheus:latest
    restart: always
    ports:
      - "9090:9090"
    volumes:
      - ./prometheus/prometheus.yml:/etc/prometheus/prometheus.yml
      - type: volume
        source: prometheus
        target: /prometheus
volumes:
  prometheus:
    driver: local
    driver_opts:
      type: none
      o: bind
      device: /var/www/ghost-docker-compose/prometheus/data
  • prometheus.yml
global:
  scrape_interval:     15s
  evaluation_interval: 15s
scrape_configs:
  - job_name: 'prometheus'
    static_configs:
    - targets: ['prometheus:9090']
  - job_name: 'cadvisor'
    static_configs:
    - targets: ['cadvisor:8080']

成功后方问 ip:9090 , 就能看到界面了,然后我们配置一下 Prometheus 让他能看到 Cadvisor 这个服务,Status -> Targets 看到 UP 状态就是成功了

Status-Configuration 里面可以看到配置文件,Targets 里面查看已经建立的节点。普罗米修斯 Graph 搜索查看条件语法见 https://prometheus.io/docs/querying/basics/

image.png

我们可以在 Graph 栏目选择一条指令测试一下,是否可以成功获取到信息

image.png

部署Grafana

grafana 是从 prometheus 获取数据并展示,第一步添加 prometheus 数据库,第二步用网上的模板画图,这边直接 docker 一条龙

grafana:
    image: grafana/grafana:latest
    volumes:
      - type: volume
        source: grafana
        target: /var/lib/grafana
    ports:
      - "3000:3000"
volumes:
  prometheus:
    driver: local
    driver_opts:
      type: none
      o: bind
      device: /var/www/ghost-docker-compose/prometheus/data
  grafana:
    driver: local
    driver_opts:
      type: none
      o: bind
      device: /var/www/ghost-docker-compose/grafana

添加DataSource

我们先进行 data Source 的添加

image.png

关于 Access 的选择

访问模式控制如何处理对数据源的请求。如果没有其他说明,则 Server 应该是首选方式。

服务器访问模式(默认):

所有请求都将从浏览器发出到Grafana后端/服务器,后者再将请求转发到数据源,从而避免可能的跨域资源共享(CORS)要求。 如果选择此访问方式,则需要可以从grafana后端/服务器访问该URL。

浏览器访问模式:

所有请求都将从浏览器直接向数据源发出,并且可能会受到跨域资源共享(CORS)的要求。 如果选择此访问方式,则需要可以从浏览器访问URL。

导入图表-可视化查看

image.png

然后我们需要 import 一个图表对数据进行可视化,但是图表从哪里来呢?官方已经有很多图表,所以我们需要找到合适自己的图表,并记录下他们的图表 ID 这样我们就可以远程加载了。

image.png

这边给大家找了一个 ID: 11600

image.png

选择我们上个步骤添加的数据源,这样就可以看到 Cadvisor 收集的信息啦

image.png

相关实践学习
容器服务Serverless版ACK Serverless 快速入门:在线魔方应用部署和监控
通过本实验,您将了解到容器服务Serverless版ACK Serverless 的基本产品能力,即可以实现快速部署一个在线魔方应用,并借助阿里云容器服务成熟的产品生态,实现在线应用的企业级监控,提升应用稳定性。
目录
相关文章
|
5天前
|
监控 NoSQL 时序数据库
《docker高级篇(大厂进阶):7.Docker容器监控之CAdvisor+InfluxDB+Granfana》包括:原生命令、是什么、compose容器编排,一套带走
《docker高级篇(大厂进阶):7.Docker容器监控之CAdvisor+InfluxDB+Granfana》包括:原生命令、是什么、compose容器编排,一套带走
124 77
|
13天前
|
监控 Docker 容器
在Docker容器中运行打包好的应用程序
在Docker容器中运行打包好的应用程序
|
6天前
|
数据建模 应用服务中间件 nginx
docker替换宿主与容器的映射端口和文件路径
通过正确配置 Docker 的端口和文件路径映射,可以有效地管理容器化应用程序,确保其高效运行和数据持久性。在生产环境中,动态替换映射配置有助于灵活应对各种需求变化。以上方法和步骤提供了一种可靠且易于操作的方案,帮助您轻松管理 Docker 容器的端口和路径映射。
36 3
|
13天前
|
Prometheus 监控 Cloud Native
如何使用Prometheus监控Docker Swarm集群的资源使用情况?
还可以根据实际需求进行进一步的配置和优化,如设置告警规则,当资源使用超出阈值时及时发出警报。通过这些步骤,能够有效地使用 Prometheus 对 Docker Swarm 集群的资源进行监控和管理。
34 8
|
13天前
|
存储 缓存 监控
Docker容器性能调优的关键技巧,涵盖CPU、内存、网络及磁盘I/O的优化策略,结合实战案例,旨在帮助读者有效提升Docker容器的性能与稳定性。
本文介绍了Docker容器性能调优的关键技巧,涵盖CPU、内存、网络及磁盘I/O的优化策略,结合实战案例,旨在帮助读者有效提升Docker容器的性能与稳定性。
43 7
|
13天前
|
存储 Prometheus 监控
Docker容器内进行应用调试与故障排除的方法与技巧,包括使用日志、进入容器检查、利用监控工具及检查配置等,旨在帮助用户有效应对应用部署中的挑战,确保应用稳定运行
本文深入探讨了在Docker容器内进行应用调试与故障排除的方法与技巧,包括使用日志、进入容器检查、利用监控工具及检查配置等,旨在帮助用户有效应对应用部署中的挑战,确保应用稳定运行。
24 5
|
13天前
|
开发框架 安全 开发者
Docker 是一种容器化技术,支持开发者将应用及其依赖打包成容器,在不同平台运行而无需修改。
Docker 是一种容器化技术,支持开发者将应用及其依赖打包成容器,在不同平台运行而无需修改。本文探讨了 Docker 在多平台应用构建与部署中的作用,包括环境一致性、依赖管理、快速构建等优势,以及部署流程和注意事项,展示了 Docker 如何简化开发与部署过程,提高效率和可移植性。
34 4
|
13天前
|
负载均衡 网络协议 算法
Docker容器环境中服务发现与负载均衡的技术与方法,涵盖环境变量、DNS、集中式服务发现系统等方式
本文探讨了Docker容器环境中服务发现与负载均衡的技术与方法,涵盖环境变量、DNS、集中式服务发现系统等方式,以及软件负载均衡器、云服务负载均衡、容器编排工具等实现手段,强调两者结合的重要性及面临挑战的应对措施。
36 3
|
13天前
|
存储 安全 数据安全/隐私保护
Docker 容器化应用管理更加高效,但数据安全和业务连续性成为关键。
在数字化时代,Docker 容器化应用管理更加高效,但数据安全和业务连续性成为关键。本文探讨了 Docker 应用的备份与恢复策略,涵盖备份的重要性、内容、方法及常见工具,制定备份策略,恢复流程及注意事项,并通过案例分析和未来趋势展望,强调备份与恢复在保障应用安全中的重要性。
23 2
|
13天前
|
存储 安全 数据中心
Docker 容器凭借轻量级和高效的特性,成为应用部署的重要工具
Docker 容器凭借轻量级和高效的特性,成为应用部署的重要工具。本文探讨了 Docker 如何通过 Namespace 和 Cgroups 实现 CPU、内存、网络和存储资源的隔离,提高系统安全性和资源利用率,以及面临的挑战和应对策略。
29 1