{
  "ticket": "U64 #101",
  "startedAt": "2026-10-28T14:50:06.832553+08:00",
  "finishedAt": "2026-10-28T14:50:53.188659+08:00",
  "input": "python3 labs/telemetry/run.py（真实 otelcol 0.164.0 + Prometheus 3.15.1 + Boot 4.0.9 服务）",
  "exitCode": 0,
  "environment": {
    "jdk": "openjdk version \"21.0.11\" 2026-04-21 LTS\nOpenJDK Runtime Environment (build 21.0.11+11-LTS)\nOpenJDK 64-Bit Server VM (build 21.0.11+11-LTS, mixed mode, sharing)",
    "maven": "Apache Maven 3.9.9 (8e8579a9e76f7d015ee5ec7bfcdc97d260186937)\nMaven home: /Users/gaochao/develop/maven-3.9.9\nJava version: 21.0.11, vendor: BellSoft, runtime: /Library/Java/JavaVirtualMachines/liberica-jdk-21.jdk/Contents/Home\nDefault locale: zh_CN_#Hans, platform encoding: UTF-8\nOS name: \"mac os x\", version: \"27.2\", arch: \"aarch64\", family: \"mac\"",
    "os": "macOS-27.2-arm64-arm-64bit",
    "arch": "arm64",
    "python": "3.9.6",
    "collector": "otelcol version 0.164.0",
    "prometheus": "prometheus, version 3.15.1 (branch: HEAD, revision: bae3eced0a5369e050e83ea73bc381d7c4b1a719)",
    "binaries": {
      "otelcol": {
        "name": "otelcol",
        "path": "/Users/gaochao/.cache/software-engineering-study/java-depth-impl/u64/bin/otelcol",
        "sha256": "3d8499fc0e13e98213dc6819c98f668a36b7bcbdeaf94c52b3c4cb6552adc2e5",
        "source": "cache"
      },
      "prometheus": {
        "name": "prometheus",
        "path": "/Users/gaochao/.cache/software-engineering-study/java-depth-impl/u64/bin/prometheus",
        "sha256": "ee1195bd1668d5fe37df7b6a9b2f7f7eed95ac74f96a90a817ebdbfcca09b327",
        "source": "cache"
      }
    }
  },
  "ports": {
    "app": 63333,
    "mock": 63334,
    "mockFail": 63335,
    "collectorPrometheus": 63336,
    "prometheus": 63337,
    "otlpHttp": 63338
  },
  "checks": [
    {
      "check": "binaries",
      "passed": true,
      "detail": "{\"otelcol\": \"3d8499fc0e13e982\", \"prometheus\": \"ee1195bd1668d5fe\"}"
    },
    {
      "check": "mvn-package",
      "passed": true,
      "detail": "unit observations=3"
    },
    {
      "check": "collector-config-valid",
      "passed": true,
      "detail": ""
    },
    {
      "check": "orders-success",
      "passed": true,
      "detail": "success=12"
    },
    {
      "check": "context-propagation",
      "passed": true,
      "detail": "plainEmpty=True wrappedMatches=True"
    },
    {
      "check": "highcard-request",
      "passed": true,
      "detail": "[200, 200, 200]"
    },
    {
      "check": "meter-types",
      "passed": true,
      "detail": "accepted=18.0 buckets=73"
    },
    {
      "check": "highcard-filtered",
      "passed": true,
      "detail": "lab_highcard series=0"
    },
    {
      "check": "promql-rate-via-collector",
      "passed": true,
      "detail": "rate=0.022420833333333334"
    },
    {
      "check": "collector-scraped-total",
      "passed": true,
      "detail": "total=12.0"
    },
    {
      "check": "histogram-quantile",
      "passed": true,
      "detail": "p50=0.0025803357043269227"
    },
    {
      "check": "promql-no-data",
      "passed": true,
      "detail": "empty vector for unknown metric"
    },
    {
      "check": "otlp-traces-exported",
      "passed": true,
      "detail": "serverSpans=46"
    },
    {
      "check": "otel-resource",
      "passed": true,
      "detail": "service.name=['telemetry-lab']"
    },
    {
      "check": "sampling-zero-blindspot",
      "passed": true,
      "detail": "before=59 after=59"
    },
    {
      "check": "downstream-failure-502",
      "passed": true,
      "detail": "[502, 502, 502, 502]"
    },
    {
      "check": "rejected-counter",
      "passed": true,
      "detail": "rejected=4.0"
    },
    {
      "check": "promql-rejected-rate",
      "passed": true,
      "detail": "rateRejected=0.013699130434782608"
    },
    {
      "check": "troubleshoot-chain",
      "passed": true,
      "detail": "errorSpans=4 rejectLogLines=4"
    },
    {
      "check": "export-failure-does-not-block",
      "passed": true,
      "detail": "elapsed=0.004s"
    }
  ],
  "results": [
    {
      "stage": "async-context",
      "http": 200,
      "body": {
        "requestTraceId": "7f67c3b617595838dac927cf3257af24",
        "plainThreadTraceId": "",
        "wrappedThreadTraceId": "7f67c3b617595838dac927cf3257af24"
      }
    },
    {
      "stage": "trace-sample-1.0",
      "spanCount": 58,
      "serverSpans": 46,
      "resources": [
        "telemetry-lab"
      ],
      "scopes": [
        "org.springframework.boot"
      ]
    },
    {
      "stage": "app-sampling-1.0",
      "exitCode": 143,
      "log": "/Users/gaochao/.cache/software-engineering-study/java-depth-impl/u64/runtime/20261028-145006/app-sampling-1.0.log"
    },
    {
      "stage": "trace-sample-0.0",
      "before": 59,
      "after": 59
    },
    {
      "stage": "app-sampling-0.0",
      "exitCode": 143,
      "log": "/Users/gaochao/.cache/software-engineering-study/java-depth-impl/u64/runtime/20261028-145006/app-sampling-0.0.log"
    },
    {
      "stage": "troubleshoot",
      "statuses": [
        502,
        502,
        502,
        502
      ],
      "rejectedCounter": "4.0",
      "errorSpans": 4,
      "rejectLogLines": [
        "study.telemetry.LabController            : order rejected id=fail-0 reason=downstream status 503",
        "study.telemetry.LabController            : order rejected id=fail-1 reason=downstream status 503",
        "study.telemetry.LabController            : order rejected id=fail-2 reason=downstream status 503",
        "study.telemetry.LabController            : order rejected id=fail-3 reason=downstream status 503"
      ],
      "promqlRejectedRate": 0.013699130434782608
    },
    {
      "stage": "app-downstream-fail",
      "exitCode": 143,
      "log": "/Users/gaochao/.cache/software-engineering-study/java-depth-impl/u64/runtime/20261028-145006/app-downstream-fail.log"
    },
    {
      "stage": "otelcol",
      "exitCode": 0,
      "log": "/Users/gaochao/.cache/software-engineering-study/java-depth-impl/u64/runtime/20261028-145006/otelcol.log"
    },
    {
      "stage": "app-collector-down",
      "exitCode": 143,
      "log": "/Users/gaochao/.cache/software-engineering-study/java-depth-impl/u64/runtime/20261028-145006/app-collector-down.log"
    }
  ],
  "artifacts": {
    "pom.xml": "29f4da4e85ec825f1f537443e0b48a0d1acb000bfa57d589be5ac285c98af142",
    "run.py": "41f045c177b5c7223fb4ac4b7404607a1279a3e57d2f2ffa453d67d1c5b7bc3d",
    "mock_downstream.py": "beecb83002ea2105547881c2f2a106abdb6ecdbec49d6477e7794c8553d87d64",
    "src/main/java/study/telemetry/DownstreamClient.java": "bbf79203fb5de3e80c5cc71aa1ece38cb67b2bad93e5efff000faa89d34902ef",
    "src/main/java/study/telemetry/LabController.java": "346547e95598d9be9a973363fca27d9dd9d6b448ffa749d35928680b784b95d1",
    "src/main/java/study/telemetry/LabErrorAdvice.java": "a46f53bbf5c902612b8db0cae127671cff6886d61d4f72cd93170a7e8cbccae4",
    "src/main/java/study/telemetry/LabMetrics.java": "15fa350f480b5493a6dda6b2138079e78e246dec3f80d588526d084c2e4a2f71",
    "src/main/java/study/telemetry/MetricsConfig.java": "712f08695282ac91d6ebefc2a4f366ad52e10a9203fe7262b5ea36c61e88ab50",
    "src/main/java/study/telemetry/TelemetryApp.java": "5ca392220788795f3e8eb9b1f6fbbad47debecf2085a3efca248cd514360f676",
    "src/main/resources/application.properties": "8dabe5da6094aa6049ce02ff53c9d1aa468db6e68d5d9b0ad3b572ecd17dd36f",
    "src/test/java/study/telemetry/MeterSemanticsTest.java": "8c8ac80cdf904fdc4d42d45655e42a8f7ebc0780e2ac4e3572e46991ac12bd1c"
  },
  "logs": "/Users/gaochao/.cache/software-engineering-study/java-depth-impl/u64/runtime/20261028-145006",
  "cleanup": {
    "processes": "app/collector/prometheus/mock 全部 terminate+wait；强杀视为失败",
    "directories": "只删除本次 run 的临时目录；~/.cache/u64/bin 二进制保留复用"
  },
  "limits": [
    "Prometheus 单进程本地存储；无 HA、长期存储（Thanos/Mimir）与告警路由",
    "Collector core 发行版单进程；无 Kubernetes/Operator、TLS/mTLS 与鉴权",
    "无追踪后端 UI（Tempo/Jaeger），file exporter 落盘 JSON 即证据",
    "日志后端（Loki/ELK）未运行；日志只作为本机排障信号",
    "容量压测与事故恢复演练归 U81；本票只做合成流量（12+8+6+4 次请求）"
  ]
}
