]> git.immae.eu Git - perso/Immae/Config/Nix.git/blobdiff - systems/monitoring-1/monitoring-master.nix
Squash changes containing private information
[perso/Immae/Config/Nix.git] / systems / monitoring-1 / monitoring-master.nix
diff --git a/systems/monitoring-1/monitoring-master.nix b/systems/monitoring-1/monitoring-master.nix
new file mode 100644 (file)
index 0000000..09319b8
--- /dev/null
@@ -0,0 +1,87 @@
+{ config, pkgs, lib, nodes, name, monitoring, ... }:
+let
+  mlib = monitoring.lib;
+  nodesWithMonitoring = lib.filterAttrs (n: v: (v.config.myServices or {}) ? "monitoring") nodes;
+in
+{
+  imports = [
+    ./monitoring/master.nix
+    ./monitoring/phare.nix
+    ./monitoring/ulminfo-fr.nix
+  ];
+  myServices.monitoring.activatedPlugins = lib.flatten (lib.mapAttrsToList (_: n: n.config.myServices.monitoring.fromMasterActivatedPlugins) nodesWithMonitoring);
+  myServices.monitoring.objects = lib.mkMerge (
+    lib.mapAttrsToList (_: n:
+      mlib.toMasterPassiveObject "external-passive-service" 1.5 n.config.myServices.monitoring.objects
+    ) (lib.filterAttrs (n: v: n != name) nodesWithMonitoring)
+    ++
+    lib.mapAttrsToList (_: n: n.config.myServices.monitoring.fromMasterObjects) nodesWithMonitoring
+  );
+  myServices.chatonsProperties.hostings.monitoring = {
+    file.datetime = "2022-08-27T16:00:00";
+    hosting = {
+      name = "Monitoring";
+      description = "Website and server health monitoring";
+      website = "https://status.immae.eu";
+      logo = "https://www.naemon.io/favicon.ico";
+      status.level = "OK";
+      status.description = "OK";
+      registration.load = "OPEN";
+      install.type = "PACKAGE";
+    };
+    software = {
+      name = "naemon";
+      website = "https://www.naemon.io/";
+      license.url = "https://github.com/naemon/naemon-core/blob/master/COPYING";
+      license.name = "GNU General Public License v2.0";
+      version = config.services.naemon.package.version;
+      source.url = "https://github.com/naemon/naemon-core";
+      modules = "livestatus,status-engine";
+    };
+  };
+
+  services.nginx = {
+    virtualHosts."status.immae.eu".locations = {
+      "=/common/immae.cfg" = {
+        alias = pkgs.writeText "immae.cfg" ''
+          # put me for instance in /etc/naemon/module-conf.d/immae.cfg
+          # Make sure that you have include_dir=module-conf.d in
+          # naemon.cfg
+          log_initial_states=1
+          date_format=iso8601
+          admin_email=${config.myEnv.monitoring.email}
+          obsess_over_services=1
+          ocsp_command=notify-master
+        '';
+      };
+      "=/common/resource.cfg" = {
+        alias = pkgs.writeText "resource.cfg" ''
+          # Resource.cfg file
+          # Replace this with path to monitoring plugins
+          $USER1$=@@COMMON_PLUGINS@@
+          # Replace this with a path to scripts from
+          # https://git.immae.eu/cgit/perso/Immae/Config/Nix.git/tree/modules/private/monitoring/plugins
+          $USER2$=@@IMMAE_PLUGINS@@
+          $USER200$=https://status.immae.eu/
+          $USER201$=@@TOKEN@@
+        '';
+      };
+    };
+  };
+
+  secrets.keys = lib.mapAttrs' (k: v: lib.nameValuePair "${k}_access_key" {
+    user = "naemon";
+    group = "naemon";
+    permissions = "0400";
+    text = ''
+      export AWS_ACCESS_KEY_ID="${v.accessKeyId}"
+      export AWS_SECRET_ACCESS_KEY="${v.secretAccessKey}"
+      export BASE_URL="${v.remote "immae-eldiron"}"
+    '';
+  }) config.myEnv.backup.remotes;
+
+  services.naemon.extraConfig = ''
+    broker_module=${pkgs.naemon-livestatus}/lib/naemon-livestatus/livestatus.so ${config.services.naemon.runDir}/live
+    broker_module=${pkgs.status-engine-module}/lib/status-engine/naemon/statusengine-${pkgs.naemon.status_engine_version}.o use_service_perfdata=1 use_process_data=0 use_system_command_data=0 use_external_command_data=0 use_flapping_data=0 use_program_status_data=0 use_notification_data=0 use_contact_status_data=0 use_contact_notification_data=0 use_event_handler_data=0 use_object_data=0
+  '';
+}