【云原生监控】 Grafana/Prometheus/Promtail/Loki/Tempo
Grafana/Prometheus/Promtail/Loki/Tempo监控栈文档Grafana / Prometheus / Promtail / Loki / Tempoloop-agent 的本地可观测性栈链路(trace) 日志(log) 指标(metric)三支柱统一在 Grafana 查询。Jaeger 已下线,由 Tempo 接管链路。1. 组件与职责组件版本职责地址容器内数据目录Grafana11.0.0统一查询/可视化 UI(三种数据源)http://localhost:3000/var/lib/grafanaTempo2.5.0链路(trace)后端,收 OTLP查询 :3200 / OTLP :4317,:4318/var/tempoLoki2.9.8日志(log)后端:3100/lokiPromtail2.9.8日志采集, 推给 Loki(无 UI) :9080/promtailPrometheus2.52.0指标(metric)后端,抓应用指标:9090/prometheusPushgateway1.9.0短命 CLI 批处理任务推指标的中转:9091(无状态)角色一句话Tempo 存链路、Loki 存日志、Prometheus 存指标、Promtail 送日志、Grafana 统一看。2. 数据流图3. 组件如何相互作用应用 → Tempo链路应用用 OpenTelemetry 走 OTLP gRPC 发到localhost:4317OTEL_EXPORTER_OTLP_ENDPOINT。每个 span 带gen_ai.*模型/token/prompt/completion等属性;根 spanturn.N带run_id/session_id/user_id/model。trace_id 带年月日见第 7 节。应用 → trace_archive → Promtail → Loki日志应用把每步事件写成./trace_archive/run_id.jsonl每行一个 JSON 事件。Promtail 挂载该目录、tail 新增行,解析 JSON 后把run_id、etype事件类型提为标签,推到 Loki 的/loki/api/v1/push。Kong → Prometheus指标应用本身不推业务指标;有价值的是 Kong 的/metrics各 key 的请求数/延迟/带宽,按 consumer 拆分。Prometheus 按prometheus.yml抓取。Grafana → 三个数据源Grafana 用 provisioning 预置了 Tempo / Loki / Prometheus 三个数据源(observability/grafana/provisioning/datasources/),开箱即用。trace ↔ log 关联关联键是run_id——它既是 Tempo 里turn.Nspan 的属性,又是 Loki 里日志的标签。Tempo 数据源配了tracesToLogsV2,在一条 trace 的根 span 上点 “Logs for this span” 会自动用{run_id...}跳到 Loki。4. 快速部署前置Docker Desktop。镜像(国内 Docker Hub 常拉不动,用 daocloud 镜像再 retag)for i in grafana/tempo:2.5.0 grafana/loki:2.9.8 grafana/promtail:2.9.8 \ grafana/grafana:11.0.0 prom/prometheus:v2.52.0 prom/pushgateway:v1.9.0; do docker pull docker.m.daocloud.io/$i docker tag docker.m.daocloud.io/$i $i done启动cd repo # 只起监控组件不启动没在用的 kong-dp-ai docker compose up -d tempo loki promtail prometheus grafana # 应用把链路发到 Tempo确认 .env # OTEL_EXPORTER_OTLP_ENDPOINThttp://localhost:4317 # LOOP_TRACE_DIR./trace_archive # 启动应用 uv run --env-file .env python -m service.app验证docker compose ps # 组件是否 Up curl -s http://localhost:3200/ready # Tempo ready curl -s http://localhost:3100/ready # Loki ready curl -s http://localhost:3200/api/search?q%7B%7Dlimit3 # 有没有 trace curl -s -G http://localhost:3100/loki/api/v1/query_range \ --data-urlencode query{servicecatalystm-loop-agent} # 有没有 log停止 / 清理docker compose stop tempo loki promtail prometheus grafana # 停,保留数据 docker compose down -v # 停并删卷(清空数据,谨慎)5. 数据持久化本地当前这套用 docker具名卷落盘,stop/restart不丢数据卷组件存什么保留期tempo-dataTempotrace 块(parquet) WAL48h(block_retention)loki-dataLoki日志 chunks 索引(boltdb-shipper)30 天(retention_period)prometheus-dataPrometheusTSDB 块15 天(默认)grafana-dataGrafanaSQLite(仪表盘/设置)永久promtail-positionsPromtail读取位点(读到哪)—保留期各自在 config 里调:observability/tempo/tempo.yaml、observability/loki/loki-config.yaml、Prometheus 启动参数--storage.tsdb.retention.time。备份某个卷docker run --rm -v catalystm-loop-agent_loki-data:/d -v $PWD/backup:/b \ alpine tar czf /b/loki-data.tgz -C /d .生产上正常怎么存Tempo / Loki把块和索引放对象存储(S3 / GCS / Azure Blob),本地只留 WAL。→ 天然持久、可水平扩展、成本低。Tempo 配storage.trace.backend: s3|gcs|azure;Loki 配storage_configschema_config指向对象存储(新版用 TSDB common.storage.object)。Prometheus数据盘用PV/PVC;长期存储 降采样用remote_write → Thanos / Mimir / Cortex(底层也是对象存储)。Grafana用外部数据库(Postgres/MySQL)替代 SQLite,支持多副本共享;数据源/仪表盘用 provisioning 版本化(本仓库已这么做)。k8s各组件挂 PVC,或直接用官方 Helm chart(Tempo/Loki 的 distributed 版 对象存储 backend)。6. 如何使用Grafana 匿名是 Viewer,看不到 Explore。先右上角Sign in → admin / admin。6.1 查链路 traceExplore → Tempo,TraceQL{ resource.service.name catalystm-loop-agent } # 全部 agent 链路 { span.run_id run-20260717-151046-141652900-20f4b8 } # 某次 run { span.session_id sess-20260717-... } # 某个会话(多轮) { name llm.chat span.gen_ai.request.model gpt-4o } # 某模型的 LLM 调用 { span.gen_ai.usage.output_tokens 500 } # 大输出的调用 { name ~ tool\\..* } # 所有工具检索点开 trace 看瀑布图 → 点llm.chatspan → 右侧看 model / tier / input/output tokens / prompt / completion。6.2 查日志 logExplore → Loki,LogQL{servicecatalystm-loop-agent} # 全部 {run_idrun-20260717-151046-141652900-20f4b8} # 某次 run 全过程 {run_idrun-..., etypedecide} # 只看 decide 事件 {servicecatalystm-loop-agent} | 美妆 # 全文过滤 {servicecatalystm-loop-agent} | json | line_format {{.type}} {{.data}} # 解析 JSON标签run_id(带日期的 run 号)、etype(plan/tool/observe/reflect/decide/…)、service、filename。6.3 查指标 metricExplore → Prometheus,PromQLkong_http_requests_total{servicellm-azure-openai} # 各路由请求数 sum by (consumer) (kong_http_requests_total) # 各 key(consumer)消耗 histogram_quantile(0.95, sum by (le) (rate(kong_request_latency_ms_bucket[5m]))) # p95 延迟6.4 trace ↔ log 互跳trace → logTempo 里打开 trace 的根 spanturn.N(带 run_id)→ “Logs for this span” → 自动{run_id...}跳 Loki。log → traceLoki 日志行里点run_id派生链接,或复制 run_id 去 Tempo 查{ span.run_id ... }。7. trace_id / run_id 约定OTEL trace_idTempo 里显示,32 hex带年月日YYYYMMDD(8)HHMMSS(6)微秒(6)随机(12),如2026071715104614165201d9ff16e960。每会话稳定不变。run_id / session_id业务号,trace_archive 文件名 / Loki 标签run-YYYYMMDD-HHMMSS-ns-rand。三者时间戳一致,可按时间对齐。8. 配置文件位置docker-compose.yml # 所有服务定义 卷 prometheus.yml # Prometheus 抓取配置 observability/ tempo/tempo.yaml # Tempo loki/loki-config.yaml # Loki promtail/promtail-config.yaml # Promtail(采集 ./trace_archive) grafana/provisioning/datasources/{tempo,loki,prometheus}.yml # Grafana 数据源(含关联) dashboards/ # 预置仪表盘(挂载)9. 排查docker compose ps # 谁没起来 docker logs catalystm-loop-agent-promtail-1 # promtail 有没有在推 docker logs catalystm-loop-agent-tempo-1Explore 里没有 Tempo/Loki → 先登录 admin/admin(Viewer 看不到 Explore)。Loki 查不到某次 run → 确认./trace_archive/run.jsonl存在,且LOOP_TRACE_DIR./trace_archive(promtail 挂的就是这个目录)。Tempo 刚跑完查不到 → 等 10–30 秒(ingester 切块后才可搜)。拉不到镜像 → 用docker.m.daocloud.io/image前缀再 retag(Docker Hub 在国内常 EOF)。

相关新闻

Duix.Avatar完整实战指南:零基础掌握免费开源AI数字人克隆神器

Duix.Avatar完整实战指南:零基础掌握免费开源AI数字人克隆神器

Duix.Avatar完整实战指南:零基础掌握免费开源AI数字人克隆神器 【免费下载链接】Duix-Avatar 🚀 Truly open-source AI avatar(digital human) toolkit for offline video generation and digital human cloning. 项目地址: https://gitcode.com/GitHu…

2026/9/13 4:25:35 阅读更多 →
micro-github:3分钟实现GitHub登录集成的终极微服务方案

micro-github:3分钟实现GitHub登录集成的终极微服务方案

micro-github:3分钟实现GitHub登录集成的终极微服务方案 【免费下载链接】micro-github A tiny microservice that makes adding authentication with GitHub to your application easy. 项目地址: https://gitcode.com/gh_mirrors/mi/micro-github micro-gi…

2026/9/10 1:58:28 阅读更多 →
Vibram与Agility Robotics合作:为双足机器人打造智能鞋底,重塑足地交互

Vibram与Agility Robotics合作:为双足机器人打造智能鞋底,重塑足地交互

1. 项目概述:当顶级鞋底科技遇见双足机器人如果你关注过户外徒步或者越野跑,大概率听说过“Vibram”这个牌子——那个黄色八角形的Logo,几乎就是高性能橡胶鞋底的代名词。从登山靴到城市通勤鞋,Vibram的黄金大底以其卓越的抓地力、…

2026/9/12 9:01:04 阅读更多 →

最新新闻

基于Modbus RTU监听的老系统旁路网关实现声光报警联动

基于Modbus RTU监听的老系统旁路网关实现声光报警联动

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/9/15 8:41:37 阅读更多 →
基于uniapp的宠物寄养微信小程序开发实践与踩坑总结

基于uniapp的宠物寄养微信小程序开发实践与踩坑总结

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/9/15 8:41:37 阅读更多 →
AI底层魔法:从低秩矩阵到概率引擎,看透大模型真正的“灵魂”

AI底层魔法:从低秩矩阵到概率引擎,看透大模型真正的“灵魂”

在前三篇文章中,我们从算力成本、开源内幕一路聊到了大模型落地的“四大法宝”。但很多读者在后台留言说,虽然比喻很生动,但遇到面试或者深入看论文时,总觉得还缺了一块拼图:这些技术背后的底层数学逻辑到底是什么&…

2026/9/15 8:41:37 阅读更多 →
UART通信原理深度解析:从物理层到寄存器配置

UART通信原理深度解析:从物理层到寄存器配置

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/9/15 8:41:37 阅读更多 →
基于Python Flask和Vue的医疗器械设备管理系统设计与实现

基于Python Flask和Vue的医疗器械设备管理系统设计与实现

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/9/15 8:41:37 阅读更多 →
Cursor 入门完全指南:从安装到迁移,AI 编程效率翻倍

Cursor 入门完全指南:从安装到迁移,AI 编程效率翻倍

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/9/15 8:40:36 阅读更多 →

日新闻

Java高级技术:从语言特性到性能优化全解析

Java高级技术:从语言特性到性能优化全解析

1. Java高级技术概述Java作为一门成熟的编程语言,经过二十多年的发展已经形成了完整的生态系统。在企业级应用开发、大数据处理、移动开发等领域,Java都占据着重要地位。掌握Java高级技术不仅意味着能够编写更高效的代码,更代表着开发者能够解…

2026/9/15 0:00:23 阅读更多 →
C#与Halcon结合的工业视觉处理实战指南

C#与Halcon结合的工业视觉处理实战指南

1. 项目概述:C#与Halcon强强联合的视觉处理利器这个基于C#和Halcon的视觉处理Demo项目,是我在工业质检领域摸爬滚打多年后提炼出的实战精华。它完美融合了C#的界面开发优势与Halcon强大的图像处理能力,就像给视觉工程师配上了一把瑞士军刀。项…

2026/9/15 0:00:23 阅读更多 →
32路工业串口服务器的硬核选型指南:确定性、鲁棒性与协议下沉

32路工业串口服务器的硬核选型指南:确定性、鲁棒性与协议下沉

1. 为什么“32路复合型”不是营销话术,而是工业现场真实痛点的硬解你有没有遇到过这样的场景:在某大型能源站的PLC机柜里,十几台不同年代、不同品牌的温控仪、电表、气体分析仪、阀门控制器,全靠RS-485总线挂在一根线上&#xff0…

2026/9/15 0:00:23 阅读更多 →

周新闻

AI SDK Harness 依赖更新指南:掌握 harness 包 SDK 依赖的升级、桥接同步与一致性校验

AI SDK Harness 依赖更新指南:掌握 harness 包 SDK 依赖的升级、桥接同步与一致性校验

AI SDK Harness 依赖更新指南:掌握 harness 包 SDK 依赖的升级、桥接同步与一致性校验 【免费下载链接】ai The AI Toolkit for TypeScript. From the creators of Next.js, the AI SDK is a free open-source library for building AI-powered applications and ag…

2026/9/14 5:45:49 阅读更多 →
Refine v5 Ant Design NumberField 组件实战:基于 Intl 的本地化数字格式化

Refine v5 Ant Design NumberField 组件实战:基于 Intl 的本地化数字格式化

Refine v5 Ant Design NumberField 组件实战:基于 Intl 的本地化数字格式化 【免费下载链接】refine A React Framework for building internal tools, admin panels, dashboards & B2B apps with unmatched flexibility. 项目地址: https://gitcode.com/GitH…

2026/9/15 1:32:25 阅读更多 →
Flutter应用改名全指南:从Android到iOS的配置与工具实践

Flutter应用改名全指南:从Android到iOS的配置与工具实践

刚接一个外包项目时,甲方要求把工程里临时用的应用名改成正式产品名。我本来觉得“改名”这种小事,打开配置文件改一行不就完了?结果真动手才发现,Flutter项目里“应用名称”根本不是一处配置,而是一整套散落在 Androi…

2026/9/15 1:32:21 阅读更多 →

月新闻

持续集成 流水线自动化与 声明式交付 实践:原型怎样变成可用功能

持续集成 流水线自动化与 声明式交付 实践:原型怎样变成可用功能

持续集成 流水线自动化与 声明式交付 实践:原型怎样变成可用功能分类:[AI/大模型]细分主题:AI 增强型 CI/CD 流水线自动化与 GitOps 实践:Agent 工作流、工具调用与任务拆解:从原型到生产的验收清单很多团队在尝试用大…

2026/9/14 17:35:10 阅读更多 →
容器编排 生产环境运维与排障实战:复盘记录怎样真正派上用场

容器编排 生产环境运维与排障实战:复盘记录怎样真正派上用场

容器编排 生产环境运维与排障实战:复盘记录怎样真正派上用场分类:[工程技术]细分主题:Kubernetes 生产环境运维与排障实战:可复制的项目复盘模板与决策记录大部分团队的事故复盘报告,最后都变成了躺在 Confluence 或钉…

2026/9/14 16:59:29 阅读更多 →
容器 容器化技术与镜像安全管理:核心链路应该先拆哪一步

容器 容器化技术与镜像安全管理:核心链路应该先拆哪一步

容器 容器化技术与镜像安全管理:核心链路应该先拆哪一步分类:[工程技术]细分主题:Docker 容器化技术与镜像安全管理:核心链路的逐步实现与关键代码取舍面对一个积累了五六年历史包袱的单体架构应用(包含 Web 接口、后台…

2026/9/14 5:45:14 阅读更多 →