{ config, pkgs, lib, ... }: { services.prometheus = { enable = true; retentionTime = "14d"; listenAddress = "[::1]"; exporters = { node = { enable = true; listenAddress = config.services.prometheus.listenAddress; }; #nginx = {}; #postgres = {}; }; scrapeConfigs = [ { job_name = "synapse"; scrape_interval = "15s"; static_configs = [ { targets = lib.pipe config.services.matrix-synapse.settings.listeners [ (lib.filter (l: l.type == "metrics")) builtins.head (l: "[${builtins.head l.bind_addresses}]:${l.port}") ]; } ]; } { job_name = "node"; scrape_interval = "15s"; static_configs = [ { targets = [ "${config.services.prometheus.exporters.node.listenAddress}:${toString config.services.prometheus.exporters.node.port}" ]; } ]; } ]; ruleFiles = [ # https://github.com/element-hq/synapse/tree/master/contrib/prometheus (pkgs.writeText "prom-synapse-rules.yaml" '' groups: - name: synapse rules: - record: 'synapse_federation_client_sent' labels: type: "EDU" expr: 'synapse_federation_client_sent_edus_total + 0' - record: 'synapse_federation_client_sent' labels: type: "PDU" expr: 'synapse_federation_client_sent_pdu_destinations_count_total + 0' - record: 'synapse_federation_client_sent' labels: type: "Query" expr: 'sum(synapse_federation_client_sent_queries) by (job)' - record: 'synapse_federation_server_received' labels: type: "EDU" expr: 'synapse_federation_server_received_edus_total + 0' - record: 'synapse_federation_server_received' labels: type: "PDU" expr: 'synapse_federation_server_received_pdus_total + 0' - record: 'synapse_federation_server_received' labels: type: "Query" expr: 'sum(synapse_federation_server_received_queries) by (job)' - record: 'synapse_federation_transaction_queue_pending' labels: type: "EDU" expr: 'synapse_federation_transaction_queue_pending_edus + 0' - record: 'synapse_federation_transaction_queue_pending' labels: type: "PDU" expr: 'synapse_federation_transaction_queue_pending_pdus + 0' '') ]; }; }