1. 首页 > Podman教程 > 正文

Podman教程FG028-Podman容器监控与告警

本文档风哥主要介绍Podman容器监控与告警,包括监控的概念、告警的概念、监控的重要性以及Prometheus与Grafana部署、Alertmanager配置和Node Exporter部署等内容。风哥教程参考Podman官方文档Monitoring部分,适合容器管理员和开发人员在学习和测试中使用,如果要应用于生产环境则需要自行确认。

Part01-基础概念与理论知识

1.1 监控概念

监控是指对系统的运行状态、性能指标和资源使用情况进行实时观察和记录,以便及时发现和解决问题。Podman容器监控是指对Podman容器、Pod、镜像和系统进行实时监控,包括容器状态、资源使用情况、网络连接、存储使用情况等。更多视频教程www.fgedu.net.cn

监控的目标:

  • 实时了解系统运行状态
  • 及时发现和解决问题
  • 预测系统故障
  • 优化系统性能
  • 确保系统的高可用性

1.2 告警概念

告警是指当系统出现异常情况时,通过各种方式(如邮件、短信、微信等)通知相关人员,以便及时处理。Podman容器告警是指当容器、Pod或系统出现异常情况时,发送告警通知。

1.3 监控的重要性

监控的重要性主要体现在:

  • 及时发现问题:通过监控可以及时发现系统中的问题,避免问题扩大
  • 提高系统可靠性:通过监控可以确保系统的正常运行,提高系统的可靠性
  • 优化系统性能:通过监控可以发现性能瓶颈,优化系统性能
  • 预测系统故障:通过监控可以预测系统故障,提前采取措施
  • 满足合规要求:通过监控可以满足合规要求,确保系统符合规范
风哥提示:容器监控与告警是确保Podman系统正常运行的重要环节,通过实时监控和及时告警,可以及时发现和解决问题,提高系统的可靠性和安全性。学习交流加群风哥微信: itpux-com

Part02-生产环境规划与建议

2.1 监控策略

生产环境中Podman的监控策略:

# 监控策略

## 监控对象
– 容器:容器状态、资源使用、日志等
– Pod:Pod状态、容器状态等
– 镜像:镜像版本、大小、安全漏洞等
– 网络:网络连接、端口占用等
– 存储:存储使用、卷状态等
– 系统:系统资源、进程状态等

## 监控指标
– CPU使用:容器和系统的CPU使用率
– 内存使用:容器和系统的内存使用率
– 磁盘使用:容器和系统的磁盘使用率
– 网络流量:容器和系统的网络吞吐量
– 容器状态:容器的运行状态、重启次数等
– 应用指标:应用的响应时间、请求数等

## 监控频率
– 高频监控:每10秒一次,适用于关键指标
– 中频监控:每30秒一次,适用于一般指标
– 低频监控:每1分钟一次,适用于非关键指标

## 监控工具
– Prometheus:监控系统和容器的性能指标
– Grafana:可视化监控数据
– Node Exporter:收集系统指标
– cAdvisor:收集容器指标
– Alertmanager:处理和发送告警

2.2 告警策略

生产环境中Podman的告警策略:

# 告警策略

## 告警级别
– 紧急:需要立即处理的问题,如系统宕机
– 严重:需要在4小时内处理的问题,如容器异常
– 警告:需要在24小时内处理的问题,如资源使用过高
– 信息:需要关注的问题,如配置变更

## 告警触发条件
– CPU使用率超过80%
– 内存使用率超过85%
– 磁盘使用率超过90%
– 容器重启次数超过3次
– 服务响应时间超过5秒
– 网络连接失败

## 告警通知方式
– 邮件:发送告警邮件
– 短信:发送告警短信
– 微信:发送告警微信
– 电话:拨打告警电话
– 集成:与监控系统集成

## 告警处理流程
– 告警触发:监控系统检测到异常
– 告警发送:通过多种方式发送告警
– 告警接收:相关人员接收告警
– 告警处理:相关人员处理告警
– 告警恢复:问题解决后,告警恢复
– 告警记录:记录告警处理过程

2.3 监控工具

生产环境中Podman的监控工具:

  • Prometheus:开源的监控系统,用于收集和存储监控数据
  • Grafana:开源的可视化平台,用于展示监控数据
  • Alertmanager:用于处理和发送告警
  • Node Exporter:用于收集系统指标
  • cAdvisor:用于收集容器指标
  • ELK Stack:用于收集和分析日志
生产环境建议:合理选择和使用监控工具,制定完善的监控和告警策略,确保系统的正常运行。学习交流加群风哥QQ113257174

Part03-生产环境项目实施方案

3.1 Prometheus与Grafana部署

3.1.1 部署Prometheus

# 部署Prometheus

# 运行Prometheus容器
$ podman run -d –name fgedu-prometheus \
–cpus 2 \
–memory 4g \
-v /Podman/fgdata/prometheus/conf:/etc/prometheus:z \
-v /Podman/fgdata/prometheus/data:/prometheus:z \
-p 9090:9090 \
docker.io/prom/prometheus:v2.43.0

# 配置Prometheus
$ cat > /Podman/fgdata/prometheus/conf/prometheus.yml << EOF global: scrape_interval: 15s evaluation_interval: 15s rule_files: - "alerts.yml" scrape_configs: - job_name: "prometheus" static_configs: - targets: ["localhost:9090"] - job_name: "node" static_configs: - targets: ["192.168.1.10:9100"] - job_name: "cadvisor" static_configs: - targets: ["192.168.1.10:8080"] - job_name: "podman" static_configs: - targets: ["192.168.1.10:9101"] EOF # 配置告警规则 $ cat > /Podman/fgdata/prometheus/conf/alerts.yml << EOF groups: - name: container_alerts rules: - alert: ContainerHighCPU expr: (sum(rate(container_cpu_usage_seconds_total{name!=""}[5m])) by (name) / sum(container_spec_cpu_quota{name!=""} / container_spec_cpu_period{name!=""}) by (name)) * 100 > 80
for: 5m
labels:
severity: warning
annotations:
summary: “Container high CPU usage”
description: “Container {{ labels.name }} has CPU usage above 80% for 5 minutes”

– alert: ContainerHighMemory
expr: (sum(container_memory_usage_bytes{name!=””}) by (name) / sum(container_spec_memory_limit_bytes{name!=””}) by (name)) * 100 > 85
for: 5m
labels:
severity: warning
annotations:
summary: “Container high memory usage”
description: “Container {{ labels.name }} has memory usage above 85% for 5 minutes”

– alert: ContainerRestarted
expr: changes(container_start_time_seconds{name!=””}[1h]) > 3
labels:
severity: critical
annotations:
summary: “Container restarted”
description: “Container {{ labels.name }} has restarted more than 3 times in the last hour”
EOF

# 重启Prometheus
$ podman restart fgedu-prometheus

# 查看容器状态
$ podman ps

# 输出日志
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
7890123456ab docker.io/prom/prometheus /bin/prometheus 2 minutes ago Up 2 minutes ago 0.0.0.0:9090->9090/tcp fgedu-prometheus

3.1.2 部署Grafana

# 部署Grafana

# 运行Grafana容器
$ podman run -d –name fgedu-grafana \
–cpus 2 \
–memory 4g \
-v /Podman/fgdata/grafana/data:/var/lib/grafana:z \
-v /Podman/fgdata/grafana/conf:/etc/grafana:z \
-p 3000:3000 \
docker.io/grafana/grafana:9.5.0

# 配置Grafana
$ cat > /Podman/fgdata/grafana/conf/grafana.ini << EOF [server] http_port = 3000 domain = localhost [database] type = sqlite3 [security] admin_user = admin admin_password = admin [auth] login_maximum_inactive_lifetime_days = 30 [analytics] check_for_updates = true [log] mode = console level = info EOF # 重启Grafana $ podman restart fgedu-grafana # 查看容器状态 $ podman ps # 输出日志 CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES 1234567890ab docker.io/grafana/grafana grafana-server 2 minutes ago Up 2 minutes ago 0.0.0.0:3000->3000/tcp fgedu-grafana

3.2 Alertmanager配置

3.2.1 部署Alertmanager

# 部署Alertmanager

# 运行Alertmanager容器
$ podman run -d –name fgedu-alertmanager \
–cpus 1 \
–memory 2g \
-v /Podman/fgdata/alertmanager/conf:/etc/alertmanager:z \
-p 9093:9093 \
docker.io/prom/alertmanager:v0.25.0

# 配置Alertmanager
$ cat > /Podman/fgdata/alertmanager/conf/alertmanager.yml << EOF global: resolve_timeout: 5m smtp_smarthost: 'smtp.example.com:587' smtp_from: 'alertmanager@example.com' smtp_auth_username: 'alertmanager' smtp_auth_password: 'password' route: group_by: ['alertname'] group_wait: 30s group_interval: 5m repeat_interval: 1h receiver: 'email' receivers: - name: 'email' email_configs: - to: 'admin@example.com' send_resolved: true - name: 'wechat' wechat_configs: - corp_id: 'your_corp_id' api_url: 'https://qyapi.weixin.qq.com/cgi-bin/' to_party: '1' agent_id: 'your_agent_id' api_secret: 'your_api_secret' send_resolved: true inhibit_rules: - source_match: severity: 'critical' target_match: severity: 'warning' equal: ['alertname', 'dev', 'instance'] EOF # 重启Alertmanager $ podman restart fgedu-alertmanager # 查看容器状态 $ podman ps # 输出日志 CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES 9876543210ab docker.io/prom/alertmanager /bin/alertmanager 2 minutes ago Up 2 minutes ago 0.0.0.0:9093->9093/tcp fgedu-alertmanager

# 更新Prometheus配置,添加Alertmanager
$ cat > /Podman/fgdata/prometheus/conf/prometheus.yml << EOF global: scrape_interval: 15s evaluation_interval: 15s rule_files: - "alerts.yml" alerting: alertmanagers: - static_configs: - targets: ['192.168.1.10:9093'] scrape_configs: - job_name: "prometheus" static_configs: - targets: ["localhost:9090"] - job_name: "node" static_configs: - targets: ["192.168.1.10:9100"] - job_name: "cadvisor" static_configs: - targets: ["192.168.1.10:8080"] - job_name: "podman" static_configs: - targets: ["192.168.1.10:9101"] EOF # 重启Prometheus $ podman restart fgedu-prometheus

3.3 Node Exporter部署

3.3.1 部署Node Exporter

# 部署Node Exporter

# 运行Node Exporter容器
$ podman run -d –name fgedu-node-exporter \
–cpus 1 \
–memory 1g \
-v /proc:/host/proc:ro \
-v /sys:/host/sys:ro \
-v /:/rootfs:ro \
-p 9100:9100 \
docker.io/prom/node-exporter:v1.5.0 \
–path.procfs=/host/proc \
–path.rootfs=/rootfs \
–path.sysfs=/host/sys \
–collector.filesystem.mount-points-exclude=”^/(sys|proc|dev|host|etc)($|/)”

# 查看容器状态
$ podman ps

# 输出日志
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
7890123456ab docker.io/prom/node-exporter /bin/node_exporter 2 minutes ago Up 2 minutes ago 0.0.0.0:9100->9100/tcp fgedu-node-exporter

# 测试Node Exporter
$ curl http://localhost:9100/metrics

# 输出日志(部分)
# HELP node_cpu_seconds_total Seconds the CPUs spent in each mode.
# TYPE node_cpu_seconds_total counter
node_cpu_seconds_total{cpu=”0″,mode=”idle”} 12345.67
node_cpu_seconds_total{cpu=”0″,mode=”iowait”} 123.45
node_cpu_seconds_total{cpu=”0″,mode=”irq”} 0.0
node_cpu_seconds_total{cpu=”0″,mode=”nice”} 0.0
node_cpu_seconds_total{cpu=”0″,mode=”softirq”} 0.0
node_cpu_seconds_total{cpu=”0″,mode=”steal”} 0.0
node_cpu_seconds_total{cpu=”0″,mode=”system”} 123.45
node_cpu_seconds_total{cpu=”0″,mode=”user”} 1234.56

风哥提示:Node Exporter是收集系统指标的重要工具,通过部署Node Exporter,可以收集系统的CPU、内存、磁盘、网络等指标,为监控提供数据支持。更多学习教程公众号风哥教程itpux_com

Part04-生产案例与实战讲解

4.1 容器监控

4.1.1 容器监控实战

# 容器监控实战

# 运行cAdvisor容器
$ podman run -d –name fgedu-cadvisor \
–cpus 1 \
–memory 2g \
-v /:/rootfs:ro \
-v /var/run:/var/run:ro \
-v /sys:/sys:ro \
-v /var/lib/containers:/var/lib/containers:ro \
-p 8080:8080 \
docker.io/google/cadvisor:v0.47.0

# 查看容器状态
$ podman ps

# 输出日志
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
7890123456ab docker.io/google/cadvisor /usr/bin/cadvisor 2 minutes ago Up 2 minutes ago 0.0.0.0:8080->8080/tcp fgedu-cadvisor

# 运行测试容器
$ podman run -d –name fgedu-nginx \
-p 80:80 \
docker.io/library/nginx

$ podman run -d –name fgedu-mysql \
-e MYSQL_ROOT_PASSWORD=fgedu123 \
-p 3306:3306 \
docker.io/library/mysql:8.0

# 查看容器状态
$ podman ps

# 输出日志
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
7890123456ab docker.io/google/cadvisor /usr/bin/cadvisor 5 minutes ago Up 5 minutes ago 0.0.0.0:8080->8080/tcp fgedu-cadvisor
1234567890ab docker.io/library/nginx nginx -g daemon 2 minutes ago Up 2 minutes ago 0.0.0.0:80->80/tcp fgedu-nginx
9876543210ab docker.io/library/mysql mysqld 2 minutes ago Up 2 minutes ago 0.0.0.0:3306->3306/tcp fgedu-mysql

# 访问Grafana,配置数据源和仪表盘
# 1. 打开浏览器,访问 http://localhost:3000
# 2. 登录Grafana,用户名和密码均为 admin
# 3. 添加Prometheus数据源
# 4. 导入容器监控仪表盘(ID: 193)
# 5. 查看容器监控数据

4.2 Pod监控

4.2.1 Pod监控实战

# Pod监控实战

# 创建Pod
$ podman pod create –name fgedu-pod -p 80:80 -p 3306:3306

# 运行容器到Pod
$ podman run -d –pod fgedu-pod –name fgedu-nginx docker.io/library/nginx
$ podman run -d –pod fgedu-pod –name fgedu-mysql \
-e MYSQL_ROOT_PASSWORD=fgedu123 \
docker.io/library/mysql:8.0

# 查看Pod状态
$ podman pod ps

# 输出日志
POD ID NAME STATUS CREATED INFRA ID # OF CONTAINERS
1234567890ab fgedu-pod Running 2 minutes ago 7890123456ab 3

# 查看Pod中的容器
$ podman ps –pod fgedu-pod

# 输出日志
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
7890123456ab k8s.gcr.io/pause:3.6 /pause 2 minutes ago Up 2 minutes ago 0.0.0.0:80->80/tcp fgedu-pod-infra
1234567890ab docker.io/library/nginx nginx -g daemon 2 minutes ago Up 2 minutes ago 0.0.0.0:80->80/tcp fgedu-nginx
9876543210ab docker.io/library/mysql mysqld 2 minutes ago Up 2 minutes ago 0.0.0.0:3306->3306/tcp fgedu-mysql

# 访问Grafana,查看Pod监控数据
# 1. 打开浏览器,访问 http://localhost:3000
# 2. 导入Pod监控仪表盘
# 3. 查看Pod监控数据

4.3 系统监控

4.3.1 系统监控实战

# 系统监控实战

# 运行Node Exporter容器
$ podman run -d –name fgedu-node-exporter \
–cpus 1 \
–memory 1g \
-v /proc:/host/proc:ro \
-v /sys:/host/sys:ro \
-v /:/rootfs:ro \
-p 9100:9100 \
docker.io/prom/node-exporter:v1.5.0 \
–path.procfs=/host/proc \
–path.rootfs=/rootfs \
–path.sysfs=/host/sys \
–collector.filesystem.mount-points-exclude=”^/(sys|proc|dev|host|etc)($|/)”

# 访问Grafana,查看系统监控数据
# 1. 打开浏览器,访问 http://localhost:3000
# 2. 导入系统监控仪表盘(ID: 1860)
# 3. 查看系统监控数据

# 测试系统负载
$ stress –cpu 4 –io 2 –vm 1 –vm-bytes 1G –timeout 60s

# 查看告警
# 1. 打开浏览器,访问 http://localhost:9093
# 2. 查看告警状态
# 3. 确认告警通知

生产环境建议:在生产环境中,应建立完善的监控和告警机制,确保系统的正常运行,及时发现和解决问题。from Podman视频:www.itpux.com

Part05-风哥经验总结与分享

5.1 监控最佳实践

Podman容器监控的最佳实践:

  • 全面监控:监控容器、Pod、镜像、网络、存储和系统等各个方面
  • 实时监控:实时收集和分析监控数据,及时发现问题
  • 可视化:使用Grafana等工具可视化监控数据,便于分析和理解
  • 告警配置:合理配置告警规则,确保及时通知
  • 历史数据:存储历史监控数据,便于趋势分析和问题追溯
  • 自动化:自动化监控和告警处理,提高效率
  • 持续优化:根据监控结果,持续优化系统配置和性能
  • 文档记录:记录监控配置和告警处理流程,便于维护和追溯

5.2 告警最佳实践

Podman容器告警的最佳实践:

  • 合理设置告警级别:根据问题的严重程度设置不同的告警级别
  • 避免告警风暴:合理设置告警触发条件,避免频繁告警
  • 多渠道通知:使用多种方式发送告警通知,确保及时接收
  • 告警确认:建立告警确认机制,避免重复处理
  • 告警抑制:当高级别告警触发时,抑制低级别告警
  • 告警恢复:当问题解决后,发送告警恢复通知
  • 告警分析:分析告警数据,找出问题的根本原因
  • 持续改进:根据告警情况,持续优化告警策略

5.3 监控故障排查

Podman容器监控的故障排查:

# 监控故障排查

## 监控数据丢失
– 检查监控工具状态:podman ps | grep prometheus
– 检查网络连接:ping
– 检查配置文件:cat /Podman/fgdata/prometheus/conf/prometheus.yml
– 检查日志:podman logs fgedu-prometheus

## 告警未触发
– 检查告警规则:cat /Podman/fgdata/prometheus/conf/alerts.yml
– 检查告警状态:curl http://localhost:9090/api/v1/alerts
– 检查Alertmanager配置:cat /Podman/fgdata/alertmanager/conf/alertmanager.yml
– 检查Alertmanager状态:podman logs fgedu-alertmanager

## 监控数据不准确
– 检查指标采集:curl http://localhost:9100/metrics
– 检查指标计算:在Prometheus中执行查询
– 检查时间同步:ntpdate
– 检查资源限制:podman inspect fgedu-node-exporter | grep -A 10 “Resources”

## 监控系统性能问题
– 检查监控工具资源使用:podman stats fgedu-prometheus
– 调整采集频率:修改scrape_interval
– 优化存储配置:调整Prometheus存储设置
– 清理历史数据:删除过期监控数据

## 告警通知失败
– 检查通知配置:cat /Podman/fgdata/alertmanager/conf/alertmanager.yml
– 测试通知通道:使用Alertmanager的测试功能
– 检查网络连接:ping
– 检查认证信息:确认用户名和密码正确

风哥提示:容器监控与告警是确保Podman系统正常运行的重要环节,通过实时监控和及时告警,可以及时发现和解决问题,提高系统的可靠性和安全性。建议建立完善的监控和告警机制,确保系统的正常运行,及时发现和解决问题。

本文由风哥教程整理发布,仅用于学习测试使用,转载注明出处:http://www.fgedu.net.cn/10327.html

联系我们

在线咨询:点击这里给我发消息

微信号:itpux-com

工作日:9:30-18:30,节假日休息