feat(monitoring): Tempo + OTel Collector for tripit tracing (ADR-0032 Phase 2)
Some checks failed
ci/woodpecker/push/default Pipeline failed

Stand up the cluster's first trace store + OTLP ingress so tripit's OpenTelemetry
spans (Phase 1, already live in prod) export and correlate with logs:
- Grafana Tempo (single-binary, filesystem on proxmox-lvm 20Gi, 30d)
- OTel Collector (contrib; otlp -> redaction deny-list backstop -> batch -> tempo)
- Grafana: a Tempo datasource + an ADDITIVE trace_id->Tempo derivedField on the
  Loki datasource (no uid change, so existing dashboards are unaffected)
- tripit deployment: LOG_FORMAT=json + OTEL_EXPORTER_OTLP_ENDPOINT -> the Collector

Additive (new helm releases; Loki/Prometheus/Grafana untouched). Offline
'terraform validate' clean; full plan+apply runs in CI (locked git-crypt blocks a
local plan as non-admin).

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
This commit is contained in:
Viktor Barzin 2026-06-22 06:31:11 +00:00
parent 1a32c07ffe
commit 7513468a2d
7 changed files with 246 additions and 0 deletions

View file

@ -131,6 +131,14 @@ locals {
# not-yet-visited countries + real UK bank-holiday leave windows + fares).
# `claude_agent` mode requires images >= the #23 slice (already deployed).
RESEARCH_PROVIDER = "claude_agent"
# Observability (tripit ADR-0032, Phase 2): structured JSON logs (so Loki's
# trace_id derivedField links to Tempo) + OTLP trace export to the in-cluster
# OTel Collector -> Tempo. Both require images >= the observability slice
# (v0.81.0, already live), so they land after that rollout same image-first
# hold-order as the provider modes around here. Empty endpoint = no export
# (Phase 1 default); set here flips Phase 2 on.
LOG_FORMAT = "json"
OTEL_EXPORTER_OTLP_ENDPOINT = "http://otel-collector-opentelemetry-collector.monitoring.svc.cluster.local:4318/v1/traces"
# Stay cover photos (tripit issue #47, ADR-0017): auto-fetch each picked
# city's Wikipedia lead image (keyless REST summary API, "City, Country"
# first), downloaded into the app's STORAGE_DIR (never hotlinked) and