···
forwarder_log_file: /var/log/datadog/forwarder.log
dogstatsd_log_file: /var/log/datadog/dogstatsd.log
pup_log_file: /var/log/datadog/pup.log
20
+
# proxy_host: my-proxy.com
23
+
# proxy_password: password
25
+
# tags: mytag0, mytag1
${optionalString (cfg.tags != null ) "tags: ${concatStringsSep "," cfg.tags }"}
20
-
${cfg.extraDdConfig}
28
+
# collect_ec2_tags: no
29
+
# recent_point_threshold: 30
31
+
# listen_port: 17123
32
+
# graphite_listen_port: 17124
33
+
# non_local_traffic: no
34
+
# use_curl_http_client: False
35
+
# bind_host: localhost
39
+
# pup_interface: localhost
40
+
# pup_url: http://localhost:17125
42
+
# dogstatsd_port : 8125
43
+
# dogstatsd_interval : 10
44
+
# dogstatsd_normalize : yes
45
+
# statsd_forward_host: address_of_own_statsd_server
46
+
# statsd_forward_port: 8125
48
+
# device_blacklist_re: .*\/dev\/mapper\/lxc-box.*
50
+
# ganglia_host: localhost
51
+
# ganglia_port: 8651
24
-
map (i: { source = if builtins.hasAttr "config" i
25
-
then pkgs.writeText "${i.name}.yaml" i.config
26
-
else "${pkgs.dd-agent}/agent/conf.d-system/${i.name}.yaml";
27
-
target = "dd-agent/conf.d/${i.name}.yaml";
29
-
) cfg.integrations ++
30
-
[ { source = ddConf;
31
-
target = "dd-agent/datadog.conf";
54
+
diskConfig = pkgs.writeText "disk.yaml" ''
36
-
etcSources = map (i: i.source) etcfiles;
61
+
networkConfig = pkgs.writeText "network.yaml" ''
65
+
# Network check only supports one configured instance
66
+
- collect_connection_state: false
67
+
excluded_interfaces:
72
+
postgresqlConfig = pkgs.writeText "postgres.yaml" cfg.postgresqlConfig;
73
+
nginxConfig = pkgs.writeText "nginx.yaml" cfg.nginxConfig;
74
+
mongoConfig = pkgs.writeText "mongo.yaml" cfg.mongoConfig;
75
+
jmxConfig = pkgs.writeText "jmx.yaml" cfg.jmxConfig;
76
+
processConfig = pkgs.writeText "process.yaml" cfg.processConfig;
80
+
defaultConfd = import ./dd-agent-defaults.nix;
81
+
in (map (f: { source = "${pkgs.dd-agent}/agent/conf.d-system/${f}";
82
+
target = "dd-agent/conf.d/${f}";
83
+
}) defaultConfd) ++ [
85
+
target = "dd-agent/datadog.conf";
87
+
{ source = diskConfig;
88
+
target = "dd-agent/conf.d/disk.yaml";
90
+
{ source = networkConfig;
91
+
target = "dd-agent/conf.d/network.yaml";
93
+
(optional (cfg.postgresqlConfig != null)
94
+
{ source = postgresqlConfig;
95
+
target = "dd-agent/conf.d/postgres.yaml";
97
+
(optional (cfg.nginxConfig != null)
98
+
{ source = nginxConfig;
99
+
target = "dd-agent/conf.d/nginx.yaml";
101
+
(optional (cfg.mongoConfig != null)
102
+
{ source = mongoConfig;
103
+
target = "dd-agent/conf.d/mongo.yaml";
105
+
(optional (cfg.processConfig != null)
106
+
{ source = processConfig;
107
+
target = "dd-agent/conf.d/process.yaml";
109
+
(optional (cfg.jmxConfig != null)
110
+
{ source = jmxConfig;
111
+
target = "dd-agent/conf.d/jmx.yaml";
options.services.dd-agent = {
···
type = types.uniq (types.nullOr types.string);
67
-
description = "The dd-agent package to use. Useful when overriding the package.";
68
-
default = pkgs.dd-agent;
69
-
type = types.package;
142
+
postgresqlConfig = mkOption {
143
+
description = "Datadog PostgreSQL integration configuration";
145
+
type = types.uniq (types.nullOr types.string);
72
-
integrations = mkOption {
148
+
nginxConfig = mkOption {
149
+
description = "Datadog nginx integration configuration";
151
+
type = types.uniq (types.nullOr types.string);
154
+
mongoConfig = mkOption {
155
+
description = "MongoDB integration configuration";
157
+
type = types.uniq (types.nullOr types.string);
160
+
jmxConfig = mkOption {
161
+
description = "JMX integration configuration";
163
+
type = types.uniq (types.nullOr types.string);
166
+
processConfig = mkOption {
74
-
Any integrations to use. Default config used if none
75
-
specified. It is currently up to the user to make sure that
76
-
the dd-agent package used has all the dependencies chosen
77
-
integrations require in scope.
168
+
Process integration configuration
170
+
See http://docs.datadoghq.com/integrations/process/
79
-
type = types.listOf (types.attrsOf types.string);
82
-
[ { name = "elastic";
87
-
- url: http://localhost:9200
92
-
{ name = "network"; }
173
+
type = types.uniq (types.nullOr types.string);
97
-
extraDdConfig = mkOption {
98
-
description = "Extra settings to append to datadog agent config.";
100
-
type = types.string;
config = mkIf cfg.enable {
105
-
environment.systemPackages = [ cfg.agent pkgs.sysstat pkgs.procps ];
179
+
environment.systemPackages = [ pkgs."dd-agent" pkgs.sysstat pkgs.procps ];
users.extraUsers.datadog = {
description = "Datadog Agent User";
···
systemd.services.dd-agent = {
description = "Datadog agent monitor";
119
-
path = [ cfg.agent pkgs.python pkgs.sysstat pkgs.procps ];
193
+
path = [ pkgs."dd-agent" pkgs.python pkgs.sysstat pkgs.procps ];
wantedBy = [ "multi-user.target" ];
ExecStart = "${pkgs.dd-agent}/bin/dd-agent foreground";
···
128
-
restartTriggers = [ pkgs.dd-agent ddConf ] ++ etcSources;
202
+
restartTriggers = [ pkgs.dd-agent ddConf diskConfig networkConfig postgresqlConfig nginxConfig mongoConfig jmxConfig processConfig ];
205
+
systemd.services.dogstatsd = {
206
+
description = "Datadog statsd";
207
+
path = [ pkgs."dd-agent" pkgs.python pkgs.procps ];
208
+
wantedBy = [ "multi-user.target" ];
210
+
ExecStart = "${pkgs.dd-agent}/bin/dogstatsd start";
214
+
PIDFile = "/tmp/dogstatsd.pid";
215
+
Restart = "always";
218
+
restartTriggers = [ pkgs.dd-agent ddConf diskConfig networkConfig postgresqlConfig nginxConfig mongoConfig jmxConfig processConfig ];
131
-
systemd.services.dd-jmxfetch = lib.mkIf (builtins.any (i: i.name == "jmx") cfg.integrations) {
221
+
systemd.services.dd-jmxfetch = lib.mkIf (cfg.jmxConfig != null) {
description = "Datadog JMX Fetcher";
133
-
path = [ cfg.agent pkgs.python pkgs.sysstat pkgs.procps pkgs.jdk ];
223
+
path = [ pkgs."dd-agent" pkgs.python pkgs.sysstat pkgs.procps pkgs.jdk ];
wantedBy = [ "multi-user.target" ];
ExecStart = "${pkgs.dd-agent}/bin/dd-jmxfetch";
···
142
-
restartTriggers = [ cfg.agent ddConf ] ++ etcSources;
232
+
restartTriggers = [ pkgs.dd-agent ddConf diskConfig networkConfig postgresqlConfig nginxConfig mongoConfig jmxConfig ];
environment.etc = etcfiles;