From 75a41741c58301e38a474e9f0df9bf76e475c39e Mon Sep 17 00:00:00 2001 From: Michael Friedrich Date: Fri, 18 Aug 2017 17:02:43 +0200 Subject: [PATCH] Docs: Update freshness checks; add chapter for external check results This also adds a nice example for freshness checks with unknown runtime details. --- doc/08-advanced-topics.md | 60 ++++++++++++++++-- doc/18-library-reference.md | 4 +- ...2_external_checks_freshness_icingaweb2.png | Bin 0 -> 30046 bytes 3 files changed, 57 insertions(+), 7 deletions(-) create mode 100644 doc/images/advanced-topics/icinga2_external_checks_freshness_icingaweb2.png diff --git a/doc/08-advanced-topics.md b/doc/08-advanced-topics.md index 3d559d91e..25e66034f 100644 --- a/doc/08-advanced-topics.md +++ b/doc/08-advanced-topics.md @@ -343,19 +343,69 @@ and adds the excluded time period names as an array. } } +### External Check Results + +Hosts or services which do not actively execute a check plugin to receive +the state and output are called "passive checks" or "external check results". +In this scenario an external client or script is sending in check results. + +You can feed check results into Icinga 2 with the following transport methods: + +* [process-check-result action](12-icinga2-api.md#icinga2-api-actions-process-check-result) available with the [REST API](12-icinga2-api.md#icinga2-api) (remote and local) +* External command sent via command pipe (local only) + +Each time a new check result is received, the next expected check time +is updated. This means that if there are no check result received from +the external source, Icinga 2 will execute [freshness checks](08-advanced-topics.md#check-result-freshness). + +> **Note** +> +> The REST API action allows to specify the `check_source` attribute +> which helps identifying the external sender. This is also visible +> in Icinga Web 2 and the REST API queries. + ## Check Result Freshness In Icinga 2 active check freshness is enabled by default. It is determined by the `check_interval` attribute and no incoming check results in that period of time. - threshold = last check execution time + check interval +The threshold is calculated based on the last check execution time for actively executed checks: -Passive check freshness is calculated from the `check_interval` attribute if set. + (last check execution time + check interval) > current time - threshold = last check result time + check interval +If this host/service receives check results from an [external source](08-advanced-topics.md#external-check-results), +the threshold is based on the last time a check result was received: -If the freshness checks are invalid, a new check is executed defined by the -`check_command` attribute. + (last check result time + check interval) > current time + +If the freshness checks fail, Icinga 2 will execute the defined check command. + +Best practice is to define a [dummy](10-icinga-template-library.md#plugin-check-command-dummy) `check_command` which gets +executed when freshness checks fail. + +``` +apply Service "external-check" { + check_command = "dummy" + check_interval = 1m + + /* Set the state to UNKNOWN (3) if freshness checks fail. */ + vars.dummy_state = 3 + + /* Use a runtime function to retrieve the last check time and more details. */ + vars.dummy_text = {{ + var service = get_service(macro("$host.name$"), macro("$service.name$")) + var lastCheck = DateTime(service.last_check).to_string() + + return "No check results received. Last result time: " + lastCheck + }} + + assign where "external" in host.vars.services +} +``` + +Example output in Icinga Web 2: + +![Icinga 2 Freshness Checks](images/advanced-topics/icinga2_external_checks_freshness_icingaweb2.png) ## Check Flapping diff --git a/doc/18-library-reference.md b/doc/18-library-reference.md index a819bbc22..62e212407 100644 --- a/doc/18-library-reference.md +++ b/doc/18-library-reference.md @@ -17,7 +17,7 @@ Signature: function regex(pattern, value, mode) Returns true if the regular expression `pattern` matches the `value`, false otherwise. -The `value` can be of the type [String](#string-type) or [Array](#array-type) (which +The `value` can be of the type [String](18-library-reference.md#string-type) or [Array](18-library-reference.md#array-type) (which contains string elements). The `mode` argument is optional and can be either `MatchAll` (in which case all elements @@ -56,7 +56,7 @@ Signature: function match(pattern, text, mode) Returns true if the wildcard (`?*`) `pattern` matches the `value`, false otherwise. -The `value` can be of the type [String](#string-type) or [Array](#array-type) (which +The `value` can be of the type [String](18-library-reference.md#string-type) or [Array](18-library-reference.md#array-type) (which contains string elements). The `mode` argument is optional and can be either `MatchAll` (in which case all elements diff --git a/doc/images/advanced-topics/icinga2_external_checks_freshness_icingaweb2.png b/doc/images/advanced-topics/icinga2_external_checks_freshness_icingaweb2.png new file mode 100644 index 0000000000000000000000000000000000000000..b46db68d6e118602586078018a7e52db05818fc9 GIT binary patch literal 30046 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�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 literal 0 HcmV?d00001