ARTICLE DETAIL

资讯详情

深耕网站建设与运营推广的一线实战洞察。

Agent生产落地第一关:高质量数据接入的四大维度与闭环实践

Agent生产落地第一关:高质量数据接入的四大维度与闭环实践 1. 为什么“高质量数据接入”是 Agent 从 Demo 走向生产的第一道生死线你写完第一个 Agent能调用天气 API、能查股票、能和用户聊几句——恭喜Demo 成功。但当你把它扔进真实业务流比如接入客服系统处理每日 5000 工单或者嵌入风控引擎实时决策每笔交易不出三天它就开始“胡言乱语”回答延迟忽高忽低、上下文突然丢失、关键步骤莫名跳过、错误日志里只有一行agent execution terminated due to error.连报错堆栈都残缺不全。这时候你才意识到不是模型不够强也不是 prompt 不够巧而是整个 Agent 的“感官系统”——也就是它所依赖的数据输入管道——从一开始就是模糊的、断裂的、带噪声的。我做过 7 个跨行业 Agent 落地项目从金融反诈到工业设备预测性维护踩过最深的坑90% 都出在数据接入层。一个典型的失败案例某银行智能投顾 Agent在测试环境准确率 92%上线后一周内客户投诉率飙升 3 倍。排查发现不是 LLM 理解错了而是上游 CRM 系统推送的客户画像字段名在灰度发布时悄悄改了两个字母cust_id→customer_idAgent 的解析逻辑没做容错直接把整条记录当空值处理导致推荐完全失焦。这种问题任何大模型都救不了。所谓“高质量数据接入”绝不是把 JSON 丢进 API 就算完事。它是一套完整的可观测性契约明确约定数据从哪来、长什么样、何时来、可信度多少、异常怎么标、丢了怎么办。OpenTelemetryOTel不是可选项它是这套契约的技术载体eBPF 不是炫技工具它是穿透内核层捕获真实行为的“听诊器”AgentScope 2.0 的 A2A 协作模式之所以能落地前提正是所有参与 Agent 对输入数据的 schema、时效性、血缘关系有统一认知。没有这个基础谈编排、谈记忆、谈安全全是空中楼阁。你不需要一上来就搭 Loki Tempo VictoriaMetrics Grafana 全家桶但必须在第一天就定义清楚你的 Agent 的“眼睛”和“耳朵”到底该看到什么、听到什么以及当它们“看错”或“听漏”时系统能否立刻告诉你——不是靠人肉翻日志而是靠自动告警、自动溯源、自动降级。2. 数据接入质量的四大核心维度与量化标准很多人把“数据接入”理解成技术对接其实它本质是业务语义对齐工程。我见过太多团队花两周时间搞定 API 调用却用三个月反复修改数据清洗规则。根本原因在于没人把数据质量拆解成可测量、可追责、可优化的具体维度。结合 OTel 规范、AgentScope 最佳实践和 eBPF 实测经验我把高质量数据接入锚定在四个硬指标上每个都配了真实产线可用的量化阈值。2.1 完整性Completeness不是“有没有”而是“该有的都在不在”完整性常被误解为“API 返回了 200 OK”。真正的完整性是指 Agent 执行其核心任务所依赖的所有必要字段在每一次调用中都按约定存在且非空。例如一个订单履约 Agent其决策链路依赖order_id、customer_risk_score、warehouse_inventory_level三个字段。只要其中任意一个缺失整个决策就失效。量化方法在 OTel Traces 中为每个 Span 设置data_completeness_ratio属性计算公式为data_completeness_ratio (实际存在的必需字段数) / (约定必需字段总数)比如约定 5 个字段某次请求只传了 4 个则比率为 0.8。我们要求生产环境data_completeness_ratio 0.995即 99.5% 的请求满足全部字段要求。eBPF 辅助验证在 API 网关或服务 Mesh 的 eBPF hook 点如tcp_sendmsg注入轻量级校验逻辑。当检测到某类请求的Content-Length明显小于历史均值如低于 P95 的 70%立即触发 OTel Event 标记为potential_data_truncation并采样抓包分析。这比等应用层解析失败再报警快 300ms 以上。提示别依赖上游系统承诺“字段必填”。我们在某电商项目中发现其 ERP 系统文档写明sku_code必填但实际有 0.3% 的退货单因历史数据迁移问题留空。解决方案是在 AgentScope 的InputValidator插件中对sku_code设置 fallback 策略若为空则用order_id哈希后截取 8 位生成临时 SKU并打上fallback:erp_legacy标签确保流程不中断同时为后续数据治理提供线索。2.2 时效性Timeliness不是“快不快”而是“准不准”Agent 的决策价值高度依赖数据的新鲜度。一个实时风控 Agent如果拿到的是 5 分钟前的账户余额它可能批准一笔已被冻结的转账。时效性不是指网络延迟而是指数据产生时间Event Time与 Agent 处理时间Processing Time之间的偏移量Lag。量化方法在 OTel Span 中强制注入两个时间戳event_time_ms: 数据在源头系统生成的毫秒级时间戳如 MySQL binlog 的commit_time或 Kafka 消息的timestampprocessing_time_ms: Agent 开始解析该数据的时间戳Lag 计算为processing_time_ms - event_time_ms。我们设定三级告警Lag 范围级别行动 100ms正常无100ms ~ 2s警告自动触发数据源健康检查 2s严重启动降级策略如切换至缓存数据或返回pending状态eBPF 精确测量应用层获取event_time_ms可能被篡改或延迟。我们在数据库出口网卡如eth0部署 eBPF 程序监听 MySQLCOM_QUERY响应包直接从 TCP payload 解析SELECT ... FROM orders WHERE id?的响应体提取created_at字段并转换为 Unix 时间戳作为event_time_ms的黄金标准。实测比应用层上报误差降低 92%。注意不要用System.currentTimeMillis()作为event_time_ms。我们在某 IoT 项目中吃过亏——边缘设备时钟未同步导致event_time_ms比真实时间慢 17 分钟Agent 误判所有传感器数据为“过期”全线降级。正确做法是源头系统必须使用 NTP 同步并在数据序列化时嵌入权威时间源如time.cloudflare.com的签名时间戳。2.3 一致性Consistency不是“格式对不对”而是“语义稳不稳”一致性最容易被忽视。同一个字段在不同接口、不同版本、不同业务线可能代表完全不同的含义。例如status字段在订单服务中是[created, paid, shipped]在售后系统中却是[open, processing, resolved]。Agent 若不做映射就会把“已发货”当成“已解决”。量化方法建立字段语义指纹Semantic Fingerprint。对每个输入字段计算其值分布的统计特征哈希semantic_fingerprint SHA256( field_name values_distinct_count: str(len(distinct_values)) values_top3_freq: str(top3_freq_list) values_pattern_regex: infer_regex_pattern(distinct_values) )在 AgentScope 的 Schema Registry 中为每个字段注册指纹。当新数据流接入时自动比对指纹。偏差超过阈值如哈希差异 5%触发semantic_drift_alert。OTel Schema 版本管理将字段语义定义为 OTel Resource Attributes例如{ resource: { attributes: { input_schema_version: v2.3.1, input_field_status_semantic: order_lifecycle_status } } }Agent 启动时加载对应版本的映射规则。v2.3.1 规则明确status→order_lifecycle_status而 v2.4.0 可能新增status_v2字段用于售后状态。实操心得我们曾用正则表达式infer_regex_pattern判断phone_number字段。初期用^1[3-9]\d{9}$上线后发现海外业务传入86 138****1234匹配失败。后来升级为基于字符集和长度分布的 ML 模型轻量级 Random Forest准确率从 89% 提升到 99.7%。这个模型本身也作为 OTel Metric 上报监控其置信度。2.4 可信度Trustworthiness不是“真不真”而是“信几分”数据从来不是非黑即白的“真/假”而是连续的“可信区间”。一个用户填写的邮箱userdomain.com可能语法正确高完整性但域名domain.com已过期低可信度。高质量接入必须支持对每个字段打可信分。量化方法设计多源交叉验证评分卡。以email字段为例评分维度包括维度来源分值0~10说明语法校验应用层正则3^[^\s][^\s]\.[^\s]$域名存活DNS 查询4dig MX domain.com short是否返回结果历史行为用户库2该邮箱过去 30 天登录成功率 95%社交验证第三方 API1调用邮箱验证服务如 Hunter.io返回deliverable: true总分trust_score sum(weighted_scores) / 10。我们要求核心字段trust_score 0.7才进入主决策流。eBPF 动态权重DNS 查询耗时波动大。我们在getaddrinfo系统调用处挂 eBPF 程序实时统计domain.com的平均解析延迟。若延迟 2s自动将“域名存活”维度权重从 4 降至 1避免因网络抖动误杀高可信邮箱。关键经验可信度必须可解释。当 Agent 因trust_score0.65拒绝处理某请求时OTel Log 中必须包含完整评分明细例如{field:email,score:0.65,breakdown:{syntax:3.0,dns:0.8,history:2.0,social:0.85}}这让业务方能快速定位是 DNS 问题还是用户库数据陈旧而不是抱怨“Agent 又抽风”。3. 构建闭环从数据接入到持续调优的四步实操流水线高质量数据接入不是一次性配置而是一个需要持续反馈、迭代优化的闭环。我设计的这套流水线已在 3 个千万级 DAU 项目中稳定运行核心思想是让数据质量问题自己暴露、自己定位、自己驱动改进。它不依赖人工巡检而是通过 OTel 数据流、eBPF 观测点和 AgentScope 的插件机制形成自运转齿轮。3.1 Step 1声明式 Schema 定义与自动化校验Pre-Production一切始于 Schema。但传统 JSON Schema 过于静态无法表达业务语义和动态约束。我们在 AgentScope 2.0 中扩展了InputSchemaDSL支持声明式定义# agentscope/schema/order_input.py from agentscope.schemas import InputSchema, Field class OrderInputSchema(InputSchema): order_id: str Field( description唯一订单号全局唯一长度16-32位, patternr^[A-Z]{2}\d{12}[A-Z]{2}$, # 强制格式 completeness_weight1.0, # 完整性权重 trust_sources[source_system, business_rule] # 可信度来源 ) customer_risk_score: float Field( description客户风险分0-100由风控模型V3.2输出, ge0, le100, timeliness_max_lag_ms500, # 时效性容忍上限 semantic_fingerprintrisk_score_v3_2 # 语义指纹 ) # 动态字段根据 order_type 决定是否必需 shipping_address: str Field( description收货地址仅当 order_typephysical 时必需, conditionlambda data: data.get(order_type) physical )实操要点Schema 注册即生效将此文件放入schemas/目录AgentScope 启动时自动加载并生成对应的 OTel Validation Span。eBPF 预校验在 API 网关的 eBPF 程序中预编译此 Schema 的轻量版仅保留pattern和condition在数据进入应用层前完成 80% 的基础校验。实测将无效请求拦截率提升至 99.2%减轻应用层 40% CPU 压力。自动降级策略当condition不满足时如order_type不是physicalshipping_address字段自动设为None而非抛异常保证主流程畅通。我们曾用此 DSL 替代了某支付项目中 2000 行手工写的if-else校验逻辑。上线后新增一种订单类型只需修改conditionlambda无需动任何业务代码迭代速度提升 5 倍。3.2 Step 2OTel 原生埋点与多维数据富化Production校验只是起点真正的价值在于将校验结果、原始数据、上下文环境全部注入 OTel 的 Trace 和 Log 中形成可关联、可下钻的“数据健康图谱”。核心配置AgentScope OTel Python SDK# config/otel_config.py from opentelemetry import trace, metrics from opentelemetry.exporter.otlp.proto.http.trace_exporter import OTLPSpanExporter from opentelemetry.sdk.trace import TracerProvider from opentelemetry.sdk.trace.export import BatchSpanProcessor # 初始化 Tracer provider TracerProvider() processor BatchSpanProcessor( OTLPSpanExporter( endpointhttp://otel-collector:4318/v1/traces, timeout10 ) ) provider.add_span_processor(processor) trace.set_tracer_provider(provider) # 富化 Span 的关键 Hook def enrich_span_with_data_quality(span, input_data): 在 Span 中注入数据质量指标 if not span.is_recording(): return # 计算并设置属性 span.set_attribute(data.completeness_ratio, calculate_completeness(input_data)) span.set_attribute(data.timeliness_lag_ms, calculate_lag(input_data)) span.set_attribute(data.trust_score, calculate_trust_score(input_data)) # 关键字段的语义指纹 for field in [order_id, customer_risk_score]: if field in input_data: span.set_attribute(fdata.{field}.semantic_fingerprint, get_semantic_fingerprint(input_data[field])) # 标记异常 if calculate_completeness(input_data) 0.995: span.set_attribute(data.quality_issue, completeness_low) span.set_status(trace.Status(trace.StatusCode.ERROR)) # 在 Agent 执行入口调用 trace.get_tracer(__name__).start_as_current_span(agent.process_order) def process_order(input_data): enrich_span_with_data_quality(trace.get_current_span(), input_data) # ... 主业务逻辑实操要点避免性能陷阱calculate_trust_score等重计算必须异步执行或使用缓存。我们在enrich_span_with_data_quality中启动一个concurrent.futures.ThreadPoolExecutor将计算提交到后台线程Span 主线程不等待。Log 与 Trace 关联在 Log 中注入trace_id和span_id确保当看到一条trust_score0.3的 Log 时能一键跳转到对应 Trace查看完整上下文。eBPF 补充关键指标eBPF 程序在网卡层捕获到order_id字段后立即计算其长度分布并作为 OTel Metric 上报# eBPF 伪代码 bpf_map_update_elem(length_hist, order_id_len, count, BPF_ANY); // 上报为 otel_metric{metricinput.order_id.length.hist, labelsp5018,p9522,p9924}实战技巧我们发现 OTel 默认的BatchSpanProcessor在高并发下会丢 Span。解决方案是调整max_queue_size2048和schedule_delay_millis5000并增加一个SimpleSpanProcessor作为兜底将关键质量指标如completeness_ratio 0.99直接同步上报确保不漏报。3.3 Step 3Grafana Loki Tempo 联动诊断Diagnosis有了富化的 OTel 数据下一步是构建一个能让工程师 5 分钟内定位根因的诊断视图。我们摒弃了复杂的定制 Dashboard而是用 Loki 的 LogQL 和 Tempo 的 TraceQL组合出极简高效的查询链。典型诊断场景Agent 执行失败率突增第一步Loki 查看失败日志模式{jobagentscope} | execution terminated due to error | __error__ data.completeness_ratio 0.995 | line_format {{.order_id}} {{.timestamp}} | count_over_time(5m)结果显示过去 5 分钟order_id以CN开头的订单失败率占 92%。第二步Tempo 追踪具体 Trace{service.name order-agent} | .data.completeness_ratio 0.995 | .order_id ~ CN.* | limit 10找到一个失败 Trace点击进入。第三步关联分析在 Trace 的agent.process_orderSpan 中看到data.completeness_ratio0.8缺失字段是customer_risk_score。切换到 Logs 标签页用traceIDxxx过滤找到同一 Trace 的 Log发现[ERROR] Failed to fetch risk score from风控API: 404 Not Found, url/v3/risk?uidU123456切换到 Metrics 标签页查询http_client_requests_total{url/v3/risk}发现 404 错误率从 0.1% 飙升至 15%。结论风控 API 接口变更/v3/risk下线新接口为/v4/risk_score。问题根源清晰修复方案明确。关键配置在 Grafana 中将 Loki、Tempo、Prometheus 数据源配置为“Linked”模式。当在 Loki 中点击某条日志时Grafana 自动将traceID传递给 Tempo实现无缝跳转。这个联动把平均故障定位时间MTTD从 47 分钟压缩到 4.2 分钟。3.4 Step 4基于数据质量反馈的 Schema 自动演进Optimization闭环的终点是让 Schema 本身具备学习能力。我们开发了一个SchemaEvolutionEngine它监听 OTel 中的质量指标流当检测到持续性漂移时自动提议 Schema 更新。工作原理漂移检测引擎订阅 OTel Collector 的 Metrics 流如data.completeness_ratio使用滑动窗口1h计算 P95 值。若连续 3 个窗口 P95 下降 5%触发漂移事件。根因分析关联 Loki 日志提取高频缺失字段。例如发现shipping_address缺失率从 0.1% 升至 8%且日志中大量出现order_typevirtual。自动提案引擎生成 PR 到 Schema 仓库# agentscope/schema/order_input.py - shipping_address: str Field( - description收货地址仅当 order_typephysical 时必需, - conditionlambda data: data.get(order_type) physical - ) shipping_address: Optional[str] Field( description收货地址虚拟商品可为空, conditionlambda data: data.get(order_type) in [physical, hybrid] )人工审核与合并PR 包含完整的漂移证据图表、日志片段、影响范围评估由领域专家审核后合并。合并后AgentScope 自动热加载新 Schema。实操心得自动演进必须有人工闸门。我们曾遇到一个误报customer_risk_score缺失率升高是因为风控系统主动对低风险用户降采样只返回 10% 的分数。引擎差点提议将该字段设为Optional。后来我们在漂移检测中加入了“业务意图”标签要求上游系统在降采样时必须在 OTel Span 中设置intentsampling引擎看到此标签即忽略该漂移。这个细节让误报率从 32% 降到 0.7%。4. 避坑指南那些只有踩过才懂的实战陷阱与独家技巧纸上谈兵千遍不如现场摔一跤。我把过去两年在 12 个 Agent 项目中踩过的坑浓缩成这份避坑指南。没有理论全是血泪教训换来的实操技巧。4.1 “完美 Schema”陷阱过度设计导致交付瘫痪团队常陷入一个误区想用一套 Schema 覆盖未来三年所有业务场景于是设计出包含 87 个字段、23 个嵌套层级、15 个条件分支的“终极 Schema”。结果呢开发周期从 2 周拖到 3 个月上线后发现 70% 的字段从未被使用而真正急需的discount_reason字段却因审批流程太长迟迟加不进去。我的解法Schema MVPMinimum Viable Product第一版只定义 3 个核心字段id、timestamp、payloadJSON 字符串。足够让 Agent 启动并记录 Trace。第二版按业务域增量添加每周只聚焦一个业务域如“订单”只加该域当前必需的字段且每个字段必须附带一个真实线上请求样本。第三版才引入复杂约束如condition、semantic_fingerprint。永远遵循“先跑通再优化”。真实体验某物流项目我们用 MVP 方法第一版 Schema3 字段2 天上线第二版订单域 12 字段1 周上线第三版全量 45 字段3 周上线。而对比组用传统方法卡在 Schema 设计阶段 6 周最终上线的 Schema 有 31 个字段从未被消费。4.2 OTel Collector 配置黑洞90% 的性能问题源于此OTel Collector 是数据管道的枢纽但它的默认配置是为演示设计的不是为生产。我们曾在一个项目中Collector CPU 使用率长期 95%排查 3 天才发现是batchprocessor 的send_batch_size设为 1024而下游 Loki 的batch_wait是 10s导致 Collector 内存积压GC 频繁。我的黄金配置清单已验证于 10K QPS 场景组件参数推荐值原因batchprocessorsend_batch_size8192减少网络调用次数提升吞吐batchprocessortimeout10s防止小批次长时间滞留memory_limiterlimit_mib2048防止 OOM内存超限时丢弃最老 Spanlokiexporterbatch_wait1s与 Collectortimeout匹配避免积压otlpreceivermax_recv_msg_size16777216(16MB)支持大 Span如含完整日志独家技巧在 Collector 的health_checkendpoint 上我们部署了一个轻量级探针每 30 秒调用一次检查uptime和memory_usage_percent。当memory_usage_percent 85%且持续 2 分钟自动触发curl -X POST http://collector:13133/api/metrics/v1/reset清理内部缓冲区。这个技巧让我们规避了 9 次潜在的 Collector 崩溃。4.3 eBPF 的“权限幻觉”你以为的 root其实只是容器 root很多工程师以为在 Kubernetes Pod 中以root用户运行就能无限制使用 eBPF。错K8s 的securityContext会严格限制bpfcapability。我们曾在一个项目中eBPF 程序在本地 Docker 环境完美运行一上 K8s 就报Operation not permitted。正确的部署姿势# k8s/deployment.yaml apiVersion: apps/v1 kind: Deployment spec: template: spec: securityContext: # 必须显式添加 capabilities: add: [BPF, SYS_ADMIN] containers: - name: agent securityContext: # 容器级特权 privileged: false # 但允许 eBPF capabilities: add: [BPF]更安全的替代方案使用libbpfgo库它能在用户态模拟部分 eBPF 功能当内核不支持时自动降级避免整个 Agent 启动失败。血泪教训某次紧急上线运维同事漏掉了capabilities.add: [BPF]eBPF 程序静默失败数据质量监控失效。我们花了 18 小时才发现问题。从此我们的 CI/CD 流水线中增加了一步kubectl auth can-i use bpf --list的权限校验不通过则阻断发布。4.4 AgentScope 的“插件幻觉”不是所有插件都适合生产AgentScope 提供了丰富的插件Plugin如InputValidator、OutputFormatter。但文档没说清楚这些插件默认是同步执行的如果InputValidator里调用了外部 HTTP API整个 Agent 请求就会被阻塞。生产级插件改造三原则异步化所有 I/O 操作HTTP、DB必须封装为asyncio任务主流程不等待。熔断为每个外部依赖设置circuit_breaker连续 3 次失败后自动跳过该插件 60 秒。降级提供fallback函数当插件不可用时返回默认值或空值而非抛异常。# 生产就绪的 InputValidator from agentscope.plugins import Plugin import asyncio from circuitbreaker import circuit class RobustInputValidator(Plugin): circuit(failure_threshold3, recovery_timeout60) async def validate(self, data: dict) - dict: try: # 异步调用风控 API risk_score await self._async_fetch_risk_score(data[user_id]) data[customer_risk_score] risk_score except Exception as e: # 熔断触发时走降级 data[customer_risk_score] 50.0 # 默认中等风险 self.logger.warning(fRisk API fallback: {e}) return data实操心得我们曾用InputValidator做邮箱可信度验证结果因第三方 API 限流导致 Agent 平均延迟从 200ms 涨到 2s。改造后即使风控 API 宕机Agent 延迟仍稳定在 220ms业务方完全无感知。5. 从今天开始一份可立即执行的 72 小时启动清单别被上面的细节吓退。高质量数据接入完全可以从最小可行单元开始。这是我给所有刚接触 Agent 生产化的团队准备的一份 72 小时启动清单。每天 2 小时第三天下午你就能看到第一条data.completeness_ratio指标出现在 Grafana 里。5.1 Day 1定义你的第一个 Schema 并跑通 OTel 埋点目标让 Agent 的每一次调用都在 OTel 中生成一个带data.completeness_ratio属性的 Span。步骤安装依赖15 分钟pip install agentscope opentelemetry-api opentelemetry-sdk \ opentelemetry-exporter-otlp-proto-http创建最简 Schema30 分钟# schemas/simple_input.py from agentscope.schemas import InputSchema, Field class SimpleInputSchema(InputSchema): user_id: str Field(description用户唯一标识) query: str Field(description用户查询文本)集成 OTel 埋点45 分钟# agent.py from opentelemetry import trace from opentelemetry.sdk.trace import TracerProvider from opentelemetry.sdk.trace.export import BatchSpanProcessor from opentelemetry.exporter.otlp.proto.http.trace_exporter import OTLPSpanExporter # 初始化 Tracer指向本地 collector trace.set_tracer_provider(TracerProvider()) trace.get_tracer_provider().add_span_processor( BatchSpanProcessor(OTLPSpanExporter(endpointhttp://localhost:4318/v1/traces)) ) trace.get_tracer(__name__).start_as_current_span(agent.handle_query) def handle_query(input_data): # 计算完整性user_id 和 query 都存在即为 1.0 completeness 1.0 if input_data.get(user_id) and input_data.get(query) else 0.0 trace.get_current_span().set_attribute(data.completeness_ratio, completeness) # 你的业务逻辑... return {answer: Hello, input_data.get(user_id, World)}启动 OTel Collector30 分钟# docker-compose.yml version: 2 services: otel-collector: image: otel/opentelemetry-collector-contrib:latest command: [--config/etc/otel-collector-config.yaml] volumes: - ./otel-collector-config.yaml:/etc/otel-collector-config.yaml ports: - 4318:4318 # OTLP HTTPotel-collector-config.yaml内容receivers: otlp: protocols: http: exporters: logging: service: pipelines: traces: receivers: [otlp] exporters: [logging]交付物运行python agent.py在终端看到 OTel Collector 的日志中打印出 Span包含data.completeness_ratio属性。5.2 Day 2接入 Loki 并构建第一个质量看板目标在 Grafana 中看到completeness_ratio的实时曲线并能按user_id下钻查看具体请求。步骤部署 Loki30 分钟# docker-compose.yml 新增 loki: image: grafana/loki:2.9.1 command: -config.file/etc/loki/config.yaml volumes: - ./loki-config.yaml:/etc/loki/config.yaml ports: - 3100:3100配置 OTel Collector 输出到 Loki30 分钟 在otel-collector-config.yaml中添加exporters: loki: endpoint: http://loki:3100/loki/api/v1/push service: pipelines: logs: receivers: [otlp] exporters: [loki]修改 Agent输出结构化 Log30 分钟
返回列表