Metrics/Logging/Tracing 与 SLO

共 62 题
#

1. @Timed 注解与 AOP 计时,如何实现方法级计时并控制性能开销?

A @Timed 注解单独使用即可生效,无需任何额外配置
B 必须注册 TimedAspect 切面 Bean 后,@Timed 才会被拦截并计时 ✓ 正确答案
C @Timed 只能用于方法正常返回的情况,无法记录异常耗时
D @Timed 底层使用 Gauge 来实现方法耗时统计
#

2. Counter/Timer 的命名空间与边界,如何避免指标命名冲突与基数爆炸?

A 将用户 ID、请求随机参数直接作为标签
B 只使用状态码、方法名等有限枚举值作为标签,并聚合高基数维度 ✓ 正确答案
C 所有指标都使用同一个通用名称
D 标签越细越好,无需限制
#

3. JVM 指标(GC/Files/Memory/Thread)

A jvm.files.open ✓ 正确答案
B jvm.threads.live
C jvm.gc.pause
D jvm.memory.used
#

4. Log4j2 异步日志(LMAX Disruptor)与 Logback AsyncAppender 的对比(吞吐/延迟/丢失风险)

A 两者都使用 Disruptor 实现
B Logback AsyncAppender 永不丢日志
C Log4j2 使用无锁环形缓冲,吞吐显著更高 ✓ 正确答案
D Log4j2 异步日志延迟一定高于 Logback
#

5. Log4j2 的 RingBuffer 大小(256K/4K)与等待策略(Block/Timeout/Discard)对性能的影响

A Discard
B Default(默认丢弃)
C Blocking ✓ 正确答案
D 无等待策略
#

6. Logback 的 MDC 与请求链路追踪

A MDC 会自动在异步线程间传递
B MDC 基于 ThreadLocal,异步线程不会自动继承,需手动传递 ✓ 正确答案
C MDC 只能用于日志级别,不能存业务数据
D MDC 与链路追踪无关
#

7. Logback 的滚动策略(RollingFileAppender + TimeBasedRollingPolicy)

A totalSizeCap
B fileNamePattern
C maxHistory ✓ 正确答案
D rollingFile
#

8. MeterBinder 与第三方组件(Kafka/JVM/HTTP)的整合

A 数据库表行数 ✓ 正确答案
B Kafka 客户端
C HikariCP 连接池
D JVM 内存
#

9. Sleuth 与 OpenTelemetry 的演进(Spring Boot 3.4+ 默认 OTel)

A 默认基于 Micrometer Tracing 集成 OpenTelemetry ✓ 正确答案
B 仍默认使用 Spring Cloud Sleuth
C 默认使用 Brave 且不支持 OTel
D 链路追踪已完全移除
#

10. Spring Boot 3.5+ Actuator 的 /actuator/metrics 与 Prometheus 抓取格式的工程价值

A 两者共享同一 MeterRegistry,仅格式不同 ✓ 正确答案
B 两者数据源完全不同,互不相干
C /actuator/prometheus 返回 JSON,/actuator/metrics 返回文本
D Prometheus 必须使用 /actuator/metrics 才能抓取
#

11. Spring Boot 3.5+ 的 @Counted 注解在 Prometheus 指标自动注册的实现

A 无需任何配置即可生效
B 只能计数成功,无法记录失败
C 需要 CountedAspect 切面才能拦截并计数 ✓ 正确答案
D 底层使用 Timer 实现
#

12. Spring Boot 4.x 的 Micrometer Tracing 与 Zipkin

A spring.zipkin.enabled
B management.metrics.export.enabled
C management.tracing.sampling.probability ✓ 正确答案
D logging.level.root
#

13. Spring Boot Actuator 的 Metrics Endpoint

A filter
B query
C label
D tag ✓ 正确答案
#

14. head-based 与 tail-based 采样策略的原理与取舍是什么,尾部采样如何在保留异常链路的同时控制数据量

A 在请求入口逐个采样,无需聚合
B 能根据完整 trace 信息优先保留异常链路 ✓ 正确答案
C 实现最简单,开销最低
D 完全不采样,零开销
#

15. 日志级别动态调整(/actuator/loggers)

A GET
B POST ✓ 正确答案
C PUT
D DELETE
#

16. 日志采样的实现,基于计数器的采样 vs 基于哈希的采样(一致性采样)

A 对同一键哈希,保证同一 trace 的日志要么全保留要么全丢弃 ✓ 正确答案
B 无法保证同一键的日志被一致处理
C 实现比计数器采样更简单
D 只用于日志级别调整
#

17. @Observed(Micrometer Observation API)的工程应用

A 只能生成指标,与链路追踪无关
B 只能用于 Controller 层
C 需要额外的 Kafka 上报
D 可同时统一指标、链路追踪与日志三种信号 ✓ 正确答案
#

18. 日志中的敏感数据脱敏(JSON 字段 masking、MDC 值脱敏)与合规要求

A 只在展示时脱敏,日志文件保留明文
B 在写入日志前对敏感字段统一 mask,并配合合规审计 ✓ 正确答案
C 完全禁止记录任何业务数据
D 只对 MDC 脱敏,JSON 字段不用处理
#

19. DistributionSummary 的分位统计

A Timer
B DistributionSummary ✓ 正确答案
C Counter
D Gauge
#

20. ELK(Elasticsearch/Logstash/Kibana)

A Elasticsearch
B Kibana
C Logstash ✓ 正确答案
D Grafana
#

21. Gauge 的弱引用与服务存活

A 默认使用弱引用持有对象,避免阻止 GC ✓ 正确答案
B Gauge 可以被 increment 自增
C Gauge 缓存值,不每次实时计算
D Gauge 只能记录累计值
#

22. Jaeger 在微服务可观测性中的工程应用,如何用 trace 定位慢调用与依赖瓶颈,其采样策略与存储后端选型的要点如何?

A 概率采样 + 针对错误/慢请求的尾部采样 ✓ 正确答案
B 只使用内存采样
C 完全不采样
D 只采样 GET 请求
#

23. Log4j2 的 LogEvent 与 PatternLayout

A %X ✓ 正确答案
B %m
C %p
D %t
#

24. Logback 的 Appender/Encoder/Logger 层级

A level
B additivity=false ✓ 正确答案
C encoder
D filter
#

25. Logback 的 TurboFilter 自定义过滤

A 在 Appender 渲染后才执行
B 与普通 Filter 完全等价
C 只能绑定单个 Appender
D 在 Logger 处理早期执行,可全局快速过滤 ✓ 正确答案
#

26. Logback 的 logback.xml 与 logback-spring.xml 差异

A 不支持 springProfile 标签
B 支持按 profile 激活不同配置,且 Spring Boot 优先加载它 ✓ 正确答案
C 与 logback.xml 完全等价
D 只能用于 Log4j2
#

27. MeterFilter 的指标过滤,如何按标签裁剪指标并控制指标基数?

A MeterFilter.commonTags(...)
B MeterFilter.ignoreTags("userId") ✓ 正确答案
C MeterFilter.rename(...)
D MeterFilter.maximumAllowableMetrics(...)
#

28. MeterRegistryCustomizer 的统一打标

A MeterRegistryCustomizer + commonTags ✓ 正确答案
B @Counted
C @Timed
D DistributionSummary
#

29. Micrometer 1.14+ 的 Counter/Gauge/Timer/Summary 四种指标类型的工程取舍

A Counter
B Timer
C Gauge ✓ 正确答案
D DistributionSummary
#

30. Micrometer Tracing 与 OpenTelemetry 的指标关联(Trace + Metrics)

A traceId ✓ 正确答案
B spanId
C tagId
D metricId
#

31. Micrometer 的 @Timed 注解与 Timer.Sample 在方法级性能监控的应用

A @Timed 注解
B Gauge
C @Counted
D Timer.Sample 手动计时 ✓ 正确答案
#

32. Micrometer 的 Meter 类型(Counter/Gauge/Timer/DistributionSummary)

A Counter
B Gauge
C DistributionSummary
D Timer ✓ 正确答案
#

33. Micrometer 的 percentile histogram 如何预分桶以支持服务端聚合分位数,与 Prometheus 原生直方图(Native Histograms)有何差异

A 稀疏、自适应精度,存储与传输开销更低 ✓ 正确答案
B 桶数量更多、精度更低
C 无法跨实例聚合
D 必须客户端计算分位数
#

34. Micrometer 的标签(Tag)设计与高基数(High Cardinality)

A 状态码(200/404/500)
B HTTP 方法(GET/POST)
C 用户 ID(每用户一个值) ✓ 正确答案
D 结果(success/failure)
#

35. OpenTelemetry Collector 的 agent 与 gateway 部署模式如何分工,receiver/processor/exporter 管道如何配置

A processor ✓ 正确答案
B receiver
C exporter
D extension
#

36. OpenTelemetry Java Agent 自动埋点

A 修改源码重新编译
B 字节码插桩,运行时改写字节码 ✓ 正确答案
C 依赖反射调用
D 配置拦截器
#

37. OpenTelemetry Metrics SDK 的取舍

A OTel 强调跨语言统一标准,Micrometer 深植 Spring 生态,可桥接结合 ✓ 正确答案
B 两者完全互斥,只能选一个
C Micrometer 只用于 Logback
D OTel Metrics SDK 不支持直方图
#

38. OpenTelemetry Metrics(OTLP 协议)

A 与 Prometheus 相同,都是拉取
B 只能用于日志
C 只支持 HTTP 明文
D 是推送模式,统一传输 trace/metrics/logs 三种信号 ✓ 正确答案
#

39. OpenTelemetry SDK 的 SdkTracerProvider 配置

A Sampler
B Resource
C BatchSpanProcessor ✓ 正确答案
D Tracer
#

40. OpenTelemetry 的 Baggage(透明传播)

A 用于跨服务传播业务级键值对上下文 ✓ 正确答案
B 用于记录 span 耗时
C 只能在同一进程内使用
D 与 trace context 完全相同
#

41. Prometheus alerting rules 与 Alertmanager 的分组(group)、抑制(inhibit)与静默(silence)

A 分组
B 抑制(inhibit) ✓ 正确答案
C 静默(silence)
D 采样
#

42. Prometheus 的 rate()/increase()/histogram_quantile() 工程价值

A rate()
B histogram_quantile()
C increase() ✓ 正确答案
D sum()
#

43. Prometheus 的指标类型(Counter/Gauge/Histogram/Summary)

A Histogram ✓ 正确答案
B Gauge
C Counter
D Summary
#

44. SLF4J 与 Logback/Log4j2 的桥接

A logback-classic
B slf4j-simple
C jul-to-slf4j ✓ 正确答案
D log4j-api
#

45. SimpleMeterRegistry 与 PrometheusMeterRegistry 的差别

A PrometheusMeterRegistry
B OtlpMeterRegistry
C SimpleMeterRegistry ✓ 正确答案
D StatsdMeterRegistry
#

46. logstash-logback-encoder 与 ELK 集成

A 压缩日志
B 加密日志文件
C 把日志输出为 JSON 结构化格式 ✓ 正确答案
D 同步日志到数据库
#

47. 告警分级(P0/P1/P2)、值班路由(on-call routing)与告警疲劳治理(降噪/聚合)

A 严重故障,需立即响应 ✓ 正确答案
B 可忽略的提示
C 资源预警
D 非告警信息
#

48. 告警的 Runbook 自动化,告警触发时自动执行诊断脚本与初步止血动作

A 可以自动执行任意高风险操作
B 只记录日志,不做任何动作
C 完全禁止任何自动操作
D 只自动执行低风险、可回滚的操作,高风险需人工确认 ✓ 正确答案
#

49. Prometheus 拉取模型与 Pushgateway 的使用边界(批处理任务指标上报)

A 适合常驻服务长期暴露指标
B 适合短生命周期批处理任务,但需注意过期指标残留 ✓ 正确答案
C 与拉取模型完全等价
D 只能用于监控日志
#

50. 告警的稳态假设验证,如何区分真实故障与指标抖动(flapping)的告警抑制

A 单点瞬时超阈值即告警
B 要求指标连续持续超阈值(for 持续时间)或满足多窗口条件 ✓ 正确答案
C 完全去掉阈值
D 只关注均值
#

51. 多窗口多燃烧率告警(multi-window multi-burn-rate)的原理与 Prometheus 配置

A 只快速响应,不管误报
B 无需定义 SLO
C 只关注单点瞬时值
D 同时满足快速响应与低误报 ✓ 正确答案
#

52. 多窗口燃烧率告警的短窗口(1h)与长窗口(3d)在灵敏度与误报率上的权衡

A 提高响应速度
B 增加告警数量
C 减少阈值
D 过滤瞬时抖动,降低误报率 ✓ 正确答案
#

53. 日志采样与成本治理,日志量爆炸时的降级策略(采样率/级别动态调整)

A 重启应用
B 关闭所有日志
C 增大磁盘
D 动态调低日志级别并降低采样率 ✓ 正确答案
#

54. 结构化日志(JSON)的工程价值

A 占用更少存储
B 可按字段检索、过滤与聚合,提升排障效率 ✓ 正确答案
C 无需任何配置
D 只能用于测试
#

55. Alertmanager 的路由树(route tree)与接收器(receiver)配置(钉钉/Slack/PagerDuty)

A inhibit_rules
B receiver
C route ✓ 正确答案
D silence
#

56. SLI 选择与 SLO 制定,错误预算(Error Budget)如何驱动发布决策与止血策略

A 日志容量
B 允许的出错代码行数
C 预算金额
D 允许的失败比例或失败量,即 1 - SLO ✓ 正确答案
#

57. SLO 的燃尽率(burn rate)计算与错误预算消耗的可视化(Grafana 面板设计)

A 1
B 10 ✓ 正确答案
C 100
D 0.1
#

58. SLO 的用户体验映射,如何将后端指标(延迟/错误率)转化为用户可感知的可用性

A 仅看后端 CPU 使用率
B 合成监控与 RUM 模拟真实用户路径 ✓ 正确答案
C 只看数据库查询数
D 只看服务器磁盘空间
#

59. SLO 驱动的发布门禁,错误预算耗尽时自动阻断 CI/CD 流水线的工程实现

A 只检查代码格式
B 随机决定是否阻断
C 永远不阻断
D 每次发布前查询 Prometheus/Grafana 获取燃烧率,超阈值则阻断 ✓ 正确答案
#

60. management.metrics.distribution 的 percentiles-histogram 与 SLO 边界如何配置,过高基数桶会带来什么存储代价

A 增加标签
B 关闭所有直方图
C 增大采样率
D 设置 maximum-expected-value 限制桶范围 ✓ 正确答案
#

61. 基于 Recording Rules 预计算 SLO 指标的取舍(精度/存储/查询性能)

A 会丢失原始精度并占用额外存储 ✓ 正确答案
B 查询性能下降
C 无法告警
D 增加采集延迟
#

62. Logs/Metrics/Traces 三大信号在 OpenTelemetry 中的统一与各自定位

A Metrics
B Logs
C Traces ✓ 正确答案
D Alerts