云原生监控:Prometheus+Grafana实战部署
在云原生架构日益普及的今天,企业对系统可观测性的要求已从“可看”升级为“可测、可告、可优”。无论是微服务集群、Kubernetes容器平台,还是无服务器函数计算,都需要一套稳定、高效、可扩展的监控体系。Prometheus 与 Grafana 的组合,已成为云原生监控的事实标准。本文将深入解析如何在生产环境中实战部署 Prometheus + Grafana,构建企业级监控平台,助力数据中台、数字孪生和数字可视化系统实现全链路可观测。
Prometheus 是由 CNCF(云原生计算基金会)孵化的开源监控系统,专为动态云环境设计。其核心优势包括:
http_requests_total{method="GET", status="200", service="order-api"}。Grafana 则是领先的开源可视化平台,支持超过50种数据源,其核心价值在于:
二者结合,形成“采集 → 存储 → 查询 → 可视化 → 告警”闭环,是构建数字孪生系统监控底座的理想选择。
在开始部署前,请确保以下环境就绪:
💡 提示:若部署在云平台(如阿里云、AWS),请配置安全组规则允许上述端口入站。
mkdir -p ~/prometheus-grafana/{prometheus,grafana}cd ~/prometheus-grafana创建以下文件:
docker-compose.ymlprometheus/prometheus.ymlgrafana/provisioning/datasources/datasource.ymlgrafana/provisioning/dashboards/dashboard.jsonglobal: scrape_interval: 15s evaluation_interval: 15sscrape_configs: - job_name: 'prometheus' static_configs: - targets: ['localhost:9090'] - job_name: 'node-exporter' static_configs: - targets: ['host.docker.internal:9100'] # 本地主机监控 - job_name: 'kubernetes-pods' kubernetes_sd_configs: - role: pod relabel_configs: - source_labels: [__meta_kubernetes_pod_annotation_prometheus_io_scrape] action: keep regex: true - source_labels: [__meta_kubernetes_pod_annotation_prometheus_io_path] action: replace target_label: __metrics_path__ regex: (.+) - source_labels: [__address__, __meta_kubernetes_pod_annotation_prometheus_io_port] action: replace target_label: __address__ regex: (.+):(?:\d+);(\d+) replacement: $1:$2✅ 此配置已包含对本地 Node Exporter 和 Kubernetes Pod 的自动发现支持。如需对接真实 K8s 集群,需挂载 kubeconfig 文件并配置 RBAC。
apiVersion: 1datasources: - name: Prometheus type: prometheus url: http://prometheus:9090 access: proxy isDefault: true version: 1 editable: false可从 Grafana Dashboard Library 下载官方模板,例如:
将 JSON 文件保存为 dashboard.json,并放入 grafana/provisioning/dashboards/ 目录。
version: '3.8'services: prometheus: image: prom/prometheus:v2.51.1 container_name: prometheus ports: - "9090:9090" volumes: - ./prometheus/prometheus.yml:/etc/prometheus/prometheus.yml - prometheus_data:/prometheus command: - '--config.file=/etc/prometheus/prometheus.yml' - '--storage.tsdb.path=/prometheus' - '--web.console.templates=/etc/prometheus/consoles' - '--web.console.templates=/etc/prometheus/console_templates' restart: unless-stopped node-exporter: image: prom/node-exporter:v1.6.1 container_name: node-exporter ports: - "9100:9100" volumes: - /proc:/proc:ro - /:/rootfs:ro - /sys:/sys:ro restart: unless-stopped grafana: image: grafana/grafana:10.2.2 container_name: grafana ports: - "3000:3000" volumes: - ./grafana/provisioning/datasources:/etc/grafana/provisioning/datasources - ./grafana/provisioning/dashboards:/etc/grafana/provisioning/dashboards - grafana_data:/var/lib/grafana environment: - GF_SECURITY_ADMIN_USER=admin - GF_SECURITY_ADMIN_PASSWORD=Prometheus!2024 restart: unless-stoppedvolumes: prometheus_data: grafana_data:docker-compose up -d等待 1~2 分钟,访问:
admin / Prometheus!2024100 - (avg by (instance) (irate(node_cpu_seconds_total{mode="idle"}[5m])) * 100)(node_memory_MemTotal_bytes - node_memory_MemAvailable_bytes) / node_memory_MemTotal_bytes * 100rate(node_disk_read_bytes_total[1m]) 和 rate(node_disk_written_bytes_total[1m])在 Grafana 中创建面板,使用 Stat 和 Graph 展示实时趋势,设置告警阈值(如内存 > 85%)。
若部署于 K8s,需额外部署:
通过 Grafana 导入 Kubernetes / API Server (ID: 3119) 仪表盘,即可看到:
📊 数字孪生系统中,这些指标可映射为虚拟实体的“生理状态”,实现物理世界与数字世界的同步感知。
使用 Prometheus Client SDK(如 Python、Java、Go)在应用中埋点:
from prometheus_client import Counter, start_http_serverREQUEST_COUNT = Counter('http_requests_total', 'Total HTTP Requests', ['method', 'endpoint'])@app.route('/api/orders')def get_orders(): REQUEST_COUNT.labels(method='GET', endpoint='/api/orders').inc() return jsonify(orders)启动 HTTP 服务暴露 /metrics 端点,Prometheus 自动抓取,即可在 Grafana 中绘制:
Prometheus 内置 Alertmanager 实现告警路由。创建 alertmanager.yml:
route: receiver: 'email-notifications'receivers:- name: 'email-notifications' email_configs: - to: 'alert@yourcompany.com' from: 'prometheus@yourcompany.com' smarthost: 'smtp.yourcompany.com:587' auth_username: 'user' auth_password: 'pass'在 Prometheus 中定义告警规则 rules/alerts.yml:
groups:- name: example rules: - alert: HighPodRestartRate expr: rate(kube_pod_container_status_restarts_total[5m]) > 0.1 for: 10m labels: severity: critical annotations: summary: "Pod restart rate exceeds 0.1 per minute"重启 Prometheus 加载规则,告警将通过 Email、Slack、Webhook 通知到运维团队。
| 优化项 | 建议 |
|---|---|
| 存储 | 使用 SSD 磁盘,设置 storage.tsdb.retention.time=30d 避免磁盘爆满 |
| 高可用 | 部署多个 Prometheus 实例 + Thanos 或 Cortex 实现长期存储 |
| 权限 | 在 Grafana 中启用 LDAP/SAML 登录,禁用匿名访问 |
| 备份 | 定期导出仪表盘 JSON,备份 prometheus_data 卷 |
| 监控监控 | 用 Prometheus 监控自身指标,避免“监控雪崩” |
Prometheus + Grafana 不仅限于指标监控。通过集成:
企业可构建“三位一体”可观测性平台:Metrics(指标)、Logs(日志)、Traces(链路)。
Prometheus + Grafana 的部署不是终点,而是数字化运营的起点。当您能实时看到微服务的调用延迟、容器的资源争抢、数据库的慢查询趋势时,系统稳定性将从“被动救火”转向“主动预防”。
对于正在构建数据中台、推进数字孪生项目的企业而言,这套监控体系是连接物理世界与数字世界的“神经网络”。它让抽象的数据流动变得可视化,让系统健康度可量化、可追踪、可优化。
为加速您的云原生监控体系建设,我们提供专业部署支持与定制化仪表盘模板,立即申请试用&https://www.dtstack.com/?src=bbs,获取企业级监控最佳实践手册。
想要一键部署完整监控栈?我们已封装 Helm Chart 与 Terraform 模块,支持私有云与混合云环境,立即申请试用&https://www.dtstack.com/?src=bbs。
无论您是运维工程师、数据架构师,还是数字孪生项目负责人,这套方案都值得纳入您的技术选型清单。现在就行动,申请试用&https://www.dtstack.com/?src=bbs,开启您的可观测性升级之旅。
附:推荐学习资源
通过本文部署,您已掌握云原生监控的核心能力。下一步,是将监控数据与业务 KPI 关联,让技术指标驱动商业决策。
申请试用&下载资料