news 2026/5/12 10:13:10

第七部分-容器安全与监控——34. 容器监控

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
第七部分-容器安全与监控——34. 容器监控

34. 容器监控

1. 容器监控概述

容器监控是保障容器化应用稳定运行的关键环节,包括资源监控、性能监控、健康检查和告警等。本节将介绍主流容器监控方案。

┌─────────────────────────────────────────────────────────────┐ │ 容器监控架构 │ ├─────────────────────────────────────────────────────────────┤ │ │ │ ┌─────────────────────────────────────────────────────┐ │ │ │ 数据采集层 │ │ │ │ ┌─────────┐ ┌─────────┐ ┌─────────┐ │ │ │ │ │cAdvisor │ │Node │ │Prometheus│ │ │ │ │ │ │ │Exporter │ │Client │ │ │ │ │ └────┬────┘ └────┬────┘ └────┬────┘ │ │ │ └───────┼────────────┼────────────┼────────────────────┘ │ │ │ │ │ │ │ ▼ ▼ ▼ │ │ ┌─────────────────────────────────────────────────────┐ │ │ │ 存储层 │ │ │ │ Prometheus / InfluxDB │ │ │ └─────────────────────────────────────────────────────┘ │ │ │ │ │ ▼ │ │ ┌─────────────────────────────────────────────────────┐ │ │ │ 可视化层 │ │ │ │ Grafana / Kibana / Datadog │ │ │ └─────────────────────────────────────────────────────┘ │ │ │ └─────────────────────────────────────────────────────────────┘

2. 基础监控命令

2.1 Docker Stats

# 查看所有容器资源使用dockerstats# 查看特定容器dockerstats container1 container2# 只显示当前状态(不持续刷新)dockerstats --no-stream# 格式化输出dockerstats--format"table {{.Name}}\t{{.CPUPerc}}\t{{.MemUsage}}\t{{.NetIO}}"# 只看 CPU 和内存dockerstats--format"{{.Name}}: CPU={{.CPUPerc}} MEM={{.MemUsage}}"# 输出到文件dockerstats --no-stream>stats.log

2.2 Docker Top

# 查看容器内进程dockertopcontainer_name# 查看带详细信息的进程dockertopcontainer_name aux# 查看特定 PIDdockertopcontainer_name1# 自定义输出字段dockertopcontainer_name-eopid,comm,pcpu,pmem

2.3 Docker Inspect

# 查看容器状态dockerinspect container_name--format='{{.State.Status}}'# 查看容器退出码dockerinspect container_name--format='{{.State.ExitCode}}'# 查看容器启动时间dockerinspect container_name--format='{{.State.StartedAt}}'# 查看容器资源限制dockerinspect container_name--format='{{.HostConfig.Memory}}'# 查看容器网络设置dockerinspect container_name--format='{{.NetworkSettings}}'

3. cAdvisor

3.1 部署 cAdvisor

# 运行 cAdvisor 容器dockerrun-d\--namecadvisor\--restartalways\-p8080:8080\-v/:/rootfs:ro\-v/var/run:/var/run:ro\-v/sys:/sys:ro\-v/var/lib/docker/:/var/lib/docker:ro\-v/dev/disk/:/dev/disk:ro\gcr.io/cadvisor/cadvisor:latest# 访问界面# http://localhost:8080# 查看 Docker 容器指标# http://localhost:8080/docker/

3.2 cAdvisor 指标

# 获取 cAdvisor 指标curlhttp://localhost:8080/metrics# 常见指标# container_cpu_usage_seconds_total# container_memory_usage_bytes# container_network_receive_bytes_total# container_fs_usage_bytes

4. Prometheus + Grafana

4.1 部署 Prometheus

# prometheus.ymlglobal:scrape_interval:15sevaluation_interval:15sscrape_configs:-job_name:'docker'static_configs:-targets:['cadvisor:8080','node-exporter:9100']-job_name:'prometheus'static_configs:-targets:['localhost:9090']
# 运行 Prometheusdockerrun-d\--nameprometheus\-p9090:9090\-v$(pwd)/prometheus.yml:/etc/prometheus/prometheus.yml\prom/prometheus

4.2 部署 Node Exporter

# 运行 Node Exporterdockerrun-d\--namenode-exporter\--restartalways\-p9100:9100\-v/proc:/host/proc:ro\-v/sys:/host/sys:ro\-v/:/rootfs:ro\prom/node-exporter

4.3 部署 Grafana

# 运行 Grafanadockerrun-d\--namegrafana\-p3000:3000\-eGF_SECURITY_ADMIN_PASSWORD=admin\grafana/grafana# 访问 http://localhost:3000# 用户名: admin# 密码: admin

4.4 Grafana 配置

# 添加 Prometheus 数据源# URL: http://prometheus:9090# 导入 Docker 监控面板# Dashboard ID: 193 (Docker Monitoring)# Dashboard ID: 179 (Docker Engine Metrics)

5. 健康检查

5.1 Dockerfile 健康检查

# Dockerfile 健康检查 HEALTHCHECK --interval=30s --timeout=3s --start-period=5s --retries=3 \ CMD curl -f http://localhost/ || exit 1 # 自定义健康检查脚本 HEALTHCHECK --interval=30s \ CMD /app/healthcheck.sh

5.2 运行时健康检查

# 创建带健康检查的容器dockerrun-d\--nameweb\--health-cmd="curl -f http://localhost/ || exit 1"\--health-interval=30s\--health-timeout=3s\--health-retries=3\--health-start-period=10s\nginx# 查看健康状态dockerinspect--format='{{.State.Health.Status}}'web# 查看健康检查日志dockerinspect--format='{{json .State.Health}}'web|jq

6. 告警配置

6.1 Prometheus 告警规则

# alert.rulesgroups:-name:containerrules:-alert:ContainerHighCPUexpr:sum(rate(container_cpu_usage_seconds_total[5m])) by (name)>0.8for:5mlabels:severity:warningannotations:summary:"Container {{ $labels.name }} CPU usage high"-alert:ContainerHighMemoryexpr:container_memory_usage_bytes / container_spec_memory_limit_bytes>0.9for:5mlabels:severity:warningannotations:summary:"Container {{ $labels.name }} memory usage high"-alert:ContainerDownexpr:time()-container_last_seen>60for:1mlabels:severity:criticalannotations:summary:"Container {{ $labels.name }} is down"

6.2 AlertManager 配置

# alertmanager.ymlroute:group_by:['alertname']group_wait:10sgroup_interval:10srepeat_interval:1hreceiver:'email'receivers:-name:'email'email_configs:-to:'admin@example.com'from:'alertmanager@example.com'smarthost:'smtp.example.com:587'auth_username:'user'auth_password:'password'-name:'webhook'webhook_configs:-url:'http://webhook.example.com/alert'

7. 监控脚本

7.1 资源监控脚本

#!/bin/bash# monitor.shwhiletrue;doecho"=====$(date)====="# CPU 使用率echo"CPU Usage:"dockerstats --no-stream--format"{{.Name}}: {{.CPUPerc}}"# 内存使用echo"Memory Usage:"dockerstats --no-stream--format"{{.Name}}: {{.MemUsage}}"# 容器状态echo"Container Status:"dockerps--format"table {{.Names}}\t{{.Status}}"sleep60done

7.2 告警脚本

#!/bin/bash# alert.shTHRESHOLD_CPU=80THRESHOLD_MEM=90whilereadcontainer;doCPU=$(dockerstats --no-stream--format"{{.CPUPerc}}"$container|tr-d'%')MEM=$(dockerstats --no-stream--format"{{.MemPerc}}"$container|tr-d'%')if(($(echo "$CPU>$THRESHOLD_CPU"|bc-l)));thenecho"WARNING: Container$containerCPU usage:${CPU}%"# 发送告警fiif(($(echo "$MEM>$THRESHOLD_MEM"|bc-l)));thenecho"WARNING: Container$containerMemory usage:${MEM}%"# 发送告警fidone<<(dockerps-q)

8. 性能分析工具

8.1 Docker Events

# 实时监控 Docker 事件dockerevents# 过滤特定事件dockerevents--filterevent=startdockerevents--filterevent=diedockerevents--filterevent=oom# 过滤特定容器dockerevents--filtercontainer=web# 时间范围dockerevents--since1h--until30m

8.2 Docker System

# 磁盘使用情况dockersystemdfdockersystemdf-v# 清理命令dockersystem prunedockersystem prune-a--volumes

9. 监控最佳实践

✅ 推荐做法

  1. 多层次监控:容器、宿主机、应用
  2. 关键指标:CPU、内存、网络、磁盘 I/O
  3. 健康检查:配置应用健康检查
  4. 日志监控:集中日志收集
  5. 告警配置:设置合理阈值
  6. 数据保留:根据需求设置保留策略

❌ 避免事项

  • 监控指标过多导致性能问题
  • 告警阈值设置不当产生噪音
  • 忽略健康检查配置
  • 没有可视化面板

10. 常用命令速查

操作命令
实时监控docker stats
查看进程docker top
查看事件docker events
磁盘使用docker system df
健康检查docker inspect --format='{{.State.Health.Status}}'
cAdvisordocker run -d -p 8080:8080 gcr.io/cadvisor/cadvisor
Prometheusdocker run -d -p 9090:9090 prom/prometheus
Grafanadocker run -d -p 3000:3000 grafana/grafana

11. 常见问题

Q1: docker stats 显示 0% 怎么回事?

容器可能刚启动或处于空闲状态,等待一段时间。

Q2: 如何监控容器内部应用?

使用应用性能监控(APM)工具,如 Jaeger、Zipkin。

Q3: Prometheus 如何发现容器?

使用 Docker Swarm 或 Kubernetes 的服务发现。

12. 小结

  • 基础监控:docker stats、top、events
  • cAdvisor:容器资源监控工具
  • Prometheus + Grafana:主流监控方案
  • 健康检查:应用可用性检测
  • 告警配置:及时发现问题
  • 监控脚本:自定义监控需求
  • 性能分析:系统级和容器级
  • 合理设置监控指标和告警阈值

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/5/12 10:13:05

WarcraftHelper:如何让经典魔兽争霸3在现代系统上流畅运行?

WarcraftHelper&#xff1a;如何让经典魔兽争霸3在现代系统上流畅运行&#xff1f; 【免费下载链接】WarcraftHelper Warcraft III Helper , support 1.20e, 1.24e, 1.26a, 1.27a, 1.27b 项目地址: https://gitcode.com/gh_mirrors/wa/WarcraftHelper 你是否还在为魔兽争…

作者头像 李华
网站建设 2026/5/12 10:09:04

自动化营销系统:高效破解市场-SDR销售线索流转堵点

在B2B营销中&#xff0c;线索从“获取”到“转化”的过程&#xff0c;往往伴随着大量的手动操作、信息断层和跟进滞后。尤其是市场团队与SDR&#xff08;销售开发代表&#xff09;之间的协作&#xff0c;常常成为线索流转的“瓶颈”。如何高效、规范地将市场获取的Leads转化为可…

作者头像 李华
网站建设 2026/5/12 10:07:47

dvwa xss 从low到impossible 以及一些必备要点

1. XSS (Reflected) - 反射型反射型 XSS 是最基础的考点&#xff0c;重点在于理解“输入即输出”。知识点与技能​黑名单绕过​&#xff1a;大小写混淆、双写绕过。​标签替换​&#xff1a;当 <script>​ 被禁用时&#xff0c;利用 <img>​, <a>​, <svg…

作者头像 李华
网站建设 2026/5/12 10:07:24

网络常见面试题

1、TCP与UDP的区别对比维度TCPUDP传输方式基于数据流基于数据报连接性需要建立连接&#xff08;点对点&#xff09;不需要建立连接&#xff08;支持一对多&#xff09;可靠性高可靠&#xff0c;保证数据安全、无丢失、无差错、按序到达不保证送达&#xff0c;不保证内容正确机制…

作者头像 李华