新闻详情

新闻详情

首页 / 资讯中心 / 详情

第1篇 Prometheus 监控体系全景与基础环境搭建

发布时间:2026/11/12 12:17:54来源:尧图网络
第1篇 Prometheus 监控体系全景与基础环境搭建
传统监控方案在扩展性上存在明显局限难以满足云原生环境对多维标签监控的需求。Prometheus 凭借多维数据模型、强大的 PromQL 查询语言、主动拉取机制以及丰富的 Exporter 生态原生支持 Kubernetes已然成为云原生监控领域的主流方案。架构与组件方面Prometheus 监控体系的整体架构由以下核心组件协同构成Prometheus Server负责采集与存储监控数据并执行规则计算Exporters负责暴露系统与业务指标如 node_exporter、Spring Boot Actuator、Nginx ExporterAlertmanager负责告警的去重、分组与路由分发Grafana负责监控数据的可视化展示Pushgateway用于短生命周期任务的指标推送Service Discovery负责动态发现监控目标支持静态文件、Consul、Kubernetes 等多种方式。官方架构图本文主要介绍容器化部署方案各工具的详细使用将在后续篇章中详细介绍。一、创建默认桥接网络相同容器使用同一网络时相互间可直接通过容器名访问也可减少对外暴露的端口。创建默认桥接网络docker network create -d bridge my-bridge二、Prometheus 搭建1、prometheus.yml文件默认位置/etc/prometheus/prometheus.yml# my global config global: scrape_interval: 10s # Set the scrape interval to every 15 seconds. Default is every 1 minute. evaluation_interval: 10s # Evaluate rules every 15 seconds. The default is every 1 minute. # scrape_timeout is set to the global default (10s). # Alertmanager configuration alerting: alertmanagers: - static_configs: - targets: # - alertmanager:9093 # Load rules once and periodically evaluate them according to the global evaluation_interval. rule_files: # - first_rules.yml # - second_rules.yml # A scrape configuration containing exactly one endpoint to scrape: # Here its Prometheus itself. scrape_configs: # The job name is added as a label jobjob_name to any timeseries scraped from this config. - job_name: prometheus # metrics_path defaults to /metrics # scheme defaults to http. static_configs: - targets: [127.0.0.1:9090] # The label name is added as a label label_namelabel_value to any timeseries scraped from this config. labels: svc: prometheus - job_name: cim metrics_path: /metrics relabel_configs: - source_labels: [__address__] target_label: instance file_sd_configs: - files: - scrape/cim-local.yml refresh_interval: 5scim-local.yml- targets: - 10.0.2.15:9100 labels: svc: nodb type: node - targets: - 10.0.2.15:8082 labels: svc: nodb type: jvm __metrics_path__: /actuator/prometheus2、修改宿主机数据目录权限确认容器运行用户# 容器已存在时 $ docker exec -it prom id # 还没有容器直接通过镜像查看 $ docker run -it --name prometheus --rm --entrypoint /bin/sh prom/prometheus:v3 /prometheus $ id uid65534(nobody) gid65534(nobody) groups65534(nobody) # 更简洁写法 $ docker run -it --rm --entrypoint id prom/prometheus:v3 uid65534(nobody) gid65534(nobody) groups65534(nobody)输出一般是uid65534(nobody)或者uid1001。修改宿主机数据目录权限假设将宿主机目录/data/volumes/prometheus/data映射到容器内/prometheus# 方式A修改目录属主为prometheus运行uid示例uid65534 $ sudo chown -R 65534:65534 /data/volumes/prometheus # 方式B宽松权限测试环境可用生产优先chown $ sudo chmod -R 775 /data/volumes/prometheus若不修改很可能出现如下报错open /prometheus/queries.active: permission denied failed to initialize active query tracker3、启动服务docker run -d --name prometheus \ --restartalways \ --network my-bridge \ -p 9090:9090 \ -e TZAsia/Shanghai \ -v /data/volumes/prometheus:/etc/prometheus \ -v /data/volumes/prometheus/data:/prometheus \ prom/prometheus:v3 \ --config.file/etc/prometheus/prometheus.yml \ --web.enable-lifecycle注意添加--web.enable-lifecycle参数时一定要显式指定--config.file4、验证配置文件是否正确调整配置文件后先验证配置是否正确避免因配置问题导致服务异常。验证通过后再重新加载配置。$ docker exec -it prometheus promtool check config /etc/prometheus/prometheus.yml Checking /etc/prometheus/prometheus.yml SUCCESS: /etc/prometheus/prometheus.yml is valid prometheus config file syntax5、热加载配置$ curl -XPOST http://127.0.0.1:9090/-/reload Lifecycle API is not enabled.出于安全考虑HTTP 重载接口默认不启用需要先在启动命令中添加--web.enable-lifecycle参数才能开启 /-/reload 接口。接口开启后向 /-/reload 发送 HTTP POST 请求即可触发配置重载。6、单节点资源配置参考监控规模建议监控的 Spring Boot 应用数CPU (核心)内存 (RAM)SSD 存储适用场景与说明中小规模生产5 - 25 个2 - 4 核4 - 8 GB50 - 100 GB适合小型团队或轻量级生产环境。数据保留建议 30 天。大规模生产25 - 100 个4 - 8 核8 - 32 GB100 - 500 GB适合较大规模的监控需求。数据保留可根据需要设置为 30-90 天。高性能/极限场景约 500 个 (估算)8 核32 GB1 TB这是一个理论上限前提是每个应用指标数较少且采集间隔较长如 15s。单节点 Prometheus 理论可支持千级监控目标。⚠️ 注意监控自身务必监控 Prometheus 容器自身的资源使用情况特别是process_resident_memory_bytes内存占用和磁盘使用率。7、几个核心概念为方便对后续篇章的理解请提前熟悉以下概念并注意相互间的区别。1数据模型概念说明示例/格式关键点指标 Metric表示“测什么”http_requests_total指标名是时间序列的一部分标签 Label键值对用于多维区分methodGET,status200标签组合决定时间序列的唯一性时间序列 Time Series指标名 一组标签唯一确定一条序列http_requests_total{methodGET, status200}同一指标不同标签就是不同序列样本 Sample时间序列在某个时间点的值时间戳(ms) 值如1710000000000 1027Prometheus 实际存储的是“序列 时间戳 值”抓取文本格式/metrics暴露的文本格式http_requests_total{methodGET} 1027时间戳通常省略由服务端补当前时间2采集与目标概念说明示例关键点Target被采集的目标10.0.0.1:9100Prometheus 主动拉取目标/metricsScrape一次抓取行为按scrape_interval周期执行默认 15s可在global配置Job一组同类目标的逻辑名称job_name: node来自scrape_configsInstance具体目标地址instance10.0.0.1:9100抓取时自动附加job和instance标签三、Grafana 搭建启动服务docker run -d --namegrafana \ --restartno \ --network my-bridge \ -p 3000:3000 \ -e TZAsia/Shanghai \ -e GF_USERS_DEFAULT_TIMEZONEAsia/Shanghai \ -v /data/volumes/grafana:/var/lib/grafana \ grafana/grafana:13.0.7-ubuntu若需要导出图片请参考《Grafana 开源版导出 Dashboard PDF 教程Docker 部署 Image Renderer 完整指南》四、Alertmanager1、alertmanager.yml# Alertmanager 配置示例 # 覆盖邮件 / Slack / 企业微信 三类接收器 # 路由策略 # 1. 先按 job 分组不同系统job的告警聚合在一起 # 2. 子路由再按 severity 分发Warning → 邮件Critical → 企业微信 # 3. Slack 作为全量告警的备选/备份通道 # 使用方式替换 占位符 后挂载到 Alertmanager 的 --config.file 路径 global: # SMTP 全局配置邮件 smtp_smarthost: smtp.aliyun.com:465 smtp_from: *****aliyun.com smtp_auth_username: *****aliyun.com smtp_auth_password: 123456 smtp_require_tls: false # Slack 全局配置 slack_api_url: https://hooks.slack.com/services/T0BM91K2H2P/B0BMBUKN40M/th4U2ouK2lGzSCeye # 抑制重复告警 resolve_timeout: 5m # 通知模板可选自定义标题和内容格式 templates: - /etc/alertmanager/templates/*.tmpl # 路由树先按 job 分组子路由按 severity 分发 route: # 根路由按 job 分组同一系统的告警聚合在一起 group_by: [job] group_wait: 30s group_interval: 5m repeat_interval: 4h receiver: default routes: # # VM # - matchers: - job vm group_by: [job] group_wait: 1m group_interval: 10m repeat_interval: 1h receiver: slack-all continue: false # # 接收器定义 # receivers: # 默认兜底接收器 - name: default email_configs: - to: ******aliyun.com headers: Subject: [Prometheus][{{ .GroupLabels.severity }}] {{ .GroupLabels.job }} 告警 html: | {{ range .Alerts }} b告警名称:/b {{ .Labels.alertname }}br bJob:/b {{ .Labels.job }}br bSvc:/b {{ .Labels.svc }}br bInstance:/b {{ .Labels.instance }}br b级别:/b {{ .Labels.severity }}br b摘要:/b {{ .Annotations.summary }}br b描述:/b {{ .Annotations.description }}br b开始时间:/b {{ .StartsAt.Format 2006-01-02 15:04:05 }}br hr {{ end }} # -------------------- Slack 接收器 -------------------- - name: slack-all slack_configs: - channel: #ph username: Alertmanager icon_emoji: :warning: title: | [{{ .Status | toUpper }}] {{ .GroupLabels.job }} - {{ .GroupLabels.severity }} text: | {{ range .Alerts }} *Alert:* {{ .Labels.alertname }} *Job:* {{ .Labels.job }} *Svc:* {{ .Labels.svc }} *Instance:* {{ .Labels.instance }} *Severity:* {{ .Labels.severity }} *Summary:* {{ .Annotations.summary }} *Description:* {{ .Annotations.description }} *Started:* {{ .StartsAt.Format 2006-01-02 15:04:05 }} {{ end }} # # 抑制规则Critical 触发时抑制同 jobinstance 的 Warning避免轰炸 # inhibit_rules: - source_match: severity: critical target_match: severity: warning equal: [job, instance]2、启动服务docker run -d --name alertmanager \ --rm \ --restartno \ --network my-bridge \ -p 9093:9093 \ -e TZAsia/Shanghai \ -v /data/volumes/alertmanager:/etc/alertmanager \ prom/alertmanager:v0.33.1配置文件位置/etc/alertmanager/alertmanager.yml。3、验证配置文件是否正确调整配置文件后先验证配置是否正确避免因配置问题导致服务异常。验证通过后再重新加载配置。$ docker exec -it alertmanager amtool check-config /etc/alertmanager/alertmanager.yml Checking /etc/alertmanager/alertmanager.yml SUCCESS Found: - global config - route - 1 inhibit rules - 2 receivers - 1 templates SUCCESS输出SUCCESS yaml 语法、路由、接收器、抑制规则全部校验通过若有错误会直接打印行号和错误原因并以非 0 退出码退出。如果用到模板文件会一并校验模板。4、热加载配置curl -XPOST http://127.0.0.1:9093/-/reload五、Docker Compose 方式部署注意docker-compose独立二进制旧版本Python 编写docker composeDocker Engine 内置插件推荐无短横线Go 编写用法基本一致Docker 19.03版本开始引入docker compose命令作为一项实验性功能。Docker 20.10及更高版本开始被广泛认为“自动集成了 Compose”。Docker 22.06版本明确内置了docker compose插件。1、docker-compose.yml文件示例services: prometheus: image: prom/prometheus:v3 container_name: prometheus restart: always networks: - my-bridge ports: - 9090:9090 environment: - TZAsia/Shanghai volumes: - /data/volumes/prometheus:/etc/prometheus - /data/volumes/prometheus/data:/prometheus command: - --config.file/etc/prometheus/prometheus.yml - --web.enable-lifecycle grafana: image: grafana/grafana:13.0.7-ubuntu container_name: grafana restart: no networks: - my-bridge ports: - 3000:3000 environment: - TZAsia/Shanghai - GF_USERS_DEFAULT_TIMEZONEAsia/Shanghai volumes: - /data/volumes/grafana:/var/lib/grafana alertmanager: image: prom/alertmanager:v0.33.1 container_name: alertmanager restart: no networks: - my-bridge ports: - 9093:9093 environment: - TZAsia/Shanghai volumes: - /data/volumes/alertmanager:/etc/alertmanager networks: my-bridge: external: true2、启动服务$ docker compose up -d [] up 3/3 ✔ Container grafana Created 1.3s ✔ Container alertmanager Created 1.2s ✔ Container prometheus Created 1.2s基础操作# 启动所有服务后台运行推荐 docker compose up -d # 启动并打印日志前台 docker compose up # 重启指定服务 docker compose restart 服务名 # 停止服务不删除容器、网络、卷 docker compose stop # 启动已停止的服务 docker compose start # 停止并删除容器、网络保留数据卷 docker compose down # 停止并删除容器、网络、数据卷⚠️会丢数据 docker compose down -v
网站建设高端定制企业官网
RELATED

相关资讯

更多精彩内容,欢迎继续阅读

较早相关资讯

最新相关资讯

【外设】之大彩串口显示屏 2026/11/11 13:52:51

【外设】之大彩串口显示屏

大彩串口屏初步使用 1 .官网下载 STM32 屏幕 GUI 设计资料 http://www.gz-dc.com/category/typeid/4112 找到 STM32 Keil 工程,移植相关代码因项目而异进行移植,由于项目简单,本人只对用到的指令接口进行修改。 比如:注意事项&…

阅读更多 →
无法下载Windows系统iso文件 2026/11/10 19:42:40

无法下载Windows系统iso文件

当我遇到这个问题的时候,我打开了一个网站: 登录 然后我打算下载的时候: 突然那个官方的连接就可以下载了:

阅读更多 →
【清华代码熊】DeepSeek V4.1 Flash 后训练详解 2026/11/12 9:50:02

【清华代码熊】DeepSeek V4.1 Flash 后训练详解

📌 上期解析了 DeepSeek V4.1 Flash 模型架构改进,本期解析 DeepSeek V4.1 Flash 预训练/后训练技术: 🌟 预训练:45T 文本 多模态混合语料、直接训练 sparse attention(取消 DeepSeek V4 的 dense 冷启动&…

阅读更多 →
Shuffle-R1: Efficient RL framework for Multimodal Large Language Models via Data-centric Dynamic ... 2026/11/12 9:25:38

Shuffle-R1: Efficient RL framework for Multimodal Large Language Models via Data-centric Dynamic ...

文章主要内容和创新点 主要内容 本文聚焦于多模态大语言模型(MLLM)强化学习(RL)训练中的效率问题,提出了一个名为Shuffle-R1的框架。研究发现,当前RL训练存在两个关键缺陷: 优势值坍缩(Advantage Collapsing):批次中大多数优势值集中在零附近,导致有效梯度信号被淹…

阅读更多 →
PRvL: Quantifying the Capabilities and Risks of Large Language Models for PII Redaction 2026/11/11 15:37:39

PRvL: Quantifying the Capabilities and Risks of Large Language Models for PII Redaction

一、文章主要内容总结 本文聚焦于利用大型语言模型(LLMs)实现个人身份信息(PII)脱敏的研究,旨在解决传统脱敏方法(如基于规则的系统、领域特定命名实体识别(NER)模型)泛化能力差、跨格式/跨语境适应性弱的问题。 研究通过全面评估多种LLM架构(包括密集型LLM(D-LLM…

阅读更多 →
LLaVA-RE: Binary Image-Text Relevancy Evaluation with Multimodal Large Language Model 2026/11/10 17:14:10

LLaVA-RE: Binary Image-Text Relevancy Evaluation with Multimodal Large Language Model

文章主要内容和创新点 主要内容 本文聚焦于二进制图像-文本相关性评估任务(判断图像与文本“相关”或“不相关”),针对该任务中文本格式多样、相关性定义随场景变化等挑战,提出了基于多模态大语言模型(MLLM)的解决方案LLaVA-RE。 模型设计:LLaVA-RE基于LLaVA 1.5架构,…

阅读更多 →

今日资讯

本周资讯

本月资讯

看完文章仍有疑问?

联系尧图顾问,获取一对一建站咨询

立即免费咨询 📞 400-888-8888
📞 ✉