about summary refs log tree commit diff
path: root/modules/alloy.nix
blob: d4a2e585f3794178a4c15ccb1678bd3d05c2e695 (plain) (blame)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
{
  config,
  lib,
  ...
}:
let
  cfg = config.nixfiles.modules.alloy;
in
{
  options.nixfiles.modules.alloy.enable = lib.mkEnableOption "Alloy";

  config = lib.mkIf cfg.enable {
    services.alloy.enable = true;

    environment.etc."alloy/config.alloy".text = ''
      logging {
        level  = "warn"
        format = "logfmt"
      }

      prometheus.remote_write "default" {
        endpoint {
          url = "https://${config.nixfiles.modules.mimir.domain}/api/v1/push"
        }
      }
      prometheus.exporter.self "default" { }
      prometheus.scrape "self" {
        targets    = prometheus.exporter.self.default.targets
        forward_to = [prometheus.relabel.default.receiver]
      }
      prometheus.exporter.unix "default" { }
      prometheus.scrape "unix" {
        targets    = prometheus.exporter.unix.default.targets
        forward_to = [prometheus.relabel.default.receiver]
      }
      prometheus.relabel "default" {
        rule {
          action        = "replace"
          regex         = "([^:]+):[0-9]+"
          replacement   = "$1"
          source_labels = ["__address__"]
          target_label  = "instance"
        }
        forward_to = [prometheus.remote_write.default.receiver]
      }

      loki.write "default" {
        endpoint {
          url = "https://${config.nixfiles.modules.loki.domain}/loki/api/v1/push"
        }
      }
      discovery.relabel "journal" {
        targets = []
        rule {
          source_labels = ["__journal__systemd_unit"]
          target_label  = "unit"
        }
        rule {
          source_labels = ["__journal_priority_keyword"]
          target_label  = "level"
        }
        rule {
          action = "labeldrop"
          regex  = "service_name"
        }
        rule {
          action        = "drop"
          source_labels = ["unit"]
          regex         = "^acme.*"
        }
        rule {
          action        = "drop"
          source_labels = ["unit"]
          regex         = "^home-manager.*"
        }
        rule {
          action        = "drop"
          source_labels = ["unit"]
          regex         = ".*\\.scope$"
        }
        rule {
          action        = "drop"
          source_labels = ["unit"]
          regex         = "^user@.*"
        }
        rule {
          action        = "drop"
          source_labels = ["unit"]
          regex         = "^serial-getty@.*"
        }
        rule {
          action        = "drop"
          source_labels = ["unit"]
          regex         = "^nixos-rebuild.*"
        }
      }
      loki.source.journal "default" {
        forward_to    = [loki.write.default.receiver]
        relabel_rules = discovery.relabel.journal.rules
      }
    '';
  };
}

Consider giving Nix/NixOS a try! <3