]> granicus.if.org Git - icinga2/blob - doc/09-object-types.md
Merge pull request #5504 from spjmurray/fix/influxdb_timeouts_5460_5469
[icinga2] / doc / 09-object-types.md
1 # Config Object Types <a id="object-types"></a>
2
3 This chapter provides an overview of all available config object types which can be
4 instantiated using the `object` keyword.
5
6 Additional details on configuration and runtime attributes and their
7 description are explained as well.
8
9 Config objects share these runtime attributes which cannot be
10 modified by the user. You can access these attributes using
11 the [Icinga 2 API](12-icinga2-api.md#icinga2-api-config-objects).
12
13   Name                      |Description
14   --------------------------|--------------------------
15   version                   | Timestamp when the object was created or modified. Synced throughout cluster nodes.
16   type                      | Object type.
17   original_attributes       | Original values of object attributes modified at runtime.
18   active                    | Object is active (e.g. a service being checked).
19   paused                    | Object has been paused at runtime (e.g. [IdoMysqlConnection](09-object-types.md#objecttype-idomysqlconnection). Defaults to `false`.
20   templates                 | Templates imported on object compilation.
21   package                   | [Configuration package name](12-icinga2-api.md#icinga2-api-config-management) this object belongs to. Local configuration is set to `_etc`, runtime created objects use `_api`.
22
23
24 ## ApiListener <a id="objecttype-apilistener"></a>
25
26 ApiListener objects are used for distributed monitoring setups
27 and API usage specifying the certificate files used for ssl
28 authorization and additional restrictions.
29
30 The `NodeName` constant must be defined in [constants.conf](04-configuring-icinga-2.md#constants-conf).
31
32 Example:
33
34     object ApiListener "api" {
35       cert_path = SysconfDir + "/icinga2/pki/" + NodeName + ".crt"
36       key_path = SysconfDir + "/icinga2/pki/" + NodeName + ".key"
37       ca_path = SysconfDir + "/icinga2/pki/ca.crt"
38     }
39
40
41 Configuration Attributes:
42
43   Name                      |Description
44   --------------------------|--------------------------
45   cert\_path                |**Required.** Path to the public key.
46   key\_path                 |**Required.** Path to the private key.
47   ca\_path                  |**Required.** Path to the CA certificate file.
48   crl\_path                 |**Optional.** Path to the CRL file.
49   bind\_host                |**Optional.** The IP address the api listener should be bound to. Defaults to `0.0.0.0`.
50   bind\_port                |**Optional.** The port the api listener should be bound to. Defaults to `5665`.
51   accept\_config            |**Optional.** Accept zone configuration. Defaults to `false`.
52   accept\_commands          |**Optional.** Accept remote commands. Defaults to `false`.
53   cipher\_list              |**Optional.** Cipher list that is allowed.
54   tls\_protocolmin          |**Optional.** Minimum TLS protocol version. Must be one of `TLSv1`, `TLSv1.1` or `TLSv1.2`. Defaults to `TLSv1`.
55
56 ## ApiUser <a id="objecttype-apiuser"></a>
57
58 ApiUser objects are used for authentication against the Icinga 2 API.
59
60 Example:
61
62     object ApiUser "root" {
63       password = "mysecretapipassword"
64       permissions = [ "*" ]
65     }
66
67
68 Configuration Attributes:
69
70   Name                      |Description
71   --------------------------|--------------------------
72   password                  |**Optional.** Password string.
73   client\_cn                |**Optional.** Client Common Name (CN).
74   permissions               |**Required.** Array of permissions. Either as string or dictionary with the keys `permission` and `filter`. The latter must be specified as function.
75
76 Available permissions are described in the [API permissions](12-icinga2-api.md#icinga2-api-permissions)
77 chapter.
78
79 ## CheckCommand <a id="objecttype-checkcommand"></a>
80
81 A check command definition. Additional default command custom attributes can be
82 defined here.
83
84 > **Note**
85 >
86 > Icinga 2 versions < 2.6.0 require the import of the [plugin-check-command](10-icinga-template-library.md#itl-plugin-check-command) template.
87
88 Example:
89
90     object CheckCommand "check_http" {
91       command = [ PluginDir + "/check_http" ]
92
93       arguments = {
94         "-H" = "$http_vhost$"
95         "-I" = "$http_address$"
96         "-u" = "$http_uri$"
97         "-p" = "$http_port$"
98         "-S" = {
99           set_if = "$http_ssl$"
100         }
101         "--sni" = {
102           set_if = "$http_sni$"
103         }
104         "-a" = {
105           value = "$http_auth_pair$"
106           description = "Username:password on sites with basic authentication"
107         }
108         "--no-body" = {
109           set_if = "$http_ignore_body$"
110         }
111         "-r" = "$http_expect_body_regex$"
112         "-w" = "$http_warn_time$"
113         "-c" = "$http_critical_time$"
114         "-e" = "$http_expect$"
115       }
116
117       vars.http_address = "$address$"
118       vars.http_ssl = false
119       vars.http_sni = false
120     }
121
122
123 Configuration Attributes:
124
125   Name            |Description
126   ----------------|----------------
127   execute         |**Required.** The "execute" script method takes care of executing the check. The default template "plugin-check-command" which is imported into all CheckCommand objects takes care of this setting.
128   command         |**Required.** The command. This can either be an array of individual command arguments. Alternatively a string can be specified in which case the shell interpreter (usually /bin/sh) takes care of parsing the command. When using the "arguments" attribute this must be an array. Can be specified as function for advanced implementations.
129   env             |**Optional.** A dictionary of macros which should be exported as environment variables prior to executing the command.
130   vars            |**Optional.** A dictionary containing custom attributes that are specific to this command.
131   timeout         |**Optional.** The command timeout in seconds. Defaults to 60 seconds.
132   arguments       |**Optional.** A dictionary of command arguments.
133
134
135 ### CheckCommand Arguments <a id="objecttype-checkcommand-arguments"></a>
136
137 Command arguments can be defined as key-value-pairs in the `arguments`
138 dictionary. If the argument requires additional configuration, for example
139 a `description` attribute or an optional condition, the value can be defined
140 as dictionary specifying additional options.
141
142 Service:
143
144     vars.x_val = "My command argument value."
145     vars.have_x = "true"
146
147 CheckCommand:
148
149     arguments = {
150       "-X" = {
151         value = "$x_val$"
152         key = "-Xnew"       /* optional, set a new key identifier */
153         description = "My plugin requires this argument for doing X."
154         required = false    /* optional, no error if not set */
155         skip_key = false    /* always use "-X <value>" */
156         set_if = "$have_x$" /* only set if variable defined and resolves to a numeric value. String values are not supported */
157         order = -1          /* first position */
158         repeat_key = true   /* if `value` is an array, repeat the key as parameter: ... 'key' 'value[0]' 'key' 'value[1]' 'key' 'value[2]' ... */
159       }
160       "-Y" = {
161         value = "$y_val$"
162         description = "My plugin requires this argument for doing Y."
163         required = false    /* optional, no error if not set */
164         skip_key = true     /* don't prefix "-Y" only use "<value>" */
165         set_if = "$have_y$" /* only set if variable defined and resolves to a numeric value. String values are not supported */
166         order = 0           /* second position */
167         repeat_key = false  /* if `value` is an array, do not repeat the key as parameter: ... 'key' 'value[0]' 'value[1]' 'value[2]' ... */
168       }
169     }
170
171   Option      | Description
172   ------------|--------------
173   value       | Optional argument value set by a macro string or a function call.
174   key         | Optional argument key overriding the key identifier.
175   description | Optional argument description.
176   required    | Required argument. Execution error if not set. Defaults to false (optional).
177   skip_key    | Use the value as argument and skip the key.
178   set_if      | Argument is added if the macro resolves to a defined numeric or boolean value. String values are not supported. Function calls returning a value are supported too.
179   order       | Set if multiple arguments require a defined argument order.
180   repeat_key  | If the argument value is an array, repeat the argument key, or not. Defaults to true (repeat).
181
182 Argument order:
183
184     `..., -3, -2, -1, <un-ordered keys>, 1, 2, 3, ...`
185
186 Argument array `repeat_key = true`:
187
188     `'key' 'value[0]' 'key' 'value[1]' 'key' 'value[2]'`
189
190 Argument array `repeat_key = false`:
191
192     `'key' 'value[0]' 'value[1]' 'value[2]'`
193
194 ## CheckerComponent <a id="objecttype-checkcomponent"></a>
195
196 The checker component is responsible for scheduling active checks.
197
198 Example:
199
200     library "checker"
201
202     object CheckerComponent "checker" {
203       concurrent_checks = 512
204     }
205
206 Configuration Attributes:
207
208   Name                |Description
209   --------------------|----------------
210   concurrent\_checks  |**Optional.** The maximum number of concurrent checks. Defaults to 512.
211
212 ## CheckResultReader <a id="objecttype-checkresultreader"></a>
213
214 Reads Icinga 1.x check results from a directory. This functionality is provided
215 to help existing Icinga 1.x users and might be useful for certain cluster
216 scenarios.
217
218 Example:
219
220     library "compat"
221
222     object CheckResultReader "reader" {
223       spool_dir = "/data/check-results"
224     }
225
226 Configuration Attributes:
227
228   Name            |Description
229   ----------------|----------------
230   spool\_dir      |**Optional.** The directory which contains the check result files. Defaults to LocalStateDir + "/lib/icinga2/spool/checkresults/".
231
232 ## Comment <a id="objecttype-comment"></a>
233
234 Comments created at runtime are represented as objects.
235
236 Example:
237
238     object Comment "localhost!my-comment" {
239       host_name = "localhost"
240       author = "icingaadmin"
241       text = "This is a comment."
242     }
243
244 Configuration Attributes:
245
246   Name            |Description
247   ----------------|----------------
248   host_name       | **Required.** The name of the host this comment belongs to.
249   service_name    | **Optional.** The short name of the service this comment belongs to. If omitted, this comment object is treated as host comment.
250   author          | **Required.** The author's name.
251   text            | **Required.** The comment text.
252   entry_time      | **Optional.** The unix timestamp when this comment was added.
253   entry_type      | **Optional.** The comment type (`User` = 1, `Downtime` = 2, `Flapping` = 3, `Acknowledgement` = 4).
254   expire_time     | **Optional.** The comment's expire time as unix timestamp.
255   persistent      | **Optional.** Only evaluated for `entry_type` Acknowledgement. `true` does not remove the comment when the acknowledgement is removed.
256
257 ## CompatLogger <a id="objecttype-compatlogger"></a>
258
259 Writes log files in a format that's compatible with Icinga 1.x.
260
261 Example:
262
263     library "compat"
264
265     object CompatLogger "my-log" {
266       log_dir = "/var/log/icinga2/compat"
267       rotation_method = "HOURLY"
268     }
269
270 Configuration Attributes:
271
272   Name            |Description
273   ----------------|----------------
274   log\_dir        |**Optional.** Path to the compat log directory. Defaults to LocalStateDir + "/log/icinga2/compat".
275   rotation\_method|**Optional.** Specifies when to rotate log files. Can be one of "HOURLY", "DAILY", "WEEKLY" or "MONTHLY". Defaults to "HOURLY".
276
277
278
279 ## Dependency <a id="objecttype-dependency"></a>
280
281 Dependency objects are used to specify dependencies between hosts and services. Dependencies
282 can be defined as Host-to-Host, Service-to-Service, Service-to-Host, or Host-to-Service
283 relations.
284
285 > **Best Practice**
286 >
287 > Rather than creating a `Dependency` object for a specific host or service it is usually easier
288 > to just create a `Dependency` template and use the `apply` keyword to assign the
289 > dependency to a number of hosts or services. Use the `to` keyword to set the specific target
290 > type for `Host` or `Service`.
291 > Check the [dependencies](03-monitoring-basics.md#dependencies) chapter for detailed examples.
292
293 Service-to-Service Example:
294
295     object Dependency "webserver-internet" {
296       parent_host_name = "internet"
297       parent_service_name = "ping4"
298
299       child_host_name = "webserver"
300       child_service_name = "ping4"
301
302       states = [ OK, Warning ]
303
304       disable_checks = true
305     }
306
307 Host-to-Host Example:
308
309     object Dependency "webserver-internet" {
310       parent_host_name = "internet"
311
312       child_host_name = "webserver"
313
314       states = [ Up ]
315
316       disable_checks = true
317     }
318
319 Configuration Attributes:
320
321   Name                  |Description
322   ----------------------|----------------
323   parent_host_name      |**Required.** The parent host.
324   parent_service_name   |**Optional.** The parent service. If omitted, this dependency object is treated as host dependency.
325   child_host_name       |**Required.** The child host.
326   child_service_name    |**Optional.** The child service. If omitted, this dependency object is treated as host dependency.
327   disable_checks        |**Optional.** Whether to disable checks when this dependency fails. Defaults to false.
328   disable_notifications |**Optional.** Whether to disable notifications when this dependency fails. Defaults to true.
329   ignore_soft_states    |**Optional.** Whether to ignore soft states for the reachability calculation. Defaults to true.
330   period                |**Optional.** Time period during which this dependency is enabled.
331   states                |**Optional.** A list of state filters when this dependency should be OK. Defaults to [ OK, Warning ] for services and [ Up ] for hosts.
332
333 Available state filters:
334
335     OK
336     Warning
337     Critical
338     Unknown
339     Up
340     Down
341
342 When using [apply rules](03-monitoring-basics.md#using-apply) for dependencies, you can leave out certain attributes which will be
343 automatically determined by Icinga 2.
344
345 Service-to-Host Dependency Example:
346
347     apply Dependency "internet" to Service {
348       parent_host_name = "dsl-router"
349       disable_checks = true
350
351       assign where host.name != "dsl-router"
352     }
353
354 This example sets all service objects matching the assign condition into a dependency relation to
355 the parent host object `dsl-router` as implicit child services.
356
357 Service-to-Service-on-the-same-Host Dependency Example:
358
359     apply Dependency "disable-nrpe-checks" to Service {
360       parent_service_name = "nrpe-health"
361
362       assign where service.check_command == "nrpe"
363       ignore where service.name == "nrpe-health"
364     }
365
366 This example omits the `parent_host_name` attribute and Icinga 2 automatically sets its value to the name of the
367 host object matched by the apply rule condition. All services where apply matches are made implicit child services
368 in this dependency relation.
369
370
371 Dependency objects have composite names, i.e. their names are based on the `child_host_name` and `child_service_name` attributes and the
372 name you specified. This means you can define more than one object with the same (short) name as long as one of the `child_host_name` and
373 `child_service_name` attributes has a different value.
374
375 ## Downtime <a id="objecttype-downtime"></a>
376
377 Downtimes created at runtime are represented as objects.
378
379 Example:
380
381     object Downtime "localhost!my-downtime" {
382       host_name = "localhost"
383       author = "icingaadmin"
384       text = "This is a comment."
385     }
386
387 Configuration Attributes:
388
389   Name            |Description
390   ----------------|----------------
391   host_name       | **Required.** The name of the host this comment belongs to.
392   service_name    | **Optional.** The short name of the service this comment belongs to. If omitted, this comment object is treated as host comment.
393   author          | **Required.** The author's name.
394   comment         | **Required.** The comment text.
395   start_time      | **Required.** The start time as unix timestamp.
396   end_time        | **Required.** The end time as unix timestamp.
397   duration        | **Required.** The duration as number.
398   entry_time      | **Optional.** The unix timestamp when this downtime was added.
399   fixed           | **Optional.** Whether the downtime is fixed (true) or flexible (false). Defaults to flexible. Details in the [advanced topics chapter](08-advanced-topics.md#fixed-flexible-downtimes).
400   triggers        | **Optional.** List of downtimes which should be triggered by this downtime.
401
402 Runtime Attributes:
403
404   Name            |Description
405   ----------------|----------------
406   trigger_time    | The unix timestamp when this downtime was triggered.
407   triggered_by    | The name of the downtime this downtime was triggered by.
408
409
410
411 ## Endpoint <a id="objecttype-endpoint"></a>
412
413 Endpoint objects are used to specify connection information for remote
414 Icinga 2 instances.
415
416 Example:
417
418     object Endpoint "icinga2b" {
419       host = "192.168.5.46"
420       port = 5665
421       log_duration = 1d
422     }
423
424 Example (disable replay log):
425
426     object Endpoint "icinga2b" {
427       host = "192.168.5.46"
428       port = 5665
429       log_duration = 0
430     }
431
432 Configuration Attributes:
433
434   Name            |Description
435   ----------------|----------------
436   host            |**Optional.** The hostname/IP address of the remote Icinga 2 instance.
437   port            |**Optional.** The service name/port of the remote Icinga 2 instance. Defaults to `5665`.
438   log_duration    |**Optional.** Duration for keeping replay logs on connection loss. Defaults to `1d` (86400 seconds). Attribute is specified in seconds. If log_duration is set to 0, replaying logs is disabled. You could also specify the value in human readable format like `10m` for 10 minutes or `1h` for one hour.
439
440 Endpoint objects cannot currently be created with the API.
441
442 ## EventCommand <a id="objecttype-eventcommand"></a>
443
444 An event command definition.
445
446 > **Note**
447 >
448 > Icinga 2 versions < 2.6.0 require the import of the [plugin-event-command](10-icinga-template-library.md#itl-plugin-event-command) template.
449
450 Example:
451
452     object EventCommand "restart-httpd-event" {
453       command = "/opt/bin/restart-httpd.sh"
454     }
455
456
457 Configuration Attributes:
458
459   Name            |Description
460   ----------------|----------------
461   execute         |**Required.** The "execute" script method takes care of executing the event handler. The default template "plugin-event-command" which is imported into all CheckCommand objects takes care of this setting.
462   command         |**Required.** The command. This can either be an array of individual command arguments. Alternatively a string can be specified in which case the shell interpreter (usually /bin/sh) takes care of parsing the command.
463   env             |**Optional.** A dictionary of macros which should be exported as environment variables prior to executing the command.
464   vars            |**Optional.** A dictionary containing custom attributes that are specific to this command.
465   timeout         |**Optional.** The command timeout in seconds. Defaults to 60 seconds.
466   arguments       |**Optional.** A dictionary of command arguments.
467
468 Command arguments can be used the same way as for [CheckCommand objects](09-object-types.md#objecttype-checkcommand-arguments).
469
470 More advanced examples for event command usage can be found [here](03-monitoring-basics.md#event-commands).
471
472 ## ExternalCommandListener <a id="objecttype-externalcommandlistener"></a>
473
474 Implements the Icinga 1.x command pipe which can be used to send commands to Icinga.
475
476 Example:
477
478     library "compat"
479
480     object ExternalCommandListener "external" {
481         command_path = "/var/run/icinga2/cmd/icinga2.cmd"
482     }
483
484 Configuration Attributes:
485
486   Name            |Description
487   ----------------|----------------
488   command\_path   |**Optional.** Path to the command pipe. Defaults to RunDir + "/icinga2/cmd/icinga2.cmd".
489
490
491
492 ## FileLogger <a id="objecttype-filelogger"></a>
493
494 Specifies Icinga 2 logging to a file.
495
496 Example:
497
498     object FileLogger "debug-file" {
499       severity = "debug"
500       path = "/var/log/icinga2/debug.log"
501     }
502
503 Configuration Attributes:
504
505   Name            |Description
506   ----------------|----------------
507   path            |**Required.** The log path.
508   severity        |**Optional.** The minimum severity for this log. Can be "debug", "notice", "information", "warning" or "critical". Defaults to "information".
509
510
511 ## GelfWriter <a id="objecttype-gelfwriter"></a>
512
513 Writes event log entries to a defined GELF receiver host (Graylog2, Logstash).
514
515 Example:
516
517     library "perfdata"
518
519     object GelfWriter "gelf" {
520       host = "127.0.0.1"
521       port = 12201
522     }
523
524 Configuration Attributes:
525
526   Name                  |Description
527   ----------------------|----------------------
528   host                  |**Optional.** GELF receiver host address. Defaults to '127.0.0.1'.
529   port                  |**Optional.** GELF receiver port. Defaults to `12201`.
530   source                |**Optional.** Source name for this instance. Defaults to `icinga2`.
531   enable_send_perfdata  |**Optional.** Enable performance data for 'CHECK RESULT' events.
532
533
534 ## GraphiteWriter <a id="objecttype-graphitewriter"></a>
535
536 Writes check result metrics and performance data to a defined
537 Graphite Carbon host.
538
539 Example:
540
541     library "perfdata"
542
543     object GraphiteWriter "graphite" {
544       host = "127.0.0.1"
545       port = 2003
546     }
547
548 Configuration Attributes:
549
550   Name                  |Description
551   ----------------------|----------------------
552   host                  |**Optional.** Graphite Carbon host address. Defaults to '127.0.0.1'.
553   port                  |**Optional.** Graphite Carbon port. Defaults to 2003.
554   host_name_template    |**Optional.** Metric prefix for host name. Defaults to "icinga2.$host.name$.host.$host.check_command$".
555   service_name_template |**Optional.** Metric prefix for service name. Defaults to "icinga2.$host.name$.services.$service.name$.$service.check_command$".
556   enable_send_thresholds | **Optional.** Send additional threshold metrics. Defaults to `false`.
557   enable_send_metadata  | **Optional.** Send additional metadata metrics. Defaults to `false`.
558   enable_legacy_mode    | **Optional.** Enable legacy mode for schema < 2.4. **Note**: This will be removed in 2.8.
559
560 Additional usage examples can be found [here](14-features.md#graphite-carbon-cache-writer).
561
562
563
564 ## Host <a id="objecttype-host"></a>
565
566 A host.
567
568 Example:
569
570     object Host NodeName {
571       display_name = "Local host on this node"
572       address = "127.0.0.1"
573       address6 = "::1"
574
575       groups = [ "all-hosts" ]
576
577       check_command = "hostalive"
578     }
579
580 Configuration Attributes:
581
582   Name            |Description
583   ----------------|----------------
584   display_name    |**Optional.** A short description of the host (e.g. displayed by external interfaces instead of the name if set).
585   address         |**Optional.** The host's address. Available as command runtime macro `$address$` if set.
586   address6        |**Optional.** The host's address. Available as command runtime macro `$address6$` if set.
587   groups          |**Optional.** A list of host groups this host belongs to.
588   vars            |**Optional.** A dictionary containing custom attributes that are specific to this host.
589   check\_command  |**Required.** The name of the check command.
590   max\_check\_attempts|**Optional.** The number of times a host is re-checked before changing into a hard state. Defaults to 3.
591   check\_period   |**Optional.** The name of a time period which determines when this host should be checked. Not set by default.
592   check\_timeout  |**Optional.** Check command timeout in seconds. Overrides the CheckCommand's `timeout` attribute.
593   check\_interval |**Optional.** The check interval (in seconds). This interval is used for checks when the host is in a `HARD` state. Defaults to 5 minutes.
594   retry\_interval |**Optional.** The retry interval (in seconds). This interval is used for checks when the host is in a `SOFT` state. Defaults to 1 minute.
595   enable\_notifications|**Optional.** Whether notifications are enabled. Defaults to true.
596   enable\_active\_checks|**Optional.** Whether active checks are enabled. Defaults to true.
597   enable\_passive\_checks|**Optional.** Whether passive checks are enabled. Defaults to true.
598   enable\_event\_handler|**Optional.** Enables event handlers for this host. Defaults to true.
599   enable\_flapping|**Optional.** Whether flap detection is enabled. Defaults to false.
600   enable\_perfdata|**Optional.** Whether performance data processing is enabled. Defaults to true.
601   event\_command  |**Optional.** The name of an event command that should be executed every time the host's state changes or the host is in a `SOFT` state.
602   flapping\_threshold|**Optional.** The flapping threshold in percent when a host is considered to be flapping.
603   volatile        |**Optional.** The volatile setting enables always `HARD` state types if `NOT-OK` state changes occur.
604   zone            |**Optional.** The zone this object is a member of.
605   command\_endpoint|**Optional.** The endpoint where commands are executed on.
606   notes           |**Optional.** Notes for the host.
607   notes\_url      |**Optional.** Url for notes for the host (for example, in notification commands).
608   action\_url     |**Optional.** Url for actions for the host (for example, an external graphing tool).
609   icon\_image     |**Optional.** Icon image for the host. Used by external interfaces only.
610   icon\_image\_alt|**Optional.** Icon image description for the host. Used by external interface only.
611
612 The actual check interval might deviate slightly from the configured values due to the fact that Icinga tries
613 to evenly distribute all checks over a certain period of time, i.e. to avoid load spikes.
614
615 > **Best Practice**
616 >
617 > The `address` and `address6` attributes are required for running commands using
618 > the `$address$` and `$address6$` runtime macros.
619
620 Runtime Attributes:
621
622   Name                      | Type          | Description
623   --------------------------|---------------|-----------------
624   next\_check               | Number        | When the next check occurs (as a UNIX timestamp).
625   last\_check               | Number        | When the last check occured (as a UNIX timestamp).
626   check\_attempt            | Number        | The current check attempt number.
627   state\_type               | Number        | The current state type (0 = SOFT, 1 = HARD).
628   last\_state\_type         | Number        | The previous state type (0 = SOFT, 1 = HARD).
629   last\_reachable           | Boolean       | Whether the host was reachable when the last check occurred.
630   last\_check\_result       | CheckResult   | The current check result.
631   last\_state\_change       | Number        | When the last state change occurred (as a UNIX timestamp).
632   last\_hard\_state\_change | Number        | When the last hard state change occurred (as a UNIX timestamp).
633   last\_in\_downtime        | Boolean       | Whether the host was in a downtime when the last check occurred.
634   acknowledgement           | Number        | The acknowledgement type (0 = NONE, 1 = NORMAL, 2 = STICKY).
635   acknowledgement_expiry    | Number        | When the acknowledgement expires (as a UNIX timestamp; 0 = no expiry).
636   downtime\_depth           | Number        | Whether the host has one or more active downtimes.
637   flapping_last_change      | Number        | When the last flapping change occurred (as a UNIX timestamp).
638   flapping                  | Boolean       | Whether the host is flapping between states.
639   state                     | Number        | The current state (0 = UP, 1 = DOWN).
640   last\_state               | Number        | The previous state (0 = UP, 1 = DOWN).
641   last\_hard\_state         | Number        | The last hard state (0 = UP, 1 = DOWN).
642   last_state_up             | Number        | When the last UP state occurred (as a UNIX timestamp).
643   last_state_down           | Number        | When the last DOWN state occurred (as a UNIX timestamp).
644
645
646
647 ## HostGroup <a id="objecttype-hostgroup"></a>
648
649 A group of hosts.
650
651 > **Best Practice**
652 >
653 > Assign host group members using the [group assign](17-language-reference.md#group-assign) rules.
654
655 Example:
656
657     object HostGroup "my-hosts" {
658       display_name = "My hosts"
659     }
660
661 Configuration Attributes:
662
663   Name            |Description
664   ----------------|----------------
665   display_name    |**Optional.** A short description of the host group.
666   groups          |**Optional.** An array of nested group names.
667
668 ## IcingaApplication <a id="objecttype-icingaapplication"></a>
669
670 The IcingaApplication object is required to start Icinga 2.
671 The object name must be `app`. If the object configuration
672 is missing, Icinga 2 will automatically create an IcingaApplication
673 object.
674
675 Example:
676
677     object IcingaApplication "app" {
678       enable_perfdata = false
679     }
680
681 Configuration Attributes:
682
683   Name                  |Description
684   ----------------------|--------------------------
685   enable_notifications  |**Optional.** Whether notifications are globally enabled. Defaults to true.
686   enable_event_handlers |**Optional.** Whether event handlers are globally enabled. Defaults to true.
687   enable_flapping       |**Optional.** Whether flap detection is globally enabled. Defaults to true.
688   enable_host_checks    |**Optional.** Whether active host checks are globally enabled. Defaults to true.
689   enable_service_checks |**Optional.** Whether active service checks are globally enabled. Defaults to true.
690   enable_perfdata       |**Optional.** Whether performance data processing is globally enabled. Defaults to true.
691   vars                  |**Optional.** A dictionary containing custom attributes that are available globally.
692
693 ## IdoMySqlConnection <a id="objecttype-idomysqlconnection"></a>
694
695 IDO database adapter for MySQL.
696
697 Example:
698
699     library "db_ido_mysql"
700
701     object IdoMysqlConnection "mysql-ido" {
702       host = "127.0.0.1"
703       port = 3306
704       user = "icinga"
705       password = "icinga"
706       database = "icinga"
707
708       cleanup = {
709         downtimehistory_age = 48h
710         contactnotifications_age = 31d
711       }
712     }
713
714 Configuration Attributes:
715
716   Name            |Description
717   ----------------|----------------
718   host            |**Optional.** MySQL database host address. Defaults to "localhost".
719   port            |**Optional.** MySQL database port. Defaults to 3306.
720   socket_path     |**Optional.** MySQL socket path.
721   user            |**Optional.** MySQL database user with read/write permission to the icinga database. Defaults to "icinga".
722   password        |**Optional.** MySQL database user's password. Defaults to "icinga".
723   database        |**Optional.** MySQL database name. Defaults to "icinga".
724   enable\_ssl     |**Optional.** Use SSL. Defaults to false. Change to `true` in case you want to use any of the SSL options.
725   ssl\_key        |**Optional.** MySQL SSL client key file path.
726   ssl\_cert       |**Optional.** MySQL SSL certificate file path.
727   ssl\_ca         |**Optional.** MySQL SSL certificate authority certificate file path.
728   ssl\_capath     |**Optional.** MySQL SSL trusted SSL CA certificates in PEM format directory path.
729   ssl\_cipher     |**Optional.** MySQL SSL list of allowed ciphers.
730   table\_prefix   |**Optional.** MySQL database table prefix. Defaults to "icinga\_".
731   instance\_name  |**Optional.** Unique identifier for the local Icinga 2 instance. Defaults to "default".
732   instance\_description|**Optional.** Description for the Icinga 2 instance.
733   enable_ha       |**Optional.** Enable the high availability functionality. Only valid in a [cluster setup](06-distributed-monitoring.md#distributed-monitoring-high-availability-db-ido). Defaults to "true".
734   failover_timeout | **Optional.** Set the failover timeout in a [HA cluster](06-distributed-monitoring.md#distributed-monitoring-high-availability-db-ido). Must not be lower than 60s. Defaults to "60s".
735   cleanup         |**Optional.** Dictionary with items for historical table cleanup.
736   categories      |**Optional.** Array of information types that should be written to the database.
737
738 Cleanup Items:
739
740   Name            | Description
741   ----------------|----------------
742   acknowledgements_age |**Optional.** Max age for acknowledgements table rows (entry_time). Defaults to 0 (never).
743   commenthistory_age |**Optional.** Max age for commenthistory table rows (entry_time). Defaults to 0 (never).
744   contactnotifications_age |**Optional.** Max age for contactnotifications table rows (start_time). Defaults to 0 (never).
745   contactnotificationmethods_age |**Optional.** Max age for contactnotificationmethods table rows (start_time). Defaults to 0 (never).
746   downtimehistory_age |**Optional.** Max age for downtimehistory table rows (entry_time). Defaults to 0 (never).
747   eventhandlers_age |**Optional.** Max age for eventhandlers table rows (start_time). Defaults to 0 (never).
748   externalcommands_age |**Optional.** Max age for externalcommands table rows (entry_time). Defaults to 0 (never).
749   flappinghistory_age |**Optional.** Max age for flappinghistory table rows (event_time). Defaults to 0 (never).
750   hostchecks_age |**Optional.** Max age for hostalives table rows (start_time). Defaults to 0 (never).
751   logentries_age |**Optional.** Max age for logentries table rows (logentry_time). Defaults to 0 (never).
752   notifications_age |**Optional.** Max age for notifications table rows (start_time). Defaults to 0 (never).
753   processevents_age |**Optional.** Max age for processevents table rows (event_time). Defaults to 0 (never).
754   statehistory_age |**Optional.** Max age for statehistory table rows (state_time). Defaults to 0 (never).
755   servicechecks_age |**Optional.** Max age for servicechecks table rows (start_time). Defaults to 0 (never).
756   systemcommands_age |**Optional.** Max age for systemcommands table rows (start_time). Defaults to 0 (never).
757
758 Data Categories:
759
760   Name                 | Description            | Required by
761   ---------------------|------------------------|--------------------
762   DbCatConfig          | Configuration data     | Icinga Web 2
763   DbCatState           | Current state data     | Icinga Web 2
764   DbCatAcknowledgement | Acknowledgements       | Icinga Web 2
765   DbCatComment         | Comments               | Icinga Web 2
766   DbCatDowntime        | Downtimes              | Icinga Web 2
767   DbCatEventHandler    | Event handler data     | Icinga Web 2
768   DbCatExternalCommand | External commands      | --
769   DbCatFlapping        | Flap detection data    | Icinga Web 2
770   DbCatCheck           | Check results          | --
771   DbCatLog             | Log messages           | --
772   DbCatNotification    | Notifications          | Icinga Web 2
773   DbCatProgramStatus   | Program status data    | Icinga Web 2
774   DbCatRetention       | Retention data         | Icinga Web 2
775   DbCatStateHistory    | Historical state data  | Icinga Web 2
776
777 The default value for `categories` includes everything required
778 by Icinga Web 2 in the table above.
779
780 In addition to the category flags listed above the `DbCatEverything`
781 flag may be used as a shortcut for listing all flags.
782
783 ## IdoPgSqlConnection <a id="objecttype-idopgsqlconnection"></a>
784
785 IDO database adapter for PostgreSQL.
786
787 Example:
788
789     library "db_ido_pgsql"
790
791     object IdoPgsqlConnection "pgsql-ido" {
792       host = "127.0.0.1"
793       port = 5432
794       user = "icinga"
795       password = "icinga"
796       database = "icinga"
797
798       cleanup = {
799         downtimehistory_age = 48h
800         contactnotifications_age = 31d
801       }
802     }
803
804 Configuration Attributes:
805
806   Name            |Description
807   ----------------|----------------
808   host            |**Optional.** PostgreSQL database host address. Defaults to "localhost".
809   port            |**Optional.** PostgreSQL database port. Defaults to "5432".
810   user            |**Optional.** PostgreSQL database user with read/write permission to the icinga database. Defaults to "icinga".
811   password        |**Optional.** PostgreSQL database user's password. Defaults to "icinga".
812   database        |**Optional.** PostgreSQL database name. Defaults to "icinga".
813   table\_prefix   |**Optional.** PostgreSQL database table prefix. Defaults to "icinga\_".
814   instance\_name  |**Optional.** Unique identifier for the local Icinga 2 instance. Defaults to "default".
815   instance\_description|**Optional.** Description for the Icinga 2 instance.
816   enable_ha       |**Optional.** Enable the high availability functionality. Only valid in a [cluster setup](06-distributed-monitoring.md#distributed-monitoring-high-availability-db-ido). Defaults to "true".
817   failover_timeout | **Optional.** Set the failover timeout in a [HA cluster](06-distributed-monitoring.md#distributed-monitoring-high-availability-db-ido). Must not be lower than 60s. Defaults to "60s".
818   cleanup         |**Optional.** Dictionary with items for historical table cleanup.
819   categories      |**Optional.** Array of information types that should be written to the database.
820
821 Cleanup Items:
822
823   Name            | Description
824   ----------------|----------------
825   acknowledgements_age |**Optional.** Max age for acknowledgements table rows (entry_time). Defaults to 0 (never).
826   commenthistory_age |**Optional.** Max age for commenthistory table rows (entry_time). Defaults to 0 (never).
827   contactnotifications_age |**Optional.** Max age for contactnotifications table rows (start_time). Defaults to 0 (never).
828   contactnotificationmethods_age |**Optional.** Max age for contactnotificationmethods table rows (start_time). Defaults to 0 (never).
829   downtimehistory_age |**Optional.** Max age for downtimehistory table rows (entry_time). Defaults to 0 (never).
830   eventhandlers_age |**Optional.** Max age for eventhandlers table rows (start_time). Defaults to 0 (never).
831   externalcommands_age |**Optional.** Max age for externalcommands table rows (entry_time). Defaults to 0 (never).
832   flappinghistory_age |**Optional.** Max age for flappinghistory table rows (event_time). Defaults to 0 (never).
833   hostchecks_age |**Optional.** Max age for hostalives table rows (start_time). Defaults to 0 (never).
834   logentries_age |**Optional.** Max age for logentries table rows (logentry_time). Defaults to 0 (never).
835   notifications_age |**Optional.** Max age for notifications table rows (start_time). Defaults to 0 (never).
836   processevents_age |**Optional.** Max age for processevents table rows (event_time). Defaults to 0 (never).
837   statehistory_age |**Optional.** Max age for statehistory table rows (state_time). Defaults to 0 (never).
838   servicechecks_age |**Optional.** Max age for servicechecks table rows (start_time). Defaults to 0 (never).
839   systemcommands_age |**Optional.** Max age for systemcommands table rows (start_time). Defaults to 0 (never).
840
841 Data Categories:
842
843   Name                 | Description            | Required by
844   ---------------------|------------------------|--------------------
845   DbCatConfig          | Configuration data     | Icinga Web 2
846   DbCatState           | Current state data     | Icinga Web 2
847   DbCatAcknowledgement | Acknowledgements       | Icinga Web 2
848   DbCatComment         | Comments               | Icinga Web 2
849   DbCatDowntime        | Downtimes              | Icinga Web 2
850   DbCatEventHandler    | Event handler data     | Icinga Web 2
851   DbCatExternalCommand | External commands      | --
852   DbCatFlapping        | Flap detection data    | Icinga Web 2
853   DbCatCheck           | Check results          | --
854   DbCatLog             | Log messages           | --
855   DbCatNotification    | Notifications          | Icinga Web 2
856   DbCatProgramStatus   | Program status data    | Icinga Web 2
857   DbCatRetention       | Retention data         | Icinga Web 2
858   DbCatStateHistory    | Historical state data  | Icinga Web 2
859
860 The default value for `categories` includes everything required
861 by Icinga Web 2 in the table above.
862
863 In addition to the category flags listed above the `DbCatEverything`
864 flag may be used as a shortcut for listing all flags.
865
866 ## InfluxdbWriter <a id="objecttype-influxdbwriter"></a>
867
868 Writes check result metrics and performance data to a defined InfluxDB host.
869
870 Example:
871
872     library "perfdata"
873
874     object InfluxdbWriter "influxdb" {
875       host = "127.0.0.1"
876       port = 8086
877       database = "icinga2"
878
879       flush_threshold = 1024
880       flush_interval = 10s
881
882       host_template = {
883         measurement = "$host.check_command$"
884         tags = {
885           hostname = "$host.name$"
886         }
887       }
888       service_template = {
889         measurement = "$service.check_command$"
890         tags = {
891           hostname = "$host.name$"
892           service = "$service.name$"
893         }
894       }
895     }
896
897 Measurement names and tags are fully configurable by the end user. The InfluxdbWriter
898 object will automatically add a `metric` tag to each data point. This correlates to the
899 perfdata label. Fields (value, warn, crit, min, max) are created from data if available
900 and the configuration allows it.  If a value associated with a tag is not able to be
901 resolved, it will be dropped and not sent to the target host.
902
903 Backslashes are allowed in tag keys, tag values and field keys, however they are also
904 escape characters when followed by a space or comma, but cannot be escaped themselves.
905 As a result all trailling slashes in these fields are replaced with an underscore.  This
906 predominantly affects Windows paths e.g. `C:\` becomes `C:_`.
907
908 The database is assumed to exist so this object will make no attempt to create it currently.
909
910 Configuration Attributes:
911
912   Name                   |Description
913   -----------------------|---------------------------------------------------------------------------------------------------------
914   host                   | **Required.** InfluxDB host address. Defaults to `127.0.0.1`.
915   port                   | **Required.** InfluxDB HTTP port. Defaults to `8086`.
916   database               | **Required.** InfluxDB database name. Defaults to `icinga2`.
917   username               | **Optional.** InfluxDB user name. Defaults to `none`.
918   password               | **Optional.** InfluxDB user password.  Defaults to `none`.
919   ssl_enable             | **Optional.** Whether to use a TLS stream.  Defaults to `false`.
920   ssl_ca_cert            | **Optional.** CA certificate to validate the remote host.
921   ssl_cert               | **Optional.** Host certificate to present to the remote host for mutual verification.
922   ssl_key                | **Optional.** Host key to accompany the ssl_cert
923   host_template          | **Required.** Host template to define the InfluxDB line protocol.
924   service_template       | **Required.** Service template to define the influxDB line protocol.
925   enable_send_thresholds | **Optional.** Whether to send warn, crit, min & max tagged data.
926   enable_send_metadata   | **Optional.** Whether to send check metadata e.g. states, execution time, latency etc.
927   flush_interval         | **Optional.** How long to buffer data points before transfering to InfluxDB. Defaults to `10s`.
928   flush_threshold        | **Optional.** How many data points to buffer before forcing a transfer to InfluxDB.  Defaults to `1024`.
929
930 Note: If `flush_threshold` is set too low, this will always force the feature to flush all data
931 to InfluxDB. Experiment with the setting, if you are processing more than 1024 metrics per second
932 or similar.
933
934 ### Instance Tagging <a id="objecttype-influxdbwriter-instance-tags"></a>
935
936 Consider the following service check:
937
938     apply Service "disk" for (disk => attributes in host.vars.disks) {
939       import "generic-service"
940       check_command = "disk"
941       display_name = "Disk " + disk
942       vars.disk_partitions = disk
943       assign where host.vars.disks
944     }
945
946 This is a typical pattern for checking individual disks, NICs, SSL certificates etc associated
947 with a host.  What would be useful is to have the data points tagged with the specific instance
948 for that check.  This would allow you to query time series data for a check on a host and for a
949 specific instance e.g. /dev/sda.  To do this quite simply add the instance to the service variables:
950
951     apply Service "disk" for (disk => attributes in host.vars.disks) {
952       ...
953       vars.instance = disk
954       ...
955     }
956
957 Then modify your writer configuration to add this tag to your data points if the instance variable
958 is associated with the service:
959
960     object InfluxdbWriter "influxdb" {
961       ...
962       service_template = {
963         measurement = "$service.check_command$"
964         tags = {
965           hostname = "$host.name$"
966           service = "$service.name$"
967           instance = "$service.vars.instance$"
968         }
969       }
970       ...
971     }
972
973 ## LiveStatusListener <a id="objecttype-livestatuslistener"></a>
974
975 Livestatus API interface available as TCP or UNIX socket. Historical table queries
976 require the [CompatLogger](09-object-types.md#objecttype-compatlogger) feature enabled
977 pointing to the log files using the `compat_log_path` configuration attribute.
978
979 Example:
980
981     library "livestatus"
982
983     object LivestatusListener "livestatus-tcp" {
984       socket_type = "tcp"
985       bind_host = "127.0.0.1"
986       bind_port = "6558"
987     }
988
989     object LivestatusListener "livestatus-unix" {
990       socket_type = "unix"
991       socket_path = "/var/run/icinga2/cmd/livestatus"
992     }
993
994 Configuration Attributes:
995
996   Name            |Description
997   ----------------|----------------
998   socket\_type      |**Optional.** Specifies the socket type. Can be either "tcp" or "unix". Defaults to "unix".
999   bind\_host        |**Optional.** Only valid when socket\_type is "tcp". Host address to listen on for connections. Defaults to "127.0.0.1".
1000   bind\_port        |**Optional.** Only valid when `socket_type` is "tcp". Port to listen on for connections. Defaults to 6558.
1001   socket\_path      |**Optional.** Only valid when `socket_type` is "unix". Specifies the path to the UNIX socket file. Defaults to RunDir + "/icinga2/cmd/livestatus".
1002   compat\_log\_path |**Optional.** Required for historical table queries. Requires `CompatLogger` feature enabled. Defaults to LocalStateDir + "/log/icinga2/compat"
1003
1004 > **Note**
1005 >
1006 > UNIX sockets are not supported on Windows.
1007
1008
1009 ## Notification <a id="objecttype-notification"></a>
1010
1011 Notification objects are used to specify how users should be notified in case
1012 of host and service state changes and other events.
1013
1014 > **Best Practice**
1015 >
1016 > Rather than creating a `Notification` object for a specific host or service it is
1017 > usually easier to just create a `Notification` template and use the `apply` keyword
1018 > to assign the notification to a number of hosts or services. Use the `to` keyword
1019 > to set the specific target type for `Host` or `Service`.
1020 > Check the [notifications](03-monitoring-basics.md#alert-notifications) chapter for detailed examples.
1021
1022 Example:
1023
1024     object Notification "localhost-ping-notification" {
1025       host_name = "localhost"
1026       service_name = "ping4"
1027
1028       command = "mail-notification"
1029
1030       users = [ "user1", "user2" ]
1031
1032       types = [ Problem, Recovery ]
1033     }
1034
1035 Configuration Attributes:
1036
1037   Name                      | Description
1038   --------------------------|----------------
1039   host_name                 | **Required.** The name of the host this notification belongs to.
1040   service_name              | **Optional.** The short name of the service this notification belongs to. If omitted, this notification object is treated as host notification.
1041   vars                      | **Optional.** A dictionary containing custom attributes that are specific to this notification object.
1042   users                     | **Optional.** A list of user names who should be notified.
1043   user_groups               | **Optional.** A list of user group names who should be notified.
1044   times                     | **Optional.** A dictionary containing `begin` and `end` attributes for the notification.
1045   command                   | **Required.** The name of the notification command which should be executed when the notification is triggered.
1046   interval                  | **Optional.** The notification interval (in seconds). This interval is used for active notifications. Defaults to 30 minutes. If set to 0, [re-notifications](03-monitoring-basics.md#disable-renotification) are disabled.
1047   period                    | **Optional.** The name of a time period which determines when this notification should be triggered. Not set by default.
1048   zone                      |**Optional.** The zone this object is a member of.
1049   types                     | **Optional.** A list of type filters when this notification should be triggered. By default everything is matched.
1050   states                    | **Optional.** A list of state filters when this notification should be triggered. By default everything is matched.
1051
1052 Available notification state filters for Service:
1053
1054     OK
1055     Warning
1056     Critical
1057     Unknown
1058
1059 Available notification state filters for Host:
1060
1061     Up
1062     Down
1063
1064 Available notification type filters:
1065
1066     DowntimeStart
1067     DowntimeEnd
1068     DowntimeRemoved
1069     Custom
1070     Acknowledgement
1071     Problem
1072     Recovery
1073     FlappingStart
1074     FlappingEnd
1075
1076 Runtime Attributes:
1077
1078   Name                      | Type          | Description
1079   --------------------------|---------------|-----------------
1080   last\_notification        | Number        | When the last notification was sent for this Notification object (as a UNIX timestamp).
1081   next\_notification         | Number        | When the next notification is going to be sent for this assuming the associated host/service is still in a non-OK state (as a UNIX timestamp).
1082   notification\_number      | Number        | The notification number
1083   last\_problem\_notification | Number      | When the last notification was sent for a problem (as a UNIX timestamp).
1084
1085
1086 ## NotificationCommand <a id="objecttype-notificationcommand"></a>
1087
1088 A notification command definition.
1089
1090 > **Note**
1091 >
1092 > Icinga 2 versions < 2.6.0 require the import of the [plugin-notification-command](10-icinga-template-library.md#itl-plugin-notification-command) template.
1093
1094 Example:
1095
1096      object NotificationCommand "mail-service-notification" {
1097        command = [ SysconfDir + "/icinga2/scripts/mail-service-notification.sh" ]
1098
1099        arguments += {
1100          "-4" = {
1101            required = true
1102            value = "$notification_address$"
1103          }
1104          "-6" = "$notification_address6$"
1105          "-b" = "$notification_author$"
1106          "-c" = "$notification_comment$"
1107          "-d" = {
1108            required = true
1109            value = "$notification_date$"
1110          }
1111          "-e" = {
1112            required = true
1113            value = "$notification_servicename$"
1114          }
1115          "-f" = {
1116            value = "$notification_from$"
1117            description = "Set from address. Requires GNU mailutils (Debian/Ubuntu) or mailx (RHEL/SUSE)"
1118          }
1119          "-i" = "$notification_icingaweb2url$"
1120          "-l" = {
1121            required = true
1122            value = "$notification_hostname$"
1123          }
1124          "-n" = {
1125            required = true
1126            value = "$notification_hostdisplayname$"
1127          }
1128          "-o" = {
1129            required = true
1130            value = "$notification_serviceoutput$"
1131          }
1132          "-r" = {
1133            required = true
1134            value = "$notification_useremail$"
1135          }
1136          "-s" = {
1137            required = true
1138            value = "$notification_servicestate$"
1139          }
1140          "-t" = {
1141            required = true
1142            value = "$notification_type$"
1143          }
1144          "-u" = {
1145            required = true
1146            value = "$notification_servicedisplayname$"
1147          }
1148          "-v" = "$notification_logtosyslog$"
1149        }
1150
1151        vars += {
1152          notification_address = "$address$"
1153          notification_address6 = "$address6$"
1154          notification_author = "$notification.author$"
1155          notification_comment = "$notification.comment$"
1156          notification_type = "$notification.type$"
1157          notification_date = "$icinga.long_date_time$"
1158          notification_hostname = "$host.name$"
1159          notification_hostdisplayname = "$host.display_name$"
1160          notification_servicename = "$service.name$"
1161          notification_serviceoutput = "$service.output$"
1162          notification_servicestate = "$service.state$"
1163          notification_useremail = "$user.email$"
1164          notification_servicedisplayname = "$service.display_name$"
1165        }
1166      }
1167
1168
1169 Configuration Attributes:
1170
1171   Name            |Description
1172   ----------------|----------------
1173   execute         |**Required.** The "execute" script method takes care of executing the notification. The default template "plugin-notification-command" which is imported into all CheckCommand objects takes care of this setting.
1174   command         |**Required.** The command. This can either be an array of individual command arguments. Alternatively a string can be specified in which case the shell interpreter (usually /bin/sh) takes care of parsing the command.
1175   env             |**Optional.** A dictionary of macros which should be exported as environment variables prior to executing the command.
1176   vars            |**Optional.** A dictionary containing custom attributes that are specific to this command.
1177   timeout         |**Optional.** The command timeout in seconds. Defaults to 60 seconds.
1178   arguments       |**Optional.** A dictionary of command arguments.
1179
1180 Command arguments can be used the same way as for [CheckCommand objects](09-object-types.md#objecttype-checkcommand-arguments).
1181
1182 More details on specific attributes can be found in [this chapter](03-monitoring-basics.md#notification-commands).
1183
1184 ## NotificationComponent <a id="objecttype-notificationcomponent"></a>
1185
1186 The notification component is responsible for sending notifications. There are no configurable options.
1187
1188 Example:
1189
1190     library "notification"
1191
1192     object NotificationComponent "notification" { }
1193
1194 Configuration Attributes:
1195
1196   Name            |Description
1197   ----------------|----------------
1198   enable\_ha      |**Optional.** Enable the high availability functionality. Only valid in a [cluster setup](06-distributed-monitoring.md#distributed-monitoring-high-availability-notifications). Disabling this currently only affects reminder notifications. Defaults to "true".
1199
1200 ## OpenTsdbWriter <a id="objecttype-opentsdbwriter"></a>
1201
1202 Writes check result metrics and performance data to [OpenTSDB](http://opentsdb.net).
1203
1204 Example:
1205
1206     library "perfdata"
1207
1208     object OpenTsdbWriter "opentsdb" {
1209       host = "127.0.0.1"
1210       port = 4242
1211     }
1212
1213 Configuration Attributes:
1214
1215   Name                  |Description
1216   ----------------------|----------------------
1217   host                  |**Optional.** OpenTSDB host address. Defaults to '127.0.0.1'.
1218   port                  |**Optional.** OpenTSDB port. Defaults to 4242.
1219
1220
1221 ## PerfdataWriter <a id="objecttype-perfdatawriter"></a>
1222
1223 Writes check result performance data to a defined path using macro
1224 pattern consisting of custom attributes and runtime macros.
1225
1226 Example:
1227
1228     library "perfdata"
1229
1230     object PerfdataWriter "pnp" {
1231       host_perfdata_path = "/var/spool/icinga2/perfdata/host-perfdata"
1232
1233       service_perfdata_path = "/var/spool/icinga2/perfdata/service-perfdata"
1234
1235       host_format_template = "DATATYPE::HOSTPERFDATA\tTIMET::$icinga.timet$\tHOSTNAME::$host.name$\tHOSTPERFDATA::$host.perfdata$\tHOSTCHECKCOMMAND::$host.check_command$\tHOSTSTATE::$host.state$\tHOSTSTATETYPE::$host.state_type$"
1236       service_format_template = "DATATYPE::SERVICEPERFDATA\tTIMET::$icinga.timet$\tHOSTNAME::$host.name$\tSERVICEDESC::$service.name$\tSERVICEPERFDATA::$service.perfdata$\tSERVICECHECKCOMMAND::$service.check_command$\tHOSTSTATE::$host.state$\tHOSTSTATETYPE::$host.state_type$\tSERVICESTATE::$service.state$\tSERVICESTATETYPE::$service.state_type$"
1237
1238       rotation_interval = 15s
1239     }
1240
1241 Configuration Attributes:
1242
1243   Name                    |Description
1244   ------------------------|----------------
1245   host_perfdata\_path     |**Optional.** Path to the host performance data file. Defaults to LocalStateDir + "/spool/icinga2/perfdata/host-perfdata".
1246   service_perfdata\_path  |**Optional.** Path to the service performance data file. Defaults to LocalStateDir + "/spool/icinga2/perfdata/service-perfdata".
1247   host_temp\_path         |**Optional.** Path to the temporary host file. Defaults to LocalStateDir + "/spool/icinga2/tmp/host-perfdata".
1248   service_temp\_path      |**Optional.** Path to the temporary service file. Defaults to LocalStateDir + "/spool/icinga2/tmp/service-perfdata".
1249   host_format\_template   |**Optional.** Host Format template for the performance data file. Defaults to a template that's suitable for use with PNP4Nagios.
1250   service_format\_template|**Optional.** Service Format template for the performance data file. Defaults to a template that's suitable for use with PNP4Nagios.
1251   rotation\_interval      |**Optional.** Rotation interval for the files specified in `{host,service}_perfdata_path`. Defaults to 30 seconds.
1252
1253 When rotating the performance data file the current UNIX timestamp is appended to the path specified
1254 in `host_perfdata_path` and `service_perfdata_path` to generate a unique filename.
1255
1256
1257 ## ScheduledDowntime <a id="objecttype-scheduleddowntime"></a>
1258
1259 ScheduledDowntime objects can be used to set up recurring downtimes for hosts/services.
1260
1261 > **Best Practice**
1262 >
1263 > Rather than creating a `ScheduledDowntime` object for a specific host or service it is usually easier
1264 > to just create a `ScheduledDowntime` template and use the `apply` keyword to assign the
1265 > scheduled downtime to a number of hosts or services. Use the `to` keyword to set the specific target
1266 > type for `Host` or `Service`.
1267 > Check the [recurring downtimes](08-advanced-topics.md#recurring-downtimes) example for details.
1268
1269 Example:
1270
1271     object ScheduledDowntime "some-downtime" {
1272       host_name = "localhost"
1273       service_name = "ping4"
1274
1275       author = "icingaadmin"
1276       comment = "Some comment"
1277
1278       fixed = false
1279       duration = 30m
1280
1281       ranges = {
1282         "sunday" = "02:00-03:00"
1283       }
1284     }
1285
1286 Configuration Attributes:
1287
1288   Name            |Description
1289   ----------------|----------------
1290   host_name       |**Required.** The name of the host this scheduled downtime belongs to.
1291   service_name    |**Optional.** The short name of the service this scheduled downtime belongs to. If omitted, this downtime object is treated as host downtime.
1292   author          |**Required.** The author of the downtime.
1293   comment         |**Required.** A comment for the downtime.
1294   fixed           |**Optional.** Whether this is a fixed downtime. Defaults to true.
1295   duration        |**Optional.** How long the downtime lasts. Only has an effect for flexible (non-fixed) downtimes.
1296   ranges          |**Required.** A dictionary containing information which days and durations apply to this timeperiod.
1297
1298 ScheduledDowntime objects have composite names, i.e. their names are based
1299 on the `host_name` and `service_name` attributes and the
1300 name you specified. This means you can define more than one object
1301 with the same (short) name as long as one of the `host_name` and
1302 `service_name` attributes has a different value.
1303
1304
1305 ## Service <a id="objecttype-service"></a>
1306
1307 Service objects describe network services and how they should be checked
1308 by Icinga 2.
1309
1310 > **Best Practice**
1311 >
1312 > Rather than creating a `Service` object for a specific host it is usually easier
1313 > to just create a `Service` template and use the `apply` keyword to assign the
1314 > service to a number of hosts.
1315 > Check the [apply](03-monitoring-basics.md#using-apply) chapter for details.
1316
1317 Example:
1318
1319     object Service "uptime" {
1320       host_name = "localhost"
1321
1322       display_name = "localhost Uptime"
1323
1324       check_command = "check_snmp"
1325
1326       vars.community = "public"
1327       vars.oid = "DISMAN-EVENT-MIB::sysUpTimeInstance"
1328
1329       check_interval = 60s
1330       retry_interval = 15s
1331
1332       groups = [ "all-services", "snmp" ]
1333     }
1334
1335 Configuration Attributes:
1336
1337   Name            |Description
1338   ----------------|----------------
1339   display_name    |**Optional.** A short description of the service.
1340   host_name       |**Required.** The host this service belongs to. There must be a `Host` object with that name.
1341   name            |**Required.** The service name. Must be unique on a per-host basis (Similar to the service_description attribute in Icinga 1.x).
1342   groups          |**Optional.** The service groups this service belongs to.
1343   vars            |**Optional.** A dictionary containing custom attributes that are specific to this service.
1344   check\_command  |**Required.** The name of the check command.
1345   max\_check\_attempts|**Optional.** The number of times a service is re-checked before changing into a hard state. Defaults to 3.
1346   check\_period   |**Optional.** The name of a time period which determines when this service should be checked. Not set by default.
1347   check\_timeout  |**Optional.** Check command timeout in seconds. Overrides the CheckCommand's `timeout` attribute.
1348   check\_interval |**Optional.** The check interval (in seconds). This interval is used for checks when the service is in a `HARD` state. Defaults to 5 minutes.
1349   retry\_interval |**Optional.** The retry interval (in seconds). This interval is used for checks when the service is in a `SOFT` state. Defaults to 1 minute.
1350   enable\_notifications|**Optional.** Whether notifications are enabled. Defaults to true.
1351   enable\_active\_checks|**Optional.** Whether active checks are enabled. Defaults to true.
1352   enable\_passive\_checks|**Optional.** Whether passive checks are enabled. Defaults to true.
1353   enable\_event\_handler|**Optional.** Enables event handlers for this host. Defaults to true.
1354   enable\_flapping|**Optional.** Whether flap detection is enabled. Defaults to false.
1355   enable\_perfdata|**Optional.** Whether performance data processing is enabled. Defaults to true.
1356   event\_command  |**Optional.** The name of an event command that should be executed every time the service's state changes or the service is in a `SOFT` state.
1357   flapping\_threshold|**Optional.** The flapping threshold in percent when a service is considered to be flapping.
1358   volatile        |**Optional.** The volatile setting enables always `HARD` state types if `NOT-OK` state changes occur.
1359   zone            |**Optional.** The zone this object is a member of.
1360   command\_endpoint|**Optional.** The endpoint where commands are executed on.
1361   notes           |**Optional.** Notes for the service.
1362   notes\_url      |**Optional.** Url for notes for the service (for example, in notification commands).
1363   action_url      |**Optional.** Url for actions for the service (for example, an external graphing tool).
1364   icon\_image     |**Optional.** Icon image for the service. Used by external interfaces only.
1365   icon\_image\_alt|**Optional.** Icon image description for the service. Used by external interface only.
1366
1367 Service objects have composite names, i.e. their names are based on the host_name attribute and the name you specified. This means
1368 you can define more than one object with the same (short) name as long as the `host_name` attribute has a different value.
1369
1370 The actual check interval might deviate slightly from the configured values due to the fact that Icinga tries
1371 to evenly distribute all checks over a certain period of time, i.e. to avoid load spikes.
1372
1373 Runtime Attributes:
1374
1375   Name                      | Type          | Description
1376   --------------------------|---------------|-----------------
1377   next\_check               | Number        | When the next check occurs (as a UNIX timestamp).
1378   last\_check               | Number        | When the last check occured (as a UNIX timestamp).
1379   check\_attempt            | Number        | The current check attempt number.
1380   state\_type               | Number        | The current state type (0 = SOFT, 1 = HARD).
1381   last\_state\_type         | Number        | The previous state type (0 = SOFT, 1 = HARD).
1382   last\_reachable           | Boolean       | Whether the service was reachable when the last check occurred.
1383   last\_check\_result       | CheckResult   | The current check result.
1384   last\_state\_change       | Number        | When the last state change occurred (as a UNIX timestamp).
1385   last\_hard\_state\_change | Number        | When the last hard state change occurred (as a UNIX timestamp).
1386   last\_in\_downtime        | Boolean       | Whether the service was in a downtime when the last check occurred.
1387   acknowledgement           | Number        | The acknowledgement type (0 = NONE, 1 = NORMAL, 2 = STICKY).
1388   acknowledgement_expiry    | Number        | When the acknowledgement expires (as a UNIX timestamp; 0 = no expiry).
1389   downtime\_depth           | Number        | Whether the service has one or more active downtimes.
1390   flapping_last_change      | Number        | When the last flapping change occurred (as a UNIX timestamp).
1391   flapping                  | Boolean       | Whether the host is flapping between states.
1392   state                     | Number        | The current state (0 = OK, 1 = WARNING, 2 = CRITICAL, 3 = UNKNOWN).
1393   last\_state               | Number        | The previous state (0 = OK, 1 = WARNING, 2 = CRITICAL, 3 = UNKNOWN).
1394   last\_hard\_state         | Number        | The last hard state (0 = OK, 1 = WARNING, 2 = CRITICAL, 3 = UNKNOWN).
1395   last_state_ok             | Number        | When the last OK state occurred (as a UNIX timestamp).
1396   last_state_warning        | Number        | When the last WARNING state occurred (as a UNIX timestamp).
1397   last_state_critical       | Number        | When the last CRITICAL state occurred (as a UNIX timestamp).
1398   last_state_unknown        | Number        | When the last UNKNOWN state occurred (as a UNIX timestamp).
1399
1400
1401 ## ServiceGroup <a id="objecttype-servicegroup"></a>
1402
1403 A group of services.
1404
1405 > **Best Practice**
1406 >
1407 > Assign service group members using the [group assign](17-language-reference.md#group-assign) rules.
1408
1409 Example:
1410
1411     object ServiceGroup "snmp" {
1412       display_name = "SNMP services"
1413     }
1414
1415 Configuration Attributes:
1416
1417   Name            |Description
1418   ----------------|----------------
1419   display_name    |**Optional.** A short description of the service group.
1420   groups          |**Optional.** An array of nested group names.
1421
1422
1423 ## StatusDataWriter <a id="objecttype-statusdatawriter"></a>
1424
1425 Periodically writes status data files which are used by the Classic UI and other third-party tools.
1426
1427 Example:
1428
1429     library "compat"
1430
1431     object StatusDataWriter "status" {
1432         status_path = "/var/cache/icinga2/status.dat"
1433         objects_path = "/var/cache/icinga2/objects.cache"
1434         update_interval = 30s
1435     }
1436
1437 Configuration Attributes:
1438
1439   Name            |Description
1440   ----------------|----------------
1441   status\_path    |**Optional.** Path to the status.dat file. Defaults to LocalStateDir + "/cache/icinga2/status.dat".
1442   objects\_path   |**Optional.** Path to the objects.cache file. Defaults to LocalStateDir + "/cache/icinga2/objects.cache".
1443   update\_interval|**Optional.** The interval in which the status files are updated. Defaults to 15 seconds.
1444
1445
1446 ## SyslogLogger <a id="objecttype-sysloglogger"></a>
1447
1448 Specifies Icinga 2 logging to syslog.
1449
1450 Example:
1451
1452     object SyslogLogger "crit-syslog" {
1453       severity = "critical"
1454     }
1455
1456 Configuration Attributes:
1457
1458   Name            |Description
1459   ----------------|----------------
1460   severity        |**Optional.** The minimum severity for this log. Can be "debug", "notice", "information", "warning" or "critical". Defaults to "warning".
1461
1462
1463 ## TimePeriod <a id="objecttype-timeperiod"></a>
1464
1465 Time periods can be used to specify when hosts/services should be checked or to limit
1466 when notifications should be sent out.
1467
1468 Examples:
1469
1470     object TimePeriod "nonworkhours" {
1471       import "legacy-timeperiod"
1472
1473       display_name = "Icinga 2 TimePeriod for non working hours"
1474
1475       ranges = {
1476         monday = "00:00-8:00,17:00-24:00"
1477         tuesday = "00:00-8:00,17:00-24:00"
1478         wednesday = "00:00-8:00,17:00-24:00"
1479         thursday = "00:00-8:00,17:00-24:00"
1480         friday = "00:00-8:00,16:00-24:00"
1481         saturday = "00:00-24:00"
1482         sunday = "00:00-24:00"
1483       }
1484     }
1485
1486     object TimePeriod "exampledays" {
1487         import "legacy-timeperiod"
1488
1489         display_name = "Icinga 2 TimePeriod for random example days"
1490
1491         ranges = {
1492             //We still believe in Santa, no peeking!
1493             //Applies every 25th of December every year
1494             "december 25" = "00:00-24:00"
1495
1496             //Any point in time can be specified,
1497             //but you still have to use a range
1498             "2038-01-19" = "03:13-03:15"
1499
1500             //Evey 3rd day from the second monday of February
1501             //to 8th of November
1502             "monday 2 february - november 8 / 3" = "00:00-24:00"
1503         }
1504     }
1505
1506
1507 Additional examples can be found [here](08-advanced-topics.md#timeperiods).
1508
1509 Configuration Attributes:
1510
1511   Name            |Description
1512   ----------------|----------------
1513   display_name    |**Optional.** A short description of the time period.
1514   update          |**Required.** The "update" script method takes care of updating the internal representation of the time period. In virtually all cases you should import the "legacy-timeperiod" template to take care of this setting.
1515   ranges          |**Required.** A dictionary containing information which days and durations apply to this timeperiod.
1516   prefer_includes |**Optional.** Boolean whether to prefer timeperiods `includes` or `excludes`. Default to true.
1517   excludes        |**Optional.** An array of timeperiods, which should exclude from your timerange.
1518   includes        |**Optional.** An array of timeperiods, which should include into your timerange
1519
1520 The `/etc/icinga2/conf.d/timeperiods.conf` file is usually used to define
1521 timeperiods including this one.
1522
1523 Runtime Attributes:
1524
1525   Name                      | Type          | Description
1526   --------------------------|---------------|-----------------
1527   is\_inside                | Boolean       | Whether we're currently inside this timeperiod.
1528
1529
1530 ## User <a id="objecttype-user"></a>
1531
1532 A user.
1533
1534 Example:
1535
1536     object User "icingaadmin" {
1537       display_name = "Icinga 2 Admin"
1538       groups = [ "icingaadmins" ]
1539       email = "icinga@localhost"
1540       pager = "icingaadmin@localhost.localdomain"
1541
1542       period = "24x7"
1543
1544       states = [ OK, Warning, Critical, Unknown ]
1545       types = [ Problem, Recovery ]
1546
1547       vars.additional_notes = "This is the Icinga 2 Admin account."
1548     }
1549
1550 Available notification state filters:
1551
1552     OK
1553     Warning
1554     Critical
1555     Unknown
1556     Up
1557     Down
1558
1559 Available notification type filters:
1560
1561     DowntimeStart
1562     DowntimeEnd
1563     DowntimeRemoved
1564     Custom
1565     Acknowledgement
1566     Problem
1567     Recovery
1568     FlappingStart
1569     FlappingEnd
1570
1571 Configuration Attributes:
1572
1573   Name            |Description
1574   ----------------|----------------
1575   display_name    |**Optional.** A short description of the user.
1576   email           |**Optional.** An email string for this user. Useful for notification commands.
1577   pager           |**Optional.** A pager string for this user. Useful for notification commands.
1578   vars            |**Optional.** A dictionary containing custom attributes that are specific to this user.
1579   groups          |**Optional.** An array of group names.
1580   enable_notifications|**Optional.** Whether notifications are enabled for this user.
1581   period          |**Optional.** The name of a time period which determines when a notification for this user should be triggered. Not set by default.
1582   types           |**Optional.** A set of type filters when this notification should be triggered. By default everything is matched.
1583   states          |**Optional.** A set of state filters when this notification should be triggered. By default everything is matched.
1584
1585 Runtime Attributes:
1586
1587   Name                      | Type          | Description
1588   --------------------------|---------------|-----------------
1589   last\_notification        | Number        | When the last notification was sent for this user (as a UNIX timestamp).
1590
1591 ## UserGroup <a id="objecttype-usergroup"></a>
1592
1593 A user group.
1594
1595 > **Best Practice**
1596 >
1597 > Assign user group members using the [group assign](17-language-reference.md#group-assign) rules.
1598
1599 Example:
1600
1601     object UserGroup "icingaadmins" {
1602         display_name = "Icinga 2 Admin Group"
1603     }
1604
1605 Configuration Attributes:
1606
1607   Name            |Description
1608   ----------------|----------------
1609   display_name    |**Optional.** A short description of the user group.
1610   groups          |**Optional.** An array of nested group names.
1611
1612
1613 ## Zone <a id="objecttype-zone"></a>
1614
1615 Zone objects are used to specify which Icinga 2 instances are located in a zone.
1616
1617 Example:
1618
1619     object Zone "config-ha-master" {
1620       endpoints = [ "icinga2a", "icinga2b" ]
1621
1622     }
1623
1624     object Zone "check-satellite" {
1625       endpoints = [ "icinga2c" ]
1626       parent = "config-ha-master"
1627     }
1628
1629 Configuration Attributes:
1630
1631   Name            |Description
1632   ----------------|----------------
1633   endpoints       |**Optional.** Array of endpoint names located in this zone.
1634   parent          |**Optional.** The name of the parent zone.
1635   global          |**Optional.** Whether configuration files for this zone should be synced to all endpoints. Defaults to false.
1636
1637 Zone objects cannot currently be created with the API.
1638
1639 # Value Types <a id="value-types"></a>
1640
1641 In addition to [configuration objects](09-object-types.md#object-types) Icinga 2 also uses a few other types to represent its internal state. The following types are exposed via the [API](12-icinga2-api.md#icinga2-api).
1642
1643 ## CheckResult <a id="value-types-checkresult"></a>
1644
1645   Name                      | Type          | Description
1646   --------------------------|---------------|-----------------
1647   exit_status               | Number        | The exit status returned by the check execution.
1648   output                    | String        | The check output.
1649   performance_data          | Array         | Array of [performance data values](09-object-types.md#value-types-perfdatavalue).
1650   check_source              | String        | Name of the node executing the check.
1651   state                     | Number        | The current state (0 = OK, 1 = WARNING, 2 = CRITICAL, 3 = UNKNOWN).
1652   command                   | Value         | Array of command with shell-escaped arguments or command line string.
1653   execution_start           | Number        | Check execution start time (as a UNIX timestamp).
1654   execution_end             | Number        | Check execution end time (as a UNIX timestamp).
1655   schedule_start            | Number        | Scheduled check execution start time (as a UNIX timestamp).
1656   schedule_end              | Number        | Scheduled check execution end time (as a UNIX timestamp).
1657   active                    | Boolean       | Whether the result is from an active or passive check.
1658   vars_before               | Dictionary    | Internal attribute used for calculations.
1659   vars_after                | Dictionary    | Internal attribute used for calculations.
1660
1661 ## PerfdataValue <a id="value-types-perfdatavalue"></a>
1662
1663 Icinga 2 parses performance data strings returned by check plugins and makes the information available to external interfaces (e.g. [GraphiteWriter](09-object-types.md#objecttype-graphitewriter) or the [Icinga 2 API](12-icinga2-api.md#icinga2-api)).
1664
1665   Name                      | Type          | Description
1666   --------------------------|---------------|-----------------
1667   label                     | String        | Performance data label.
1668   value                     | Number        | Normalized performance data value without unit.
1669   counter                   | Boolean       | Enabled if the original value contains `c` as unit. Defaults to `false`.
1670   unit                      | String        | Unit of measurement (`seconds`, `bytes`. `percent`) according to the [plugin API](05-service-monitoring.md#service-monitoring-plugin-api).
1671   crit                      | Value         | Critical threshold value.
1672   warn                      | Value         | Warning threshold value.
1673   min                       | Value         | Minimum value returned by the check.
1674   max                       | Value         | Maximum value returned by the check.
1675
1676