mirror of https://github.com/Icinga/icinga2.git
Add converted documentation files.
This commit is contained in:
parent
d594d0d67e
commit
3a765b1636
|
@ -0,0 +1,131 @@
|
|||
Purpose
|
||||
=======
|
||||
|
||||
Documentation on the compatibility and changes introduced with Icinga 2.
|
||||
|
||||
Introduction
|
||||
============
|
||||
|
||||
Unlike Icinga 1.x, all used components (not only those for
|
||||
compatibility) run asynchronous and use queues, if required. That way
|
||||
Icinga 2 does not get blocked by any event, action or execution.
|
||||
|
||||
Configuration
|
||||
=============
|
||||
|
||||
> **Note**
|
||||
>
|
||||
> If you are upgrading from Icinga 1.x (or Nagios 3.x+) please note that
|
||||
> Icinga 2 introduces a new configuration format.
|
||||
|
||||
Details on the configuration can be found in chapter
|
||||
[Configuration](:icinga2-config.html)
|
||||
|
||||
Icinga 2 ships a config conversion script which will help you migrating
|
||||
the existing configuration into the new format. Please look into the
|
||||
*tools/configconvert* directory and follow the *README* instructions.
|
||||
|
||||
> **Tip**
|
||||
>
|
||||
> If you kept planning to clean up your existing configuration, it may
|
||||
> be a good shot to start fresh with a new configuration strategy based
|
||||
> on the Icinga 2 configuration logic.
|
||||
|
||||
Check Plugins
|
||||
=============
|
||||
|
||||
All native check plugins can be used with Icinga 2. The configuration of
|
||||
check commands is changed due to the new configuration format.
|
||||
|
||||
Classic status and log files
|
||||
============================
|
||||
|
||||
Icinga 2 will write status.dat and objects.cache in a given interval
|
||||
like known from Icinga 1.x - including the logs and their archives in
|
||||
the old format and naming syntax. That way you can point any existing
|
||||
Classic UI installation to the new locations (or any other addon/plugin
|
||||
using them).
|
||||
|
||||
External Commands
|
||||
=================
|
||||
|
||||
Like known from Icinga 1.x, Icinga 2 also provides an external command
|
||||
pipe allowing your scripts and guis to send commands to the core
|
||||
triggering various actions.
|
||||
|
||||
Some commands are not supported though as their triggered functionality
|
||||
is not available in Icinga 2 anymore.
|
||||
|
||||
For a detailed list, please check:
|
||||
[https://wiki.icinga.org/display/icinga2/External+Commands](https://wiki.icinga.org/display/icinga2/External+Commands)
|
||||
|
||||
Performance Data
|
||||
================
|
||||
|
||||
The Icinga 1.x Plugin API defines the performance data format. Icinga 2
|
||||
parses the check output accordingly and writes performance data files
|
||||
based on template macros. File rotation interval can be defined as well.
|
||||
|
||||
Unlike Icinga 1.x you can define multiple performance data writers for
|
||||
all your graphing addons such as PNP, inGraph or graphite.
|
||||
|
||||
IDO DB
|
||||
======
|
||||
|
||||
Icinga 1.x uses an addon called *IDOUtils* to store core configuration,
|
||||
status and historical information in a database schema. Icinga Web and
|
||||
Reporting are using that database as their chosen backend.
|
||||
|
||||
Icinga 2 is compatible to the IDO db schema but the the underlaying
|
||||
design of inserting, updating and deleting data is different -
|
||||
asynchronous queueing, database transactions and optimized queries for
|
||||
performance.
|
||||
|
||||
Furthermore there is no seperated daemon to receive the data through a
|
||||
socket. Instead the IDO component queues the data and writes directly
|
||||
into the database using the native database driver library (e.g.
|
||||
libmysqlclient). Unlike Icinga 1.x libdbi as db abstraction layer is not
|
||||
used anymore.
|
||||
|
||||
Livestatus
|
||||
==========
|
||||
|
||||
Icinga 2 supports the livestatus api while using Icinga 1.x an addon
|
||||
named *mk\_livestatus* was required.
|
||||
|
||||
Next to the GET functionality for retrieving configuration, status and
|
||||
historical data, Icinga 2 livestatus also supports the COMMANDS
|
||||
functionality.
|
||||
|
||||
> **Tip**
|
||||
>
|
||||
> Icinga 2 supports tcp sockets natively while the Icinga 1.x addon only
|
||||
> provides unix socket support.
|
||||
|
||||
Checkresult Reaper
|
||||
==================
|
||||
|
||||
Unlike Icinga 1.x Icinga 2 is a multithreaded application and processes
|
||||
check results in memory. The old checkresult reaper reading files from
|
||||
disk again is obviously not required anymore for native checks.
|
||||
|
||||
Some popular addons have been injecting their checkresults into the
|
||||
Icinga 1.x checkresult spool directory bypassing the external command
|
||||
pipe and PROCESS\_SERVICE\_CHECK\_RESULT mainly for performance reasons.
|
||||
|
||||
In order to support that functionality as well, Icinga 2 got its
|
||||
optional checkresult reaper.
|
||||
|
||||
Changes
|
||||
=======
|
||||
|
||||
This is a collection of known changes in behaviour, configuration and
|
||||
outputs.
|
||||
|
||||
> **Note**
|
||||
>
|
||||
> May be incomplete, and requires updates in the future.
|
||||
|
||||
TODO
|
||||
|
||||
/\* vim: set syntax=asciidoc filetype=asciidoc: \*/
|
|
@ -0,0 +1,419 @@
|
|||
Configuration Syntax
|
||||
====================
|
||||
|
||||
Object Definition
|
||||
-----------------
|
||||
|
||||
Icinga 2 features an object-based configuration format. In order to
|
||||
define objects the *object* keyword is used:
|
||||
|
||||
object Host "host1.example.org" {
|
||||
display_name = "host1",
|
||||
|
||||
check_interval = 30,
|
||||
retry_interval = 15,
|
||||
|
||||
macros = {
|
||||
address = "192.168.0.1"
|
||||
}
|
||||
}
|
||||
|
||||
> **Note**
|
||||
>
|
||||
> The Icinga 2 configuration format is agnostic to whitespaces and
|
||||
> new-lines.
|
||||
|
||||
> **Note**
|
||||
>
|
||||
> Colons (:) are not permitted in object names.
|
||||
|
||||
Each object is uniquely identified by its type (*Host*) and name
|
||||
(*host1.example.org*). Objects can contain a comma-separated list of
|
||||
property declarations. The following data types are available for
|
||||
property values:
|
||||
|
||||
### Numeric Literals
|
||||
|
||||
A floating-point number.
|
||||
|
||||
Example:
|
||||
|
||||
-27.3
|
||||
|
||||
### Duration Literal
|
||||
|
||||
Similar to floating-point numbers except for that fact that they support
|
||||
suffixes to help with specifying time durations.
|
||||
|
||||
Example:
|
||||
|
||||
2.5m
|
||||
|
||||
Supported suffixes include ms (milliseconds), s (seconds), m (minutes)
|
||||
and h (hours).
|
||||
|
||||
### String Literals
|
||||
|
||||
A string.
|
||||
|
||||
Example:
|
||||
|
||||
"Hello World!"
|
||||
|
||||
Certain characters need to be escaped. The following escape sequences
|
||||
are supported:
|
||||
|
||||
------------------------------------ ------------------------------------
|
||||
Character Escape sequence
|
||||
" \\"
|
||||
\<TAB\> \\t
|
||||
\<CARRIAGE-RETURN\> \\r
|
||||
\<LINE-FEED\> \\n
|
||||
\<BEL\> \\b
|
||||
\<FORM-FEED\> \\f
|
||||
------------------------------------ ------------------------------------
|
||||
|
||||
In addition to these pre-defined escape sequences you can specify
|
||||
arbitrary ASCII characters using the backslash character (\\) followed
|
||||
by an ASCII character in octal encoding.
|
||||
|
||||
### Multiline String Literals
|
||||
|
||||
Strings spanning multiple lines can be specified by enclosing them in
|
||||
{{{ and }}}.
|
||||
|
||||
Example.
|
||||
|
||||
{{{This
|
||||
is
|
||||
a multi-line
|
||||
string.}}}
|
||||
|
||||
### Boolean Literals
|
||||
|
||||
The keywords *true* and *false* are equivalent to 1 and 0 respectively.
|
||||
|
||||
### Null Value
|
||||
|
||||
The *null* keyword can be used to specify an empty value.
|
||||
|
||||
### Dictionary
|
||||
|
||||
An unordered list of key-value pairs. Keys must be unique and are
|
||||
compared in a case-insensitive manner.
|
||||
|
||||
Individual key-value pairs must be separated from each other with a
|
||||
comma. The comma after the last key-value pair is optional.
|
||||
|
||||
Example:
|
||||
|
||||
{
|
||||
address = "192.168.0.1",
|
||||
port = 443
|
||||
}
|
||||
|
||||
> **Note**
|
||||
>
|
||||
> Identifiers may not contain certain characters (e.g. space) or start
|
||||
> with certain characters (e.g. digits). If you want to use a dictionary
|
||||
> key that is not a valid identifier you can put the key in double
|
||||
> quotes.
|
||||
|
||||
> **Note**
|
||||
>
|
||||
> Setting a dictionary key to null causes the key to be removed from the
|
||||
> dictionary.
|
||||
|
||||
### Array
|
||||
|
||||
An ordered list of values.
|
||||
|
||||
Individual array elements must be separated from each other with a
|
||||
comma. The comma after the last element is optional.
|
||||
|
||||
Example:
|
||||
|
||||
[
|
||||
"hello",
|
||||
"world",
|
||||
42,
|
||||
[ "a", "nested", "array" ]
|
||||
]
|
||||
|
||||
> **Note**
|
||||
>
|
||||
> An array may simultaneously contain values of different types, e.g.
|
||||
> strings and numbers.
|
||||
|
||||
Operators
|
||||
---------
|
||||
|
||||
In addition to the *=* operator shown above a number of other operators
|
||||
to manipulate configuration objects are supported. Here’s a list of all
|
||||
available operators:
|
||||
|
||||
### Operator *=*
|
||||
|
||||
Sets a dictionary element to the specified value.
|
||||
|
||||
Example:
|
||||
|
||||
{
|
||||
a = 5,
|
||||
a = 7
|
||||
}
|
||||
|
||||
In this example a has the value 7 after both instructions are executed.
|
||||
|
||||
### Operator *+=*
|
||||
|
||||
Modifies a dictionary or array by adding new elements to it.
|
||||
|
||||
Example:
|
||||
|
||||
{
|
||||
a = [ "hello" ],
|
||||
a += [ "world" ]
|
||||
}
|
||||
|
||||
In this example a contains both *"hello"* and *"world"*. This currently
|
||||
only works for dictionaries and arrays. Support for numbers might be
|
||||
added later on.
|
||||
|
||||
### Operator *-=*
|
||||
|
||||
Removes elements from a dictionary.
|
||||
|
||||
Example:
|
||||
|
||||
{
|
||||
a = { "hello", "world" },
|
||||
a -= { "world" }
|
||||
}
|
||||
|
||||
In this example a contains *"hello"*. Trying to remove an item that does
|
||||
not exist is not an error. Not implemented yet.
|
||||
|
||||
### Operator *\*=*
|
||||
|
||||
Multiplies an existing dictionary element with the specified number. If
|
||||
the dictionary element does not already exist 0 is used as its value.
|
||||
|
||||
Example:
|
||||
|
||||
{
|
||||
a = 60,
|
||||
a *= 5
|
||||
}
|
||||
|
||||
In this example a is 300. This only works for numbers. Not implemented
|
||||
yet.
|
||||
|
||||
### Operator */=*
|
||||
|
||||
Divides an existing dictionary element by the specified number. If the
|
||||
dictionary element does not already exist 0 is used as its value.
|
||||
|
||||
Example:
|
||||
|
||||
{
|
||||
a = 300,
|
||||
a /= 5
|
||||
}
|
||||
|
||||
In this example a is 60. This only works for numbers. Not implemented
|
||||
yet.
|
||||
|
||||
Attribute Shortcuts
|
||||
-------------------
|
||||
|
||||
### Indexer Shortcut
|
||||
|
||||
Example:
|
||||
|
||||
{
|
||||
hello["key"] = "world"
|
||||
}
|
||||
|
||||
This is equivalent to writing:
|
||||
|
||||
{
|
||||
hello += {
|
||||
key = "world"
|
||||
}
|
||||
}
|
||||
|
||||
Specifiers
|
||||
----------
|
||||
|
||||
Objects can have specifiers that have special meaning. The following
|
||||
specifiers can be used (prefacing the *object* keyword):
|
||||
|
||||
### Specifier *abstract*
|
||||
|
||||
This specifier identifies the object as a template which can be used by
|
||||
other object definitions. The object will not be instantiated on its
|
||||
own.
|
||||
|
||||
Instead of using the *abstract* specifier you can use the *template*
|
||||
keyword which is a shorthand for writing *abstract object*:
|
||||
|
||||
template Service "http" {
|
||||
...
|
||||
}
|
||||
|
||||
### Specifier *local*
|
||||
|
||||
This specifier disables replication for this object. The object will not
|
||||
be sent to remote Icinga instances.
|
||||
|
||||
Inheritance
|
||||
-----------
|
||||
|
||||
Objects can inherit attributes from one or more other objects.
|
||||
|
||||
Example:
|
||||
|
||||
template Host "default-host" {
|
||||
check_interval = 30,
|
||||
|
||||
macros = {
|
||||
color = "red"
|
||||
}
|
||||
}
|
||||
|
||||
template Host "test-host" inherits "default-host" {
|
||||
macros += {
|
||||
color = "blue"
|
||||
}
|
||||
}
|
||||
|
||||
object Host "localhost" inherits "test-host" {
|
||||
macros += {
|
||||
address = "127.0.0.1",
|
||||
address6 = "::1"
|
||||
}
|
||||
}
|
||||
|
||||
> **Note**
|
||||
>
|
||||
> The *"default-host"* and *"test-host"* objects are marked as templates
|
||||
> using the *abstract* keyword. Parent objects do not necessarily have
|
||||
> to be *abstract* though in general they are.
|
||||
|
||||
> **Note**
|
||||
>
|
||||
> The += operator is used to insert additional properties into the
|
||||
> macros dictionary. The final dictionary contains all 3 macros and the
|
||||
> property *color* has the value *"blue"*.
|
||||
|
||||
Parent objects are resolved in the order they’re specified using the
|
||||
*inherits* keyword.
|
||||
|
||||
Comments
|
||||
--------
|
||||
|
||||
The Icinga 2 configuration format supports C/C++-style comments.
|
||||
|
||||
Example:
|
||||
|
||||
/*
|
||||
This is a comment.
|
||||
*/
|
||||
object Host "localhost" {
|
||||
check_interval = 30, // this is also a comment.
|
||||
retry_interval = 15
|
||||
}
|
||||
|
||||
Includes
|
||||
--------
|
||||
|
||||
Other configuration files can be included using the *include* directive.
|
||||
Paths must be relative to the configuration file that contains the
|
||||
*include* directive.
|
||||
|
||||
Example:
|
||||
|
||||
include "some/other/file.conf"
|
||||
include "conf.d/*.conf"
|
||||
|
||||
> **Note**
|
||||
>
|
||||
> Wildcard includes are not recursive.
|
||||
|
||||
Icinga also supports include search paths similar to how they work in a
|
||||
C/C++ compiler:
|
||||
|
||||
include <itl/itl.conf>
|
||||
|
||||
Note the use of angle brackets instead of double quotes. This causes the
|
||||
config compiler to search the include search paths for the specified
|
||||
file. By default \$PREFIX/icinga2 is included in the list of search
|
||||
paths.
|
||||
|
||||
Wildcards are not permitted when using angle brackets.
|
||||
|
||||
Library directive
|
||||
-----------------
|
||||
|
||||
The *library* directive can be used to manually load additional
|
||||
libraries. Upon loading these libraries may provide additional types or
|
||||
methods.
|
||||
|
||||
Example:
|
||||
|
||||
library "snmphelper"
|
||||
|
||||
> **Note**
|
||||
>
|
||||
> The *icinga* library is automatically loaded at startup.
|
||||
|
||||
Type Definition
|
||||
---------------
|
||||
|
||||
By default Icinga has no way of semantically verifying its configuration
|
||||
objects. This is where type definitions come in. Using type definitions
|
||||
you can specify which attributes are allowed in an object definition.
|
||||
|
||||
Example:
|
||||
|
||||
type Pizza {
|
||||
%require "radius",
|
||||
%attribute number "radius",
|
||||
|
||||
%attribute dictionary "ingredients" {
|
||||
%validator "ValidateIngredients",
|
||||
|
||||
%attribute string "*",
|
||||
|
||||
%attribute dictionary "*" {
|
||||
%attribute number "quantity",
|
||||
%attribute string "name"
|
||||
}
|
||||
},
|
||||
|
||||
%attribute any "custom::*"
|
||||
}
|
||||
|
||||
The Pizza definition provides the following validation rules:
|
||||
|
||||
- Pizza objects must contain an attribute *radius* which has to be a
|
||||
number.
|
||||
|
||||
- Pizza objects may contain an attribute *ingredients* which has to be
|
||||
a dictionary.
|
||||
|
||||
- Elements in the ingredients dictionary can be either a string or a
|
||||
dictionary.
|
||||
|
||||
- If they’re a dictionary they may contain attributes *quantity* (of
|
||||
type number) and *name* (of type string).
|
||||
|
||||
- The script function *ValidateIngredients* is run to perform further
|
||||
validation of the ingredients dictionary.
|
||||
|
||||
- Pizza objects may contain attribute matching the pattern
|
||||
*custom::\** of any type.
|
||||
|
||||
Valid types for type rules include: \* any \* number \* string \* scalar
|
||||
(an alias for string) \* dictionary
|
|
@ -0,0 +1,994 @@
|
|||
Configuration Format
|
||||
====================
|
||||
|
||||
Object Definition
|
||||
-----------------
|
||||
|
||||
Icinga 2 features an object-based configuration format. In order to
|
||||
define objects the "object" keyword is used:
|
||||
|
||||
object Host "host1.example.org" {
|
||||
alias = "host1",
|
||||
|
||||
check_interval = 30,
|
||||
retry_interval = 15,
|
||||
|
||||
macros = {
|
||||
address = "192.168.0.1"
|
||||
}
|
||||
}
|
||||
|
||||
> **Note**
|
||||
>
|
||||
> The Icinga 2 configuration format is agnostic to whitespaces and
|
||||
> new-lines.
|
||||
|
||||
Each object is uniquely identified by its type ("Host") and name
|
||||
("host1.example.org"). Objects can contain a comma-separated list of
|
||||
property declarations. The following data types are available for
|
||||
property values:
|
||||
|
||||
### Numeric Literals
|
||||
|
||||
A floating-point number.
|
||||
|
||||
Example:
|
||||
|
||||
-27.3
|
||||
|
||||
### Duration Literal
|
||||
|
||||
Similar to floating-point numbers except for that fact that they support
|
||||
suffixes to help with specifying time durations.
|
||||
|
||||
Example:
|
||||
|
||||
2.5m
|
||||
|
||||
Supported suffixes include ms (milliseconds), s (seconds), m (minutes)
|
||||
and h (hours).
|
||||
|
||||
### String Literals
|
||||
|
||||
A string. No escape characters are supported at present though this will
|
||||
likely change.
|
||||
|
||||
Example:
|
||||
|
||||
"Hello World!"
|
||||
|
||||
### Expression List
|
||||
|
||||
A list of expressions that when executed has a dictionary as a result.
|
||||
|
||||
Example:
|
||||
|
||||
{
|
||||
address = "192.168.0.1",
|
||||
port = 443
|
||||
}
|
||||
|
||||
> **Note**
|
||||
>
|
||||
> Identifiers may not contain certain characters (e.g. space) or start
|
||||
> with certain characters (e.g. digits). If you want to use a dictionary
|
||||
> key that is not a valid identifier you can put the key in double
|
||||
> quotes.
|
||||
|
||||
Operators
|
||||
---------
|
||||
|
||||
In addition to the "=" operator shown above a number of other operators
|
||||
to manipulate configuration objects are supported. Here’s a list of all
|
||||
available operators:
|
||||
|
||||
### Operator "="
|
||||
|
||||
Sets a dictionary element to the specified value.
|
||||
|
||||
Example:
|
||||
|
||||
{
|
||||
a = 5,
|
||||
a = 7
|
||||
}
|
||||
|
||||
In this example a has the value 7 after both instructions are executed.
|
||||
|
||||
### Operator "+="
|
||||
|
||||
Modifies a dictionary by adding new elements to it.
|
||||
|
||||
Example:
|
||||
|
||||
{
|
||||
a = { "hello" },
|
||||
a += { "world" }
|
||||
}
|
||||
|
||||
In this example a contains both "hello" and "world". This currently only
|
||||
works for expression lists. Support for numbers might be added later on.
|
||||
|
||||
### Operator "-="
|
||||
|
||||
Removes elements from a dictionary.
|
||||
|
||||
Example:
|
||||
|
||||
{
|
||||
a = { "hello", "world" },
|
||||
a -= { "world" }
|
||||
}
|
||||
|
||||
In this example a contains "hello". Trying to remove an item that does
|
||||
not exist is not an error. Not implemented yet.
|
||||
|
||||
### Operator "\*="
|
||||
|
||||
Multiplies an existing dictionary element with the specified number. If
|
||||
the dictionary element does not already exist 0 is used as its value.
|
||||
|
||||
Example:
|
||||
|
||||
{
|
||||
a = 60,
|
||||
a *= 5
|
||||
}
|
||||
|
||||
In this example a is 300. This only works for numbers. Not implemented
|
||||
yet.
|
||||
|
||||
### Operator "/="
|
||||
|
||||
Divides an existing dictionary element by the specified number. If the
|
||||
dictionary element does not already exist 0 is used as its value.
|
||||
|
||||
Example:
|
||||
|
||||
{
|
||||
a = 300,
|
||||
a /= 5
|
||||
}
|
||||
|
||||
In this example a is 60. This only works for numbers. Not implemented
|
||||
yet.
|
||||
|
||||
Attribute Shortcuts
|
||||
-------------------
|
||||
|
||||
### Value Shortcut
|
||||
|
||||
Example:
|
||||
|
||||
{
|
||||
"hello", "world"
|
||||
}
|
||||
|
||||
This is equivalent to writing:
|
||||
|
||||
{
|
||||
_00000001 = "hello", _00000002 = "world"
|
||||
}
|
||||
|
||||
The item’s keys are monotonically increasing and the config compiler
|
||||
takes care of ensuring that all keys are unique (even when adding items
|
||||
to an existing attribute using +=).
|
||||
|
||||
### Indexer Shortcut
|
||||
|
||||
Example:
|
||||
|
||||
{
|
||||
hello["key"] = "world"
|
||||
}
|
||||
|
||||
This is equivalent to writing:
|
||||
|
||||
{
|
||||
hello += {
|
||||
key = "world"
|
||||
}
|
||||
}
|
||||
|
||||
Specifiers
|
||||
----------
|
||||
|
||||
Objects can have specifiers that have special meaning. The following
|
||||
specifiers can be used (before the "object" keyword):
|
||||
|
||||
### Specifier "abstract"
|
||||
|
||||
This specifier identifies the object as a template which can be used by
|
||||
other object definitions. The object will not be instantiated on its
|
||||
own.
|
||||
|
||||
Instead of using the "abstract" specifier you can use the "template"
|
||||
keyword which is a shorthand for writing "abstract object":
|
||||
|
||||
template Service "http" {
|
||||
...
|
||||
}
|
||||
|
||||
### Specifier "local"
|
||||
|
||||
This specifier disables replication for this object. The object will not
|
||||
be sent to remote Icinga instances.
|
||||
|
||||
Inheritance
|
||||
-----------
|
||||
|
||||
Objects can inherit attributes from one or more other objects.
|
||||
|
||||
Example:
|
||||
|
||||
abstract object Host "default-host" {
|
||||
check_interval = 30,
|
||||
|
||||
macros = {
|
||||
color = "red"
|
||||
}
|
||||
}
|
||||
|
||||
abstract object Host "test-host" inherits "default-host" {
|
||||
macros += {
|
||||
color = "blue"
|
||||
}
|
||||
}
|
||||
|
||||
object Host "localhost" inherits "test-host" {
|
||||
macros += {
|
||||
address = "127.0.0.1",
|
||||
address6 = "::1"
|
||||
}
|
||||
}
|
||||
|
||||
> **Note**
|
||||
>
|
||||
> The "default-host" and "test-host" objects are marked as templates
|
||||
> using the "abstract" keyword. Parent objects do not necessarily have
|
||||
> to be "abstract" though in general they are.
|
||||
|
||||
> **Note**
|
||||
>
|
||||
> The += operator is used to insert additional properties into the
|
||||
> macros dictionary. The final dictionary contains all 3 macros and the
|
||||
> property "color" has the value "blue".
|
||||
|
||||
Parent objects are resolved in the order they’re specified using the
|
||||
"inherits" keyword. Parent objects must already be defined by the time
|
||||
they’re used in an object definition.
|
||||
|
||||
Comments
|
||||
--------
|
||||
|
||||
The Icinga 2 configuration format supports C/C++-style comments.
|
||||
|
||||
Example:
|
||||
|
||||
/*
|
||||
This is a comment.
|
||||
*/
|
||||
object Host "localhost" {
|
||||
check_interval = 30, // this is also a comment.
|
||||
retry_interval = 15
|
||||
}
|
||||
|
||||
Includes
|
||||
--------
|
||||
|
||||
Other configuration files can be included using the "\#include"
|
||||
directive. Paths must be relative to the configuration file that
|
||||
contains the "\#include" keyword:
|
||||
|
||||
Example:
|
||||
|
||||
#include "some/other/file.conf"
|
||||
#include "conf.d/*.conf"
|
||||
|
||||
Icinga also supports include search paths similar to how they work in a
|
||||
C/C++ compiler:
|
||||
|
||||
#include <itl/itl.conf>
|
||||
|
||||
Note the use of angle brackets instead of double quotes. This causes the
|
||||
config compiler to search the include search paths for the specified
|
||||
file. By default \$PREFIX/icinga2 is included in the list of search
|
||||
paths.
|
||||
|
||||
Wildcards are not permitted when using angle brackets.
|
||||
|
||||
Library directive
|
||||
-----------------
|
||||
|
||||
The "\#library" directive can be used to manually load additional
|
||||
libraries. Upon loading these libraries may provide additional classes
|
||||
or methods.
|
||||
|
||||
Example:
|
||||
|
||||
#library "snmphelper"
|
||||
|
||||
> **Note**
|
||||
>
|
||||
> The "icinga" library is automatically loaded by Icinga.
|
||||
|
||||
Type Definition
|
||||
---------------
|
||||
|
||||
By default Icinga has no way of semantically verifying its configuration
|
||||
objects. This is where type definitions come in. Using type definitions
|
||||
you can specify which attributes are allowed in an object definition.
|
||||
|
||||
Example:
|
||||
|
||||
type Pizza {
|
||||
%require "radius",
|
||||
%attribute number "radius",
|
||||
|
||||
%attribute dictionary "ingredients" {
|
||||
%validator "ValidateIngredients",
|
||||
|
||||
%attribute string "*",
|
||||
|
||||
%attribute dictionary "*" {
|
||||
%attribute number "quantity",
|
||||
%attribute string "name"
|
||||
}
|
||||
},
|
||||
|
||||
%attribute any "custom::*"
|
||||
}
|
||||
|
||||
The Pizza definition provides the following validation rules:
|
||||
|
||||
- Pizza objects must contain an attribute "radius" which has to be a
|
||||
number.
|
||||
|
||||
- Pizza objects may contain an attribute "ingredients" which has to be
|
||||
a dictionary.
|
||||
|
||||
- Elements in the ingredients dictionary can be either a string or a
|
||||
dictionary.
|
||||
|
||||
- If they’re a dictionary they may contain attributes "quantity" (of
|
||||
type number) and "name" (of type string).
|
||||
|
||||
- The script function "ValidateIngredients" is run to perform further
|
||||
validation of the ingredients dictionary.
|
||||
|
||||
- Pizza objects may contain attribute matching the pattern
|
||||
"custom::\*" of any type.
|
||||
|
||||
Valid types for type rules include: \* any \* number \* string \* scalar
|
||||
(an alias for string) \* dictionary
|
||||
|
||||
Configuration Objects
|
||||
=====================
|
||||
|
||||
Type: IcingaApplication
|
||||
-----------------------
|
||||
|
||||
The "IcingaApplication" type is used to specify global configuration
|
||||
parameters for Icinga. There must be exactly one application object in
|
||||
each Icinga 2 configuration. The object must have the "local" specifier.
|
||||
|
||||
Example:
|
||||
|
||||
local object IcingaApplication "icinga" {
|
||||
cert_path = "my-cert.pem",
|
||||
ca_path = "ca.crt",
|
||||
|
||||
node = "192.168.0.1",
|
||||
service = 7777,
|
||||
|
||||
pid_path = "/var/run/icinga2.pid",
|
||||
state_path = "/var/lib/icinga2/icinga2.state",
|
||||
|
||||
macros = {
|
||||
plugindir = "/usr/local/icinga/libexec"
|
||||
}
|
||||
}
|
||||
|
||||
### Attribute: cert\_path
|
||||
|
||||
This is used to specify the SSL client certificate Icinga 2 will use
|
||||
when connecting to other Icinga 2 instances. This property is optional
|
||||
when you’re setting up a non-networked Icinga 2 instance.
|
||||
|
||||
### Attribute: ca\_path
|
||||
|
||||
This is the public CA certificate that is used to verify connections
|
||||
from other Icinga 2 instances. This property is optional when you’re
|
||||
setting up a non-networked Icinga 2 instance.
|
||||
|
||||
### Attribute: node
|
||||
|
||||
The externally visible IP address that is used by other Icinga 2
|
||||
instances to connect to this instance. This property is optional when
|
||||
you’re setting up a non-networked Icinga 2 instance.
|
||||
|
||||
> **Note**
|
||||
>
|
||||
> Icinga does not bind to this IP address.
|
||||
|
||||
### Attribute: service
|
||||
|
||||
The port this Icinga 2 instance should listen on. This property is
|
||||
optional when you’re setting up a non-networked Icinga 2 instance.
|
||||
|
||||
### Attribute: pid\_path
|
||||
|
||||
Optional. The path to the PID file. Defaults to "icinga.pid" in the
|
||||
current working directory.
|
||||
|
||||
### Attribute: state\_path
|
||||
|
||||
Optional. The path of the state file. This is the file Icinga 2 uses to
|
||||
persist objects between program runs. Defaults to "icinga2.state" in the
|
||||
current working directory.
|
||||
|
||||
### Attribute: macros
|
||||
|
||||
Optional. Global macros that are used for service checks and
|
||||
notifications.
|
||||
|
||||
Type: Component
|
||||
---------------
|
||||
|
||||
Icinga 2 uses a number of components to implement its feature-set. The
|
||||
"Component" configuration object is used to load these components and
|
||||
specify additional parameters for them. "Component" objects must have
|
||||
the "local" specifier. The typical components to be loaded in the
|
||||
default configuration would be "checker", "delegation" and more.
|
||||
|
||||
Example "compat":
|
||||
|
||||
local object Component "compat" {
|
||||
status_path = "/var/cache/icinga2/status.dat",
|
||||
objects_path = "/var/cache/icinga2/objects.cache",
|
||||
}
|
||||
|
||||
### Attribute: status\_path
|
||||
|
||||
Specifies where Icinga 2 Compat component will put the status.dat file,
|
||||
which can be read by Icinga 1.x Classic UI and other addons. If not set,
|
||||
it defaults to the localstatedir location.
|
||||
|
||||
### Attribute: objects\_path
|
||||
|
||||
Specifies where Icinga 2 Compat component will put the objects.cache
|
||||
file, which can be read by Icinga 1.x Classic UI and other addons. If
|
||||
not set, it defaults to the localstatedir location.
|
||||
|
||||
Type: ConsoleLogger
|
||||
-------------------
|
||||
|
||||
Specifies Icinga 2 logging to the console. Objects of this type must
|
||||
have the "local" specifier.
|
||||
|
||||
Example:
|
||||
|
||||
local object ConsoleLogger "my-debug-console" {
|
||||
severity = "debug"
|
||||
}
|
||||
|
||||
### Attribute: severity
|
||||
|
||||
The minimum severity for this log. Can be "debug", "information",
|
||||
"warning" or "critical". Defaults to "information".
|
||||
|
||||
Type: FileLogger
|
||||
----------------
|
||||
|
||||
Specifies Icinga 2 logging to a file. Objects of this type must have the
|
||||
"local" specifier.
|
||||
|
||||
Example:
|
||||
|
||||
local object FileLogger "my-debug-file" {
|
||||
severity = "debug",
|
||||
path = "/var/log/icinga2/icinga2-debug.log"
|
||||
}
|
||||
|
||||
### Attribute: path
|
||||
|
||||
The log path.
|
||||
|
||||
### Attribute: severity
|
||||
|
||||
The minimum severity for this log. Can be "debug", "information",
|
||||
"warning" or "critical". Defaults to "information".
|
||||
|
||||
Type: SyslogLogger
|
||||
------------------
|
||||
|
||||
Specifies Icinga 2 logging to syslog. Objects of this type must have the
|
||||
"local" specifier.
|
||||
|
||||
Example:
|
||||
|
||||
local object SyslogLogger "my-crit-syslog" {
|
||||
severity = "critical"
|
||||
}
|
||||
|
||||
### Attribute: severity
|
||||
|
||||
The minimum severity for this log. Can be "debug", "information",
|
||||
"warning" or "critical". Defaults to "information".
|
||||
|
||||
Type: Endpoint
|
||||
--------------
|
||||
|
||||
Endpoint objects are used to specify connection information for remote
|
||||
Icinga 2 instances. Objects of this type should not be local:
|
||||
|
||||
object Endpoint "icinga-c2" {
|
||||
node = "192.168.5.46",
|
||||
service = 7777,
|
||||
}
|
||||
|
||||
### Attribute: node
|
||||
|
||||
The hostname/IP address of the remote Icinga 2 instance.
|
||||
|
||||
### Attribute: service
|
||||
|
||||
The service name/port of the remote Icinga 2 instance.
|
||||
|
||||
Type: CheckCommand
|
||||
------------------
|
||||
|
||||
A check command definition. Additional default command macros can be
|
||||
defined here.
|
||||
|
||||
Example:
|
||||
|
||||
object CheckCommand "check_snmp" inherits "plugin-check-command" {
|
||||
command = "$plugindir$/check_snmp -H $address$ -C $community$ -o $oid$",
|
||||
|
||||
macros = {2yy
|
||||
plugindir = "/usr/lib/nagios/plugins",
|
||||
address = "127.0.0.1",
|
||||
community = "public",
|
||||
}
|
||||
}
|
||||
|
||||
Type: NotificationCommand
|
||||
-------------------------
|
||||
|
||||
A notification command definition.
|
||||
|
||||
Example:
|
||||
|
||||
object NotificationCommand "mail-service-notification" inherits "plugin-notification-command" {
|
||||
command = "/usr/bin/printf \"%b\" \"***** Icinga *****\n\nNotification Type: $NOTIFICATIONTYPE$\n\nService: $SERVICEDESC$\nHost: $HOSTALIAS$\nAddress: $HOSTADDRESS$\nState: $SERVICESTATE$\n\nDate/Time: $LONGDATETIME$\n\nAdditional Info: $SERVICEOUTPUT$\n\nComment: [$NOTIFICATIONAUTHORNAME$] $NOTIFICATIONCOMMENT$\n\n\" | /usr/bin/mail -s \"$NOTIFICATIONTYPE$ - $HOSTNAME$ - $SERVICEDESC$ - $SERVICESTATE$\" $CONTACTEMAIL$",
|
||||
}
|
||||
|
||||
Type: EventCommand
|
||||
|
||||
An event command definition.
|
||||
|
||||
NOTE: Similar to Icinga 1.x event handlers.
|
||||
|
||||
Example:
|
||||
|
||||
-------------------------------------------------------------------------------
|
||||
object EventCommand "restart-httpd-event" inherits "plugin-event-command" {
|
||||
command = "/usr/local/icinga/libexec/restart-httpd.sh",
|
||||
}
|
||||
-------------------------------------------------------------------------------
|
||||
|
||||
|
||||
Type: Service
|
||||
|
||||
Service objects describe network services and how they should be checked
|
||||
by Icinga 2.
|
||||
|
||||
> **Note**
|
||||
>
|
||||
> Better create a service template and use that reference on the host
|
||||
> definition as shown below.
|
||||
|
||||
Example:
|
||||
|
||||
object Service "localhost-uptime" {
|
||||
host_name = "localhost",
|
||||
|
||||
alias = "localhost Uptime",
|
||||
|
||||
methods = {
|
||||
check = "PluginCheck"
|
||||
},
|
||||
|
||||
check_command = "check_snmp",
|
||||
|
||||
macros = {
|
||||
plugindir = "/usr/lib/nagios/plugins",
|
||||
address = "127.0.0.1",
|
||||
community = "public",
|
||||
oid = "DISMAN-EVENT-MIB::sysUpTimeInstance"
|
||||
}
|
||||
|
||||
check_interval = 60s,
|
||||
retry_interval = 15s,
|
||||
|
||||
servicegroups = { "all-services", "snmp" },
|
||||
|
||||
checkers = { "*" },
|
||||
}
|
||||
|
||||
### Attribute: host\_name
|
||||
|
||||
The host this service belongs to. There must be a "Host" object with
|
||||
that name.
|
||||
|
||||
### Attribute: alias
|
||||
|
||||
Optional. A short description of the service.
|
||||
|
||||
### Attribute: methods - check
|
||||
|
||||
The check type of the service. For now only external check plugins are
|
||||
supported ("PluginCheck").
|
||||
|
||||
### Attribute: check\_command
|
||||
|
||||
Optional when not using the "external plugin" check type. The check
|
||||
command. May contain macros.
|
||||
|
||||
### Attribute: check\_interval
|
||||
|
||||
Optional. The check interval (in seconds).
|
||||
|
||||
### Attribute: retry\_interval
|
||||
|
||||
Optional. The retry interval (in seconds). This is used when the service
|
||||
is in a soft state.
|
||||
|
||||
### Attribute: servicegroups
|
||||
|
||||
Optional. The service groups this service belongs to.
|
||||
|
||||
### Attribute: checkers
|
||||
|
||||
Optional. A list of remote endpoints that may check this service.
|
||||
Wildcards can be used here.
|
||||
|
||||
Type: ServiceGroup
|
||||
------------------
|
||||
|
||||
A group of services.
|
||||
|
||||
Example:
|
||||
|
||||
object ServiceGroup "snmp" {
|
||||
alias = "SNMP services",
|
||||
|
||||
custom = {
|
||||
notes_url = "http://www.example.org/",
|
||||
action_url = "http://www.example.org/",
|
||||
}
|
||||
}
|
||||
|
||||
### Attribute: alias
|
||||
|
||||
Optional. A short description of the service group.
|
||||
|
||||
### Attribute: notes\_url
|
||||
|
||||
Optional. Notes URL. Used by the CGIs.
|
||||
|
||||
### Attribute: action\_url
|
||||
|
||||
Optional. Action URL. Used by the CGIs.
|
||||
|
||||
Type: Host
|
||||
----------
|
||||
|
||||
A host. Unlike in Icinga 1.x hosts are not checkable objects in Icinga
|
||||
2.
|
||||
|
||||
Example:
|
||||
|
||||
object Host "localhost" {
|
||||
alias = "The best host there is",
|
||||
|
||||
hostgroups = [ "all-hosts" ],
|
||||
|
||||
hostcheck = "ping",
|
||||
dependencies = [ "router-ping" ]
|
||||
|
||||
services["ping"] = { templates = "ping" }
|
||||
services["http"] = {
|
||||
templates = "my-http",
|
||||
macros = {
|
||||
vhost = "test1.example.org",
|
||||
port = 81
|
||||
}
|
||||
}
|
||||
|
||||
check_interval = 60m,
|
||||
retry_interval = 15m,
|
||||
|
||||
servicegroups = [ "all-services" ],
|
||||
|
||||
checkers = { "*" },
|
||||
}
|
||||
|
||||
### Attribute: alias
|
||||
|
||||
Optional. A short description of the host.
|
||||
|
||||
### Attribute: hostgroups
|
||||
|
||||
Optional. A list of host groups this host belongs to.
|
||||
|
||||
### Attribute: hostcheck
|
||||
|
||||
Optional. A service that is used to determine whether the host is up or
|
||||
down.
|
||||
|
||||
### Attribute: hostdependencies
|
||||
|
||||
Optional. A list of hosts that are used to determine whether the host is
|
||||
unreachable.
|
||||
|
||||
### Attribute: servicedependencies
|
||||
|
||||
Optional. A list of services that are used to determine whether the host
|
||||
is unreachable.
|
||||
|
||||
### Attribute: services
|
||||
|
||||
Inline definition of services. Each service name is defined in square
|
||||
brackets and got its own dictionary with attribute properties, such as
|
||||
the template service being used. All other service-related properties
|
||||
are additively copied into the new service object.
|
||||
|
||||
The new service’s name is "hostname-service" - where "service" is the
|
||||
array key in the services array.
|
||||
|
||||
The priority for service properties is (from highest to lowest):
|
||||
|
||||
1. Properties specified in the dictionary of the inline service
|
||||
definition
|
||||
|
||||
2. Host properties
|
||||
|
||||
3. Properties inherited from the new service’s parent object
|
||||
|
||||
### Attribute: check\_interval
|
||||
|
||||
Optional. Copied into inline service definitions. The host itself does
|
||||
not have any checks.
|
||||
|
||||
### Attribute: retry\_interval
|
||||
|
||||
Optional. Copied into inline service definitions. The host itself does
|
||||
not have any checks.
|
||||
|
||||
### Attribute: servicegroups
|
||||
|
||||
Optional. Copied into inline service definitions. The host itself does
|
||||
not have any checks.
|
||||
|
||||
### Attribute: checkers
|
||||
|
||||
Optional. Copied into inline service definitions. The host itself does
|
||||
not have any checks.
|
||||
|
||||
Type: HostGroup
|
||||
---------------
|
||||
|
||||
A group of hosts.
|
||||
|
||||
Example
|
||||
|
||||
object HostGroup "my-hosts" {
|
||||
alias = "My hosts",
|
||||
|
||||
notes_url = "http://www.example.org/",
|
||||
action_url = "http://www.example.org/",
|
||||
}
|
||||
|
||||
### Attribute: alias
|
||||
|
||||
Optional. A short description of the host group.
|
||||
|
||||
### Attribute: notes\_url
|
||||
|
||||
Optional. Notes URL. Used by the CGIs.
|
||||
|
||||
### Attribute: action\_url
|
||||
|
||||
Optional. Action URL. Used by the CGIs.
|
||||
|
||||
Type: PerfdataWriter
|
||||
--------------------
|
||||
|
||||
Write check result performance data to a defined path using macro
|
||||
pattern.
|
||||
|
||||
Example
|
||||
|
||||
local object PerfdataWriter "pnp" {
|
||||
perfdata_path = "/var/spool/icinga2/perfdata/service-perfdata",
|
||||
format_template = "DATATYPE::SERVICEPERFDATA\tTIMET::$TIMET$\tHOSTNAME::$HOSTNAME$\tSERVICEDESC::$SERVICEDESC$\tSERVICEPERFDATA::$SERVICEPERFDATA$\tSERVICECHECKCOMMAND::$SERVICECHECKCOMMAND$\tHOSTSTATE::$HOSTSTATE$\tHOSTSTATETYPE::$HOSTSTATETYPE$\tSERVICESTATE::$SERVICESTATE$\tSERVICESTATETYPE::$SERVICESTATETYPE$",
|
||||
rotation_interval = 15s,
|
||||
}
|
||||
|
||||
### Attribute: perfdata\_path
|
||||
|
||||
Path to the service perfdata file.
|
||||
|
||||
> **Note**
|
||||
>
|
||||
> Will be automatically rotated with timestamp suffix.
|
||||
|
||||
### Attribute: format\_template
|
||||
|
||||
Formatting of performance data output for graphing addons or other post
|
||||
processing.
|
||||
|
||||
### Attribute: rotation\_interval
|
||||
|
||||
Rotation interval for the file defined in *perfdata\_path*.
|
||||
|
||||
Type: IdoMySqlConnection
|
||||
------------------------
|
||||
|
||||
IDO DB schema compatible output into mysql database.
|
||||
|
||||
Example
|
||||
|
||||
library "ido_mysql"
|
||||
local object IdoMysqlDbConnection "mysql-ido" {
|
||||
host = "127.0.0.1",
|
||||
port = "3306",
|
||||
user = "icinga",
|
||||
password = "icinga",
|
||||
database = "icinga",
|
||||
table_prefix = "icinga_",
|
||||
instance_name = "icinga2",
|
||||
instance_description = "icinga2 dev instance"
|
||||
}
|
||||
|
||||
### Attribute: host
|
||||
|
||||
MySQL database host address. Default is *localhost*.
|
||||
|
||||
### Attribute: port
|
||||
|
||||
MySQL database port. Default is *3306*.
|
||||
|
||||
### Attribute: user
|
||||
|
||||
MySQL database user with read/write permission to the icinga database.
|
||||
Default is *icinga*.
|
||||
|
||||
### Attribute: password
|
||||
|
||||
MySQL database user’s password. Default is *icinga*.
|
||||
|
||||
### Attribute: database
|
||||
|
||||
MySQL database name. Default is *icinga*.
|
||||
|
||||
### Attribute: table\_prefix
|
||||
|
||||
MySQL database table prefix. Default is *icinga\_*.
|
||||
|
||||
### Attribute: instance\_name
|
||||
|
||||
Unique identifier for the local Icinga 2 instance.
|
||||
|
||||
### Attribute: instance\_description
|
||||
|
||||
Optional. Description for the Icinga 2 instance.
|
||||
|
||||
Type: LiveStatusComponent
|
||||
-------------------------
|
||||
|
||||
Livestatus api interface available as tcp or unix socket.
|
||||
|
||||
Example
|
||||
|
||||
library "livestatus"
|
||||
|
||||
local object LivestatusComponent "livestatus-tcp" {
|
||||
socket_type = "tcp",
|
||||
host = "127.0.0.1",
|
||||
port = "6558"
|
||||
}
|
||||
|
||||
local object LivestatusComponent "livestatus-unix" {
|
||||
socket_type = "unix",
|
||||
socket_path = "/var/run/icinga2/livestatus"
|
||||
}
|
||||
|
||||
### Attribute: socket\_type
|
||||
|
||||
*tcp* or *unix* socket. Default is *unix*.
|
||||
|
||||
> **Note**
|
||||
>
|
||||
> *unix* sockets are not supported on Windows.
|
||||
|
||||
### Attribute: host
|
||||
|
||||
Only valid when socket\_type="tcp". Host address to listen on for
|
||||
connections.
|
||||
|
||||
### Attribute: port
|
||||
|
||||
Only valid when socket\_type="tcp". Port to listen on for connections.
|
||||
|
||||
### Attribute: socket\_path
|
||||
|
||||
Only valid when socket\_type="unix". Local unix socket file. Not
|
||||
supported on Windows.
|
||||
|
||||
Configuration Examples
|
||||
======================
|
||||
|
||||
Non-networked minimal example
|
||||
-----------------------------
|
||||
|
||||
> **Note**
|
||||
>
|
||||
> Icinga 2 ITL provides itl/standalone.conf which loads all required
|
||||
> components, as well as itl/itl.conf includes many object templates
|
||||
> already for an easy start with Icinga 2.
|
||||
|
||||
local object IcingaApplication "icinga" {
|
||||
|
||||
}
|
||||
|
||||
local object Component "checker" {
|
||||
|
||||
}
|
||||
|
||||
local object Component "delegation" {
|
||||
|
||||
}
|
||||
|
||||
object CheckCommand "ping" {
|
||||
command = "$plugindir$/check_ping -H $address$ -w $wrta$,$wpl$% -c $crta$,$cpl$%",
|
||||
}
|
||||
|
||||
template Service "icinga-service" {
|
||||
methods = {
|
||||
check = "PluginCheck"
|
||||
},
|
||||
|
||||
macros = {
|
||||
plugindir = "/usr/lib/nagios/plugins"
|
||||
}
|
||||
}
|
||||
|
||||
template Service "ping-tmpl" inherits "icinga-service" {
|
||||
check_command = "ping",
|
||||
macros += {
|
||||
wrta = 50,
|
||||
wpl = 5,
|
||||
crta = 100,
|
||||
cpl = 10
|
||||
}
|
||||
}
|
||||
|
||||
object Host "localhost" {
|
||||
services["ping"] = { templates = "ping-tmpl" },
|
||||
|
||||
macros = {
|
||||
address = "127.0.0.1"
|
||||
},
|
||||
|
||||
check_interval = 10m
|
||||
}
|
||||
|
||||
> **Note**
|
||||
>
|
||||
> You may also want to load the "compat" component if you want Icinga 2
|
||||
> to write status.dat and objects.cache files.
|
||||
|
||||
/\* vim: set syntax=asciidoc filetype=asciidoc: \*/
|
|
@ -0,0 +1,76 @@
|
|||
Configuration Introduction
|
||||
==========================
|
||||
|
||||
In Icinga 2 configuration is based on objects. There’s no difference in
|
||||
defining global settings for the core application or for a specific
|
||||
runtime configuration object.
|
||||
|
||||
There are different types for the main application, its components and
|
||||
tools. The runtime configuration objects such as hosts, services, etc
|
||||
are defined using the same syntax.
|
||||
|
||||
Each configuration object must be unique by its name. Otherwise Icinga 2
|
||||
will bail early on verifying the parsed configuration.
|
||||
|
||||
Main Configuration
|
||||
==================
|
||||
|
||||
Starting Icinga 2 requires the main configuration file called
|
||||
"icinga2.conf". That’s the location where everything is defined or
|
||||
included. Icinga 2 will only know the content of that file and included
|
||||
configuration file snippets.
|
||||
|
||||
# /usr/bin/icinga2 -c /etc/icinga2/icinga2.conf
|
||||
|
||||
> **Note**
|
||||
>
|
||||
> You can use just the main configuration file and put everything in
|
||||
> there. Though that is not advised because configuration may be
|
||||
> expanded over time. Rather organize runtime configuration objects into
|
||||
> their own files and/or directories and include that in the main
|
||||
> configuration file.
|
||||
|
||||
Configuration Syntax
|
||||
====================
|
||||
|
||||
/\* TODO \*/
|
||||
|
||||
Details on the syntax can be found in the chapter
|
||||
icinga2-config-syntax.html[Configuration Syntax]
|
||||
|
||||
Configuration Types
|
||||
===================
|
||||
|
||||
/\* TODO \*/
|
||||
|
||||
Details on the available types can be found in the chapter
|
||||
icinga2-config-types.html[Configuration Types]
|
||||
|
||||
Configuration Templates
|
||||
=======================
|
||||
|
||||
Icinga 2 ships with the **Icinga Template Library (ITL)**. This is a set
|
||||
of predefined templates and definitions available in your actual
|
||||
configuration.
|
||||
|
||||
> **Note**
|
||||
>
|
||||
> Do not change the ITL’s files. They will be overridden on upgrade.
|
||||
> Submit a patch upstream or include your very own configuration
|
||||
> snippet.
|
||||
|
||||
Include the basic ITL set in your main configuration like
|
||||
|
||||
include <itl/itl.conf>
|
||||
|
||||
> **Note**
|
||||
>
|
||||
> Icinga 2 recognizes the ITL’s installation path and looks for that
|
||||
> specific file then.
|
||||
|
||||
Having Icinga 2 installed in standalone mode make sure to include
|
||||
itl/standalone.conf as well (see sample configuration).
|
||||
|
||||
include <itl/standalone.conf>
|
||||
|
||||
/\* vim: set syntax=asciidoc filetype=asciidoc: \*/
|
|
@ -0,0 +1,72 @@
|
|||
Requirements
|
||||
============
|
||||
|
||||
Packages
|
||||
========
|
||||
|
||||
> **Note**
|
||||
>
|
||||
> Use packages whenever possible.
|
||||
|
||||
------------------------------------ ------------------------------------
|
||||
Distribution Package URL
|
||||
Debian TBD
|
||||
RHEL/CentOS TBD
|
||||
SLES TBD
|
||||
------------------------------------ ------------------------------------
|
||||
|
||||
In case you’re running a distribution for which Icinga 2 packages are
|
||||
not yet available download the source tarball and jump to Source Builds.
|
||||
|
||||
Windows Installer
|
||||
=================
|
||||
|
||||
TODO
|
||||
|
||||
Source Builds
|
||||
=============
|
||||
|
||||
Download the source tarball and read the *INSTALL* file for details and
|
||||
requirements.
|
||||
|
||||
Linux Builds
|
||||
------------
|
||||
|
||||
Building from source on specific linux distributions is described on the
|
||||
wiki:
|
||||
[https://wiki.icinga.org/display/icinga2/Linux+Builds](https://wiki.icinga.org/display/icinga2/Linux+Builds)
|
||||
|
||||
Windows Builds
|
||||
--------------
|
||||
|
||||
Icinga 2 ships a MS Visual Studio solution file. Requirements and
|
||||
compilation instructions can be found on the wiki:
|
||||
[https://wiki.icinga.org/display/icinga2/Windows+Builds](https://wiki.icinga.org/display/icinga2/Windows+Builds)
|
||||
|
||||
Installation Locations
|
||||
======================
|
||||
|
||||
------------------------------------ ------------------------------------
|
||||
Path Description
|
||||
|
||||
/etc/icinga2 Contains Icinga 2 configuration
|
||||
files.
|
||||
|
||||
/etc/init.d/icinga2 The Icinga 2 init script.
|
||||
|
||||
/usr/share/doc/icinga2 Documentation files that come with
|
||||
Icinga 2.
|
||||
|
||||
/usr/share/icinga2/itl The Icinga Template Library.
|
||||
|
||||
/var/run/icinga2 Command pipe and PID file.
|
||||
|
||||
/var/cache/icinga2 Performance data files and
|
||||
status.dat/objects.cache.
|
||||
|
||||
/var/lib/icinga2 The Icinga 2 state file.
|
||||
------------------------------------ ------------------------------------
|
||||
|
||||
/\* TODO \*/
|
||||
|
||||
/\* vim: set syntax=asciidoc filetype=asciidoc: \*/
|
|
@ -0,0 +1,268 @@
|
|||
Icinga 2 is a network monitoring application that tries to improve upon
|
||||
the success of Icinga 1.x while fixing some of its shortcomings. A few
|
||||
frequently encountered issues are:
|
||||
|
||||
- Scalability problems in large monitoring setups
|
||||
|
||||
- Difficult configuration with dozens of "magic" tweaks and several
|
||||
ways of defining services
|
||||
|
||||
- Code quality and the resulting inability to implement changes
|
||||
without breaking add-ons
|
||||
|
||||
- Limited access to the runtime state of Icinga (e.g. for querying a
|
||||
service’s state or for dynamically creating new services)
|
||||
|
||||
Fixing these issues would involve major breaking changes to the Icinga
|
||||
1.x core and configuration syntax. Icinga users would likely experience
|
||||
plenty of problems with the Icinga versions introducing these changes.
|
||||
Many of these changes would likely break add-ons which rely on the NEB
|
||||
API and other core internals.
|
||||
|
||||
From a developer standpoint this may be justifiable in order to get to a
|
||||
better end-product. However, for (business) users spending time on
|
||||
getting familiar with these changes for each new version may become
|
||||
quite frustrating and may easily cause users to lose their confidence in
|
||||
Icinga.
|
||||
|
||||
Nagios™ 4 is currently following this approach and it remains to be seen
|
||||
how this fares with its users.
|
||||
|
||||
Instead the Icinga project will maintain two active development
|
||||
branches. There will be one branch for Icinga 1.x which focuses on
|
||||
improving the existing Icinga 1.x code base - just like it has been done
|
||||
so far.
|
||||
|
||||
Independently from Icinga 1.x development on Icinga 2 will happen in a
|
||||
separate branch and some of the long-term design goals will be outlined
|
||||
in this document. Status updates for Icinga 2 will be posted on the
|
||||
project website (www.icinga.org) as they become available.
|
||||
|
||||
Code Quality
|
||||
============
|
||||
|
||||
Icinga 2 will not be using any code from the Icinga 1.x branch due to
|
||||
the rampant code quality issues with the existing code base. However, an
|
||||
important property of the Icinga development process has always been to
|
||||
rely on proven technologies and Icinga 2 will be no exception.
|
||||
|
||||
A lot of effort has gone into designing a maintainable architecture for
|
||||
Icinga 2 and making sure that algorithmic choices are in alignment with
|
||||
our scalability goals for Icinga 2.
|
||||
|
||||
There are plans to implement unit tests for most Icinga 2 features in
|
||||
order to make sure that changes to the code base do not break things
|
||||
that were known to work before.
|
||||
|
||||
Language Choice
|
||||
===============
|
||||
|
||||
Icinga 1.x is written in C and while in general C has quite a number of
|
||||
advantages (e.g. performance and relatively easy portability to other
|
||||
\*NIX- based platforms) some of its disadvantages show in the context of
|
||||
a project that is as large as Icinga.
|
||||
|
||||
With a complex software project like Icinga an object-oriented design
|
||||
helps tremendously with keeping things modular and making changes to the
|
||||
existing code easier.
|
||||
|
||||
While it is true that you can write object-oriented software in C (the
|
||||
Linux kernel is one of the best examples of how to do that) a truly
|
||||
object-oriented language makes the programmers' life just a little bit
|
||||
easier.
|
||||
|
||||
For Icinga 2 we have chosen C++ as the main language. This decision was
|
||||
influenced by a number of criteria including performance, support on
|
||||
different platforms and general user acceptability.
|
||||
|
||||
In general there is nothing wrong with other languages like Java, C\# or
|
||||
Python; however - even when ignoring technical problems for just a
|
||||
moment - in a community as conservative as the monitoring community
|
||||
these languages seem out of place.
|
||||
|
||||
Knowing that users will likely want to run Icinga 2 on older systems
|
||||
(which are still fully vendor-supported even for years to come) we will
|
||||
make every effort to ensure that Icinga 2 can be built and run on
|
||||
commonly used operating systems and refrain from using new and exotic
|
||||
features like C++11.
|
||||
|
||||
Unlike Icinga 1.x there will be Windows support for Icinga 2. Some of
|
||||
the compatibility features (e.g. the command pipe) which rely on \*NIX
|
||||
features may not be supported on Windows but all new features will be
|
||||
designed in such a way as to support \*NIX as well as Windows.
|
||||
|
||||
Configuration
|
||||
=============
|
||||
|
||||
Icinga 1.x has a configuration format that is fully backwards-compatible
|
||||
to the Nagios™ configuration format. This has the advantage of allowing
|
||||
users to easily upgrade their existing Nagios™ installations as well as
|
||||
downgrading if they choose to do so (even though this is generally not
|
||||
the case).
|
||||
|
||||
The Nagios™ configuration format has evolved organically over time and
|
||||
for the most part it does what it’s supposed to do. However this
|
||||
evolutionary process has brought with it a number of problems that make
|
||||
it difficult for new users to understand the full breadth of available
|
||||
options and ways of setting up their monitoring environment.
|
||||
|
||||
Experience with other configuration formats like the one used by Puppet
|
||||
has shown that it is often better to have a single "right" way of doing
|
||||
things rather than having multiple ways like Nagios™ does (e.g. defining
|
||||
host/service dependencies and parent/child relationships for hosts).
|
||||
|
||||
Icinga 2 tries to fix those issues by introducing a new object-based
|
||||
configuration format that is heavily based on templates and supports
|
||||
user-friendly features like freely definable macros.
|
||||
|
||||
External Interfaces
|
||||
===================
|
||||
|
||||
While Icinga 1.x has easily accessible interfaces to its internal state
|
||||
(e.g. status.dat, objects.cache and the command pipe) there is no
|
||||
standards-based way of getting that information.
|
||||
|
||||
For example, using Icinga’s status information in a custom script
|
||||
generally involves writing a parser for the status.dat format and there
|
||||
are literally dozens of Icinga-specific status.dat parsers out there.
|
||||
|
||||
While Icinga 2 will support these legacy interfaces in order to make
|
||||
migration easier and allowing users to use the existing CGIs and
|
||||
whatever other scripts they may have Icinga 2 will focus on providing a
|
||||
unified interface to Icinga’s state and providing similar functionality
|
||||
to that provided by the command pipe in Icinga 1.x. The exact details
|
||||
for such an interface are yet to be determined but this will likely be
|
||||
an RPC interface based on one of the commonly used web-based remoting
|
||||
technologies.
|
||||
|
||||
Icinga 1.x exports historical data using the IDO database interface
|
||||
(Icinga Data Output). Icinga 2 will support IDO in a
|
||||
backwards-compatible fashion in order to support icinga-web.
|
||||
Additionally there will be a newly-designed backend for historical data
|
||||
which can be queried using the built-in API when available. Effort will
|
||||
be put into making this new data source more efficient for use with SLA
|
||||
reporting.
|
||||
|
||||
Icinga 2 will also feature dynamic reconfiguration using the API which
|
||||
means users can create, delete and update any configuration object (e.g.
|
||||
hosts and services) on-the-fly. Based on the API there are plans to
|
||||
implement a command-line configuration tool similar to what Pacemaker
|
||||
has with "crm". Later on this API may also be used to implement
|
||||
auto-discovery for new services.
|
||||
|
||||
The RPC interface may also be used to receive events in real-time, e.g.
|
||||
when service checks are being executed or when a service’s state
|
||||
changes. Some possible uses of this interface would be to export
|
||||
performance data for services (RRD, graphite, etc.) or general log
|
||||
information (logstash, graylog2, etc.).
|
||||
|
||||
Checks
|
||||
======
|
||||
|
||||
In Icinga 2 services are the only checkable objects. Hosts only have a
|
||||
calculated state and no check are ever run for them.
|
||||
|
||||
In order to maintain compatibility with the hundreds of existing check
|
||||
plugins for Icinga 1.x there will be support for Nagios™-style checks.
|
||||
The check interface however will be modular so that support for other
|
||||
kinds of checks can be implemented later on (e.g. built-in checks for
|
||||
commonly used services like PING, HTTP, etc. in order to avoid spawning
|
||||
a process for each check).
|
||||
|
||||
Based on the availability of remote Icinga 2 instances the core can
|
||||
delegate execution of service checks to them in order to support
|
||||
large-scale distributed setups with a minimal amount of maintenance.
|
||||
Services can be assigned to specific check instances using configuration
|
||||
settings.
|
||||
|
||||
Notifications
|
||||
=============
|
||||
|
||||
Event handlers and notifications will be supported similar to Icinga
|
||||
1.x. Thanks to the dynamic configuration it is possible to easily adjust
|
||||
the notification settings at runtime (e.g. in order to implement on-call
|
||||
rotation).
|
||||
|
||||
Scalability
|
||||
===========
|
||||
|
||||
Icinga 1.x has some serious scalability issues which explains why there
|
||||
are several add-ons which try to improve the core’s check performance.
|
||||
One of these add-ons is mod\_gearman which can be used to distribute
|
||||
checks to multiple workers running on remote systems.
|
||||
|
||||
A problem that remains is the performance of the core when processing
|
||||
check results. Scaling Icinga 1.x beyond 25.000 services proves to be a
|
||||
challenging problem and usually involves setting up a cascade of Icinga
|
||||
1.x instances and dividing the service checks between those instances.
|
||||
This significantly increases the maintenance overhead when updating the
|
||||
configuration for such a setup.
|
||||
|
||||
Icinga 2 natively supports setting up multiple Icinga 2 instances in a
|
||||
cluster to distribute work between those instances. Independent tasks
|
||||
(e.g. performing service checks, sending notifications, updating the
|
||||
history database, etc.) are implemented as components which can be
|
||||
loaded for each instance. Configuration as well as program state is
|
||||
automatically replicated between instances.
|
||||
|
||||
In order to support using Icinga 2 in a partially trusted environment
|
||||
SSL is used for all network communication between individual instances.
|
||||
Objects (like hosts and services) can be grouped into security domains
|
||||
for which permissions can be specified on a per-instance basis (so e.g.
|
||||
you can have a separate API or checker instance for a specific domain).
|
||||
|
||||
Agent-based Checks
|
||||
==================
|
||||
|
||||
Traditionally most service checks have been performed actively, meaning
|
||||
that check plugins are executed on the same server that is also running
|
||||
Icinga. This works great for checking most network-based services, e.g.
|
||||
PING and HTTP. However, there are a number of services which cannot be
|
||||
checked remotely either because they are not network-based or because
|
||||
firewall settings or network policies ("no unencrypted traffic")
|
||||
disallow accessing these services from the network where Icinga is
|
||||
running.
|
||||
|
||||
To solve this problem two add-ons have emerged, namely NRPE and NSCA.
|
||||
NRPE can be thought of as a light-weight remote shell which allows the
|
||||
execution of a restricted set of commands while supporting some
|
||||
Nagios™-specific concepts like command timeouts. However unlike with the
|
||||
design of commonly used protocols like SSH security in NRPE is merely an
|
||||
afterthought.
|
||||
|
||||
In most monitoring setups all NRPE agents share the same secret key
|
||||
which is embedded into the NRPE binary at compile time. This means that
|
||||
users can extract this secret key from their NRPE agent binary and use
|
||||
it to query sensitive monitoring information from other systems running
|
||||
the same NRPE binary. NSCA has similar problems.
|
||||
|
||||
Based on Icinga 2’s code for check execution there will be an agent
|
||||
which can be used on \*NIX as well as on Windows platforms. The agent
|
||||
will be using the same configuration format like Icinga 2 itself and
|
||||
will support SSL and IPv4/IPv6 to communicate with Icinga 2.
|
||||
|
||||
Business Processes
|
||||
==================
|
||||
|
||||
In most cases users don’t care about the availability of individual
|
||||
services but rather the aggregated state of multiple related services.
|
||||
For example one might have a database cluster that is used for a web
|
||||
shop. For an end-user the shop is available as long as at least one of
|
||||
the database servers is working.
|
||||
|
||||
Icinga 1.x does not have any support for business processes out of the
|
||||
box. There are several add-ons which implement business process support
|
||||
for Icinga, however none of those are well-integrated into Icinga.
|
||||
|
||||
Icinga 2 will have native support for business processes which are built
|
||||
right into the core and can be configured in a similar manner to
|
||||
Nagios™-style checks. Users can define their own services based on
|
||||
business rules which can be used as dependencies for other hosts or
|
||||
services.
|
||||
|
||||
Logging
|
||||
=======
|
||||
|
||||
Icinga 2 supports file-based logged as well as syslog (on \*NIX) and
|
||||
event log (on Windows). Additionally Icinga 2 supports remote logging to
|
||||
a central Icinga 2 instance.
|
|
@ -0,0 +1,56 @@
|
|||
Introduction
|
||||
============
|
||||
|
||||
A detailed introduction can be found in the chapter
|
||||
[Introduction](icinga2-intro.html). /\* TODO insert url \*/
|
||||
|
||||
Installation
|
||||
============
|
||||
|
||||
For more information see the chapter Installation. /\* TODO insert url
|
||||
\*/
|
||||
|
||||
Quick Example
|
||||
=============
|
||||
|
||||
/\* TODO \*/
|
||||
|
||||
For a general tutorial see the chapter
|
||||
[Tutorial](icinga2-tutorial.html). /\* TODO insert url \*/
|
||||
|
||||
Requirements
|
||||
============
|
||||
|
||||
/\* TODO \*/
|
||||
|
||||
License
|
||||
=======
|
||||
|
||||
Icinga 2 is licensed under the GPLv2 license, a copy of this license can
|
||||
be found in the LICENSE file on the main source tree.
|
||||
|
||||
Community
|
||||
=========
|
||||
|
||||
- [\#icinga](http://webchat.freenode.net/?channels=icinga) on the
|
||||
Freenode IRC Network
|
||||
|
||||
- [Mailinglists](https://lists.sourceforge.net/lists/listinfo/icinga-users)
|
||||
|
||||
- [Monitoring Portal](http://www.monitoring-portal.org)
|
||||
|
||||
More details at
|
||||
[http://www.icinga.org/support/](http://www.icinga.org/support/)
|
||||
|
||||
Support
|
||||
=======
|
||||
|
||||
For more information on the support options refer to
|
||||
[https://www.icinga.org/support](https://www.icinga.org/support)
|
||||
|
||||
Chapters
|
||||
========
|
||||
|
||||
/\* TODO \*/
|
||||
|
||||
/\* vim: set syntax=asciidoc filetype=asciidoc: \*/
|
|
@ -0,0 +1,36 @@
|
|||
Purpose
|
||||
=======
|
||||
|
||||
Documentation on the general migration from Icinga 1.x to Icinga 2.
|
||||
|
||||
Requirements
|
||||
============
|
||||
|
||||
Multi-core cpu, ram, fast disks.
|
||||
|
||||
Installation
|
||||
============
|
||||
|
||||
Icinga 1.x and Icinga 2 may run side by side, but it’s recommended to
|
||||
backup your existing 1.x installation before installing Icinga 2 on the
|
||||
same host.
|
||||
|
||||
Compatibility
|
||||
=============
|
||||
|
||||
> **Note**
|
||||
>
|
||||
> The configuration format changed from 1.x to 2.x. Don’t panic though.
|
||||
> A conversion script is shipped in *tools/configconvert* - please check
|
||||
> the *README* file.
|
||||
|
||||
For details check the chapter [Compatibility](icinga2-compat.html).
|
||||
|
||||
Changes
|
||||
=======
|
||||
|
||||
For details check the chapter [Changes](icinga2-compat.html).
|
||||
|
||||
TODO
|
||||
|
||||
/\* vim: set syntax=asciidoc filetype=asciidoc: \*/
|
|
@ -0,0 +1,811 @@
|
|||
Preface
|
||||
=======
|
||||
|
||||
This tutorial is a step-by-step introduction to installing Icinga 2 and
|
||||
setting up your first couple of service checks. It assumes some
|
||||
familiarity with Icinga 1.x.
|
||||
|
||||
Installation
|
||||
============
|
||||
|
||||
In order to get started with Icinga 2 we will have to install it. The
|
||||
preferred way of doing this is to use the official Debian or RPM
|
||||
packages depending on which Linux distribution you are running.
|
||||
|
||||
------------------------------------ ------------------------------------
|
||||
Distribution Package URL
|
||||
|
||||
Debian [http://icingabuild.dus.dg-i.net:808
|
||||
0/job/icinga2/](http://icingabuild.d
|
||||
us.dg-i.net:8080/job/icinga2/)
|
||||
|
||||
RHEL TBD
|
||||
------------------------------------ ------------------------------------
|
||||
|
||||
In case you’re running a distribution for which Icinga 2 packages are
|
||||
not yet available you will have to check out the Icinga 2 Git repository
|
||||
from git://git.icinga.org/icinga2 and read the *INSTALL* file.
|
||||
|
||||
By default Icinga 2 uses the following files and directories:
|
||||
|
||||
------------------------------------ ------------------------------------
|
||||
Path Description
|
||||
|
||||
/etc/icinga2 Contains Icinga 2 configuration
|
||||
files.
|
||||
|
||||
/etc/init.d/icinga2 The Icinga 2 init script.
|
||||
|
||||
/usr/share/doc/icinga2 Documentation files that come with
|
||||
Icinga 2.
|
||||
|
||||
/usr/share/icinga2/itl The Icinga Template Library.
|
||||
|
||||
/var/run/icinga2 Command pipe and PID file.
|
||||
|
||||
/var/cache/icinga2 Performance data files and
|
||||
status.dat/objects.cache.
|
||||
|
||||
/var/lib/icinga2 The Icinga 2 state file.
|
||||
------------------------------------ ------------------------------------
|
||||
|
||||
Our First Service Check
|
||||
=======================
|
||||
|
||||
The Icinga 2 package comes with a number of example configuration files.
|
||||
However, in order to explain some of the basics we’re going write our
|
||||
own configuration file from scratch.
|
||||
|
||||
Start by creating the file /etc/icinga2/icinga2.conf with the following
|
||||
content:
|
||||
|
||||
include <itl/itl.conf>
|
||||
include <itl/standalone.conf>
|
||||
|
||||
object IcingaApplication "my-icinga" {
|
||||
macros["plugindir"] = "/usr/lib/nagios/plugins"
|
||||
}
|
||||
|
||||
The configuration snippet includes the *itl/itl.conf* and
|
||||
*itl/standalone.conf* files which are distributed as part of Icinga 2.
|
||||
We will discuss the Icinga Template Library (ITL) in more detail later
|
||||
on.
|
||||
|
||||
The *itl/standalone.conf* configuration file takes care of configuring
|
||||
Icinga 2 for single-instance (i.e. non-clustered) mode.
|
||||
|
||||
Our configuration file also creates an object of type
|
||||
*IcingaApplication* with the name *my-icinga*. The *IcingaApplication*
|
||||
type can be used to define global macros and some other global settings.
|
||||
|
||||
For now we’re only defining the global macro *plugindir* which we’re
|
||||
going to use later on when referring to the path which contains our
|
||||
check plugins. Depending on where you’ve installed your check plugins
|
||||
you may need to update this path in your configuration file.
|
||||
|
||||
You can verify that your configuration file works by starting Icinga 2:
|
||||
|
||||
$ /usr/bin/icinga2 -c /etc/icinga2/icinga2.conf
|
||||
[2013/04/23 13:36:20 +0200] <Main Thread> information/icinga-app: Icinga application loader (version: 0.0.1, git branch master, commit 0fcbfdb2)
|
||||
[2013/04/23 13:36:20 +0200] <Main Thread> information/base: Adding library search dir: /usr/lib/icinga2
|
||||
[2013/04/23 13:36:20 +0200] <Main Thread> information/base: Loading library 'libicinga.la'
|
||||
[2013/04/23 13:36:20 +0200] <Main Thread> information/config: Adding include search dir: /usr/share/icinga2
|
||||
[2013/04/23 13:36:20 +0200] <Main Thread> information/config: Compiling config file: /etc/icinga2/icinga2.conf
|
||||
[2013/04/23 13:36:20 +0200] <Main Thread> information/config: Linking config items...
|
||||
[2013/04/23 13:36:20 +0200] <Main Thread> information/config: Validating config items...
|
||||
[2013/04/23 13:36:20 +0200] <Main Thread> information/config: Activating config items in compilation unit 'b2d21c28-a2e8-4fcb-ba00-45646bc1afb9'
|
||||
[2013/04/23 13:36:20 +0200] <Main Thread> information/base: Restoring program state from file '/var/lib/icinga2/icinga2.state'
|
||||
[2013/04/23 13:36:20 +0200] <Main Thread> information/base: Restored 0 objects
|
||||
|
||||
In case there are any configuration errors Icinga 2 should print error
|
||||
messages containing details about what went wrong.
|
||||
|
||||
You can stop Icinga 2 with Control-C:
|
||||
|
||||
^C
|
||||
[2013/04/23 13:39:39 +0200] <TP 0x7f2e9070f500 Worker #0> information/base: Shutting down Icinga...
|
||||
[2013/04/23 13:39:39 +0200] <TP 0x7f2e9070f500 Worker #0> information/base: Dumping program state to file '/var/lib/icinga2/icinga2.state'
|
||||
[2013/04/23 13:39:39 +0200] <Main Thread> information/icinga: Icinga has shut down.
|
||||
$
|
||||
|
||||
Icinga 2 automatically saves its current state every couple of minutes
|
||||
and when it’s being shut down.
|
||||
|
||||
So far our Icinga 2 setup doesn’t do much. Lets change that by setting
|
||||
up a service check for localhost. Modify your *icinga2.conf*
|
||||
configuration file by adding the following lines:
|
||||
|
||||
object CheckCommand "my-ping" inherits "plugin-check-command" {
|
||||
command = [
|
||||
"$plugindir$/check_ping",
|
||||
"-H", "$address$",
|
||||
"-w", "10,5%",
|
||||
"-c", "25,10%"
|
||||
]
|
||||
}
|
||||
|
||||
template Service "my-ping" inherits "plugin-service" {
|
||||
check_command = "my-ping"
|
||||
}
|
||||
|
||||
object Host "localhost" {
|
||||
display_name = "Home, sweet home!",
|
||||
|
||||
services["ping"] = {
|
||||
templates = [ "my-ping" ]
|
||||
},
|
||||
|
||||
macros = {
|
||||
address = "127.0.0.1"
|
||||
},
|
||||
|
||||
check_interval = 10s,
|
||||
|
||||
hostcheck = "ping"
|
||||
}
|
||||
|
||||
We’re defining a command object called "my-ping" which inherits from the
|
||||
*plugin-check-command* template. The *plugin-check-command* template is
|
||||
provided as part of the Icinga Template Library and describes how checks
|
||||
are performed. In the case of plugin-based services this means that the
|
||||
command specified by the *command* property is executed.
|
||||
|
||||
The *command* property is an array or command-line arguments for the
|
||||
check plugin. Alternatively you can specify the check command as a
|
||||
string.
|
||||
|
||||
The check command can make use of macros. Unlike in Icinga 1.x we have
|
||||
free-form macros which means that users can choose arbitrary names for
|
||||
their macros.
|
||||
|
||||
By convention the following macros are usually used:
|
||||
|
||||
------------------------------------ ------------------------------------
|
||||
Macro Description
|
||||
plugindir The path of your check plugins.
|
||||
address The IPv4 address of the host.
|
||||
address6 The IPv6 address of the host.
|
||||
------------------------------------ ------------------------------------
|
||||
|
||||
Note that the *my-ping* command object does not define a value for the
|
||||
*address* macro. This is perfectly fine as long as that macro is defined
|
||||
somewhere else (e.g. in the host).
|
||||
|
||||
We’re also defining a service template called *my-ping* which uses the
|
||||
command object we just created.
|
||||
|
||||
Next we’re defining a *Host* object called *localhost*. We’re setting an
|
||||
optional display\_name which is used by the Icinga Classic UI when
|
||||
showing that host in the host overview.
|
||||
|
||||
The services dictionary defines which services belong to a host. Using
|
||||
the [] indexing operator we can manipulate individual items in this
|
||||
dictionary. In this case we’re creating a new service called *ping*.
|
||||
|
||||
The templates array inside the service definition lists all the
|
||||
templates we want to use for this particular service. For now we’re just
|
||||
listing our *my-ping* template.
|
||||
|
||||
Remember how we used the *address* macro in the *command* setting
|
||||
earlier? Now we’re defining a value for this macro which is used for all
|
||||
services and their commands which belong to the *localhost* Host object.
|
||||
|
||||
We’re also setting the check\_interval for all services belonging to
|
||||
this host to 10 seconds.
|
||||
|
||||
> **Note**
|
||||
>
|
||||
> When you don’t specify an explicit time unit Icinga 2 automatically
|
||||
> assumes that you meant seconds.
|
||||
|
||||
And finally we’re specifying which of the services we’ve created before
|
||||
is used to define the host’s state. Note that unlike in Icinga 1.x this
|
||||
just "clones" the service’s state and does not cause any additional
|
||||
checks to be performed.
|
||||
|
||||
Setting up the Icinga 1.x Classic UI
|
||||
====================================
|
||||
|
||||
Icinga 2 can write status.dat and objects.cache files in the format that
|
||||
is supported by the Icinga 1.x Classic UI. External commands (a.k.a. the
|
||||
"command pipe") are also supported. If you require the icinga.log for
|
||||
history views and/or reporting in Classic UI, this can be added
|
||||
seperately to the CompatComponent object definition by adding a
|
||||
CompatLog object.
|
||||
|
||||
In order to enable this feature you will need to load the library
|
||||
*compat* by adding the following lines to your configuration file:
|
||||
|
||||
library "compat"
|
||||
|
||||
object CompatComponent "compat" { }
|
||||
object CompatLog "my-log" { }
|
||||
|
||||
After restarting Icinga 2 you should be able to find the status.dat and
|
||||
objects.cache files in /var/cache/icinga2. The log files can be found in
|
||||
/var/log/icinga2/compat. The command pipe can be found in
|
||||
/var/run/icinga2.
|
||||
|
||||
You can install the Icinga 1.x Classic UI in standalone mode using the
|
||||
following commands:
|
||||
|
||||
$ wget http://downloads.sourceforge.net/project/icinga/icinga/1.9.0/icinga-1.9.0.tar.gz
|
||||
$ tar xzf icinga-1.9.0.tar.gz ; cd icinga-1.9.0
|
||||
$ ./configure --enable-classicui-standalone --prefix=/usr/local/icinga2-classicui
|
||||
$ make classicui-standalone
|
||||
$ sudo make install classicui-standalone install-webconf-auth
|
||||
$ sudo service apache2 restart
|
||||
|
||||
> **Note**
|
||||
>
|
||||
> A detailed guide on installing Icinga 1.x Classic UI Standalone can be
|
||||
> found on the Icinga Wiki here:
|
||||
> [https://wiki.icinga.org/display/howtos/Setting+up+Icinga+Classic+UI+Standalone](https://wiki.icinga.org/display/howtos/Setting+up+Icinga+Classic+UI+Standalone)
|
||||
|
||||
After installing the Classic UI you will need to update the following
|
||||
settings in your cgi.cfg configuration file at the bottom (section
|
||||
"STANDALONE (ICINGA 2) OPTIONS"):
|
||||
|
||||
------------------------------------ ------------------------------------
|
||||
Configuration Setting Value
|
||||
object\_cache\_file /var/cache/icinga2/objects.cache
|
||||
status\_file /var/cache/icinga2/status.dat
|
||||
resource\_file -
|
||||
command\_file /var/run/icinga2/icinga2.cmd
|
||||
check\_external\_commands 1
|
||||
interval\_length 60
|
||||
status\_update\_interval 10
|
||||
log\_file /var/log/icinga2/compat/icinga.log
|
||||
log\_rotation\_method h
|
||||
log\_archive\_path /var/log/icinga2/compat/archives
|
||||
date\_format us
|
||||
------------------------------------ ------------------------------------
|
||||
|
||||
Depending on how you installed Icinga 2 some of those paths and options
|
||||
might be different.
|
||||
|
||||
> **Note**
|
||||
>
|
||||
> You need to grant permissions for the apache user manually after
|
||||
> starting Icinga 2 for now.
|
||||
|
||||
# chmod o+rwx /var/run/icinga2/{icinga2.cmd,livestatus}
|
||||
|
||||
Verify that your Icinga 1.x Classic UI works by browsing to your Classic
|
||||
UI installation URL e.g.
|
||||
[http://localhost/icinga](http://localhost/icinga)
|
||||
|
||||
Some More Templates
|
||||
===================
|
||||
|
||||
Now that we’ve got our basic monitoring setup as well as the Icinga 1.x
|
||||
Classic UI to work we can define a second host. Add the following lines
|
||||
to your configuration file:
|
||||
|
||||
object Host "icinga.org" {
|
||||
display_name = "Icinga Website",
|
||||
|
||||
services["ping"] = {
|
||||
templates = [ "my-ping" ]
|
||||
},
|
||||
|
||||
macros = {
|
||||
address = "www.icinga.org"
|
||||
},
|
||||
|
||||
check_interval = 10s,
|
||||
|
||||
hostcheck = "ping"
|
||||
}
|
||||
|
||||
Restart your Icinga 2 instance and check the Classic UI for your new
|
||||
service’s state. Unless you have a low-latency network connection you
|
||||
will note that the service’s state is *CRITICAL*. This is because in the
|
||||
*my-ping* command object we have hard-coded the timeout as 25
|
||||
milliseconds.
|
||||
|
||||
Ideally we’d be able to specify different timeouts for our new service.
|
||||
Using macros we can easily do this.
|
||||
|
||||
> **Note**
|
||||
>
|
||||
> If you’ve used Icinga 1.x before you’re probably familiar with doing
|
||||
> this by passing ARGx macros to your check commands.
|
||||
|
||||
Start by replacing your *my-ping* command object with this:
|
||||
|
||||
object CheckCommand "my-ping" inherits "plugin-check-command" {
|
||||
command = [
|
||||
"$plugindir$/check_ping",
|
||||
"-H", "$address$",
|
||||
"-w", "$wrta$,$wpl$%",
|
||||
"-c", "$crta$,$cpl$%"
|
||||
],
|
||||
|
||||
macros = {
|
||||
wrta = 10,
|
||||
wpl = 5,
|
||||
|
||||
crta = 25,
|
||||
cpl = 10
|
||||
}
|
||||
}
|
||||
|
||||
We have replaced our hard-coded timeout values with macros and we’re
|
||||
providing default values for these same macros right in the template
|
||||
definition. The object inherits the basic check command attributes from
|
||||
the ITL provided template *plugin-check-command*.
|
||||
|
||||
In order to oderride some of these macros for a specific host we need to
|
||||
update our *icinga.org* host definition like this:
|
||||
|
||||
object Host "icinga.org" {
|
||||
display_name = "Icinga Website",
|
||||
|
||||
services["ping"] = {
|
||||
templates = [ "my-ping" ],
|
||||
|
||||
macros += {
|
||||
wrta = 100,
|
||||
crta = 250
|
||||
}
|
||||
},
|
||||
|
||||
macros = {
|
||||
address = "www.icinga.org"
|
||||
},
|
||||
|
||||
check_interval = 10s,
|
||||
|
||||
hostcheck = "ping"
|
||||
}
|
||||
|
||||
The *+=* operator allows us to selectively add new key-value pairs to an
|
||||
existing dictionary. If we were to use the *=* operator instead we would
|
||||
have to provide values for all the macros that are used in the *my-ping*
|
||||
template overriding all values there.
|
||||
|
||||
Icinga Template Library
|
||||
=======================
|
||||
|
||||
The Icinga Template Library is a collection of configuration templates
|
||||
for commonly used services. By default it is installed in
|
||||
*/usr/share/icinga2/itl* and you can include it in your configuration
|
||||
files using the include directive:
|
||||
|
||||
include <itl/itl.conf>
|
||||
|
||||
> **Note**
|
||||
>
|
||||
> Ordinarily you’d use double-quotes for the include path. This way only
|
||||
> paths relative to the current configuration file are considered. The
|
||||
> angle brackets tell Icinga 2 to search its list of global include
|
||||
> directories.
|
||||
|
||||
One of the templates in the ITL is the *ping4* service template which is
|
||||
quite similar to our example objects:
|
||||
|
||||
object CheckCommand "ping4" inherits "plugin-check-command" {
|
||||
command = [
|
||||
"$plugindir$/check_ping",
|
||||
"-4",
|
||||
"-H", "$address$",
|
||||
"-w", "$wrta$,$wpl$%",
|
||||
"-c", "$crta$,$cpl$%",
|
||||
"-p", "$packets$",
|
||||
"-t", "$timeout$"
|
||||
],
|
||||
|
||||
macros = {
|
||||
wrta = 100,
|
||||
wpl = 5,
|
||||
|
||||
crta = 200,
|
||||
cpl = 15,
|
||||
|
||||
packets = 5,
|
||||
timeout = 0
|
||||
}
|
||||
}
|
||||
|
||||
template Service "ping4" {
|
||||
check_command = "ping4"
|
||||
}
|
||||
|
||||
Lets simplify our configuration file by removing our custom *my-ping*
|
||||
template and updating our service definitions to use the *ping4*
|
||||
template instead.
|
||||
|
||||
Include Files
|
||||
=============
|
||||
|
||||
So far we’ve been using just one configuration file. However, once
|
||||
you’ve created a few more host objects and service templates this can
|
||||
get rather confusing.
|
||||
|
||||
Icinga 2 lets you include other files from your configuration file. We
|
||||
can use this feature to make our configuration a bit more modular and
|
||||
easier to understand.
|
||||
|
||||
Lets start by moving our two *Host* objects to a separate configuration
|
||||
file: hosts.conf
|
||||
|
||||
We will also need to tell Icinga 2 that it should include our newly
|
||||
created configuration file when parsing the main configuration file.
|
||||
This can be done by adding the include directive to our *icinga2.conf*
|
||||
file:
|
||||
|
||||
include "hosts.conf"
|
||||
|
||||
Depending on the number of hosts you have it might be useful to split
|
||||
your configuration files based on other criteria (e.g. device type,
|
||||
location, etc.).
|
||||
|
||||
You can use wildcards in the include path in order to refer to multiple
|
||||
files. Assuming you’re keeping your host configuration files in a
|
||||
directory called *hosts* you could include them like this:
|
||||
|
||||
include "hosts/*.conf"
|
||||
|
||||
Notifications
|
||||
=============
|
||||
|
||||
Icinga 2 can send you notifications when your services change state. In
|
||||
order to do this we’re going to write a shell script in
|
||||
*/etc/icinga2/mail-notification.sh* that sends e-mail based
|
||||
notifications:
|
||||
|
||||
#!/bin/sh
|
||||
|
||||
if [ -z "$1" ]; then
|
||||
echo "Syntax: $0 <e-mail>"
|
||||
echo
|
||||
echo "Sends a mail notification to the specified e-mail address."
|
||||
exit 1
|
||||
fi
|
||||
|
||||
mail -s "** $NOTIFICATIONTYPE Service Alert: $HOSTALIAS/$SERVICEDESC is $SERVICESTATE **" $1 <<TEXT
|
||||
***** Icinga *****
|
||||
|
||||
Notification Type: $NOTIFICATIONTYPE
|
||||
|
||||
Service: $SERVICEDESC
|
||||
Host: $HOSTALIAS
|
||||
Address: $address
|
||||
State: $SERVICESTATE
|
||||
|
||||
Date/Time: $LONGDATETIME
|
||||
|
||||
Additional Info:
|
||||
|
||||
$SERVICEOUTPUT
|
||||
TEXT
|
||||
|
||||
exit 0
|
||||
|
||||
Our shell script uses a couple of pre-defined macros (e.g. SERVICEDESC,
|
||||
HOSTALIAS, etc.) that are always available.
|
||||
|
||||
Next we’re going to create a *Notification* template which tells Icinga
|
||||
how to invoke the shell script:
|
||||
|
||||
object NotificationCommand "mail-notification" inherits "plugin-notification-command" {
|
||||
command = [
|
||||
"/etc/icinga2/mail-notification.sh",
|
||||
"$email$"
|
||||
],
|
||||
|
||||
export_macros = [
|
||||
"NOTIFICATIONTYPE",
|
||||
"HOSTALIAS",
|
||||
"SERVICEDESC",
|
||||
"SERVICESTATE",
|
||||
"SERVICEDESC",
|
||||
"address",
|
||||
"LONGDATETIME",
|
||||
"SERVICEOUTPUT"
|
||||
]
|
||||
}
|
||||
|
||||
template Notification "mail-notification" {
|
||||
notification_command = "mail-notification"
|
||||
}
|
||||
|
||||
> **Note**
|
||||
>
|
||||
> Rather than adding these templates to your main configuration file you
|
||||
> might want to create a separate file, e.g. *notifications.conf* and
|
||||
> include it in *icinga2.conf*.
|
||||
|
||||
The *export\_macros* property tells Icinga which macros to export into
|
||||
the environment for the notification script.
|
||||
|
||||
We also need to create a *User* object which Icinga can use to send
|
||||
notifications to specific people:
|
||||
|
||||
object User "tutorial-user" {
|
||||
display_name = "Some User",
|
||||
|
||||
macros = {
|
||||
email = "tutorial@example.org"
|
||||
}
|
||||
}
|
||||
|
||||
Each time a notification is sent for a service the user’s macros are
|
||||
used when resolving the macros we used in the *Notification* template.
|
||||
|
||||
In the next step we’re going to create a *Service* template which
|
||||
specifies who notifications should be sent to:
|
||||
|
||||
template Service "mail-notification-service" {
|
||||
notifications["mail"] = {
|
||||
templates = [ "mail-notification" ],
|
||||
|
||||
users = [ "tutorial-user" ]
|
||||
},
|
||||
|
||||
notification_interval = 1m
|
||||
}
|
||||
|
||||
And finally we can assign this new service template to our services:
|
||||
|
||||
...
|
||||
services["ping"] = {
|
||||
templates = [ "ping4", "mail-notification-service" ]
|
||||
},
|
||||
...
|
||||
|
||||
In addition to defining notifications for individual services it is also
|
||||
possible to assign notification templates to all services of a host. You
|
||||
can find more information about how to do that in the documentation.
|
||||
|
||||
> **Note**
|
||||
>
|
||||
> Escalations in Icinga 2 are just a notification, only added a defined
|
||||
> begin and end time. Check the documentation for details.
|
||||
|
||||
Time Periods
|
||||
============
|
||||
|
||||
Time periods allow you to specify when certain services should be
|
||||
checked and when notifications should be sent.
|
||||
|
||||
Here is an example time period definition:
|
||||
|
||||
object TimePeriod "work-hours" inherits "legacy-timeperiod" {
|
||||
ranges = {
|
||||
monday = "9:00-17:00",
|
||||
tuesday = "9:00-17:00",
|
||||
wednesday = "9:00-17:00",
|
||||
thursday = "9:00-17:00",
|
||||
friday = "9:00-17:00",
|
||||
}
|
||||
}
|
||||
|
||||
The *legacy-timeperiod* template is defined in the Icinga Template
|
||||
Library and supports Icinga 1.x time periods. A complete definition of
|
||||
the time Icinga 1.x time period syntax can be found at
|
||||
[http://docs.icinga.org/latest/en/objectdefinitions.html\#timeperiod](http://docs.icinga.org/latest/en/objectdefinitions.html#timeperiod).
|
||||
|
||||
Using the *check\_period* attribute you can define when services should
|
||||
be checked:
|
||||
|
||||
...
|
||||
services["ping"] = {
|
||||
templates = [ "ping4", "mail-notification-service" ],
|
||||
check_period = "work-hours"
|
||||
},
|
||||
...
|
||||
|
||||
Also, using the *notification\_period* attribute you can define when
|
||||
notifications should be sent:
|
||||
|
||||
template Service "mail-notification-service" {
|
||||
notifications["mail"] = {
|
||||
templates = [ "mail-notification" ],
|
||||
|
||||
users = [ "tutorial-user" ]
|
||||
},
|
||||
|
||||
notification_interval = 1m,
|
||||
notification_period = "work-hours"
|
||||
}
|
||||
|
||||
The *notification\_period* attribute is also valid in *User* and
|
||||
*Notification* objects.
|
||||
|
||||
Dependencies
|
||||
============
|
||||
|
||||
If you are familiar with Icinga 1.x host/service dependencies and
|
||||
parent/child relations on hosts, you might want to look at the
|
||||
conversion script in order to convert your existing configuration. There
|
||||
are no separate dependency objects anymore, and no separate parent
|
||||
attribute either.
|
||||
|
||||
Using Icinga 2, we can directly define a dependency in the current host
|
||||
or service object to any other host or service object. If we want other
|
||||
objects to inherit those dependency attributes, we can also define them
|
||||
in a template.
|
||||
|
||||
In the following example we’ve added a cluster host with the service
|
||||
*ping* which we are going to define a dependency for in another host.
|
||||
|
||||
template Service "my-cluster-ping" {
|
||||
check_command = "my-ping",
|
||||
}
|
||||
|
||||
object Host "my-cluster" {
|
||||
...
|
||||
services["ping"] = {
|
||||
templates = [ "my-cluster-ping" ],
|
||||
}
|
||||
...
|
||||
}
|
||||
|
||||
We can now define a service dependency as new service template (or
|
||||
directly on the service definition):
|
||||
|
||||
template Service "my-cluster-dependency" {
|
||||
servicedependencies = [
|
||||
{ host = "my-cluster", service = "ping" },
|
||||
],
|
||||
}
|
||||
|
||||
Now let’s use that template for the *ping* service we’ve defined
|
||||
previously and assign the servicedependencies to that service.
|
||||
|
||||
...
|
||||
services["ping"] = {
|
||||
templates = [ "ping4", "mail-notification-service", "my-cluster-dependency" ],
|
||||
},
|
||||
...
|
||||
|
||||
Performance Data
|
||||
================
|
||||
|
||||
Because there are no host checks in Icinga 2, the PerfdataWriter object
|
||||
will only write service performance data files. Creating the object will
|
||||
allow you to set the perfdata\_path, format\_template and
|
||||
rotation\_interval. The format template is similar to existing Icinga
|
||||
1.x configuration for PNP or inGraph using macro formatted strings.
|
||||
|
||||
Details on the common Icinga 1.x macros can be found at
|
||||
[http://docs.icinga.org/latest/en/macrolist.html](http://docs.icinga.org/latest/en/macrolist.html)
|
||||
|
||||
> **Note**
|
||||
>
|
||||
> You can define multiple PerfdataWriter objects with different
|
||||
> configuration settings, i.e. one for PNP, one for inGraph or your
|
||||
> preferred graphite collector.
|
||||
|
||||
Let’s create a new PNP PerfdataWriter object:
|
||||
|
||||
object PerfdataWriter "pnp" {
|
||||
perfdata_path = "/var/lib/icinga2/service-perfdata",
|
||||
format_template = "DATATYPE::SERVICEPERFDATA\tTIMET::$TIMET$\tHOSTNAME::$HOSTNAME$\tSERVICEDESC::$SERVICEDESC$\tSERVICEPERFDATA::$SERVICEPERFDATA$\tSERVICECHECKCOMMAND::$SERVICECHECKCOMMAND$\tHOSTSTATE::$HOSTSTATE$\tHOSTSTATETYPE::$HOSTSTATETYPE$\tSERVICESTATE::$SERVICESTATE$\tSERVICESTATETYPE::$SERVICESTATETYPE$",
|
||||
rotation_interval = 15s,
|
||||
}
|
||||
|
||||
You may need to reconfigure your NPCD daemon with the correct path for
|
||||
your performance data files. This can be done in the PNP configuration
|
||||
file npcd.cfg:
|
||||
|
||||
perfdata_spool_dir = /var/lib/icinga2/
|
||||
|
||||
Livestatus Component
|
||||
====================
|
||||
|
||||
The Livestatus component will provide access to Icinga 2 using the
|
||||
livestatus api. In addition to the unix socket Icinga 2 also service
|
||||
livestatus directly via tcp socket.
|
||||
|
||||
> **Note**
|
||||
>
|
||||
> Only config and status tables are available at this time. History
|
||||
> tables such as log, statehist will follow.
|
||||
|
||||
Once Icinga 2 is started, configure your gui (e.g. Thruk) using the
|
||||
livestatus backend.
|
||||
|
||||
TCP Socket
|
||||
|
||||
library "livestatus"
|
||||
object LivestatusComponent "livestatus-tcp" {
|
||||
socket_type = "tcp",
|
||||
host = "10.0.10.18",
|
||||
port = "6558"
|
||||
}
|
||||
|
||||
Unix Socket
|
||||
|
||||
library "livestatus"
|
||||
object LivestatusComponent "livestatus-unix" {
|
||||
socket_type = "unix",
|
||||
socket_path = "/var/run/icinga2/livestatus"
|
||||
}
|
||||
|
||||
> **Note**
|
||||
>
|
||||
> You need to grant permissions for the apache user manually after
|
||||
> starting Icinga 2 for now.
|
||||
|
||||
# chmod o+rwx /var/run/icinga2/{icinga2.cmd,livestatus}
|
||||
|
||||
IDO Database Component
|
||||
======================
|
||||
|
||||
The IDO component will write to the same database backend as known from
|
||||
Icinga 1.x IDOUtils. Therefore you’ll need to have your database schema
|
||||
and users already installed, like described in
|
||||
[http://docs.icinga.org/latest/en/quickstart-idoutils.html\#createidoutilsdatabase](http://docs.icinga.org/latest/en/quickstart-idoutils.html#createidoutilsdatabase)
|
||||
|
||||
> **Note**
|
||||
>
|
||||
> Currently there’s only MySQL support in progress, Postgresql, Oracle
|
||||
> tbd.
|
||||
|
||||
Configure the IDO MySQL component with the defined credentials and start
|
||||
Icinga 2.
|
||||
|
||||
> **Note**
|
||||
>
|
||||
> Make sure to define a unique instance\_name. That way the Icinga 2 IDO
|
||||
> component will not interfere with your Icinga 1.x setup, if existing.
|
||||
|
||||
library "ido_mysql"
|
||||
object IdoMysqlDbConnection "my-ido-mysql" {
|
||||
host = "127.0.0.1",
|
||||
port = "3306",
|
||||
user = "icinga",
|
||||
password = "icinga",
|
||||
database = "icinga",
|
||||
table_prefix = "icinga_",
|
||||
instance_name = "icinga2",
|
||||
instance_description = "icinga2 instance"
|
||||
}
|
||||
|
||||
Starting Icinga 2 in debug mode in foreground using -x will show all
|
||||
database queries.
|
||||
|
||||
Custom Attributes
|
||||
=================
|
||||
|
||||
In Icinga 1.x there were so-called "custom variables" available prefixed
|
||||
with an underscore, as well as plenty of other attributes such as
|
||||
action\_url, notes\_url, icon\_image, etc. To overcome the limitations
|
||||
of hardcoded custom attributes, Icinga 2 ships with the *custom*
|
||||
attribute as dictionary.
|
||||
|
||||
For example, if you have PNP installed we could add a reference url to
|
||||
Icinga Classic UI by using the classic method of defining an
|
||||
action\_url.
|
||||
|
||||
template Service "my-pnp-svc" {
|
||||
custom = {
|
||||
action_url = "/pnp4nagios/graph?host=$HOSTNAME$&srv=$SERVICEDESC$' class='tips' rel='/pnp4nagios/popup?host=$HOSTNAME$&srv=$SERVICEDESC$",
|
||||
}
|
||||
}
|
||||
|
||||
And add that template again to our service definition:
|
||||
|
||||
...
|
||||
services["ping"] = {
|
||||
templates = [ "ping4", "mail-notification-service", "my-cluster-dependency", "my-pnp-svc" ],
|
||||
},
|
||||
...
|
||||
|
||||
While at it, our configuration tool will add its LDAP DN and a snmp
|
||||
community to the service too, using += for additive attributes:
|
||||
|
||||
...
|
||||
services["ping"] = {
|
||||
templates = [ "ping4", "mail-notification-service", "my-cluster-dependency", "my-pnp-svc" ],
|
||||
custom += {
|
||||
DN = "cn=icinga2-dev-svc,ou=icinga,ou=main,ou=IcingaConfig,ou=LConf,dc=icinga,dc=org",
|
||||
SNMPCOMMUNITY = "public"
|
||||
}
|
||||
},
|
||||
...
|
||||
|
||||
/\* vim: set syntax=asciidoc filetype=asciidoc: \*/
|
File diff suppressed because it is too large
Load Diff
Loading…
Reference in New Issue