nixiso/opentelemetry-collector: init

Changed files
+75
nixos
modules
pkgs
tools
misc
opentelemetry-collector
+1
nixos/modules/module-list.nix
···
./services/monitoring/munin.nix
./services/monitoring/nagios.nix
./services/monitoring/netdata.nix
+
./services/monitoring/opentelemetry-collector.nix
./services/monitoring/parsedmarc.nix
./services/monitoring/prometheus/alertmanager.nix
./services/monitoring/prometheus/default.nix
+73
nixos/modules/services/monitoring/opentelemetry-collector.nix
···
+
{ config, lib, pkgs, ... }:
+
+
let
+
inherit (lib) mkEnableOption mkIf mkOption types getExe;
+
+
cfg = config.services.opentelemetry-collector;
+
opentelemetry-collector = cfg.package;
+
+
settingsFormat = pkgs.formats.yaml {};
+
in {
+
options.services.opentelemetry-collector = {
+
enable = mkEnableOption (lib.mdDoc "Opentelemetry Collector");
+
+
package = mkOption {
+
type = types.package;
+
default = pkgs.opentelemetry-collector;
+
defaultText = lib.literalExpression "pkgs.opentelemetry-collector";
+
description = lib.mdDoc "The opentelemetry-collector package to use.";
+
};
+
+
settings = mkOption {
+
type = settingsFormat.type;
+
default = {};
+
description = lib.mdDoc ''
+
Specify the configuration for Opentelemetry Collector in Nix.
+
+
See https://opentelemetry.io/docs/collector/configuration/ for available options.
+
'';
+
};
+
+
configFile = mkOption {
+
type = types.nullOr types.path;
+
default = null;
+
description = lib.mdDoc ''
+
Specify a path to a configuration file that Opentelemetry Collector should use.
+
'';
+
};
+
};
+
+
config = mkIf cfg.enable {
+
assertions = [{
+
assertion = (
+
(cfg.settings == {}) != (cfg.configFile == null)
+
);
+
message = ''
+
Please specify a configuration for Opentelemetry Collector with either
+
'services.opentelemetry-collector.settings' or
+
'services.opentelemetry-collector.configFile'.
+
'';
+
}];
+
+
systemd.services.opentelemetry-collector = {
+
description = "Opentelemetry Collector Service Daemon";
+
wantedBy = [ "multi-user.target" ];
+
+
serviceConfig = let
+
conf = if cfg.configFile == null
+
then settingsFormat.generate "config.yaml" cfg.settings
+
else cfg.configFile;
+
in
+
{
+
ExecStart = "${getExe opentelemetry-collector} --config=file:${conf}";
+
DynamicUser = true;
+
Restart = "always";
+
ProtectSystem = "full";
+
DevicePolicy = "closed";
+
NoNewPrivileges = true;
+
WorkingDirectory = "/var/lib/opentelemetry-collector";
+
StateDirectory = "opentelemetry-collector";
+
};
+
};
+
};
+
}
+1
pkgs/tools/misc/opentelemetry-collector/default.nix
···
'';
license = licenses.asl20;
maintainers = with maintainers; [ uri-canva jk ];
+
mainProgram = "otelcorecol";
};
}