From 9d1b30bbf0b6e3f907c14462a0943a92b2e27433 Mon Sep 17 00:00:00 2001 From: Matt Jenkinson <75292329+mattdjenkinson@users.noreply.github.com> Date: Wed, 13 May 2026 21:15:41 +0100 Subject: [PATCH 1/7] docs: add customer-facing logs design Add a design document for the v1 customer-facing logs pipeline, scoped to AI Edge (HTTPProxy access logs and WAF events) as the first producer. Key decisions captured: - Service declaration via ServiceConfiguration.spec.logs[] fanning out to telemetry.LogDefinition and telemetry.MonitoredResourceType CRDs - OTel Collector gateway stamps tenant identity and validates the label vocabulary declared in MonitoredResourceType - Shared ClickHouse platform_logs table, tenant_id as the first ORDER BY column and partition key - Loki-compatible HTTP API exposed under /projects/{project}/telemetry/loki/api/v1/... with URL-based tenancy - Catalog-backed labels/series discovery so Grafana populates the stream selector UI on empty projects - Tiered retention defaults (7d allLogs, 400d audit), opt-in collection for non-audit categories, attribute-level redaction only Open questions are listed explicitly: live tail backend, policy granularity, the LogQL subset to support in v1, and how label-value discovery handles tenant-specific values. --- docs/architecture/customer-facing-logs.md | 366 ++++++++++++++++++++++ 1 file changed, 366 insertions(+) create mode 100644 docs/architecture/customer-facing-logs.md diff --git a/docs/architecture/customer-facing-logs.md b/docs/architecture/customer-facing-logs.md new file mode 100644 index 0000000..198da02 --- /dev/null +++ b/docs/architecture/customer-facing-logs.md @@ -0,0 +1,366 @@ +# Customer-Facing Logs + +Status: Draft +Scope (v1): AI Edge (HTTPProxy + WAF) logs only + +## Motivation + +Datum platform services emit operational signals — request logs, security +events, control-plane activity — that customers need visibility into for +debugging, compliance, and security investigation. Today there is no +customer-facing query surface for these logs. Customers running workloads on +AI Edge (Datum's HTTP proxy + WAF product) cannot answer basic questions +like "show me 5xx responses for my proxy in the last hour" or "which +requests did the WAF block." + +This design defines a project-scoped, multi-tenant logs pipeline with a +Loki-compatible query API. AI Edge is the v1 scope: it produces high-volume +access logs and WAF events that are the most acute customer need, and its +log shape exercises every layer of the design without depending on +control-plane audit-log work that lives elsewhere. + +## Goals (v1) + +- Customers can query AI Edge access logs and WAF events for their project + through Grafana, LogCLI, and any Loki-compatible client. +- All logs are tenant-isolated at storage and query time; cross-tenant + reads are structurally impossible. +- Log schemas are declared once by the producing service and surface + automatically as catalog metadata (resource types, label vocabulary, log + definitions). +- 7-day default retention for operational logs, with a longer default for + any log marked as `audit` category. + +## Non-Goals (v1) + +- Control-plane audit log surface (covered by `milo-os/activity`; integrated + later via a shared catalog). +- Customer-configurable log export (`LogSource` in `ExportPolicy`) — + deferred to a follow-on enhancement. +- Body-content redaction via regex; v1 redacts at attribute level only. +- Log-based metrics and alerting derived from log streams. + +## Layers + +### 1. Service Declaration + +Services declare what they emit in their `ServiceConfiguration` +(`services.miloapis.com/v1alpha1`). Two fields participate: + +- `spec.monitoredResourceTypes[]` — already fans out to + `billing.MonitoredResourceType`; now also fans out to a new + `telemetry.MonitoredResourceType`. +- `spec.logs[]` (new) — fans out to `telemetry.LogDefinition`. + +AI Edge declaration: + +```yaml +apiVersion: services.miloapis.com/v1alpha1 +kind: ServiceConfiguration +metadata: + name: networking-datumapis-com +spec: + serviceRef: + name: networking-datumapis-com + phase: Published + monitoredResourceTypes: + - resourceTypeName: networking.datumapis.com/HTTPProxy + displayName: HTTP Proxy + gvk: + group: networking.datumapis.com + kind: HTTPProxy + labels: + - name: resource.name + description: Name of the HTTPProxy instance. + - name: resource.namespace + description: Project namespace the HTTPProxy belongs to. + - name: hostname + description: Hostname the request was received on. + logs: + - logID: networking.datumapis.com/httpproxy-access + displayName: HTTP Proxy Access Log + description: One entry per HTTP request handled by the proxy. + monitoredResourceType: networking.datumapis.com/HTTPProxy + entrySchema: + - name: http.request.method + description: HTTP method (GET, POST, etc). + - name: http.response.status_code + description: HTTP response status returned to the client. + - name: url.path + description: Request path. + - name: client.address + description: Client IP. + - name: http.request.duration_ms + description: Request duration in milliseconds. + destinations: + - audience: tenant + - audience: platform + categoryGroups: [allLogs] + + - logID: networking.datumapis.com/httpproxy-waf + displayName: HTTP Proxy WAF Event Log + description: One entry per WAF rule evaluation that matched or blocked. + monitoredResourceType: networking.datumapis.com/HTTPProxy + entrySchema: + - name: waf.rule.id + description: Identifier of the WAF rule that matched. + - name: waf.action + description: Action taken — block, log, challenge. + - name: waf.severity + description: Severity classification of the matched rule. + - name: client.address + description: Client IP. + destinations: + - audience: tenant + - audience: platform + categoryGroups: [allLogs, audit] +``` + +### 2. Platform Catalog + +The services operator (`milo-os/telemetry`) owns two new CRDs that the +`ServiceConfiguration` controller fans out into. + +`telemetry.MonitoredResourceType` — instance-identifying label vocabulary +for a resource Kind. Parallel to `billing.MonitoredResourceType`: + +```yaml +apiVersion: telemetry.miloapis.com/v1alpha1 +kind: MonitoredResourceType +metadata: + name: networking-datumapis-com-httpproxy +spec: + resourceTypeName: networking.datumapis.com/HTTPProxy + phase: Published + displayName: HTTP Proxy + gvk: + group: networking.datumapis.com + kind: HTTPProxy + labels: + - name: resource.name + - name: resource.namespace + - name: hostname +``` + +`LogDefinition` — the log type catalog entry; references +`MonitoredResourceType` by `resourceTypeName`: + +```yaml +apiVersion: telemetry.miloapis.com/v1alpha1 +kind: LogDefinition +metadata: + name: networking-datumapis-com-httpproxy-access +spec: + logID: networking.datumapis.com/httpproxy-access + phase: Published + displayName: HTTP Proxy Access Log + monitoredResourceType: networking.datumapis.com/HTTPProxy + entrySchema: + - name: http.request.method + - name: http.response.status_code + - name: url.path + - name: client.address + - name: http.request.duration_ms + destinations: + - audience: tenant + - audience: platform + categoryGroups: [allLogs] +``` + +Both CRDs are server-managed: the `ServiceConfiguration` controller is the +sole writer. Customers read them via standard list/get to populate UIs and +discover available log types. + +### 3. Ingestion Pipeline + +AI Edge data-plane components (Envoy + WAF sidecar) emit logs over OTLP to +a regional OTel Collector gateway. + +Gateway responsibilities: + +1. Receive OTLP log records. +2. Stamp `cloud.account.id` (Milo project ID) immutably from the caller's + workload identity — customers cannot override. +3. Look up the declared `MonitoredResourceType` for the entry's + `resource_type` and validate that emitted resource attributes are a + subset of the declared label vocabulary. Reject undeclared labels. +4. Derive `tenant_id` from `cloud.account.id`. +5. Write to ClickHouse via the `clickhouse` exporter. + +Services are responsible for stamping the instance-identifying labels +(e.g. `resource.name`, `resource.namespace`, `hostname`). The gateway +enforces the vocabulary; it does not inject instance identity. + +### 4. Storage + +Shared ClickHouse `platform_logs` table, OTel-aligned schema, `tenant_id` +first in `ORDER BY` and partition key: + +```sql +CREATE TABLE platform_logs ( + tenant_id UInt32, + timestamp UInt64, + observed_timestamp UInt64, + severity_number UInt8, + severity_text LowCardinality(String), + body String, + log_id LowCardinality(String), + resource_type LowCardinality(String), + attributes_string Map(String, String), + resources_string Map(String, String), + trace_id String, + span_id String +) +ENGINE = MergeTree() +PARTITION BY (tenant_id, toYYYYMM(toDateTime(timestamp / 1e9))) +ORDER BY (tenant_id, log_id, timestamp) +TTL toDateTime(timestamp / 1e9) + INTERVAL 7 DAY DELETE; +``` + +`log_id` and `resource_type` are promoted to top-level columns: both are +low-cardinality and appear in nearly every query's filter clause. + +Per-tenant retention overrides are applied via per-row `_row_ttl` +attribute set by the gateway based on the log's `categoryGroups` and the +tenant's retention policy (see Retention below). + +### 5. Query API — Loki-Compatible, Project-Scoped + +Customer query surface is a Loki-compatible HTTP API exposed under the +project's telemetry namespace: + +``` +GET /projects/{project}/telemetry/loki/api/v1/query +GET /projects/{project}/telemetry/loki/api/v1/query_range +GET /projects/{project}/telemetry/loki/api/v1/labels +GET /projects/{project}/telemetry/loki/api/v1/label/{name}/values +GET /projects/{project}/telemetry/loki/api/v1/series +GET /projects/{project}/telemetry/loki/api/v1/tail +``` + +The Milo gateway resolves `{project}` to a `tenant_id` and enforces IAM +before the request reaches the Loki handler. The handler itself is a pure +query layer: + +- Parses LogQL. +- Translates to ClickHouse SQL: stream selectors → `resources_string` map + lookups; line filters → `body LIKE` / full-text; parsed field filters → + `attributes_string` lookups. +- Executes with `tenant_id` already injected from URL context. +- Serialises results in Loki's response format. + +`X-Scope-OrgID` sent by Grafana is ignored — the project in the URL is +authoritative. + +Label and series discovery is served from the `MonitoredResourceType` +catalog rather than from ClickHouse, so discovery works on empty projects +and Grafana's stream-selector UI populates correctly on first open. + +Grafana datasource configuration: base URL +`https://api.datum.net/projects/{project}/telemetry/`, type Loki, no +custom plugin. + +A secondary `LogQuery` virtual resource (Kubernetes-native, modelled on +`AuditLogQuery` in `milo-os/activity`) is retained for kubectl-native and +GitOps workflows. It shares the same LogQL → SQL translation layer. + +### 6. Access Control + +- Milo IAM gates access at the project boundary via standard Kubernetes + RBAC on the project's telemetry endpoint. +- `LogDefinition.spec.categoryGroups` provides a secondary access + dimension: `audit` requires a distinct permission from `allLogs`, + matching GCP's `roles/logging.viewAccessor` pattern scoped to a log + view. The query layer filters out log IDs the caller cannot access + before executing the SQL. + +## Cross-Cutting Concerns + +### Retention + +Fixed tiered defaults; no free-form per-project retention in v1. + +| Category Group | Default Retention | Disable-able | +|---|---|---| +| `allLogs` | 7 days | Yes (opt-in collection) | +| `audit` | 400 days | No (compliance signal) | + +Paid retention overrides are applied per category group on a project, not +per log ID. Implemented as a TTL adjustment column populated by the +gateway at write time so existing rows are not rewritten when overrides +change. + +### Ingestion Quota + +A new `telemetry.miloapis.com/LogIngestionQuota` resource integrates with +the standard Milo quota system. Quota is dimensioned by +`(project, category_group)` in bytes/second. On exceed: + +- Gateway returns 429 with `Retry-After`. +- A per-tenant `telemetry_ingestion_dropped_bytes_total` counter is + exposed via the same Loki API so customers can see drops. +- No silent drops. + +### Default Enablement + +- `allLogs` collection is opt-in per project via a `LogCollectionPolicy` + resource. Customers don't get surprise bills from log volume tracking + workload activity they didn't request. +- `audit` category is on by default and not disable-able. Volume is + bounded by control-plane API traffic, not workload activity. + +For v1 (AI Edge only): proxy access logs default off, WAF events default +on (they fall into both `allLogs` and `audit` and the volume is bounded +by request rate × match rate, not full request rate). + +### Redaction + +- Platform-managed allowlist of attribute keys always dropped or hashed + at the gateway (`*.token`, `*.password`, `authorization`, ...). +- Customer-configurable `LogRedactionPolicy` resource — attribute-level + drop/hash rules only. +- Body content is **not** redacted in v1. Documented as a constraint; + services are pushed to put structured data in attributes. + +## Fan-Out Summary + +``` +ServiceConfiguration + spec.monitoredResourceTypes[] → billing.MonitoredResourceType (existing) + → telemetry.MonitoredResourceType (new) + spec.logs[] → telemetry.LogDefinition (new) +``` + +## v1 Delivery Slice + +In dependency order: + +1. CRDs: `MonitoredResourceType`, `LogDefinition`, + `LogCollectionPolicy`, `LogIngestionQuota`, `LogRedactionPolicy`, + `LogQuery`. +2. Fan-out controllers in this operator for the first three. +3. ClickHouse `platform_logs` table and OTel Collector gateway with + tenant stamping, label-vocabulary validation, and quota enforcement. +4. AI Edge data-plane integration: Envoy access log + WAF event OTLP + exporters; `ServiceConfiguration` for `networking-datumapis-com` with + the two log definitions. +5. Loki API handler (`/projects/{project}/telemetry/loki/api/v1/...`) + backed by a LogQL → SQL translator. +6. Catalog-backed labels/series discovery. +7. Grafana datasource documentation. + +## Open Questions + +- Live tail backend: ClickHouse polling vs. a separate Kafka topic + consumed by the tail handler. Polling is simpler; Kafka is lower + latency. Likely poll for v1. +- Whether `LogCollectionPolicy` is project-scoped or finer-grained (per + `HTTPProxy`). Project-scoped is the simpler v1; finer granularity is a + future enhancement once we see usage patterns. +- Loki LogQL feature subset for v1: instant queries, range queries, + line filters, label filters are required; metric queries + (`rate`, `sum by`, ...) likely deferred to v2. +- How the catalog-backed label discovery handles tenant-specific label + values (e.g. the set of `resource.name` values that actually exist in + the project). Likely a hybrid: label names from catalog, values from + ClickHouse with a short cache. From 50bd41524c267107617370281a5ee39a4c049960 Mon Sep 17 00:00:00 2001 From: Matt Jenkinson <75292329+mattdjenkinson@users.noreply.github.com> Date: Thu, 14 May 2026 10:24:17 +0100 Subject: [PATCH 2/7] docs: add ingestion pipeline diagram Add a C4 container diagram of the customer-facing logs ingestion pipeline and reference it from the design doc. Include a docs Taskfile mirroring milo-os/activity so future PlantUML sources render to PNG via the same docker plantuml workflow. --- docs/Taskfile.yaml | 75 ++++++++++++++++++++++ docs/architecture/customer-facing-logs.md | 2 + docs/diagrams/ingestion-pipeline.png | Bin 0 -> 50642 bytes docs/diagrams/ingestion-pipeline.puml | 32 +++++++++ 4 files changed, 109 insertions(+) create mode 100644 docs/Taskfile.yaml create mode 100644 docs/diagrams/ingestion-pipeline.png create mode 100644 docs/diagrams/ingestion-pipeline.puml diff --git a/docs/Taskfile.yaml b/docs/Taskfile.yaml new file mode 100644 index 0000000..319b9e6 --- /dev/null +++ b/docs/Taskfile.yaml @@ -0,0 +1,75 @@ +version: '3' + +vars: + DIAGRAMS_DIR: "{{.USER_WORKING_DIR}}/docs/diagrams" + OUTPUT_FORMAT: "png" + +tasks: + generate: + desc: Generate all documentation artifacts (diagrams, etc.) + cmds: + - task: diagrams:render + silent: true + + diagrams: + desc: Generate all architecture diagrams from PlantUML + cmds: + - task: diagrams:render + silent: true + + diagrams:render: + desc: Render PlantUML diagrams to PNG format using Docker + cmds: + - | + set -e + echo "Rendering PlantUML diagrams..." + echo "" + + # Check if PlantUML files exist + if ! ls {{.DIAGRAMS_DIR}}/*.puml 1>/dev/null 2>&1; then + echo "No PlantUML source files found in {{.DIAGRAMS_DIR}}" + exit 0 + fi + + # Render using Docker (no local installation required) + docker run --rm \ + -v "{{.DIAGRAMS_DIR}}":/data \ + plantuml/plantuml:latest \ + -t{{.OUTPUT_FORMAT}} \ + /data/*.puml + + echo "" + echo "Diagrams rendered in {{.DIAGRAMS_DIR}}" + echo "" + echo "Generated files:" + ls -1 {{.DIAGRAMS_DIR}}/*.{{.OUTPUT_FORMAT}} 2>/dev/null | xargs -n1 basename || echo "No output files found" + silent: true + + diagrams:clean: + desc: Remove generated diagram files + cmds: + - | + rm -f {{.DIAGRAMS_DIR}}/*.png {{.DIAGRAMS_DIR}}/*.svg + echo "Generated diagram files removed" + silent: true + + diagrams:validate: + desc: Validate PlantUML syntax using Docker + cmds: + - | + set -e + echo "Validating PlantUML diagrams..." + + # Check if PlantUML files exist + if ! ls {{.DIAGRAMS_DIR}}/*.puml 1>/dev/null 2>&1; then + echo "No PlantUML source files found in {{.DIAGRAMS_DIR}}" + exit 0 + fi + + docker run --rm \ + -v "{{.DIAGRAMS_DIR}}":/data \ + plantuml/plantuml:latest \ + -syntax \ + /data/*.puml + echo "All diagrams are valid" + silent: true diff --git a/docs/architecture/customer-facing-logs.md b/docs/architecture/customer-facing-logs.md index 198da02..20fc4a8 100644 --- a/docs/architecture/customer-facing-logs.md +++ b/docs/architecture/customer-facing-logs.md @@ -173,6 +173,8 @@ discover available log types. ### 3. Ingestion Pipeline +![Ingestion Pipeline](../diagrams/ingestion-pipeline.png) + AI Edge data-plane components (Envoy + WAF sidecar) emit logs over OTLP to a regional OTel Collector gateway. diff --git a/docs/diagrams/ingestion-pipeline.png b/docs/diagrams/ingestion-pipeline.png new file mode 100644 index 0000000000000000000000000000000000000000..fe4b7bf73527e022d7914da80ddeac309c14f490 GIT binary patch literal 50642 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%0D>pPBzpi`JZ={g3N-3jVFoN9ZsPyV#daWJ( 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 literal 0 HcmV?d00001 diff --git a/docs/diagrams/ingestion-pipeline.puml b/docs/diagrams/ingestion-pipeline.puml new file mode 100644 index 0000000..c588ad5 --- /dev/null +++ b/docs/diagrams/ingestion-pipeline.puml @@ -0,0 +1,32 @@ +@startuml ingestion-pipeline +!include https://raw.githubusercontent.com/plantuml-stdlib/C4-PlantUML/master/C4_Container.puml + +LAYOUT_LANDSCAPE() +LAYOUT_WITH_LEGEND() + +title Customer-Facing Logs — Ingestion Pipeline (AI Edge v1) + +' External producers +System_Ext(ai_edge, "AI Edge Data Plane", "Envoy + WAF sidecar handling customer HTTP traffic. Emits one OTLP log record per request (access) and per WAF rule match (waf).") + +' Catalog and per-tenant policies — read by the gateway via cached informers +System_Ext(catalog, "Telemetry Catalog", "MonitoredResourceType and LogDefinition CRDs published by the telemetry-services-operator. Defines the legal label vocabulary per resource type.") +System_Ext(policies, "Per-Tenant Policies", "LogCollectionPolicy, LogIngestionQuota, LogRedactionPolicy resources.") + +' Ingestion system boundary +System_Boundary(ingest, "Ingestion Pipeline") { + Container(gateway, "OTel Collector Gateway", "OpenTelemetry Collector, regional Deployment", "Stamps cloud.account.id from caller workload identity. Validates resource attributes against catalog vocabulary. Derives tenant_id. Enforces collection policy and ingestion quota. Drops/hashes per redaction allowlist. Emits telemetry_ingestion_dropped_bytes_total per (project, category_group).") + ContainerDb(clickhouse, "ClickHouse", "platform_logs table", "MergeTree, partitioned by (tenant_id, month). Per-row TTL column set from category and tenant retention policy.") +} + +' Producer flow (ingress) +Rel_D(ai_edge, gateway, "Emit log records (OTLP/gRPC). 429 + Retry-After on quota exceed.") + +' Gateway lookups +Rel_R(gateway, catalog, "Validate label vocabulary", "informer cache") +Rel_R(gateway, policies, "Apply collection / quota / redaction", "informer cache") + +' Successful write +Rel_D(gateway, clickhouse, "Batch insert validated records", "TCP/9000") + +@enduml From 26e18f73977ff472afa12215144e01fb422bd0b7 Mon Sep 17 00:00:00 2001 From: Matt Jenkinson <75292329+mattdjenkinson@users.noreply.github.com> Date: Tue, 19 May 2026 11:21:55 +0100 Subject: [PATCH 3/7] docs: address review feedback on customer-facing logs Adjust the customer-facing logs design based on PR #72 review. Key changes: - Tenancy travels on the log record as `tenant.kind` / `tenant.name` instead of being stamped by the gateway from workload identity, since log producers are typically service components (e.g. Envoy) writing to a sink rather than consumer-authored applications - Replace the `audience: tenant|platform` destination model with `type: consumer|producer` matching GCP. The gateway emits one record per destination; producer rows carry `consumer_name` so service teams can query their own producer project across all consumers without cross-tenant grants - Add NATS JetStream between the gateway and ClickHouse for backpressure and to back the Loki `/tail` handler without polling ClickHouse - Promote `resource_group`, `resource_kind`, `resource_name`, `resource_namespace`, and `consumer_name` to top-level columns and reorder the sort key to serve per-resource and per-tenant queries - Expose the Loki API under the project control-plane endpoint (`{project-control-plane-endpoint}/telemetry/...`) instead of a `/projects/{project}/...` path - Remove audit logs from scope; they're handled by `milo-os/activity` - Drop `LogIngestionQuota` and user-controllable retention from v1; both move to follow-on enhancements Regenerate ingestion-pipeline diagram to match. --- docs/architecture/customer-facing-logs.md | 288 +++++++++++++++------- docs/diagrams/ingestion-pipeline.png | Bin 50642 -> 65765 bytes docs/diagrams/ingestion-pipeline.puml | 24 +- 3 files changed, 209 insertions(+), 103 deletions(-) diff --git a/docs/architecture/customer-facing-logs.md b/docs/architecture/customer-facing-logs.md index 20fc4a8..0255bf1 100644 --- a/docs/architecture/customer-facing-logs.md +++ b/docs/architecture/customer-facing-logs.md @@ -28,17 +28,26 @@ control-plane audit-log work that lives elsewhere. - Log schemas are declared once by the producing service and surface automatically as catalog metadata (resource types, label vocabulary, log definitions). -- 7-day default retention for operational logs, with a longer default for - any log marked as `audit` category. +- Service teams can see logs from their own service across all consumers + in the service's producer project; customers only see logs scoped to + their own project. This follows GCP's consumer / producer pattern, which + falls out naturally from Milo's project hierarchy (both tenants and + service producers are modelled as projects). +- 7-day default retention for operational logs. Retention is platform-set + in v1; not user-controllable. ## Non-Goals (v1) -- Control-plane audit log surface (covered by `milo-os/activity`; integrated - later via a shared catalog). +- Control-plane audit logs. Audit logs are collected by the activity + system (`milo-os/activity`) and stored separately; they do not flow + through this pipeline. - Customer-configurable log export (`LogSource` in `ExportPolicy`) — deferred to a follow-on enhancement. - Body-content redaction via regex; v1 redacts at attribute level only. - Log-based metrics and alerting derived from log streams. +- Per-project ingestion quota. Volume protection in v1 is platform-set + defaults at the gateway; a `LogIngestionQuota` resource is a follow-on + enhancement. ## Layers @@ -70,6 +79,10 @@ spec: group: networking.datumapis.com kind: HTTPProxy labels: + - name: resource.group + description: API group of the resource (networking.datumapis.com). + - name: resource.kind + description: Resource kind (HTTPProxy). - name: resource.name description: Name of the HTTPProxy instance. - name: resource.namespace @@ -93,8 +106,8 @@ spec: - name: http.request.duration_ms description: Request duration in milliseconds. destinations: - - audience: tenant - - audience: platform + - type: consumer # written to the customer's project + - type: producer # written to the networking service's producer project categoryGroups: [allLogs] - logID: networking.datumapis.com/httpproxy-waf @@ -111,11 +124,24 @@ spec: - name: client.address description: Client IP. destinations: - - audience: tenant - - audience: platform - categoryGroups: [allLogs, audit] + - type: consumer + - type: producer + categoryGroups: [allLogs] ``` +A log entry is written once per declared destination: + +- `consumer` — the customer's project. They query their own project and + see only their data. +- `producer` — the service's producer project (here, the networking + service's project). The Datum networking team queries that project and + sees logs across all consumers, with the originating consumer preserved + on each entry as a `consumer_name` label. + +Producer-only log types (no `consumer` destination) are also supported — +useful for internal diagnostics that should never be visible to +customers. + ### 2. Platform Catalog The services operator (`milo-os/telemetry`) owns two new CRDs that the @@ -137,6 +163,8 @@ spec: group: networking.datumapis.com kind: HTTPProxy labels: + - name: resource.group + - name: resource.kind - name: resource.name - name: resource.namespace - name: hostname @@ -162,8 +190,8 @@ spec: - name: client.address - name: http.request.duration_ms destinations: - - audience: tenant - - audience: platform + - type: consumer + - type: producer categoryGroups: [allLogs] ``` @@ -176,22 +204,54 @@ discover available log types. ![Ingestion Pipeline](../diagrams/ingestion-pipeline.png) AI Edge data-plane components (Envoy + WAF sidecar) emit logs over OTLP to -a regional OTel Collector gateway. +a regional OTel Collector gateway. Workload identity cannot be relied on +to resolve the project — the source of these logs is typically a service +component (e.g. Envoy) writing to a log sink, not a consumer-authored +application running with the consumer's identity. Tenancy therefore has +to travel on the log record itself. + +Every log record entering the gateway must carry tenancy labels stamped +by the producing service: + +- `tenant.kind` — the type of tenant that generated the log + (`Project`, `Organization`, `User`). +- `tenant.name` — the resource name of the tenant + (e.g. `personal-project-xyz`). + +Records missing these labels are rejected. Services are also responsible +for stamping resource identity labels declared by their +`MonitoredResourceType` (`resource.group`, `resource.kind`, +`resource.name`, `resource.namespace`, and any service-specific labels +such as `hostname`). The gateway enforces the vocabulary; it does not +inject tenancy or instance identity. Gateway responsibilities: 1. Receive OTLP log records. -2. Stamp `cloud.account.id` (Milo project ID) immutably from the caller's - workload identity — customers cannot override. +2. Validate that `tenant.kind` and `tenant.name` are present and refer to + a tenant the caller is authorised to write logs for. 3. Look up the declared `MonitoredResourceType` for the entry's `resource_type` and validate that emitted resource attributes are a subset of the declared label vocabulary. Reject undeclared labels. -4. Derive `tenant_id` from `cloud.account.id`. -5. Write to ClickHouse via the `clickhouse` exporter. - -Services are responsible for stamping the instance-identifying labels -(e.g. `resource.name`, `resource.namespace`, `hostname`). The gateway -enforces the vocabulary; it does not inject instance identity. +4. Resolve `tenant_id` from `(tenant.kind, tenant.name)` via the project + catalog. +5. For each declared destination on the matching `LogDefinition`, emit one + log record: + - `consumer` → `tenant_id` resolved from the originating tenant. + - `producer` → `tenant_id` resolved from the service's producer + project, with `consumer_name` set to the originating tenant. +6. Hand the resulting records off to NATS for durable buffering. + +A NATS JetStream subject sits between the gateway and ClickHouse. NATS +gives us: + +- **Backpressure**. If ClickHouse is down or slow, the consumer pauses; + NATS retains the backlog rather than the gateway dropping records. +- **Live tail**. The same stream feeds the Loki `/tail` handler, so tail + doesn't need to poll ClickHouse — see Live Tail below. + +A ClickHouse-writer consumer drains NATS into the `platform_logs` table +in batches. ### 4. Storage @@ -208,6 +268,11 @@ CREATE TABLE platform_logs ( body String, log_id LowCardinality(String), resource_type LowCardinality(String), + resource_group LowCardinality(String), + resource_kind LowCardinality(String), + resource_name String, + resource_namespace LowCardinality(String), + consumer_name String, -- empty on consumer-destination rows attributes_string Map(String, String), resources_string Map(String, String), trace_id String, @@ -215,52 +280,93 @@ CREATE TABLE platform_logs ( ) ENGINE = MergeTree() PARTITION BY (tenant_id, toYYYYMM(toDateTime(timestamp / 1e9))) -ORDER BY (tenant_id, log_id, timestamp) +ORDER BY (tenant_id, resource_type, resource_name, log_id, timestamp) TTL toDateTime(timestamp / 1e9) + INTERVAL 7 DAY DELETE; ``` -`log_id` and `resource_type` are promoted to top-level columns: both are -low-cardinality and appear in nearly every query's filter clause. +Top-level columns are chosen for the two common query shapes: + +- **Per-resource**: "give me all access logs for proxy XYZ". Served by + the `(tenant_id, resource_type, resource_name, log_id)` prefix of the + sort key. +- **Per-tenant**: "give me all logs for project X". Served by the + `tenant_id` prefix. -Per-tenant retention overrides are applied via per-row `_row_ttl` -attribute set by the gateway based on the log's `categoryGroups` and the -tenant's retention policy (see Retention below). +`log_id`, `resource_type`, `resource_group`, `resource_kind`, and +`resource_namespace` are all low-cardinality and appear in nearly every +query's filter clause. `resource_name` is high-cardinality but is the +primary drill-down key, so it earns a top-level column and a position in +the sort key. `consumer_name` is populated only on producer-destination +rows, so service teams can filter "show me logs for consumer X" without +cross-tenant grants. ### 5. Query API — Loki-Compatible, Project-Scoped Customer query surface is a Loki-compatible HTTP API exposed under the -project's telemetry namespace: +project's control-plane endpoint: ``` -GET /projects/{project}/telemetry/loki/api/v1/query -GET /projects/{project}/telemetry/loki/api/v1/query_range -GET /projects/{project}/telemetry/loki/api/v1/labels -GET /projects/{project}/telemetry/loki/api/v1/label/{name}/values -GET /projects/{project}/telemetry/loki/api/v1/series -GET /projects/{project}/telemetry/loki/api/v1/tail +GET {project-control-plane-endpoint}/telemetry/loki/api/v1/query +GET {project-control-plane-endpoint}/telemetry/loki/api/v1/query_range +GET {project-control-plane-endpoint}/telemetry/loki/api/v1/labels +GET {project-control-plane-endpoint}/telemetry/loki/api/v1/label/{name}/values +GET {project-control-plane-endpoint}/telemetry/loki/api/v1/series +GET {project-control-plane-endpoint}/telemetry/loki/api/v1/tail ``` -The Milo gateway resolves `{project}` to a `tenant_id` and enforces IAM +`{project-control-plane-endpoint}` is the same per-project control-plane +URL Milo already issues for Kubernetes API access; the telemetry handler +mounts at `/telemetry/...` under it. The project is therefore resolved +from the endpoint itself — no `{project}` placeholder in the path, no +`X-Scope-OrgID` header. `X-Scope-OrgID` sent by Grafana is ignored. + +The Milo gateway resolves the endpoint to a `tenant_id` and enforces IAM before the request reaches the Loki handler. The handler itself is a pure query layer: - Parses LogQL. -- Translates to ClickHouse SQL: stream selectors → `resources_string` map - lookups; line filters → `body LIKE` / full-text; parsed field filters → - `attributes_string` lookups. -- Executes with `tenant_id` already injected from URL context. +- Translates to ClickHouse SQL: stream selectors → top-level column + lookups (`tenant_id`, `resource_type`, `resource_name`, `log_id`, …) + where possible, `resources_string` map lookups otherwise; line filters + → `body LIKE` / full-text; parsed field filters → `attributes_string` + lookups. +- Executes with `tenant_id` already injected from the endpoint context. - Serialises results in Loki's response format. -`X-Scope-OrgID` sent by Grafana is ignored — the project in the URL is -authoritative. - Label and series discovery is served from the `MonitoredResourceType` catalog rather than from ClickHouse, so discovery works on empty projects and Grafana's stream-selector UI populates correctly on first open. -Grafana datasource configuration: base URL -`https://api.datum.net/projects/{project}/telemetry/`, type Loki, no -custom plugin. +Grafana datasource configuration: base URL set to the project's +control-plane endpoint with `/telemetry/` appended, type Loki, no custom +plugin. + +#### Example queries + +Consumer querying their own project: + +```logql +{log_id="networking.datumapis.com/httpproxy-access", resource_name="api-gateway"} + | json | http_response_status_code >= 500 +``` + +Service team querying the networking service's producer project — across +all consumers, or drilling into one: + +```logql +# Aggregate error rate by consumer +sum by (consumer_name) ( + rate({log_id="networking.datumapis.com/httpproxy-access"} + | json | http_response_status_code >= 500 [5m]) +) + +# Drill into a specific consumer +{log_id="networking.datumapis.com/httpproxy-access", consumer_name="ecommerce-co"} + | json | http_response_status_code >= 500 +``` + +No cross-tenant grants are needed for either side — each principal has +IAM on the project (consumer or producer) whose endpoint they're querying. A secondary `LogQuery` virtual resource (Kubernetes-native, modelled on `AuditLogQuery` in `milo-os/activity`) is retained for kubectl-native and @@ -268,52 +374,46 @@ GitOps workflows. It shares the same LogQL → SQL translation layer. ### 6. Access Control -- Milo IAM gates access at the project boundary via standard Kubernetes - RBAC on the project's telemetry endpoint. -- `LogDefinition.spec.categoryGroups` provides a secondary access - dimension: `audit` requires a distinct permission from `allLogs`, - matching GCP's `roles/logging.viewAccessor` pattern scoped to a log - view. The query layer filters out log IDs the caller cannot access - before executing the SQL. +Milo IAM gates access at the project boundary via standard Kubernetes +RBAC on the project's telemetry endpoint. Because the URL is the project +control-plane endpoint, the same RBAC that protects the rest of the +project's resources protects log queries — no separate access model. + +Consumer vs. producer separation is what gives service teams visibility +across all consumers of their service: a Datum networking SRE needs IAM +only on the networking service's producer project to see access logs for +every customer's `HTTPProxy`. No cross-tenant grant is required. ## Cross-Cutting Concerns ### Retention -Fixed tiered defaults; no free-form per-project retention in v1. - -| Category Group | Default Retention | Disable-able | -|---|---|---| -| `allLogs` | 7 days | Yes (opt-in collection) | -| `audit` | 400 days | No (compliance signal) | - -Paid retention overrides are applied per category group on a project, not -per log ID. Implemented as a TTL adjustment column populated by the -gateway at write time so existing rows are not rewritten when overrides -change. +Fixed defaults; not user-controllable in v1. -### Ingestion Quota +| Category Group | Retention | +|---|---| +| `allLogs` | 7 days | -A new `telemetry.miloapis.com/LogIngestionQuota` resource integrates with -the standard Milo quota system. Quota is dimensioned by -`(project, category_group)` in bytes/second. On exceed: - -- Gateway returns 429 with `Retry-After`. -- A per-tenant `telemetry_ingestion_dropped_bytes_total` counter is - exposed via the same Loki API so customers can see drops. -- No silent drops. +Implemented via the table TTL on the `timestamp` column. Per-project or +per-category retention overrides are a follow-on enhancement. ### Default Enablement -- `allLogs` collection is opt-in per project via a `LogCollectionPolicy` - resource. Customers don't get surprise bills from log volume tracking - workload activity they didn't request. -- `audit` category is on by default and not disable-able. Volume is - bounded by control-plane API traffic, not workload activity. +`allLogs` collection is opt-in per project via a `LogCollectionPolicy` +resource. Customers don't get surprise bills from log volume tracking +workload activity they didn't request. For v1 (AI Edge only): proxy access logs default off, WAF events default -on (they fall into both `allLogs` and `audit` and the volume is bounded -by request rate × match rate, not full request rate). +on (the volume is bounded by request rate × match rate, not full request +rate). + +### Live Tail + +The Loki `/tail` endpoint is served by a small handler that subscribes to +the NATS subject the ingestion pipeline already writes to, filters by +`tenant_id` and the stream selector from the request, and streams +matching records over the WebSocket. This avoids polling ClickHouse and +keeps tail latency in the low hundreds of milliseconds. ### Redaction @@ -338,24 +438,26 @@ ServiceConfiguration In dependency order: 1. CRDs: `MonitoredResourceType`, `LogDefinition`, - `LogCollectionPolicy`, `LogIngestionQuota`, `LogRedactionPolicy`, - `LogQuery`. -2. Fan-out controllers in this operator for the first three. -3. ClickHouse `platform_logs` table and OTel Collector gateway with - tenant stamping, label-vocabulary validation, and quota enforcement. -4. AI Edge data-plane integration: Envoy access log + WAF event OTLP - exporters; `ServiceConfiguration` for `networking-datumapis-com` with - the two log definitions. -5. Loki API handler (`/projects/{project}/telemetry/loki/api/v1/...`) - backed by a LogQL → SQL translator. -6. Catalog-backed labels/series discovery. -7. Grafana datasource documentation. + `LogCollectionPolicy`, `LogRedactionPolicy`, `LogQuery`. +2. Fan-out controllers in this operator for `MonitoredResourceType` and + `LogDefinition`. +3. NATS JetStream subject and ClickHouse `platform_logs` table. +4. OTel Collector gateway with tenancy-label validation + (`tenant.kind` / `tenant.name`), label-vocabulary validation, and + per-destination fan-out (`consumer` / `producer`) into NATS. +5. ClickHouse writer consumer draining NATS into `platform_logs`. +6. AI Edge data-plane integration: Envoy access log + WAF event OTLP + exporters that stamp tenancy and resource identity labels; + `ServiceConfiguration` for `networking-datumapis-com` with the two log + definitions. +7. Loki API handler at + `{project-control-plane-endpoint}/telemetry/loki/api/v1/...` backed by + a LogQL → SQL translator, plus the NATS-backed `/tail` handler. +8. Catalog-backed labels/series discovery. +9. Grafana datasource documentation. ## Open Questions -- Live tail backend: ClickHouse polling vs. a separate Kafka topic - consumed by the tail handler. Polling is simpler; Kafka is lower - latency. Likely poll for v1. - Whether `LogCollectionPolicy` is project-scoped or finer-grained (per `HTTPProxy`). Project-scoped is the simpler v1; finer granularity is a future enhancement once we see usage patterns. diff --git a/docs/diagrams/ingestion-pipeline.png b/docs/diagrams/ingestion-pipeline.png index fe4b7bf73527e022d7914da80ddeac309c14f490..3e7f795e885a9dd4c542f578bbb4939428f7ceee 100644 GIT binary patch literal 65765 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%0D>pPBzpi`JZ={g3N-3jVFoN9ZsPyV#daWJ( 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 diff --git a/docs/diagrams/ingestion-pipeline.puml b/docs/diagrams/ingestion-pipeline.puml index c588ad5..d7724f8 100644 --- a/docs/diagrams/ingestion-pipeline.puml +++ b/docs/diagrams/ingestion-pipeline.puml @@ -7,26 +7,30 @@ LAYOUT_WITH_LEGEND() title Customer-Facing Logs — Ingestion Pipeline (AI Edge v1) ' External producers -System_Ext(ai_edge, "AI Edge Data Plane", "Envoy + WAF sidecar handling customer HTTP traffic. Emits one OTLP log record per request (access) and per WAF rule match (waf).") +System_Ext(ai_edge, "AI Edge Data Plane", "Envoy + WAF sidecar handling customer HTTP traffic. Emits one OTLP log record per request (access) and per WAF rule match (waf). Stamps tenant.kind / tenant.name and resource identity labels on every record.") ' Catalog and per-tenant policies — read by the gateway via cached informers -System_Ext(catalog, "Telemetry Catalog", "MonitoredResourceType and LogDefinition CRDs published by the telemetry-services-operator. Defines the legal label vocabulary per resource type.") -System_Ext(policies, "Per-Tenant Policies", "LogCollectionPolicy, LogIngestionQuota, LogRedactionPolicy resources.") +System_Ext(catalog, "Telemetry Catalog", "MonitoredResourceType and LogDefinition CRDs published by the telemetry-services-operator. Defines the legal label vocabulary per resource type and the consumer / producer destinations per log.") +System_Ext(policies, "Per-Tenant Policies", "LogCollectionPolicy and LogRedactionPolicy resources.") ' Ingestion system boundary System_Boundary(ingest, "Ingestion Pipeline") { - Container(gateway, "OTel Collector Gateway", "OpenTelemetry Collector, regional Deployment", "Stamps cloud.account.id from caller workload identity. Validates resource attributes against catalog vocabulary. Derives tenant_id. Enforces collection policy and ingestion quota. Drops/hashes per redaction allowlist. Emits telemetry_ingestion_dropped_bytes_total per (project, category_group).") - ContainerDb(clickhouse, "ClickHouse", "platform_logs table", "MergeTree, partitioned by (tenant_id, month). Per-row TTL column set from category and tenant retention policy.") + Container(gateway, "OTel Collector Gateway", "OpenTelemetry Collector, regional Deployment", "Validates tenant.kind / tenant.name. Resolves tenant_id via the project catalog. Validates resource attributes against catalog vocabulary. Fans out one record per declared destination (consumer / producer), stamping consumer_name on producer records. Drops/hashes per redaction allowlist.") + ContainerQueue(nats, "NATS JetStream", "Durable subject", "Buffers records between the gateway and ClickHouse. Provides backpressure if ClickHouse is down and feeds the live-tail handler.") + Container(writer, "ClickHouse Writer", "Go consumer", "Drains NATS into platform_logs in batches.") + ContainerDb(clickhouse, "ClickHouse", "platform_logs table", "MergeTree, partitioned by (tenant_id, month). Sorted by (tenant_id, resource_type, resource_name, log_id, timestamp). Table TTL on timestamp.") } ' Producer flow (ingress) -Rel_D(ai_edge, gateway, "Emit log records (OTLP/gRPC). 429 + Retry-After on quota exceed.") +Rel_D(ai_edge, gateway, "Emit log records (OTLP/gRPC) with tenancy + resource labels.") ' Gateway lookups -Rel_R(gateway, catalog, "Validate label vocabulary", "informer cache") -Rel_R(gateway, policies, "Apply collection / quota / redaction", "informer cache") +Rel_R(gateway, catalog, "Validate label vocabulary; resolve destinations", "informer cache") +Rel_R(gateway, policies, "Apply collection / redaction", "informer cache") -' Successful write -Rel_D(gateway, clickhouse, "Batch insert validated records", "TCP/9000") +' Successful write path +Rel_D(gateway, nats, "Publish per-destination records", "NATS") +Rel_D(nats, writer, "Consume", "NATS") +Rel_D(writer, clickhouse, "Batch insert", "TCP/9000") @enduml From 0bec8978bcab55dac50fce72e8882273bf9bc89e Mon Sep 17 00:00:00 2001 From: Matt Jenkinson <75292329+mattdjenkinson@users.noreply.github.com> Date: Tue, 19 May 2026 12:00:28 +0100 Subject: [PATCH 4/7] docs: add request correlation, user agent, and PoP fields Extend the AI Edge access and WAF log entry schemas to support a per-request lifecycle view (firewall decision, geo/routing) keyed off a shared correlation ID. Key changes: - Add http.request.id (Envoy x-request-id) to both httpproxy-access and httpproxy-waf so a single request_id filter returns the access entry and every WAF rule that fired on the request - Denormalise waf.outcome and waf.matched_rules onto the access log so "show me blocked requests" is a single stream filter, not a join; per-rule detail stays on the WAF log for drill-down - Add user_agent.original to the access log - Add edge.pop.ingress (and edge.pop.upstream on the access log) to carry the ingress / upstream PoP per request. PoP is emission context, not resource identity, so it lives on the entry schema not the MonitoredResourceType - Add a Request Correlation subsection explaining the join key and the denormalised-summary pattern --- docs/architecture/customer-facing-logs.md | 59 ++++++++++++++++++++++- 1 file changed, 58 insertions(+), 1 deletion(-) diff --git a/docs/architecture/customer-facing-logs.md b/docs/architecture/customer-facing-logs.md index 0255bf1..14c1bcb 100644 --- a/docs/architecture/customer-facing-logs.md +++ b/docs/architecture/customer-facing-logs.md @@ -95,6 +95,8 @@ spec: description: One entry per HTTP request handled by the proxy. monitoredResourceType: networking.datumapis.com/HTTPProxy entrySchema: + - name: http.request.id + description: Per-request correlation ID (Envoy x-request-id). - name: http.request.method description: HTTP method (GET, POST, etc). - name: http.response.status_code @@ -103,8 +105,18 @@ spec: description: Request path. - name: client.address description: Client IP. + - name: user_agent.original + description: Verbatim User-Agent header sent by the client. - name: http.request.duration_ms description: Request duration in milliseconds. + - name: edge.pop.ingress + description: PoP code that received the request (e.g. cdg1). + - name: edge.pop.upstream + description: PoP that routed to the upstream when different from ingress; empty when handled at ingress. + - name: waf.outcome + description: Summary of WAF decision for this request — allowed, blocked, or challenged. + - name: waf.matched_rules + description: Number of WAF rules that matched on this request. Non-zero implies a paired httpproxy-waf entry exists per matched rule. destinations: - type: consumer # written to the customer's project - type: producer # written to the networking service's producer project @@ -115,14 +127,18 @@ spec: description: One entry per WAF rule evaluation that matched or blocked. monitoredResourceType: networking.datumapis.com/HTTPProxy entrySchema: + - name: http.request.id + description: Matches the http.request.id on the paired httpproxy-access entry. - name: waf.rule.id description: Identifier of the WAF rule that matched. - name: waf.action - description: Action taken — block, log, challenge. + description: Action taken for this rule — block, log, challenge. - name: waf.severity description: Severity classification of the matched rule. - name: client.address description: Client IP. + - name: edge.pop.ingress + description: PoP code that ran the WAF evaluation. destinations: - type: consumer - type: producer @@ -184,11 +200,17 @@ spec: displayName: HTTP Proxy Access Log monitoredResourceType: networking.datumapis.com/HTTPProxy entrySchema: + - name: http.request.id - name: http.request.method - name: http.response.status_code - name: url.path - name: client.address + - name: user_agent.original - name: http.request.duration_ms + - name: edge.pop.ingress + - name: edge.pop.upstream + - name: waf.outcome + - name: waf.matched_rules destinations: - type: consumer - type: producer @@ -415,6 +437,41 @@ the NATS subject the ingestion pipeline already writes to, filters by matching records over the WebSocket. This avoids polling ClickHouse and keeps tail latency in the low hundreds of milliseconds. +### Request Correlation + +A single HTTP request through AI Edge produces one access log entry +(`httpproxy-access`) and zero-or-more WAF entries (`httpproxy-waf`, one +per matched rule). All of them carry the same `http.request.id` +(Envoy's `x-request-id`, which already propagates through the filter +chain to the WAF sidecar). That's the join key. + +The model favours denormalisation on the access log for the common case: + +- `waf.outcome` (`allowed` / `blocked` / `challenged`) and + `waf.matched_rules` (count) are stamped directly on the access log, + so the high-frequency "show me blocked requests" query is a single + stream filter, not a join — same shape as GCP Cloud Armor's + `enforcedSecurityPolicy.outcome` on LB access logs. +- The per-rule `httpproxy-waf` entries carry the rule id, action, and + severity, joined back to the access log by `http.request.id` when the + customer needs to drill in to "which rules fired on this request." + +This supports a per-request lifecycle view (one row per request, +expandable to show every WAF rule that fired) without forcing every +query through a join. The lifecycle view itself is built by a single +`http.request.id` filter across both streams: + +```logql +{log_id=~"networking.datumapis.com/httpproxy-(access|waf)"} + | json | http_request_id="phl94-1779186433904-397d1bd984ce" +``` + +`edge.pop.ingress` (where the request was received) and +`edge.pop.upstream` (where it was routed to, when different) populate +the geo/routing portion of that view. Both are stamped at emission by +the data plane — they're not resource identity, since one `HTTPProxy` +serves from many PoPs. + ### Redaction - Platform-managed allowlist of attribute keys always dropped or hashed From 1f3128645874ef4d343243247928eb22a602c90f Mon Sep 17 00:00:00 2001 From: Matt Jenkinson <75292329+mattdjenkinson@users.noreply.github.com> Date: Tue, 19 May 2026 12:01:57 +0100 Subject: [PATCH 5/7] docs: keep PoP and request context on the access log only MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Remove edge.pop.ingress and client.address from the WAF entry schema. Both are already on the paired access log and reachable by joining on http.request.id; duplicating them on every matched-rule row is waste, and the WAF has no concept of edge.pop.upstream anyway since it runs before the routing decision. Clarify in the Request Correlation subsection that the WAF schema is deliberately lean — any context that exists on the access log is reached via the join rather than copied per matched rule. --- docs/architecture/customer-facing-logs.md | 19 ++++++++++--------- 1 file changed, 10 insertions(+), 9 deletions(-) diff --git a/docs/architecture/customer-facing-logs.md b/docs/architecture/customer-facing-logs.md index 14c1bcb..e15423d 100644 --- a/docs/architecture/customer-facing-logs.md +++ b/docs/architecture/customer-facing-logs.md @@ -128,17 +128,13 @@ spec: monitoredResourceType: networking.datumapis.com/HTTPProxy entrySchema: - name: http.request.id - description: Matches the http.request.id on the paired httpproxy-access entry. + description: Matches the http.request.id on the paired httpproxy-access entry. PoP, user agent, response status, and other request-level context are joined from there. - name: waf.rule.id description: Identifier of the WAF rule that matched. - name: waf.action description: Action taken for this rule — block, log, challenge. - name: waf.severity description: Severity classification of the matched rule. - - name: client.address - description: Client IP. - - name: edge.pop.ingress - description: PoP code that ran the WAF evaluation. destinations: - type: consumer - type: producer @@ -467,10 +463,15 @@ query through a join. The lifecycle view itself is built by a single ``` `edge.pop.ingress` (where the request was received) and -`edge.pop.upstream` (where it was routed to, when different) populate -the geo/routing portion of that view. Both are stamped at emission by -the data plane — they're not resource identity, since one `HTTPProxy` -serves from many PoPs. +`edge.pop.upstream` (where it was routed to, when different) live only +on the access log; WAF entries inherit them by joining on +`http.request.id`. They're emission context, not resource identity — +one `HTTPProxy` serves from many PoPs — so they're stamped at emission +by the data plane and aren't part of the `MonitoredResourceType` +vocabulary. The same reasoning is why the WAF entry schema is lean: +client IP, user agent, response status, PoP — anything that already +exists on the paired access entry is reached via the join rather than +duplicated on every matched-rule row. ### Redaction From 3d89722dad262707634028dd92fb4c7db5d7610d Mon Sep 17 00:00:00 2001 From: Michael Costello Date: Fri, 19 Jun 2026 17:25:59 -0400 Subject: [PATCH 6/7] docs: apply POC findings to customer-facing logs design MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Drop Loki-compatible API in favour of a structured HTTP query surface (POST /telemetry/v1/query, WebSocket /tail). Replace the Vector DaemonSet for Compute log collection with an OTel Collector DaemonSet (contrib) using the filelog receiver and k8sattributes processor — consistent with the collectors already running in edge and hub clusters. Replace consumer/producer destinations with single-write storage and a privileged ClickHouse role for Datum ops access — no record duplication. Remove customer-facing Grafana; datumctl is the sole customer query surface in v1. Document that resource_type (group/Kind) and resource_name are project-scoped identifiers forming a denormalised Kubernetes object reference within (org_id, project_id). Clarify live tail subject scoping: org_id and project_id are encoded in the NATS subject, not filtered post-subscription. Add open questions for assumptions that require compute and networking team confirmation: - Kraftlet log path - unikraft-provider and compute controller pod/Instance label stamping - WAF filter state keys - HTTPProxy controller xDS write depth --- docs/architecture/customer-facing-logs.md | 623 +++++++++++++++------- 1 file changed, 425 insertions(+), 198 deletions(-) diff --git a/docs/architecture/customer-facing-logs.md b/docs/architecture/customer-facing-logs.md index e15423d..a2bb1fa 100644 --- a/docs/architecture/customer-facing-logs.md +++ b/docs/architecture/customer-facing-logs.md @@ -1,7 +1,7 @@ # Customer-Facing Logs Status: Draft -Scope (v1): AI Edge (HTTPProxy + WAF) logs only +Scope (v1): AI Edge (HTTPProxy + WAF) logs and Compute workload stdout/stderr ## Motivation @@ -11,28 +11,27 @@ debugging, compliance, and security investigation. Today there is no customer-facing query surface for these logs. Customers running workloads on AI Edge (Datum's HTTP proxy + WAF product) cannot answer basic questions like "show me 5xx responses for my proxy in the last hour" or "which -requests did the WAF block." +requests did the WAF block." Customers running compute workloads have no +visibility into their workload output. This design defines a project-scoped, multi-tenant logs pipeline with a -Loki-compatible query API. AI Edge is the v1 scope: it produces high-volume -access logs and WAF events that are the most acute customer need, and its -log shape exercises every layer of the design without depending on -control-plane audit-log work that lives elsewhere. +structured HTTP query API backed by ClickHouse SQL. AI Edge and Compute are +the v1 scope: AI Edge +produces high-volume access logs and WAF events that are the most acute +customer need; Compute produces workload stdout/stderr, which is the minimum +viable debugging surface for compute customers. ## Goals (v1) -- Customers can query AI Edge access logs and WAF events for their project - through Grafana, LogCLI, and any Loki-compatible client. +- Customers can query AI Edge access logs, WAF events, and Compute workload + output for their project through `datumctl`. - All logs are tenant-isolated at storage and query time; cross-tenant reads are structurally impossible. +- Each log event is stored exactly once. There is no duplication of records + across partitions. - Log schemas are declared once by the producing service and surface automatically as catalog metadata (resource types, label vocabulary, log definitions). -- Service teams can see logs from their own service across all consumers - in the service's producer project; customers only see logs scoped to - their own project. This follows GCP's consumer / producer pattern, which - falls out naturally from Milo's project hierarchy (both tenants and - service producers are modelled as projects). - 7-day default retention for operational logs. Retention is platform-set in v1; not user-controllable. @@ -41,13 +40,17 @@ control-plane audit-log work that lives elsewhere. - Control-plane audit logs. Audit logs are collected by the activity system (`milo-os/activity`) and stored separately; they do not flow through this pipeline. -- Customer-configurable log export (`LogSource` in `ExportPolicy`) — - deferred to a follow-on enhancement. +- Customer-configurable log export — deferred to a follow-on enhancement. + The NATS subject structure is designed to enable this without schema + changes when the time comes. - Body-content redaction via regex; v1 redacts at attribute level only. - Log-based metrics and alerting derived from log streams. - Per-project ingestion quota. Volume protection in v1 is platform-set defaults at the gateway; a `LogIngestionQuota` resource is a follow-on enhancement. +- Structured OTLP export from within compute workloads (custom spans, + metrics). v1 covers stdout/stderr only; structured OTLP from workload + code requires a sidecar or per-workload endpoint and is a follow-on. ## Layers @@ -61,6 +64,11 @@ Services declare what they emit in their `ServiceConfiguration` `telemetry.MonitoredResourceType`. - `spec.logs[]` (new) — fans out to `telemetry.LogDefinition`. +Each log event produces exactly one row — there is no duplication of records +across partitions. `org_id` and `project_id` are stamped by +platform-controlled producers at config time; the row policy enforces tenant +isolation at read time. + AI Edge declaration: ```yaml @@ -94,6 +102,7 @@ spec: displayName: HTTP Proxy Access Log description: One entry per HTTP request handled by the proxy. monitoredResourceType: networking.datumapis.com/HTTPProxy + entrySchema: - name: http.request.id description: Per-request correlation ID (Envoy x-request-id). @@ -117,46 +126,68 @@ spec: description: Summary of WAF decision for this request — allowed, blocked, or challenged. - name: waf.matched_rules description: Number of WAF rules that matched on this request. Non-zero implies a paired httpproxy-waf entry exists per matched rule. - destinations: - - type: consumer # written to the customer's project - - type: producer # written to the networking service's producer project categoryGroups: [allLogs] - logID: networking.datumapis.com/httpproxy-waf displayName: HTTP Proxy WAF Event Log description: One entry per WAF rule evaluation that matched or blocked. monitoredResourceType: networking.datumapis.com/HTTPProxy + entrySchema: - name: http.request.id - description: Matches the http.request.id on the paired httpproxy-access entry. PoP, user agent, response status, and other request-level context are joined from there. + description: Matches the http.request.id on the paired httpproxy-access entry. - name: waf.rule.id description: Identifier of the WAF rule that matched. - name: waf.action description: Action taken for this rule — block, log, challenge. - name: waf.severity description: Severity classification of the matched rule. - destinations: - - type: consumer - - type: producer categoryGroups: [allLogs] ``` -A log entry is written once per declared destination: +Compute declaration: -- `consumer` — the customer's project. They query their own project and - see only their data. -- `producer` — the service's producer project (here, the networking - service's project). The Datum networking team queries that project and - sees logs across all consumers, with the originating consumer preserved - on each entry as a `consumer_name` label. +```yaml +apiVersion: services.miloapis.com/v1alpha1 +kind: ServiceConfiguration +metadata: + name: compute-datumapis-com +spec: + serviceRef: + name: compute-datumapis-com + phase: Published + monitoredResourceTypes: + - resourceTypeName: compute.datumapis.com/Workload + displayName: Compute Workload + gvk: + group: compute.datumapis.com + kind: Workload + labels: + - name: resource.group + description: API group of the resource (compute.datumapis.com). + - name: resource.kind + description: Resource kind (Workload). + - name: resource.name + description: Name of the Workload. + - name: resource.namespace + description: Project namespace the Workload belongs to. + logs: + - logID: compute.datumapis.com/workload-stdout + displayName: Workload Output + description: Stdout and stderr from workload containers. + monitoredResourceType: compute.datumapis.com/Workload -Producer-only log types (no `consumer` destination) are also supported — -useful for internal diagnostics that should never be visible to -customers. + entrySchema: + - name: stream + description: Output stream — stdout or stderr. + - name: container.name + description: Container name within the workload. + categoryGroups: [allLogs] +``` ### 2. Platform Catalog -The services operator (`milo-os/telemetry`) owns two new CRDs that the +The telemetry operator (`milo-os/telemetry`) owns two new CRDs that the `ServiceConfiguration` controller fans out into. `telemetry.MonitoredResourceType` — instance-identifying label vocabulary @@ -195,6 +226,7 @@ spec: phase: Published displayName: HTTP Proxy Access Log monitoredResourceType: networking.datumapis.com/HTTPProxy + entrySchema: - name: http.request.id - name: http.request.method @@ -207,9 +239,6 @@ spec: - name: edge.pop.upstream - name: waf.outcome - name: waf.matched_rules - destinations: - - type: consumer - - type: producer categoryGroups: [allLogs] ``` @@ -221,64 +250,158 @@ discover available log types. ![Ingestion Pipeline](../diagrams/ingestion-pipeline.png) -AI Edge data-plane components (Envoy + WAF sidecar) emit logs over OTLP to -a regional OTel Collector gateway. Workload identity cannot be relied on -to resolve the project — the source of these logs is typically a service -component (e.g. Envoy) writing to a log sink, not a consumer-authored -application running with the consumer's identity. Tenancy therefore has -to travel on the log record itself. +Log records enter the pipeline from two sources with different trust models. +In both cases, `org_id` and `project_id` are resolved by the platform at +configuration time — not per-record at the gateway. The gateway receives +them pre-stamped and trusts them because the stamping components are +platform-controlled. -Every log record entering the gateway must carry tenancy labels stamped -by the producing service: +#### 3a. AI Edge (Envoy) -- `tenant.kind` — the type of tenant that generated the log - (`Project`, `Organization`, `User`). -- `tenant.name` — the resource name of the tenant - (e.g. `personal-project-xyz`). +The HTTPProxy controller generates Envoy xDS configuration for each +`HTTPProxy` resource. At reconcile time, the controller knows the HTTPProxy's +namespace (= `project_id`) and the project's parent organization (= `org_id`). +It stamps both into the OTel access log resource attributes: -Records missing these labels are rejected. Services are also responsible -for stamping resource identity labels declared by their -`MonitoredResourceType` (`resource.group`, `resource.kind`, -`resource.name`, `resource.namespace`, and any service-specific labels -such as `hostname`). The gateway enforces the vocabulary; it does not -inject tenancy or instance identity. +```yaml +# Generated by HTTPProxy controller into Envoy xDS +access_log: + - name: envoy.access_loggers.open_telemetry + typed_config: + "@type": type.googleapis.com/envoy.extensions.access_loggers.open_telemetry.v3.OpenTelemetryAccessLogConfig + common_config: + grpc_service: + envoy_grpc: {cluster_name: telemetry_gateway} + log_name: networking.datumapis.com/httpproxy-access + resource_attributes: + values: + - key: org_id + value: {string_value: "org-abc123"} # resolved at reconcile time + - key: project_id + value: {string_value: "proj-xyz456"} # = HTTPProxy's namespace + - key: resource.group + value: {string_value: "networking.datumapis.com"} + - key: resource.kind + value: {string_value: "HTTPProxy"} + - key: resource.name + value: {string_value: "my-proxy"} # = HTTPProxy.metadata.name + - key: resource.namespace + value: {string_value: "proj-xyz456"} + attributes: + values: + - key: http.request.id + value: {string_value: "%REQ(x-request-id)%"} + - key: http.request.method + value: {string_value: "%REQ(:method)%"} + - key: http.response.status_code + value: {string_value: "%RESPONSE_CODE%"} + - key: url.path + value: {string_value: "%REQ(x-forwarded-proto)%://%REQ(:authority)%%REQ(:path)%"} + - key: client.address + value: {string_value: "%DOWNSTREAM_REMOTE_ADDRESS_WITHOUT_PORT%"} + - key: user_agent.original + value: {string_value: "%REQ(user-agent)%"} + - key: http.request.duration_ms + value: {string_value: "%DURATION%"} + - key: waf.outcome + value: {string_value: "%FILTER_STATE(waf.outcome)%"} + - key: waf.matched_rules + value: {string_value: "%FILTER_STATE(waf.matched_rules)%"} +``` + +Envoy is a platform-controlled producer — Datum generates its configuration, +not the customer. The gateway therefore trusts the `org_id` and `project_id` +values it receives from Envoy without further catalog lookup. + +#### 3b. Compute (Workload stdout/stderr) + +Compute workload containers run on Kraftlet nodes managed by the +unikraft-provider. The container runtime writes stdout/stderr to files on the +node at: + +``` +/var/log/pods/__//0.log +``` + +An OTel Collector DaemonSet (contrib distribution) deployed to each Kraftlet +node scrapes these files using the `filelog` receiver, which handles the CRI-O +log format natively. The `k8sattributes` processor enriches each log line with +metadata from the pod's labels: + +- `org_id` — from pod label `datum.org_id` +- `project_id` — from pod label `datum.project_id` +- `resource.name` — from pod label `compute.datumapis.com/workload-name` +- `resource.namespace` — from pod label `compute.datumapis.com/workload-deployment-name` (or namespace) +- `container.name` — from the log file path +- `stream` — `stdout` or `stderr` + +The unikraft-provider stamps `datum.org_id` and `datum.project_id` on every +Pod it creates, sourcing the values from the parent Instance's labels, which +the compute controller stamps from the Workload's namespace (= `project_id`) +and the namespace's owning organization (= `org_id`): + +```go +// In unikraft-provider instance controller, when building the Pod spec: +pod.Labels["datum.org_id"] = instance.Labels["datum.org_id"] +pod.Labels["datum.project_id"] = instance.Labels["datum.project_id"] +``` + +The OTel Collector DaemonSet exports records as OTLP to the gateway with +`log_id` set to `compute.datumapis.com/workload-stdout`. The gateway treats it +as a platform-controlled producer; the pod label values are trusted. Using +the contrib collector for this DaemonSet is consistent with the collectors +already running in the edge and hub clusters — same image, same config +patterns. + +#### 3c. Gateway Responsibilities + +The gateway is the OTLP bridge — a thin Go service that accepts OTLP/HTTP, +applies schema validation, and writes to NATS. It is not responsible for +resolving tenant identity; that is done upstream by platform-controlled +producers. Gateway responsibilities: -1. Receive OTLP log records. -2. Validate that `tenant.kind` and `tenant.name` are present and refer to - a tenant the caller is authorised to write logs for. -3. Look up the declared `MonitoredResourceType` for the entry's - `resource_type` and validate that emitted resource attributes are a - subset of the declared label vocabulary. Reject undeclared labels. -4. Resolve `tenant_id` from `(tenant.kind, tenant.name)` via the project - catalog. -5. For each declared destination on the matching `LogDefinition`, emit one - log record: - - `consumer` → `tenant_id` resolved from the originating tenant. - - `producer` → `tenant_id` resolved from the service's producer - project, with `consumer_name` set to the originating tenant. -6. Hand the resulting records off to NATS for durable buffering. +1. Receive OTLP log records over HTTP. +2. Validate that `org_id` and `project_id` are present on the record. +3. Look up the `LogDefinition` for the record's `log_id` from a local + in-memory cache (populated by a Kubernetes watch; updated on definition + changes without restart). Reject records with unregistered log IDs. +4. Validate that the record's resource attributes are a subset of the + vocabulary declared by the `LogDefinition`'s `MonitoredResourceType`. +5. Write one NATS message to subject + `telemetry.logs...`. +6. Acknowledge the OTLP request. + +No per-record catalog API calls. The only remote calls are the initial watch +connection to the Kubernetes API (for `LogDefinition` cache population) and +the NATS publish. A NATS JetStream subject sits between the gateway and ClickHouse. NATS gives us: -- **Backpressure**. If ClickHouse is down or slow, the consumer pauses; +- **Backpressure.** If ClickHouse is down or slow, the consumer pauses; NATS retains the backlog rather than the gateway dropping records. -- **Live tail**. The same stream feeds the Loki `/tail` handler, so tail - doesn't need to poll ClickHouse — see Live Tail below. +- **Live tail.** The same stream feeds the `/tail` WebSocket handler without + polling ClickHouse — see Live Tail below. +- **Future log export.** The subject hierarchy + `telemetry.logs...` is designed so a future + export worker can subscribe to `telemetry.logs..>` to forward a + customer's logs to their own destination without any schema changes. A ClickHouse-writer consumer drains NATS into the `platform_logs` table in batches. ### 4. Storage -Shared ClickHouse `platform_logs` table, OTel-aligned schema, `tenant_id` -first in `ORDER BY` and partition key: +Shared ClickHouse `platform_logs` table, OTel-aligned schema. `org_id` and +`project_id` are the partition key and lead the sort key. Each log event +is stored exactly once. ```sql CREATE TABLE platform_logs ( - tenant_id UInt32, + org_id LowCardinality(String), + project_id LowCardinality(String), timestamp UInt64, observed_timestamp UInt64, severity_number UInt8, @@ -290,105 +413,127 @@ CREATE TABLE platform_logs ( resource_kind LowCardinality(String), resource_name String, resource_namespace LowCardinality(String), - consumer_name String, -- empty on consumer-destination rows attributes_string Map(String, String), resources_string Map(String, String), trace_id String, span_id String ) ENGINE = MergeTree() -PARTITION BY (tenant_id, toYYYYMM(toDateTime(timestamp / 1e9))) -ORDER BY (tenant_id, resource_type, resource_name, log_id, timestamp) +PARTITION BY (org_id, toYYYYMM(toDateTime(timestamp / 1e9))) +ORDER BY (org_id, project_id, resource_type, resource_name, log_id, timestamp) TTL toDateTime(timestamp / 1e9) + INTERVAL 7 DAY DELETE; ``` +Row-level access control is enforced by a ClickHouse row policy on the +tenant-facing query user: + +```sql +CREATE ROW POLICY tenant_isolation ON platform_logs + FOR SELECT + USING org_id = getSetting('org_id') AND project_id = getSetting('project_id') + TO api_reader; +``` + +The query API sets these session settings from the authenticated request +context before executing any query. Datum operations staff use a separate +ClickHouse role that bypasses the row policy, allowing fleet-wide queries +without duplicating records. + +`resource_type` is the `group/Kind` of the Datum resource that produced +the log — e.g. `networking.datumapis.com/HTTPProxy` or +`compute.datumapis.com/Workload`. `resource_name` is the name of the +specific instance within the project. Together they are a denormalised +Kubernetes object reference, scoped within `(org_id, project_id)`. +A `resource_name` of `my-proxy` in one project is unrelated to the same +name in another. + Top-level columns are chosen for the two common query shapes: - **Per-resource**: "give me all access logs for proxy XYZ". Served by - the `(tenant_id, resource_type, resource_name, log_id)` prefix of the - sort key. -- **Per-tenant**: "give me all logs for project X". Served by the - `tenant_id` prefix. - -`log_id`, `resource_type`, `resource_group`, `resource_kind`, and -`resource_namespace` are all low-cardinality and appear in nearly every -query's filter clause. `resource_name` is high-cardinality but is the -primary drill-down key, so it earns a top-level column and a position in -the sort key. `consumer_name` is populated only on producer-destination -rows, so service teams can filter "show me logs for consumer X" without -cross-tenant grants. - -### 5. Query API — Loki-Compatible, Project-Scoped - -Customer query surface is a Loki-compatible HTTP API exposed under the -project's control-plane endpoint: + the `(org_id, project_id, resource_type, resource_name, log_id)` prefix + of the sort key. +- **Per-project**: "give me all logs for project X". Served by the + `(org_id, project_id)` prefix. -``` -GET {project-control-plane-endpoint}/telemetry/loki/api/v1/query -GET {project-control-plane-endpoint}/telemetry/loki/api/v1/query_range -GET {project-control-plane-endpoint}/telemetry/loki/api/v1/labels -GET {project-control-plane-endpoint}/telemetry/loki/api/v1/label/{name}/values -GET {project-control-plane-endpoint}/telemetry/loki/api/v1/series -GET {project-control-plane-endpoint}/telemetry/loki/api/v1/tail -``` +### 5. Query API -`{project-control-plane-endpoint}` is the same per-project control-plane -URL Milo already issues for Kubernetes API access; the telemetry handler -mounts at `/telemetry/...` under it. The project is therefore resolved -from the endpoint itself — no `{project}` placeholder in the path, no -`X-Scope-OrgID` header. `X-Scope-OrgID` sent by Grafana is ignored. - -The Milo gateway resolves the endpoint to a `tenant_id` and enforces IAM -before the request reaches the Loki handler. The handler itself is a pure -query layer: - -- Parses LogQL. -- Translates to ClickHouse SQL: stream selectors → top-level column - lookups (`tenant_id`, `resource_type`, `resource_name`, `log_id`, …) - where possible, `resources_string` map lookups otherwise; line filters - → `body LIKE` / full-text; parsed field filters → `attributes_string` - lookups. -- Executes with `tenant_id` already injected from the endpoint context. -- Serialises results in Loki's response format. +#### Why not Loki-compatible -Label and series discovery is served from the `MonitoredResourceType` -catalog rather than from ClickHouse, so discovery works on empty projects -and Grafana's stream-selector UI populates correctly on first open. +An earlier draft of this design used a Loki-compatible API +(`/loki/api/v1/...`). That approach was dropped for three reasons: -Grafana datasource configuration: base URL set to the project's -control-plane endpoint with `/telemetry/` appended, type Loki, no custom -plugin. +1. **Translation layer cost.** A correct LogQL → SQL translator covering + line filters, label filters, unwrap expressions, and metric queries is a + non-trivial piece of software to build and maintain. Every ClickHouse + feature that doesn't map cleanly to LogQL — window functions, joins across + log types for request correlation, histogram aggregations — is either + inaccessible or requires escape hatches that break the abstraction. -#### Example queries +2. **SQL is the direction.** Axiom, Cloudflare, AWS CloudWatch Logs + Insights, and DataDog's analytics surface are all SQL or SQL-like (KQL, + APL). LogQL is a Grafana Cloud-specific protocol; the broader industry + has concluded that logs are a table and SQL is the right query language + for them. Building a LogQL shim would be swimming against that current. -Consumer querying their own project: +3. **We already have a working ClickHouse query path.** Our POC validated + ClickHouse SQL for log queries directly. `datumctl` calls the structured + API; internal ops uses the ClickHouse datasource in Grafana. There is no + tooling gap that Loki compatibility closes. -```logql -{log_id="networking.datumapis.com/httpproxy-access", resource_name="api-gateway"} - | json | http_response_status_code >= 500 -``` +#### Structured HTTP query API -Service team querying the networking service's producer project — across -all consumers, or drilling into one: +The customer query surface is a structured HTTP API exposed under the +project's control-plane endpoint: -```logql -# Aggregate error rate by consumer -sum by (consumer_name) ( - rate({log_id="networking.datumapis.com/httpproxy-access"} - | json | http_response_status_code >= 500 [5m]) -) +``` +POST {project-control-plane-endpoint}/telemetry/v1/query +POST {project-control-plane-endpoint}/telemetry/v1/tail (WebSocket upgrade) +GET {project-control-plane-endpoint}/telemetry/v1/log-definitions +GET {project-control-plane-endpoint}/telemetry/v1/log-definitions/{logID} +``` -# Drill into a specific consumer -{log_id="networking.datumapis.com/httpproxy-access", consumer_name="ecommerce-co"} - | json | http_response_status_code >= 500 +`{project-control-plane-endpoint}` is the same per-project control-plane +URL Milo already issues for Kubernetes API access. The project is resolved +from the endpoint; `org_id` and `project_id` are never passed by the caller. + +The Milo gateway enforces IAM before the request reaches the telemetry +handler. The handler executes ClickHouse SQL with `org_id` and `project_id` +injected from the authenticated endpoint context as session settings; the +row policy enforces them at the database layer. + +Query request body: + +```json +{ + "log_id": "networking.datumapis.com/httpproxy-access", + "resource_name": "my-proxy", + "start": "2026-06-19T10:00:00Z", + "end": "2026-06-19T11:00:00Z", + "filter": { + "http.response.status_code": "500" + }, + "limit": 100, + "order": "desc" +} ``` -No cross-tenant grants are needed for either side — each principal has -IAM on the project (consumer or producer) whose endpoint they're querying. +All filter fields map directly to top-level ClickHouse columns or +`attributes_string` map lookups — no query language to parse. The handler +returns log lines as a JSON array; `datumctl logs` wraps this endpoint. + +Label and series discovery is served from the `MonitoredResourceType` +catalog (`/log-definitions`). `datumctl` queries this endpoint to populate +filter completions. -A secondary `LogQuery` virtual resource (Kubernetes-native, modelled on -`AuditLogQuery` in `milo-os/activity`) is retained for kubectl-native and -GitOps workflows. It shares the same LogQL → SQL translation layer. +#### `datumctl` integration + +`datumctl logs` calls `POST /telemetry/v1/query` with a structured filter +built from its flags. Live tail calls `POST /telemetry/v1/tail` and streams +over the WebSocket. + +A `LogQuery` custom resource (Kubernetes-native, modelled on `AuditLogQuery` +in `milo-os/activity`) is supported for kubectl-native and GitOps workflows. +It translates the structured query spec to the same ClickHouse SQL path. ### 6. Access Control @@ -397,10 +542,10 @@ RBAC on the project's telemetry endpoint. Because the URL is the project control-plane endpoint, the same RBAC that protects the rest of the project's resources protects log queries — no separate access model. -Consumer vs. producer separation is what gives service teams visibility -across all consumers of their service: a Datum networking SRE needs IAM -only on the networking service's producer project to see access logs for -every customer's `HTTPProxy`. No cross-tenant grant is required. +Datum operations staff access fleet-wide data through internal tooling +using a privileged ClickHouse role that bypasses the row policy. This +access is scoped to internal tooling and audit-logged; it does not require +storing any data twice. ## Cross-Cutting Concerns @@ -421,17 +566,32 @@ per-category retention overrides are a follow-on enhancement. resource. Customers don't get surprise bills from log volume tracking workload activity they didn't request. -For v1 (AI Edge only): proxy access logs default off, WAF events default -on (the volume is bounded by request rate × match rate, not full request -rate). +For v1: proxy access logs default off, WAF events default on, compute +workload output default off. + +### Log Export (Future) + +Customer-configurable export to external destinations (OTLP endpoints, S3, +etc.) is a follow-on enhancement. The NATS subject hierarchy +`telemetry.logs...` is designed to support this +without schema changes: an export worker subscribes to +`telemetry.logs..>` as an independent JetStream consumer, reads the +same messages the ClickHouse writer already consumes, and forwards them to +the customer's configured destination. Credentials and endpoint +configuration for that destination are held by the export worker, not by the +storage or ingest layers. ### Live Tail -The Loki `/tail` endpoint is served by a small handler that subscribes to -the NATS subject the ingestion pipeline already writes to, filters by -`tenant_id` and the stream selector from the request, and streams -matching records over the WebSocket. This avoids polling ClickHouse and -keeps tail latency in the low hundreds of milliseconds. +The `/tail` endpoint is served by a small handler that constructs a NATS +subject from the authenticated request context — +`telemetry.logs...>` for all project logs, or +`telemetry.logs...` when a specific log type is +requested. `org_id` and `project_id` are embedded in the subject, so NATS +delivers only that project's messages. Any additional filters (`resource_name`, +attribute values) are applied in-process before forwarding over the WebSocket. +This avoids polling ClickHouse and keeps tail latency in the low hundreds of +milliseconds. ### Request Correlation @@ -446,31 +606,28 @@ The model favours denormalisation on the access log for the common case: - `waf.outcome` (`allowed` / `blocked` / `challenged`) and `waf.matched_rules` (count) are stamped directly on the access log, so the high-frequency "show me blocked requests" query is a single - stream filter, not a join — same shape as GCP Cloud Armor's - `enforcedSecurityPolicy.outcome` on LB access logs. + stream filter, not a join. - The per-rule `httpproxy-waf` entries carry the rule id, action, and severity, joined back to the access log by `http.request.id` when the customer needs to drill in to "which rules fired on this request." -This supports a per-request lifecycle view (one row per request, -expandable to show every WAF rule that fired) without forcing every -query through a join. The lifecycle view itself is built by a single -`http.request.id` filter across both streams: - -```logql -{log_id=~"networking.datumapis.com/httpproxy-(access|waf)"} - | json | http_request_id="phl94-1779186433904-397d1bd984ce" +```sql +SELECT * FROM platform_logs +WHERE log_id IN ( + 'networking.datumapis.com/httpproxy-access', + 'networking.datumapis.com/httpproxy-waf' + ) + AND attributes_string['http.request.id'] = 'phl94-1779186433904-397d1bd984ce' +ORDER BY timestamp ``` -`edge.pop.ingress` (where the request was received) and -`edge.pop.upstream` (where it was routed to, when different) live only -on the access log; WAF entries inherit them by joining on -`http.request.id`. They're emission context, not resource identity — -one `HTTPProxy` serves from many PoPs — so they're stamped at emission -by the data plane and aren't part of the `MonitoredResourceType` -vocabulary. The same reasoning is why the WAF entry schema is lean: -client IP, user agent, response status, PoP — anything that already -exists on the paired access entry is reached via the join rather than +`edge.pop.ingress` and `edge.pop.upstream` live only on the access log; +WAF entries inherit them by joining on `http.request.id`. They are emission +context, not resource identity — one `HTTPProxy` serves from many PoPs — so +they are stamped at emission by the data plane and are not part of the +`MonitoredResourceType` vocabulary. The same reasoning is why the WAF entry +schema is lean: client IP, user agent, response status, PoP — anything that +already exists on the paired access entry is reached via the join rather than duplicated on every matched-rule row. ### Redaction @@ -491,6 +648,43 @@ ServiceConfiguration spec.logs[] → telemetry.LogDefinition (new) ``` +One log event → one NATS message → one ClickHouse row. + +## Changes from Previous Design + +- **Removed double-write (consumer/producer destinations).** The original + design wrote each log event twice — once to the customer's partition and + once to a service-team producer partition. This doubled storage cost + without providing isolation guarantees beyond what a privileged ClickHouse + role already provides. Datum operations staff access fleet-wide data via a + superuser role on internal tooling. + +- **Replaced `tenant.kind`/`tenant.name` with `org_id`/`project_id`.** + The original design had the gateway resolve tenant identity per record via + a catalog lookup. `org_id` and `project_id` are now stamped by + platform-controlled producers at configuration time (HTTPProxy controller + into Envoy xDS; unikraft-provider into pod labels). The gateway receives + them pre-resolved and trusts them without a catalog call. + +- **Added Compute as a v1 producer.** Workload stdout/stderr is collected + by an OTel Collector DaemonSet on Kraftlet nodes and forwarded to the gateway. + `org_id` and `project_id` flow through pod labels stamped by the + unikraft-provider. + +- **Removed `consumer_name` column.** With single-write storage and a + privileged role for fleet-wide access, the column serves no purpose. + +- **Replaced Loki-compatible query API with a structured HTTP API.** + The Loki wire protocol requires a LogQL → SQL translation layer that is + non-trivial to build correctly, limits access to ClickHouse-native + features, and ties the design to a Grafana Cloud-specific protocol the + broader industry is not converging on. Axiom, Cloudflare, AWS CloudWatch + Logs Insights, and DataDog's analytics surface are all SQL or SQL-like; + logs are a table and SQL is the right query language for them. The Grafana + ClickHouse datasource covers the same Grafana use cases without a + translation layer, validated in our working POC. `datumctl logs` calls the + structured API directly; a `LogQuery` CRD covers kubectl-native access. + ## v1 Delivery Slice In dependency order: @@ -499,30 +693,63 @@ In dependency order: `LogCollectionPolicy`, `LogRedactionPolicy`, `LogQuery`. 2. Fan-out controllers in this operator for `MonitoredResourceType` and `LogDefinition`. -3. NATS JetStream subject and ClickHouse `platform_logs` table. -4. OTel Collector gateway with tenancy-label validation - (`tenant.kind` / `tenant.name`), label-vocabulary validation, and - per-destination fan-out (`consumer` / `producer`) into NATS. +3. NATS JetStream stream and ClickHouse `platform_logs` table. +4. OTLP gateway: validates `org_id`/`project_id` presence, validates + `log_id` against cached `LogDefinition`, validates resource attribute + vocabulary, writes to NATS. 5. ClickHouse writer consumer draining NATS into `platform_logs`. -6. AI Edge data-plane integration: Envoy access log + WAF event OTLP - exporters that stamp tenancy and resource identity labels; +6. AI Edge integration: HTTPProxy controller stamps `org_id`, `project_id`, + and resource identity into Envoy xDS OTel access log config. `ServiceConfiguration` for `networking-datumapis-com` with the two log definitions. -7. Loki API handler at - `{project-control-plane-endpoint}/telemetry/loki/api/v1/...` backed by - a LogQL → SQL translator, plus the NATS-backed `/tail` handler. -8. Catalog-backed labels/series discovery. -9. Grafana datasource documentation. +7. Compute integration: unikraft-provider stamps `datum.org_id` and + `datum.project_id` on pods. OTel Collector DaemonSet (contrib) deployed to + Kraftlet nodes with `filelog` receiver and `k8sattributes` processor. + `ServiceConfiguration` for `compute-datumapis-com` with + `workload-stdout` log definition. +8. Structured HTTP query API at + `{project-control-plane-endpoint}/telemetry/v1/...` backed by + ClickHouse SQL with row-policy enforcement, plus the NATS-backed + `/tail` WebSocket handler. +9. Catalog-backed log-definition discovery (`/log-definitions`). +10. Internal Grafana (Datum ops) ClickHouse datasource configuration and + fleet-wide dashboard templates. Customer query surface is `datumctl logs` + only; no customer-facing Grafana in v1. ## Open Questions - Whether `LogCollectionPolicy` is project-scoped or finer-grained (per - `HTTPProxy`). Project-scoped is the simpler v1; finer granularity is a - future enhancement once we see usage patterns. -- Loki LogQL feature subset for v1: instant queries, range queries, - line filters, label filters are required; metric queries - (`rate`, `sum by`, ...) likely deferred to v2. -- How the catalog-backed label discovery handles tenant-specific label - values (e.g. the set of `resource.name` values that actually exist in - the project). Likely a hybrid: label names from catalog, values from + `HTTPProxy` or per `Workload`). Project-scoped is the simpler v1. +- How catalog-backed label discovery handles tenant-specific label values + (e.g. the set of `resource.name` values that actually exist in the + project). Likely a hybrid: label names from catalog, values from ClickHouse with a short cache. +- Whether Kraftlet writes workload stdout/stderr to + `/var/log/pods/__//0.log` — the standard + path for containerd/CRI-O runtimes. Unikraft VMs are not OCI containers; + the log path is a Kraftlet implementation detail. Needs confirmation from + the compute team before the OTel Collector DaemonSet config is finalised. +- Whether the OTel Collector DaemonSet on Kraftlet nodes requires a privileged + pod security context to read `/var/log/pods`. Likely yes; needs sign-off + from the compute team. +- Whether unikraft-provider stamping `datum.org_id` and `datum.project_id` + on Pods is feasible as described. This requires: (a) the compute controller + to stamp those labels on Instance objects, and (b) the unikraft-provider to + copy them from Instance to Pod. Neither is current behaviour; both need + agreement from the compute team. +- Whether Instance objects currently carry `datum.org_id` and + `datum.project_id` labels (set by the compute controller from the + Workload's namespace and owning organisation), or whether that stamping + also needs to be added. This is the upstream half of the pod label chain. +- Whether the WAF sidecar sets `waf.outcome` and `waf.matched_rules` as + Envoy filter state keys (referenced in the xDS snippet as + `%FILTER_STATE(waf.outcome)%` etc.). If it does not, the denormalised WAF + summary fields on the access log are not achievable without changes to the + WAF sidecar. Needs confirmation from whoever owns the WAF filter. +- Whether the HTTPProxy controller can write `resource_attributes` into the + Envoy `OpenTelemetryAccessLogConfig` xDS field. The field is a real Envoy + API (available since ~1.26) but depends on what level of xDS the HTTPProxy + controller currently generates. Needs confirmation from the networking team. +- Who owns the Datum operations ClickHouse role and what tooling uses it. + Suggested: internal Grafana instance in `datum-cloud/infra`, same pattern + as our current telemetry system Grafana. From fcf33fa5072ee31c50a6244dfc2947b529e3e379 Mon Sep 17 00:00:00 2001 From: Michael Costello Date: Tue, 23 Jun 2026 11:44:38 -0400 Subject: [PATCH 7/7] docs: update ingestion pipeline diagram and add query path diagram MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Rewrite ingestion-pipeline.puml to reflect the current design: two producers (AI Edge with xDS config-time stamping, Compute with OTel Collector DaemonSet), edge/hub NATS separation, and ClickHouse pulling from JetStream directly via the NATS engine table rather than a separate Go consumer. Add query-path.puml showing datumctl → Query API → ClickHouse (row policy enforcement), live tail via NATS subject subscription, and Datum ops access via internal Grafana with privileged role. Embed the new diagram in the Query API section of the design doc. --- docs/architecture/customer-facing-logs.md | 2 ++ docs/diagrams/ingestion-pipeline.png | Bin 65765 -> 71576 bytes docs/diagrams/ingestion-pipeline.puml | 40 ++++++++++------------ docs/diagrams/query-path.png | Bin 0 -> 61623 bytes docs/diagrams/query-path.puml | 32 +++++++++++++++++ 5 files changed, 52 insertions(+), 22 deletions(-) create mode 100644 docs/diagrams/query-path.png create mode 100644 docs/diagrams/query-path.puml diff --git a/docs/architecture/customer-facing-logs.md b/docs/architecture/customer-facing-logs.md index a2bb1fa..43f8f03 100644 --- a/docs/architecture/customer-facing-logs.md +++ b/docs/architecture/customer-facing-logs.md @@ -457,6 +457,8 @@ Top-level columns are chosen for the two common query shapes: ### 5. Query API +![Query Path](../diagrams/query-path.png) + #### Why not Loki-compatible An earlier draft of this design used a Loki-compatible API diff --git a/docs/diagrams/ingestion-pipeline.png b/docs/diagrams/ingestion-pipeline.png index 3e7f795e885a9dd4c542f578bbb4939428f7ceee..92783ca174132058f86721275e5c1298d69d7f9d 100644 GIT binary patch literal 71576 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

8uCvD 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

;6du(ntaVZ}NDzt1DyVaB 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 literal 65765 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... ClickHouse pulls directly; live-tail handler subscribes independently.") + ContainerDb(clickhouse, "ClickHouse", "platform_logs (MergeTree)", "logs_ingest table uses ENGINE=NATS to pull from JetStream. Materialized view extracts columns into platform_logs. Partitioned by (org_id, month). Sorted by (org_id, project_id, resource_type, resource_name, log_id, timestamp). TTL 7 days.") +} -' Successful write path -Rel_D(gateway, nats, "Publish per-destination records", "NATS") -Rel_D(nats, writer, "Consume", "NATS") -Rel_D(writer, clickhouse, "Batch insert", "TCP/9000") +Rel(ai_edge, gateway, "OTLP/HTTP log records", "OTLP") +Rel(compute, gateway, "OTLP/HTTP log records", "OTLP") +Rel(gateway, catalog, "Validate log_id and attribute vocabulary", "informer cache") +Rel(gateway, nats_edge, "Publish one message per record", "NATS") +Rel(nats_edge, nats_hub, "Leaf node forwarding", "NATS") +Rel(nats_hub, clickhouse, "Pull via NATS engine table", "JetStream") @enduml diff --git a/docs/diagrams/query-path.png b/docs/diagrams/query-path.png new file mode 100644 index 0000000000000000000000000000000000000000..01ee228dc62cb8f1c8f1616fc71181ade26a3f03 GIT binary patch literal 61623 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ξyX~ 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 literal 0 HcmV?d00001 diff --git a/docs/diagrams/query-path.puml b/docs/diagrams/query-path.puml new file mode 100644 index 0000000..c26a3de --- /dev/null +++ b/docs/diagrams/query-path.puml @@ -0,0 +1,32 @@ +@startuml query-path +!include https://raw.githubusercontent.com/plantuml-stdlib/C4-PlantUML/master/C4_Container.puml + +LAYOUT_LANDSCAPE() +LAYOUT_WITH_LEGEND() + +title Customer-Facing Logs — Query Path + +Person(customer, "Customer", "Project member. Authenticated via Milo IAM.") +Person(datum_ops, "Datum Ops", "Internal Datum staff. Fleet-wide access.") + +Container(datumctl, "datumctl", "CLI", "kubectl-style log streaming and querying. Calls the structured HTTP API.") + +System_Boundary(query_layer, "Query Layer") { + Container(query_api, "Query API", "Go service", "POST /telemetry/v1/query — structured JSON filter translated to ClickHouse SQL. POST /telemetry/v1/tail — WebSocket; subscribes to NATS subject constructed from auth context. GET /telemetry/v1/log-definitions — catalog-backed label discovery.") +} + +System_Boundary(hub, "Hub Cluster") { + ContainerQueue(nats_hub, "NATS Hub", "NATS JetStream", "Live tail source. Handler subscribes to telemetry.logs...> — org_id and project_id are encoded in the subject, not filtered post-subscription.") + ContainerDb(clickhouse, "ClickHouse", "platform_logs (MergeTree)", "Row policy for api_reader role: org_id = getSetting('org_id') AND project_id = getSetting('project_id'). Cross-tenant reads are structurally impossible. Privileged role for Datum ops bypasses row policy.") +} + +Container(grafana, "Grafana (internal)", "Datum ops tooling in datum-cloud/infra", "ClickHouse datasource with privileged role. Fleet-wide dashboards and ad-hoc log queries. Not customer-facing.") + +Rel(customer, datumctl, "datumctl logs ...") +Rel(datumctl, query_api, "POST /query, POST /tail", "HTTPS") +Rel(query_api, clickhouse, "SQL with session settings org_id + project_id from auth context", "TCP/9000") +Rel(query_api, nats_hub, "Subscribe for live tail", "NATS") +Rel(datum_ops, grafana, "Fleet-wide log queries and dashboards") +Rel(grafana, clickhouse, "SQL with privileged role (bypasses row policy)", "TCP/9000") + +@enduml