跳转至

部署cadvisor采集容器运行数据.md

cAdvisor 简介

一、cAdvisor 的重要性

在容器化环境中,cAdvisor 扮演着至关重要的角色。随着容器技术的广泛应用,对容器资源的有效监控和管理成为关键需求。cAdvisor 满足了这一需求,它不仅提供了对单个机器上所有运行容器的全面信息收集,还为其他监控工具如 Prometheus 提供了数据抓取的接口,从而实现了更广泛的监控体系集成。

二、功能特点详解

多维度监控: CPU 使用情况:准确监测容器对 CPU 的占用情况,帮助用户了解容器在不同时间段的计算资源需求,以便进行资源分配和优化。 内存使用情况:实时跟踪容器的内存使用量,防止内存泄漏和过度占用,确保系统的稳定性。 网络吞吐量:监控容器的网络流量,对于网络密集型应用,能够及时发现网络瓶颈,进行网络配置调整。 文件系统使用情况:了解容器对文件系统的读写操作和空间占用,有助于管理存储资源。 数据保存与导出: 对于每个容器,cAdvisor 会保存丰富的信息,包括资源隔离参数,这对于理解容器的运行环境和限制非常重要。历史资源使用情况的记录可以帮助用户分析容器的资源消耗趋势,而完整历史资源使用情况的直方图则提供了更详细的资源分布信息。网络统计信息的保存有助于排查网络问题。这些数据可以按容器和机器范围导出,方便与其他系统进行集成和分析。

三、使用场景和优势

故障排查:当容器出现性能问题或故障时,cAdvisor 收集的数据可以提供关键线索,帮助开发人员和运维人员快速定位问题所在,例如确定是 CPU 过载、内存不足还是网络问题导致的故障。 资源优化:通过分析 cAdvisor 提供的资源使用数据,用户可以对容器进行优化配置,合理分配资源,提高系统的整体效率和性能。 多容器管理:在大规模容器化环境中,cAdvisor 能够同时监控多个容器和机器,为管理员提供全局视角,便于进行集中管理和资源调度。

四、与其他工具的集成

cAdvisor 与 Prometheus 的集成是其一个重要应用场景。Prometheus 作为强大的监控和告警工具,通过抓取 cAdvisor 提供的 HTTP 接口数据,可以实现对容器资源的全面监控和告警设置。这种集成使得用户可以构建更加完善的监控体系,及时发现潜在问题并采取相应措施。 总之,cAdvisor 作为一款强大的容器监控工具,为容器化环境提供了全面的资源监控和性能分析功能,对于确保容器化应用的稳定运行和高效管理具有重要意义。

部署 cadvisor

Docker Compose 部署 cadvisor

mkdir -p /opt/K8s/cadvisor && cd /opt/K8s/cadvisor

services:
  prometheus:
    image: prom/prometheus:latest
    container_name: prometheus
    ports:
    - 9090:9090
    command:
    - --config.file=/etc/prometheus/prometheus.yml
    volumes:
    - ./prometheus.yml:/etc/prometheus/prometheus.yml:ro
    depends_on:
    - cadvisor
  cadvisor:
    image: gcr.io/cadvisor/cadvisor:latest
    container_name: cadvisor
    ports:
    - 8080:8080
    volumes:
    - /:/rootfs:ro
    - /var/run:/var/run:rw
    - /sys:/sys:ro
    - /var/lib/docker/:/var/lib/docker:ro
    depends_on:
    - redis
  redis:
    image: redis:latest
    container_name: redis
    ports:
    - 6379:6379

docker-compose up

K8s
apiVersion: apps/v1
kind: DaemonSet
metadata:
  name: cadvisor
  namespace: monitoring
spec:
  selector:
    matchLabels:
      app: cAdvisor
  template:
    metadata:
      labels:
        app: cAdvisor
    spec:
      tolerations:    # 污点容忍,忽略 master 的 NoSchedule
        - effect: NoSchedule
          key: node-role.kubernetes.io/master
      hostNetwork: true        # 使用宿主机网络,注意防止端口冲突
      restartPolicy: Always   # 重启策略
      containers:
      - name: cadvisor
        image: harbor.magedu.local/pub-images/cadvisor:v0.39.3
        imagePullPolicy: IfNotPresent  # 镜像策略
        ports:
        - containerPort: 8080       #指定监听端口为8080
        volumeMounts:
          - name: root
            mountPath: /rootfs
          - name: run
            mountPath: /var/run
          - name: sys
            mountPath: /sys
          - name: docker
            mountPath: /var/lib/docker
      volumes:
      - name: root
        hostPath:
          path: /
      - name: run
        hostPath:
          path: /var/run
      - name: sys
        hostPath:
          path: /sys
      - name: docker
        hostPath:
          path: /var/lib/docker

访问

http://127.0.0.1:8080/metrics

修改 prometheus 配置,收集 cadvisor 数据

vim prometheus.yml
scrape_configs:
- job_name: "cAdvisor"
  scrape_interval: 5s
  static_configs:
  - targets: ["192.168.1.99:8080","192.168.3.111:8080"]
    - cadvisor:8080

对接 Grafana 看板