OpenStack on Kubernetes 生产部署实战(十七)

监控告警方案

本文介绍基于 Prometheus 和 Grafana 的监控告警体系。

系列导航

上一篇:集成测试脚本 | 下一篇:备份恢复方案


一、监控架构

Grafana Dashboard
Prometheus Server
Nova Exporter
Neutron Exporter
Keystone Exporter
MariaDB Exporter
RabbitMQ Exporter
Memcached Exporter


二、Prometheus 配置

2.1 部署 Prometheus

bash 复制代码
helm repo add prometheus-community https://prometheus-community.github.io/helm-charts
helm repo update

helm install prometheus prometheus-community/prometheus \
  --namespace monitoring \
  --create-namespace

2.2 告警规则

yaml 复制代码
# prometheus-rules.yaml
apiVersion: monitoring.coreos.com/v1
kind: PrometheusRule
metadata:
  name: openstack-alerts
  namespace: monitoring
spec:
  groups:
  - name: openstack
    interval: 30s
    rules:
    # Nova 服务监控
    - alert: NovaComputeDown
      expr: up{job="nova-compute"} == 0
      for: 5m
      labels:
        severity: critical
      annotations:
        summary: "Nova compute service down"
        
    # Neutron Agent 监控
    - alert: NeutronAgentDown
      expr: neutron_agent_state{adminState="up"} == 0
      for: 5m
      labels:
        severity: warning
        
    # 数据库连接池
    - alert: MariaDBConnectionPoolHigh
      expr: mysql_global_status_threads_connected / mysql_global_variables_max_connections > 0.8
      for: 5m
      labels:
        severity: warning
        
    # RabbitMQ 队列堆积
    - alert: RabbitMQQueueBacklog
      expr: rabbitmq_queue_messages > 1000
      for: 10m
      labels:
        severity: warning

三、Grafana Dashboard

3.1 部署 Grafana

bash 复制代码
helm install grafana grafana/grafana \
  --namespace monitoring \
  --set adminPassword=<your-grafana-password>

3.2 访问 Grafana

bash 复制代码
kubectl port-forward -n monitoring svc/grafana 3000:80
# 访问 http://localhost:3000

3.3 导入 Dashboard

  1. 登录 Grafana
  2. 导入 Dashboard ID:
    • OpenStack Overview: 自定义
    • Node Exporter: 1860
    • MySQL: 7362

四、关键监控指标

4.1 Nova 指标

复制代码
# 虚拟机数量
nova_running_vms

# 虚拟机创建失败率
rate(nova_instance_create_errors[5m])

# Hypervisor 资源使用率
nova_hypervisor_vcpus_used / nova_hypervisor_vcpus * 100

4.2 Neutron 指标

复制代码
# Agent 状态
neutron_agent_state

# 网络数量
neutron_networks_total

# 端口数量
neutron_ports_total

4.3 数据库指标

复制代码
# 连接数
mysql_global_status_threads_connected

# 慢查询
mysql_global_status_slow_queries

# QPS
rate(mysql_global_status_questions[5m])

4.4 RabbitMQ 指标

复制代码
# 队列深度
rabbitmq_queue_messages

# 消息速率
rate(rabbitmq_queue_messages_published_total[5m])

# 连接数
rabbitmq_connections

五、告警通知

5.1 配置 Alertmanager

yaml 复制代码
# alertmanager-config.yaml
global:
  resolve_timeout: 5m

route:
  group_by: ['alertname']
  group_wait: 10s
  group_interval: 10s
  repeat_interval: 1h
  receiver: 'default'

receivers:
- name: 'default'
  email_configs:
  - to: 'admin@example.com'
    from: 'alertmanager@example.com'
    smarthost: 'smtp.example.com:587'
    auth_username: 'alertmanager@example.com'
    auth_password: '<your-smtp-password>'

六、日志聚合

6.1 EFK Stack

bash 复制代码
# 部署 Elasticsearch
helm install elasticsearch elastic/elasticsearch \
  -n logging --create-namespace

# 部署 Fluentd
kubectl apply -f fluentd-daemonset.yaml

# 部署 Kibana
helm install kibana elastic/kibana -n logging

七、健康检查脚本

bash 复制代码
#!/bin/bash
# health-check.sh

echo "=== OpenStack 健康检查 ==="

# 1. 服务状态
echo "[1/5] 检查服务状态"
openstack service list

# 2. 计算服务
echo "[2/5] 检查计算服务"
openstack compute service list

# 3. 网络代理
echo "[3/5] 检查网络代理"
openstack network agent list

# 4. Hypervisor
echo "[4/5] 检查 Hypervisor"
openstack hypervisor list
openstack hypervisor stats show

# 5. Pod 状态
echo "[5/5] 检查 Pod 状态"
kubectl get pods -n openstack | grep -v Running | grep -v Completed

echo "=== 检查完成 ==="

八、监控最佳实践

  1. 设置合理的告警阈值
  2. 避免告警风暴
  3. 定期审查告警规则
  4. 保留历史监控数据
  5. 建立值班机制

下一篇:备份恢复方案

相关推荐
虎头金猫3 天前
4K 视频总卡在公网带宽?用 N1 + OpenList 把网盘播放链路重新理顺
运维·服务器·网络·python·容器·beautifulsoup·pandas
赵文宇(温玉)3 天前
CoreDNS的hosts插件的缺行配置导致k8s集群异常
容器·kubernetes·rancher
guo_wen_qiang3 天前
上传本地镜像到harbor中
docker·容器·持续部署
张洛闻Eren3 天前
k8s云原生【第十课】:水平 Pod 自动扩缩容
运维·数据库·云原生·kubernetes·github
忆~遂愿3 天前
本地片库怎么在外面打开?Plex + cpolar 搭一套可远程访问的私人影音库
docker·容器
Thneonl3 天前
你的 Pod 为什么 Pending:调度器两阶段
后端·kubernetes
不吃香菜kkk、3 天前
CI/CD(GitOps)学习与部署手册
运维·云原生·容器·kubernetes·云计算·jenkins·argocd
九皇叔叔4 天前
Kubernetes 资源管理方式详解:命令式与声明式管理
docker·容器·k8s
JudithHuang4 天前
创建第一台实例:Horizon ↔ CLI
openstack
JudithHuang4 天前
Apple Silicon 上 Cirros 控制台VNC打不了字
openstack