-{ pkgs, lib, config, ... }:
+{ pkgs, lib, config, hostName, ... }:
+let
+ inherit (config.services) prometheus;
+ listenAddress = "127.0.0.1";
+in
{
services.prometheus = {
enable = true;
+ inherit listenAddress;
+ port = 9090;
+ extraFlags = [
+ "--storage.tsdb.retention.time 30d"
+ ];
+ exporters = {
+ apcupsd = {
+ enable = true;
+ inherit listenAddress;
+ };
+ node = {
+ enable = true;
+ inherit listenAddress;
+ #enabledCollectors = [ "wifi" ];
+ };
+ smokeping = {
+ #enable = true;
+ inherit listenAddress;
+ buckets = "0.0001,0.001,0.005,0.01,0.02,0.04,0.06,0.08,0.16,0.24,0.32,0.4,0.48,0.8,1.6,3.2,6.4";
+ hosts = [ "www.fdn.fr" "8.8.8.8" ];
+ pingInterval = "3s";
+ };
+ systemd = {
+ enable = true;
+ inherit listenAddress;
+ };
+ wireguard = {
+ #enable = true;
+ inherit listenAddress;
+ withRemoteIp = true;
+ };
+ };
+ scrapeConfigs = [
+ {
+ job_name = hostName;
+ static_configs = [
+ {
+ targets = [
+ "${listenAddress}:${toString prometheus.exporters.apcupsd.port}"
+ "${listenAddress}:${toString prometheus.exporters.node.port}"
+ #"[${listenAddress}:${toString prometheus.exporters.smokeping.port}"
+ "${listenAddress}:${toString prometheus.exporters.systemd.port}"
+ #"${listenAddress}:${toString prometheus.exporters.wireguard.port}"
+ ];
+ }
+ ];
+ }
+ ];
+ /*
+ alertmanagers = [
+ {
+ static_configs = [ { targets = [ "${listenAddress}:9093" ]; } ];
+ }
+ ];
+ alertmanager = {
+ enable = true;
+ inherit listenAddress;
+ configuration = {
+ global = {
+ "smtp_smarthost" = "localhost:25";
+ "smtp_require_tls" = false;
+ "smtp_from" = "alertmanager@${domain}";
+ };
+ route = {
+ "group_by" = [ "alertname" "alias" ];
+ "group_wait" = "30s";
+ "group_interval" = "2m";
+ "repeat_interval" = "12h";
+ "receiver" = "root";
+ };
+ receivers = [
+ {
+ "name" = "root";
+ "email_configs" = [
+ {
+ "to" = "root+alertmanager@${domain}";
+ "send_resolved" = true;
+ }
+ ];
+ }
+ ];
+ };
+ };
+ rules = [
+ ''
+ groups:
+ - name: custom_rules
+ rules:
+ - record: battery_percent
+ expr: 100 * battery_energy_now / battery_energy_full
+ - alert: battery_soon_out
+ expr: predict_linear(battery_percent[30m], 3600) <= 10
+ for: 5m
+ labels:
+ severity: warning
+ annotations:
+ summary: "Instance [{{ $labels.instance }}] battery about 1h left"
+ description: "[{{ $labels.instance }}] battery in 1h estimated to {{ $value }}%"
+ ''
+ ];
+ */
+};
+services.grafana = {
+ enable = true;
+ addr = listenAddress;
+ port = 3000;
+ analytics.reporting.enable = false;
+ extraOptions = {
+ ANALYTICS_CHECK_FOR_UPDATES = "false";
+ };
+};
+# override systemd exporter execstart to enable option...
+# FIXME: use extraFlags
+systemd.services.prometheus-systemd-exporter.serviceConfig = {
+ ExecStart = lib.mkForce ''
+ ${pkgs.prometheus-systemd-exporter}/bin/systemd_exporter \
+ --web.listen-address=${listenAddress}:${toString prometheus.exporters.systemd.port} \
+ --collector.enable-ip-accounting \
+ --collector.enable-restart-count
+ '';
};
}