编程开源技术交流,分享技术与知识

网站首页 > 开源技术 正文

容器监控方案cAdvisor+InfluxDB+Grafana实现案例

wxchong 2024-10-15 17:19:46 开源技术 15 ℃ 0 评论

容器监控方案cAdvisor+InfluxDB+Grafana实现案例

容器监控的方案有很多,有docker自身的docker stats命令、有Scout、有Data Dog等等,本文主要和大家分享一下比较经典的容器开源监控方案组合:cAdvisor+InfluxDB+Grafana

1.概念

??cAdvisor:用于数据采集

??InfluxDB:用于数据存储

??Grafana: 用于数据展示



1.1 cAdvisor

它是Google用来监测单节点的资源信息的监控工具。Cadvisor提供了一目了然的单节点多容器的资源监控功能。Google的Kubernetes中也缺省地将其作为单节点的资源监控工具,各个节点缺省会被安装上Cadvisor。总结起来主要两点:

展示 Host 和容器两个层次的监控数据。

展示历史变化数据。

由于 cAdvisor 提供的操作界面略显简陋,而且需要在不同页面之间跳转,并且只能监控一个 host,这不免会让人质疑它的实用性。但 cAdvisor 的一个亮点是它可以将监控到的数据导出给第三方工具,由这些工具进一步加工处理。

?我们可以把 cAdvisor 定位为一个监控数据收集器,收集和导出数据是它的强项,而非展示数据


1.2 InfluxDB

InfluxDB 是用Go语言编写的一个开源分布式时序、事件和指标数据库,无需外部依赖。类似的数据库有Elasticsearch、Graphite等

InfluxDB主要特色功能

基于时间序列,支持与时间有关的相关函数(如最大,最小,求和等);

可度量性:你可以实时对大量数据进行计算;

基于事件:它支持任意的事件数据;

InfluxDB主要特点

无结构(无模式):可以是任意数量的列;

可拓展的;

支持min, max, sum, count, mean, median 等一系列函数,方便统计;

原生的HTTP支持,内置HTTP API;

强大的类SQL语法;

自带管理界面,方便使用;


1.3 Grafana

Grafana是一个可视化面板(Dashboard),有着非常漂亮的图表和布局展示,功能齐全的度量仪表盘和图形编辑器,支持Graphite、zabbix、InfluxDB、Prometheus和OpenTSDB作为数据源。Grafana主要特性:灵活丰富的图形化选项;可以混合多种风格;支持白天和夜间模式;多个数据源


2.部署过程

创建Influxdb容器,创建数据用户、数据库;

创建cAdvisor容器;

创建Grafana容器,配置grafana;


2.1 创建influxdb容器

启动容器,tutum/influxdb这里没有指定版本,默认会pull最新版本的influxdb:

docker run -d --name influxdb -p 8083:8083 -p 8086:8086 tutum/influxdb


方法2:

#获取镜像

docker pull tutum/influxdb

#修改标识

docker tag tutum/influxdb:latest k8s4:5000/influxdb

#推送到私有仓库

docker push k8s4:5000/influxdb

#新节点上启动influxdb

docker run -d --name influxdb -p 8083:8083 -p 8086:8086 k8s4:5000/influxdb


参数说明:

-d :后台运行此容器;

--name :启运容器分配名字influxdb;

-p :映射端口,8083端口为infuxdb后台控制端口,8086端口是infuxdb的数据端口;

tutum/influxdb:通过这个容器来运行的,默认会在docker官方仓库pull下来;


访问influxdb (节点IP+8083)

http://192.168.10.37:8083

创建cadvisor数据库cadvisor、用户root,用户和数据库可以自行定义,是用于后期grafana的配置

CREATE USER "root" WITH PASSWORD 'ld2019' WITH ALL PRIVILEGES

按回车执行

创建数据库

CREATE DATABASE "cadvisor"


2.2 创建cadvisor容器

运行cadvisor容器:

docker run \ --volume=/:/rootfs:ro \ --volume=/var/run:/var/run:rw \ --volume=/sys:/sys:ro \ --volume=/var/lib/docker/:/var/lib/docker:ro \ -p 8080:8080 \ --name=cadvisor \ google/cadvisor:latest \ -storage_driver=influxdb \ -storage_driver_db=cadvisor \ -storage_driver_host=192.168.10.37:8086


参数说明:

-d :后台运行此容器;

--name :启运容器分配名字cadvisor;

-p :映射端口8080;

--volume:把宿主机的相关目录绑定到容器中,这些目录都是cadvisor需要采集的目录文件和监控内容;

-storage_driver:需要指定cadvisor的存储驱动、数据库主机、数据库名;

google/cadvisor:通过cadvisor这个镜像来运行容器,默认会在docker官方仓库把镜像pull下来;


方法2:

使用daemonset方式部署

#cadvisor.yaml

apiVersion: apps/v1
kind: DaemonSet
metadata:
  name: cadvisor
  namespace: kube-system
  labels:
    app: cadvisor
spec:
  selector:
    matchLabels:
      name: cadvisor
  template:
    metadata:
      labels:
        name: cadvisor
    spec:
      hostNetwork: true
      tolerations:
      - key: node-role.kubernetes.io/master
        effect: NoSchedule
        key: enabledDiskSchedule
        value: "true"
        effect: NoSchedule
      containers:
      - name: cadvisor
        image: k8s4:5000/cadvisor:latest  
        imagePullPolicy: IfNotPresent
        volumeMounts:
        - name: rootfs
          mountPath: /rootfs
          readOnly: true
        - name: var-run
          mountPath: /var/run
          readOnly: false
        - name: sys
          mountPath: /sys
          readOnly: true
        - name: docker
          mountPath: /var/lib/docker
          readOnly: true
        ports:
          - name: http
            containerPort: 4194
            protocol: TCP
        readinessProbe:
          tcpSocket:
            port: 4194
          initialDelaySeconds: 5
          periodSeconds: 10
        args:
          - --housekeeping_interval=10s
          - --port=4194
          - --storage_driver=influxdb
          - --storage_driver_db=cadvisor
          - --storage_driver_host=192.168.10.37:8086
      terminationGracePeriodSeconds: 30
      volumes:
      - name: rootfs
        hostPath:
          path: /
      - name: var-run
        hostPath:
          path: /var/run
      - name: sys
        hostPath:
          path: /sys
      - name: docker
        hostPath:
          path: /var/lib/docker


部署:kubectl create -f cadvisor.yaml

访问:

节点IP+4194端口

http://192.168.10.38:4194/

从上图可以看到,其实cadvisor也有基础的图形展示功能,我们这里主要用它来做数据采集


2.3 创建granafa容器

运行granafa容器:

docker run -d --name grafana --net monitor -p 3000:3000 grafana/grafana


方法2:

#获取镜像

docker pull grafana/grafana

#添加标识

docker tag grafana/grafana k8s4:5000/grafana

#推送到私有仓库

docker push k8s4:5000/grafana

#其他节点启动

docker run -d --name grafana -p 3000:3000 k8s4:5000/grafana


通过节点IP+3000端口访问

http://192.168.10.38:3000

默认 admin/admin

已改:admin/ld2019

添加数据源Add data source


新建New dashboard,如下图:


新建了一个监控项之后,回来HOME,可以发现刚才创建的项目:

到这里cAdvisor+InfluxDB+Grafana容器监控系统就部署完成了

Tags:

本文暂时没有评论,来添加一个吧(●'◡'●)

欢迎 发表评论:

最近发表
标签列表