···
1
+
{ config, lib, pkgs, ... }:
4
+
inherit (lib) mkEnableOption mkIf mkOption types getExe;
6
+
cfg = config.services.opentelemetry-collector;
7
+
opentelemetry-collector = cfg.package;
9
+
settingsFormat = pkgs.formats.yaml {};
11
+
options.services.opentelemetry-collector = {
12
+
enable = mkEnableOption (lib.mdDoc "Opentelemetry Collector");
14
+
package = mkOption {
15
+
type = types.package;
16
+
default = pkgs.opentelemetry-collector;
17
+
defaultText = lib.literalExpression "pkgs.opentelemetry-collector";
18
+
description = lib.mdDoc "The opentelemetry-collector package to use.";
21
+
settings = mkOption {
22
+
type = settingsFormat.type;
24
+
description = lib.mdDoc ''
25
+
Specify the configuration for Opentelemetry Collector in Nix.
27
+
See https://opentelemetry.io/docs/collector/configuration/ for available options.
31
+
configFile = mkOption {
32
+
type = types.nullOr types.path;
34
+
description = lib.mdDoc ''
35
+
Specify a path to a configuration file that Opentelemetry Collector should use.
40
+
config = mkIf cfg.enable {
43
+
(cfg.settings == {}) != (cfg.configFile == null)
46
+
Please specify a configuration for Opentelemetry Collector with either
47
+
'services.opentelemetry-collector.settings' or
48
+
'services.opentelemetry-collector.configFile'.
52
+
systemd.services.opentelemetry-collector = {
53
+
description = "Opentelemetry Collector Service Daemon";
54
+
wantedBy = [ "multi-user.target" ];
57
+
conf = if cfg.configFile == null
58
+
then settingsFormat.generate "config.yaml" cfg.settings
59
+
else cfg.configFile;
62
+
ExecStart = "${getExe opentelemetry-collector} --config=file:${conf}";
65
+
ProtectSystem = "full";
66
+
DevicePolicy = "closed";
67
+
NoNewPrivileges = true;
68
+
WorkingDirectory = "/var/lib/opentelemetry-collector";
69
+
StateDirectory = "opentelemetry-collector";