{ ... }: let otel-prometheus-exporter-port = 4316; in { services.opentelemetry-collector = { enable = true; settings = { receivers = { otlp = { protocols = { grpc.endpoint = "localhost:4317"; http.endpoint = "localhost:4318"; }; }; hostmetrics.scrapers = { cpu = { }; disk = { }; filesystem = { }; load = { }; memory = { }; network = { }; process = { }; processes = { }; paging = { }; }; }; processors = { memory_limiter = { check_interval = "5s"; limit_mib = 2500; spike_limit_mib = 500; }; batch = { timeout = "10s"; send_batch_size = 100; }; }; exporters = { debug = { verbosity = "detailed"; }; prometheus = { endpoint = "localhost:${toString otel-prometheus-exporter-port}"; send_timestamps = true; enable_open_metrics = true; }; }; service = { extensions = [ ]; pipelines = { traces = { receivers = [ "otlp" ]; exporters = [ "debug" ]; }; metrics = { receivers = [ "otlp" "hostmetrics" ]; exporters = [ "debug" "prometheus" ]; }; logs = { receivers = [ "otlp" ]; exporters = [ "debug" ]; }; }; }; }; }; services.prometheus = { enable = true; globalConfig = { scrape_timeout = "10s"; scrape_interval = "1m"; }; scrapeConfigs = [ { job_name = "otel"; scrape_interval = "5s"; static_configs = [ { targets = [ "localhost:${toString otel-prometheus-exporter-port}" ]; } ]; } ]; }; }