From f557bc3f06f29a443bffb6d324d68b0e58a2c2b1 Mon Sep 17 00:00:00 2001 From: kdletters <61648117+kdletters@users.noreply.github.com> Date: Tue, 19 May 2026 08:45:59 +0800 Subject: [PATCH] feat: add grafana cloud collector switch for container loadtest --- .hermes/shared-memory/decision-log.md | 8 +++++ deploy/container/README.md | 12 +++++++ deploy/container/docker-compose.loadtest.yml | 6 +++- deploy/container/otelcol.grafana.yaml | 36 ++++++++++++++++++++ 4 files changed, 61 insertions(+), 1 deletion(-) create mode 100644 deploy/container/otelcol.grafana.yaml diff --git a/.hermes/shared-memory/decision-log.md b/.hermes/shared-memory/decision-log.md index 8e0f9296..68b114af 100644 --- a/.hermes/shared-memory/decision-log.md +++ b/.hermes/shared-memory/decision-log.md @@ -32,6 +32,14 @@ - 验证方式:检查 env 模板默认值与端点口径;压测若要关闭 OTLP,必须显式设置 `GENARRATIVE_OTEL_ENABLED=false`。 - 关联文档:`docs/【开发运维】本地开发验证与生产运维-2026-05-15.md`、`scripts/run-otelcol.mjs`。 +## 2026-05-19 容器 collector 可切 Grafana Cloud + +- 背景:容器隔离压测时除了本地 debug exporter,还需要临时把 traces / metrics / logs 转发到 Grafana Cloud 做可视化验证。 +- 决策:`deploy/container/docker-compose.loadtest.yml` 里的 `otelcol` 支持通过 `GENARRATIVE_CONTAINER_OTELCOL_CONFIG=./otelcol.grafana.yaml` 切换配置;`deploy/container/otelcol.grafana.yaml` 同时保留 debug exporter,并通过 `GRAFANA_CLOUD_OTLP_ENDPOINT` 和 `GRAFANA_CLOUD_BASIC_AUTH_HEADER` 转发到 Grafana Cloud。 +- 影响范围:`deploy/container/docker-compose.loadtest.yml`、`deploy/container/otelcol.grafana.yaml`、`deploy/container/README.md`。 +- 验证方式:容器 `otelcol` 启动日志应能看到 OTLP receiver ready,debug exporter 仍可输出本地链路;Grafana Cloud 转发凭据只通过当前 shell 环境变量传入,不写入 Git。 +- 关联文档:`deploy/container/README.md`、`scripts/loadtest/README.md`。 + ## 2026-05-17 容器化方案只作为隔离压测与预发模拟路径 - 背景:Windows 本机直连极高 VU 压测会放大本地连接与发送缓冲行为,和线上 Linux + Nginx + systemd 拓扑不一致;需要一个更接近生产网络层的模拟方案,但不能扰动当前生产发布链路。 diff --git a/deploy/container/README.md b/deploy/container/README.md index 3fa60fdf..b9338457 100644 --- a/deploy/container/README.md +++ b/deploy/container/README.md @@ -162,6 +162,18 @@ npm run container:logs -- otelcol Collector 日志会输出 traces / metrics / logs。接 Rider、Jaeger、Tempo、Prometheus、Grafana 或托管平台时,另建独立 Collector 配置,不直接改生产 systemd 或 Nginx 模板。 +容器内需要临时转发到 Grafana Cloud 时,切换 Collector 配置并从当前 shell 传入 Grafana Cloud 凭据;真实 token 不写入仓库文件: + +```powershell +$env:GENARRATIVE_CONTAINER_OTELCOL_CONFIG="./otelcol.grafana.yaml" +$env:GRAFANA_CLOUD_OTLP_ENDPOINT="https://..." +$env:GRAFANA_CLOUD_BASIC_AUTH_HEADER="Basic ..." +npm run container:up +npm run container:logs -- otelcol +``` + +`deploy/container/otelcol.grafana.yaml` 会同时保留本地 debug exporter,并通过 `otlphttp/grafana` 把 traces / metrics / logs 发到 Grafana Cloud。 + ## 隔离边界 - 不改生产 systemd 单元。 diff --git a/deploy/container/docker-compose.loadtest.yml b/deploy/container/docker-compose.loadtest.yml index c7e00cbc..afac4962 100644 --- a/deploy/container/docker-compose.loadtest.yml +++ b/deploy/container/docker-compose.loadtest.yml @@ -104,8 +104,12 @@ services: command: ["--config=/etc/otelcol/config.yaml"] cpus: "0.25" mem_limit: 128m + environment: + GRAFANA_CLOUD_OTLP_ENDPOINT: ${GRAFANA_CLOUD_OTLP_ENDPOINT:-} + GRAFANA_CLOUD_BASIC_AUTH_HEADER: ${GRAFANA_CLOUD_BASIC_AUTH_HEADER:-} + HOSTNAME: ${HOSTNAME:-genarrative-container-loadtest} volumes: - - ./otelcol.yaml:/etc/otelcol/config.yaml:ro + - ${GENARRATIVE_CONTAINER_OTELCOL_CONFIG:-./otelcol.yaml}:/etc/otelcol/config.yaml:ro ports: - "${GENARRATIVE_CONTAINER_OTLP_GRPC_PORT:-4317}:4317" - "${GENARRATIVE_CONTAINER_OTLP_HTTP_PORT:-4318}:4318" diff --git a/deploy/container/otelcol.grafana.yaml b/deploy/container/otelcol.grafana.yaml new file mode 100644 index 00000000..ae0af6f4 --- /dev/null +++ b/deploy/container/otelcol.grafana.yaml @@ -0,0 +1,36 @@ +receivers: + otlp: + protocols: + grpc: + endpoint: 0.0.0.0:4317 + http: + endpoint: 0.0.0.0:4318 + +processors: + batch: + timeout: 5s + send_batch_size: 512 + send_batch_max_size: 1024 + +exporters: + debug: + verbosity: basic + otlp_http/grafana: + endpoint: ${env:GRAFANA_CLOUD_OTLP_ENDPOINT} + headers: + Authorization: ${env:GRAFANA_CLOUD_BASIC_AUTH_HEADER} + +service: + pipelines: + traces: + receivers: [otlp] + processors: [batch] + exporters: [debug, otlp_http/grafana] + metrics: + receivers: [otlp] + processors: [batch] + exporters: [debug, otlp_http/grafana] + logs: + receivers: [otlp] + processors: [batch] + exporters: [debug, otlp_http/grafana]