{ pkgs, ... }: { services.opentelemetry-collector = { enable = true; package = pkgs.unstable.opentelemetry-collector-contrib; settings = { receivers = { # receive metrics from other open telemetry collectors otlp.protocols.grpc.endpoint = "0.0.0.0:4317"; # provide a influxdb sink influxdb = { endpoint = "127.0.0.1:8088"; }; # scrape opentelemetry-colectors metrics prometheus.config.scrape_configs = [ { job_name = "netdata"; scrape_interval = "10s"; metrics_path = "/api/v1/allmetrics"; params.format = [ "prometheus" ]; static_configs = [{ targets = [ "127.0.0.1:19999" ]; }]; } { job_name = "otelcol"; scrape_interval = "10s"; static_configs = [{ targets = [ "127.0.0.1:8100" ]; }]; metric_relabel_configs = [ { source_labels = [ "__name__" ]; regex = ".*grpc_io.*"; action = "drop"; } ]; } ]; }; exporters = { # provide prometheus sink under `/metrics` to prometheus = { endpoint = "127.0.0.1:8090"; }; }; service = { pipelines.metrics = { receivers = [ "otlp" "influxdb" "prometheus" ]; exporters = [ "prometheus" ]; }; # open telemetries own metrics? telemetry.metrics.address = "0.0.0.0:8100"; }; }; }; }