想象你是一家大型快递公司的运营主管。每天成千上万的包裹从用户手中发出,经过揽收点、中转场、干线运输、派送网点,最后签收。过去,哪个环节延误了、哪条线路堵了、哪个网点故障了,你只能等客户投诉才知道。后来公司上了一套“物流追踪系统”:每个包裹一张单号,每经一个站点就扫码一次,网点的处理速度、线路的拥堵情况、包裹的异常滞留都会实时汇到总控大屏上。从此,你第一次能对整张运输网络“看得清清楚楚”。 Azure 的 Application Insights 就是 AI 应用的这套“物流追踪系统”。你的 AI 应用每收到一个用户请求,它就像一件包裹,要穿过 API 网关、Azure OpenAI 模型服务、缓存数据库等多个“站点”。App Insights 给每个请求发一张“快递单”(TraceId),在每个服务上自动“扫码”(Span),把所有记录拼成一条完整链路;同时绘制出服务之间的“物流地图”(依赖映射),统计每个网点的“处理速度”(性能监控),甚至在没有预设阈值的情况下自动预警“异常包裹”(智能异常检测)。 这套全链路可观测能力,是云平台 AI 应用运维的“眼睛”。没有它,AI 应用就像一间没有摄像头的库房——模型推理变慢、Token 成本飙升、故障根因难寻,你只能靠猜。
对 AI 从业者来说,掌握 Application Insights 全链路监控,等于掌握了 AI 应用上线后的“数字显微镜”:既能看清每一次大模型调用的延迟与成本,也能在故障发生时快速定位是网关、模型还是数据库掉了链子——这是从“能部署”迈向“能运维、能优化”的核心技能。
目录
可视化演示
展示Azure Application Insights的分布式追踪与依赖拓扑视图,实时呈现请求调用链、Span耗时分布与服务间依赖关系,支持模式切换浏览。
本节配有交互动效(进入视口后自动加载,约 3KB)。
'+modeCaptions.trace+'
架构原理:监控系统的四层骨架
一家快递公司要建物流追踪系统,需要四块拼图:遍布每个网点的扫码枪、连接各站点的数据网络、存放海量底单的仓库、以及客服查询包裹用的柜台。少了任何一块,追踪系统都转不起来。Application Insights 的架构,正是这样一条从“采集”到“展示”的四层流水线。
第一层是数据采集。App Insights 通过 SDK 或代理自动埋点,像“扫码枪”一样捕获请求、依赖调用、异常、页面浏览等遥测数据。你无需改业务代码,只要在项目里引入 SDK 并设置连接字符串,它就能自动记录 HTTP 请求、SQL 查询、Azure 服务调用。第二层是流水线处理:采集到的数据先进入摄取管道,做格式标准化、过滤、去重和采样(Sampling)——采样是控制成本的关键,默认智能采样会在分布式系统里保留“整条完整链路”而非随机散点。
第三层是存储检索。App Insights 底层采用双重引擎:日志查询(Log Analytics)与指标时序存储,既支持 KQL 深度检索,也能毫秒级聚合出监控指标图。第四层是查询展示:Azure 门户的指标浏览器、链路视图、工作簿(Workbooks)和 REST API,共同构成“客服柜台”,让运维人员用鼠标即可查清任何一个包裹的位置与状态。
1. 原始请求速率:应用每秒收到的真实用户请求数,相当于快递中心每秒进站的包裹总量。
2. 采样率:监控系统决定实际记录多少比例请求的抽检系数,0.1 表示每 10 个包裹只选 1 个入系统。
3. 相乘得到摄入速率:两者乘积决定存储成本与查询精度,采样率越低,每个请求的“底单”丢失概率越大。
正如快递公司不会为每一件平价包裹都拍 X 光,你也不必为每一个请求都保存全量追踪数据。理解这四层骨架,你就掌握了 App Insights 的成本和能力的“总闸门”。
分布式追踪:给请求一张“快递单”
快递包裹能全程追溯,靠的是唯一单号——从揽收到签收,每个环节的记录都挂在同一个单号下。在分布式 AI 应用中,一个用户请求同样要穿过网关、模型服务、缓存等多个进程,App Insights 用 TraceId 充当这张“快递单号”,再用 Span 记录每一个站点盖下的“邮戳”。
每次请求进入系统时,SDK 自动生成一个 64 位十六进制的 TraceId,并通过 HTTP 头(如 traceparent)在服务间传递。每个服务处理请求的片段被称为一个 Span,它记录四类信息:服务名称与操作名、开始和结束时间戳、父 Span 的 ID(指明“上一站在哪”)、以及状态码和自定义属性。所有 Span 以 TraceId 为根,以 parent-child 关系组成一棵树,还原出一次请求的完整旅程。
为什么说它是“树”而不是“线”?因为一个请求在 AI 服务里可能同时触发多个下游调用——比如一边调大模型,一边查 Redis 缓存。这些并行的 Span 构成树的分支,最终在时间线视图(Timeline)上铺开,让你直观看到哪一段耗时最长、哪一段在并排等待。
1. 起始时间:第一个 Span(通常是客户端发起或网关入口)的开始时间戳,相当于包裹在寄出柜台被扫码的那一刻。
2. 结束时间:最后一个 Span 的结束时间戳,即整个请求处理完毕的时刻,相当于收件人签收。
3. 相减得全程耗时:两端时间差就是用户感知到的总响应时长,这是性能监控与服务等级协议(SLA)的基石。
有了这张“快递单”,任何一次请求的路径都能被完整回放。当用户抱怨“AI 回复很慢”时,你不再需要逐个服务查日志,而是直接按 TraceId 调出整棵链路树,看时间到底耗在了哪一站。
依赖映射:画出服务的“物流地图”
快递公司总部墙上挂着一张巨大的物流地图:每个城市是站点,站点之间的连线是运输线路,线路的粗细代表货流量,红色虚线代表近期频繁延误。运维人员一眼就能看出“哪条线堵了”。App Insights 的 Application Map 就是这张地图——不过它画的是服务。
这张地图由分布式追踪数据自动生成:节点是服务(API 网关、Azure OpenAI、数据库、Redis),节点间的边代表一次调用关系。边的颜色和样式反映健康度——绿色表示健康,红色表示存在失败或高延迟的调用。点击任意一条边,就能打开依赖直方图(Dependency Histogram),按耗时分成五个区间,展示每次调用的成功/失败分布,快速判断是偶发抖动还是持续劣化。
依赖映射在排障中最关键的价值是下行依赖分析:当 AI 服务整体变慢时,地图会告诉你慢的根源在下游——比如模型服务的 max_tokens 设置过大导致推理耗时飙升,或 Redis 缓存未命中率过高导致回源数据库。故障不再靠猜,而是顺着地图上的“红线”一路摸到源头。
1. 成功次数:统计窗口内调用该依赖返回成功的次数,等价于某条运输线路上按时送达的包裹数。
2. 总调用次数:同一窗口内对该依赖发起的全部调用,包括成功与失败。
3. 比值换算为百分比:健康度越接近 100%,这条“运输线”越可靠;低于 90% 时地图上就会亮起警示色。
物流地图让“肉眼可见”成为可能。每次版本发布后,你只要看一眼 Application Map 上的颜色变化,就知道这次改动有没有破坏任何一条“运输干线”。
性能监控:紧盯响应时间与吞吐
转运中心的大屏幕上,实时滚动着三类数据:每小时处理的包裹量、每件包裹的平均处理时长、以及当前积压的包裹数。对应到 App Insights,这就是请求量(吞吐)、响应时间(延迟)、失败请求(积压异常)——性能监控的铁三角。
App Insights 自动为每个请求聚合指标:请求速率(Requests per Second)、平均/中位数/百分位响应时间、失败率。相比服务器 CPU 这类基础设施指标,应用性能指标直接反映用户体验——AI 应用尤其如此:模型推理耗时是响应时间的大头,一次 GPT 调用可能占整体耗时 80% 以上,必须通过全链路追踪才能拆解出来。
除了被动统计,App Insights 还提供可用性测试(Availability Tests):从全球多个节点主动发起 HTTP 请求,周期性探测你的应用是否在线、首页是否在限定时间内返回。这相当于快递公司派人随机寄几件“测试包裹”,验证每个网点是否正常营业。瓶颈定位时,结合指标和链路视图:先用响应时间 P95 判断是否确实变慢,再按 TraceId 定位最慢 Span。
1. 响应耗时排序:把 N 个请求的响应时间从小到大排成一列,等价于把所有包裹的送达时长排队喊号。
2. 定位分位索引:计算 0.95 × N 并向上取整,确保不会因为取整丢掉第 95 百分位的那件“包裹”。
3. 取出该位置的值:第 k 个耗时即为 P95——它表示 95% 的请求都快于这个值,只有最慢的 5% 超过它。
性能监控不是看一堆数字跳动,而是回答三个问题:用户等得久吗(延迟)?系统扛得住吗(吞吐)?有没有地方静默失联(可用性)?盯住这三个表盘,AI 应用的体感质量就尽在掌握。
异常检测:自动揪出“异常件”
资深仓管员有个本事:即使没有规定“超过 3 天没动就是异常”,他也能凭经验感觉到某件包裹“不对劲”。App Insights 的智能检测(Smart Detection)就是这样一个有经验的仓管——它不依赖人工设定的固定阈值,而是自动学习应用的历史行为基线,一旦发现偏离就发出预警。
智能检测覆盖多种场景:请求量骤降/骤升、依赖延迟异常、响应时间突增、异常数上升。它的原理类似统计学中的偏差检测:系统为每个指标维护一个动态基线(包含均值与波动范围),当实时数据偏离基线超过数倍标准差时判定异常。相比传统阈值告警(比如“响应时间超过 2 秒就报警”),智能检测能感知“工作日的晚高峰本来就慢”这类周期性规律,极大减少误报。
当异常确认后,根因分析按三步走:先打开异常时间点的链路视图,看哪个 Span 变色;再看依赖映射,确认是否下游服务抖动;最后结合日志和资源指标,定位到具体代码或配额问题。整条链路与告警联动(Action Groups)可以自动触发邮件、短信或 Webhook,把“异常件”主动推到值班工程师面前。
1. 当前观测值 x:本次实时采集的指标值,比如此刻某服务的最新响应时间。
2. 基线均值 μ:过去一段时间(如两周同时间段)正常指标的平均值,代表“平时包裹周转的标准节奏”。
3. 基线标准差 σ:衡量历史波动幅度,方差开根号;波动越大,判定异常所需的偏离也越大。
4. 归一化偏离度:二者相减再除以标准差,得到标准化的偏离倍数,通常绝对值大于 3 即可判为异常。
有了智能检测,你不再需要熬夜盯着告警屏猜“阈值设多少才合适”。它像那位老仓管一样,帮你在海量数据里一眼认出“不该出现的异常”,让 AI 应用的自愈与响应前置到用户察觉之前。
AI 服务集成:给大模型装上仪表盘
AI 大模型就像一个“特种包裹处理站”:处理能力强但费用昂贵,每处理一件包裹都要按“Token 重量”计费,而且出错的包裹(如拒绝回答、内容安全命中)需要单独复盘。App Insights 与 Azure OpenAI 深度集成,恰恰为这个大模型站点装上了一个专属仪表盘。
集成后,每次模型调用都会自动生成追踪记录,包含:输入 Token 数、输出 Token 数、响应延迟、流式请求的首次响应时间(Time to First Token)、模型名称与部署版本。这些数据以自定义属性的形式挂到对应的 Span 上,使得“一次 GPT 调用”在链路树中不仅显示耗时,还能展开看到 Token 消耗明细。对生成式 AI 应用而言,Token 计量是成本洞察的命脉——同样的用户提问,提示词多了 500 个 Token,成本就悄悄上升。
App Insights 还支持模型质量与限流监控:跟踪缓存命中率(减少重复计费)、内容安全过滤命中次数、429 限流与 5xx 错误率。结合成本公式,你可以算出“每回答一个用户问题平均花多少钱”,甚至按用户、按功能维度拆分成本,让 AI 应用的每一分预算都花得明明白白。
1. 输入 Token 数与单价:用户提示词(Prompt)被切分成的 Token 数量及其每千 Token 价格,相当于包裹的“寄件重量”。
2. 输出 Token 数与单价:模型生成回复的 Token 数量及其单价,通常比输入更贵,相当于“续重费用”。
3. 两段合计:单次调用的总成本由输入与输出两部分相加得到,App Insights 按此模型做成本汇总报表。
给大模型装上仪表盘,你才真正实现对 AI 应用“花多少钱、办多少事”的掌控。这不是财务部门的专属,而是每个 AI 应用运维工程师的日常底气。
可观测实践:三支柱与协同作战
一套完整的物流运营体系需要三类记录:签收底单(发生了什么)、实时看板(当前状态如何)、包裹轨迹(每一个请求从哪来到哪去)。这正好对应可观测性的三大支柱:日志(Logs)、指标(Metrics)、追踪(Traces)。App Insights 的高明之处,不在于它同时提供三类数据,而在于它把三者打通在同一个关联体系中。
在 App Insights 中,一条追踪链路(Trace)上的任意一个 Span,都可以直接关联到同一时间、同一请求的日志与指标——点击一次即可跳转查询。比如,你在链路视图中发现“数据库调用慢了 800ms”,点开对应 Span,就能看到那一刻 Redis 的错误日志和网关的 CPU 指标,无需在多个系统间反复切换。这种“一键联动”就是全链路可观测性的核心体验。
工作簿(Workbooks)是落地实践的关键工具:你可以把常用图表、日志查询、参数输入框组合成一本“运营报表”,比如《AI 服务健康日报》包含请求量趋势、Token 成本柱状图、P95 响应时间曲线、依赖健康度列表,一键刷新、团队共享。发布前后对比则是工程最佳实践:每次上线新模型版本,用工作簿对比前后 24 小时的错误率和延迟,让回归问题无所遁形。
1. 已全覆盖的服务数:统计某服务是否同时具备日志、指标、追踪三类遥测数据,三者齐全才算“快递三件套”配齐。
2. 服务总数:系统中全部微服务或组件的数量,是覆盖度计算的基数。
3. 比值:覆盖度越高,意味着越少的“监控盲区”;低于 100% 时,未接入的那几个服务就像没有摄像头的库房角落。
三个支柱不是三选一,而是三个互补的视角。把它们通过工作簿和告警联动编织成一张网,AI 应用的可观测性才能真正落地——这正是全链路监控的最后一块拼图。
AI 应用场景
场景 1:智能客服机器人上线后的全链路追踪
阶段:模型部署与线上运维
解决的问题:智能客服上线后,用户频繁反馈“回答很慢”。传统方式只能分别查看网关日志、模型服务日志、数据库慢查询,却无法把一次对话从头拼到尾。App Insights 为每个对话请求生成 TraceId,贯穿 Web 前端 → 网关 → Azure OpenAI → 知识库检索,慢在哪一站一目了然。若发现 90% 的耗时集中在模型推理而非检索,即可针对性优化提示词或启用流式输出。
具体案例:某电商平台的售后机器人接入 App Insights 后,通过链路视图定位到“知识库向量检索”的 P95 耗时高达 1.8 秒,占整体响应 70%。团队将向量索引进阶为缓存优先策略后,P95 降至 0.6 秒,客服机器人满意度提升 25%。
场景 2:大模型应用 Token 成本分析与优化
阶段:成本治理(FinOps)
解决的问题:大模型应用上线后成本失控——同样的用户提问,不同提示词模板产生的 Token 消耗天差地别,且难以分摊到功能模块。传统方式靠月底账单倒推,无法定位“哪个功能最烧钱”。通过 App Insights 采集每次调用的输入/输出 Token 与模型版本,用工作簿按功能、按用户、按时段聚合成本。
具体案例:某 AI 文档助手通过成本洞察发现,内部“全文总结”功能日均成本占总额 60%,原因是文档 token 灌入过多。团队采用“先检索后生成”的切片策略,将单次调用输入 Token 从 8000 降至 1500,月成本下降 55%。
场景 3:AI 服务故障的根因快速定位
阶段:故障响应与告警
解决的问题:凌晨 2 点告警响起“AI 服务错误率飙升”,值班工程师无从下手。传统阈值告警只告诉“出事了”,不告诉“为什么”。App Insights 的智能检测结合依赖映射,自动发现错误集中在“Azure OpenAI 返回 429 限流”,链路溯源显示是上游重试风暴导致配额耗尽。
具体案例:某游戏公司的 AI 对局机器人某日突然大面积超时,依赖映射显示通往 OpenAI 的红色边占 80%。进一步查看 Span 发现 Prompt 中意外携带了超长上下文导致 Token 配额打满。通过增加本地缓存与熔断策略,5 分钟内恢复服务。
Python 演示
import hashlibimport randomimport timefrom collections import defaultdict def gen_trace_id(user_id, ts): raw = "{}|{}|{}".format(user_id, ts, random.random()).encode("utf-8") return hashlib.md5(raw).hexdigest()[:16] def make_span(trace_id, service, start_ms, dur_ms): return { "trace_id": trace_id, "service": service, "start_ms": start_ms, "dur_ms": dur_ms, } def simulate_request(trace_id, base_start): spans = [] t = base_start gw = random.uniform(5, 15) spans.append(make_span(trace_id, "api-gateway", t, gw)) t += gw ai = random.uniform(120, 600) spans.append(make_span(trace_id, "azure-openai", t, ai)) t += ai db = random.uniform(8, 30) spans.append(make_span(trace_id, "redis-cache", t, db)) t += db return spans def analyze_traces(n=200): all_spans = [] for _ in range(n): tid = gen_trace_id("user{}".format(random.randint(1, 50)), time.time()) all_spans.extend(simulate_request(tid, 0)) trace_total = defaultdict(float) service_total = defaultdict(float) for s in all_spans: trace_total[s["trace_id"]] += s["dur_ms"] service_total[s["service"]] += s["dur_ms"] durs = sorted(trace_total.values()) p50 = durs[len(durs) // 2] p95 = durs[int(len(durs) * 0.95) - 1] print("=== 各服务累计耗时 (链路瓶颈) ===") for svc, ms in sorted(service_total.items(), key=lambda x: -x[1]): print("{}: {:.0f} ms".format(svc, ms)) print("=== 全链路响应时间 ===") print("P50 = {:.0f} ms".format(p50)) print("P95 = {:.0f} ms".format(p95)) return p50, p95 if __name__ == "__main__": analyze_traces(200)
raw = "{}|{}|{}".format(user_id, ts, random.random()).encode("utf-8")把用户、时间戳、随机数拼成字符串再编码,作为生成 TraceId 的哈希输入,保证每次请求单号唯一。def make_span(trace_id, service, start_ms, dur_ms):定义一个 Span 结构,记录它属于哪条链路、哪个服务、何时开始、耗时多久,相当于快递站的一次扫码记录。spans.append(make_span(trace_id, "azure-openai", t, ai))将 AI 模型调用模拟为一个典型的高耗时 Span,这正是真实应用中延迟的大头。trace_total[s["trace_id"]] += s["dur_ms"]按 TraceId 聚合所有 Span 的耗时,把同一张“快递单”下的各站记录拼成完整链路总时长。durs = sorted(trace_total.values())把所有链路的耗时排序,这是计算百分位响应时间(P50/P95)的前提,对应 App Insights 的性能报表逻辑。p95 = durs[int(len(durs) * 0.95) - 1]取排序后第 95% 位置的值代表 P95,用于回答“绝大多数请求到底快不快”。print("{}: {:.0f} ms".format(svc, ms))按服务汇总总耗时并排序输出,直接看到“哪个服务是链路瓶颈”,对应依赖映射中的直方图分析。
常见误区
误区“我已经在关键位置写了 print,日志文件里什么都有,为什么要再引入一个监控 SDK?反正都是看数据,print 还不用学新东西。”
正解print 写的是“本地日记”,而 App Insights 是“物流追踪网络”。print 日志是静态的文本文件,没有 TraceId 贯穿、没有自动关联调用链、没有指标聚合,出了问题你依然要像侦探一样翻遍几十个文件拼线索。App Insights 的 SDK 自动埋点不仅记录信息,还自动捕获请求上下文、创建 Span、关联父子关系、实时聚合指标,且支持分布式追踪的跨服务关联。两者之间的差距,好比手写记事本和全国联网的快递系统的差距。
为何常见:初学者接触监控时最容易从“打日志”开始,误以为日志就是监控的全部,忽略了追踪和指标这两大支柱的作用。
误区“我的 AI 应用就是个单体 Python 服务,没有跨服务调用,用不上 TraceId 和 Span 那套复杂的东西。”
正解即便单体应用,也有外部依赖——Azure OpenAI、Redis、数据库、对象存储。App Insights 的链路追踪同样能记录“应用 → 模型服务 → 缓存”的每一次调用,识别模型推理耗时和缓存命中率。就算在单体内部,异步任务、线程池、批处理同样产生并发 Span,追踪能帮你拆解时间花在 CPU 计算还是 IO 等待。可以说,只要应用要跟外部系统打交道,全链路追踪就有价值,与单体还是微服务无关。
为何常见:很多教程都用微服务作为追踪的示例场景,导致人们把“分布式”等同于“微服务”。
误区“采样率设 1% 能省 99% 的成本,感觉数据量差不多,省下来的钱都是赚的。”
正解采样率降低确实省钱,但代价是“罕见事件的丢失”。如果故障只发生在 5% 的请求中,采样率 10% 时几乎不可能捕获到那条故障链路——就像快递公司只抽检 1% 的包裹,恰好丢件的那件永远不会被扫到。智能采样会优先保留“异常请求”和“完整链路”,但在高流量下仍需权衡。正确的做法是按需采样:核心支付类请求全量采集,日志类数据低采样,并用指标留底。省钱的前提,是不牺牲最关键的可观测信号。
为何常见:人们习惯用“存储成本”的直觉看监控,而忽略了监控数据真正的价值在于“异常时刻的现场回放”。
误区“我已经接入了日志系统,也看了 App Insights 的指标图表,追踪那套没必要再上了。”
正解三大支柱回答的是三个不同的问题:日志回答“某个时刻到底发生了什么”(详细但散乱),指标回答“整体状态是否健康”(可聚合但无细节),追踪回答“一次请求完整经历了什么”(结构化但有采样)。缺了追踪,你只知道系统变慢了,却不知道慢在哪一次调用;缺了指标,你无法判断当前是偶发还是趋势;缺了日志,你看到异常却无法下钻到错误详情。App Insights 的杀手锏恰恰是三者的关联跳转,只用一个等于买齐了快递三件套却只使用其中一件。
为何常见:市面上很多监控工具只做单一领域,容易让人误以为“有一类数据就够用了”。
面试题
Q1. Application Insights 的本质是什么?
- A.云资源计费与成本管理平台
- B.应用全链路可观测性监控平台← 正确答案
- C.容器编排与调度管理系统
- D.代码版本控制与协作平台
答案:B。App Insights 像快递公司的整套物流追踪系统,同时提供链路追踪、指标监控、日志检索和智能告警,属于应用层可观测性平台。A 是成本管理,C 是 Kubernetes 类工具,D 是 Git 类工具,均风马牛不相及。
Q2. 在分布式追踪中,TraceId 的主要作用是什么?
- A.标记一次完整请求贯穿所有服务← 正确答案
- B.标记单个服务实例的名称
- C.标记告警规则的优先级
- D.标记日志文件的存储位置
答案:A。TraceId 如同快递单号,同一个请求从入口到出口的所有 Span 都挂在同一个 TraceId 下,靠它把散落在各服务的记录串成一条完整链路。服务名、告警级别、日志路径都与“单号”无关。
Q3. 在链路追踪中,Span 表示什么?
- A.一次完整的用户业务请求
- B.链路中单个服务的单个操作单元← 正确答案
- C.一个微服务集群的实例数量
- D.一条告警通知消息
答案:B。Span 是链路树上的一个节点,如“网关转发”“模型推理”“数据库查询”各是一个 Span,记录服务名、开始/结束时间、父子关系和状态。一次完整请求由多个 Span 构成,而单个服务实例或告警都不是 Span 的定义。
Q4. 依赖映射(Application Map)主要帮助运维人员做什么?
- A.查看服务间调用关系与依赖健康度← 正确答案
- B.查看代码提交记录与分支合并历史
- C.查看数据中心的物理服务器温度
- D.查看用户画像与行为偏好分析
答案:A。依赖映射像物流地图,节点是服务,边是调用关系,红色边表示高失败率。它能让你一眼看出慢请求的根因在下游哪个依赖。代码历史、机房温度、用户画像都不是它的职责。
Q5. 关于 P95 响应时间,下列说法正确的是?
- A.所有请求响应时间的算术平均值
- B.95% 的请求耗时都低于该阈值← 正确答案
- C.全部请求中耗时最大的那次请求
- D.全部请求中耗时最小的那次请求
答案:B。把请求耗时排序后,P95 是位于 95% 位置的那个值,意味着 95% 的用户体验都优于它。平均值的算法是总耗时除以请求数,而最大/最小值的描述对应 P100 和 P0,均不符合 P95 定义。
Q6. 可观测性的“三大支柱”包括以下哪些?
- A.日志← 正确答案
- B.指标← 正确答案
- C.追踪← 正确答案
- D.容器编排
答案:ABC。日志(签收底单)、指标(网点看板)、追踪(包裹轨迹)构成可观测性三支柱,三者互补:日志管细节、指标管状态、追踪管链路。容器编排是部署工具,不属于可观测性数据支柱。
Q7. 相比固定阈值告警,智能检测(Smart Detection)的核心优势是什么?
- A.自动学习历史基线并减少误报← 正确答案
- B.完全不需要任何历史监控数据
- C.能够替代日志检索的全部功能
- D.不需要配置任何告警动作
答案:A。智能检测像有经验的老仓管,自动学习“工作日高峰期本来就慢”这类周期规律,动态判定偏离。固定阈值需要人肉设置且容易误报。智能检测并非不需要数据,也不替代日志,更不能不配置告警动作。
Q8. 通过 App Insights 监控 Azure OpenAI 模型调用时,可以追踪到哪些信息?
- A.Token 用量与成本估算← 正确答案
- B.模型响应时间延迟← 正确答案
- C.模型版本与部署名称← 正确答案
- D.训练数据集的原始标注
答案:ABC。App Insights 集成 Azure OpenAI 后,可记录输入/输出 Token、响应延迟、模型与部署信息,并基于 Token 单价估算成本。训练数据集的标注属于线下资产,不在运行时监控范围内。
Q9. 将采样率从 100% 降至 10% 可能带来哪些影响?
- A.监控存储成本明显下降← 正确答案
- B.罕见故障链路难以被捕获← 正确答案
- C.P95 等统计指标产生偏差← 正确答案
- D.采集的数据变得更准确
答案:ABC。采样率降低就像快递公司只抽检 10% 的包裹,仓储成本省了,但恰好异常的包裹大概率不会被扫到,统计百分位也会失真。采样不改变单条数据的准确性,但会牺牲覆盖率和统计精度,D 是常见误解。
Q10. 某链路中所有 Span 耗时之和明显大于整条 Trace 的墙钟时长,最可能的原因是什么?
- A.存在并行执行的 Span,时间线重叠← 正确答案
- B.失败请求自动重试多次
- C.采样率设置过高
- D.监控数据全部丢失
答案:A。当请求同时调用多个下游(如一边调模型一边查缓存),这些 Span 并行发生,时间线相互重叠,累加之和自然大于整体墙钟时长,就像多条支线同时施工,各线工时加起来超过总工期。重试产生的是串行 Span,不会导致“和大于总时长”,采样与数据丢失也与此无关。