首页 > 其他分享 >6.prometheus监控--监控docker

6.prometheus监控--监控docker

时间:2024-04-24 19:44:22浏览次数:28  
标签:容器 container -- labels bytes instance prometheus 监控 docker

4.监控docker

为了能够获取到Docker容器的运行状态,用户可以通过Docker的stats命令获取到当前主机上运行容器的统计信息,可以查看容器的CPU利用率、内存使用量、网络IO总量以及磁盘IO总量等信息。

docker stats

# 除了使用命令以外,用户还可以通过Docker提供的HTTP API查看容器详细的监控统计信息

4.1 使用CAdvisor

CAdvisor是Google开源的一款用于展示和分析容器运行状态的可视化工具。通过在主机上运行CAdvisor用户可以轻松的获取到当前主机上容器的运行统计信息,并以图表的形式向用户展示。

docker run -d \
  --restart=always \
  --volume=/:/rootfs:ro \
  --volume=/var/run:/var/run:rw \
  --volume=/sys:/sys:ro \
  --volume=/var/lib/docker/:/var/lib/docker:ro \
  --publish=8080:8080 \
  --name=cadvisor \
  google/cadvisor:latest
4.1.1 Docker-compose安装
mkdir /data/cadvisor

cd /data/cadvisor

#通过cat新建docker-compose.yaml文件
cat > docker-compose.yaml <<"EOF"
version: '3.3'
services:
  cadvisor:
    image: google/cadvisor:latest
    #image: lagoudocker/cadvisor:v0.37.0 #支持ubuntu22.04
    container_name: cadvisor
    restart: always
    volumes:
      - /:/rootfs:ro
      - /var/run:/var/run:rw
      - /sys:/sys:ro
      - /var/lib/docker/:/var/lib/docker:ro
    ports:
      - 8080:8080
EOF

启动:docker-compose up -d

查看访问:http://192.168.10.100:8080/containers/

访问http://192.168.10.100:8080/metrics即可获取到标准的Prometheus监控样本输出

4.2 Prometheus配置

配置prometheus去采集(拉取)cAdvisor的监控样本数据

cd /data/docker-prometheus 

#在scrape_configs(搜刮配置):下面增加如下配置:

cat >> prometheus/prometheus.yml << "EOF"
  - job_name: 'cadvisor'
    static_configs:
    - targets: ['192.168.10.100:8080']
      labels:
        instance: test服务器
EOF

# 由于之前prometheus上已经安装添加了cadvisor,所以现在用添加的方式

  - job_name: 'cadvisor'
    scrape_interval: 15s
    static_configs:
    - targets: ['cadvisor:8080']
      labels:
        instance: Prometheus服务器
    - targets: ['192.168.10.100:8080']
      labels:
        instance: test服务器

重新加载配置

curl -X POST http://localhost:9090/-/reload

检查:

http://192.168.10.14:9090/targets?search=#pool-cadvisor

 4.3 常用监控指标

CAdvisor典型监控指标

container_

指标名称

类型

含义

container_cpu_load_average_10s

gauge

过去10秒容器CPU的平均负载

container_cpu_usage_seconds_total

counter

容器在每个CPU内核上的累积占用时间 (单位:秒)

container_cpu_system_seconds_total

counter

System CPU累积占用时间(单位:秒)

container_cpu_user_seconds_total

counter

User CPU累积占用时间(单位:秒)

container_fs_usage_bytes

gauge

容器中文件系统的使用量(单位:字节)

container_fs_limit_bytes

gauge

容器可以使用的文件系统总量(单位:字节)

container_fs_reads_bytes_total

counter

容器累积读取数据的总量(单位:字节)

container_fs_writes_bytes_total

counter

容器累积写入数据的总量(单位:字节)

container_memory_max_usage_bytes

gauge

容器的最大内存使用量(单位:字节)

container_memory_usage_bytes

gauge

容器当前的内存使用量(单位:字节

container_spec_memory_limit_bytes

gauge

容器的内存使用量限制

machine_memory_bytes

gauge

当前主机的内存总量

container_network_receive_bytes_total

counter

容器网络累积接收数据总量(单位:字节)

container_network_transmit_bytes_total

counter

容器网络累积传输数据总量(单位:字节)

4.4 docker触发器告警规则配置

cat >> prometheus/rules/docker.yml <<"EOF"
groups:
- name: DockerContainers
  rules:
  - alert: ContainerKilled
    expr: time() - container_last_seen > 60
    for: 0m
    labels:
      severity: warning
    annotations:
      isummary: "Docker容器被杀死 容器:{{ $labels.instance }}"
      description: "{{ $value }}个容器消失了"
  # This rule can be very noisy in dynamic infra with legitimate container start/stop/deployment.
  - alert: ContainerAbsent
    expr: absent(container_last_seen)
    for: 5m
    labels:
      severity: warning
    annotations:
      summary: "无容器 容器: {{ $labels.instance }}"
      description: "5分钟检查容器不存在,值为:{{ $value }}"
  - alert: ContainerCpuUsage
    expr: (sum(rate(container_cpu_usage_seconds_total{name!=""}[3m])) BY (instance, name) * 100) > 300
    for: 2m
    labels:
      severity: warning
    annotations:
      summary: "容器cpu使用率告警 容器: {{ $labels.instance }}"
      description: "容器cpu使用率超过300%,当前值为:{{ $value }}"
  - alert: ContainerMemoryUsage
    expr: (sum(container_memory_working_set_bytes{name!=""}) BY (instance, name) / sum(container_spec_memory_limit_bytes > 0) BY (instance, name) * 100) > 80
    for: 2m
    labels:
      severity: warning
    annotations:
      summary: "容器内存使用率告警 容器: {{ $labels.instance }}"
      description: "容器内存使用率超过80%,当前值为:{{ $value }}"
  - alert: ContainerVolumeIoUsage
    expr: (sum(container_fs_io_current{name!=""}) BY (instance, name) * 100) > 80
    for: 2m
    labels:
      severity: warning
    annotations:
      summary: "容器存储io使用率告警 容器: {{ $labels.instance }}"
      description: "容器存储io使用率超过 80%,当前值为:{{ $value }}"
  - alert: ContainerHighThrottleRate
    expr: rate(container_cpu_cfs_throttled_seconds_total[3m]) > 1
    for: 2m
    labels:
      severity: warning
    annotations:
      summary: "容器限制告警 容器:{{ $labels.instance }}"
      description: "容器被限制,当前值为:{{ $value }}"
EOF
docker告警规则

重新加载配置并检查:

curl -X POST http://localhost:9090/-/reload

http://192.168.10.14:9090/rules

http://192.168.10.14:9090/alerts?search=

4.5 dashboard显示

grafana展示prometheus收集到的cadvisor的数据

https://grafana.com/grafana/dashboards/11600-docker-container/ http://192.168.10.14:3000/ https://grafana.com/grafana/dashboards/11600-docker-container/

 

标签:容器,container,--,labels,bytes,instance,prometheus,监控,docker
From: https://www.cnblogs.com/yangmeichong/p/18156181

相关文章

  • CISCN2023初赛-web复现
    Unzip       简单的软链接,都玩烂了。先创个软链接连接到/var/www/html,然后再创个同名文件夹,在这个文件夹下写马,传上去后等效在/var/www/html上写马,直接连接读flag就行了。deserbugjava审计。很显然的反序列化,bugstr传参。lib中出了hutool还有CC3.2.2,但CC自......
  • Rabbit安装指南
    单机部署1、下载镜像方式一:在线拉取dockerpullrabbitmq:3-management方式二:从本地D:\lmdownload\mq.tar加载上传到虚拟机中后,使用命令加载镜像即可:dockerload-imq.tar2、安装执行下面的命令来运行MQ容器:dockerrun\-eRABBITMQ_DEFAULT_USER=root\-eRABBIT......
  • 根据bounding box坐标框绘制mask
    根据boundingbox坐标框绘制maskimportosfromPILimportImage,ImageDraw#定义图像和标注文件夹路径image_folder_path=r'F:\Liang\Datasets\Text_dataset\Tampered-IC13\train_img'annotation_folder_path=r'F:\Liang\Datasets\Text_dataset\Tampered-IC1......
  • 关于Scanner读入数据
    比较一下两段代码。参考https://www.zhihu.com/question/469282210publicvoidtestInsertCustomer(){Scannerscanner=newScanner(System.in);System.out.println("请输入用户名:");Stringname=scanner.next();System.out.println(&quo......
  • Visual Studio Code 检测到#include 错误,请更新includepath。已为此翻译单元 禁用波
    以上问题的出现是因为visualstudiocode的环境没有配置好在界面中按ctrl+shft+p输入Cconfiguration选择上图蓝色框 在上面红色框填上正确的路径(如果没有这个路径要在https://sourceforge.net/projects/mingw-w64/下载MinGW,具体操作b站有可以去看看照着下载)因为用的是c......
  • C#ManualResetEvent 在线程中的使用
    ManualResetEvent用于表示线程同步事件,可以使得线程等待信号发射之后才继续执行下一步,否则一直处于等待状态中。ManualResetEvent的常用方法构造函数ManualResetEvent(bool);ManualResetEventmanualResetEvent=newManualResetEvent(false);//false将初始状态设......
  • 团队练习2
    第二组:项目失败的主要原因可能包括:(1)市场需求不足:可能因为市场调研不足或者市场变化较快,导致项目推出后无法吸引足够的用户。(2)竞争对手过于强大:竞争对手的品牌知名度、服务质量或者资金实力等方面优势过大,导致项目无法在市场上立足。(3)团队管理不善:团队内部出现沟通问题......
  • Markdown To blog 图片文件上传
    具体可见【博客园皮肤美化&写博客】https://www.bilibili.com/video/BV1Rv4y1Y7KH/?share_source=copy_web&vd_source=aa794a877150d12d2f1ff15d63616ad3安装配置打开运行窗口输入control找到程序和功能->启用或关闭windows功能安装NET3.5安装dotnet-sdk-5.0.408-......
  • 【模板】分解质因数 Pollard-Rho
    参见洛谷模板题题解,这里只有代码实现。一些强数据参考(输出了最大质因子)79223372036854775783Prime9223371994482243049303700049392232532901085832072097143214748364822147483647Prime21471175694633721417005691289#include<bits/stdc++.h>usingnamespace......
  • 团队练习2:风险控制1、如果你的项目发布后失败,主要的原因会是什么?2、每个团队列出自己
    团队练习2:风险控制1、如果你的项目发布后失败,主要的原因会是什么?2、每个团队列出自己项目中目前面临的风险,按严重性排序(例如:团队中有人原来许诺要努力工作,但是后来做了南郭先生,这是一个风险)同时列出每条风险的应对方法;3、针对问题1,你们小组如果出现风险,导致项目发布失败,给出应......