• 第七课 :cadvisor+prometheus+grafana监控docker


    1. Cadvisor概述

    为了解决docker stats的问题(存储、展示),谷歌开源的cadvisor诞生了,cadvisor不仅可以搜集一台机器上所有运行的容器信息,还提供基础查询界面和http接口,方便其他组件如Prometheus进行数据抓取,或者cadvisor + influxdb + grafna搭配使用。

    cAdvisor可以对节点机器上的资源及容器进行实时监控和性能数据采集,包括CPU使用情况、内存使用情况、网络吞吐量及文件系统使用情况

    Cadvisor使用Go语言开发,利用Linux的cgroups获取容器的资源使用信息,在K8S中集成在Kubelet里作为默认启动项,官方标配。

    官网:https://github.com/google/cadvisor

    优缺点:

    • 优点:谷歌开源产品,监控指标齐全,部署方便,而且有官方的docker镜像。
    • 缺点:集成度不高,默认只在本地保存1分钟数据,但可以集成InfluxDB等存储

    需要注意:cadvisor相当于监控docker的agent,需要在每个docker主机上安装。

    1.1 docker部署cadvisor

    docker run -d 
      --volume=/:/rootfs:ro 
      --volume=/var/run:/var/run:ro 
      --volume=/sys:/sys:ro 
      --volume=/var/lib/docker/:/var/lib/docker:ro 
      --volume=/dev/disk/:/dev/disk:ro 
      --publish=8080:8080 
      --detach=true 
      --name=cadvisor 
      --privileged 
      --device=/dev/kmsg 
      google/cadvisor:latest
    

    安装完成以后可以使用http://<hostname>:<port>/访问cadvisor的页面,cadvisor并不存储数据,只是实时数据的展示,故页面加载会比较慢。

    2.Prometheus概述

    Prometheus是由SoundCloud开发的开源监控报警系统和时序列数据库(TSDB)。Prometheus使用Go语言开发,是Google BorgMon监控系统的开源版本。
    2016年由Google发起Linux基金会旗下的原生云基金会(Cloud Native Computing Foundation), 将Prometheus纳入其下第二大开源项目。
    Prometheus目前在开源社区相当活跃。
    Prometheus和Heapster(Heapster是K8S的一个子项目,用于获取集群的性能数据。)相比功能更完善、更全面。
    Prometheus性能也足够支撑上万台规模的集群。

    2.1 Prometheus的主要特点:

    • 多维度数据模型
    • 灵活的查询语言
    • 不依赖分布式存储,单个服务器节点是自主的
    • 通过 pull 方式采集时序数据
    • 可以通过中间网关进行时序列数据推送
    • 通过服务发现或者静态配置来发现目标服务对象
    • 支持多种界面展示方案,比如 grafana 等

    事实上,业界多把 prometheus 用于容器监控的解决方案,比如与 k8s 的集成。使用 cadvisor + prometheus + grafana 搭建容器监控事实上已经成为了中小企业的首选方案。

    官网:https://prometheus.io/

    2.2 docker部署Prometheus

    docker部署Prometheus之前,首先创建一个配置文件/etc/prometheus/prometheus.yml,挂载之前将文件权限改为777,避免出现修改doacker主机上的文件内容不同步的温恩提。
    配置文件

    mkdir -p /etc/prometheus
    cat >>/etc/prometheus/prometheus.yml<<EOF
    global:
      scrape_interval:     15s
      evaluation_interval: 15s
    scrape_configs:
      - job_name: 'prometheus'
        static_configs:
        - targets: ['localhost:9090']
      
      - job_name: 'docker'
        static_configs:
        - targets: ['192.168.68.144:8081','192.168.68.143:8081','192.168.68.121:8080']
    EOF
    chmod 777 /etc/prometheus/prometheus.yml
    

    官方prometheus.yaml配置文件内容说明如下:

    # my global config
    global:
      scrape_interval:     15s # Set the scrape interval to every 15 seconds. Default is every 1 minute.
      evaluation_interval: 15s # Evaluate rules every 15 seconds. The default is every 1 minute.
      # scrape_timeout is set to the global default (10s).
    
    # Alertmanager configuration
    alerting:
      alertmanagers:
      - static_configs:
        - targets:
          # - alertmanager:9093
    
    # Load rules once and periodically evaluate them according to the global 'evaluation_interval'.
    rule_files:
      # - "first_rules.yml"
      # - "second_rules.yml"
    
    # A scrape configuration containing exactly one endpoint to scrape:
    # Here it's Prometheus itself.
    scrape_configs:
      # The job name is added as a label `job=<job_name>` to any timeseries scraped from this config.
      - job_name: 'prometheus'
    
        # metrics_path defaults to '/metrics'
        # scheme defaults to 'http'.
    
        static_configs:
        - targets: ['localhost:9090']
      
    

    本次我们主要增加job和被监控端配置,
    job 分组
    targets 被监控端

    启用Prometheus容器

      docker run -d 
        --name=prometheus 
        -p 9090:9090 
        -v /etc/prometheus/prometheus.yml:/etc/prometheus/prometheus.yml 
        prom/prometheus 
        --config.file=/etc/prometheus/prometheus.yml 
        --web.enable-lifecycle
    

    注意:启动时加上--web.enable-lifecycle的作用是启用远程热加载配置文件,在修改prometheus配置文件后不用重启容器即可生效。
    调用指令是curl -X POST http://localhost:9090/-/reload

    访问http://192.168.68.144:9090
    我们会看到如下界面
    avator

    访问http://192.168.68.144:9090/metrics
    avator

    我们配置了9090端口,默认prometheus会抓取自己的/metrics接口
    在Graph选项已经可以看到监控的数据
    avator

    3. docker部署grafana

    3.1 概述

    Grafana是用于可视化大型测量数据的开源程序,它提供了强大和优雅的方式去创建、共享、浏览数据。
    Dashboard中显示了你不同metric数据源中的数据。
    Grafana最常用于因特网基础设施和应用分析,但在其他领域也有用到,比如:工业传感器、家庭自动化、过程控制等等。
    Grafana支持热插拔控制面板和可扩展的数据源,目前已经支持Graphite、InfluxDB、OpenTSDB、Elasticsearch、Prometheus等。

    官网:https://grafana.com/
    https://github.com/grafana

    3.2 部署grafana

    docker run -d -it 
      --name grafana 
      -e TZ="Asia/Shanghai" 
      -p 3000:3000  
      -e GF_SMTP_ENABLED=true 
      -e GF_SMTP_SKIP_VERIFY=true 
      -e GF_SMTP_HOST=smtp.exmail.qq.com:465  
      -e GF_SMTP_USER=admin-network@chinacache.com 
      -e GF_SMTP_PASSWORD=VDSmZXjNRxebJx5g 
      -e GF_SMTP_FROM_ADDRESS=admin-network@chinacache.com  
      -v /data/grafana/plugins:/var/lib/grafana/plugins  
      -v /data/grafana/grafana.db:/var/lib/grafana/grafana.db  
      -v /etc/localtime:/etc/localtime:ro 
      grafana/grafana:latest grafana
    

    容器启动以后使用http://192.168.68.144:3000登陆grafana,默认用户名和密码均为admin。
    选择configuration->data source添加数据源

    avator

    数据源添加成功以后,可以从grafana的官网上查找社区分享的dashboard,如我们主要监控docker则可以从官网搜索docker监控的dashboard。
    https://grafana.com/grafana/dashboards

    我们使用ID为“11277”的dashboard做示例
    选择dashboard->manage->import输入11277->load->选择prometheus源->import导入成功

    avator

    我们可以自定义variable方式选择不同的docker主机的container检测图显示
    方法为:
    dashboard setting->variables->new
    通过添加variables字段实现筛选功能

    avator

    分别添加Node和container字段内容后,可以在监控图页面通过节点和容器进行筛选显示
    avator

    grafana社区提供了多种多样的dashboard可供选择

    至此,我们通过使用cadvisor+prometheus+grafana实现docker基本监控。
    难点和待进一步研究点后续补充
    prometheus
    alertmanager配置
    promql命令行
    exporter collector配置

  • 相关阅读:
    【Rust】多种错误类型
    【Rust】Result别名
    【Rust】Option然后
    【Rust】可选和错误
    【Rust】Result问号
    【Rust】Option转换
    【Rust】Option展开
    【Rust】Result结果
    【Rust】Result提前返回
    jQuery过滤 安静点
  • 原文地址:https://www.cnblogs.com/Doc-Yu/p/13408285.html
Copyright © 2020-2023  润新知