]> granicus.if.org Git - icinga2/commitdiff
Documentation: Update commands and external commands.
authorMichael Friedrich <michael.friedrich@netways.de>
Thu, 17 Oct 2013 16:12:52 +0000 (18:12 +0200)
committerMichael Friedrich <michael.friedrich@netways.de>
Thu, 17 Oct 2013 16:13:33 +0000 (18:13 +0200)
doc/3.02-commands.md
doc/3.04-notifications.md
doc/3.08-external-commands.md
doc/4.3-object-types.md
tools/scripts/process_check_result [moved from test/externalcommands/process_check_result with 100% similarity]

index 6d6a0d8d0562055c7b2b03b5a899b2ab6b89dfa8..36a7ea5546de7b6442c3bad10c1c5cd8e4ce2b16 100644 (file)
@@ -1,5 +1,167 @@
 ## Commands
 
-Icinga 2 uses command objects to specify how checks should be performed.
+Icinga 2 uses three different command object types to specify how
+checks should be performed, notifications should be sent and
+events should be handled.
+
+> **Tip**
+>
+> Define the `$plugindir$` macro in your global `IcingaMacros` variable
+> (located in `/etc/icinga2/conf.d/macros.conf` by default) and use
+> it in all your command object definitions.
+> Put your plugins and scripts into the directory defined by the `$plugindir$` macro
+> and make sure they are executable by the Icinga 2 user.
+
+### Check Commands
+
+`CheckCommand` objects define the command line how a check is called.
+
+> **Note**
+>
+> `CheckCommand` objects require the ITL template `plugin-check-command`
+> to support native plugin based check methods.
+
+Unless you have done so already, download your check plugin and put it
+into the `$plugindir$` directory. The following example uses the
+`check_disk` plugin shipped with the Nagios Plugins package.
+
+The plugin path and all command arguments are made a list of
+double-quoted string arguments for proper shell escaping.
+
+Call the `check_disk` plugin with the `--help` parameter to see
+all available options. Our example defines warning (`-w`) and
+critical (`-c`) thresholds for the disk usage. Without any
+partition defined (`-p`) it will check all local partitions.
+
+Define the default check command macros `wfree` and `cfree` (freely
+definable naming schema) and their default threshold values. You can
+then use these macros in the command line.
+
+> **Note**
+>
+> The default macros can be overridden by the macros defined in
+> the service using the check command `disk`. The macros can also
+> be inherited from a parent template using additive inheritance (`+=`).
+
+    object CheckCommand "disk" inherits "plugin-check-command" {
+      command = [
+        "$plugindir$/check_disk",
+        "-w", "$wfree$%",
+        "-c", "$cfree$%"
+      ],
+
+      macros += {
+        wfree = 20,
+        cfree = 10,
+      }
+    }
+
+The host `localhost` with the service `disk` checks all disks with modified
+macros (warning thresholds at `10%`, critical thresholds at `5%` free disk
+space).
+
+    object Host "localhost" inherits "generic-host" {
+
+      services["disk"] = {
+        templates = [ "generic-service" ],
+
+        check_command = "disk",
+        macros += {
+          wfree = 10,
+          cfree = 5
+        }
+      },
+
+      macros = {
+        address = "127.0.0.1",
+        address6 = "::1",
+      },
+    }
+    
+
+### Notification Commands
+
+`NotificationCommand` objects define how notifications are sent to external
+interfaces (E-Mail, XMPP, IRC, Twitter, etc).
+
+> **Note**
+>
+> `NotificationCommand` objects require the ITL template `plugin-notification-command`
+> to support native plugin based checks.
+
+Below is an example using runtime macros from Icinga 2 (such as `$SERVICEOUTPUT$` for
+the current check output) sending an email to the user(s) associated with the
+notification itself (`email` macro attribute provided as `$USERMACRO$`).
+
+Please note the notation for better readability using multiple lines enclosed with
+`{{{ ... }}}`. You can use a single line as argument item as well. If you require
+default macro definitions, you can add a macro dictionary as shown for the
+`CheckCommand` object.
+
+    object NotificationCommand "mail-service-notification" inherits "plugin-notification-command" {
+      command = [
+        "/usr/bin/printf",
+        "\"%b\"",
+        {{{\"***** Icinga  *****
+    
+        Notification Type: $NOTIFICATIONTYPE$
+    
+        Service: $SERVICEDESC$
+        Host: $HOSTALIAS$
+        Address: $HOSTADDRESS$
+        State: $SERVICESTATE$
+    
+        Date/Time: $LONGDATETIME$
+    
+        Additional Info: $SERVICEOUTPUT$
+    
+        Comment: [$NOTIFICATIONAUTHORNAME$] $NOTIFICATIONCOMMENT$\"}}},
+        "-s",
+        "\"$NOTIFICATIONTYPE$ - $HOSTDISPLAYNAME$ - $SERVICEDISPLAYNAME$ is $SERVICESTATE$\"",
+        "$USEREMAIL$"
+      ]
+    }
+
+
+
+### Event Commands
+
+Unlike notifications event commands are called on every service state change
+if defined. Therefore the `EventCommand` object should define a command line
+evaluating the current service state and other service runtime attributes
+available through runtime macros. Runtime macros such as `$SERVICESTATETYPE$`
+and `$SERVICESTATE$` will be processed by Icinga 2 helping on fine-granular
+events being triggered.
+
+Common use case scenarios are a failing HTTP check requiring an immediate
+restart via event command, or a an application is locked and requires
+a restart on detection.
+
+> **Note**
+>
+> `EventCommand` objects require the ITL template `plugin-event-command`
+> to support native plugin based checks.
+
+The example below is fictive and not necessarily meant for production use.
+When the event command is triggered on a service state change, it will
+send a check result using the `process_check_result` script forcibly
+changing the service state back to `OK` (`-r 0`) providing some debug
+information in the check output (`-o`).
+
+    object EventCommand "plugin-event-process-check-result" inherits "plugin-event-command" {
+      command = [ 
+        "$plugindir$/process_check_result",
+        "-H",
+        "$HOSTNAME$",
+        "-S",
+        "$SERVICEDESC$",
+        "-c",
+        "/var/run/icinga2/cmd/icinga2.cmd",
+        "-r",
+        "0",
+        "-o",
+        "Event Handler triggered in state '$SERVICESTATE$' with output '$SERVICEOUTPUT$'."
+      ]       
+    }
+    
 
-TODO
index 7fb98b5079bb0c3e1f82f19c3f00eeef44eaa683..d8ccae51735cb1137781adc92474a68ad62513f9 100644 (file)
@@ -2,6 +2,11 @@
 
 TODO
 
+Notifications on alerts are an integral part of your Icinga 2 monitoring application.
+You should choose which information you (and your notified users) are interested in
+case of emergency, and also which information does not provide any value to you and
+your environment.
+
 ### Notification Escalations
 
 TODO
index e1ca5e1d5a59c88ac43c3a39c4b3ca5516624548..555dbabbbfe438a666a261bf72ef06891dcabadb 100644 (file)
@@ -1,3 +1,41 @@
 ## External Commands
 
-TODO
+Icinga 2 provides an external command pipe for processing commands
+triggering specific actions (for example rescheduling a service check
+through the web interface).
+
+In order to enable the `ExternalCommandListener` configuration use the
+following command and restart Icinga 2 afterwards:
+
+    # i2enfeature command
+    
+Icinga 2 creates the command pipe file as `/var/run/icinga2/cmd/icinga2.cmd`
+using the default configuration.
+
+Web interfaces and other Icinga addons are able to send commands to
+Icinga 2 through the external command pipe, for example for rescheduling
+a forced service check:
+
+    # /bin/echo "[`date +%s`] SCHEDULE_FORCED_SVC_CHECK;localhost;ping4;`date +%s`" >> /var/run/icinga2/cmd/icinga2.cmd
+    
+    # tail -f /var/log/messages
+    
+    Oct 17 15:01:25 nbmif icinga2: Executing external command: [1382014885] SCHEDULE_FORCED_SVC_CHECK;localhost;ping4;1382014885
+    Oct 17 15:01:25 nbmif icinga2: Rescheduling next check for service 'ping4'
+    
+> **Note**
+>
+> The command pipe file is owned by the group `icingacmd` with read/write
+> permissions. Add your webserver's user to the group `icingacmd` to
+> enable sending commands to Icinga 2 through your web interface.
+
+    # usermod -G -a icingacmd www-data
+
+    
+    
+### External Command List
+
+A list of currently supported external commands can be found on the
+[Icinga Wiki](https://wiki.icinga.org/display/icinga2/External+Commands).
+Detailed information on the commands and their required parameters can be found
+on the [Icinga 1.x documentation](http://docs.icinga.org/latest/en/extcommands2.html).
index 32c4a163351483354816e4302c070dea3c344a18..333bbb4bc9545eca4afd3400978c98d8fbcde081 100644 (file)
@@ -183,7 +183,29 @@ A user.
 
 Example:
 
-    TODO
+    object User "icingaadmin" {
+      display_name = "Icinga 2 Admin",
+      groups = [ "icingaadmins" ],
+
+      enable_notifications = 1,
+      notification_period = "24x7",
+
+      notification_state_filter = (StateFilterWarning |
+                                   StateFilterCritical |
+                                   StateFilterUnknown),
+      notification_type_filter = (NotificationFilterProblem |
+                                  NotificationFilterRecovery),
+      macros = {
+        "name" = "Icinga 2 Admin",
+        "email" = "icinga@localhost",
+        "pager" = "icingaadmin@localhost.localdomain"
+      },
+
+      custom = {
+        notes = "This is the Icinga 2 Admin account.",
+      }
+    }
+
 
 Attributes:
 
@@ -191,6 +213,7 @@ Attributes:
   ----------------|----------------
   display_name    |**Optional.** A short description of the user.
   macros          |**Optional.** A dictionary containing macros that are specific to this user.
+  custom          |**Optional.** A dictionary containing custom attributes that are specific to this user.
   groups          |TODO
   enable_notifications|TODO
   notification_period|TODO
@@ -203,8 +226,8 @@ A user group.
 
 Example:
 
-    object UserGroup "noc-staff" {
-        display_name = "NOC Staff"
+    object UserGroup "icingaadmins" {
+        display_name = "Icinga 2 Admin Group"
     }
 
 Attributes: