{ lib, config, inputs, pkgs, ... }: let cfg = config.l.monitoring; in { options.l.monitoring.enable = lib.mkEnableOption "monitoring with vector"; options.l.monitoring.enableDocker = lib.mkEnableOption "collecting logs from Docker containers"; config = lib.mkIf cfg.enable { services.vector = { enable = true; journaldAccess = true; settings = { sources = lib.mergeAttrsList ( [ { journald_src = { type = "journald"; }; host_metrics_src = { type = "host_metrics"; }; } ] ++ lib.optional cfg.enableDocker { docker_host_src.type = "docker_logs"; } ); sinks = { metrics = { type = "prometheus_remote_write"; inputs = [ "host_metrics_src" ]; endpoint = "https://metrics.internal/api/v1/write"; healthcheck = { enabled = false; }; }; logs = { inputs = [ "journald_src" ] ++ lib.optional cfg.enableDocker "docker_host_src"; type = "elasticsearch"; endpoints = [ "https://logs.internal/insert/elasticsearch/" ]; api_version = "v8"; compression = "gzip"; healthcheck = { enabled = false; }; query = { _msg_field = "message"; _time_field = "timestamp"; _stream_fields = "host,container_name"; }; }; }; } ; }; }; }