Skip to content

Instantly share code, notes, and snippets.

@jessitron
Last active February 16, 2024 17:46
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save jessitron/156bd0dfae254f2218bb4ae8061ecc47 to your computer and use it in GitHub Desktop.
Save jessitron/156bd0dfae254f2218bb4ae8061ecc47 to your computer and use it in GitHub Desktop.
An OpenTelemetry collector configuration that adds attributes to each telemetry event, saying which receiver and collector it came through. For this post: https://opentelemetryinpractice.net/collector-best-practices-where-did-this-telemetry-come-from/
exporters:
otlp:
endpoint: api.honeycomb.io:443
headers:
x-honeycomb-team: ${HONEYCOMB_API_KEY}
otlp/logging:
endpoint: api.honeycomb.io:443
headers:
x-honeycomb-dataset: all-the-logs
x-honeycomb-team: ${HONEYCOMB_API_KEY}
otlp/metrics:
endpoint: api.honeycomb.io:443
headers:
x-honeycomb-dataset: all-the-metrics
x-honeycomb-team: ${HONEYCOMB_API_KEY}
extensions:
health_check: {}
memory_ballast:
size_in_percentage: 40
processors:
batch: {}
k8sattributes:
extract:
metadata:
- k8s.namespace.name
- k8s.deployment.name
- k8s.statefulset.name
- k8s.daemonset.name
- k8s.cronjob.name
- k8s.job.name
- k8s.node.name
- k8s.pod.name
- k8s.pod.uid
- k8s.pod.start_time
filter:
node_from_env_var: K8S_NODE_NAME
passthrough: false
pod_association:
- sources:
- from: resource_attribute
name: k8s.pod.ip
- sources:
- from: resource_attribute
name: k8s.pod.uid
- sources:
- from: connection
memory_limiter:
check_interval: 5s
limit_percentage: 80
spike_limit_percentage: 25
transform/kubeletstats:
metric_statements:
- context: resource
statements:
- set(attributes["meta.signal_type"], "metrics") where attributes["meta.signal_type"]
== nil
- set(attributes["collector.receiver"], "kubeletstats")
- set(attributes["collector.collector"], "daemonset-opentelemetry-collector")
where attributes["collector.collector"] == nil
transform/prometheus:
log_statements:
- context: resource
statements:
- set(attributes["meta.signal_type"], "metrics") where attributes["meta.signal_type"]
== nil
- set(attributes["collector.receiver"], "prometheus scraping opentelemetry-collector")
- set(attributes["collector.collector"], "daemonset-opentelemetry-collector")
where attributes["collector.collector"] == nil
transform/filelog:
log_statements:
- context: resource
statements:
- set(attributes["collector.receiver"], "filelog")
- set(attributes["collector.collector"], "daemonset-opentelemetry-collector")
where attributes["collector.collector"] == nil
transform/otlp:
log_statements:
- context: resource
statements:
- set(attributes["collector.receiver"], "otlp")
- set(attributes["collector.collector"], "daemonset-opentelemetry-collector")
where attributes["collector.collector"] == nil
metric_statements:
- context: resource
statements:
- set(attributes["meta.signal_type"], "metrics") where attributes["meta.signal_type"]
== nil
- set(attributes["collector.receiver"], "otlp")
- set(attributes["collector.collector"], "daemonset-opentelemetry-collector")
where attributes["collector.collector"] == nil
trace_statements:
- context: resource
statements:
- set(attributes["collector.receiver"], "otlp")
- set(attributes["collector.collector"], "daemonset-opentelemetry-collector")
where attributes["collector.collector"] == nil
receivers:
filelog: #... lots of config
kubeletstats:
auth_type: serviceAccount
collection_interval: 20s
endpoint: https://${NODE_IP}:10250
insecure_skip_verify: true
otlp:
protocols:
grpc:
endpoint: ${env:MY_POD_IP}:4317
http:
endpoint: ${env:MY_POD_IP}:4318
prometheus:
config:
scrape_configs:
- job_name: opentelemetry-collector
scrape_interval: 10s
static_configs:
- targets:
- ${env:MY_POD_IP}:8888
service:
extensions:
- health_check
- memory_ballast
pipelines:
logs:
exporters:
- otlp/logging
processors:
- k8sattributes
- transform/filelog
- memory_limiter
- batch
receivers:
- filelog
logs/otlp:
exporters:
- otlp/logging
processors:
- k8sattributes
- transform/otlp
- memory_limiter
- batch
receivers:
- otlp
metrics/otlp:
exporters:
- otlp/metrics
processors:
- k8sattributes
- transform/otlp
- memory_limiter
- batch
receivers:
- otlp
metrics/prometheus:
exporters:
- otlp/metrics
processors:
- k8sattributes
- transform/prometheus
- memory_limiter
- batch
receivers:
- prometheus
metrics/kubeletstats:
exporters:
- otlp/metrics
processors:
- k8sattributes
- transform/kubeletstats
- memory_limiter
- batch
receivers:
- kubeletstats
traces:
exporters:
- otlp
processors:
- k8sattributes
- transform/otlp
- memory_limiter
- batch
receivers:
- otlp
telemetry:
logs:
level: debug
metrics:
address: ${env:MY_POD_IP}:8888
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment