nixos/datadog-agent: Add option to configure datadog integrations
Introduces an option `services.datadog-agent.extraIntegrations` that can be set to include additional Datadog agent integrations from the integrations-core repository. Documentation and an example is provided with the change. Relates to NixOS/nixpkgs#40399
This commit is contained in:
parent
924016f45f
commit
5b748bd8fa
@ -38,6 +38,12 @@ let
|
|||||||
target = "datadog-agent/datadog.yaml";
|
target = "datadog-agent/datadog.yaml";
|
||||||
}] ++ makeCheckConfigs (cfg.checks // defaultChecks);
|
}] ++ makeCheckConfigs (cfg.checks // defaultChecks);
|
||||||
|
|
||||||
|
# Apply the configured extraIntegrations to the provided agent
|
||||||
|
# package. See the documentation of `dd-agent/integrations-core.nix`
|
||||||
|
# for detailed information on this.
|
||||||
|
datadogPkg = cfg.package.overrideAttrs(_: {
|
||||||
|
python = (pkgs.datadog-integrations-core cfg.extraIntegrations).python;
|
||||||
|
});
|
||||||
in {
|
in {
|
||||||
options.services.datadog-agent = {
|
options.services.datadog-agent = {
|
||||||
enable = mkOption {
|
enable = mkOption {
|
||||||
@ -52,9 +58,10 @@ in {
|
|||||||
default = pkgs.datadog-agent;
|
default = pkgs.datadog-agent;
|
||||||
defaultText = "pkgs.datadog-agent";
|
defaultText = "pkgs.datadog-agent";
|
||||||
description = ''
|
description = ''
|
||||||
Which DataDog v6 agent package to use.
|
Which DataDog v6 agent package to use. Note that the provided
|
||||||
Override the <literal>pythonPackages</literal> argument
|
package is expected to have an overridable `python`-attribute
|
||||||
of this derivation to include more checks.
|
which configures the Python environment with the Datadog
|
||||||
|
checks.
|
||||||
'';
|
'';
|
||||||
type = types.package;
|
type = types.package;
|
||||||
};
|
};
|
||||||
@ -88,6 +95,27 @@ in {
|
|||||||
type = types.nullOr (types.enum ["DEBUG" "INFO" "WARN" "ERROR"]);
|
type = types.nullOr (types.enum ["DEBUG" "INFO" "WARN" "ERROR"]);
|
||||||
};
|
};
|
||||||
|
|
||||||
|
extraIntegrations = mkOption {
|
||||||
|
default = {};
|
||||||
|
type = types.attrs;
|
||||||
|
|
||||||
|
description = ''
|
||||||
|
Extra integrations from the Datadog core-integrations
|
||||||
|
repository that should be built and included.
|
||||||
|
|
||||||
|
By default the included integrations are disk, mongo, network,
|
||||||
|
nginx and postgres.
|
||||||
|
|
||||||
|
To include additional integrations the name of the derivation
|
||||||
|
and a function to filter its dependencies from the Python
|
||||||
|
package set must be provided.
|
||||||
|
'';
|
||||||
|
|
||||||
|
example = {
|
||||||
|
ntp = (pythonPackages: [ pythonPackages.ntplib ]);
|
||||||
|
};
|
||||||
|
};
|
||||||
|
|
||||||
extraConfig = mkOption {
|
extraConfig = mkOption {
|
||||||
default = {};
|
default = {};
|
||||||
type = types.attrs;
|
type = types.attrs;
|
||||||
@ -157,7 +185,7 @@ in {
|
|||||||
};
|
};
|
||||||
};
|
};
|
||||||
config = mkIf cfg.enable {
|
config = mkIf cfg.enable {
|
||||||
environment.systemPackages = [ cfg.package pkgs.sysstat pkgs.procps ];
|
environment.systemPackages = [ datadogPkg pkgs.sysstat pkgs.procps ];
|
||||||
|
|
||||||
users.extraUsers.datadog = {
|
users.extraUsers.datadog = {
|
||||||
description = "Datadog Agent User";
|
description = "Datadog Agent User";
|
||||||
@ -171,7 +199,7 @@ in {
|
|||||||
|
|
||||||
systemd.services = let
|
systemd.services = let
|
||||||
makeService = attrs: recursiveUpdate {
|
makeService = attrs: recursiveUpdate {
|
||||||
path = [ cfg.package pkgs.python pkgs.sysstat pkgs.procps ];
|
path = [ datadogPkg pkgs.python pkgs.sysstat pkgs.procps ];
|
||||||
wantedBy = [ "multi-user.target" ];
|
wantedBy = [ "multi-user.target" ];
|
||||||
serviceConfig = {
|
serviceConfig = {
|
||||||
User = "datadog";
|
User = "datadog";
|
||||||
@ -180,7 +208,7 @@ in {
|
|||||||
RestartSec = 2;
|
RestartSec = 2;
|
||||||
PrivateTmp = true;
|
PrivateTmp = true;
|
||||||
};
|
};
|
||||||
restartTriggers = [ cfg.package ] ++ map (etc: etc.source) etcfiles;
|
restartTriggers = [ datadogPkg ] ++ map (etc: etc.source) etcfiles;
|
||||||
} attrs;
|
} attrs;
|
||||||
in {
|
in {
|
||||||
datadog-agent = makeService {
|
datadog-agent = makeService {
|
||||||
@ -190,16 +218,16 @@ in {
|
|||||||
rm -f /etc/datadog-agent/auth_token
|
rm -f /etc/datadog-agent/auth_token
|
||||||
'';
|
'';
|
||||||
script = ''
|
script = ''
|
||||||
export DD_API_KEY=$(head -n1 ${cfg.apiKeyFile})
|
export DD_API_KEY=$(head -n 1 ${cfg.apiKeyFile})
|
||||||
exec ${cfg.package}/bin/agent start -c /etc/datadog-agent/datadog.yaml
|
exec ${datadogPkg}/bin/agent start -c /etc/datadog-agent/datadog.yaml
|
||||||
'';
|
'';
|
||||||
serviceConfig.PermissionsStartOnly = true;
|
serviceConfig.PermissionsStartOnly = true;
|
||||||
};
|
};
|
||||||
|
|
||||||
dd-jmxfetch = lib.mkIf (lib.hasAttr "jmx" cfg.checks) (makeService {
|
dd-jmxfetch = lib.mkIf (lib.hasAttr "jmx" cfg.checks) (makeService {
|
||||||
description = "Datadog JMX Fetcher";
|
description = "Datadog JMX Fetcher";
|
||||||
path = [ cfg.package pkgs.python pkgs.sysstat pkgs.procps pkgs.jdk ];
|
path = [ datadogPkg pkgs.python pkgs.sysstat pkgs.procps pkgs.jdk ];
|
||||||
serviceConfig.ExecStart = "${cfg.package}/bin/dd-jmxfetch";
|
serviceConfig.ExecStart = "${datadogPkg}/bin/dd-jmxfetch";
|
||||||
});
|
});
|
||||||
};
|
};
|
||||||
|
|
||||||
|
Loading…
x
Reference in New Issue
Block a user