{ 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 ''; }