Advanced exporter
The configuration that you must provide when you have advanced exporter to export the data.
Configuration
spec:
telemetryExport:
enabled: true
# -------------------------------------------------------------------------
# METRICS
# -------------------------------------------------------------------------
metrics:
# --- Processors --------------------------------------------------------
processors:
- type: batch
name: metrics-batch
config:
send_batch_size: 500
send_batch_max_size: 1000
timeout: 10s
# --- Exporters ---------------------------------------------------------
exporters:
- type: file
name: cadvisor
config:
path: /tmp/telemetry-export/metrics-service-kubelet-cadvisor.jsonl
format: json
flush_interval: 5s
create_directory: true
- type: file
name: ksm
config:
path: /tmp/telemetry-export/metrics-service-kube-state-metrics.jsonl
format: json
flush_interval: 5s
create_directory: true
- type: file
name: metrics-other
config:
path: /tmp/telemetry-export/metrics-service-other.jsonl
format: json
flush_interval: 10s
create_directory: true
# --- Extensions --------------------------------------------------------
extensions:
# Exposes GET /health/status on port 13133
- type: health_check
name: export-health
config:
endpoint: "0.0.0.0:13133"
path: "/health/status"
check_collector_pipeline:
enabled: true
interval: 5m
exporter_failure_threshold: 5
# --- Connectors --------------------------------------------------------
connectors:
# Route by service.name — set by Prometheus as a resource attribute for each
# scrape target. Accessible in the routing connector's resource context via
# attributes["service.name"] (no "resource." prefix needed here).
# Note: the Prometheus "job" label ends up as a datapoint attribute, not a
# resource attribute, so attributes["job"] does not work for routing.
# Unmatched services fall through to metrics/other via default_pipelines.
- type: routing
name: metrics-fanout
config:
default_pipelines:
- metrics/other
error_mode: ignore
table:
- condition: attributes["service.name"] == "kubelet-cadvisor"
pipelines:
- metrics/cadvisor
- condition: attributes["service.name"] == "kube-state-metrics"
pipelines:
- metrics/ksm
# --- Pipelines ---------------------------------------------------------
pipelines:
- name: metrics/cadvisor
processors:
- batch/metrics-batch
exporters:
- file/cadvisor
- name: metrics/ksm
processors:
- batch/metrics-batch
exporters:
- file/ksm
- name: metrics/other
processors:
- batch/metrics-batch
exporters:
- file/metrics-other
# -------------------------------------------------------------------------
# LOGS
# -------------------------------------------------------------------------
logs:
# --- Processors --------------------------------------------------------
processors:
# Three filters, one per pipeline — each drops everything outside its own severity bucket.
- type: filter
name: warn-only
config:
error_mode: ignore
logs:
log_record:
- severity_number < SEVERITY_NUMBER_WARN or severity_number >= SEVERITY_NUMBER_ERROR
- type: filter
name: info-only
config:
error_mode: ignore
logs:
log_record:
- severity_number < SEVERITY_NUMBER_INFO or severity_number >= SEVERITY_NUMBER_WARN
- type: filter
name: other-only
config:
error_mode: ignore
logs:
log_record:
- severity_number >= SEVERITY_NUMBER_INFO
- type: batch
name: logs-batch
config:
send_batch_size: 1000
send_batch_max_size: 2000
timeout: 15s
# --- Exporters ---------------------------------------------------------
exporters:
- type: file
name: warn
config:
path: /tmp/telemetry-export/logs-level-warn.jsonl
format: json
flush_interval: 5s
create_directory: true
- type: file
name: info
config:
path: /tmp/telemetry-export/logs-level-info.jsonl
format: json
flush_interval: 5s
create_directory: true
- type: file
name: logs-other
config:
path: /tmp/telemetry-export/logs-level-other.jsonl
format: json
flush_interval: 5s
create_directory: true
# --- Extensions --------------------------------------------------------
extensions:
# Exposes Go runtime profiling on port 1777
- type: pprof
name: export-pprof
config:
endpoint: "0.0.0.0:1777"
# --- Connectors --------------------------------------------------------
connectors:
# Routing runs in the resource context where severity_number is not accessible,
# so all records are fanned out unconditionally to all three pipelines via a
# catch-all condition: "true". Each pipeline then filters to its own severity bucket.
- type: routing
name: logs-fanout
config:
error_mode: ignore
table:
- condition: "true"
pipelines:
- logs/warn
- logs/info
- logs/other
# --- Pipelines ---------------------------------------------------------
pipelines:
- name: logs/warn
processors:
- filter/warn-only
- batch/logs-batch
exporters:
- file/warn
- name: logs/info
processors:
- filter/info-only
- batch/logs-batch
exporters:
- file/info
- name: logs/other
processors:
- filter/other-only
- batch/logs-batch
exporters:
- file/logs-other
