Merge branch 'master' into fix/utf8-headers
14
.github/ISSUE_TEMPLATE.md
vendored
@ -1,18 +1,6 @@
|
||||
<!--- Provide a general summary of the issue in the Title above -->
|
||||
|
||||
<!-- If you are reporting a problem or a bug, please ensure to read https://github.com/Icinga/icinga2/blob/master/doc/15-troubleshooting.md first. -->
|
||||
|
||||
<!-- Formatting tips:
|
||||
|
||||
GitHub supports Markdown: https://guides.github.com/features/mastering-markdown/
|
||||
Multi-line code blocks either with three back ticks, or four space indent.
|
||||
|
||||
```
|
||||
object Host "myhost" {
|
||||
...
|
||||
}
|
||||
```
|
||||
-->
|
||||
<!-- If you are reporting a problem or a bug, please ensure to read https://github.com/Icinga/icinga2/blob/master/doc/15-troubleshooting.md first. Formatting tips: GitHub supports Markdown: https://guides.github.com/features/mastering-markdown/ -->
|
||||
|
||||
## Expected Behavior
|
||||
<!--- If you're describing a bug, tell us what should happen -->
|
||||
|
46
.github/ISSUE_TEMPLATE/bug_report.md
vendored
Normal file
@ -0,0 +1,46 @@
|
||||
---
|
||||
name: Bug report
|
||||
about: Create a report to help us improve
|
||||
title: ''
|
||||
labels: ''
|
||||
assignees: ''
|
||||
|
||||
---
|
||||
|
||||
## Describe the bug
|
||||
|
||||
A clear and concise description of what the bug is.
|
||||
|
||||
Please ensure to read https://github.com/Icinga/icinga2/blob/master/doc/15-troubleshooting.md first. Formatting tips: GitHub supports Markdown: https://guides.github.com/features/mastering-markdown/
|
||||
|
||||
## To Reproduce
|
||||
|
||||
Provide a link to a live example, or an unambiguous set of steps to reproduce this bug. Include configuration, logs, etc. to reproduce, if relevant.
|
||||
|
||||
1.
|
||||
2.
|
||||
3.
|
||||
4.
|
||||
|
||||
## Expected behavior
|
||||
|
||||
A clear and concise description of what you expected to happen.
|
||||
|
||||
## Screenshots
|
||||
|
||||
If applicable, add screenshots to help explain your problem.
|
||||
|
||||
## Your Environment
|
||||
|
||||
Include as many relevant details about the environment you experienced the problem in
|
||||
|
||||
* Version used (`icinga2 --version`):
|
||||
* Operating System and version:
|
||||
* Enabled features (`icinga2 feature list`):
|
||||
* Icinga Web 2 version and modules (System - About):
|
||||
* Config validation (`icinga2 daemon -C`):
|
||||
* If you run multiple Icinga 2 instances, the `zones.conf` file (or `icinga2 object list --type Endpoint` and `icinga2 object list --type Zone`) from all affected nodes.
|
||||
|
||||
## Additional context
|
||||
|
||||
Add any other context about the problem here.
|
24
.github/ISSUE_TEMPLATE/feature_request.md
vendored
Normal file
@ -0,0 +1,24 @@
|
||||
---
|
||||
name: Feature request
|
||||
about: Suggest an idea for this project
|
||||
title: ''
|
||||
labels: ''
|
||||
assignees: ''
|
||||
|
||||
---
|
||||
|
||||
## Is your feature request related to a problem? Please describe.
|
||||
|
||||
A clear and concise description of what the problem is. Ex. I'm always using this feature but am missing [...]
|
||||
|
||||
## Describe the solution you'd like
|
||||
|
||||
A clear and concise description of what you want to happen.
|
||||
|
||||
## Describe alternatives you've considered
|
||||
|
||||
A clear and concise description of any alternative solutions or features you've considered.
|
||||
|
||||
## Additional context
|
||||
|
||||
Add any other context or screenshots about the feature request here.
|
26
.gitignore
vendored
@ -1,20 +1,18 @@
|
||||
## Editors
|
||||
.idea/
|
||||
*.komodoproject
|
||||
.*.sw[op]
|
||||
*~
|
||||
# Exclude all hidden files
|
||||
.*
|
||||
|
||||
## C++ and Tools
|
||||
*.patch
|
||||
*.playground
|
||||
.vagrant
|
||||
# Except those related to git and vagrant
|
||||
!.git*
|
||||
!.puppet*
|
||||
!.travis.yml
|
||||
!.mailmap
|
||||
|
||||
## Tools
|
||||
*~
|
||||
tickets.pickle
|
||||
|
||||
## Build artifacts
|
||||
build/
|
||||
build-debug/
|
||||
build-release/
|
||||
build32/
|
||||
build64/
|
||||
build*/
|
||||
debug/
|
||||
release/
|
||||
cmake-build-debug
|
||||
|
15
.mailmap
@ -6,12 +6,17 @@ Gunnar Beutner <gunnar.beutner@icinga.com> <icinga@net-icinga2.adm.netways.de>
|
||||
<michael.friedrich@icinga.com> <Michael.Friedrich@netways.de>
|
||||
Michael Insel <mcktr55@gmail.com> <mcktr55@gmail.com>
|
||||
<tobias.vonderkrone@profitbricks.com> <tobias@vonderkrone.info>
|
||||
Jean Flach <jean-marcel.flach@icinga.com> <jean-marcel.flach@netways.de>
|
||||
Jean Flach <jean-marcel.flach@icinga.com> <Crunsher@users.noreply.github.com>
|
||||
Jean Flach <jean-marcel.flach@icinga.com> Jean Flach <jean-marcel.flach@icinga.com>
|
||||
Diana Flach <diana.flach@icinga.com> <jean-marcel.flach@netways.de>
|
||||
Diana Flach <diana.flach@icinga.com> <Crunsher@users.noreply.github.com>
|
||||
Diana Flach <diana.flach@icinga.com> Jean Flach <jean-marcel.flach@icinga.com>
|
||||
Diana Flach <diana.flach@icinga.com> <crunsher@bamberg.ccc.de>
|
||||
Dolf Schimmel <dolf@transip.nl> <dolf@dolfschimmel.nl>
|
||||
Markus Waldmüller <markus.waldmueller@netways.de>
|
||||
Claudio Kuenzler <ck@claudiokuenzler.com>
|
||||
Carsten Köbke <carsten.koebke@gmx.de> Carsten Koebke <carsten.koebke@koebbes.de>
|
||||
Thomas Gelf <thomas.gelf@icinga.com> <thomas@gelf.net>
|
||||
Michael Insel <mcktr55@gmail.com> <michael@email.de>
|
||||
Michael Insel <mcktr55@gmail.com> <michael@insel.email>
|
||||
<markus.frosch@icinga.com> <markus@lazyfrosch.de>
|
||||
<markus.frosch@icinga.com> <lazyfrosch@icinga.org>
|
||||
<bernd.erk@icinga.com> <bernd.erk@icinga.org>
|
||||
@ -32,3 +37,7 @@ Claudio Kuenzler <ck@claudiokuenzler.com>
|
||||
Marianne Spiller <github@spiller.me>
|
||||
Robin O'Brien <robin@labs.epiuse.com> <robinjohnobrien@gmail.com>
|
||||
<noah.hilverling@icinga.com> <noah@hilverling.com>
|
||||
Jens Schanz <jens.schanz@mueller.de> <mail@jensschanz.de>
|
||||
Jens Schanz <jens.schanz@mueller.de> Schanz, Jens <jens.schanz@mueller.de>
|
||||
Henrik Triem <Henrik.Triem@icinga.com> Henrik Triem <43344334+htriem@users.noreply.github.com>
|
||||
nemtrif <ntrifunovic@hotmail.com> <nemtrif@users.noreply.github.com>
|
||||
|
73
.travis.yml
@ -1,51 +1,42 @@
|
||||
dist: trusty
|
||||
dist: xenial
|
||||
sudo: false
|
||||
|
||||
language: cpp
|
||||
|
||||
cache: ccache
|
||||
|
||||
env:
|
||||
global:
|
||||
# The next declaration is the encrypted COVERITY_SCAN_TOKEN, created
|
||||
# via the "travis encrypt" command using the project repo's public key
|
||||
- secure: "eOnFdiRhB7VUZY7Of4Ff0px93HRWGcD4fXCPiy8V2OC2ER98CYCVw7PKt2Is6i/yTveFTps1kObOo0T03aUT8y/xeBy/wMuJYk1d6mVgmSXOjxcxjQVTUh4J+xB+k/R6FoP2dirNDbvSayCj9Fi9toN9hQHMM8oAZOZfiKmYTJc="
|
||||
|
||||
before_install:
|
||||
- echo -n | openssl s_client -connect scan.coverity.com:443 | sed -ne '/-BEGIN CERTIFICATE-/,/-END CERTIFICATE-/p' | sudo tee -a /etc/ssl/certs/ca-
|
||||
|
||||
addons:
|
||||
apt_packages:
|
||||
- libboost-all-dev
|
||||
- flex
|
||||
- bison
|
||||
- libssl-dev
|
||||
- libpq-dev
|
||||
- libmysqlclient-dev
|
||||
- libedit-dev
|
||||
- libyajl-dev
|
||||
- libwxbase3.0-dev
|
||||
- libwxgtk3.0-dev
|
||||
coverity_scan:
|
||||
project:
|
||||
name: "Icinga/icinga2"
|
||||
notification_email: icinga2@icinga.com
|
||||
build_command_prepend: "cmake . -DCMAKE_BUILD_TYPE=RelWithDebInfo -DCMAKE_INSTALL_PREFIX=/tmp/icinga2 -DICINGA2_PLUGINDIR=/tmp/icinga2/sbin -DICINGA2_UNITY_BUILD=ON"
|
||||
build_command: "make -j 2"
|
||||
branch_pattern: coverity_scan
|
||||
|
||||
apt:
|
||||
sources:
|
||||
- sourceline: 'deb http://packages.icinga.com/ubuntu icinga-xenial main'
|
||||
key_url: 'https://packages.icinga.com/icinga.key'
|
||||
packages:
|
||||
- libboost1.67-icinga-all-dev
|
||||
- flex
|
||||
- bison
|
||||
- libssl-dev
|
||||
- libpq-dev
|
||||
- libmysqlclient-dev
|
||||
- libedit-dev
|
||||
before_script:
|
||||
- if [ "$COVERITY_SCAN_BRANCH" != 1 ]; then
|
||||
mkdir build;
|
||||
cd build;
|
||||
cmake .. -DCMAKE_BUILD_TYPE=Debug -DCMAKE_INSTALL_PREFIX=/tmp/icinga2 -DICINGA2_PLUGINDIR=/tmp/icinga2/sbin;
|
||||
fi
|
||||
- arch=$(uname -m)
|
||||
- mkdir build
|
||||
- cd build
|
||||
- >
|
||||
cmake ..
|
||||
-DCMAKE_BUILD_TYPE=Debug
|
||||
-DICINGA2_UNITY_BUILD=Off
|
||||
-DCMAKE_INSTALL_PREFIX=/tmp/icinga2
|
||||
-DICINGA2_PLUGINDIR=/tmp/icinga2/sbin
|
||||
-DBoost_NO_BOOST_CMAKE=TRUE
|
||||
-DBoost_NO_SYSTEM_PATHS=TRUE
|
||||
-DBOOST_LIBRARYDIR=/usr/lib/${arch}-linux-gnu/icinga-boost
|
||||
-DBOOST_INCLUDEDIR=/usr/include/icinga-boost
|
||||
-DCMAKE_INSTALL_RPATH=/usr/lib/${arch}-linux-gnu/icinga-boost
|
||||
|
||||
script:
|
||||
- if [ "$COVERITY_SCAN_BRANCH" != 1 ]; then
|
||||
make;
|
||||
make test;
|
||||
make install;
|
||||
/tmp/icinga2/sbin/icinga2 --version;
|
||||
/tmp/icinga2/sbin/icinga2 daemon -C -DRunAsUser=$(id -u -n) -DRunAsGroup=$(id -g -n);
|
||||
fi
|
||||
- make
|
||||
- make test
|
||||
- make install
|
||||
- /tmp/icinga2/sbin/icinga2 --version
|
||||
- /tmp/icinga2/sbin/icinga2 daemon -C -DRunAsUser=$(id -u -n) -DRunAsGroup=$(id -g -n)
|
||||
|
75
AUTHORS
@ -1,16 +1,27 @@
|
||||
Aaron Bishop <erroneous@gmail.com>
|
||||
Adam Bolte <abolte@systemsaviour.com>
|
||||
Adam James <adam.james@transitiv.co.uk>
|
||||
Alan Jenkins <alan.christopher.jenkins@gmail.com>
|
||||
Alan Litster <alan.litster@twentyci.co.uk>
|
||||
Alex <alexp710@hotmail.com>
|
||||
Alex Merry <alexander.merry@nanoporetech.com>
|
||||
Alexander A. Klimov <alexander.klimov@icinga.com>
|
||||
Alexander Fuhr <alexander.fuhr@netways.de>
|
||||
Alexander Schomburg <script.acc@alex.schomb.org>
|
||||
Alexander Stoll <astoll@netways.de>
|
||||
Alexander Wirt <formorer@debian.org>
|
||||
Andrea Kao <eirinikos@gmail.com>
|
||||
Andreas Scherbaum <andreas@scherbaum.biz>
|
||||
Andres Ivanov <andres@andres.wtf>
|
||||
Andrew Jaffie <ajaffie@gmail.com>
|
||||
Andrew Meyer <ameyer+secure@nodnetwork.org>
|
||||
Andy Grunwald <andygrunwald@gmail.com>
|
||||
Arnd Hannemann <arnd@arndnet.de>
|
||||
Assaf Flatto <assaf@aikilinux.com>
|
||||
BarbUk <julien.virey@gmail.com>
|
||||
Bas Couwenberg <sebastic@xs4all.nl>
|
||||
Bastian Guse <bguse@nocopy.de>
|
||||
Bauerheim, Marcus <mbauerheim@spirit21.com>
|
||||
Benedikt Heine <bebe@bebehei.de>
|
||||
Bernd Erk <bernd.erk@icinga.com>
|
||||
Berthold Cogel <cogel@uni-koeln.de>
|
||||
@ -29,6 +40,7 @@ Christian Jonak <christian@jonak.org>
|
||||
Christian Lehmann <christian_lehmann@gmx.de>
|
||||
Christian Loos <cloos@netsandbox.de>
|
||||
Christian Schmidt <github@chsc.dk>
|
||||
Christopher Schirner <schinken@bamberg.ccc.de>
|
||||
Claudio Bilotta <bilottalove@gmail.com>
|
||||
Claudio Kuenzler <ck@claudiokuenzler.com>
|
||||
Conrad Clement <cclement@printeron.com>
|
||||
@ -36,7 +48,10 @@ Daniel Helgenberger <daniel.helgenberger@m-box.de>
|
||||
Daniel Kesselberg <mail@danielkesselberg.de>
|
||||
Daniil Yaroslavtsev <dyaroslavtsev@confyrm.com>
|
||||
David Beck <techiscool@gmail.com>
|
||||
David Lublink <github.com@spam.lublink.net>
|
||||
Denis <zaharden@gmail.com>
|
||||
Dennis Lichtenthäler <dennis.lichtenthaeler@stiftung-tannenhof.de>
|
||||
Diana Flach <diana.flach@icinga.com>
|
||||
Dinesh Majrekar <dinesh.majrekar@serverchoice.com>
|
||||
Dirk Goetz <dirk.goetz@icinga.com>
|
||||
Dirk Melchers <dirk@dirk-melchers.de>
|
||||
@ -44,10 +59,13 @@ Dolf Schimmel <dolf@transip.nl>
|
||||
Edgar Fuß <ef@math.uni-bonn.de>
|
||||
Eduard Güldner <eduard.gueldner@gmail.com>
|
||||
Edvin Seferovic <edvin@seferovic.net>
|
||||
Elias Ohm <eohm@novomind.com>
|
||||
Eric Lippmann <eric.lippmann@icinga.com>
|
||||
Evgeni Golov <evgeni@golov.de>
|
||||
Ewoud Kohl van Wijngaarden <ewoud@kohlvanwijngaarden.nl>
|
||||
Fabian Röhl <FRoehl@freicon.de>
|
||||
Federico Cuello <federico.cuello@sociomantic.com>
|
||||
Federico Pires <federico.pires@upsight.com>
|
||||
Ferdi Gueran <ferdi.gueran@nextevolution.de>
|
||||
Francesco Colista <fcolista@alpinelinux.org>
|
||||
Gaël Beaudoin <gaboo@gaboo.org>
|
||||
@ -56,41 +74,55 @@ Georg Haas <hax404foogit@hax404.de>
|
||||
Gerd von Egidy <gerd@egidy.de>
|
||||
Gerhardt Roman <roman.gerhardt@cbc-x.com>
|
||||
Glauco Vinicius <gl4uc0@gmail.com>
|
||||
Greg Hewgill <greg@hewgill.com>
|
||||
Gunnar Beutner <gunnar.beutner@icinga.com>
|
||||
Hannes Happle <info@h2-it.de>
|
||||
Hannes Van de Vel <h@nnes.be>
|
||||
Harald Laabs <github@dasr.de>
|
||||
Heike Jurzik <icinga@huhnix.org>
|
||||
Hendrik Röder <hendrik.biz@gmail.com>
|
||||
Henrik Triem <Henrik.Triem@icinga.com>
|
||||
Ian Kelling <ian@iankelling.org>
|
||||
Ildar Hizbulin <hizel@vyborg.ru>
|
||||
Irina Kaprizkina <ikapriz@gmail.com>
|
||||
Jack <jackdev@mailbox.org>
|
||||
James Pharaoh <james@pharaoh.uk>
|
||||
Jan Andres <jan.andres@berenberg.de>
|
||||
Jan Beich <jbeich@FreeBSD.org>
|
||||
Jan Wagner <waja@cyconet.org>
|
||||
Janne Heß <janne@hess.ooo>
|
||||
Jason Young <jason.young@velaspan.com>
|
||||
Jean Flach <jean-marcel.flach@icinga.com>
|
||||
Jean-Louis Dupond <jean-louis@dupond.be>
|
||||
Jens Schanz <mail@jensschanz.de>
|
||||
Jens Link <jenslink@quux.de>
|
||||
Jens Schanz <jens.schanz@mueller.de>
|
||||
Jeon Sang Wan <maxswjeon@naver.com>
|
||||
Jeremy Armstrong <lepubel@gmail.com>
|
||||
Jesse Morgan <morgajel@gmail.com>
|
||||
Jo Goossens <jo.goossens@hosted-power.com>
|
||||
Johannes Meyer <johannes.meyer@icinga.com>
|
||||
Jonas Meurer <jonas@freesources.org>
|
||||
Jordi van Scheijen <jordi.vanscheijen@solvinity.com>
|
||||
Joseph L. Casale <jcasale@activenetwerx.com>
|
||||
Julian Brost <julian@0x4a42.net>
|
||||
Jérôme Drouet <jerome.drouet@gmail.com>
|
||||
K0nne <34264690+K0nne@users.noreply.github.com>
|
||||
Kai Goller <kai.goller@netways.de>
|
||||
Konstantin Kelemen <konstantin@kel.mn>
|
||||
Kálmán Szalai - KAMI <kami911@gmail.com>
|
||||
Kálmán „KAMI” Szalai <kami911@gmail.com>
|
||||
Lars Engels <lars.engels@0x20.net>
|
||||
Lars Krüger <krueger-lars@web.de>
|
||||
Leah Oswald <mail@leahoswald.de>
|
||||
Lee Clemens <java@leeclemens.net>
|
||||
Lee Garrett <lgarrett@rocketjump.eu>
|
||||
Lennart Betz <lennart.betz@icinga.com>
|
||||
lihan <tclh123@gmail.com>
|
||||
Leon Stringer <leon@priorsvle.com>
|
||||
Louis Sautier <sautier.louis@gmail.com>
|
||||
Luca Lesinigo <luca@lm-net.it>
|
||||
Lucas Bremgartner <breml@users.noreply.github.com>
|
||||
Lucas Fairchild-Madar <lucas.madar@gmail.com>
|
||||
Luiz Amaral <luiz.amaral@innogames.com>
|
||||
Magnus Bäck <magnus@noun.se>
|
||||
Malte Rabenseifner <mail@malte-rabenseifner.de>
|
||||
Manuel Reiter <reiter@csc.uni-frankfurt.de>
|
||||
Marcus van Dam <marcus@marcusvandam.nl>
|
||||
@ -98,37 +130,48 @@ MarcusCaepio <MarcusCaepio@users.noreply.github.com>
|
||||
Marianne Spiller <github@spiller.me>
|
||||
Marius Bergmann <marius@yeai.de>
|
||||
Marius Sturm <marius@graylog.com>
|
||||
Mark Leary <mleary@mit.edu>
|
||||
Markus Frosch <markus.frosch@icinga.com>
|
||||
Markus Waldmüller <markus.waldmueller@netways.de>
|
||||
Martijn van Duren <m.vanduren@itisit.nl>
|
||||
Martin Neubert <martin.neubert@t-systems.com>
|
||||
Martin Stiborsky <martin.stiborsky@gmail.com>
|
||||
Mathieu Arnold <mat@mat.cc>
|
||||
Mathieu Lutfy <mathieu@bidon.ca>
|
||||
Matthaus Owens <matthaus@puppetlabs.com>
|
||||
Matthias Schales <black-dragon131@web.de>
|
||||
Maurice Meyer <morre@mor.re>
|
||||
Max Deparade <max.deparade@netways.de>
|
||||
Max Rosin <git@hackrid.de>
|
||||
Max Zhang <zhenzhan@tibco.com>
|
||||
Maximilian Falkenstein <maxf@njsm.de>
|
||||
Mhd Sulhan <ms@kilabit.info>
|
||||
Micha Ahrweiler <me@schnitzi.net>
|
||||
Michael Friedrich <michael.friedrich@icinga.com>
|
||||
Michael Insel <mcktr55@gmail.com>
|
||||
Michael Insel <michael@insel.email>
|
||||
Michael Kraus <michael.kraus@consol.de>
|
||||
Michael Newton <miken32@gmail.com>
|
||||
Michal Moravec <michal.moravec@macadmin.cz>
|
||||
Michal Petko <michal.petko@jumpshot.com>
|
||||
Mikesch-mp <mikesch-mp@koebbes.de>
|
||||
Mirco Bauer <meebey@meebey.net>
|
||||
Mirko Nardin <mirko.nardin@gmx.net>
|
||||
Muhammad Mominul Huque <nahidbinbaten1995@gmail.com>
|
||||
Nemanja Trifunovic <ntrifunovic@hotmail.com>
|
||||
Nicolai <nbuchwitz@users.noreply.github.com>
|
||||
Nicolas Limage <github@xephon.org>
|
||||
Nicole Lang <nicole.lang@icinga.com>
|
||||
Niflou <dubuscyr@gmail.com>
|
||||
Noah Hilverling <noah.hilverling@icinga.com>
|
||||
Obihörnchen <obihoernchende@gmail.com>
|
||||
Oleg Artenii <oleg@artenii.email>
|
||||
Pall Sigurdsson <palli-github@minor.is>
|
||||
Paolo Schiro <paolo.schiro@kpnqwest.it>
|
||||
Patrick Huy <frz@frz.cc>
|
||||
Paul Richards <paul@minimoo.org>
|
||||
Pawel Szafer <pszafer@gmail.com>
|
||||
Per von Zweigbergk <pvz@itassistans.se>
|
||||
Peter Eckel <pe-git@hindenburgring.com>
|
||||
Peter Eckel <pe-icinga2@hindenburgring.com>
|
||||
Petr Ruzicka <petr.ruzicka@gmail.com>
|
||||
Phil Hutchinson <phil@volumedia.co.uk>
|
||||
@ -136,18 +179,23 @@ Philipp Dallig <philipp.dallig@gmail.com>
|
||||
Ralph Breier <ralph.breier@roedl.com>
|
||||
Reto Zeder <reto.zeder@arcade.ch>
|
||||
Ricardo Bartels <ricardo@bitchbrothers.com>
|
||||
Robert Lindgren <robert.lindgren@gmail.com>
|
||||
Robert Scheck <robert@fedoraproject.org>
|
||||
Robin O'Brien <robin@labs.epiuse.com>
|
||||
Roland Hopferwieser <rhopfer@ica.jku.at>
|
||||
Roman Gerhardt <roman.gerhardt@cbc-x.com>
|
||||
Rudy Gevaert <rudy.gevaert@ugent.be>
|
||||
Rune Darrud <theflyingcorpse@gmail.com>
|
||||
Sam Kottler <shk@linux.com>
|
||||
Sascha Westermann <sascha.westermann@hl-services.de>
|
||||
Sebastian Brückner <mail@invlid.com>
|
||||
Sebastian Chrostek <sebastian@chrostek.net>
|
||||
Sebastian Eikenberg <eikese@mail.uni-paderborn.de>
|
||||
Sebastian Marsching <sebastian-git-2016@marsching.com>
|
||||
Simon Murray <spjmurray@yahoo.co.uk>
|
||||
Simon Ruderich <simon@ruderich.org>
|
||||
Siyalrach Anton Thomas <sat@level8.dk>
|
||||
Stefan Bethke <stb@lassitu.de>
|
||||
Stefan Triep <stefan@triep.net>
|
||||
Stefar77 <Stefar77@users.noreply.github.com>
|
||||
Stephan Platz <github@paalsteek.de>
|
||||
@ -156,7 +204,10 @@ Steve McMaster <mcmaster@hurricanelabs.com>
|
||||
Strajan Sebastian Ioan <strajan.sebastian@yahoo.com>
|
||||
Strix <660956+MrStrix@users.noreply.github.com>
|
||||
Sven Nierlein <sven@nierlein.de>
|
||||
Thomas Gelf <thomas@gelf.net>
|
||||
Sven Wegener <swegener@gentoo.org>
|
||||
T. Mulyana <nothinux@gmail.com>
|
||||
Thomas Forrer <thomas.forrer@wuerth-phoenix.com>
|
||||
Thomas Gelf <thomas.gelf@icinga.com>
|
||||
Thomas Niedermeier <tniedermeier@thomas-krenn.com>
|
||||
Thomas Widhalm <thomas.widhalm@icinga.com>
|
||||
Tim Hardeck <thardeck@suse.de>
|
||||
@ -169,19 +220,33 @@ Uwe Ebel <kobmaki@aol.com>
|
||||
Valentin Hoebel <valentin@xenuser.org>
|
||||
Vytenis Darulis <vytenis@uber.com>
|
||||
Wenger Florian <wenger@unifox.at>
|
||||
Will Frey <will.frey@digitalreasoning.com>
|
||||
Winfried Angele <winfried.angele@gmail.com>
|
||||
Wolfgang Nieder <wnd@gmx.net>
|
||||
Yannick Charton <tontonitch-pro@yahoo.fr>
|
||||
Yohan Jarosz <yohanjarosz@yahoo.fr>
|
||||
Zachary McGibbon <zachary.mcgibbon@gmail.com>
|
||||
Zoltan Nagy <abesto@abesto.net>
|
||||
akrus <akrus@flygroup.st>
|
||||
bascarsija <bascarsija.dev@gmail.com>
|
||||
chrostek <sebastian@chrostek.net>
|
||||
cstegm <cstegm@users.noreply.github.com>
|
||||
ctrlaltca <ctrlaltca@gmail.com>
|
||||
dh.harald <dh.harald@gmail.com>
|
||||
dominik-r-s <43005480+dominik-r-s@users.noreply.github.com>
|
||||
fbachmann <bachmann.f@gmail.com>
|
||||
fluxX04 <alexp710@hotmail.com>
|
||||
gitmopp <mopp@gmx.net>
|
||||
htriem <henrik.triem@netways.de>
|
||||
jre3brg <jorge.rebelo@pt.bosch.com>
|
||||
krishna <gskrishna44@gmail.com>
|
||||
lihan <tclh123@gmail.com>
|
||||
marxin <mliska@suse.cz>
|
||||
mocruz <mocruz@theworkshop.com>
|
||||
nemtrif <ntrifunovic@hotmail.com>
|
||||
noobahoi <20069422+noobahoi@users.noreply.github.com>
|
||||
pv2b <pvz@pvz.pp.se>
|
||||
ryanohnemus <ryan.ohnemus@tradingtechnologies.com>
|
||||
sah <sah@mss.secunet.com>
|
||||
teclogi <27726999+teclogi@users.noreply.github.com>
|
||||
Élie Bouttier <elie@bouttier.eu>
|
||||
|
103
BUILD_WINDOWS.md
@ -1,103 +0,0 @@
|
||||
# Build Icinga 2 on Windows
|
||||
|
||||
The Icinga Project is providing Windows MSI packages under https://packages.icinga.com/windows/
|
||||
|
||||
> **Note:**
|
||||
> This is a developer documentation on how to build Icinga 2 on Windows!
|
||||
|
||||
Also see [INSTALL.md](INSTALL.md) for Linux build instructions.
|
||||
|
||||
## Requirements
|
||||
|
||||
* 32 or 64-bit system
|
||||
* Visual Studio >= 14 2015
|
||||
* CMake >= 2.6
|
||||
* OpenSSL >= 1.0.1
|
||||
* Flex and Bison
|
||||
|
||||
## Install Requirements
|
||||
|
||||
**Visual Studio**
|
||||
|
||||
Download from [visualstudio.com](https://www.visualstudio.com/en/downloads/)
|
||||
|
||||
The Community Edition is available for free, and is what we use to build.
|
||||
|
||||
Workloads to install:
|
||||
* C++ Desktop
|
||||
* .NET Desktop
|
||||
|
||||
**OpenSSL for Icinga**
|
||||
|
||||
See our [openssl-windows GitHub project](https://github.com/Icinga/openssl-windows).
|
||||
|
||||
You will need to install a binary dist version to 'C:\\Program Files\\OpenSSL'.
|
||||
|
||||
There is a Powershell script to help you downloading: `.\tools\win32\download-openssl.ps1`
|
||||
|
||||
**Chocolatey**
|
||||
|
||||
A simple package manager for Windows, please see [install instructions](https://chocolatey.org/install).
|
||||
|
||||
**Git**
|
||||
|
||||
Best to use Chocolatey, see [package details](https://chocolatey.org/packages/git).
|
||||
|
||||
```
|
||||
choco install git
|
||||
```
|
||||
|
||||
**Flex / Bison**
|
||||
|
||||
Best to use Chocolatey, see [package details](https://chocolatey.org/packages/winflexbison3).
|
||||
|
||||
```
|
||||
choco install winflexbison3
|
||||
```
|
||||
|
||||
**CMake**
|
||||
|
||||
Best to use Chocolatey, see [package details](https://chocolatey.org/packages/cmake)
|
||||
or download from: [cmake.org](https://cmake.org/download/)
|
||||
|
||||
```
|
||||
choco install cmake
|
||||
```
|
||||
|
||||
**WIX**
|
||||
|
||||
Best to use Chocolatey, see [package details](https://chocolatey.org/packages/wixtoolset).
|
||||
|
||||
```
|
||||
choco install wixtoolset
|
||||
```
|
||||
|
||||
**Boost**
|
||||
|
||||
Download third party Windows binaries from: [boost.org](http://www.boost.org/users/download/)
|
||||
|
||||
For example: `https://dl.bintray.com/boostorg/release/1.65.1/binaries/boost_1_65_1-msvc-14.1-64.exe`
|
||||
|
||||
*Warnings:*
|
||||
* Must match your Visual Studio version!
|
||||
* CMake might not support the latest Boost version (we used CMake 3.10 and Boost 1_65_1)
|
||||
|
||||
Run the installer exe.
|
||||
|
||||
## Build Icinga 2
|
||||
|
||||
Run with VC Native x64 Command Prompt:
|
||||
|
||||
```
|
||||
powershell .\tools\win32\configure.ps1
|
||||
powershell .\tools\win32\build.ps1
|
||||
powershell .\tools\win32\test.ps1
|
||||
```
|
||||
|
||||
See these scripts for details.
|
||||
|
||||
## AppVeyor
|
||||
|
||||
We are building [Icinga 2 with AppVeyor](https://ci.appveyor.com/project/icinga/icinga2) for testing and CI integration.
|
||||
|
||||
Please check `appveyor.yml` for our instructions.
|
880
CHANGELOG.md
@ -1,4 +1,882 @@
|
||||
# Icinga 2.x CHANGELOG
|
||||
# Icinga 2 CHANGELOG
|
||||
|
||||
**The latest release announcements are available on [https://icinga.com/blog/](https://icinga.com/blog/).**
|
||||
|
||||
Please read the [upgrading](https://icinga.com/docs/icinga2/latest/doc/16-upgrading-icinga-2/)
|
||||
documentation before upgrading to a new release.
|
||||
|
||||
Released closed milestones can be found on [GitHub](https://github.com/Icinga/icinga2/milestones?state=closed).
|
||||
|
||||
## 2.11.0 (2019-09-19)
|
||||
|
||||
[Issue and PRs](https://github.com/Icinga/icinga2/issues?utf8=%E2%9C%93&q=milestone%3A2.11.0)
|
||||
|
||||
### Notes
|
||||
|
||||
Upgrading docs: https://icinga.com/docs/icinga2/snapshot/doc/16-upgrading-icinga-2/
|
||||
|
||||
Thanks to all contributors: [Obihoernchen](https://github.com/Icinga/icinga2/pulls?q=is%3Apr+author%3AObihoernchen), [dasJ](https://github.com/Icinga/icinga2/pulls?q=is%3Apr+author%3AdasJ), [sebastic](https://github.com/Icinga/icinga2/pulls?q=is%3Apr+author%3Asebastic), [waja](https://github.com/Icinga/icinga2/pulls?q=is%3Apr+author%3Awaja), [BarbUk](https://github.com/Icinga/icinga2/pulls?q=is%3Apr+author%3ABarbUk), [alanlitster](https://github.com/Icinga/icinga2/pulls?q=is%3Apr+author%3Aalanlitster), [mcktr](https://github.com/Icinga/icinga2/pulls?q=is%3Apr+author%3Amcktr), [KAMI911](https://github.com/Icinga/icinga2/pulls?q=is%3Apr+author%3AKAMI911), [peteeckel](https://github.com/Icinga/icinga2/pulls?q=is%3Apr+author%3Apeteeckel), [breml](https://github.com/Icinga/icinga2/pulls?q=is%3Apr+author%3Abreml), [episodeiv](https://github.com/Icinga/icinga2/pulls?q=is%3Apr+author%3Aepisodeiv), [Crited](https://github.com/Icinga/icinga2/pulls?q=is%3Apr+author%3ACrited), [robert-scheck](https://github.com/Icinga/icinga2/pulls?q=is%3Apr+author%3Arobert-scheck), [west0rmann](https://github.com/Icinga/icinga2/pulls?q=is%3Apr+author%3Awest0rmann), [Napsty](https://github.com/Icinga/icinga2/pulls?q=is%3Apr+author%3ANapsty), [Elias481](https://github.com/Icinga/icinga2/pulls?q=is%3Apr+author%3AElias481), [uubk](https://github.com/Icinga/icinga2/pulls?q=is%3Apr+author%3Auubk), [miso231](https://github.com/Icinga/icinga2/pulls?q=is%3Apr+author%3Amiso231), [neubi4](https://github.com/Icinga/icinga2/pulls?q=is%3Apr+author%3Aneubi4), [atj](https://github.com/Icinga/icinga2/pulls?q=is%3Apr+author%3Aatj), [mvanduren-itisit](https://github.com/Icinga/icinga2/pulls?q=is%3Apr+author%3Amvanduren-itisit), [jschanz](https://github.com/Icinga/icinga2/pulls?q=is%3Apr+author%3Ajschanz), [MaBauMeBad](https://github.com/Icinga/icinga2/pulls?q=is%3Apr+author%3AMaBauMeBad), [markleary](https://github.com/Icinga/icinga2/pulls?q=is%3Apr+author%3Amarkleary), [leeclemens](https://github.com/Icinga/icinga2/pulls?q=is%3Apr+author%3Aleeclemens), [m4k5ym](https://github.com/Icinga/icinga2/pulls?q=is%3Apr+author%3Am4k5ym)
|
||||
|
||||
### Enhancements
|
||||
|
||||
* Core
|
||||
* Rewrite Network Stack (cluster, REST API) based on Boost Asio, Beast, Coroutines
|
||||
* Technical concept: #7041
|
||||
* Requires package updates: Boost >1.66 (either from packages.icinga.com, EPEL or backports). SLES11 & Ubuntu 14 are EOL.
|
||||
* Require TLS 1.2 and harden default cipher list
|
||||
* Improved Reload Handling (umbrella process, now 3 processes at runtime)
|
||||
* Support running Icinga 2 in (Docker) containers natively in foreground
|
||||
* Quality: Use Modern JSON for C++ library instead of YAJL (dead project)
|
||||
* Quality: Improve handling of invalid UTF8 strings
|
||||
* API
|
||||
* Fix crashes on Linux, Unix and Windows from Nessus scans #7431
|
||||
* Locks and stalled waits are fixed with the core rewrite in #7071
|
||||
* schedule-downtime action supports `all_services` for host downtimes
|
||||
* Improve storage handling for runtime created objects in the `_api` package
|
||||
* Cluster
|
||||
* HA aware features & improvements for failover handling #2941 #7062
|
||||
* Improve cluster config sync with staging #6716
|
||||
* Fixed that same downtime/comment objects would be synced again in a cluster loop #7198
|
||||
* Checks & Notifications
|
||||
* Ensure that notifications during a restart are sent
|
||||
* Immediately notify about a problem after leaving a downtime and still NOT-OK
|
||||
* Improve reload handling and wait for features/metrics
|
||||
* Store notification command results and sync them in HA enabled zones #6722
|
||||
* DSL/Configuration
|
||||
* Add getenv() function
|
||||
* Fix TimePeriod range support over midnight
|
||||
* `concurrent_checks` in the Checker feature has no effect, use the global MaxConcurrentChecks constant instead
|
||||
* CLI
|
||||
* Permissions: node wizard/setup, feature, api setup now run in the Icinga user context, not root
|
||||
* `ca list` shows pending CSRs by default, `ca remove/restore` allow to delete signing requests
|
||||
* ITL
|
||||
* Add new commands and missing attributes
|
||||
* Windows
|
||||
* Update bundled NSClient++ to 0.5.2.39
|
||||
* Refine agent setup wizard & update requirements to .NET 4.6
|
||||
* Documentation
|
||||
* Service Monitoring: How to create plugins by example, check commands and a modern version of the supported plugin API with best practices
|
||||
* Features: Better structure on metrics, and supported features
|
||||
* Technical Concepts: TLS Network IO, Cluster Feature HA, Cluster Config Sync
|
||||
* Development: Rewritten for better debugging and development experience for contributors including a style guide. Add nightly build setup instructions.
|
||||
* Packaging: INSTALL.md was integrated into the Development chapter, being available at https://icinga.com/docs too.
|
||||
|
||||
|
||||
|
||||
|
||||
## 2.11.0 RC1 (2019-07-25)
|
||||
|
||||
[Issue and PRs](https://github.com/Icinga/icinga2/issues?utf8=%E2%9C%93&q=milestone%3A2.11.0)
|
||||
|
||||
### Notes
|
||||
|
||||
**This is the first release candidate for 2.11.**
|
||||
|
||||
Upgrading docs: https://icinga.com/docs/icinga2/snapshot/doc/16-upgrading-icinga-2/
|
||||
|
||||
Thanks to all contributors: [BarbUk](https://github.com/Icinga/icinga2/pulls?q=is%3Apr+author%3ABarbUk), [alanlitster](https://github.com/Icinga/icinga2/pulls?q=is%3Apr+author%3Aalanlitster), [mcktr](https://github.com/Icinga/icinga2/pulls?q=is%3Apr+author%3Amcktr), [KAMI911](https://github.com/Icinga/icinga2/pulls?q=is%3Apr+author%3AKAMI911), [peteeckel](https://github.com/Icinga/icinga2/pulls?q=is%3Apr+author%3Apeteeckel), [breml](https://github.com/Icinga/icinga2/pulls?q=is%3Apr+author%3Abreml), [episodeiv](https://github.com/Icinga/icinga2/pulls?q=is%3Apr+author%3Aepisodeiv), [Crited](https://github.com/Icinga/icinga2/pulls?q=is%3Apr+author%3ACrited), [robert-scheck](https://github.com/Icinga/icinga2/pulls?q=is%3Apr+author%3Arobert-scheck), [west0rmann](https://github.com/Icinga/icinga2/pulls?q=is%3Apr+author%3Awest0rmann), [Napsty](https://github.com/Icinga/icinga2/pulls?q=is%3Apr+author%3ANapsty), [Elias481](https://github.com/Icinga/icinga2/pulls?q=is%3Apr+author%3AElias481), [uubk](https://github.com/Icinga/icinga2/pulls?q=is%3Apr+author%3Auubk), [miso231](https://github.com/Icinga/icinga2/pulls?q=is%3Apr+author%3Amiso231), [neubi4](https://github.com/Icinga/icinga2/pulls?q=is%3Apr+author%3Aneubi4), [atj](https://github.com/Icinga/icinga2/pulls?q=is%3Apr+author%3Aatj), [mvanduren-itisit](https://github.com/Icinga/icinga2/pulls?q=is%3Apr+author%3Amvanduren-itisit), [jschanz](https://github.com/Icinga/icinga2/pulls?q=is%3Apr+author%3Ajschanz), [MaBauMeBad](https://github.com/Icinga/icinga2/pulls?q=is%3Apr+author%3AMaBauMeBad), [markleary](https://github.com/Icinga/icinga2/pulls?q=is%3Apr+author%3Amarkleary), [leeclemens](https://github.com/Icinga/icinga2/pulls?q=is%3Apr+author%3Aleeclemens), [m4k5ym](https://github.com/Icinga/icinga2/pulls?q=is%3Apr+author%3Am4k5ym)
|
||||
|
||||
### Enhancements
|
||||
|
||||
* Core
|
||||
* Rewrite Network Stack (cluster, REST API) based on Boost Asio, Beast, Coroutines
|
||||
* Technical concept: #7041
|
||||
* Requires package updates: Boost >1.66 (either from packages.icinga.com, EPEL or backports). SLES11 & Ubuntu 14 are EOL.
|
||||
* Require TLS 1.2 and harden default cipher list
|
||||
* Improved Reload Handling (umbrella process, now 3 processes at runtime)
|
||||
* Support running Icinga 2 in (Docker) containers natively in foreground
|
||||
* Quality: Use Modern JSON for C++ library instead of YAJL (dead project)
|
||||
* Quality: Improve handling of invalid UTF8 strings
|
||||
* API
|
||||
* Fix crashes and problems with permission filters from recent Namespace introduction #6785 (thanks Elias Ohm) #6874 (backported to 2.10.5)
|
||||
* Locks and stalled waits are fixed with the core rewrite in #7071
|
||||
* schedule-downtime action supports `all_services` for host downtimes
|
||||
* Improve storage handling for runtime created objects in the `_api` package
|
||||
* Cluster
|
||||
* HA aware features & improvements for failover handling #2941 #7062
|
||||
* Improve cluster config sync with staging #6716
|
||||
* Checks & Notifications
|
||||
* Ensure that notifications during a restart are sent
|
||||
* Immediately notify about a problem after leaving a downtime and still NOT-OK
|
||||
* Improve reload handling and wait for features/metrics
|
||||
* Store notification command results and sync them in HA enabled zones #6722
|
||||
* DSL/Configuration
|
||||
* Add getenv() function
|
||||
* Fix TimePeriod range support over midnight
|
||||
* `concurrent_checks` in the Checker feature has no effect, use the global MaxConcurrentChecks constant instead
|
||||
* CLI
|
||||
* Permissions: node wizard/setup, feature, api setup now run in the Icinga user context, not root
|
||||
* `ca list` shows pending CSRs by default, `ca remove/restore` allow to delete signing requests
|
||||
* ITL
|
||||
* Add new commands and missing attributes - thanks to all contributors!
|
||||
* Windows
|
||||
* Update bundled NSClient++ to 0.5.2.39
|
||||
* Update agent installer and OpenSSL
|
||||
* Documentation
|
||||
* Service Monitoring: How to create plugins by example, check commands and a modern version of the supported plugin API with best practices.
|
||||
* Features: Better structure on metrics, and supported features.
|
||||
* Basics: Rename `Custom Attributes` to `Custom Variables`.
|
||||
* Basics: Refine explanation of command arguments.
|
||||
* Distributed: Reword `Icinga client` into `Icinga agent` and add new images for scenarios and modes.
|
||||
* Security: Add TLS v1.2+ requirement, hardened cipher lists
|
||||
* Technical Concepts: TLS Network IO, Cluster Feature HA, Cluster Config Sync, Core Reload Handling.
|
||||
* Development: Rewritten for better debugging and development experience for contributors including a style guide. Add nightly build setup instructions.
|
||||
* Packaging: INSTALL.md was integrated into the Development chapter available at https://icinga.com/docs too.
|
||||
|
||||
|
||||
|
||||
|
||||
## 2.10.5 (2019-05-23)
|
||||
|
||||
[Issues and PRs](https://github.com/Icinga/icinga2/milestone/81?closed=1)
|
||||
|
||||
### Bugfixes
|
||||
|
||||
* Core
|
||||
* Fix crashes with logrotate signals #6737 (thanks Elias Ohm)
|
||||
* API
|
||||
* Fix crashes and problems with permission filters from recent Namespace introduction #6785 (thanks Elias Ohm) #6874 (backported from 2.11)
|
||||
* Reduce log spam with locked connections (real fix is the network stack rewrite in 2.11) #6877
|
||||
* Cluster
|
||||
* Fix problems with replay log rotation and storage #6932 (thanks Peter Eckel)
|
||||
* IDO DB
|
||||
* Fix that reload shutdown deactivates hosts and hostgroups (introduced in 2.9) #7157
|
||||
* Documentation
|
||||
* Improve the [REST API](https://icinga.com/docs/icinga2/latest/doc/12-icinga2-api/) chapter: Unix timestamp handling, filters, unify POST requests with filters in the body
|
||||
* Better layout for the [features](https://icinga.com/docs/icinga2/latest/doc/14-features/) chapter, specifically metrics and events
|
||||
* Split [object types](https://icinga.com/docs/icinga2/latest/doc/09-object-types/) into monitoring, runtime, features
|
||||
* Add technical concepts for [cluster messages](https://icinga.com/docs/icinga2/latest/doc/19-technical-concepts/#json-rpc-message-api)
|
||||
|
||||
|
||||
## 2.10.4 (2019-03-19)
|
||||
|
||||
### Notes
|
||||
|
||||
* Fix TLS connections in Influxdb/Elasticsearch features leaking file descriptors (#6989 #7018 ref/IP/12219)
|
||||
* Fixes for delayed and one-time notifications (#5561 #6757)
|
||||
* Improve performance for downtimes/comments added in HA clusters (#6885 ref/IP/9235)
|
||||
* check_perfmon supports non-localized performance counter names (#5546 #6418)
|
||||
|
||||
### Enhancement
|
||||
|
||||
* [#6732](https://github.com/icinga/icinga2/issues/6732) (Windows, PR): Update Windows Agent with new design
|
||||
* [#6729](https://github.com/icinga/icinga2/issues/6729) (Windows): Polish the Windows Agent design
|
||||
* [#6418](https://github.com/icinga/icinga2/issues/6418) (Windows): check\_perfmon.exe: Add fallback support for localized performance counters
|
||||
|
||||
### Bug
|
||||
|
||||
* [#7020](https://github.com/icinga/icinga2/issues/7020) (Elasticsearch, PR): ElasticsearchWriter: don't leak sockets
|
||||
* [#7018](https://github.com/icinga/icinga2/issues/7018) (Elasticsearch): ElasticsearchWriter not closing SSL connections on Icinga2 2.10.3.1
|
||||
* [#6991](https://github.com/icinga/icinga2/issues/6991) (CLI, PR): PkiUtility::NewCa\(\): just warn if the CA files already exist
|
||||
* [#6990](https://github.com/icinga/icinga2/issues/6990) (InfluxDB, PR): InfluxdbWriter: don't leak sockets
|
||||
* [#6989](https://github.com/icinga/icinga2/issues/6989) (InfluxDB): InfluxdbWriter not closing connections Icinga2 2.10.3 CentOS 7
|
||||
* [#6976](https://github.com/icinga/icinga2/issues/6976) (Cluster, PR): Don't require OS headers to provide SO\_REUSEPORT
|
||||
* [#6896](https://github.com/icinga/icinga2/issues/6896) (Notifications, PR): Notification\#BeginExecuteNotification\(\): SetNextNotification\(\) correctly
|
||||
* [#6885](https://github.com/icinga/icinga2/issues/6885) (API, Configuration, PR): Don't run UpdateObjectAuthority for Comments and Downtimes
|
||||
* [#6800](https://github.com/icinga/icinga2/issues/6800) (Plugins, Windows, PR): Fix check\_perfmon to support non-localized names
|
||||
* [#6757](https://github.com/icinga/icinga2/issues/6757) (Notifications, PR): Fix that no\_more\_notifications gets reset when Recovery notifications are filtered away
|
||||
* [#5561](https://github.com/icinga/icinga2/issues/5561) (Notifications): Set the notification mode times.begin is not 0, the first notification has a delay
|
||||
* [#5546](https://github.com/icinga/icinga2/issues/5546) (Plugins, Windows): check\_perfmon.exe doesn't support cyrillic names of perf counters
|
||||
|
||||
### Documentation
|
||||
|
||||
* [#7033](https://github.com/icinga/icinga2/issues/7033) (Documentation, PR): Docs: Update supported package repos in Getting Started chapter
|
||||
* [#7028](https://github.com/icinga/icinga2/issues/7028) (Documentation, PR): Fix heading level in development chapter
|
||||
* [#7001](https://github.com/icinga/icinga2/issues/7001) (Documentation, PR): Assignment operators doc: tell what the { } are for
|
||||
* [#6995](https://github.com/icinga/icinga2/issues/6995) (Documentation, PR): Typo and link fix
|
||||
* [#6979](https://github.com/icinga/icinga2/issues/6979) (Documentation, PR): Doc: write systemd lower-case
|
||||
* [#6975](https://github.com/icinga/icinga2/issues/6975) (Documentation, PR): Fix nested hostgroup example
|
||||
* [#6949](https://github.com/icinga/icinga2/issues/6949) (Documentation, PR): Doc fix: update check\_rbl parameter
|
||||
* [#6708](https://github.com/icinga/icinga2/issues/6708) (Documentation, PR): Docs: Alpine needs 'edge/main' repository too
|
||||
* [#5430](https://github.com/icinga/icinga2/issues/5430) (Documentation): Documentation about dictionaries and assignements
|
||||
|
||||
### Support
|
||||
|
||||
* [#7032](https://github.com/icinga/icinga2/issues/7032) (code-quality, PR): Backport Defer class for 2.10
|
||||
* [#7030](https://github.com/icinga/icinga2/issues/7030) (Packages, PR): SELinux: add unreserved\_port\_type attribute to icinga2\_port\_t
|
||||
* [#7029](https://github.com/icinga/icinga2/issues/7029) (Packages): Add unreserved\_port\_type attribute to icinga2\_port\_t
|
||||
* [#7002](https://github.com/icinga/icinga2/issues/7002) (Plugins, Windows, PR): check\_network -h: drop non-existent feature
|
||||
* [#6987](https://github.com/icinga/icinga2/issues/6987) (Tests): base-base\_utility/comparepasswords\_issafe test fails on i386
|
||||
* [#6977](https://github.com/icinga/icinga2/issues/6977) (Tests, PR): Ignore failure of unit test base\_utility/comparepasswords\_issafe
|
||||
|
||||
## 2.10.3 (2019-02-26)
|
||||
|
||||
### Notes
|
||||
|
||||
Bugfixes:
|
||||
|
||||
- Stalled TLS connections on reload/Director deployments (#6816 #6898 ref/NC/588119)
|
||||
- 'Connection: close' header leading to unstable instance, affects Ruby clients (#6799)
|
||||
- Server time in the future breaks check result processing (#6797 ref/NC/595861)
|
||||
- ScheduledDowntimes: Generate downtime objects only on one HA endpoint (#2844 ref/IC/9673 ref/NC/590167 ref/NC/591721)
|
||||
- Improve activation & syncing for downtime objects generated from ScheduledDowntimes (#6826 ref/IC/9673 ref/NC/585559)
|
||||
- Generate a runtime downtime object from already running ScheduledDowntime objects (#6704)
|
||||
- DB IDO: Don't enqueue queries when the feature is paused in HA zones (#5876)
|
||||
- Crashes with localtime_r errors (#6887)
|
||||
|
||||
Documentation updates:
|
||||
|
||||
- Ephemeral port range blocking on Windows agents (ref/NC/597307)
|
||||
- Technical concepts for the check scheduler (#6775)
|
||||
- DB IDO cleanup (#6791)
|
||||
- Unified development docs (#6819)
|
||||
|
||||
### Bug
|
||||
|
||||
* [#6971](https://github.com/icinga/icinga2/issues/6971) (Notifications, PR): Activate downtimes before any checkable object
|
||||
* [#6968](https://github.com/icinga/icinga2/issues/6968) (API, PR): Secure ApiUser::GetByAuthHeader\(\) against timing attacks
|
||||
* [#6940](https://github.com/icinga/icinga2/issues/6940) (Plugins, Windows, PR): Fix check\_swap percentage calculation
|
||||
* [#6925](https://github.com/icinga/icinga2/issues/6925) (Plugins, Windows, PR): Fix check\_swap formatting
|
||||
* [#6924](https://github.com/icinga/icinga2/issues/6924) (PR): Fix double to long conversions
|
||||
* [#6922](https://github.com/icinga/icinga2/issues/6922) (API, DB IDO): IDO MySQL fails on start if check\_interval is a float \(Icinga 2.9.2\)
|
||||
* [#6920](https://github.com/icinga/icinga2/issues/6920) (PR): Downtime::AddDowntime\(\): place Downtimes in the same zone as the origin ScheduledDowntimes
|
||||
* [#6917](https://github.com/icinga/icinga2/issues/6917) (Cluster, Log, PR): Cluster: Delete object message should log that
|
||||
* [#6916](https://github.com/icinga/icinga2/issues/6916) (PR): Don't allow retry\_interval \<= 0
|
||||
* [#6914](https://github.com/icinga/icinga2/issues/6914) (Cluster, PR): ClusterEvents::AcknowledgementSet event should forward 'persistent' attribute
|
||||
* [#6913](https://github.com/icinga/icinga2/issues/6913) (Plugins, Windows): check\_swap return value wrong when no swap file configured
|
||||
* [#6901](https://github.com/icinga/icinga2/issues/6901) (API, PR): TcpSocket\#Bind\(\): also set SO\_REUSEPORT
|
||||
* [#6899](https://github.com/icinga/icinga2/issues/6899) (PR): Log: Ensure not to pass negative values to localtime\(\)
|
||||
* [#6898](https://github.com/icinga/icinga2/issues/6898) (API): API action restart-process fails on FreeBSD
|
||||
* [#6894](https://github.com/icinga/icinga2/issues/6894) (Check Execution, PR): Fix checkresults from the future breaking checks
|
||||
* [#6887](https://github.com/icinga/icinga2/issues/6887) (Check Execution, Windows): Icinga2 Windows Service does not start critical/checker: Exception occurred while checking 'hostname.tld'
|
||||
* [#6883](https://github.com/icinga/icinga2/issues/6883) (Check Execution, PR): Allow Checkable\#retry\_interval to be 0
|
||||
* [#6871](https://github.com/icinga/icinga2/issues/6871): Icinga2 crashes after localtime\_r call
|
||||
* [#6857](https://github.com/icinga/icinga2/issues/6857) (Plugins, Windows, PR): Url\#m\_Query: preserve order
|
||||
* [#6826](https://github.com/icinga/icinga2/issues/6826) (Configuration, PR): Downtime\#HasValidConfigOwner\(\): wait for ScheduledDowntimes
|
||||
* [#6821](https://github.com/icinga/icinga2/issues/6821) (Cluster, Configuration, PR): Don't delete downtimes in satellite zones
|
||||
* [#6820](https://github.com/icinga/icinga2/issues/6820) (Cluster, PR): Only create downtimes from non-paused ScheduledDowntime objects in HA enabled cluster zones
|
||||
* [#6817](https://github.com/icinga/icinga2/issues/6817) (API, PR): HttpServerConnection\#DataAvailableHandler\(\): be aware of being called multiple times concurrently
|
||||
* [#6816](https://github.com/icinga/icinga2/issues/6816) (API, Cluster): Stalled TLS connections and lock waits in SocketEventEngine
|
||||
* [#6814](https://github.com/icinga/icinga2/issues/6814) (API, PR): Restore 'Connection: close' behaviour in HTTP responses
|
||||
* [#6811](https://github.com/icinga/icinga2/issues/6811) (Plugins, Windows, PR): Fix state conditions in check\_memory and check\_swap
|
||||
* [#6810](https://github.com/icinga/icinga2/issues/6810) (Plugins, Windows): Windows check\_memory never gets critical
|
||||
* [#6808](https://github.com/icinga/icinga2/issues/6808) (API, PR): Remove redundand check for object existence on creation via API
|
||||
* [#6807](https://github.com/icinga/icinga2/issues/6807) (API): \[2.10.2\] Director deploy crashes the Icinga service \[FreeBSD\]
|
||||
* [#6799](https://github.com/icinga/icinga2/issues/6799) (API): "Connection: close" header leads to unstable instance
|
||||
* [#6797](https://github.com/icinga/icinga2/issues/6797) (Check Execution): Servertime in the future breaks check results processing
|
||||
* [#6750](https://github.com/icinga/icinga2/issues/6750) (Configuration, PR): \#6749 Wrong operator on stride variable causing incorrect behaviour
|
||||
* [#6749](https://github.com/icinga/icinga2/issues/6749) (Configuration): Stride is misinterpreted in multi-date legacydatetime
|
||||
* [#6748](https://github.com/icinga/icinga2/issues/6748) (CLI, PR): Fix api setup to automatically create the conf.d directory
|
||||
* [#6718](https://github.com/icinga/icinga2/issues/6718) (API, Cluster, PR): Call SSL\_shutdown\(\) at least twice
|
||||
* [#6704](https://github.com/icinga/icinga2/issues/6704) (Notifications, PR): Put newly configured already running ScheduledDowntime immediately in effect
|
||||
* [#6542](https://github.com/icinga/icinga2/issues/6542) (Configuration, Log): /var/log/icinga2/icinga2.log is growing very fast on satellites
|
||||
* [#6536](https://github.com/icinga/icinga2/issues/6536) (Windows, help wanted): check\_nscp\_api: Query arguments are sorted on Url::Format\(\)
|
||||
* [#4790](https://github.com/icinga/icinga2/issues/4790) (Notifications): Newly configured already running ScheduledDowntime not put into effect
|
||||
* [#3937](https://github.com/icinga/icinga2/issues/3937) (API): Icinga2 API: PUT request fails at 0-byte file
|
||||
* [#2844](https://github.com/icinga/icinga2/issues/2844) (Cluster): Duplicated scheduled downtimes created in cluster HA zone
|
||||
|
||||
### Documentation
|
||||
|
||||
* [#6956](https://github.com/icinga/icinga2/issues/6956) (Documentation, PR): Escape pipe symbol in api documentation
|
||||
* [#6944](https://github.com/icinga/icinga2/issues/6944) (Documentation, PR): Troubleshooting: Add notes on ephemeral port range blocking on Windows agents
|
||||
* [#6928](https://github.com/icinga/icinga2/issues/6928) (Documentation, PR): Doc: Add .NET 3.5 to the windows build stack
|
||||
* [#6825](https://github.com/icinga/icinga2/issues/6825) (Documentation, PR): Document that retry\_interval is only used after an active check result
|
||||
* [#6819](https://github.com/icinga/icinga2/issues/6819) (Documentation, PR): Enhance and unify development docs for debug, develop, package
|
||||
* [#6791](https://github.com/icinga/icinga2/issues/6791) (Documentation, PR): Docs: Add a section for DB IDO Cleanup
|
||||
* [#6776](https://github.com/icinga/icinga2/issues/6776) (Documentation, PR): Doc fix: update apache section
|
||||
* [#6775](https://github.com/icinga/icinga2/issues/6775) (Documentation, PR): Add technical docs for the check scheduler \(general, initial check, offsets\)
|
||||
* [#6751](https://github.com/icinga/icinga2/issues/6751) (Documentation, PR): Doc fix: documentation link for apt
|
||||
* [#6743](https://github.com/icinga/icinga2/issues/6743) (Documentation, PR): Doc fix: error in example path.
|
||||
* [#5341](https://github.com/icinga/icinga2/issues/5341) (Documentation): Enhance development documentation
|
||||
|
||||
### Support
|
||||
|
||||
* [#6972](https://github.com/icinga/icinga2/issues/6972) (PR): Fix formatting in development docs
|
||||
* [#6958](https://github.com/icinga/icinga2/issues/6958) (code-quality, PR): Debug: Log calls to ConfigObject::Deactivate\(\)
|
||||
* [#6897](https://github.com/icinga/icinga2/issues/6897) (PR): Validate Zone::GetLocalZone\(\) before using
|
||||
* [#6872](https://github.com/icinga/icinga2/issues/6872) (Windows): 2.10 is unstable \(Windows Agent\)
|
||||
* [#6843](https://github.com/icinga/icinga2/issues/6843) (Tests, Windows, PR): Improve AppVeyor builds
|
||||
* [#6479](https://github.com/icinga/icinga2/issues/6479) (code-quality, PR): SocketEvents: inherit from Stream
|
||||
* [#6477](https://github.com/icinga/icinga2/issues/6477) (code-quality): SocketEvents: inherit from Object
|
||||
|
||||
## 2.10.2 (2018-11-14)
|
||||
|
||||
### Bug
|
||||
|
||||
* [#6770](https://github.com/icinga/icinga2/issues/6770) (PR): Fix deadlock in GraphiteWriter
|
||||
* [#6769](https://github.com/icinga/icinga2/issues/6769) (Cluster): Hanging TLS connections
|
||||
* [#6759](https://github.com/icinga/icinga2/issues/6759) (Log, PR): Fix possible double free in StreamLogger::BindStream\(\)
|
||||
* [#6753](https://github.com/icinga/icinga2/issues/6753): Icinga2.service state is reloading in systemd after safe-reload until systemd time-out
|
||||
* [#6740](https://github.com/icinga/icinga2/issues/6740) (DB IDO, PR): DB IDO: Don't enqueue queries when the feature is paused \(HA\)
|
||||
* [#6738](https://github.com/icinga/icinga2/issues/6738) (API, Cluster, PR): Ensure that API/JSON-RPC messages in the same session are processed and not stalled
|
||||
* [#6736](https://github.com/icinga/icinga2/issues/6736) (Crash): Stability issues with Icinga 2.10.x
|
||||
* [#6717](https://github.com/icinga/icinga2/issues/6717) (API, PR): Improve error handling for invalid child\_options for API downtime actions
|
||||
* [#6712](https://github.com/icinga/icinga2/issues/6712) (API): Downtime name not returned when error occurs
|
||||
* [#6711](https://github.com/icinga/icinga2/issues/6711) (API, Cluster): Slow API \(TLS-Handshake\)
|
||||
* [#6709](https://github.com/icinga/icinga2/issues/6709) (PR): Fix the Icinga2 version check for versions with more than 5 characters
|
||||
* [#6707](https://github.com/icinga/icinga2/issues/6707) (Compat, PR): Fix regression for wrong objects.cache path overwriting icinga2.debug file
|
||||
* [#6705](https://github.com/icinga/icinga2/issues/6705) (CLI, Compat, Configuration): Crash "icinga2 object list" command with 2.10.1-1 on CentOS 7
|
||||
* [#6703](https://github.com/icinga/icinga2/issues/6703): Check command 'icinga' breaks when vars.icinga\_min\_version is defined \(2.10.x\)
|
||||
* [#6635](https://github.com/icinga/icinga2/issues/6635) (API): API TLS session connection closed after 2 requests
|
||||
* [#5876](https://github.com/icinga/icinga2/issues/5876) (DB IDO): IDO Work queue on the inactive node growing when switching connection between redundant master servers
|
||||
|
||||
### Documentation
|
||||
|
||||
* [#6714](https://github.com/icinga/icinga2/issues/6714) (Documentation, PR): Docs: Add package related changes to the upgrading docs
|
||||
|
||||
### Support
|
||||
|
||||
* [#6773](https://github.com/icinga/icinga2/issues/6773) (Installation, Packages, PR): Initialize ICINGA2\_ERROR\_LOG inside the systemd environment
|
||||
* [#6771](https://github.com/icinga/icinga2/issues/6771) (Tests, PR): Implement unit tests for Dictionary initializers
|
||||
* [#6760](https://github.com/icinga/icinga2/issues/6760) (Packages, Tests, PR): armhf: Apply workaround for timer tests with std::bind callbacks
|
||||
* [#6710](https://github.com/icinga/icinga2/issues/6710) (Packages): Crash when upgrading from 2.10.0 to 2.10.1 \(SELinux related\)
|
||||
|
||||
## 2.10.1 (2018-10-18)
|
||||
|
||||
### Bug
|
||||
|
||||
* [#6696](https://github.com/icinga/icinga2/issues/6696) (PR): Remove default environment, regression from e678fa1aa5
|
||||
* [#6694](https://github.com/icinga/icinga2/issues/6694): v2.10.0 sets a default environment "production" in SNI
|
||||
* [#6691](https://github.com/icinga/icinga2/issues/6691) (PR): Add missing shutdown/program state dumps for SIGUSR2 reload handler
|
||||
* [#6689](https://github.com/icinga/icinga2/issues/6689): State file not updated on reload
|
||||
* [#6685](https://github.com/icinga/icinga2/issues/6685) (API, PR): Fix regression with API permission filters and namespaces in v2.10
|
||||
* [#6682](https://github.com/icinga/icinga2/issues/6682) (API): API process-check-result fails in 2.10.0
|
||||
* [#6679](https://github.com/icinga/icinga2/issues/6679) (Windows, PR): Initialize Configuration::InitRunDir for Windows and writing the PID file
|
||||
* [#6624](https://github.com/icinga/icinga2/issues/6624) (Check Execution): Master Reload Causes Passive Check State Change
|
||||
* [#6592](https://github.com/icinga/icinga2/issues/6592): Reloads seem to reset the check atempt count. Also notifications go missing shortly after a reload.
|
||||
|
||||
### Documentation
|
||||
|
||||
* [#6701](https://github.com/icinga/icinga2/issues/6701) (Documentation, PR): Add GitHub release tag to README
|
||||
* [#6700](https://github.com/icinga/icinga2/issues/6700) (Documentation, PR): Enhance the addon chapter in the docs
|
||||
* [#6699](https://github.com/icinga/icinga2/issues/6699) (Documentation, PR): Update to https://icinga.com/
|
||||
* [#6692](https://github.com/icinga/icinga2/issues/6692) (Documentation, PR): Update release docs for Chocolatey
|
||||
* [#6690](https://github.com/icinga/icinga2/issues/6690) (Documentation, PR): Extend 09-object-types.md with argument array
|
||||
* [#6674](https://github.com/icinga/icinga2/issues/6674) (Documentation, PR): Add a note to the docs on \>2 endpoints in a zone
|
||||
* [#6673](https://github.com/icinga/icinga2/issues/6673) (Documentation, PR): Update RELEASE docs
|
||||
* [#6672](https://github.com/icinga/icinga2/issues/6672) (Documentation, PR): Extend upgrade docs
|
||||
* [#6671](https://github.com/icinga/icinga2/issues/6671) (Documentation): Zone requirements changed in 2.10 - Undocumented Change
|
||||
|
||||
### Support
|
||||
|
||||
* [#6681](https://github.com/icinga/icinga2/issues/6681) (code-quality, PR): Fix spelling errors.
|
||||
* [#6677](https://github.com/icinga/icinga2/issues/6677) (Packages, Windows): icinga does not start after Update to 2.10
|
||||
|
||||
## 2.10.0 (2018-10-11)
|
||||
|
||||
### Notes
|
||||
|
||||
* Support for namespaces, details in [this blogpost](https://icinga.com/2018/09/17/icinga-2-dsl-feature-namespaces-coming-in-v2-10/)
|
||||
* Only send acknowledgement notification to users notified about a problem before, thanks for sponsoring to the [Max-Planck-Institut for Marine Mikrobiologie](https://www.mpi-bremen.de)
|
||||
* More child options for scheduled downtimes
|
||||
* Performance improvements and fixes for the TLS connections inside cluster/REST API
|
||||
* Better logging for HTTP requests and less verbose object creation (e.g. downtimes via Icinga Web 2 & REST API)
|
||||
* New configuration path constants, e.g. ConfigDir
|
||||
* Fixed problem with dependencies rescheduling parent checks too fast
|
||||
* Fixed problem with logging in systemd and syslog
|
||||
* Improved vim syntax highlighting
|
||||
* [Technical concepts docs](https://icinga.com/docs/icinga2/latest/doc/19-technical-concepts/) update with config compiler and TLS network IO
|
||||
|
||||
### Enhancement
|
||||
|
||||
* [#6663](https://github.com/icinga/icinga2/issues/6663) (API, Log, PR): Silence config compiler logging for runtime created objects
|
||||
* [#6657](https://github.com/icinga/icinga2/issues/6657) (API, Log, PR): Enable the HTTP request body debug log entry for release builds
|
||||
* [#6655](https://github.com/icinga/icinga2/issues/6655) (API, Log, PR): Improve logging for disconnected HTTP clients
|
||||
* [#6651](https://github.com/icinga/icinga2/issues/6651) (Plugins, PR): Add 'used' feature to check\_swap
|
||||
* [#6633](https://github.com/icinga/icinga2/issues/6633) (API, Cluster, PR): Use a dynamic thread pool for API connections
|
||||
* [#6632](https://github.com/icinga/icinga2/issues/6632) (Cluster, PR): Increase the cluster reconnect frequency to 10s
|
||||
* [#6616](https://github.com/icinga/icinga2/issues/6616) (API, Cluster, PR): Add ApiListener\#tls\_handshake\_timeout option
|
||||
* [#6611](https://github.com/icinga/icinga2/issues/6611) (Notifications): Allow types = \[ Recovery \] to always send recovery notifications
|
||||
* [#6595](https://github.com/icinga/icinga2/issues/6595) (API, Cluster, PR): Allow to configure anonymous clients limit inside the ApiListener object
|
||||
* [#6532](https://github.com/icinga/icinga2/issues/6532) (Configuration, PR): Add child\_options to ScheduledDowntime
|
||||
* [#6531](https://github.com/icinga/icinga2/issues/6531) (API, PR): Expose Zone\#all\_parents via API
|
||||
* [#6527](https://github.com/icinga/icinga2/issues/6527) (Notifications, PR): Acknowledgment notifications should only be send if problem notification has been send
|
||||
* [#6521](https://github.com/icinga/icinga2/issues/6521) (Configuration, PR): Implement references
|
||||
* [#6512](https://github.com/icinga/icinga2/issues/6512) (Cluster, PR): Refactor environment for API connections
|
||||
* [#6511](https://github.com/icinga/icinga2/issues/6511) (Cluster, PR): ApiListener: Add support for dynamic port handling
|
||||
* [#6509](https://github.com/icinga/icinga2/issues/6509) (Configuration, PR): Implement support for namespaces
|
||||
* [#6508](https://github.com/icinga/icinga2/issues/6508) (Configuration, PR): Implement the Dictionary\#clear script function
|
||||
* [#6506](https://github.com/icinga/icinga2/issues/6506) (PR): Improve path handling in cmake and daemon
|
||||
* [#6460](https://github.com/icinga/icinga2/issues/6460) (Log, help wanted): Feature suggestion: Do not log warnings when env elements are undefined in CheckCommand objects
|
||||
* [#6455](https://github.com/icinga/icinga2/issues/6455) (Log, PR): Log something when the Filelogger has been started
|
||||
* [#6379](https://github.com/icinga/icinga2/issues/6379) (Configuration, PR): Throw config error when using global zones as parent
|
||||
* [#6356](https://github.com/icinga/icinga2/issues/6356) (Log, PR): Fix logging under systemd
|
||||
* [#6339](https://github.com/icinga/icinga2/issues/6339) (Log, help wanted): On systemd, icinga2 floods the system log, and this cannot simply be opted out of
|
||||
* [#6110](https://github.com/icinga/icinga2/issues/6110) (Configuration, PR): Implement support for optionally specifying the 'var' keyword in 'for' loops
|
||||
* [#6047](https://github.com/icinga/icinga2/issues/6047) (Notifications): Acknowledgment notifications should only be sent if the user already received a problem notification
|
||||
* [#4282](https://github.com/icinga/icinga2/issues/4282) (API, Log): Icinga should log HTTP bodies for API requests
|
||||
|
||||
### Bug
|
||||
|
||||
* [#6658](https://github.com/icinga/icinga2/issues/6658) (API, PR): Ensure that HTTP/1.0 or 'Connection: close' headers are properly disconnecting the client
|
||||
* [#6652](https://github.com/icinga/icinga2/issues/6652) (Plugins, PR): Fix check\_memory thresholds in 'used' mode
|
||||
* [#6647](https://github.com/icinga/icinga2/issues/6647) (CLI, PR): node setup: always respect --accept-config and --accept-commands
|
||||
* [#6643](https://github.com/icinga/icinga2/issues/6643) (Check Execution, Notifications, PR): Fix that check\_timeout was used for Event/Notification commands too
|
||||
* [#6639](https://github.com/icinga/icinga2/issues/6639) (Windows, PR): Ensure to \_unlink before renaming replay log on Windows
|
||||
* [#6622](https://github.com/icinga/icinga2/issues/6622) (DB IDO, PR): Ensure to use UTC timestamps for IDO PgSQL cleanup queries
|
||||
* [#6603](https://github.com/icinga/icinga2/issues/6603) (Check Execution, Cluster): CheckCommand 'icinga' seems to ignore retry interval via command\_endpoint
|
||||
* [#6575](https://github.com/icinga/icinga2/issues/6575): LTO builds fail on Linux
|
||||
* [#6566](https://github.com/icinga/icinga2/issues/6566) (Cluster): Master disconnects during signing process
|
||||
* [#6546](https://github.com/icinga/icinga2/issues/6546) (API, CLI, PR): Overridden path constants not passed to config validation in /v1/config/stages API call
|
||||
* [#6530](https://github.com/icinga/icinga2/issues/6530) (DB IDO, PR): IDO/MySQL: avoid empty queries
|
||||
* [#6519](https://github.com/icinga/icinga2/issues/6519) (CLI, PR): Reset terminal on erroneous console exit
|
||||
* [#6517](https://github.com/icinga/icinga2/issues/6517) (Cluster): Not all Endpoints can't reconnect due to "Client TLS handshake failed" error after "reload or restart"
|
||||
* [#6514](https://github.com/icinga/icinga2/issues/6514) (API): API using "Connection: close" header results in infinite threads
|
||||
* [#6507](https://github.com/icinga/icinga2/issues/6507) (Cluster): Variable name conflict in constants.conf / Problem with TLS verification, CN and Environment variable
|
||||
* [#6503](https://github.com/icinga/icinga2/issues/6503) (Log, PR): Reduce the log level for missing env macros to debug
|
||||
* [#6485](https://github.com/icinga/icinga2/issues/6485) (Log): Icinga logs discarding messages still as warning and not as notice
|
||||
* [#6475](https://github.com/icinga/icinga2/issues/6475) (Compat, PR): lib-\>compat-\>statusdatawriter: fix notifications\_enabled
|
||||
* [#6430](https://github.com/icinga/icinga2/issues/6430) (Log, PR): Fix negative 'empty in' value in WorkQueue log message
|
||||
* [#6427](https://github.com/icinga/icinga2/issues/6427) (Configuration, Crash, PR): Improve error message for serializing objects with recursive references
|
||||
* [#6409](https://github.com/icinga/icinga2/issues/6409) (Configuration, Crash): Assigning vars.x = vars causes Icinga 2 segfaults
|
||||
* [#6408](https://github.com/icinga/icinga2/issues/6408) (PR): ObjectLock\#Unlock\(\): don't reset m\_Object-\>m\_LockOwner too early
|
||||
* [#6386](https://github.com/icinga/icinga2/issues/6386) (Configuration, PR): Fix that TimePeriod segments are not cleared on restart
|
||||
* [#6382](https://github.com/icinga/icinga2/issues/6382) (CLI, help wanted): icinga2 console breaks the terminal on errors
|
||||
* [#6313](https://github.com/icinga/icinga2/issues/6313) (Plugins, Windows, PR): Fix wrong calculation of check\_swap windows plugin
|
||||
* [#6304](https://github.com/icinga/icinga2/issues/6304) (Configuration, Notifications): Timeout defined in NotificationCommand is ignored and uses check\_timeout
|
||||
* [#5815](https://github.com/icinga/icinga2/issues/5815) (Plugins, Windows): swap-windows check delivers wrong result
|
||||
* [#5375](https://github.com/icinga/icinga2/issues/5375) (Check Execution, PR): Parents who are non-active should not be rescheduled
|
||||
* [#5052](https://github.com/icinga/icinga2/issues/5052) (Cluster, Windows): Replay log not working with Windows client
|
||||
* [#5022](https://github.com/icinga/icinga2/issues/5022) (Check Execution): Dependencies may reschedule passive checks, triggering freshness checks
|
||||
|
||||
### ITL
|
||||
|
||||
* [#6646](https://github.com/icinga/icinga2/issues/6646) (ITL, PR): Update ITL and Docs for memory-windows - show used
|
||||
* [#6640](https://github.com/icinga/icinga2/issues/6640) (ITL): Update ITL and Docs for memory-windows - show used
|
||||
* [#6563](https://github.com/icinga/icinga2/issues/6563) (ITL, PR): \[Feature\] Cloudera service health CheckCommand
|
||||
* [#6561](https://github.com/icinga/icinga2/issues/6561) (ITL, PR): \[Feature\] Ceph health CheckCommand
|
||||
* [#6504](https://github.com/icinga/icinga2/issues/6504) (ITL, PR): squashfs ignored
|
||||
* [#6491](https://github.com/icinga/icinga2/issues/6491) (ITL, PR): Feature/itl vmware health
|
||||
* [#6481](https://github.com/icinga/icinga2/issues/6481) (ITL): command-plugins.conf check\_disk exclude squashfs
|
||||
|
||||
### Documentation
|
||||
|
||||
* [#6670](https://github.com/icinga/icinga2/issues/6670) (Documentation, PR): Add technical concepts for the config compiler and daemon CLI command
|
||||
* [#6665](https://github.com/icinga/icinga2/issues/6665) (Documentation, PR): Make the two modes of check\_http more obvious.
|
||||
* [#6615](https://github.com/icinga/icinga2/issues/6615) (Documentation, PR): Update distributed monitoring docs for 2.10
|
||||
* [#6610](https://github.com/icinga/icinga2/issues/6610) (Documentation, PR): Add "TLS Network IO" into technical concepts docs
|
||||
* [#6607](https://github.com/icinga/icinga2/issues/6607) (Documentation, PR): Enhance development docs with GDB backtrace and thread list
|
||||
* [#6606](https://github.com/icinga/icinga2/issues/6606) (Documentation, PR): Enhance contributing docs
|
||||
* [#6598](https://github.com/icinga/icinga2/issues/6598) (Documentation, PR): doc/09-object-types: states filter ignored for Acknowledgements
|
||||
* [#6597](https://github.com/icinga/icinga2/issues/6597) (Documentation, PR): Add Fedora to development docs for debuginfo packages
|
||||
* [#6593](https://github.com/icinga/icinga2/issues/6593) (Documentation, help wanted): Include CA Proxy in 3rd scenario in Distributed Monitoring docs
|
||||
* [#6573](https://github.com/icinga/icinga2/issues/6573) (Documentation, PR): Fix operator precedence table
|
||||
* [#6528](https://github.com/icinga/icinga2/issues/6528) (Documentation, PR): Document default of User\#enable\_notifications
|
||||
* [#6502](https://github.com/icinga/icinga2/issues/6502) (Documentation, PR): Update 17-language-reference.md
|
||||
* [#6501](https://github.com/icinga/icinga2/issues/6501) (Documentation, PR): Update 03-monitoring-basics.md
|
||||
* [#6488](https://github.com/icinga/icinga2/issues/6488) (Documentation, ITL, PR): Fix typo with the CheckCommand cert
|
||||
|
||||
### Support
|
||||
|
||||
* [#6669](https://github.com/icinga/icinga2/issues/6669) (PR): Don't throw an error when namespace indexers don't find a valid key
|
||||
* [#6668](https://github.com/icinga/icinga2/issues/6668) (Installation, PR): Enhance vim syntax highlighting for 2.10
|
||||
* [#6661](https://github.com/icinga/icinga2/issues/6661) (API, Log, code-quality, PR): Cache the peer address in the HTTP server
|
||||
* [#6642](https://github.com/icinga/icinga2/issues/6642) (PR): Allow to override MaxConcurrentChecks constant
|
||||
* [#6621](https://github.com/icinga/icinga2/issues/6621) (code-quality, PR): Remove unused timestamp function in DB IDO
|
||||
* [#6618](https://github.com/icinga/icinga2/issues/6618) (PR): Silence compiler warning for nice\(\)
|
||||
* [#6591](https://github.com/icinga/icinga2/issues/6591) (PR): Fix static initializer priority for namespaces in LTO builds
|
||||
* [#6588](https://github.com/icinga/icinga2/issues/6588) (PR): Fix using full path in prepare-dirs/safe-reload scripts
|
||||
* [#6586](https://github.com/icinga/icinga2/issues/6586) (PR): Fix non-unity builds on CentOS 7 with std::shared\_ptr
|
||||
* [#6583](https://github.com/icinga/icinga2/issues/6583) (Documentation, Installation, PR): Update PostgreSQL library path variable in INSTALL.md
|
||||
* [#6574](https://github.com/icinga/icinga2/issues/6574) (PR): Move new downtime constants into the Icinga namespace
|
||||
* [#6570](https://github.com/icinga/icinga2/issues/6570) (Cluster, PR): Increase limit for simultaneously connected anonymous TLS clients
|
||||
* [#6567](https://github.com/icinga/icinga2/issues/6567) (PR): ApiListener: Dump the state file port detail as number
|
||||
* [#6556](https://github.com/icinga/icinga2/issues/6556) (Installation, Windows, PR): windows: Allow suppression of extra actions in the MSI package
|
||||
* [#6544](https://github.com/icinga/icinga2/issues/6544) (code-quality, PR): Remove \#include for deprecated header file
|
||||
* [#6539](https://github.com/icinga/icinga2/issues/6539) (PR): Build fix for CentOS 7 and non-unity builds
|
||||
* [#6526](https://github.com/icinga/icinga2/issues/6526) (code-quality, PR): icinga::PackObject\(\): shorten conversion to string
|
||||
* [#6510](https://github.com/icinga/icinga2/issues/6510) (Tests, Windows, PR): Update windows build scripts
|
||||
* [#6494](https://github.com/icinga/icinga2/issues/6494) (Tests, PR): Test PackObject
|
||||
* [#6489](https://github.com/icinga/icinga2/issues/6489) (code-quality, PR): Implement object packer for consistent hashing
|
||||
* [#6484](https://github.com/icinga/icinga2/issues/6484) (Packages): Packages from https://packages.icinga.com are not Systemd Type=notify enabled?
|
||||
* [#6469](https://github.com/icinga/icinga2/issues/6469) (Installation, Windows, PR): Fix Windows Agent resize behavior
|
||||
* [#6458](https://github.com/icinga/icinga2/issues/6458) (code-quality, PR): Fix debug build log entry for ConfigItem activation priority
|
||||
* [#6456](https://github.com/icinga/icinga2/issues/6456) (code-quality, PR): Keep notes for immediately log flushing
|
||||
* [#6440](https://github.com/icinga/icinga2/issues/6440) (code-quality, PR): Fix typo
|
||||
* [#6410](https://github.com/icinga/icinga2/issues/6410) (code-quality, PR): Remove unused code
|
||||
* [#4959](https://github.com/icinga/icinga2/issues/4959) (Installation, Windows): Windows Agent Wizard Window resizes with screen, hiding buttons
|
||||
|
||||
## 2.9.2 (2018-09-26)
|
||||
|
||||
### Enhancement
|
||||
|
||||
* [#6602](https://github.com/icinga/icinga2/issues/6602) (API, Cluster, PR): Improve TLS handshake exception logging
|
||||
* [#6568](https://github.com/icinga/icinga2/issues/6568) (Configuration, PR): Ensure that config object types are committed in dependent load order
|
||||
* [#6497](https://github.com/icinga/icinga2/issues/6497) (Configuration, PR): Improve error logging for match/regex/cidr\_match functions and unsupported dictionary usage
|
||||
|
||||
### Bug
|
||||
|
||||
* [#6596](https://github.com/icinga/icinga2/issues/6596) (Crash, PR): Fix crash on API queries with Fedora 28 hardening and GCC 8
|
||||
* [#6581](https://github.com/icinga/icinga2/issues/6581) (Configuration, PR): Shuffle items before config validation
|
||||
* [#6569](https://github.com/icinga/icinga2/issues/6569) (DB IDO): Custom Vars not updated after upgrade
|
||||
* [#6533](https://github.com/icinga/icinga2/issues/6533) (Crash): Icinga2 crashes after using some api-commands on Fedora 28
|
||||
* [#6505](https://github.com/icinga/icinga2/issues/6505) (Cluster, PR): Fix clusterzonecheck if not connected
|
||||
* [#6498](https://github.com/icinga/icinga2/issues/6498) (Configuration, PR): Fix regression with MatchAny false conditions on match/regex/cidr\_match
|
||||
* [#6496](https://github.com/icinga/icinga2/issues/6496) (Configuration): error with match and type matchany
|
||||
|
||||
### Documentation
|
||||
|
||||
* [#6590](https://github.com/icinga/icinga2/issues/6590) (DB IDO, Documentation, PR): Update workaround for custom vars
|
||||
* [#6572](https://github.com/icinga/icinga2/issues/6572) (Documentation, PR): Add note about workaround for broken custom vars
|
||||
|
||||
### Support
|
||||
|
||||
* [#6540](https://github.com/icinga/icinga2/issues/6540) (Configuration): Evaluate a fixed config compiler commit order
|
||||
* [#6486](https://github.com/icinga/icinga2/issues/6486) (Configuration): Configuration validation w/ ScheduledDowntimes performance decreased in 2.9
|
||||
* [#6442](https://github.com/icinga/icinga2/issues/6442) (Configuration): Error while evaluating "assign where match" expression: std::bad\_cast
|
||||
|
||||
## 2.9.1 (2018-07-24)
|
||||
|
||||
### Bug
|
||||
|
||||
* [#6457](https://github.com/icinga/icinga2/issues/6457) (PR): Ensure that timer thread is initialized after Daemonize\(\)
|
||||
* [#6449](https://github.com/icinga/icinga2/issues/6449): icinga r2.9.0-1 init.d script overrides PATH variable
|
||||
* [#6445](https://github.com/icinga/icinga2/issues/6445): Problem with daemonize \(init scripts, -d\) on Debian 8 / CentOS 6 / Ubuntu 14 / SLES 11 in 2.9
|
||||
* [#6444](https://github.com/icinga/icinga2/issues/6444) (PR): SELinux: allow systemd notify
|
||||
* [#6443](https://github.com/icinga/icinga2/issues/6443): selinux and 2.9
|
||||
|
||||
### Support
|
||||
|
||||
* [#6470](https://github.com/icinga/icinga2/issues/6470) (code-quality, PR): Fix spelling errors.
|
||||
* [#6467](https://github.com/icinga/icinga2/issues/6467) (Tests, PR): Start and stop the timer thread lazily
|
||||
* [#6461](https://github.com/icinga/icinga2/issues/6461) (Tests): Broken tests with fix from \#6457
|
||||
* [#6451](https://github.com/icinga/icinga2/issues/6451) (Packages, PR): Fix initscripts
|
||||
* [#6450](https://github.com/icinga/icinga2/issues/6450) (Packages): init script helpers - source: not found
|
||||
|
||||
## 2.9.0 (2018-07-17)
|
||||
|
||||
### Notes
|
||||
|
||||
- Elasticsearch 6 Support
|
||||
- icinga health check supports minimum version parameter, ido thresholds for query rate, dummy check is executed in-memory, avoids plugin call
|
||||
- `ApplicationVersion` constant in the configuration
|
||||
- Setup wizards: global zone, disable conf.d inclusion, unified parameter handling
|
||||
- TTL support for check results, pretty formatting for REST API queries
|
||||
- TLS support for IDO PostgreSQL
|
||||
- Improvements for check scheduling, concurrent checks with command endpoints, downtime notification handling, scheduled downtimes and memory handling with many API requests
|
||||
|
||||
### Enhancement
|
||||
|
||||
* [#6400](https://github.com/icinga/icinga2/issues/6400) (Plugins, Windows, PR): Enhance debug logging for check\_nscp\_api
|
||||
* [#6321](https://github.com/icinga/icinga2/issues/6321) (Log, PR): Update log message for skipped certificate renewal
|
||||
* [#6305](https://github.com/icinga/icinga2/issues/6305) (PR): Introduce the 'Environment' variable
|
||||
* [#6299](https://github.com/icinga/icinga2/issues/6299) (Check Execution, Log, PR): Change log level for failed event command execution
|
||||
* [#6285](https://github.com/icinga/icinga2/issues/6285) (CLI, Log, PR): Add support for config validation log timestamps
|
||||
* [#6270](https://github.com/icinga/icinga2/issues/6270) (Configuration, PR): Add activation priority for config object types
|
||||
* [#6236](https://github.com/icinga/icinga2/issues/6236) (DB IDO, PR): Add TLS support for DB IDO PostgreSQL feature
|
||||
* [#6219](https://github.com/icinga/icinga2/issues/6219) (Elasticsearch, PR): Add support for Elasticsearch 6
|
||||
* [#6211](https://github.com/icinga/icinga2/issues/6211) (DB IDO): IDO pgsql with TLS support
|
||||
* [#6209](https://github.com/icinga/icinga2/issues/6209) (CLI, PR): Unify zone name settings in node setup/wizard; add connection-less mode for node setup
|
||||
* [#6208](https://github.com/icinga/icinga2/issues/6208) (CLI): Add connection-less support for node setup CLI command
|
||||
* [#6206](https://github.com/icinga/icinga2/issues/6206) (Configuration, PR): Add ApplicationVersion built-in constant
|
||||
* [#6205](https://github.com/icinga/icinga2/issues/6205) (API, PR): API: Unify verbose error messages
|
||||
* [#6194](https://github.com/icinga/icinga2/issues/6194) (Elasticsearch, Graylog, PR): Elasticsearch/GELF: Add metric unit to performance data fields
|
||||
* [#6170](https://github.com/icinga/icinga2/issues/6170) (Configuration, Windows, PR): Add option to windows installer to add global zones
|
||||
* [#6158](https://github.com/icinga/icinga2/issues/6158) (API, Log): Review API debugging: verboseErrors and diagnostic information
|
||||
* [#6136](https://github.com/icinga/icinga2/issues/6136) (Check Execution, PR): Add counter for current concurrent checks to Icinga check
|
||||
* [#6131](https://github.com/icinga/icinga2/issues/6131) (Log, PR): Log which ticket was invalid on the master
|
||||
* [#6109](https://github.com/icinga/icinga2/issues/6109) (Plugins, PR): Add 'used' feature to check\_memory
|
||||
* [#6090](https://github.com/icinga/icinga2/issues/6090) (Notifications, PR): Fixed URL encoding for HOSTNAME and SERVICENAME in mail notification
|
||||
* [#6078](https://github.com/icinga/icinga2/issues/6078) (Check Execution, PR): Add more metrics and details to built-in 'random' check
|
||||
* [#6039](https://github.com/icinga/icinga2/issues/6039) (Configuration, PR): Improve location info for some error messages
|
||||
* [#6033](https://github.com/icinga/icinga2/issues/6033) (Compat): Deprecate StatusDataWriter
|
||||
* [#6032](https://github.com/icinga/icinga2/issues/6032) (Compat): Deprecate CompatLogger
|
||||
* [#6010](https://github.com/icinga/icinga2/issues/6010) (Cluster, PR): Move the endpoint list into a new line for the 'cluster' check
|
||||
* [#5996](https://github.com/icinga/icinga2/issues/5996) (PR): Add systemd watchdog and adjust reload behaviour
|
||||
* [#5985](https://github.com/icinga/icinga2/issues/5985) (DB IDO, PR): Add query thresholds for the 'ido' check: Rate and pending queries
|
||||
* [#5979](https://github.com/icinga/icinga2/issues/5979) (CLI, PR): Add quit, exit and help
|
||||
* [#5973](https://github.com/icinga/icinga2/issues/5973) (API, Check Execution, PR): Add 'ttl' support for check result freshness via REST API
|
||||
* [#5959](https://github.com/icinga/icinga2/issues/5959) (API, PR): API: Add 'pretty' parameter for beautified JSON response bodies
|
||||
* [#5905](https://github.com/icinga/icinga2/issues/5905) (Elasticsearch): Add support for Elasticsearch 6
|
||||
* [#5888](https://github.com/icinga/icinga2/issues/5888) (DB IDO, PR): FindMySQL: Support mariadbclient implementation
|
||||
* [#5877](https://github.com/icinga/icinga2/issues/5877) (API): Add pretty format to REST API parameters \(for debugging\)
|
||||
* [#5811](https://github.com/icinga/icinga2/issues/5811) (CLI, PR): Update NodeName/ZoneName constants with 'api setup'
|
||||
* [#5767](https://github.com/icinga/icinga2/issues/5767) (CLI, PR): Implement ability to make global zones configurable during node wizard/setup
|
||||
* [#5733](https://github.com/icinga/icinga2/issues/5733) (Plugins, Windows, PR): Make --perf-syntax also change short message
|
||||
* [#5729](https://github.com/icinga/icinga2/issues/5729) (CLI, Cluster, PR): Correct node wizard output formatting
|
||||
* [#5675](https://github.com/icinga/icinga2/issues/5675) (InfluxDB, PR): Add pdv unit to influxdbwriter if not empty + doc
|
||||
* [#5627](https://github.com/icinga/icinga2/issues/5627) (InfluxDB, Metrics): InfluxDBWriter: Send metric unit \(perfdata\)
|
||||
* [#5605](https://github.com/icinga/icinga2/issues/5605) (CLI, Cluster, Configuration): Disable conf.d inclusion in node setup wizards
|
||||
* [#5509](https://github.com/icinga/icinga2/issues/5509) (Cluster, wishlist): Add metrics about communication between endpoints
|
||||
* [#5444](https://github.com/icinga/icinga2/issues/5444) (Cluster): Display endpoints in the second line of the ClusterCheckTask output
|
||||
* [#5426](https://github.com/icinga/icinga2/issues/5426) (CLI, Configuration, PR): Add the ability to disable the conf.d inclusion through the node wizard
|
||||
* [#5418](https://github.com/icinga/icinga2/issues/5418) (Plugins, Windows): Feature request: check\_perfmon.exe - Change name of counter in output
|
||||
* [#4966](https://github.com/icinga/icinga2/issues/4966) (CLI, Cluster): Unify setting of master zones name
|
||||
* [#4508](https://github.com/icinga/icinga2/issues/4508) (CLI): node wizard/setup: allow to disable conf.d inclusion
|
||||
* [#3455](https://github.com/icinga/icinga2/issues/3455) (API, Log): startup.log in stage dir has no timestamps
|
||||
* [#3245](https://github.com/icinga/icinga2/issues/3245) (CLI, help wanted, wishlist): Add option to Windows installer to add global zone during setup
|
||||
* [#2287](https://github.com/icinga/icinga2/issues/2287) (help wanted, wishlist): Please support systemd startup notification
|
||||
|
||||
### Bug
|
||||
|
||||
* [#6429](https://github.com/icinga/icinga2/issues/6429) (PR): Make HttpServerConnection\#m\_DataHandlerMutex a boost::recursive\_mutex
|
||||
* [#6428](https://github.com/icinga/icinga2/issues/6428) (API): Director kickstart wizard querying the API results in TLS stream disconnected infinite loop
|
||||
* [#6411](https://github.com/icinga/icinga2/issues/6411) (Plugins, Windows, PR): Windows: Conform to the Plugin API spec for performance label quoting
|
||||
* [#6407](https://github.com/icinga/icinga2/issues/6407) (Windows, PR): Fix wrong UOM in check\_uptime windows plugin
|
||||
* [#6405](https://github.com/icinga/icinga2/issues/6405) (Windows, PR): TcpSocket\#Bind\(\): reuse socket addresses on Windows, too
|
||||
* [#6403](https://github.com/icinga/icinga2/issues/6403) (API, PR): Conform to RFC for CRLF in HTTP requests
|
||||
* [#6401](https://github.com/icinga/icinga2/issues/6401) (Elasticsearch, InfluxDB, PR): Fix connection error handling in Elasticsearch and InfluxDB features
|
||||
* [#6397](https://github.com/icinga/icinga2/issues/6397) (Plugins, Windows, PR): TlsStream\#IsEof\(\): fix false positive EOF indicator
|
||||
* [#6394](https://github.com/icinga/icinga2/issues/6394) (Crash, Elasticsearch): Icinga will throw an exception, if ElasticSearch is not reachable
|
||||
* [#6393](https://github.com/icinga/icinga2/issues/6393) (API, Elasticsearch, PR): Stream\#ReadLine\(\): fix false positive buffer underflow indicator
|
||||
* [#6387](https://github.com/icinga/icinga2/issues/6387) (Configuration, Crash, Windows, PR): Remove ApiUser password\_hash functionality
|
||||
* [#6383](https://github.com/icinga/icinga2/issues/6383) (API, CLI, PR): HttpRequest\#ParseBody\(\): indicate success on complete body
|
||||
* [#6378](https://github.com/icinga/icinga2/issues/6378) (Windows): Analyze Windows reload behaviour
|
||||
* [#6371](https://github.com/icinga/icinga2/issues/6371) (API, Cluster, PR): ApiListener\#NewClientHandlerInternal\(\): Explicitly close the TLS stream on any failure
|
||||
* [#6368](https://github.com/icinga/icinga2/issues/6368) (CLI, PR): Fix program option parsing
|
||||
* [#6365](https://github.com/icinga/icinga2/issues/6365) (CLI): Different behavior between `icinga2 -V` and `icinga2 --version`
|
||||
* [#6355](https://github.com/icinga/icinga2/issues/6355) (API): HTTP header size too low: Long URLs and session cookies cause bad requests
|
||||
* [#6354](https://github.com/icinga/icinga2/issues/6354) (Elasticsearch): ElasticsearchWriter not writing to ES
|
||||
* [#6336](https://github.com/icinga/icinga2/issues/6336) (Log, PR): Fix unnecessary blank in log message
|
||||
* [#6324](https://github.com/icinga/icinga2/issues/6324) (Crash, PR): Ensure that password hash generation from OpenSSL is atomic
|
||||
* [#6319](https://github.com/icinga/icinga2/issues/6319) (Windows): Windows service restart fails and config validate runs forever
|
||||
* [#6297](https://github.com/icinga/icinga2/issues/6297) (Cluster, PR): Execute event commands only on actively checked host/service objects in an HA zone
|
||||
* [#6294](https://github.com/icinga/icinga2/issues/6294) (API, Configuration, PR): Ensure that group memberships on API object creation are unique
|
||||
* [#6292](https://github.com/icinga/icinga2/issues/6292) (Notifications, PR): Fix problem with reminder notifications if the checkable is flapping
|
||||
* [#6290](https://github.com/icinga/icinga2/issues/6290) (OpenTSDB, PR): Fixed opentsdb metric name with colon chars
|
||||
* [#6282](https://github.com/icinga/icinga2/issues/6282) (Configuration): Issue when using excludes in TimePeriod Objects
|
||||
* [#6279](https://github.com/icinga/icinga2/issues/6279) (Crash): segfault with sha1\_block\_data\_order\_avx of libcrypto
|
||||
* [#6255](https://github.com/icinga/icinga2/issues/6255) (Configuration): On debian based systems /etc/default/icinga2 is not read/used
|
||||
* [#6242](https://github.com/icinga/icinga2/issues/6242) (Plugins, Windows): Sporadic check\_nscp\_api timeouts
|
||||
* [#6239](https://github.com/icinga/icinga2/issues/6239) (Plugins, Windows, PR): Fix Windows check\_memory rounding
|
||||
* [#6231](https://github.com/icinga/icinga2/issues/6231) (Notifications): icinga2.8 - Notifications are sent even in downtime
|
||||
* [#6218](https://github.com/icinga/icinga2/issues/6218) (PR): attempt to fix issue \#5277
|
||||
* [#6217](https://github.com/icinga/icinga2/issues/6217) (Check Execution, PR): Fix check behavior on restart
|
||||
* [#6204](https://github.com/icinga/icinga2/issues/6204) (API, PR): API: Check if objects exists and return proper error message
|
||||
* [#6195](https://github.com/icinga/icinga2/issues/6195) (API, Crash, PR): Fix crash in remote api console
|
||||
* [#6193](https://github.com/icinga/icinga2/issues/6193) (Crash, Graylog, PR): GelfWriter: Fix crash on invalid performance data metrics
|
||||
* [#6184](https://github.com/icinga/icinga2/issues/6184) (API): debug console with API connection sometimes hangs since 2.8.2
|
||||
* [#6125](https://github.com/icinga/icinga2/issues/6125) (Configuration, PR): Fix description of the NotificationComponent in notification.conf
|
||||
* [#6077](https://github.com/icinga/icinga2/issues/6077) (API, PR): Allow to pass raw performance data in 'process-check-result' API action
|
||||
* [#6057](https://github.com/icinga/icinga2/issues/6057) (Notifications): Icinga2 sends notifications without logging about it and despite having a downtime
|
||||
* [#6020](https://github.com/icinga/icinga2/issues/6020) (CLI, PR): Fix crash when running 'icinga2 console' without HOME environment variable
|
||||
* [#6019](https://github.com/icinga/icinga2/issues/6019): icinga2 console -r crashes when run without a HOME environment variable
|
||||
* [#6016](https://github.com/icinga/icinga2/issues/6016) (Notifications, PR): Check notification state filters for problems only, not for Custom, etc.
|
||||
* [#5988](https://github.com/icinga/icinga2/issues/5988) (Check Execution, Cluster, PR): Fix concurrent checks limit while using command\_endpoint
|
||||
* [#5964](https://github.com/icinga/icinga2/issues/5964) (Metrics, OpenTSDB, PR): OpenTSDB writer - Fix function for escaping host tag chars.
|
||||
* [#5963](https://github.com/icinga/icinga2/issues/5963) (Metrics, OpenTSDB): OpenTSDB writer is escaping wrong chars for host names.
|
||||
* [#5952](https://github.com/icinga/icinga2/issues/5952) (Notifications): Custom notifications are filtered by object state
|
||||
* [#5940](https://github.com/icinga/icinga2/issues/5940) (PR): Remove deprecated Chocolatey functions
|
||||
* [#5928](https://github.com/icinga/icinga2/issues/5928) (PR): Fix build problem with MSVC
|
||||
* [#5908](https://github.com/icinga/icinga2/issues/5908) (Windows): Icinga2 fails to build on Windows
|
||||
* [#5901](https://github.com/icinga/icinga2/issues/5901) (PR): Do not replace colons in plugin output
|
||||
* [#5885](https://github.com/icinga/icinga2/issues/5885) (PR): Workaround for GCC bug 61321
|
||||
* [#5884](https://github.com/icinga/icinga2/issues/5884): Icinga2 fails to build
|
||||
* [#5872](https://github.com/icinga/icinga2/issues/5872) (PR): Replace incorrect fclose\(\) call with pclose\(\)
|
||||
* [#5863](https://github.com/icinga/icinga2/issues/5863) (PR): Fix glob error handling
|
||||
* [#5861](https://github.com/icinga/icinga2/issues/5861) (PR): Fix incorrect memory access
|
||||
* [#5860](https://github.com/icinga/icinga2/issues/5860) (PR): Fix memory leaks in the unit tests
|
||||
* [#5853](https://github.com/icinga/icinga2/issues/5853) (Plugins, Windows, PR): Fix missing space in check\_service output
|
||||
* [#5840](https://github.com/icinga/icinga2/issues/5840) (Elasticsearch, PR): Fix newline terminator for bulk requests in ElasticsearchWriter
|
||||
* [#5796](https://github.com/icinga/icinga2/issues/5796) (CLI, PR): Fix error reporting for 'icinga2 console -r'
|
||||
* [#5795](https://github.com/icinga/icinga2/issues/5795) (Elasticsearch): ElasticsearchWriter gives "Unexpected response code 400" with Elasticsearch 6.x
|
||||
* [#5763](https://github.com/icinga/icinga2/issues/5763) (API): "icinga2 api setup" should explicitly set the NodeName constant in constants.conf
|
||||
* [#5753](https://github.com/icinga/icinga2/issues/5753) (API, Cluster, Metrics, PR): Fix that RingBuffer does not get updated and add metrics about communication between endpoints
|
||||
* [#5718](https://github.com/icinga/icinga2/issues/5718) (API, PR): API: Fix http status codes
|
||||
* [#5550](https://github.com/icinga/icinga2/issues/5550) (API): Verify error codes and returned log messages in API actions
|
||||
* [#5277](https://github.com/icinga/icinga2/issues/5277) (Notifications): Flexible downtime is expired at end\_time, not trigger\_time+duration
|
||||
* [#5095](https://github.com/icinga/icinga2/issues/5095) (API): Wrong HTTP status code when API request fails
|
||||
* [#5083](https://github.com/icinga/icinga2/issues/5083) (Check Execution): Initial checks are not executed immediately
|
||||
* [#4786](https://github.com/icinga/icinga2/issues/4786) (API): API: Command process-check-result fails if it contains performance data
|
||||
* [#4785](https://github.com/icinga/icinga2/issues/4785) (Compat): Semicolons in plugin output are converted to colon
|
||||
* [#4732](https://github.com/icinga/icinga2/issues/4732) (API, Configuration): Duplicate groups allowed when creating host
|
||||
* [#4436](https://github.com/icinga/icinga2/issues/4436) (Check Execution): New objects not scheduled to check immediately
|
||||
* [#4272](https://github.com/icinga/icinga2/issues/4272) (Cluster, Configuration): Duplicating downtime from ScheduledDowntime object on each restart
|
||||
* [#3431](https://github.com/icinga/icinga2/issues/3431) (Cluster): Eventhandler trigger on all endpoints in high available zone
|
||||
|
||||
### ITL
|
||||
|
||||
* [#6389](https://github.com/icinga/icinga2/issues/6389) (ITL, PR): New ITL command nscp-local-tasksched
|
||||
* [#6348](https://github.com/icinga/icinga2/issues/6348) (ITL, PR): Fix for catalogued locally databases. Fixes \#6338
|
||||
* [#6338](https://github.com/icinga/icinga2/issues/6338) (ITL): db2\_health not working with catalogued databases, as --hostname is always used
|
||||
* [#6308](https://github.com/icinga/icinga2/issues/6308) (ITL, PR): Update lsi-raid ITL command
|
||||
* [#6263](https://github.com/icinga/icinga2/issues/6263) (ITL, PR): ITL: Add default thresholds to windows check commands
|
||||
* [#6139](https://github.com/icinga/icinga2/issues/6139) (ITL, PR): itl/disk: Ignore overlay and netfs filesystems
|
||||
* [#6045](https://github.com/icinga/icinga2/issues/6045) (ITL, PR): Move the "passive" check command to command-icinga.conf
|
||||
* [#6043](https://github.com/icinga/icinga2/issues/6043) (ITL): ITL "plugins" has an implicit dependency on "itl"
|
||||
* [#6034](https://github.com/icinga/icinga2/issues/6034) (ITL, PR): ITL by\_ssh add -E parameter
|
||||
* [#5958](https://github.com/icinga/icinga2/issues/5958) (ITL, PR): Add minimum version check to the built-in icinga command
|
||||
* [#5954](https://github.com/icinga/icinga2/issues/5954) (ITL, PR): ITL: Add mongodb --authdb parameter support
|
||||
* [#5951](https://github.com/icinga/icinga2/issues/5951) (ITL, PR): itl: Add command parameters for snmp-memory
|
||||
* [#5921](https://github.com/icinga/icinga2/issues/5921) (ITL, PR): Add icingacli-director check to ITL
|
||||
* [#5920](https://github.com/icinga/icinga2/issues/5920) (ITL): Add Check for Director Jobs to ITL
|
||||
* [#5914](https://github.com/icinga/icinga2/issues/5914) (ITL, PR): Fix for wrong attribute in ITL mongodb CheckCommand
|
||||
* [#5906](https://github.com/icinga/icinga2/issues/5906) (ITL, PR): Add check\_openmanage command to ITL.
|
||||
* [#5902](https://github.com/icinga/icinga2/issues/5902) (ITL, PR): Add parameter --octetlength to snmp-storage command.
|
||||
* [#5817](https://github.com/icinga/icinga2/issues/5817) (ITL): mongodb\_address vs mongodb\_host
|
||||
* [#5812](https://github.com/icinga/icinga2/issues/5812) (ITL): Better way to check required parameters in notification scripts
|
||||
* [#5805](https://github.com/icinga/icinga2/issues/5805) (ITL, PR): Add support for LD\_LIBRARY\_PATH env variable in oracle\_health ITL CheckCommand
|
||||
* [#5792](https://github.com/icinga/icinga2/issues/5792) (ITL, PR): ITL: Add check\_rpc
|
||||
* [#5787](https://github.com/icinga/icinga2/issues/5787) (Check Execution, ITL): random check should provide performance data metrics
|
||||
* [#5744](https://github.com/icinga/icinga2/issues/5744) (Check Execution, ITL, PR): Implement DummyCheckTask and move dummy into embedded in-memory checks
|
||||
* [#5717](https://github.com/icinga/icinga2/issues/5717) (ITL, PR): add order tags to disk check
|
||||
* [#5714](https://github.com/icinga/icinga2/issues/5714) (ITL): disk check in icinga2/itl/command-plugins.conf lacks order tags
|
||||
* [#5260](https://github.com/icinga/icinga2/issues/5260) (ITL): CheckCommand mongodb does not expose authdb option
|
||||
|
||||
### Documentation
|
||||
|
||||
* [#6436](https://github.com/icinga/icinga2/issues/6436) (Documentation, PR): Update tested Elasticsearch version
|
||||
* [#6435](https://github.com/icinga/icinga2/issues/6435) (Documentation, PR): Add note on sysconfig shell variables for Systemd to the Upgrading docs
|
||||
* [#6433](https://github.com/icinga/icinga2/issues/6433) (Documentation, PR): Docs: Fix typos in 03-monitoring-basics.md
|
||||
* [#6426](https://github.com/icinga/icinga2/issues/6426) (Documentation, PR): Update 'Upgrading to 2.9' docs
|
||||
* [#6413](https://github.com/icinga/icinga2/issues/6413) (Documentation, PR): Fix table in Livestatus Filters
|
||||
* [#6391](https://github.com/icinga/icinga2/issues/6391) (Documentation, PR): Docs: Fix icinga.com link
|
||||
* [#6390](https://github.com/icinga/icinga2/issues/6390) (Documentation, Windows, PR): Docs: Update Windows wizard images
|
||||
* [#6375](https://github.com/icinga/icinga2/issues/6375) (Documentation, PR): some minor fixes in the flapping documentation
|
||||
* [#6374](https://github.com/icinga/icinga2/issues/6374) (Documentation, PR): Docs: Add an additional note for VMWare timeouts on Ubuntu 16.04 LTS
|
||||
* [#6373](https://github.com/icinga/icinga2/issues/6373) (Documentation, PR): Drop command template imports for versions \< 2.6 in the docs
|
||||
* [#6372](https://github.com/icinga/icinga2/issues/6372) (Documentation, PR): Remove the import of 'legacy-timeperiod' in the docs
|
||||
* [#6350](https://github.com/icinga/icinga2/issues/6350) (Documentation, PR): clarify the permision system of the api in the docs
|
||||
* [#6344](https://github.com/icinga/icinga2/issues/6344) (Documentation, PR): README: Fix broken community link
|
||||
* [#6330](https://github.com/icinga/icinga2/issues/6330) (Documentation, PR): Fix $ipaddress6$ attribute name typo in the docs
|
||||
* [#6317](https://github.com/icinga/icinga2/issues/6317) (Documentation, PR): Add a note on Windows NSClient++ CPU checks to the docs
|
||||
* [#6289](https://github.com/icinga/icinga2/issues/6289) (Documentation, PR): Update release documentation with git tag signing key configuration
|
||||
* [#6286](https://github.com/icinga/icinga2/issues/6286) (Documentation): Update Windows wizard screenshots in the docs
|
||||
* [#6283](https://github.com/icinga/icinga2/issues/6283) (Documentation, PR): edit Icinga license info so that GitHub recognizes it
|
||||
* [#6271](https://github.com/icinga/icinga2/issues/6271) (Documentation, PR): Enhance advanced topics with \(scheduled\) downtimes
|
||||
* [#6267](https://github.com/icinga/icinga2/issues/6267) (Documentation, PR): Update docs to reflect required user\* attributes for notification objects
|
||||
* [#6265](https://github.com/icinga/icinga2/issues/6265) (Documentation): Notifications user/user\_groups required
|
||||
* [#6264](https://github.com/icinga/icinga2/issues/6264) (Documentation, PR): Enhance "Getting Started" chapter
|
||||
* [#6262](https://github.com/icinga/icinga2/issues/6262) (Documentation, PR): Enhance the environment variables chapter
|
||||
* [#6254](https://github.com/icinga/icinga2/issues/6254) (Documentation, PR): Enhance release documentation
|
||||
* [#6253](https://github.com/icinga/icinga2/issues/6253) (Documentation, PR): Doc: Add note for not fully supported Plugin collections
|
||||
* [#6243](https://github.com/icinga/icinga2/issues/6243) (Documentation, PR): Update PostgreSQL documentation
|
||||
* [#6226](https://github.com/icinga/icinga2/issues/6226) (Documentation, PR): Fix broken SELinux anchor in the documentation
|
||||
* [#6224](https://github.com/icinga/icinga2/issues/6224) (Documentation, PR): Update volatile docs
|
||||
* [#6216](https://github.com/icinga/icinga2/issues/6216) (Documentation): Volatile service explanation
|
||||
* [#6180](https://github.com/icinga/icinga2/issues/6180) (Documentation, PR): Doc: fixed wrong information about defaulting
|
||||
* [#6128](https://github.com/icinga/icinga2/issues/6128) (Documentation, PR): Adding documentation for configurable global zones during setup
|
||||
* [#6067](https://github.com/icinga/icinga2/issues/6067) (Documentation, Windows, PR): Improve Windows builds and testing
|
||||
* [#6022](https://github.com/icinga/icinga2/issues/6022) (Configuration, Documentation, PR): Update default config and documentation for the "library" keyword
|
||||
* [#6018](https://github.com/icinga/icinga2/issues/6018) (Documentation): Move init configuration from getting-started
|
||||
* [#6000](https://github.com/icinga/icinga2/issues/6000) (Documentation, PR): Add newline to COPYING to fix Github license detection
|
||||
* [#5948](https://github.com/icinga/icinga2/issues/5948) (Documentation, PR): doc: Improve INSTALL documentation
|
||||
* [#4958](https://github.com/icinga/icinga2/issues/4958) (Check Execution, Documentation): How to set the HOME environment variable
|
||||
|
||||
### Support
|
||||
|
||||
* [#6439](https://github.com/icinga/icinga2/issues/6439) (PR): Revert "Fix obsolete parameter in Systemd script"
|
||||
* [#6423](https://github.com/icinga/icinga2/issues/6423) (PR): Fix missing next check update causing the scheduler to execute checks too often
|
||||
* [#6421](https://github.com/icinga/icinga2/issues/6421) (Check Execution): High CPU load due to seemingly ignored check\_interval
|
||||
* [#6412](https://github.com/icinga/icinga2/issues/6412) (Plugins, Windows, PR): Fix output formatting in windows plugins
|
||||
* [#6402](https://github.com/icinga/icinga2/issues/6402) (Cluster, code-quality, PR): Use SSL\_pending\(\) for remaining TLS stream data
|
||||
* [#6384](https://github.com/icinga/icinga2/issues/6384) (PR): Remove leftover for sysconfig file parsing
|
||||
* [#6381](https://github.com/icinga/icinga2/issues/6381) (Packages, PR): Fix sysconfig not being handled correctly by sysvinit
|
||||
* [#6377](https://github.com/icinga/icinga2/issues/6377) (code-quality, PR): Fix missing name for workqueue while creating runtime objects via API
|
||||
* [#6364](https://github.com/icinga/icinga2/issues/6364) (code-quality): lib/base/workqueue.cpp:212: assertion failed: !m\_Name.IsEmpty\(\)
|
||||
* [#6361](https://github.com/icinga/icinga2/issues/6361) (API, Cluster): Analyse socket IO handling with HTTP/JSON-RPC
|
||||
* [#6359](https://github.com/icinga/icinga2/issues/6359) (Configuration, PR): Fix ScheduledDowntimes replicating on restart
|
||||
* [#6357](https://github.com/icinga/icinga2/issues/6357) (API, PR): Increase header size to 8KB for HTTP requests
|
||||
* [#6347](https://github.com/icinga/icinga2/issues/6347) (Packages, PR): SELinux: Allow notification plugins to read local users
|
||||
* [#6343](https://github.com/icinga/icinga2/issues/6343) (Check Execution, Cluster, PR): Fix that checks with command\_endpoint don't return any check results
|
||||
* [#6337](https://github.com/icinga/icinga2/issues/6337): Checks via command\_endpoint are not executed \(snapshot packages only\)
|
||||
* [#6328](https://github.com/icinga/icinga2/issues/6328) (Installation, Packages, PR): Rework sysconfig file/startup environment
|
||||
* [#6320](https://github.com/icinga/icinga2/issues/6320) (PR): Ensure that icinga\_min\_version parameter is optional
|
||||
* [#6309](https://github.com/icinga/icinga2/issues/6309) (PR): Fix compiler warning in checkercomponent.ti
|
||||
* [#6306](https://github.com/icinga/icinga2/issues/6306) (code-quality, PR): Adjust message for CheckResultReader deprecation
|
||||
* [#6301](https://github.com/icinga/icinga2/issues/6301) (Documentation, code-quality, PR): Adjust deprecation removal for compat features
|
||||
* [#6295](https://github.com/icinga/icinga2/issues/6295) (Compat, PR): Deprecate compatlog feature
|
||||
* [#6238](https://github.com/icinga/icinga2/issues/6238) (Notifications, PR): Implement better way to check parameters in notification scripts
|
||||
* [#6233](https://github.com/icinga/icinga2/issues/6233) (Check Execution): Verify next check execution on daemon reload
|
||||
* [#6229](https://github.com/icinga/icinga2/issues/6229) (Packages, PR): Don't use shell variables in sysconfig
|
||||
* [#6214](https://github.com/icinga/icinga2/issues/6214) (Packages): Reload-internal with unresolved shell variable
|
||||
* [#6201](https://github.com/icinga/icinga2/issues/6201) (Windows, PR): Handle exceptions from X509Certificate2
|
||||
* [#6199](https://github.com/icinga/icinga2/issues/6199) (API, PR): Return 500 when no api action is successful
|
||||
* [#6198](https://github.com/icinga/icinga2/issues/6198) (Compat, PR): Deprecate Statusdatawriter
|
||||
* [#6187](https://github.com/icinga/icinga2/issues/6187) (code-quality, PR): Remove Icinga Studio Screenshots
|
||||
* [#6181](https://github.com/icinga/icinga2/issues/6181) (Tests, PR): tests: Ensure IcingaApplication is initialized before adding config
|
||||
* [#6174](https://github.com/icinga/icinga2/issues/6174) (API, PR): Fix crash without CORS setting
|
||||
* [#6173](https://github.com/icinga/icinga2/issues/6173) (API, Crash): Using the API crashes Icinga2 in v2.8.1-537-g064fc80
|
||||
* [#6171](https://github.com/icinga/icinga2/issues/6171) (code-quality, PR): Update copyright of the Windows Agent to 2018
|
||||
* [#6163](https://github.com/icinga/icinga2/issues/6163) (PR): Fix reload handling by updating the PID file before process overtake
|
||||
* [#6160](https://github.com/icinga/icinga2/issues/6160) (code-quality, PR): Replace std::vector:push\_back calls with initializer list
|
||||
* [#6126](https://github.com/icinga/icinga2/issues/6126) (PR): Require systemd headers
|
||||
* [#6113](https://github.com/icinga/icinga2/issues/6113) (Tests, PR): appveyor: Disable artifacts until we use them
|
||||
* [#6107](https://github.com/icinga/icinga2/issues/6107) (code-quality, PR): Allow MYSQL\_LIB to be specified by ENV variable
|
||||
* [#6105](https://github.com/icinga/icinga2/issues/6105) (Tests): Snapshot builds fail on livestatus tests
|
||||
* [#6098](https://github.com/icinga/icinga2/issues/6098) (API, code-quality, PR): Clean up CORS implementation
|
||||
* [#6085](https://github.com/icinga/icinga2/issues/6085) (Cluster, Crash, PR): Fix crash with anonymous clients on certificate signing request and storing sent bytes
|
||||
* [#6083](https://github.com/icinga/icinga2/issues/6083) (Log, code-quality, PR): Fix wrong type logging in ConfigItem::Commit
|
||||
* [#6082](https://github.com/icinga/icinga2/issues/6082) (Installation, Packages): PID file removed after reload
|
||||
* [#6063](https://github.com/icinga/icinga2/issues/6063) (Compat, PR): Deprecate CheckResultReader
|
||||
* [#6062](https://github.com/icinga/icinga2/issues/6062) (code-quality, PR): Remove the obsolete 'make-agent-config.py' script
|
||||
* [#6061](https://github.com/icinga/icinga2/issues/6061) (code-quality, PR): Remove jenkins test scripts
|
||||
* [#6060](https://github.com/icinga/icinga2/issues/6060) (code-quality, PR): Remove Icinga development docker scripts
|
||||
* [#6059](https://github.com/icinga/icinga2/issues/6059) (code-quality, PR): Remove Icinga Studio
|
||||
* [#6058](https://github.com/icinga/icinga2/issues/6058) (code-quality, PR): Clean up the Icinga plugins a bit
|
||||
* [#6055](https://github.com/icinga/icinga2/issues/6055) (Check Execution, Windows, code-quality, PR): methods: Remove unused clrchecktask feature
|
||||
* [#6054](https://github.com/icinga/icinga2/issues/6054) (Check Execution, Windows, code-quality): Remove unused clrchecktask
|
||||
* [#6051](https://github.com/icinga/icinga2/issues/6051) (code-quality, PR): Set FOLDER cmake property for the icingaloader target
|
||||
* [#6050](https://github.com/icinga/icinga2/issues/6050) (code-quality, PR): Replace boost::algorithm::split calls with String::Split
|
||||
* [#6044](https://github.com/icinga/icinga2/issues/6044) (code-quality, PR): Implement support for frozen arrays and dictionaries
|
||||
* [#6038](https://github.com/icinga/icinga2/issues/6038) (PR): Fix missing include for boost::split
|
||||
* [#6037](https://github.com/icinga/icinga2/issues/6037) (PR): Fix build error on Windows
|
||||
* [#6029](https://github.com/icinga/icinga2/issues/6029) (code-quality, PR): Remove duplicate semicolons
|
||||
* [#6028](https://github.com/icinga/icinga2/issues/6028) (Packages): python notification not running when icinga ran as a service
|
||||
* [#6026](https://github.com/icinga/icinga2/issues/6026) (Check Execution, Windows, PR): Fix flapping support for Windows
|
||||
* [#6025](https://github.com/icinga/icinga2/issues/6025) (Windows): Implement Flapping on Windows
|
||||
* [#6023](https://github.com/icinga/icinga2/issues/6023): Icinga should check whether the libsystemd library is available
|
||||
* [#6017](https://github.com/icinga/icinga2/issues/6017) (PR): Remove build breaking include
|
||||
* [#6015](https://github.com/icinga/icinga2/issues/6015) (code-quality, PR): Fix whitespaces in CMakeLists files
|
||||
* [#6009](https://github.com/icinga/icinga2/issues/6009) (PR): Build fix for ancient versions of GCC
|
||||
* [#6008](https://github.com/icinga/icinga2/issues/6008) (PR): Fix compatibility with CMake \< 3.1
|
||||
* [#6007](https://github.com/icinga/icinga2/issues/6007) (PR): Fix missing include
|
||||
* [#6005](https://github.com/icinga/icinga2/issues/6005) (PR): Fix incorrect dependencies for mkunity targets
|
||||
* [#5999](https://github.com/icinga/icinga2/issues/5999) (PR): Build fix
|
||||
* [#5998](https://github.com/icinga/icinga2/issues/5998) (code-quality, PR): Build all remaining libraries as object libraries
|
||||
* [#5997](https://github.com/icinga/icinga2/issues/5997) (PR): Use gcc-ar and gcc-ranlib when building with -flto
|
||||
* [#5994](https://github.com/icinga/icinga2/issues/5994) (InfluxDB, PR): InfluxDBWriter: Fix macro in template
|
||||
* [#5993](https://github.com/icinga/icinga2/issues/5993) (code-quality, PR): Use CMake object libraries for our libs
|
||||
* [#5992](https://github.com/icinga/icinga2/issues/5992) (code-quality, PR): Remove unused includes
|
||||
* [#5984](https://github.com/icinga/icinga2/issues/5984) (DB IDO, PR): Fix missing static libraries for DB IDO
|
||||
* [#5983](https://github.com/icinga/icinga2/issues/5983) (code-quality, PR): Use initializer lists for arrays and dictionaries
|
||||
* [#5980](https://github.com/icinga/icinga2/issues/5980) (code-quality, PR): Explicitly pass 1 or 0 for notification filters in DB IDO
|
||||
* [#5974](https://github.com/icinga/icinga2/issues/5974) (PR): Fix non-unity builds with the icinga check
|
||||
* [#5971](https://github.com/icinga/icinga2/issues/5971) (code-quality, PR): Remove libdemo and libhello
|
||||
* [#5970](https://github.com/icinga/icinga2/issues/5970) (code-quality, PR): Allocate ConfigItemBuilder objects on the stack
|
||||
* [#5969](https://github.com/icinga/icinga2/issues/5969) (code-quality, PR): Remove the WorkQueue::m\_StatsMutex instance variable
|
||||
* [#5968](https://github.com/icinga/icinga2/issues/5968) (code-quality, PR): Update the RingBuffer class to use a regular mutex instead of ObjectLock
|
||||
* [#5967](https://github.com/icinga/icinga2/issues/5967) (code-quality, PR): Avoid accessing attributes for validators where not necessary
|
||||
* [#5965](https://github.com/icinga/icinga2/issues/5965) (code-quality, PR): Avoid unnecessary casts in the JSON encoder
|
||||
* [#5961](https://github.com/icinga/icinga2/issues/5961) (PR): Fix macro warning from the icinga check
|
||||
* [#5960](https://github.com/icinga/icinga2/issues/5960): Macro warning from the icinga check
|
||||
* [#5957](https://github.com/icinga/icinga2/issues/5957) (code-quality, PR): Change a bunch more copyright headers for 2018
|
||||
* [#5955](https://github.com/icinga/icinga2/issues/5955) (Configuration, code-quality, PR): Avoid mutex contention in the config parser
|
||||
* [#5946](https://github.com/icinga/icinga2/issues/5946) (code-quality, PR): Use clang-tidy to add some more C++11 features
|
||||
* [#5945](https://github.com/icinga/icinga2/issues/5945) (code-quality, PR): Fix incorrect indentation for code generated by mkclass
|
||||
* [#5944](https://github.com/icinga/icinga2/issues/5944) (code-quality, PR): Add the final keyword to classes
|
||||
* [#5939](https://github.com/icinga/icinga2/issues/5939) (PR): Build fix for Debian wheezy
|
||||
* [#5937](https://github.com/icinga/icinga2/issues/5937) (code-quality, PR): Remove inline methods and use explicit template instantiation to minimize the number of weak symbols
|
||||
* [#5936](https://github.com/icinga/icinga2/issues/5936) (code-quality, PR): Clean up source lists in the CMakeLists.txt files
|
||||
* [#5935](https://github.com/icinga/icinga2/issues/5935) (code-quality, PR): Implement support for precompiled headers
|
||||
* [#5934](https://github.com/icinga/icinga2/issues/5934) (code-quality, PR): Add more include/library paths for MySQL and PostgreSQL
|
||||
* [#5933](https://github.com/icinga/icinga2/issues/5933) (code-quality, PR): Change copyright headers for 2018
|
||||
* [#5932](https://github.com/icinga/icinga2/issues/5932) (code-quality, PR): Fix copyright header in cli/troubleshootcommand.hpp
|
||||
* [#5931](https://github.com/icinga/icinga2/issues/5931) (code-quality, PR): Improve detection for linker flags
|
||||
* [#5930](https://github.com/icinga/icinga2/issues/5930) (code-quality, PR): Replace boost::function with std::function
|
||||
* [#5929](https://github.com/icinga/icinga2/issues/5929) (code-quality, PR): Get rid of boost::assign::list\_of in mkclass
|
||||
* [#5927](https://github.com/icinga/icinga2/issues/5927) (code-quality, PR): Build libraries as static libraries
|
||||
* [#5909](https://github.com/icinga/icinga2/issues/5909) (code-quality, PR): WIP: Improve build times
|
||||
* [#5903](https://github.com/icinga/icinga2/issues/5903) (code-quality, PR): Cleanup CompatUtility class and features
|
||||
* [#5897](https://github.com/icinga/icinga2/issues/5897) (code-quality, PR): Remove unnecessary inline statements
|
||||
* [#5894](https://github.com/icinga/icinga2/issues/5894) (code-quality, PR): Remove string\_iless
|
||||
* [#5891](https://github.com/icinga/icinga2/issues/5891) (code-quality, PR): Update .gitignore
|
||||
* [#5889](https://github.com/icinga/icinga2/issues/5889) (code-quality, PR): execvpe: Fixup indention for readability
|
||||
* [#5887](https://github.com/icinga/icinga2/issues/5887) (PR): Windows build fix
|
||||
* [#5886](https://github.com/icinga/icinga2/issues/5886) (code-quality): Remove unnecessary 'inline' keyword
|
||||
* [#5882](https://github.com/icinga/icinga2/issues/5882) (code-quality, PR): Avoid unnecessary allocations
|
||||
* [#5871](https://github.com/icinga/icinga2/issues/5871) (code-quality, PR): Unit tests for the LegacyTimePeriod class
|
||||
* [#5868](https://github.com/icinga/icinga2/issues/5868) (Configuration, code-quality, PR): Use std::unique\_ptr for Expression objects
|
||||
* [#5865](https://github.com/icinga/icinga2/issues/5865) (code-quality, PR): Add missing initializer in Utility::NewUniqueID\(\)
|
||||
* [#5862](https://github.com/icinga/icinga2/issues/5862) (code-quality, PR): Replace a few more NULLs with nullptr
|
||||
* [#5858](https://github.com/icinga/icinga2/issues/5858) (Tests, code-quality, PR): Travis: Add support for Coverity
|
||||
* [#5857](https://github.com/icinga/icinga2/issues/5857) (code-quality, PR): Fix compiler warnings
|
||||
* [#5855](https://github.com/icinga/icinga2/issues/5855) (PR): Fix build problems with Visual Studio 2017
|
||||
* [#5848](https://github.com/icinga/icinga2/issues/5848) (code-quality, PR): Fix COPYING format
|
||||
* [#5846](https://github.com/icinga/icinga2/issues/5846) (code-quality, PR): Fix compiler warnings
|
||||
* [#5831](https://github.com/icinga/icinga2/issues/5831) (Check Execution, Configuration): No checks were launched on snapshot version 2.8.0.71 \(RHEL6\)
|
||||
* [#5827](https://github.com/icinga/icinga2/issues/5827) (code-quality, PR): Replace StatsFunction with Function
|
||||
* [#5825](https://github.com/icinga/icinga2/issues/5825) (code-quality, PR): Replace boost::assign::list\_of with initializer lists
|
||||
* [#5824](https://github.com/icinga/icinga2/issues/5824) (code-quality, PR): Replace a few Boost features with equivalent C++11 features
|
||||
* [#5821](https://github.com/icinga/icinga2/issues/5821) (Packages, Windows): check\_disk build error
|
||||
* [#5819](https://github.com/icinga/icinga2/issues/5819) (code-quality, PR): Avoid unnecessary allocations in the FunctionCallExpression class
|
||||
* [#5816](https://github.com/icinga/icinga2/issues/5816) (code-quality, PR): Re-implement WrapFunction\(\) using C++11 features
|
||||
* [#5809](https://github.com/icinga/icinga2/issues/5809) (Documentation, Installation, PR): Raise required OpenSSL version to 1.0.1
|
||||
* [#5758](https://github.com/icinga/icinga2/issues/5758) (Documentation, Packages): Completely remove the spec file from the icinga2 repository
|
||||
* [#5743](https://github.com/icinga/icinga2/issues/5743) (CLI, Configuration, Installation): node setup: Deprecate --master\_host and use --parent\_host instead
|
||||
* [#5725](https://github.com/icinga/icinga2/issues/5725) (code-quality, PR): Use real UUIDs for Utility::NewUniqueID
|
||||
* [#5388](https://github.com/icinga/icinga2/issues/5388) (Packages, PR): Handle mis-detection with clang on RHEL/CentOS 7
|
||||
* [#3246](https://github.com/icinga/icinga2/issues/3246) (Installation): Add option to windows installer to disable inclusion of conf.d directory
|
||||
|
||||
## 2.8.4 (2018-04-25)
|
||||
|
||||
|
173
CMakeLists.txt
@ -1,22 +1,7 @@
|
||||
# Icinga 2
|
||||
# Copyright (C) 2012-2018 Icinga Development Team (https://www.icinga.com/)
|
||||
#
|
||||
# This program is free software; you can redistribute it and/or
|
||||
# modify it under the terms of the GNU General Public License
|
||||
# as published by the Free Software Foundation; either version 2
|
||||
# of the License, or (at your option) any later version.
|
||||
#
|
||||
# This program is distributed in the hope that it will be useful,
|
||||
# but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
# GNU General Public License for more details.
|
||||
#
|
||||
# You should have received a copy of the GNU General Public License
|
||||
# along with this program; if not, write to the Free Software Foundation
|
||||
# Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA.
|
||||
# Icinga 2 | (c) 2012 Icinga GmbH | GPLv2+
|
||||
|
||||
cmake_minimum_required(VERSION 2.8.8)
|
||||
set(BOOST_MIN_VERSION "1.48.0")
|
||||
set(BOOST_MIN_VERSION "1.66.0")
|
||||
|
||||
project(icinga2)
|
||||
list(APPEND CMAKE_MODULE_PATH "${CMAKE_CURRENT_SOURCE_DIR}/cmake")
|
||||
@ -42,24 +27,45 @@ option (USE_SYSTEMD
|
||||
|
||||
set(HAVE_SYSTEMD ${USE_SYSTEMD})
|
||||
|
||||
file(STRINGS VERSION VERSION_LINE REGEX "^Version: ")
|
||||
string(REPLACE "Version: " "" ICINGA2_VERSION ${VERSION_LINE})
|
||||
|
||||
include(GNUInstallDirs)
|
||||
include(InstallConfig)
|
||||
include(SetFullDir)
|
||||
|
||||
set(ICINGA2_USER "icinga" CACHE STRING "Icinga 2 user")
|
||||
set(ICINGA2_GROUP "icinga" CACHE STRING "Icinga 2 group")
|
||||
set(ICINGA2_COMMAND_GROUP "icingacmd" CACHE STRING "Icinga 2 command group")
|
||||
set(ICINGA2_RUNDIR "${CMAKE_INSTALL_FULL_LOCALSTATEDIR}/run" CACHE STRING "/run directory")
|
||||
set(ICINGA2_PLUGINDIR "/usr/lib/nagios/plugins" CACHE STRING "Path for the check plugins")
|
||||
set(ICINGA2_GIT_VERSION_INFO ON CACHE BOOL "Whether to use git describe")
|
||||
set(ICINGA2_UNITY_BUILD ON CACHE BOOL "Whether to perform a unity build")
|
||||
set(ICINGA2_LTO_BUILD OFF CACHE BOOL "Whether to use LTO")
|
||||
|
||||
if(NOT WIN32)
|
||||
set(ICINGA2_SYSCONFIGFILE "${CMAKE_INSTALL_FULL_SYSCONFDIR}/sysconfig/icinga2" CACHE PATH "where to store configuation for the init system, defaults to /etc/sysconfig/icinga2")
|
||||
set(ICINGA2_CONFIGDIR "${CMAKE_INSTALL_SYSCONFDIR}/icinga2" CACHE FILEPATH "Main config directory, e.g. /etc/icinga2")
|
||||
set(ICINGA2_CACHEDIR "${CMAKE_INSTALL_LOCALSTATEDIR}/cache/icinga2" CACHE FILEPATH "Directory for cache files, e.g. /var/cache/icinga2")
|
||||
set(ICINGA2_DATADIR "${CMAKE_INSTALL_LOCALSTATEDIR}/lib/icinga2" CACHE FILEPATH "Data directory for the daemon, e.g. /var/lib/icinga2")
|
||||
set(ICINGA2_LOGDIR "${CMAKE_INSTALL_LOCALSTATEDIR}/log/icinga2" CACHE FILEPATH "Logging directory, e.g. /var/log/icinga2")
|
||||
set(ICINGA2_SPOOLDIR "${CMAKE_INSTALL_LOCALSTATEDIR}/spool/icinga2" CACHE FILEPATH "Spooling directory, e.g. /var/spool/icinga2")
|
||||
set(ICINGA2_RUNDIR "${CMAKE_INSTALL_LOCALSTATEDIR}/run" CACHE STRING "/run directory (deprecated, please use ICINGA2_INITRUNDIR)")
|
||||
set(ICINGA2_INITRUNDIR "${ICINGA2_RUNDIR}/icinga2" CACHE FILEPATH "Runtime data for the init system, e.g. /run/icinga2")
|
||||
|
||||
set(ICINGA2_PKGDATADIR "${CMAKE_INSTALL_DATADIR}/icinga2" CACHE FILEPATH "Installed data, e.g. /usr/share/icinga2")
|
||||
set(ICINGA2_INCLUDEDIR "${ICINGA2_PKGDATADIR}/include" CACHE FILEPATH "Include directory for the ITL, e.g. /usr/share/icinga2/include")
|
||||
|
||||
# ensure absolute paths
|
||||
set_full_dir(ICINGA2_FULL_CONFIGDIR "${ICINGA2_CONFIGDIR}")
|
||||
set_full_dir(ICINGA2_FULL_CACHEDIR "${ICINGA2_CACHEDIR}")
|
||||
set_full_dir(ICINGA2_FULL_DATADIR "${ICINGA2_DATADIR}")
|
||||
set_full_dir(ICINGA2_FULL_LOGDIR "${ICINGA2_LOGDIR}")
|
||||
set_full_dir(ICINGA2_FULL_SPOOLDIR "${ICINGA2_SPOOLDIR}")
|
||||
set_full_dir(ICINGA2_FULL_RUNDIR "${ICINGA2_RUNDIR}")
|
||||
set_full_dir(ICINGA2_FULL_INITRUNDIR "${ICINGA2_INITRUNDIR}")
|
||||
set_full_dir(ICINGA2_FULL_PKGDATADIR "${ICINGA2_PKGDATADIR}")
|
||||
set_full_dir(ICINGA2_FULL_INCLUDEDIR "${ICINGA2_INCLUDEDIR}")
|
||||
|
||||
set(LOGROTATE_DIR "${CMAKE_INSTALL_SYSCONFDIR}/logrotate.d" CACHE STRING "Location of logrotate configs, e.g. /etc/logrotate.d")
|
||||
set(BASHCOMPLETION_DIR "${CMAKE_INSTALL_SYSCONFDIR}/bash_completion.d" CACHE STRING "Location of bash_completion files, e.g. /etc/bash_completion.d")
|
||||
|
||||
if(NOT WIN32)
|
||||
set(ICINGA2_SYSCONFIGFILE "${CMAKE_INSTALL_SYSCONFDIR}/sysconfig/icinga2" CACHE PATH "where to store configuation for the init system, defaults to /etc/sysconfig/icinga2")
|
||||
endif()
|
||||
|
||||
site_name(ICINGA2_BUILD_HOST_NAME)
|
||||
@ -95,15 +101,38 @@ else()
|
||||
string(SUBSTRING ${SPEC_REVISION} 10 ${SPEC_REVISION_LENGTH} SPEC_REVISION)
|
||||
|
||||
set(GIT_VERSION "r${SPEC_VERSION}-${SPEC_REVISION}")
|
||||
set(ICINGA2_VERSION "${SPEC_VERSION}")
|
||||
else()
|
||||
# use GIT version as ICINGA2_VERSION
|
||||
string(REGEX REPLACE "^[rv]" "" ICINGA2_VERSION "${GIT_VERSION}")
|
||||
endif()
|
||||
configure_file(icinga-version.h.cmake icinga-version.h)
|
||||
endif()
|
||||
|
||||
# NuGet on Windows requires a semantic versioning, example: 2.10.4.123 (only 4 element, only numeric)
|
||||
string(REGEX REPLACE "-([0-9]+).*$" ".\\1" ICINGA2_VERSION_SAFE "${ICINGA2_VERSION}")
|
||||
string(REGEX REPLACE "-[^\\.]*(.*)$" "\\1" ICINGA2_VERSION_SAFE "${ICINGA2_VERSION_SAFE}")
|
||||
message(STATUS "ICINGA2_VERSION_SAFE=${ICINGA2_VERSION_SAFE}")
|
||||
|
||||
if(WIN32)
|
||||
set(Boost_USE_STATIC_LIBS ON)
|
||||
add_definitions(-DBOOST_ALL_NO_LIB)
|
||||
set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} /bigobj")
|
||||
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} /bigobj")
|
||||
# Disabled for linking issues for newer Boost versions, they link against Windows SDKs
|
||||
#add_definitions(-DBOOST_ALL_NO_LIB)
|
||||
|
||||
# Disable optimization for Boost::context
|
||||
# https://www.boost.org/doc/libs/1_69_0/libs/context/doc/html/context/overview.html
|
||||
# https://docs.microsoft.com/en-us/cpp/build/reference/gl-whole-program-optimization?view=vs-2017
|
||||
set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} /bigobj /GL- /EHs")
|
||||
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} /bigobj /GL- /EHs")
|
||||
|
||||
# detect if 32-bit target
|
||||
if(CMAKE_VS_PLATFORM_NAME STREQUAL "Win32")
|
||||
# SAFESEH is not supported in Boost on Windows x86
|
||||
# maybe it is when Boost is compiled with it...
|
||||
# https://lists.boost.org/Archives/boost/2013/10/206720.php
|
||||
# https://docs.microsoft.com/en-us/cpp/build/reference/safeseh-image-has-safe-exception-handlers?view=vs-2017
|
||||
set(CMAKE_EXE_LINKER_FLAGS "${CMAKE_EXE_LINKER_FLAGS} /SAFESEH:NO")
|
||||
endif()
|
||||
endif()
|
||||
|
||||
if(NOT DEFINED LOGROTATE_HAS_SU)
|
||||
@ -121,9 +150,18 @@ if(NOT DEFINED LOGROTATE_HAS_SU)
|
||||
endif()
|
||||
if(LOGROTATE_HAS_SU)
|
||||
set(LOGROTATE_USE_SU "\n\tsu ${ICINGA2_USER} ${ICINGA2_GROUP}")
|
||||
else()
|
||||
set(LOGROTATE_CREATE "\n\tcreate 644 ${ICINGA2_USER} ${ICINGA2_GROUP}")
|
||||
endif()
|
||||
|
||||
find_package(Boost ${BOOST_MIN_VERSION} COMPONENTS thread system program_options regex REQUIRED)
|
||||
find_package(Boost ${BOOST_MIN_VERSION} COMPONENTS context coroutine date_time filesystem thread system program_options regex REQUIRED)
|
||||
|
||||
# Boost.Coroutine2 (the successor of Boost.Coroutine)
|
||||
# (1) doesn't even exist in old Boost versions and
|
||||
# (2) isn't supported by ASIO, yet.
|
||||
add_definitions(-DBOOST_COROUTINES_NO_DEPRECATION_WARNING)
|
||||
|
||||
add_definitions(-DBOOST_FILESYSTEM_NO_DEPRECATED)
|
||||
|
||||
link_directories(${Boost_LIBRARY_DIRS})
|
||||
include_directories(${Boost_INCLUDE_DIRS})
|
||||
@ -134,15 +172,13 @@ include_directories(${OPENSSL_INCLUDE_DIR})
|
||||
set(base_DEPS ${CMAKE_DL_LIBS} ${Boost_LIBRARIES} ${OPENSSL_LIBRARIES})
|
||||
set(base_OBJS $<TARGET_OBJECTS:mmatch> $<TARGET_OBJECTS:socketpair> $<TARGET_OBJECTS:base>)
|
||||
|
||||
find_package(YAJL)
|
||||
# JSON
|
||||
find_package(JSON)
|
||||
include_directories(${JSON_INCLUDE})
|
||||
|
||||
if(NOT YAJL_FOUND)
|
||||
include_directories(${icinga2_BINARY_DIR}/third-party/yajl/include)
|
||||
link_directories(${icinga2_BINARY_DIR}/third-party/yajl)
|
||||
list(APPEND base_OBJS $<TARGET_OBJECTS:yajl>)
|
||||
else()
|
||||
list(APPEND base_DEPS ${YAJL_LIBRARIES})
|
||||
endif()
|
||||
# UTF8CPP
|
||||
find_package(UTF8CPP)
|
||||
include_directories(${UTF8CPP_INCLUDE})
|
||||
|
||||
find_package(Editline)
|
||||
set(HAVE_EDITLINE "${EDITLINE_FOUND}")
|
||||
@ -183,6 +219,7 @@ if(WIN32)
|
||||
endif()
|
||||
|
||||
set(CMAKE_MACOSX_RPATH 1)
|
||||
set(CMAKE_INSTALL_RPATH "${CMAKE_INSTALL_RPATH};${CMAKE_INSTALL_FULL_LIBDIR}/icinga2")
|
||||
|
||||
if(CMAKE_CXX_COMPILER_ID MATCHES "Clang")
|
||||
set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -Qunused-arguments -fcolor-diagnostics")
|
||||
@ -203,7 +240,7 @@ endif()
|
||||
|
||||
if(CMAKE_C_COMPILER_ID STREQUAL "GNU")
|
||||
if(CMAKE_SYSTEM_NAME MATCHES AIX)
|
||||
set(CMAKE_CXX_FLAGS "${CMAKE_C_FLAGS} -g -lpthread")
|
||||
set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -g -lpthread")
|
||||
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -g -lpthread")
|
||||
elseif(CMAKE_SYSTEM_NAME MATCHES "kOpenBSD.*|OpenBSD.*")
|
||||
set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -g -pthread")
|
||||
@ -277,7 +314,7 @@ if(ICINGA2_LTO_BUILD)
|
||||
set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -flto")
|
||||
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -flto")
|
||||
set(CMAKE_EXE_LINKER_FLAGS "${CMAKE_EXE_LINKER_FLAGS} -flto")
|
||||
set(CMAKE_SHARED_LINKER_FLAGS "${CMAKE_EXE_LINKER_FLAGS} -flto")
|
||||
set(CMAKE_SHARED_LINKER_FLAGS "${CMAKE_SHARED_LINKER_FLAGS} -flto")
|
||||
|
||||
if(CMAKE_CXX_COMPILER_ID STREQUAL "GNU" AND NOT (CMAKE_CXX_COMPILER_VERSION VERSION_LESS 4.9.0) AND NOT OPENBSD)
|
||||
set(CMAKE_AR "gcc-ar")
|
||||
@ -340,6 +377,54 @@ if(NOT MSVC)
|
||||
endif()
|
||||
endif()
|
||||
|
||||
# Architecture specifics
|
||||
# - Log the target architecture
|
||||
# - ARM needs to link against atomic
|
||||
if(NOT MSVC)
|
||||
# inspired by https://github.com/civetweb/civetweb/blob/master/cmake/DetermineTargetArchitecture.cmake
|
||||
execute_process(
|
||||
COMMAND ${CMAKE_C_COMPILER} -dumpmachine
|
||||
RESULT_VARIABLE RESULT
|
||||
OUTPUT_VARIABLE ARCH
|
||||
ERROR_QUIET
|
||||
)
|
||||
|
||||
if (RESULT)
|
||||
message(STATUS "Failed to detect target architecture with compiler ${CMAKE_C_COMPILER}: ${RESULT}")
|
||||
endif()
|
||||
|
||||
string(REGEX MATCH "([^-]+).*" ARCH_MATCH "${ARCH}")
|
||||
if (NOT CMAKE_MATCH_1 OR NOT ARCH_MATCH)
|
||||
message(STATUS "Failed to match the target architecture: ${ARCH}")
|
||||
endif()
|
||||
|
||||
set(ARCH ${CMAKE_MATCH_1})
|
||||
|
||||
message(STATUS "Target architecture - ${ARCH}")
|
||||
|
||||
# ARM settings
|
||||
if("${ARCH}" STREQUAL "arm")
|
||||
check_cxx_source_compiles( "include <atomic>; int main(){ std::atomic<uint_fast64_t> x; x.fetch_add(1); x.sub_add(1); }" CXX_ATOMIC)
|
||||
|
||||
set(CMAKE_EXE_LINKER_FLAGS "${CMAKE_EXE_LINKER_FLAGS} -latomic")
|
||||
set(CMAKE_SHARED_LINKER_FLAGS "${CMAKE_SHARED_LINKER_FLAGS} -latomic")
|
||||
set(CMAKE_STATIC_LINKER_FLAGS "${CMAKE_STATIC_LINKER_FLAGS} -latomic")
|
||||
endif()
|
||||
|
||||
else()
|
||||
if("${MSVC_C_ARCHITECTURE_ID}" STREQUAL "X86")
|
||||
set(ARCH "i686")
|
||||
elseif("${MSVC_C_ARCHITECTURE_ID}" STREQUAL "x64")
|
||||
set(ARCH "x86_64")
|
||||
elseif("${MSVC_C_ARCHITECTURE_ID}" STREQUAL "ARM")
|
||||
set(ARCH "arm")
|
||||
else()
|
||||
message(FATAL_ERROR "Failed to determine the MSVC target architecture: ${MSVC_C_ARCHITECTURE_ID}")
|
||||
endif()
|
||||
|
||||
message(STATUS "Target architecture - ${ARCH}")
|
||||
endif()
|
||||
|
||||
configure_file(config.h.cmake ${CMAKE_CURRENT_BINARY_DIR}/config.h ESCAPE_QUOTES)
|
||||
|
||||
install(
|
||||
@ -372,8 +457,8 @@ if(ICINGA2_WITH_TESTS)
|
||||
endif()
|
||||
|
||||
set(CPACK_PACKAGE_NAME "Icinga 2")
|
||||
set(CPACK_PACKAGE_VENDOR "Icinga Development Team")
|
||||
set(CPACK_PACKAGE_VERSION ${ICINGA2_VERSION})
|
||||
set(CPACK_PACKAGE_VENDOR "Icinga GmbH")
|
||||
set(CPACK_PACKAGE_VERSION ${ICINGA2_VERSION_SAFE})
|
||||
set(CPACK_PACKAGE_INSTALL_DIRECTORY "ICINGA2")
|
||||
set(CPACK_PACKAGE_ICON "${CMAKE_CURRENT_SOURCE_DIR}/icinga-app\\\\icinga.ico")
|
||||
set(CPACK_RESOURCE_FILE_LICENSE "${CMAKE_CURRENT_BINARY_DIR}/LICENSE.txt")
|
||||
@ -381,11 +466,11 @@ set(CPACK_RESOURCE_FILE_LICENSE "${CMAKE_CURRENT_BINARY_DIR}/LICENSE.txt")
|
||||
set(CPACK_PACKAGE_EXECUTABLES "Icinga2SetupAgent;Icinga 2 Agent Wizard")
|
||||
set(CPACK_WIX_PRODUCT_ICON "${CMAKE_CURRENT_SOURCE_DIR}/icinga-app\\\\icinga.ico")
|
||||
set(CPACK_WIX_UPGRADE_GUID "52F2BEAA-4DF0-4C3E-ABDC-C0F61DE4DF8A")
|
||||
set(CPACK_WIX_EXTENSIONS "WixUtilExtension")
|
||||
set(CPACK_WIX_UI_BANNER "${CMAKE_CURRENT_SOURCE_DIR}/icinga-installer/bannrbmp.bmp")
|
||||
set(CPACK_WIX_UI_DIALOG "${CMAKE_CURRENT_SOURCE_DIR}/icinga-installer/dlgbmp.bmp")
|
||||
set(CPACK_WIX_PATCH_FILE "${CMAKE_CURRENT_BINARY_DIR}/icinga-installer/icinga2.wixpatch.Debug")
|
||||
set(CPACK_WIX_PATCH_FILE "${CMAKE_CURRENT_BINARY_DIR}/icinga-installer/icinga2.wixpatch")
|
||||
set(CPACK_WIX_EXTENSIONS "WixUtilExtension" "WixNetFxExtension")
|
||||
|
||||
set(CMAKE_INSTALL_SYSTEM_RUNTIME_DESTINATION "sbin")
|
||||
set(CMAKE_INSTALL_UCRT_LIBRARIES TRUE)
|
||||
@ -393,11 +478,11 @@ include(InstallRequiredSystemLibraries)
|
||||
|
||||
if(WIN32)
|
||||
if(CMAKE_VS_PLATFORM_NAME STREQUAL "x64")
|
||||
set(NSCP_URL "https://github.com/mickem/nscp/releases/download/0.5.0.62/NSCP-0.5.0.62-x64.msi")
|
||||
set(NSCP_SHA256 "1854de86ad4fda3391f273de0f9985b702c014bdec01b26ad28a1343177f537f")
|
||||
set(NSCP_URL "https://github.com/mickem/nscp/releases/download/0.5.2.39/NSCP-0.5.2.39-x64.msi")
|
||||
set(NSCP_SHA256 "dfe93c293f30586b02510d8b7884e4e177b93a5fead8b5dc6de8103532e6e159")
|
||||
else()
|
||||
set(NSCP_URL "https://github.com/mickem/nscp/releases/download/0.5.0.62/NSCP-0.5.0.62-Win32.msi")
|
||||
set(NSCP_SHA256 "2186b60d588fa0811344ce709332f9c63670019c62ae92eae49698bf76205a95")
|
||||
set(NSCP_URL "https://github.com/mickem/nscp/releases/download/0.5.2.39/NSCP-0.5.2.39-Win32.msi")
|
||||
set(NSCP_SHA256 "ca6a67fb01c1468f2b510fd2f9eb0750887db3fb49a0302732c1421c85c6627c")
|
||||
endif()
|
||||
|
||||
set(NSCP_SHA256SUM "")
|
||||
|
@ -23,6 +23,9 @@ bug reports and features requests or writing code to add enhancements or fix bug
|
||||
Please consider our [roadmap](https://github.com/Icinga/icinga2/milestones) and
|
||||
[open issues](https://github.com/icinga/icinga2/issues) when you start contributing
|
||||
to the project.
|
||||
Issues labeled with [help wanted](https://github.com/Icinga/icinga2/labels/help%20wanted) or
|
||||
[good first issue](https://github.com/Icinga/icinga2/labels/good%20first%20issue) will
|
||||
help you get started more easily.
|
||||
|
||||
Before starting your work on Icinga 2, you should [fork the project](https://help.github.com/articles/fork-a-repo/)
|
||||
to your GitHub account. This allows you to freely experiment with your changes.
|
||||
@ -64,12 +67,12 @@ Please continue to learn about [branches](CONTRIBUTING.md#contributing-branches)
|
||||
|
||||
Choosing a proper name for a branch helps us identify its purpose and possibly
|
||||
find an associated bug or feature.
|
||||
Generally a branch name should include a topic such as `fix` or `feature` followed
|
||||
Generally a branch name should include a topic such as `bugfix` or `feature` followed
|
||||
by a description and an issue number if applicable. Branches should have only changes
|
||||
relevant to a specific issue.
|
||||
|
||||
```
|
||||
git checkout -b fix/service-template-typo-1234
|
||||
git checkout -b bugfix/service-template-typo-1234
|
||||
git checkout -b feature/config-handling-1235
|
||||
```
|
||||
|
||||
@ -111,13 +114,13 @@ Don't worry, you can squash those changes into a single commit later on.
|
||||
## <a id="contributing-pull-requests"></a> Pull Requests
|
||||
|
||||
Once you've commited your changes, please update your local master
|
||||
branch and rebase your fix/feature branch against it before submitting a PR.
|
||||
branch and rebase your bugfix/feature branch against it before submitting a PR.
|
||||
|
||||
```
|
||||
git checkout master
|
||||
git pull upstream HEAD
|
||||
|
||||
git checkout fix/notifications
|
||||
git checkout bugfix/notifications
|
||||
git rebase master
|
||||
```
|
||||
|
||||
@ -126,12 +129,12 @@ It might be necessary to force push after rebasing - use with care!
|
||||
|
||||
New branch:
|
||||
```
|
||||
git push --set-upstream origin fix/notifications
|
||||
git push --set-upstream origin bugfix/notifications
|
||||
```
|
||||
|
||||
Existing branch:
|
||||
```
|
||||
git push -f origin fix/notifications
|
||||
git push -f origin bugfix/notifications
|
||||
```
|
||||
|
||||
You can now either use the [hub](https://hub.github.com) CLI tool to create a PR, or nagivate
|
||||
@ -168,7 +171,7 @@ git pull upstream HEAD
|
||||
Then change to your working branch and start rebasing it against master:
|
||||
|
||||
```
|
||||
git checkout fix/notifications
|
||||
git checkout bugfix/notifications
|
||||
git rebase master
|
||||
```
|
||||
|
||||
@ -192,22 +195,22 @@ git rebase --continue
|
||||
Once succeeded ensure to push your changed history remotely.
|
||||
|
||||
```
|
||||
git push -f origin fix/notifications
|
||||
git push -f origin bugfix/notifications
|
||||
```
|
||||
|
||||
|
||||
If you fear to break things, do the rebase in a backup branch first and later replace your current branch.
|
||||
|
||||
```
|
||||
git checkout fix/notifications
|
||||
git checkout -b fix/notifications-rebase
|
||||
git checkout bugfix/notifications
|
||||
git checkout -b bugfix/notifications-rebase
|
||||
|
||||
git rebase master
|
||||
|
||||
git branch -D fix/notifications
|
||||
git checkout -b fix/notifications
|
||||
git branch -D bugfix/notifications
|
||||
git checkout -b bugfix/notifications
|
||||
|
||||
git push -f origin fix/notifications
|
||||
git push -f origin bugfix/notifications
|
||||
```
|
||||
|
||||
### <a id="contributing-squash"></a> Squash Commits
|
||||
@ -237,17 +240,14 @@ squash b37fd5377 Doc updates
|
||||
Save and let rebase to its job. Then force push the changes to the remote origin.
|
||||
|
||||
```
|
||||
git push -f origin fix/notifications
|
||||
git push -f origin bugfix/notifications
|
||||
```
|
||||
|
||||
|
||||
## <a id="contributing-testing"></a> Testing
|
||||
|
||||
Basic unit test coverage is provided by running `make test` during package builds.
|
||||
Read the [INSTALL.md](INSTALL.md) file for more information about development builds.
|
||||
|
||||
Snapshot packages from the laster development branch are available inside the
|
||||
[package repository](https://packages.icinga.com).
|
||||
Please follow the [documentation](https://icinga.com/docs/icinga2/snapshot/doc/21-development/#test-icinga-2)
|
||||
for build and test instructions.
|
||||
|
||||
You can help test-drive the latest Icinga 2 snapshot packages inside the
|
||||
[Icinga 2 Vagrant boxes](https://github.com/icinga/icinga-vagrant).
|
||||
@ -255,17 +255,11 @@ You can help test-drive the latest Icinga 2 snapshot packages inside the
|
||||
|
||||
## <a id="contributing-patches-source-code"></a> Source Code Patches
|
||||
|
||||
Icinga 2 is written in C++ and uses the Boost libraries. We are also using the C++11 standard where applicable (please
|
||||
note the minimum required compiler versions in the [INSTALL.md](INSTALL.md) file.
|
||||
|
||||
Icinga 2 can be built on Linux/Unix nodes and Windows clients. In order to develop patches for Icinga 2,
|
||||
you should prepare your own local build environment and know how to work with C++.
|
||||
|
||||
More tips:
|
||||
|
||||
* Requirements and source code installation for Linux/Unix is explained inside the [INSTALL.md](INSTALL.md) file.
|
||||
* Debug requirements and GDB instructions can be found in the [documentation](https://github.com/Icinga/icinga2/blob/master/doc/20-development.md).
|
||||
* If you are planning to develop and debug the Windows client, setup a Windows environment with [Visual Studio](https://www.visualstudio.com/vs/community/). An example can be found in [this blogpost](https://blog.netways.de/2015/08/24/developing-icinga-2-on-windows-10-using-visual-studio-2015/).
|
||||
Please follow the [development documentation](https://icinga.com/docs/icinga2/latest/doc/21-development/)
|
||||
for development environments, the style guide and more advanced insights.
|
||||
|
||||
## <a id="contributing-patches-documentation"></a> Documentation Patches
|
||||
|
||||
@ -466,7 +460,7 @@ By default, pull requests allow to push into the repository of the PR creator.
|
||||
|
||||
Example for [#4956](https://github.com/Icinga/icinga2/pull/4956):
|
||||
|
||||
At the bottom it says "Add more commits by pushing to the fix/persistent-comments-are-not-persistent branch on TheFlyingCorpse/icinga2."
|
||||
At the bottom it says "Add more commits by pushing to the bugfix/persistent-comments-are-not-persistent branch on TheFlyingCorpse/icinga2."
|
||||
|
||||
First off, add the remote repository as additional origin and fetch its content:
|
||||
|
||||
@ -478,20 +472,20 @@ git fetch --all
|
||||
Checkout the mentioned remote branch into a local branch (Note: `theflyingcorpse` is the name of the remote):
|
||||
|
||||
```
|
||||
git checkout theflyingcorpse/fix/persistent-comments-are-not-persistent -b fix/persistent-comments-are-not-persistent
|
||||
git checkout theflyingcorpse/bugfix/persistent-comments-are-not-persistent -b bugfix/persistent-comments-are-not-persistent
|
||||
```
|
||||
|
||||
Rebase, amend, squash or add your own commits on top.
|
||||
|
||||
Once you are satisfied, push the changes to the remote `theflyingcorpse` and its branch `fix/persistent-comments-are-not-persistent`.
|
||||
Once you are satisfied, push the changes to the remote `theflyingcorpse` and its branch `bugfix/persistent-comments-are-not-persistent`.
|
||||
The syntax here is `git push <remote> <localbranch>:<remotebranch>`.
|
||||
|
||||
```
|
||||
git push theflyingcorpse fix/persistent-comments-are-not-persistent:fix/persistent-comments-are-not-persistent
|
||||
git push theflyingcorpse bugfix/persistent-comments-are-not-persistent:bugfix/persistent-comments-are-not-persistent
|
||||
```
|
||||
|
||||
In case you've changed the commit history (rebase, amend, squash), you'll need to force push. Be careful, this can't be reverted!
|
||||
|
||||
```
|
||||
git push -f theflyingcorpse fix/persistent-comments-are-not-persistent:fix/persistent-comments-are-not-persistent
|
||||
git push -f theflyingcorpse bugfix/persistent-comments-are-not-persistent:bugfix/persistent-comments-are-not-persistent
|
||||
```
|
||||
|
395
INSTALL.md
@ -1,395 +0,0 @@
|
||||
# Installing Icinga 2
|
||||
|
||||
The recommended way of installing Icinga 2 is to use packages. The Icinga
|
||||
project provides both release and development packages for a number
|
||||
of operating systems.
|
||||
|
||||
Please check the documentation in the [doc/](doc/) directory for a current list
|
||||
of available packages and detailed installation instructions.
|
||||
|
||||
The online documentation is available on [icinga.com/docs](https://www.icinga.com/docs/)
|
||||
and will guide you step by step.
|
||||
|
||||
There are a number of known caveats when installing from source such as
|
||||
incorrect directory and file permissions. So even if you're planning to
|
||||
not use the official packages it is advisable to build your own Debian
|
||||
or RPM packages.
|
||||
|
||||
**Disclaimer**
|
||||
|
||||
This information is intended for developers and packagers. It might be incomplete or unclear
|
||||
in some cases. Make also sure to check our [packaging scripts on GitHub](https://github.com/Icinga/icinga-packaging)!
|
||||
|
||||
# Build Requirements
|
||||
|
||||
The following requirements need to be fulfilled in order to build the
|
||||
application using a dist tarball (including notes for distributions):
|
||||
|
||||
* cmake >= 2.6
|
||||
* GNU make (make) or ninja-build
|
||||
* C++ compiler which supports C++11
|
||||
- RHEL/Fedora/SUSE: gcc-c++ >= 4.7 (extra Developer Tools on RHEL5/6 see below)
|
||||
- Debian/Ubuntu: build-essential
|
||||
- Alpine: build-base
|
||||
- you can also use clang++
|
||||
* pkg-config
|
||||
* OpenSSL library and header files >= 1.0.1
|
||||
- RHEL/Fedora: openssl-devel
|
||||
- SUSE: libopenssl-devel (for SLES 11: libopenssl1-devel)
|
||||
- Debian/Ubuntu: libssl-dev
|
||||
- Alpine: libressl-dev
|
||||
* Boost library and header files >= 1.48.0
|
||||
- RHEL/Fedora: boost148-devel
|
||||
- Debian/Ubuntu: libboost-all-dev
|
||||
- Alpine: boost-dev
|
||||
* GNU bison (bison)
|
||||
* GNU flex (flex) >= 2.5.35
|
||||
* Systemd headers
|
||||
- Only required when using Systemd
|
||||
- Debian/Ubuntu: libsystemd-dev
|
||||
- RHEL/Fedora: systemd-devel
|
||||
|
||||
## Optional features
|
||||
|
||||
* MySQL (disable with CMake variable `ICINGA2_WITH_MYSQL` to `OFF`)
|
||||
- RHEL/Fedora: mysql-devel
|
||||
- SUSE: libmysqlclient-devel
|
||||
- Debian/Ubuntu: default-libmysqlclient-dev | libmysqlclient-dev
|
||||
- Alpine: mariadb-dev
|
||||
* PostgreSQL (disable with CMake variable `ICINGA2_WITH_PGSQL` to `OFF`)
|
||||
- RHEL/Fedora: postgresql-devel
|
||||
- Debian/Ubuntu: libpq-dev
|
||||
- postgresql-dev on Alpine
|
||||
* YAJL (Faster JSON library)
|
||||
- RHEL/Fedora: yajl-devel
|
||||
- Debian: libyajl-dev
|
||||
- Alpine: yajl-dev
|
||||
* libedit (CLI console)
|
||||
- RHEL/Fedora: libedit-devel on CentOS (RHEL requires rhel-7-server-optional-rpms)
|
||||
- Debian/Ubuntu/Alpine: libedit-dev
|
||||
* Termcap (only required if libedit doesn't already link against termcap/ncurses)
|
||||
- RHEL/Fedora: libtermcap-devel
|
||||
- Debian/Ubuntu: (not necessary)
|
||||
|
||||
## Special requirements
|
||||
|
||||
**FreeBSD**: libexecinfo (automatically used when Icinga 2 is installed via port or package)
|
||||
|
||||
**RHEL5** ships an ancient flex version. Updated packages are available for
|
||||
example from the repoforge buildtools repository.
|
||||
|
||||
* x86: https://mirror.hs-esslingen.de/repoforge/redhat/el5/en/i386/buildtools/
|
||||
* x86\_64: https://mirror.hs-esslingen.de/repoforge/redhat/el5/en/x86\_64/buildtools/
|
||||
|
||||
## Runtime user environment
|
||||
|
||||
By default Icinga will run as user 'icinga' and group 'icinga'. Additionally the
|
||||
external command pipe and livestatus features require a dedicated command group
|
||||
'icingacmd'. You can choose your own user/group names and pass them to CMake
|
||||
using the `ICINGA2_USER`, `ICINGA2_GROUP` and `ICINGA2_COMMAND_GROUP` variables.
|
||||
```
|
||||
# groupadd icinga
|
||||
# groupadd icingacmd
|
||||
# useradd -c "icinga" -s /sbin/nologin -G icingacmd -g icinga icinga
|
||||
```
|
||||
|
||||
On Alpine (which uses ash busybox) you can run:
|
||||
```
|
||||
# addgroup -S icinga
|
||||
# addgroup -S icingacmd
|
||||
# adduser -S -D -H -h /var/spool/icinga2 -s /sbin/nologin -G icinga -g icinga icinga
|
||||
# adduser icinga icingacmd
|
||||
```
|
||||
|
||||
Add the web server user to the icingacmd group in order to grant it write
|
||||
permissions to the external command pipe and livestatus socket:
|
||||
```
|
||||
# usermod -a -G icingacmd www-data
|
||||
```
|
||||
|
||||
Make sure to replace "www-data" with the name of the user your web server
|
||||
is running as.
|
||||
|
||||
# Building Icinga 2
|
||||
|
||||
Once you have installed all the necessary build requirements you can build
|
||||
Icinga 2 using the following commands:
|
||||
```
|
||||
$ mkdir build && cd build
|
||||
$ cmake ..
|
||||
$ make
|
||||
$ make install
|
||||
```
|
||||
|
||||
You can specify an alternative installation prefix using `-DCMAKE_INSTALL_PREFIX`:
|
||||
```
|
||||
$ cmake .. -DCMAKE_INSTALL_PREFIX=/tmp/icinga2
|
||||
```
|
||||
|
||||
## CMake Variables
|
||||
|
||||
In addition to `CMAKE_INSTALL_PREFIX` here are most of the supported Icinga-specific cmake variables.
|
||||
|
||||
**System Environment**
|
||||
- `ICINGA2_GIT_VERSION_INFO`: Whether to use Git to determine the version number; defaults to `ON`
|
||||
- `ICINGA2_USER`: The user Icinga 2 should run as; defaults to `icinga`
|
||||
- `ICINGA2_GROUP`: The group Icinga 2 should run as; defaults to `icinga`
|
||||
- `ICINGA2_COMMAND_GROUP`: The command group Icinga 2 should use; defaults to `icingacmd`
|
||||
- `ICINGA2_RUNDIR`: The location of the "run" directory; defaults to `CMAKE_INSTALL_LOCALSTATEDIR/run`
|
||||
- `CMAKE_INSTALL_SYSCONFDIR`: The configuration directory; defaults to `CMAKE_INSTALL_PREFIX/etc`
|
||||
- `ICINGA2_SYSCONFIGFILE`: Where to put the config file the initscript/systemd pulls it's dirs from;
|
||||
defaults to `CMAKE_INSTALL_PREFIX/etc/sysconfig/icinga2`
|
||||
- `CMAKE_INSTALL_LOCALSTATEDIR`: The state directory; defaults to `CMAKE_INSTALL_PREFIX/var`
|
||||
- `ICINGA2_PLUGINDIR`: The path for the Monitoring Plugins project binaries; defaults to `/usr/lib/nagios/plugins`
|
||||
|
||||
**Build Optimization**
|
||||
- `ICINGA2_UNITY_BUILD`: Whether to perform a unity build; defaults to `ON`
|
||||
- `ICINGA2_LTO_BUILD`: Whether to use link time optimization (LTO); defaults to `OFF`
|
||||
|
||||
**Init System**
|
||||
- `USE_SYSTEMD=ON|OFF`: Use systemd or a classic SysV initscript; defaults to `OFF`
|
||||
- `INSTALL_SYSTEMD_SERVICE_AND_INITSCRIPT=ON|OFF` Force install both the systemd service definition file
|
||||
and the SysV initscript in parallel, regardless of how `USE_SYSTEMD` is set.
|
||||
Only use this for special packaging purposes and if you know what you are doing.
|
||||
Defaults to `OFF`.
|
||||
|
||||
**Features:**
|
||||
- `ICINGA2_WITH_CHECKER`: Determines whether the checker module is built; defaults to `ON`
|
||||
- `ICINGA2_WITH_COMPAT`: Determines whether the compat module is built; defaults to `ON`
|
||||
- `ICINGA2_WITH_DEMO`: Determines whether the demo module is built; defaults to `OFF`
|
||||
- `ICINGA2_WITH_HELLO`: Determines whether the hello module is built; defaults to `OFF`
|
||||
- `ICINGA2_WITH_LIVESTATUS`: Determines whether the Livestatus module is built; defaults to `ON`
|
||||
- `ICINGA2_WITH_NOTIFICATION`: Determines whether the notification module is built; defaults to `ON`
|
||||
- `ICINGA2_WITH_PERFDATA`: Determines whether the perfdata module is built; defaults to `ON`
|
||||
- `ICINGA2_WITH_TESTS`: Determines whether the unit tests are built; defaults to `ON`
|
||||
|
||||
**MySQL or MariaDB:**
|
||||
|
||||
The following settings can be tuned for the MySQL / MariaDB IDO feature.
|
||||
|
||||
- `ICINGA2_WITH_MYSQL`: Determines whether the MySQL IDO module is built; defaults to `ON`
|
||||
- `MYSQL_CLIENT_LIBS`: Client implementation used (mysqlclient / mariadbclient); defaults searches for `mysqlclient` and `mariadbclient`
|
||||
- `MYSQL_INCLUDE_DIR`: Directory containing include files for the mysqlclient; default empty -
|
||||
checking multiple paths like `/usr/include/mysql`
|
||||
|
||||
See [FindMySQL.cmake](third-party/cmake/FindMySQL.cmake) for the implementation.
|
||||
|
||||
**PostgreSQL:**
|
||||
|
||||
The following settings can be tuned for the PostgreSQL IDO feature.
|
||||
|
||||
- `ICINGA2_WITH_PGSQL`: Determines whether the PostgreSQL IDO module is built; defaults to `ON`
|
||||
- `PostgreSQL_INCLUDE_DIR`: Top-level directory containing the PostgreSQL include directories
|
||||
- `PostgreSQL_LIBRARY_DIR`: Top-level directory containing the PostgreSQL libraries
|
||||
|
||||
See [FindMySQL.cmake](third-party/cmake/FindPostgreSQL.cmake) for the implementation.
|
||||
|
||||
**Version detection:**
|
||||
|
||||
CMake determines the Icinga 2 version number using `git describe` if the
|
||||
source directory is contained in a Git repository. Otherwise the version number
|
||||
is extracted from the [VERSION](VERSION) file. This behavior can be
|
||||
overridden by creating a file called `icinga-version.h.force` in the source
|
||||
directory. Alternatively the `-DICINGA2_GIT_VERSION_INFO=OFF` option for CMake
|
||||
can be used to disable the usage of `git describe`.
|
||||
|
||||
# Building packages
|
||||
|
||||
> **WARNING:** Some of this information is outdated!
|
||||
|
||||
## Building RPMs
|
||||
|
||||
### Build Environment on RHEL, CentOS, Fedora, Amazon Linux
|
||||
|
||||
Setup your build environment:
|
||||
```
|
||||
yum -y install rpmdevtools
|
||||
```
|
||||
|
||||
### Build Environment on SuSE/SLES
|
||||
|
||||
SLES:
|
||||
```
|
||||
zypper addrepo http://download.opensuse.org/repositories/devel:tools/SLE_12_SP2/devel:tools.repo
|
||||
zypper refresh
|
||||
zypper install rpmdevtools spectool
|
||||
```
|
||||
|
||||
OpenSuSE:
|
||||
```
|
||||
zypper addrepo http://download.opensuse.org/repositories/devel:tools/openSUSE_Leap_42.3/devel:tools.repo
|
||||
zypper refresh
|
||||
zypper install rpmdevtools spectool
|
||||
```
|
||||
|
||||
### Package Builds
|
||||
|
||||
Prepare the rpmbuild directory tree:
|
||||
```
|
||||
cd $HOME
|
||||
rpmdev-setuptree
|
||||
```
|
||||
|
||||
Copy the icinga2.spec file to `rpmbuild/SPEC` or fetch the latest version:
|
||||
```
|
||||
curl https://raw.githubusercontent.com/Icinga/rpm-icinga2/master/icinga2.spec -o $HOME/rpmbuild/SPECS/icinga2.spec
|
||||
```
|
||||
|
||||
Copy the tarball to `rpmbuild/SOURCES` e.g. by using the `spectool` binary
|
||||
provided with `rpmdevtools`:
|
||||
```
|
||||
cd $HOME/rpmbuild/SOURCES
|
||||
spectool -g ../SPECS/icinga2.spec
|
||||
|
||||
cd $HOME/rpmbuild
|
||||
```
|
||||
|
||||
Install the build dependencies. Example for CentOS 7:
|
||||
```
|
||||
yum -y install libedit-devel ncurses-devel gcc-c++ libstdc++-devel openssl-devel \
|
||||
cmake flex bison boost-devel systemd mysql-devel postgresql-devel httpd \
|
||||
selinux-policy-devel checkpolicy selinux-policy selinux-policy-doc
|
||||
```
|
||||
|
||||
Note: If you are using Amazon Linux, systemd is not required.
|
||||
|
||||
A shorter way is available using the `yum-builddep` command on RHEL based systems:
|
||||
```
|
||||
yum-builddep SPECS/icinga2.spec
|
||||
```
|
||||
|
||||
Build the RPM:
|
||||
```
|
||||
rpmbuild -ba SPECS/icinga2.spec
|
||||
```
|
||||
|
||||
### Additional Hints
|
||||
|
||||
#### SELinux policy module
|
||||
|
||||
The following packages are required to build the SELinux policy module:
|
||||
|
||||
* checkpolicy
|
||||
* selinux-policy (selinux-policy on CentOS 6, selinux-policy-devel on CentOS 7)
|
||||
* selinux-policy-doc
|
||||
|
||||
#### RHEL/CentOS 5 and 6
|
||||
|
||||
The RedHat Developer Toolset is required for building Icinga 2 beforehand.
|
||||
This contains a modern version of flex and a C++ compiler which supports
|
||||
C++11 features.
|
||||
```
|
||||
cat >/etc/yum.repos.d/devtools-2.repo <<REPO
|
||||
[testing-devtools-2-centos-\$releasever]
|
||||
name=testing 2 devtools for CentOS $releasever
|
||||
baseurl=https://people.centos.org/tru/devtools-2/\$releasever/\$basearch/RPMS
|
||||
gpgcheck=0
|
||||
REPO
|
||||
```
|
||||
|
||||
Dependencies to devtools-2 are used in the RPM SPEC, so the correct tools
|
||||
should be used for building.
|
||||
|
||||
As an alternative, you can use newer Boost packages provided on
|
||||
[packages.icinga.com](https://packages.icinga.com/epel).
|
||||
```
|
||||
cat >$HOME/.rpmmacros <<MACROS
|
||||
%build_icinga_org 1
|
||||
MACROS
|
||||
```
|
||||
|
||||
#### Amazon Linux
|
||||
|
||||
If you prefer to build packages offline, a suitable Vagrant box is located
|
||||
[here](https://atlas.hashicorp.com/mvbcoding/boxes/awslinux/).
|
||||
|
||||
#### SLES 11
|
||||
|
||||
The Icinga repository provides the required boost package version and must be
|
||||
added before building.
|
||||
|
||||
## Build Debian/Ubuntu packages
|
||||
|
||||
> **WARNING:** This information is outdated!
|
||||
|
||||
Setup your build environment on Debian/Ubuntu, copy the 'debian' directory from
|
||||
the Debian packaging Git repository (https://github.com/Icinga/pkg-icinga2-debian)
|
||||
into your source tree and run the following command:
|
||||
```
|
||||
$ dpkg-buildpackage -uc -us
|
||||
```
|
||||
|
||||
## Build Alpine Linux packages
|
||||
|
||||
A simple way to setup a build environment is installing Alpine in a chroot.
|
||||
In this way, you can set up an Alpine build environment in a chroot under a
|
||||
different Linux distro.
|
||||
There is a script that simplifies these steps with just two commands, and
|
||||
can be found [here](https://github.com/alpinelinux/alpine-chroot-install).
|
||||
|
||||
Once the build environment is installed, you can setup the system to build
|
||||
the packages by following [this document](https://wiki.alpinelinux.org/wiki/Creating_an_Alpine_package).
|
||||
|
||||
# Build Post Install Tasks
|
||||
|
||||
After building Icinga 2 yourself, your package build system should at least run the following post
|
||||
install requirements:
|
||||
|
||||
* enable the `checker`, `notification` and `mainlog` feature by default
|
||||
* run 'icinga2 api setup' in order to enable the `api` feature and generate SSL certificates for the node
|
||||
|
||||
## Run Icinga 2
|
||||
|
||||
Icinga 2 comes with a binary that takes care of loading all the relevant
|
||||
components (e.g. for check execution, notifications, etc.):
|
||||
```
|
||||
# icinga2 daemon
|
||||
[2016-12-08 16:44:24 +0100] information/cli: Icinga application loader (version: v2.5.4-231-gb10a6b7; debug)
|
||||
[2016-12-08 16:44:24 +0100] information/cli: Loading configuration file(s).
|
||||
[2016-12-08 16:44:25 +0100] information/ConfigItem: Committing config item(s).
|
||||
...
|
||||
```
|
||||
|
||||
### Init Script
|
||||
|
||||
Icinga 2 can be started as a daemon using the provided init script:
|
||||
```
|
||||
# /etc/init.d/icinga2
|
||||
Usage: /etc/init.d/icinga2 {start|stop|restart|reload|checkconfig|status}
|
||||
```
|
||||
|
||||
### Systemd
|
||||
|
||||
If your distribution uses Systemd:
|
||||
```
|
||||
# systemctl {start|stop|reload|status|enable|disable} icinga2
|
||||
```
|
||||
|
||||
In case the distribution is running Systemd >227, you'll also
|
||||
need to package and install the `etc/initsystem/icinga2.service.limits.conf`
|
||||
file into `/etc/systemd/system/icinga2.service.d`.
|
||||
|
||||
### openrc
|
||||
|
||||
Or if your distribution uses openrc (like Alpine):
|
||||
```
|
||||
# rc-service icinga2
|
||||
Usage: /etc/init.d/icinga2 {start|stop|restart|reload|checkconfig|status}
|
||||
```
|
||||
|
||||
Note: the openrc's init.d is not shipped by default.
|
||||
A working init.d with openrc can be found here: (https://git.alpinelinux.org/cgit/aports/plain/community/icinga2/icinga2.initd). If you have customized some path, edit the file and adjust it according with your setup.
|
||||
Those few steps can be followed:
|
||||
```
|
||||
# wget https://git.alpinelinux.org/cgit/aports/plain/community/icinga2/icinga2.initd
|
||||
# mv icinga2.initd /etc/init.d/icinga2
|
||||
# chmod +x /etc/init.d/icinga2
|
||||
```
|
||||
|
||||
Icinga 2 reads a single configuration file which is used to specify all
|
||||
configuration settings (global settings, hosts, services, etc.). The
|
||||
configuration format is explained in detail in the [doc/](doc/) directory.
|
||||
|
||||
By default `make install` installs example configuration files in
|
||||
`/usr/local/etc/icinga2` unless you have specified a different prefix or
|
||||
sysconfdir.
|
2
NEWS
@ -1 +1 @@
|
||||
News for this application can be found on the project website at https://www.icinga.com
|
||||
News for this application can be found on the project website at https://icinga.com
|
||||
|
75
README.md
@ -1,33 +1,60 @@
|
||||
[](https://travis-ci.org/Icinga/icinga2)
|
||||
[](https://github.com/Icinga/icinga2)
|
||||
|
||||
# Icinga 2
|
||||
|
||||

|
||||

|
||||
|
||||
#### Table of Contents
|
||||
|
||||
1. [About][About]
|
||||
2. [License][License]
|
||||
3. [Installation][Installation]
|
||||
4. [Documentation][Documentation]
|
||||
5. [Support][Support]
|
||||
2. [Installation][Installation]
|
||||
3. [Documentation][Documentation]
|
||||
4. [Support][Support]
|
||||
5. [License][License]
|
||||
6. [Contributing][Contributing]
|
||||
|
||||
## About
|
||||
|
||||
Icinga 2 is an open source monitoring system which checks the availability of your
|
||||
network resources, notifies users of outages, and generates performance data for reporting.
|
||||
[Icinga](https://icinga.com/products/) is a monitoring system which checks
|
||||
the availability of your network resources, notifies users of outages, and generates
|
||||
performance data for reporting.
|
||||
|
||||
Scalable and extensible, Icinga 2 can monitor large, complex environments across
|
||||
Scalable and extensible, Icinga can monitor large, complex environments across
|
||||
multiple locations.
|
||||
|
||||
Icinga 2 as monitoring core works best with [Icinga Web 2](https://www.icinga.com/products/icinga-web-2/)
|
||||
as web interface.
|
||||
Icinga 2 is the monitoring server and requires [Icinga Web 2](https://icinga.com/products/)
|
||||
on top in your Icinga Stack. The [configuration](https://icinga.com/products/configuration/)
|
||||
can be easily managed with either the [Icinga Director](https://icinga.com/docs/director/latest/),
|
||||
config management tools or plain text within the [Icinga DSL](https://icinga.com/docs/icinga2/latest/doc/17-language-reference/).
|
||||
|
||||
More information can be found at [www.icinga.com](https://www.icinga.com/products/icinga-2/)
|
||||
and inside the [documentation](https://www.icinga.com/docs/icinga2/latest/).
|
||||

|
||||
|
||||
## Licensing
|
||||
## Installation
|
||||
|
||||
* [Installation](https://icinga.com/docs/icinga2/latest/doc/02-installation/)
|
||||
* [Monitoring Basics](https://icinga.com/docs/icinga2/latest/doc/03-monitoring-basics/)
|
||||
* [Configuration](https://icinga.com/docs/icinga2/latest/doc/04-configuration/)
|
||||
* [Distributed Monitoring](https://icinga.com/docs/icinga2/latest/doc/06-distributed-monitoring/)
|
||||
* [Addons, Integrations and Features](https://icinga.com/docs/icinga2/latest/doc/13-addons/)
|
||||
* [Troubleshooting](https://icinga.com/docs/icinga2/latest/doc/15-troubleshooting/)
|
||||
* [Upgrading](https://icinga.com/docs/icinga2/latest/doc/16-upgrading-icinga-2/)
|
||||
|
||||
Once Icinga Server and Web are running in your distributed environment,
|
||||
make sure to check out the many [Icinga modules](https://icinga.com/docs/)
|
||||
for even better monitoring.
|
||||
|
||||
## Documentation
|
||||
|
||||
The documentation is available on [icinga.com/docs](https://icinga.com/docs/icinga2/latest/).
|
||||
|
||||
## Support
|
||||
|
||||
Check the [project website](https://icinga.com) for status updates. Join the
|
||||
[community channels](https://icinga.com/community/) for questions
|
||||
or ask an Icinga partner for [professional support](https://icinga.com/support/).
|
||||
|
||||
## License
|
||||
|
||||
Icinga 2 and the Icinga 2 documentation are licensed under the terms of the GNU
|
||||
General Public License Version 2, you will find a copy of this license in the
|
||||
@ -47,21 +74,6 @@ so, delete this exception statement from your version. If you delete
|
||||
this exception statement from all source files in the program, then
|
||||
also delete it here.
|
||||
|
||||
## Installation
|
||||
|
||||
Read the [INSTALL.md](INSTALL.md) file for more information about how to install it.
|
||||
|
||||
## Documentation
|
||||
|
||||
The documentation is located in the [doc/](doc/) directory. The latest documentation
|
||||
is also available on https://docs.icinga.com
|
||||
|
||||
## Support
|
||||
|
||||
Check the project website at https://www.icinga.com for status updates. Join the
|
||||
[community channels](https://www.icinga.com/community) for questions
|
||||
or ask an Icinga partner for [professional support](https://www.icinga.com/services/support/).
|
||||
|
||||
## Contributing
|
||||
|
||||
There are many ways to contribute to Icinga -- whether it be sending patches,
|
||||
@ -70,6 +82,13 @@ contribution is appreciated!
|
||||
|
||||
Please continue reading in the [contributing chapter](CONTRIBUTING.md).
|
||||
|
||||
If you are a packager, please read the [development chapter](https://icinga.com/docs/icinga2/latest/doc/21-development/)
|
||||
for more details.
|
||||
|
||||
### Security Issues
|
||||
|
||||
For reporting security issues please visit [this page](https://icinga.com/contact/security/).
|
||||
|
||||
<!-- TOC URLs -->
|
||||
[About]: #about
|
||||
[License]: #license
|
||||
|
318
RELEASE.md
@ -12,7 +12,7 @@
|
||||
- [5. Package Builds](#package-builds)
|
||||
- [5.1. RPM Packages](#rpm-packages)
|
||||
- [5.2. DEB Packages](#deb-packages)
|
||||
- [6. Build Server](#build-server)
|
||||
- [6. Build Server](#build-infrastructure)
|
||||
- [7. Release Tests](#release-tests)
|
||||
- [8. GitHub Release](#github-release)
|
||||
- [9. Chocolatey](#chocolatey)
|
||||
@ -26,7 +26,7 @@
|
||||
Specify the release version.
|
||||
|
||||
```
|
||||
VERSION=2.8.3
|
||||
VERSION=2.11.0
|
||||
```
|
||||
|
||||
Add your signing key to your Git configuration file, if not already there.
|
||||
@ -60,7 +60,7 @@ git log --use-mailmap | grep '^Author:' | cut -f2- -d' ' | sort | uniq > AUTHORS
|
||||
|
||||
## Version <a id="version"></a>
|
||||
|
||||
Update the version in the version file:
|
||||
Update the version:
|
||||
|
||||
```
|
||||
sed -i "s/Version: .*/Version: $VERSION/g" VERSION
|
||||
@ -68,29 +68,12 @@ sed -i "s/Version: .*/Version: $VERSION/g" VERSION
|
||||
|
||||
## Changelog <a id="changelog"></a>
|
||||
|
||||
Update the [CHANGELOG.md](CHANGELOG.md) file.
|
||||
Choose the most important issues and summarize them in multiple groups/paragraphs. Provide links to the mentioned
|
||||
issues/PRs. At the start include a link to the milestone's closed issues.
|
||||
|
||||
Export these environment variables:
|
||||
|
||||
```
|
||||
export ICINGA_GITHUB_AUTH_USERNAME='user'
|
||||
export ICINGA_GITHUB_AUTH_TOKEN='token'
|
||||
export ICINGA_GITHUB_PROJECT='icinga/icinga2'
|
||||
```
|
||||
|
||||
Run the script which updates the [CHANGELOG.md](CHANGELOG.md) file.
|
||||
|
||||
```
|
||||
./changelog.py
|
||||
git diff
|
||||
```
|
||||
|
||||
## Git Tag <a id="git-tag"></a>
|
||||
|
||||
> **Major Releases**: Commit these changes to the `master` branch.
|
||||
>
|
||||
> **Minor Releases**: Commit changes to the `support` branch.
|
||||
|
||||
```
|
||||
git commit -v -a -m "Release version $VERSION"
|
||||
```
|
||||
@ -112,135 +95,147 @@ git push --tags
|
||||
|
||||
```
|
||||
git checkout master
|
||||
git checkout -b support/2.9
|
||||
git push -u origin support/2.9
|
||||
git push
|
||||
|
||||
git checkout -b support/2.12
|
||||
git push -u origin support/2.12
|
||||
```
|
||||
|
||||
**For minor releases:** Push the support branch, cherry-pick the release commit
|
||||
into master and merge the support branch:
|
||||
|
||||
```
|
||||
git push -u origin support/2.8
|
||||
git checkout master
|
||||
git cherry-pick support/2.8
|
||||
git merge --strategy=ours support/2.8
|
||||
git push origin master
|
||||
```
|
||||
|
||||
## Package Builds <a id="package-builds"></a>
|
||||
|
||||
```
|
||||
mkdir $HOME/dev/icinga/packaging
|
||||
cd $HOME/dev/icinga/packaging
|
||||
```
|
||||
|
||||
### RPM Packages <a id="rpm-packages"></a>
|
||||
|
||||
```
|
||||
git clone git@github.com:icinga/rpm-icinga2.git && cd rpm-icinga2
|
||||
git clone git@git.icinga.com:icinga/rpm-icinga2.git && cd rpm-icinga2
|
||||
```
|
||||
|
||||
#### Branch Workflow
|
||||
|
||||
**Major releases** are branched off `master`.
|
||||
### DEB Packages <a id="deb-packages"></a>
|
||||
|
||||
```
|
||||
git checkout master && git pull
|
||||
git clone git@git.icinga.com:packaging/deb-icinga2.git && cd deb-icinga2
|
||||
```
|
||||
|
||||
**Bugfix releases** are created in the `release` branch and later merged to master.
|
||||
#### Raspbian Packages
|
||||
|
||||
```
|
||||
git checkout release && git pull
|
||||
git clone git@git.icinga.com:icinga/raspbian-icinga2.git && cd raspbian-icinga2
|
||||
```
|
||||
|
||||
#### Release Commit
|
||||
|
||||
Set the `Version`, `Revision` and `changelog` inside the spec file.
|
||||
### Windows Packages
|
||||
|
||||
```
|
||||
sed -i "s/Version: .*/Version: $VERSION/g" icinga2.spec
|
||||
git clone git@git.icinga.com:icinga/windows-icinga2.git && cd windows-icinga2
|
||||
```
|
||||
|
||||
|
||||
### Branch Workflow
|
||||
|
||||
Checkout `master` and create a new branch.
|
||||
|
||||
* For releases use x.x[.x] as branch name (e.g. 2.11 or 2.11.1)
|
||||
* For releases with revision use x.x.x-n (e.g. 2.11.0-2)
|
||||
|
||||
|
||||
### Switch Build Type
|
||||
|
||||
Edit file `.gitlab-ci.yml` and comment variable `ICINGA_BUILD_TYPE` out.
|
||||
|
||||
```yaml
|
||||
variables:
|
||||
...
|
||||
#ICINGA_BUILD_TYPE: snapshot
|
||||
...
|
||||
```
|
||||
|
||||
Commit the change.
|
||||
|
||||
```
|
||||
git commit -av -m "Switch build type for $VERSION-1"
|
||||
|
||||
#### RPM Release Preparations
|
||||
|
||||
Set the `Version`, `revision` and `%changelog` inside the spec file:
|
||||
|
||||
```
|
||||
sed -i "s/Version:.*/Version: $VERSION/g" icinga2.spec
|
||||
|
||||
vim icinga2.spec
|
||||
|
||||
%changelog
|
||||
* Tue Apr 24 2018 Jean Flach <jean.flach@icinga.com> 2.8.3-1
|
||||
- Update to 2.8.3
|
||||
* Thu Sep 19 2019 Michael Friedrich <michael.friedrich@icinga.com> 2.11.0-1
|
||||
- Update to 2.11.0
|
||||
```
|
||||
|
||||
```
|
||||
git commit -av -m "Release 2.8.3-1"
|
||||
git push
|
||||
```
|
||||
#### DEB and Raspbian Release Preparations
|
||||
|
||||
**Note for major releases**: Update release branch to latest.
|
||||
`git checkout release && git pull && git merge master && git push`
|
||||
|
||||
**Note for minor releases**: Cherry-pick the release commit into master.
|
||||
`git checkout master && git pull && git cherry-pick release && git push`
|
||||
|
||||
|
||||
### DEB Packages <a id="deb-packages"></a>
|
||||
Update file `debian/changelog` and add at the beginning:
|
||||
|
||||
```
|
||||
git clone git@github.com:icinga/deb-icinga2.git && cd deb-icinga2
|
||||
```
|
||||
icinga2 (2.11.0-1) icinga; urgency=medium
|
||||
|
||||
#### Branch Workflow
|
||||
* Release 2.11.0
|
||||
|
||||
**Major releases** are branched off `master`.
|
||||
|
||||
```
|
||||
git checkout master && git pull
|
||||
```
|
||||
|
||||
**Bugfix releases** are created in the `release` branch and later merged to master.
|
||||
|
||||
```
|
||||
git checkout release && git pull
|
||||
```
|
||||
|
||||
#### Release Commit
|
||||
|
||||
Set the `Version`, `Revision` and `changelog` inside the spec file.
|
||||
|
||||
```
|
||||
./dch 2.8.3-1 "Update to 2.8.3"
|
||||
```
|
||||
|
||||
```
|
||||
git commit -av -m "Release 2.8.3-1"
|
||||
git push
|
||||
```
|
||||
|
||||
```
|
||||
git commit -av -m "Release 2.8.3-1"
|
||||
```
|
||||
|
||||
**Note for major releases**: Update release branch to latest.
|
||||
`git checkout release && git pull && git merge master && git push`
|
||||
|
||||
**Note for minor releases**: Cherry-pick the release commit into master.
|
||||
`git checkout master && git pull && git cherry-pick release && git push`
|
||||
|
||||
|
||||
#### DEB with dch on macOS
|
||||
|
||||
```
|
||||
docker run -v `pwd`:/mnt/packaging -ti ubuntu:xenial bash
|
||||
|
||||
apt-get update
|
||||
apt-get install git dev-tools vim
|
||||
cd /mnt/packaging
|
||||
|
||||
git config --global user.name "Michael Friedrich"
|
||||
git config --global user.email "michael.friedrich@icinga.com"
|
||||
|
||||
./dch 2.8.3-1 "Update to 2.8.3"
|
||||
-- Michael Friedrich <michael.friedrich@icinga.com> Thu, 19 Sep 2019 10:50:31 +0200
|
||||
```
|
||||
|
||||
|
||||
## Build Server <a id="build-server"></a>
|
||||
### Release Commit
|
||||
|
||||
Commit the changes and push the branch.
|
||||
|
||||
```
|
||||
git commit -av -m "Release $VERSION-1"
|
||||
git push origin 2.11
|
||||
```
|
||||
|
||||
GitLab will now build snapshot packages based on the tag `v2.11.0` of Icinga 2.
|
||||
|
||||
### Package Tests
|
||||
|
||||
In order to test the created packages you can download a job's artifacts:
|
||||
|
||||
Visit [git.icinga.com](https://git.icinga.com/packaging/rpm-icinga2)
|
||||
and navigate to the respective pipeline under `CI / CD -> Pipelines`.
|
||||
|
||||
There click on the job you want to download packages from.
|
||||
|
||||
The job's output appears. On the right-hand sidebar you can browse its artifacts.
|
||||
|
||||
Once there, navigate to `build/RPMS/noarch` where you'll find the packages.
|
||||
|
||||
### Release Packages
|
||||
|
||||
To build release packages and upload them to [packages.icinga.com](https://packages.icinga.com)
|
||||
tag the release commit and push it.
|
||||
|
||||
```
|
||||
git tag -s 2.11.0-1
|
||||
git push origin 2.11.0-1
|
||||
```
|
||||
|
||||
Now cherry pick the release commit to `master` so that the changes are transferred back to it.
|
||||
|
||||
**Attention**: Only the release commit. *NOT* the one switching the build type!
|
||||
|
||||
|
||||
## Build Infrastructure <a id="build-infrastructure"></a>
|
||||
|
||||
https://git.icinga.com/packaging/rpm-icinga2/pipelines
|
||||
https://git.icinga.com/packaging/deb-icinga2/pipelines
|
||||
https://git.icinga.com/packaging/windows-icinga2/pipelines
|
||||
https://git.icinga.com/packaging/raspbian-icinga2/pipelines
|
||||
|
||||
* Verify package build changes for this version.
|
||||
* Test the snapshot packages for all distributions beforehand.
|
||||
* Build the newly created Git tag for Debian/RHEL/SuSE.
|
||||
* Build the newly created Git tag for Windows.
|
||||
|
||||
Once the release repository tags are pushed, release builds
|
||||
are triggered and automatically published to packages.icinga.com
|
||||
|
||||
## Release Tests <a id="release-tests"></a>
|
||||
|
||||
@ -249,52 +244,127 @@ git config --global user.email "michael.friedrich@icinga.com"
|
||||
* Test the [setup wizard](https://packages.icinga.com/windows/) inside a Windows VM.
|
||||
* Start a new docker container and install/run icinga2.
|
||||
|
||||
Example for CentOS7:
|
||||
### CentOS
|
||||
|
||||
```
|
||||
docker run -ti centos:latest bash
|
||||
|
||||
yum -y install https://packages.icinga.com/epel/icinga-rpm-release-7-latest.noarch.rpm
|
||||
yum -y install epel-release
|
||||
yum -y install icinga2
|
||||
icinga2 daemon -C
|
||||
```
|
||||
|
||||
### Ubuntu
|
||||
|
||||
```
|
||||
docker run -ti ubuntu:bionic bash
|
||||
|
||||
apt-get update
|
||||
apt-get -y install apt-transport-https wget gnupg
|
||||
|
||||
wget -O - https://packages.icinga.com/icinga.key | apt-key add -
|
||||
|
||||
. /etc/os-release; if [ ! -z ${UBUNTU_CODENAME+x} ]; then DIST="${UBUNTU_CODENAME}"; else DIST="$(lsb_release -c| awk '{print $2}')"; fi; \
|
||||
echo "deb https://packages.icinga.com/ubuntu icinga-${DIST} main" > \
|
||||
/etc/apt/sources.list.d/${DIST}-icinga.list
|
||||
echo "deb-src https://packages.icinga.com/ubuntu icinga-${DIST} main" >> \
|
||||
/etc/apt/sources.list.d/${DIST}-icinga.list
|
||||
|
||||
apt-get update
|
||||
|
||||
apt-get -y install icinga2
|
||||
icinga2 daemon -C
|
||||
```
|
||||
|
||||
|
||||
## GitHub Release <a id="github-release"></a>
|
||||
|
||||
Create a new release for the newly created Git tag: https://github.com/Icinga/icinga2/releases
|
||||
|
||||
> Hint: Choose [tags](https://github.com/Icinga/icinga2/tags), pick one to edit and
|
||||
> make this a release. You can also create a draft release.
|
||||
|
||||
The release body should contain a short changelog, with links
|
||||
into the roadmap, changelog and blogpost.
|
||||
|
||||
|
||||
## Chocolatey <a id="chocolatey"></a>
|
||||
|
||||
Navigate to the git repository on your Windows box which
|
||||
already has chocolatey installed. Pull/checkout the release.
|
||||
|
||||
Create the nupkg package:
|
||||
Create the nupkg package (or use the one generated on https://packages.icinga.com/windows):
|
||||
|
||||
```
|
||||
cpack
|
||||
```
|
||||
|
||||
Install the created icinga2 package locally:
|
||||
Fetch the API key from https://chocolatey.org/account and use the `choco push`
|
||||
command line.
|
||||
|
||||
```
|
||||
choco install icinga2 -version 2.8.3 -fdv "%cd%" -source "'%cd%;https://chocolatey.org/api/v2/'"
|
||||
choco apikey --key xxx --source https://push.chocolatey.org/
|
||||
|
||||
choco push Icinga2-v2.11.0.nupkg --source https://push.chocolatey.org/
|
||||
```
|
||||
|
||||
Upload the package to [chocolatey](https://chocolatey.org/packages/upload).
|
||||
|
||||
## Post Release <a id="post-release"></a>
|
||||
|
||||
### Online Documentation <a id="online-documentation"></a>
|
||||
|
||||
Ask @bobapple to update the documentation at docs.icinga.com.
|
||||
> Only required for major releases.
|
||||
|
||||
Navigate to `puppet-customer/icinga.git` and do the following steps:
|
||||
|
||||
#### Testing
|
||||
|
||||
```
|
||||
git checkout testing && git pull
|
||||
vim files/var/www/docs/config/icinga2-latest.yml
|
||||
|
||||
git commit -av -m "icinga-web: Update docs for Icinga 2"
|
||||
|
||||
git push
|
||||
```
|
||||
|
||||
SSH into the webserver and do a manual Puppet dry run with the testing environment.
|
||||
|
||||
```
|
||||
puppet agent -t --environment testing --noop
|
||||
```
|
||||
|
||||
Once succeeded, continue with production deployment.
|
||||
|
||||
#### Production
|
||||
|
||||
```
|
||||
git checkout master && git pull
|
||||
git merge testing
|
||||
git push
|
||||
```
|
||||
|
||||
SSH into the webserver and do a manual Puppet run from the production environment (default).
|
||||
|
||||
```
|
||||
puppet agent -t
|
||||
```
|
||||
|
||||
#### Manual Generation
|
||||
|
||||
SSH into the webserver or ask @bobapple.
|
||||
|
||||
```
|
||||
cd /usr/local/icinga-docs-tools && ./build-docs.rb -c /var/www/docs/config/icinga2-latest.yml
|
||||
```
|
||||
|
||||
### Announcement <a id="announcement"></a>
|
||||
|
||||
* Create a new blog post on www.icinga.com/blog
|
||||
* Social media: [Twitter](https://twitter.com/icinga), [Facebook](https://www.facebook.com/icinga), [G+](https://plus.google.com/+icinga), [Xing](https://www.xing.com/communities/groups/icinga-da4b-1060043), [LinkedIn](https://www.linkedin.com/groups/Icinga-1921830/about)
|
||||
* Update IRC channel topic
|
||||
* Create a new blog post on [icinga.com/blog](https://icinga.com/blog) including a featured image
|
||||
* Create a release topic on [community.icinga.com](https://community.icinga.com)
|
||||
* Release email to net-tech & team
|
||||
|
||||
### Project Management <a id="project-management"></a>
|
||||
|
||||
* Add new minor version on [GitHub](https://github.com/Icinga/icinga2/milestones).
|
||||
* Close the released version on [GitHub](https://github.com/Icinga/icinga2/milestones).
|
||||
|
@ -1,26 +1,10 @@
|
||||
# Icinga 2
|
||||
# Copyright (C) 2012-2018 Icinga Development Team (https://www.icinga.com/)
|
||||
#
|
||||
# This program is free software; you can redistribute it and/or
|
||||
# modify it under the terms of the GNU General Public License
|
||||
# as published by the Free Software Foundation; either version 2
|
||||
# of the License, or (at your option) any later version.
|
||||
#
|
||||
# This program is distributed in the hope that it will be useful,
|
||||
# but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
# GNU General Public License for more details.
|
||||
#
|
||||
# You should have received a copy of the GNU General Public License
|
||||
# along with this program; if not, write to the Free Software Foundation
|
||||
# Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA.
|
||||
# Icinga 2 | (c) 2012 Icinga GmbH | GPLv2+
|
||||
|
||||
if(MSVC)
|
||||
include_external_msproject(
|
||||
icinga2setupagent
|
||||
${CMAKE_CURRENT_SOURCE_DIR}/windows-setup-agent/Icinga2SetupAgent.csproj
|
||||
TYPE FAE04EC0-301F-11D3-BF4B-00C04F79EFBC
|
||||
PLATFORM Win32
|
||||
)
|
||||
|
||||
install(
|
||||
|
@ -1,7 +1,6 @@
|
||||
<?xml version="1.0" encoding="utf-8" ?>
|
||||
<configuration>
|
||||
<startup>
|
||||
<supportedRuntime version="v2.0.50727" />
|
||||
<supportedRuntime version="v4.0" />
|
||||
</startup>
|
||||
<startup>
|
||||
<supportedRuntime version="v4.0" sku=".NETFramework,Version=v4.6"/>
|
||||
</startup>
|
||||
</configuration>
|
@ -3,13 +3,13 @@
|
||||
<Import Project="$(MSBuildExtensionsPath)\$(MSBuildToolsVersion)\Microsoft.Common.props" Condition="Exists('$(MSBuildExtensionsPath)\$(MSBuildToolsVersion)\Microsoft.Common.props')" />
|
||||
<PropertyGroup>
|
||||
<Configuration Condition=" '$(Configuration)' == '' ">Debug</Configuration>
|
||||
<Platform Condition=" '$(Platform)' == '' ">x86</Platform>
|
||||
<Platform Condition=" '$(Platform)' == '' ">x64</Platform>
|
||||
<ProjectGuid>{A86F1159-66E8-4BDB-BF28-A2BDAF76517C}</ProjectGuid>
|
||||
<OutputType>WinExe</OutputType>
|
||||
<AppDesignerFolder>Properties</AppDesignerFolder>
|
||||
<RootNamespace>Icinga</RootNamespace>
|
||||
<AssemblyName>Icinga2SetupAgent</AssemblyName>
|
||||
<TargetFrameworkVersion>v2.0</TargetFrameworkVersion>
|
||||
<TargetFrameworkVersion>v4.6</TargetFrameworkVersion>
|
||||
<FileAlignment>512</FileAlignment>
|
||||
<TargetFrameworkProfile />
|
||||
<PublishUrl>publish\</PublishUrl>
|
||||
@ -37,6 +37,7 @@
|
||||
<DefineConstants>DEBUG;TRACE</DefineConstants>
|
||||
<ErrorReport>prompt</ErrorReport>
|
||||
<WarningLevel>4</WarningLevel>
|
||||
<Prefer32Bit>false</Prefer32Bit>
|
||||
</PropertyGroup>
|
||||
<PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Release|x86' ">
|
||||
<PlatformTarget>x86</PlatformTarget>
|
||||
@ -46,6 +47,7 @@
|
||||
<DefineConstants>TRACE</DefineConstants>
|
||||
<ErrorReport>prompt</ErrorReport>
|
||||
<WarningLevel>4</WarningLevel>
|
||||
<Prefer32Bit>false</Prefer32Bit>
|
||||
</PropertyGroup>
|
||||
<PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'RelWithDebInfo|x86' ">
|
||||
<PlatformTarget>x86</PlatformTarget>
|
||||
@ -55,6 +57,7 @@
|
||||
<DefineConstants>TRACE</DefineConstants>
|
||||
<ErrorReport>prompt</ErrorReport>
|
||||
<WarningLevel>4</WarningLevel>
|
||||
<Prefer32Bit>false</Prefer32Bit>
|
||||
</PropertyGroup>
|
||||
<PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'MinSizeRel|x86' ">
|
||||
<PlatformTarget>x86</PlatformTarget>
|
||||
@ -64,6 +67,48 @@
|
||||
<DefineConstants>TRACE</DefineConstants>
|
||||
<ErrorReport>prompt</ErrorReport>
|
||||
<WarningLevel>4</WarningLevel>
|
||||
<Prefer32Bit>false</Prefer32Bit>
|
||||
</PropertyGroup>
|
||||
<PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Debug|Win32' ">
|
||||
<PlatformTarget>x86</PlatformTarget>
|
||||
<DebugSymbols>true</DebugSymbols>
|
||||
<DebugType>full</DebugType>
|
||||
<Optimize>false</Optimize>
|
||||
<OutputPath>bin\Debug\</OutputPath>
|
||||
<DefineConstants>DEBUG;TRACE</DefineConstants>
|
||||
<ErrorReport>prompt</ErrorReport>
|
||||
<WarningLevel>4</WarningLevel>
|
||||
<Prefer32Bit>false</Prefer32Bit>
|
||||
</PropertyGroup>
|
||||
<PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Release|Win32' ">
|
||||
<PlatformTarget>x86</PlatformTarget>
|
||||
<DebugType>pdbonly</DebugType>
|
||||
<Optimize>true</Optimize>
|
||||
<OutputPath>bin\Release\</OutputPath>
|
||||
<DefineConstants>TRACE</DefineConstants>
|
||||
<ErrorReport>prompt</ErrorReport>
|
||||
<WarningLevel>4</WarningLevel>
|
||||
<Prefer32Bit>false</Prefer32Bit>
|
||||
</PropertyGroup>
|
||||
<PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'RelWithDebInfo|Win32' ">
|
||||
<PlatformTarget>x86</PlatformTarget>
|
||||
<DebugType>pdbonly</DebugType>
|
||||
<Optimize>true</Optimize>
|
||||
<OutputPath>bin\RelWithDebInfo\</OutputPath>
|
||||
<DefineConstants>TRACE</DefineConstants>
|
||||
<ErrorReport>prompt</ErrorReport>
|
||||
<WarningLevel>4</WarningLevel>
|
||||
<Prefer32Bit>false</Prefer32Bit>
|
||||
</PropertyGroup>
|
||||
<PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'MinSizeRel|Win32' ">
|
||||
<PlatformTarget>x86</PlatformTarget>
|
||||
<DebugType>pdbonly</DebugType>
|
||||
<Optimize>true</Optimize>
|
||||
<OutputPath>bin\MinSizeRel\</OutputPath>
|
||||
<DefineConstants>TRACE</DefineConstants>
|
||||
<ErrorReport>prompt</ErrorReport>
|
||||
<WarningLevel>4</WarningLevel>
|
||||
<Prefer32Bit>false</Prefer32Bit>
|
||||
</PropertyGroup>
|
||||
<PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Debug|x64' ">
|
||||
<PlatformTarget>x64</PlatformTarget>
|
||||
@ -74,6 +119,7 @@
|
||||
<DefineConstants>DEBUG;TRACE</DefineConstants>
|
||||
<ErrorReport>prompt</ErrorReport>
|
||||
<WarningLevel>4</WarningLevel>
|
||||
<Prefer32Bit>false</Prefer32Bit>
|
||||
</PropertyGroup>
|
||||
<PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Release|x64' ">
|
||||
<PlatformTarget>x64</PlatformTarget>
|
||||
@ -83,6 +129,7 @@
|
||||
<DefineConstants>TRACE</DefineConstants>
|
||||
<ErrorReport>prompt</ErrorReport>
|
||||
<WarningLevel>4</WarningLevel>
|
||||
<Prefer32Bit>false</Prefer32Bit>
|
||||
</PropertyGroup>
|
||||
<PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'RelWithDebInfo|x64' ">
|
||||
<PlatformTarget>x64</PlatformTarget>
|
||||
@ -92,6 +139,7 @@
|
||||
<DefineConstants>TRACE</DefineConstants>
|
||||
<ErrorReport>prompt</ErrorReport>
|
||||
<WarningLevel>4</WarningLevel>
|
||||
<Prefer32Bit>false</Prefer32Bit>
|
||||
</PropertyGroup>
|
||||
<PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'MinSizeRel|x64' ">
|
||||
<PlatformTarget>x64</PlatformTarget>
|
||||
@ -101,6 +149,7 @@
|
||||
<DefineConstants>TRACE</DefineConstants>
|
||||
<ErrorReport>prompt</ErrorReport>
|
||||
<WarningLevel>4</WarningLevel>
|
||||
<Prefer32Bit>false</Prefer32Bit>
|
||||
</PropertyGroup>
|
||||
<PropertyGroup>
|
||||
<ApplicationIcon>icinga.ico</ApplicationIcon>
|
||||
@ -203,7 +252,7 @@
|
||||
</BootstrapperPackage>
|
||||
</ItemGroup>
|
||||
<Import Project="$(MSBuildToolsPath)\Microsoft.CSharp.targets" />
|
||||
<!-- To modify your build process, add your task inside one of the targets below and uncomment it.
|
||||
<!-- To modify your build process, add your task inside one of the targets below and uncomment it.
|
||||
Other similar extension points exist, see Microsoft.Common.targets.
|
||||
<Target Name="BeforeBuild">
|
||||
</Target>
|
||||
|
@ -8,9 +8,9 @@ using System.Runtime.InteropServices;
|
||||
[assembly: AssemblyTitle("Icinga 2 Agent Wizard")]
|
||||
[assembly: AssemblyDescription("")]
|
||||
[assembly: AssemblyConfiguration("")]
|
||||
[assembly: AssemblyCompany("Icinga Development Team")]
|
||||
[assembly: AssemblyCompany("Icinga GmbH")]
|
||||
[assembly: AssemblyProduct("Icinga 2")]
|
||||
[assembly: AssemblyCopyright("Copyright © 2014-2018 Icinga Development Team")]
|
||||
[assembly: AssemblyCopyright("Copyright © 2019 Icinga GmbH")]
|
||||
[assembly: AssemblyTrademark("")]
|
||||
[assembly: AssemblyCulture("")]
|
||||
|
||||
|
@ -1,7 +1,7 @@
|
||||
//------------------------------------------------------------------------------
|
||||
// <auto-generated>
|
||||
// This code was generated by a tool.
|
||||
// Runtime Version:4.0.30319.34011
|
||||
// Runtime Version:4.0.30319.42000
|
||||
//
|
||||
// Changes to this file may cause incorrect behavior and will be lost if
|
||||
// the code is regenerated.
|
||||
@ -19,7 +19,7 @@ namespace Icinga.Properties {
|
||||
// class via a tool like ResGen or Visual Studio.
|
||||
// To add or remove a member, edit your .ResX file then rerun ResGen
|
||||
// with the /str option, or rebuild your VS project.
|
||||
[global::System.CodeDom.Compiler.GeneratedCodeAttribute("System.Resources.Tools.StronglyTypedResourceBuilder", "4.0.0.0")]
|
||||
[global::System.CodeDom.Compiler.GeneratedCodeAttribute("System.Resources.Tools.StronglyTypedResourceBuilder", "15.0.0.0")]
|
||||
[global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
|
||||
[global::System.Runtime.CompilerServices.CompilerGeneratedAttribute()]
|
||||
internal class Resources {
|
||||
@ -65,7 +65,7 @@ namespace Icinga.Properties {
|
||||
/// </summary>
|
||||
internal static System.Drawing.Bitmap icinga_banner {
|
||||
get {
|
||||
object obj = ResourceManager.GetObject("icinga-banner", resourceCulture);
|
||||
object obj = ResourceManager.GetObject("icinga_banner", resourceCulture);
|
||||
return ((System.Drawing.Bitmap)(obj));
|
||||
}
|
||||
}
|
||||
|
@ -118,7 +118,7 @@
|
||||
<value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
|
||||
</resheader>
|
||||
<assembly alias="System.Windows.Forms" name="System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" />
|
||||
<data name="icinga-banner" type="System.Resources.ResXFileRef, System.Windows.Forms">
|
||||
<data name="icinga_banner" type="System.Resources.ResXFileRef, System.Windows.Forms">
|
||||
<value>..\icinga-banner.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a</value>
|
||||
</data>
|
||||
</root>
|
@ -1,7 +1,7 @@
|
||||
//------------------------------------------------------------------------------
|
||||
// <auto-generated>
|
||||
// This code was generated by a tool.
|
||||
// Runtime Version:4.0.30319.34011
|
||||
// Runtime Version:4.0.30319.42000
|
||||
//
|
||||
// Changes to this file may cause incorrect behavior and will be lost if
|
||||
// the code is regenerated.
|
||||
@ -12,7 +12,7 @@ namespace Icinga.Properties {
|
||||
|
||||
|
||||
[global::System.Runtime.CompilerServices.CompilerGeneratedAttribute()]
|
||||
[global::System.CodeDom.Compiler.GeneratedCodeAttribute("Microsoft.VisualStudio.Editors.SettingsDesigner.SettingsSingleFileGenerator", "12.0.0.0")]
|
||||
[global::System.CodeDom.Compiler.GeneratedCodeAttribute("Microsoft.VisualStudio.Editors.SettingsDesigner.SettingsSingleFileGenerator", "15.9.0.0")]
|
||||
internal sealed partial class Settings : global::System.Configuration.ApplicationSettingsBase {
|
||||
|
||||
private static Settings defaultInstance = ((Settings)(global::System.Configuration.ApplicationSettingsBase.Synchronized(new Settings())));
|
||||
|
178
agent/windows-setup-agent/ServiceStatus.Designer.cs
generated
@ -28,95 +28,95 @@
|
||||
/// </summary>
|
||||
private void InitializeComponent()
|
||||
{
|
||||
System.ComponentModel.ComponentResourceManager resources = new System.ComponentModel.ComponentResourceManager(typeof(ServiceStatus));
|
||||
this.picBanner = new System.Windows.Forms.PictureBox();
|
||||
this.lblStatus = new System.Windows.Forms.Label();
|
||||
this.txtStatus = new System.Windows.Forms.TextBox();
|
||||
this.btnReconfigure = new System.Windows.Forms.Button();
|
||||
this.btnOK = new System.Windows.Forms.Button();
|
||||
this.btnOpenConfigDir = new System.Windows.Forms.Button();
|
||||
((System.ComponentModel.ISupportInitialize)(this.picBanner)).BeginInit();
|
||||
this.SuspendLayout();
|
||||
//
|
||||
// picBanner
|
||||
//
|
||||
this.picBanner.Image = global::Icinga.Properties.Resources.icinga_banner;
|
||||
this.picBanner.Location = new System.Drawing.Point(0, 0);
|
||||
this.picBanner.Name = "picBanner";
|
||||
this.picBanner.Size = new System.Drawing.Size(625, 77);
|
||||
this.picBanner.TabIndex = 2;
|
||||
this.picBanner.TabStop = false;
|
||||
//
|
||||
// lblStatus
|
||||
//
|
||||
this.lblStatus.AutoSize = true;
|
||||
this.lblStatus.Location = new System.Drawing.Point(12, 105);
|
||||
this.lblStatus.Name = "lblStatus";
|
||||
this.lblStatus.Size = new System.Drawing.Size(79, 13);
|
||||
this.lblStatus.TabIndex = 3;
|
||||
this.lblStatus.Text = "Service Status:";
|
||||
//
|
||||
// txtStatus
|
||||
//
|
||||
this.txtStatus.Location = new System.Drawing.Point(97, 102);
|
||||
this.txtStatus.Name = "txtStatus";
|
||||
this.txtStatus.ReadOnly = true;
|
||||
this.txtStatus.Size = new System.Drawing.Size(278, 20);
|
||||
this.txtStatus.TabIndex = 3;
|
||||
//
|
||||
// btnReconfigure
|
||||
//
|
||||
this.btnReconfigure.Location = new System.Drawing.Point(195, 143);
|
||||
this.btnReconfigure.Name = "btnReconfigure";
|
||||
this.btnReconfigure.Size = new System.Drawing.Size(89, 23);
|
||||
this.btnReconfigure.TabIndex = 1;
|
||||
this.btnReconfigure.Text = "Reconfigure";
|
||||
this.btnReconfigure.UseVisualStyleBackColor = true;
|
||||
this.btnReconfigure.Click += new System.EventHandler(this.btnReconfigure_Click);
|
||||
//
|
||||
// btnOK
|
||||
//
|
||||
this.btnOK.DialogResult = System.Windows.Forms.DialogResult.Cancel;
|
||||
this.btnOK.Location = new System.Drawing.Point(290, 143);
|
||||
this.btnOK.Name = "btnOK";
|
||||
this.btnOK.Size = new System.Drawing.Size(89, 23);
|
||||
this.btnOK.TabIndex = 0;
|
||||
this.btnOK.Text = "OK";
|
||||
this.btnOK.UseVisualStyleBackColor = true;
|
||||
this.btnOK.Click += new System.EventHandler(this.btnOK_Click);
|
||||
//
|
||||
// btnOpenConfigDir
|
||||
//
|
||||
this.btnOpenConfigDir.DialogResult = System.Windows.Forms.DialogResult.Cancel;
|
||||
this.btnOpenConfigDir.Location = new System.Drawing.Point(100, 143);
|
||||
this.btnOpenConfigDir.Name = "btnOpenConfigDir";
|
||||
this.btnOpenConfigDir.Size = new System.Drawing.Size(89, 23);
|
||||
this.btnOpenConfigDir.TabIndex = 2;
|
||||
this.btnOpenConfigDir.Text = "Examine Config";
|
||||
this.btnOpenConfigDir.UseVisualStyleBackColor = true;
|
||||
this.btnOpenConfigDir.Click += new System.EventHandler(this.btnOpenConfigDir_Click);
|
||||
//
|
||||
// ServiceStatus
|
||||
//
|
||||
this.AcceptButton = this.btnOK;
|
||||
this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 13F);
|
||||
this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font;
|
||||
this.CancelButton = this.btnOK;
|
||||
this.ClientSize = new System.Drawing.Size(391, 186);
|
||||
this.Controls.Add(this.btnOpenConfigDir);
|
||||
this.Controls.Add(this.btnOK);
|
||||
this.Controls.Add(this.btnReconfigure);
|
||||
this.Controls.Add(this.txtStatus);
|
||||
this.Controls.Add(this.lblStatus);
|
||||
this.Controls.Add(this.picBanner);
|
||||
this.FormBorderStyle = System.Windows.Forms.FormBorderStyle.FixedSingle;
|
||||
this.Icon = ((System.Drawing.Icon)(resources.GetObject("$this.Icon")));
|
||||
this.MaximizeBox = false;
|
||||
this.Name = "ServiceStatus";
|
||||
this.Text = "Icinga 2 Service Status";
|
||||
((System.ComponentModel.ISupportInitialize)(this.picBanner)).EndInit();
|
||||
this.ResumeLayout(false);
|
||||
this.PerformLayout();
|
||||
System.ComponentModel.ComponentResourceManager resources = new System.ComponentModel.ComponentResourceManager(typeof(ServiceStatus));
|
||||
this.picBanner = new System.Windows.Forms.PictureBox();
|
||||
this.lblStatus = new System.Windows.Forms.Label();
|
||||
this.txtStatus = new System.Windows.Forms.TextBox();
|
||||
this.btnReconfigure = new System.Windows.Forms.Button();
|
||||
this.btnOK = new System.Windows.Forms.Button();
|
||||
this.btnOpenConfigDir = new System.Windows.Forms.Button();
|
||||
((System.ComponentModel.ISupportInitialize)(this.picBanner)).BeginInit();
|
||||
this.SuspendLayout();
|
||||
//
|
||||
// picBanner
|
||||
//
|
||||
this.picBanner.Image = global::Icinga.Properties.Resources.icinga_banner;
|
||||
this.picBanner.Location = new System.Drawing.Point(0, 0);
|
||||
this.picBanner.Name = "picBanner";
|
||||
this.picBanner.Size = new System.Drawing.Size(625, 77);
|
||||
this.picBanner.TabIndex = 2;
|
||||
this.picBanner.TabStop = false;
|
||||
//
|
||||
// lblStatus
|
||||
//
|
||||
this.lblStatus.AutoSize = true;
|
||||
this.lblStatus.Location = new System.Drawing.Point(12, 105);
|
||||
this.lblStatus.Name = "lblStatus";
|
||||
this.lblStatus.Size = new System.Drawing.Size(79, 13);
|
||||
this.lblStatus.TabIndex = 3;
|
||||
this.lblStatus.Text = "Service Status:";
|
||||
//
|
||||
// txtStatus
|
||||
//
|
||||
this.txtStatus.Location = new System.Drawing.Point(97, 102);
|
||||
this.txtStatus.Name = "txtStatus";
|
||||
this.txtStatus.ReadOnly = true;
|
||||
this.txtStatus.Size = new System.Drawing.Size(278, 20);
|
||||
this.txtStatus.TabIndex = 3;
|
||||
//
|
||||
// btnReconfigure
|
||||
//
|
||||
this.btnReconfigure.Location = new System.Drawing.Point(195, 143);
|
||||
this.btnReconfigure.Name = "btnReconfigure";
|
||||
this.btnReconfigure.Size = new System.Drawing.Size(89, 23);
|
||||
this.btnReconfigure.TabIndex = 1;
|
||||
this.btnReconfigure.Text = "Reconfigure";
|
||||
this.btnReconfigure.UseVisualStyleBackColor = true;
|
||||
this.btnReconfigure.Click += new System.EventHandler(this.btnReconfigure_Click);
|
||||
//
|
||||
// btnOK
|
||||
//
|
||||
this.btnOK.DialogResult = System.Windows.Forms.DialogResult.Cancel;
|
||||
this.btnOK.Location = new System.Drawing.Point(290, 143);
|
||||
this.btnOK.Name = "btnOK";
|
||||
this.btnOK.Size = new System.Drawing.Size(89, 23);
|
||||
this.btnOK.TabIndex = 0;
|
||||
this.btnOK.Text = "OK";
|
||||
this.btnOK.UseVisualStyleBackColor = true;
|
||||
this.btnOK.Click += new System.EventHandler(this.btnOK_Click);
|
||||
//
|
||||
// btnOpenConfigDir
|
||||
//
|
||||
this.btnOpenConfigDir.DialogResult = System.Windows.Forms.DialogResult.Cancel;
|
||||
this.btnOpenConfigDir.Location = new System.Drawing.Point(100, 143);
|
||||
this.btnOpenConfigDir.Name = "btnOpenConfigDir";
|
||||
this.btnOpenConfigDir.Size = new System.Drawing.Size(89, 23);
|
||||
this.btnOpenConfigDir.TabIndex = 2;
|
||||
this.btnOpenConfigDir.Text = "Examine Config";
|
||||
this.btnOpenConfigDir.UseVisualStyleBackColor = true;
|
||||
this.btnOpenConfigDir.Click += new System.EventHandler(this.btnOpenConfigDir_Click);
|
||||
//
|
||||
// ServiceStatus
|
||||
//
|
||||
this.AcceptButton = this.btnOK;
|
||||
this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 13F);
|
||||
this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font;
|
||||
this.CancelButton = this.btnOK;
|
||||
this.ClientSize = new System.Drawing.Size(391, 186);
|
||||
this.Controls.Add(this.btnOpenConfigDir);
|
||||
this.Controls.Add(this.btnOK);
|
||||
this.Controls.Add(this.btnReconfigure);
|
||||
this.Controls.Add(this.txtStatus);
|
||||
this.Controls.Add(this.lblStatus);
|
||||
this.Controls.Add(this.picBanner);
|
||||
this.FormBorderStyle = System.Windows.Forms.FormBorderStyle.FixedSingle;
|
||||
this.Icon = ((System.Drawing.Icon)(resources.GetObject("$this.Icon")));
|
||||
this.MaximizeBox = false;
|
||||
this.Name = "ServiceStatus";
|
||||
this.Text = "Icinga Windows Agent Service Status";
|
||||
((System.ComponentModel.ISupportInitialize)(this.picBanner)).EndInit();
|
||||
this.ResumeLayout(false);
|
||||
this.PerformLayout();
|
||||
|
||||
}
|
||||
|
||||
|
@ -1,9 +1,4 @@
|
||||
using System;
|
||||
using System.Collections.Generic;
|
||||
using System.ComponentModel;
|
||||
using System.Data;
|
||||
using System.Drawing;
|
||||
using System.Text;
|
||||
using System.Windows.Forms;
|
||||
using System.ServiceProcess;
|
||||
using System.Diagnostics;
|
||||
|
@ -112,27 +112,469 @@
|
||||
<value>2.0</value>
|
||||
</resheader>
|
||||
<resheader name="reader">
|
||||
<value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
|
||||
<value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
|
||||
</resheader>
|
||||
<resheader name="writer">
|
||||
<value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
|
||||
<value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
|
||||
</resheader>
|
||||
<assembly alias="System.Drawing" name="System.Drawing, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a" />
|
||||
<assembly alias="System.Drawing" name="System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a" />
|
||||
<data name="$this.Icon" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
|
||||
<value>
|
||||
AAABAAEAICAQAAAABADoAgAAFgAAACgAAAAgAAAAQAAAAAEABAAAAAAAAAIAAAAAAAAAAAAAEAAAABAA
|
||||
AAAAAAAAAACAAACAAAAAgIAAgAAAAIAAgACAgAAAgICAAMDAwAAAAP8AAP8AAAD//wD/AAAA/wD/AP//
|
||||
AAD///8AAAAAAAAAAAAAAAAAAAAAAAAHAAAAAAAAAAAAAAAAcAAAcAB3AAAAAAAAAAAAAAcABwB///cA
|
||||
AAAAAAAAAAAAcAAA////AAAAAAAAAAAAAAAAAP///3AAAAAAAAAAAAAAAAD///9wAAAAAAAAAAAAAAAA
|
||||
j//4AAAAB3AAAAAAAAAAAAj/jwAAAA/4AAAAAAAAAAAAAAiAAAAP9wAAAAAAAAAAAAAH9wAAf3AAAAAA
|
||||
AAAAAAAAAH93d/cAAAAAAAAAAAAAAAB////3AAAAAAAAAAAAAAAA/////wAAAAAAAAAAAAAAB/////9w
|
||||
AAAAAAAAAAAAAAf/////gAAAAAAAAAAAAAAH//////h3AAAAAAAAAAAAB/////+I//h3eHAAAAAAAAD/
|
||||
////AAB3j//3AAAAAAB4////9wAAAAf/+AAAAAf/+AB4iPAAAAAAj/cAAAAH//AAAAD3AAAAAAcAAAAA
|
||||
B/+AAAAAjwAAAAAAAAAAAAB3AAAAAA9wAAAAAAAAAAAAAAAAAAAIh3AAAAAAAAAAAAAAAAAAD//wAAAA
|
||||
AAAAAAAAAAAAAH//9wAAAAAAAAAAAAAAAAB///cAAAAAAAcAAAAAAAAACP+AAAAAAHAAcAAAAAAAAAB3
|
||||
AAAAAAcAAAcAAAAAAAAAAAAAAABwAAAAAAAAAAAAAAAAAAAAAAD/////4AAAB8AAAAOAAAABgAAAAYAA
|
||||
AAGAAAABgAAAAYAAAAGAAAABgAAAAYAAAAGAAAABgAAAAYAAAAGAAAABgAAAAYAAAAGAAAABgAAAAYAA
|
||||
AAGAAAABgAAAAYAAAAGAAAABgAAAAYAAAAGAAAABgAAAAcAAAAPgAAAH/////w==
|
||||
AAABAAUAEBAAAAEAIABoBAAAVgAAABgYAAABACAAiAkAAL4EAAAgIAAAAQAgAKgQAABGDgAAMDAAAAEA
|
||||
IACoJQAA7h4AAAAAAAABACAA6iUAAJZEAAAoAAAAEAAAACAAAAABACAAAAAAAAAEAADDDgAAww4AAAAA
|
||||
AAAAAAAAv5UA/7+VAP+/lQD/v5UB/7+WAv+/lQD/v5UA/7+VAP+/lQD/v5UA/7+VAP+/lQD/v5UA/7+V
|
||||
AP+/lQD/v5UA/7+VAP+/lQD/v5UA/7+UAf++kwD/v5YB/7+VAP+/lQD/v5UA/7+VAP+/lQD/v5UA/7+V
|
||||
AP+/lQD/v5UA/7+VAP+/lQD/v5UA/76TAP/Alwv/xZ8Z/72SAP+/lQD/v5UA/7+WAf+/lQD/v5UA/7+V
|
||||
AP+/lQD/v5UA/7+VAP+/lQD/v5UA/7+VAf++kwD/7eG3///////Orj3/vJAA/8CWA/+9kgD/v5QA/7+V
|
||||
AP+/lQD/v5UA/7+VAP+/lQD/v5UA/7+VAf+/lQD/v5QA//Hoyf//////0rVQ/7yQAP/AlwX/yKMj/8CX
|
||||
Bf+/lAD/v5UA/7+VAP+/lQD/v5UA/7+VAP+/lQD/v5UB/76TAP/DnBb/zaw2/8WfHP+7jgD/vJAB/9a7
|
||||
Xf/BmQn/vpQA/7+VAP+/lQD/v5UA/7+VAP+/lQD/v5UA/7+VAP+/lQD/vpQD/7qMAP/LqTT/7N+y/+na
|
||||
p//EnSD/vZEA/8CWAv/AlgL/wJYD/7+VAP+/lQD/v5UA/7+VAP+/lQD/v5UA/8CXBP+9kgD/7N+z////
|
||||
////////5dSX/7uPAP+/lQP/vJAA/7uOAP+/lQD/v5UA/7+VAP+/lQD/v5UA/7+VAP+/lAL/uYsA/+3h
|
||||
uP///////////+fYov/EnRX/xqEd/82tOv/Vulr/vpQA/7+VAP+/lQD/v5UA/7+VAf++kwD/xJ0S/8+v
|
||||
Qf/NrTr/696v/+zgtP/Fnxv/v5UA/72SAP/cxXP/9e7X/76TAP+/lQD/v5UB/7+VAP+/lgL/vJEA/8uo
|
||||
L//j0ZD/u48A/7uOAP/Algv/wZgQ/7uOAP+/lQD/vpMB/7+VBP+/lAD/v5UA/7+VAP+/lQD/v5UA/7+V
|
||||
AP++kwD/vI8A/8CWA//AlgL/wJYE/+nbqf/awWr/vJEA/8CWA/+/lQH/v5UA/7+VAP+/lQD/v5UA/7+V
|
||||
AP+/lQD/v5UB/8CWAv+/lQH/vpQA/8GYCf/7+fD/696w/7uPAP/AlgP/v5UB/7+VAP+/lQD/v5UA/7+V
|
||||
AP+/lQD/v5UA/7+VAP+/lQD/v5UA/7+VAP++kwD/w5sS/8GYC/++lAD/v5UA/7+VAP+/lQD/v5UA/7+V
|
||||
AP+/lQD/v5UA/7+VAP+/lQD/v5UA/7+VAP+/lQD/v5UA/76TAP++lAH/v5UA/7+VAP+/lQD/v5UA/7+V
|
||||
AP+/lQD/v5UA/7+VAP+/lQD/v5UA/7+VAP+/lQD/v5UA/7+VAP+/lgH/v5UB/7+VAP+/lQD/v5UA/7+V
|
||||
AP+/lQD/v5UA/wAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
|
||||
AAAAAAAAAAAAAAAAAAAoAAAAGAAAADAAAAABACAAAAAAAAAJAADDDgAAww4AAAAAAAAAAAAAv5UA/7+V
|
||||
AP+/lQD/v5UA/7+VAP+/lQD/v5UA/7+VAP+/lQD/v5UA/7+VAP+/lQD/v5UA/7+VAP+/lQD/v5UA/7+V
|
||||
AP+/lQD/v5UA/7+VAP+/lQD/v5UA/7+VAP+/lQD/v5UA/7+VAP+/lQD/v5UA/7+VAP+/lQD/v5UA/7+V
|
||||
AP+/lQD/v5UA/7+VAP+/lQD/v5UA/7+VAP+/lQD/v5UA/7+VAP+/lQD/v5UA/7+VAP+/lQD/v5UA/7+V
|
||||
AP+/lQD/v5UA/7+VAP+/lQD/v5UA/7+VAP/AlgP/wJcE/8CWAv+/lQD/v5UA/7+VAP+/lQD/v5UA/7+V
|
||||
AP+/lQD/v5UA/7+VAP+/lQD/v5UA/7+VAP+/lQD/v5UA/7+VAP+/lQD/v5UA/7+VAP+/lQD/v5UA/7+V
|
||||
Af+7jwD/uo0A/7yRAP+/lgD/v5UA/7+VAP+/lQD/v5UA/7+VAP+/lQD/v5UA/7+VAP+/lQD/v5UA/7+V
|
||||
AP+/lQD/v5UA/7+VAP+/lQD/v5UA/7+VAP+/lQD/v5UA/72SAP/Yv2j/6t2s/82tPf+8kQD/wJYC/7+V
|
||||
AP+/lQD/v5UA/7+VAP+/lQD/v5UA/7+VAP+/lQD/v5UA/7+VAP+/lQD/v5UA/7+VAP+/lQD/v5UA/7+V
|
||||
AP/AlgP/u48A/9K0S/////////////n16P/DnBL/vpMA/7+WAf+/lQD/v5YC/7+WAf+/lQD/v5UA/7+V
|
||||
AP+/lQD/v5UA/7+VAP+/lQD/v5UA/7+VAP+/lQD/v5UA/7+VAP/AlwT/u44A/9W6Wf////////////v5
|
||||
8f/Fnxn/vpMA/7+VAf+/lgD/vZEA/72SAP+/lgD/v5UA/7+VAP+/lQD/v5UA/7+VAP+/lQD/v5UA/7+V
|
||||
AP+/lQD/v5UA/7+VAP+/lQH/v5UA/7+VBP/k05b/9e/Z/9/Kgv++kwH/wJYE/8GYCP+7jwD/3cd6/9W6
|
||||
Wf+7jgD/wJYD/7+VAP+/lQD/v5UA/7+VAP+/lQD/v5UA/7+VAP+/lQD/v5UA/7+VAP+/lQD/v5UA/76U
|
||||
AP+8kAH/vJEA/8KaFv/Mqjb/uowA/7uOAf+7jgD/17xh/8ikJP+9kgD/v5YB/7+VAP+/lQD/v5UA/7+V
|
||||
AP+/lQD/v5UA/7+VAP+/lQD/v5UA/7+VAP+/lQD/v5UA/7+VAf/AlgP/wJYD/72RAP/JpS3/3sl9/+PR
|
||||
kf/bxHD/wpoc/7yPAP/AlgH/v5UA/7+VAP+/lQD/v5UA/7+VAP+/lQD/v5UA/7+VAP+/lQD/v5UA/7+V
|
||||
AP+/lQD/v5UA/7+VAP+/lQD/v5YB/72SAP/o2qb///////79+v//////3cd7/7yQAP/AlwT/v5YB/7+V
|
||||
AP+/lQH/v5YC/7+VAP+/lQD/v5UA/7+VAP+/lQD/v5UA/7+VAP+/lQD/v5UA/7+VAP/AlgL/vJEA/8uo
|
||||
L////////v37//38+f//////+PTl/8KZDP+9kQD/vpMB/76UAP+/lAH/vZIA/7+VAf+/lQD/v5UA/7+V
|
||||
AP+/lQD/v5UA/7+VAP+/lQD/v5UA/7+VAP/AlgP/vZIA/8upMP///////v37//79+f//////+vbr/86u
|
||||
Pf/Kpiz/x6Ig/8KZC//Alwr/x6Mj/76TAP+/lQD/v5UA/7+VAP+/lQD/v5UA/7+VAP+/lQD/v5UA/7+V
|
||||
AP++kwH/uo0A/7+VBf/x58b///////79+v//////4MuF/7yQAP/EnRL/yKMk/8ejI//q3Kv//////9K0
|
||||
TP+7jwD/wJYD/7+VAP+/lQD/v5UA/7+VAP+/lQD/v5UB/76TAP/Fnhf/2L5k/86tPP/EnRb/3MZ2/+jZ
|
||||
pP/fyoH/v5UJ/7+VAP++lAD/vpMD/7qNAP/eyHz//Pr1/82sOf+8kAD/wJYD/7+VAP+/lQD/v5UA/7+V
|
||||
AP+/lQD/wJYD/7uPAP/StEv//////8mlKf+7jwD/vI8D/7mLAP/EnR7/yKUp/7yQAP/AlwP/v5UB/7+V
|
||||
Af+9kgL/wJYH/72SAP+/lQD/v5UA/7+VAP+/lQD/v5UA/7+VAP+/lQD/v5UA/7+VAP/AlgT/xJ4Y/7+U
|
||||
Af+/lgH/wJcE/8CXBP+/lAL/zKo3/8SdFv+9kQD/v5UA/7+VAP+/lQH/v5QB/7+WAf+/lQD/v5UA/7+V
|
||||
AP+/lQD/v5UA/7+VAP+/lQD/v5UA/7+VAP+/lQD/vZIA/7+VAP+/lQD/v5UB/7+VAP+/lAD/696x////
|
||||
///VuVf/vJAA/8CWA/+/lQD/v5UB/7+VAP+/lQD/v5UA/7+VAP+/lQD/v5UA/7+VAP+/lQD/v5UA/7+V
|
||||
AP+/lQD/v5YC/7+VAP+/lQD/v5YB/76TAP/EnhX/+vfs///////l1Jn/u44A/8CXBP+/lQD/v5UA/7+V
|
||||
AP+/lQD/v5UA/7+VAP+/lQD/v5UA/7+VAP+/lQD/v5UA/7+VAP+/lQD/v5UA/7+VAP+/lQD/v5UA/7+W
|
||||
Av+9kQD/1rtd/+japv/GoR//vZIA/7+WAf+/lQD/v5UA/7+VAP+/lQD/v5UA/7+VAP+/lQD/v5UA/7+V
|
||||
AP+/lQD/v5UA/7+VAP+/lQD/v5UA/7+VAP+/lQD/v5UA/7+VAP+/lQD/vJAA/7qNAP+9kgD/v5UA/7+V
|
||||
AP+/lQD/v5UA/7+VAP+/lQD/v5UA/7+VAP+/lQD/v5UA/7+VAP+/lQD/v5UA/7+VAP+/lQD/v5UA/7+V
|
||||
AP+/lQD/v5UA/7+VAP+/lQD/wJYD/8CXBP+/lgL/v5UA/7+VAP+/lQD/v5UA/7+VAP+/lQD/v5UA/7+V
|
||||
AP+/lQD/v5UA/7+VAP+/lQD/v5UA/7+VAP+/lQD/v5UA/7+VAP+/lQD/v5UA/7+VAP+/lQD/v5UA/7+V
|
||||
AP+/lQD/v5UA/7+VAP+/lQD/v5UA/7+VAP+/lQD/v5UA/7+VAP+/lQD/v5UA/7+VAP+/lQD/v5UA/7+V
|
||||
AP+/lQD/v5UA/7+VAP+/lQD/v5UA/7+VAP+/lQD/v5UA/7+VAP+/lQD/v5UA/7+VAP+/lQD/v5UA/7+V
|
||||
AP+/lQD/v5UA/7+VAP+/lQD/AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
|
||||
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAKAAAACAA
|
||||
AABAAAAAAQAgAAAAAAAAEAAAww4AAMMOAAAAAAAAAAAAAL+VAP+/lQD/v5UA/7+VAP+/lQD/v5UA/7+V
|
||||
AP+/lQD/v5UA/7+VAP+/lQD/v5UA/7+VAP+/lQD/v5UA/7+VAP+/lQD/v5UA/7+VAP+/lQD/v5UA/7+V
|
||||
AP+/lQD/v5UA/7+VAP+/lQD/v5UA/7+VAP+/lQD/v5UA/7+VAP+/lQD/v5UA/7+VAP+/lQD/v5UA/7+V
|
||||
AP+/lQD/v5UA/7+VAP+/lQD/v5UA/7+VAP+/lQD/v5UA/7+VAP+/lQD/v5UA/7+VAP+/lQD/v5UA/7+V
|
||||
AP+/lQD/v5UA/7+VAP+/lQD/v5UA/7+VAP+/lQD/v5UA/7+VAP+/lQD/v5UA/7+VAP+/lQD/v5UA/7+V
|
||||
AP+/lQD/v5UA/7+VAP+/lQD/v5UA/7+VAP+/lQD/v5UA/7+VAP+/lQD/v5UA/7+VAP+/lQD/v5UA/7+V
|
||||
AP+/lQD/v5UA/7+VAP+/lQD/v5UA/7+VAP+/lQD/v5UA/7+VAP+/lQD/v5UA/7+VAP+/lQD/v5UA/7+V
|
||||
AP+/lQD/v5UA/7+VAP+/lQD/v5UA/7+VAP+/lQH/wJYD/7+VAf+/lQD/v5UA/7+VAP+/lQD/v5UA/7+V
|
||||
AP+/lQD/v5UA/7+VAP+/lQD/v5UA/7+VAP+/lQD/v5UA/7+VAP+/lQD/v5UA/7+VAP+/lQD/v5UA/7+V
|
||||
AP+/lQD/v5UA/7+VAP+/lQD/v5UA/7+VAP+/lQD/wJYC/76TAf+8kAD/vpQB/8CWAv+/lQD/v5UA/7+V
|
||||
AP+/lQD/v5UA/7+VAP+/lQD/v5UA/7+VAP+/lQD/v5UA/7+VAP+/lQD/v5UA/7+VAP+/lQD/v5UA/7+V
|
||||
AP+/lQD/v5UA/7+VAP+/lQD/v5UA/7+VAP+/lQD/v5UA/7+WAf+8kAD/w5wV/86tOv/CmhH/vJEA/7+W
|
||||
Af+/lQD/v5UA/7+VAP+/lQD/v5UA/7+VAP+/lQD/v5UA/7+VAP+/lQD/v5UA/7+VAP+/lQD/v5UA/7+V
|
||||
AP+/lQD/v5UA/7+VAP+/lQD/v5UA/7+VAP+/lQD/v5UA/7+VAP/AlgL/vJEA/86tPv/69+3///////j0
|
||||
5f/KqDH/vZEA/8CWAv+/lQD/v5UA/7+VAP+/lQD/v5UA/7+VAP+/lQD/v5UA/7+VAP+/lQD/v5UA/7+V
|
||||
AP+/lQD/v5UA/7+VAP+/lQD/v5UA/7+VAP+/lQD/v5UA/7+VAP+/lQD/v5UA/7+WAf+9kgD/7+XC////
|
||||
///9/Pj//////+vfsv+8kAD/wJYC/7+VAP+/lQD/v5UA/7+WAf/AlgP/v5UA/7+VAP+/lQD/v5UA/7+V
|
||||
AP+/lQD/v5UA/7+VAP+/lQD/v5UA/7+VAP+/lQD/v5UA/7+VAP+/lQD/v5UA/7+VAP+/lQD/v5UA/76U
|
||||
AP/z69H///////z79f//////7+XC/72RAP+/lgL/v5UA/7+VAP+/lQD/vZIA/7yPAP+/lQD/v5UA/7+V
|
||||
AP+/lQD/v5UA/7+VAP+/lQD/v5UA/7+VAP+/lQD/v5UA/7+VAP+/lQD/v5UA/7+VAP+/lQD/v5UA/7+V
|
||||
AP/AlgP/u48A/9m/af///////v37///////Wu2H/u44A/8CXA/+/lQD/v5UB/76TAP/HoyL/0LJG/76U
|
||||
AP+/lQD/v5UA/7+VAP+/lQD/v5UA/7+VAP+/lQD/v5UA/7+VAP+/lQD/v5UA/7+VAP+/lQD/v5UA/7+V
|
||||
AP+/lQD/v5UA/7+VAP+/lQH/vZEA/8+wQ//dyHr/0LFF/8+vQf++lAT/wJYC/8CXBP/BmAj/uo0A/9zF
|
||||
eP/38uD/vpMA/7+VAP+/lQH/v5UA/7+VAP+/lQD/v5UA/7+VAP+/lQD/v5UA/7+VAP+/lQD/v5UA/7+V
|
||||
AP+/lQD/v5UA/7+VAP+/lQD/v5UA/7+VAP+/lgL/vJAA/7qOAf+6jAD/yqcv/86uP/+6jQD/u44C/7uO
|
||||
AP+9kQD/0rVP/8SeF/++kwD/v5UB/7+VAP+/lQD/v5UA/7+VAP+/lQD/v5UA/7+VAP+/lQD/v5UA/7+V
|
||||
AP+/lQD/v5UA/7+VAP+/lQD/v5UA/7+VAP+/lQD/v5UA/7+VAP/AlgP/wJcE/8CXBP+9kQD/zKo3/9Cy
|
||||
R//awm7/17xf/8+wQv/Ioyj/vJAA/8CWAv+/lQD/v5UA/7+VAP+/lQD/v5UA/7+VAP+/lQD/v5UA/7+V
|
||||
AP+/lQD/v5UA/7+VAP+/lQD/v5UA/7+VAP+/lQD/v5UA/7+VAP+/lQD/v5UA/7+VAP+/lQD/wJYC/7yQ
|
||||
AP/eyX////////7+/P///////v37/9CySf+8kAD/wJYC/7+VAP+/lQD/v5UA/7+VAP+/lQD/v5UA/7+V
|
||||
AP+/lQD/v5UA/7+VAP+/lQD/v5UA/7+VAP+/lQD/v5UA/7+VAP+/lQD/v5UA/7+VAP+/lQD/v5UA/8CW
|
||||
A/+8kAD/0LFF///////+/vz//v37//79+v//////+PTm/8OcFP++lAD/wJYD/7+VAP+/lQD/v5UA/7+V
|
||||
AP+/lQD/v5UA/7+VAP+/lQD/v5UA/7+VAP+/lQD/v5UA/7+VAP+/lQD/v5UA/7+VAP+/lQD/v5UA/7+V
|
||||
AP+/lQD/wJcE/7uOAP/k0pP///////79+/////////////79+///////0rRP/7mLAP++kwP/vpQA/7+V
|
||||
Af/AlgL/wJYD/7+VAf/AlgL/v5UA/7+VAP+/lQD/v5UA/7+VAP+/lQD/v5UA/7+VAP+/lQD/v5UA/7+V
|
||||
AP+/lQD/v5UA/7+VAP/AlwT/u44A/+XTl////////v37/////////////v78///////fyYD/yqcu/8il
|
||||
J//Cmw7/vpQA/72RAP+8kAD/vpQB/7yRAP+/lQD/v5UA/7+VAP+/lQD/v5UA/7+VAP+/lQD/v5UA/7+V
|
||||
AP+/lQD/v5UA/7+VAP+/lQD/v5UB/8GYB/+8kAD/z7BI///////+/vz//v36//79+v//////+vbq/8Wg
|
||||
HP/EnRT/y6ky/8+vQf/Qskf/y6gx/93GeP/48+L/171g/7yRAP/AlgL/v5UA/7+VAP+/lQD/v5UA/7+V
|
||||
AP+/lQD/v5UA/7+VAP+/lQD/v5UA/7+VAP++kwD/uo0A/7yQAP/LqC//6Nqn/////////v7///////37
|
||||
9v/Tt1X/u48A/76UAv+9kQD/vZIA/7+WAv/HoiH/+PTm///////z69D/vpQA/7+VAP+/lQD/v5UA/7+V
|
||||
AP+/lQD/v5UA/7+VAP+/lQD/v5UA/7+VAP+/lgH/vpMA/8ahHf/gy4P/1rte/8qnL/+7jwD/zq8+/+DL
|
||||
g//cxnX/1rth/7yRA/+/lgD/v5UB/7+WAv+/lgL/v5UC/7uPAP/eyX7//Pr0/9rDb/+8kQD/wJYC/7+V
|
||||
AP+/lQD/v5UA/7+VAP+/lQD/v5UA/7+VAP+/lQD/v5UA/8CXBP+7jgD/2cFr///////hzoz/uYsA/8GY
|
||||
Bv+8kAD/u44C/7iJAP/JpjL/y6gy/72SAP/AlwT/v5UA/7+VAP+/lQD/v5UB/72RAf/Alwj/vZEA/7+V
|
||||
AP+/lQD/v5UA/7+VAP+/lQD/v5UA/7+VAP+/lQD/v5UA/7+VAP+/lQD/v5UB/76TAP/EnRX/3MV2/8ah
|
||||
H/++kwD/v5YB/8CWA//AlwX/wJYC/8CXCf/Rs0z/u44A/7yQAP+/lgH/v5UA/7+VAP+/lQD/v5YC/7+U
|
||||
AP/AlgL/v5UA/7+VAP+/lQD/v5UA/7+VAP+/lQD/v5UA/7+VAP+/lQD/v5UA/7+VAP+/lQD/v5UA/76T
|
||||
AP+6jQD/vpMA/7+VAP+/lQD/v5UA/7+VAP/AlgL/u48A/8yrQP/eyX3/zKo2/72RAP+/lgH/v5UA/7+V
|
||||
AP+/lQD/v5UB/7+VAP+/lQD/v5UA/7+VAP+/lQD/v5UA/7+VAP+/lQD/v5UA/7+VAP+/lQD/v5UA/7+V
|
||||
AP+/lQD/v5UB/8CXBP+/lgH/v5UA/7+VAP+/lQD/v5UB/7+VAP+/lQL/7uO+////////////0LJG/7yQ
|
||||
AP/AlgP/v5UA/7+VAP+/lQD/v5UA/7+VAP+/lQD/v5UA/7+VAP+/lQD/v5UA/7+VAP+/lQD/v5UA/7+V
|
||||
AP+/lQD/v5UA/7+VAP+/lQD/v5UA/7+VAP+/lQD/v5UA/7+VAP+/lgL/vZIA/8agHP/9+/b//v35////
|
||||
///fy4L/uo0A/8CXBP+/lQD/v5UA/7+VAP+/lQD/v5UA/7+VAP+/lQD/v5UA/7+VAP+/lQD/v5UA/7+V
|
||||
AP+/lQD/v5UA/7+VAP+/lQD/v5UA/7+VAP+/lQD/v5UA/7+VAP+/lQD/v5UA/7+VAP+/lgH/vZIA/+fX
|
||||
of//////+vfr/8qnLv+9kQD/wJYC/7+VAP+/lQD/v5UA/7+VAP+/lQD/v5UA/7+VAP+/lQD/v5UA/7+V
|
||||
AP+/lQD/v5UA/7+VAP+/lQD/v5UA/7+VAP+/lQD/v5UA/7+VAP+/lQD/v5UA/7+VAP+/lQD/v5UA/7+V
|
||||
AP++lAD/vpQF/8yrNf/Fnhr/vZEA/7+WAf+/lQD/v5UA/7+VAP+/lQD/v5UA/7+VAP+/lQD/v5UA/7+V
|
||||
AP+/lQD/v5UA/7+VAP+/lQD/v5UA/7+VAP+/lQD/v5UA/7+VAP+/lQD/v5UA/7+VAP+/lQD/v5UA/7+V
|
||||
AP+/lQD/v5UA/7+VAP+/lQL/vJAA/76TAf/AlgH/v5UA/7+VAP+/lQD/v5UA/7+VAP+/lQD/v5UA/7+V
|
||||
AP+/lQD/v5UA/7+VAP+/lQD/v5UA/7+VAP+/lQD/v5UA/7+VAP+/lQD/v5UA/7+VAP+/lQD/v5UA/7+V
|
||||
AP+/lQD/v5UA/7+VAP+/lQD/v5UA/7+VAP/AlgP/v5YB/7+VAP+/lQD/v5UA/7+VAP+/lQD/v5UA/7+V
|
||||
AP+/lQD/v5UA/7+VAP+/lQD/v5UA/7+VAP+/lQD/v5UA/7+VAP+/lQD/v5UA/7+VAP+/lQD/v5UA/7+V
|
||||
AP+/lQD/v5UA/7+VAP+/lQD/v5UA/7+VAP+/lQD/v5UA/7+VAP+/lQD/v5UA/7+VAP+/lQD/v5UA/7+V
|
||||
AP+/lQD/v5UA/7+VAP+/lQD/v5UA/7+VAP+/lQD/v5UA/7+VAP+/lQD/v5UA/7+VAP+/lQD/v5UA/7+V
|
||||
AP+/lQD/v5UA/7+VAP+/lQD/v5UA/7+VAP+/lQD/v5UA/7+VAP+/lQD/v5UA/7+VAP+/lQD/v5UA/7+V
|
||||
AP+/lQD/v5UA/7+VAP+/lQD/v5UA/7+VAP+/lQD/v5UA/7+VAP+/lQD/v5UA/7+VAP+/lQD/v5UA/7+V
|
||||
AP+/lQD/v5UA/7+VAP+/lQD/v5UA/7+VAP+/lQD/v5UA/7+VAP+/lQD/v5UA/7+VAP+/lQD/v5UA/7+V
|
||||
AP+/lQD/v5UA/7+VAP+/lQD/v5UA/7+VAP+/lQD/v5UA/7+VAP+/lQD/v5UA/7+VAP8AAAAAAAAAAAAA
|
||||
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
|
||||
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACgA
|
||||
AAAwAAAAYAAAAAEAIAAAAAAAACQAAMMOAADDDgAAAAAAAAAAAAC/lQD/v5UA/7+VAP+/lQD/v5UA/7+V
|
||||
AP+/lQD/v5UA/7+VAP+/lQD/v5UA/7+VAP+/lQD/v5UA/7+VAP+/lQD/v5UA/7+VAP+/lQD/v5UA/7+V
|
||||
AP+/lQD/v5UA/7+VAP+/lQD/v5UA/7+VAP+/lQD/v5UA/7+VAP+/lQD/v5UA/7+VAP+/lQD/v5UA/7+V
|
||||
AP+/lQD/v5UA/7+VAP+/lQD/v5UA/7+VAP+/lQD/v5UA/7+VAP+/lQD/v5UA/7+VAP+/lQD/v5UA/7+V
|
||||
AP+/lQD/v5UA/7+VAP+/lQD/v5UA/7+VAP+/lQD/v5UA/7+VAP+/lQD/v5UA/7+VAP+/lQD/v5UA/7+V
|
||||
AP+/lQD/v5UA/7+VAP+/lQD/v5UA/7+VAP+/lQD/v5UA/7+VAP+/lQD/v5UA/7+VAP+/lQD/v5UA/7+V
|
||||
AP+/lQD/v5UA/7+VAP+/lQD/v5UA/7+VAP+/lQD/v5UA/7+VAP+/lQD/v5UA/7+VAP+/lQD/v5UA/7+V
|
||||
AP+/lQD/v5UA/7+VAP+/lQD/v5UA/7+VAP+/lQD/v5UA/7+VAP+/lQD/v5UA/7+VAP+/lQD/v5UA/7+V
|
||||
AP+/lQD/v5UA/7+VAP+/lQD/v5UA/7+VAP+/lQD/v5UA/7+VAP+/lQD/v5UA/7+VAP+/lQD/v5UA/7+V
|
||||
AP+/lQD/v5UA/7+VAP+/lQD/v5UA/7+VAP+/lQD/v5UA/7+VAP+/lQD/v5UA/7+VAP+/lQD/v5UA/7+V
|
||||
AP+/lQD/v5UA/7+VAP+/lQD/v5UA/7+VAP+/lQD/v5UA/7+VAP+/lQD/v5UA/7+VAP+/lQD/v5UA/7+V
|
||||
AP+/lQD/v5UA/7+VAP+/lQD/v5UA/7+VAP+/lQD/v5UA/7+VAP+/lQD/v5UA/7+VAP+/lQD/v5UA/7+V
|
||||
AP+/lQD/v5UA/7+VAP+/lQD/v5UA/7+VAP+/lQD/v5UA/7+VAP+/lQD/v5UA/7+VAP+/lQD/v5UA/7+V
|
||||
AP+/lQD/v5UA/7+VAP+/lQD/v5UA/7+VAP+/lQD/v5UA/7+VAP+/lQD/v5UA/7+VAP+/lQD/v5UA/7+V
|
||||
AP+/lQD/v5UA/7+VAP+/lQD/v5UA/7+VAP+/lQD/v5UA/7+VAP+/lQD/v5UA/7+VAP+/lQD/v5UA/7+V
|
||||
AP+/lQD/v5UA/7+VAP+/lQD/v5UA/7+VAP+/lQD/v5UA/7+VAP+/lQD/v5UA/7+VAP+/lQD/v5UA/7+V
|
||||
AP+/lQD/v5UA/7+VAP+/lQD/v5UA/7+VAP+/lQD/v5UA/7+VAP+/lQD/v5UA/7+VAP+/lQD/v5UA/7+V
|
||||
AP+/lQD/v5UA/7+VAP+/lQD/v5UA/7+VAP+/lQD/v5UA/7+VAP+/lQD/v5UA/7+VAP+/lQD/v5UA/7+V
|
||||
AP+/lQD/v5UA/7+VAP+/lQD/v5UA/7+VAP+/lQD/v5UA/7+VAP+/lQD/v5UA/7+VAP+/lQD/v5UA/7+V
|
||||
AP+/lQD/v5UA/7+VAP+/lQD/v5UA/7+VAP+/lQD/v5UA/7+VAP+/lQD/v5UA/7+VAP+/lQD/v5UA/7+V
|
||||
AP+/lQD/v5UA/7+VAP+/lQD/v5UA/7+VAP+/lQD/v5UA/7+WAv/AlgT/wJYD/7+VAf+/lQD/v5UA/7+V
|
||||
AP+/lQD/v5UA/7+VAP+/lQD/v5UA/7+VAP+/lQD/v5UA/7+VAP+/lQD/v5UA/7+VAP+/lQD/v5UA/7+V
|
||||
AP+/lQD/v5UA/7+VAP+/lQD/v5UA/7+VAP+/lQD/v5UA/7+VAP+/lQD/v5UA/7+VAP+/lQD/v5UA/7+V
|
||||
AP+/lQD/v5UA/7+VAP+/lQD/v5UA/7+VAP+/lQD/v5UA/7+VAP+/lQD/wJYD/72SAP+7jgD/vJAA/7+V
|
||||
Av+/lgL/v5UA/7+VAP+/lQD/v5UA/7+VAP+/lQD/v5UA/7+VAP+/lQD/v5UA/7+VAP+/lQD/v5UA/7+V
|
||||
AP+/lQD/v5UA/7+VAP+/lQD/v5UA/7+VAP+/lQD/v5UA/7+VAP+/lQD/v5UA/7+VAP+/lQD/v5UA/7+V
|
||||
AP+/lQD/v5UA/7+VAP+/lQD/v5UA/7+VAP+/lQD/v5UA/7+VAP+/lQD/v5UA/7+VAP+/lQL/vI8A/8ij
|
||||
JP/Tt1T/zq49/76UBf+9kgD/wJYB/7+VAP+/lQD/v5UA/7+VAP+/lQD/v5UA/7+VAP+/lQD/v5UA/7+V
|
||||
AP+/lQD/v5UA/7+VAP+/lQD/v5UA/7+VAP+/lQD/v5UA/7+VAP+/lQD/v5UA/7+VAP+/lQD/v5UA/7+V
|
||||
AP+/lQD/v5UA/7+VAP+/lQD/v5UA/7+VAP+/lQD/v5UA/7+VAP+/lQD/v5UA/7+VAP+/lQD/v5UA/7+W
|
||||
Af+9kQD/38uE///+/f///v7///////HoyP/Fnx3/vZIA/7+WAf+/lQD/v5UA/7+VAP+/lQD/v5UA/7+V
|
||||
AP+/lQD/v5UA/7+VAP+/lQD/v5UA/7+VAP+/lQD/v5UA/7+VAP+/lQD/v5UA/7+VAP+/lQD/v5UA/7+V
|
||||
AP+/lQD/v5UA/7+VAP+/lQD/v5UA/7+VAP+/lQD/v5UA/7+VAP+/lQD/v5UA/7+VAP+/lQD/v5UA/7+V
|
||||
AP+/lQD/wJYD/7uPAP/Wu1////////7+/P/+/vz//v37///////t4rv/vZIA/7+VAf+/lQD/v5UA/7+V
|
||||
AP+/lQD/v5UA/7+VAP+/lQD/v5UA/7+VAP+/lQD/v5UA/7+VAP+/lQD/v5UA/7+VAP+/lQD/v5UA/7+V
|
||||
AP+/lQD/v5UA/7+VAP+/lQD/v5UA/7+VAP+/lQD/v5UA/7+VAP+/lQD/v5UA/7+VAP+/lQD/v5UA/7+V
|
||||
AP+/lQD/v5UA/7+VAP+/lQD/wJYC/7yRAP/u4rv///////79+//////////+///+/f/+/v3/yaYs/72R
|
||||
AP/AlgL/v5UA/7+VAP+/lQD/v5UA/7+VAP+/lQD/v5UA/7+VAP+/lQD/v5UA/7+VAP+/lQD/v5UA/7+V
|
||||
AP+/lQD/v5UA/7+VAP+/lQD/v5UA/7+VAP+/lQD/v5UA/7+VAP+/lQD/v5UA/7+VAP+/lQD/v5UA/7+V
|
||||
AP+/lQD/v5UA/7+VAP+/lQD/v5UA/7+VAP+/lQD/v5UB/72SAP/x6Mj///////7+/f/////////////+
|
||||
/v//////zKs4/7yQAP/AlgP/v5UA/7+VAP+/lQD/v5UA/7+VAP+/lQD/wJcE/8CWA/+/lQD/v5UA/7+V
|
||||
AP+/lQD/v5UA/7+VAP+/lQD/v5UA/7+VAP+/lQD/v5UA/7+VAP+/lQD/v5UA/7+VAP+/lQD/v5UA/7+V
|
||||
AP+/lQD/v5UA/7+VAP+/lQD/v5UA/7+VAP+/lQD/v5UA/7+VAP+/lQD/wJcE/7uOAP/izoz///////38
|
||||
+P/+/vz//v36///////48+P/wpoO/76UAP+/lQH/v5UA/7+VAP+/lQD/v5UA/7+VAP+/lAD/uo4A/7yQ
|
||||
AP+/lQD/v5UA/7+VAP+/lQD/v5UA/7+VAP+/lQD/v5UA/7+VAP+/lQD/v5UA/7+VAP+/lQD/v5UA/7+V
|
||||
AP+/lQD/v5UA/7+VAP+/lQD/v5UA/7+VAP+/lQD/v5UA/7+VAP+/lQD/v5UA/7+VAP+/lQD/v5YB/76T
|
||||
AP/DnBb/9O3W/////////v3//v78///////XvWj/uo0A/8CXA/+/lQD/v5UA/7+VAP+/lQD/v5UB/7+U
|
||||
AP/AlwX/3MV1/9GzSf+9kgD/v5YC/7+VAP+/lQD/v5UA/7+VAP+/lQD/v5UA/7+VAP+/lQD/v5UA/7+V
|
||||
AP+/lQD/v5UA/7+VAP+/lQD/v5UA/7+VAP+/lQD/v5UA/7+VAP+/lQD/v5UA/7+VAP+/lQD/v5UA/7+V
|
||||
AP+/lQD/v5UA/8CWAf+9kgD/wpoT/9/Jf//s4LX/5tWc/9GySf/XvWT/v5UH/7+VAP+/lQD/v5UA/7+V
|
||||
AP+/lQD/wJYD/7yQAP/NrDr///////Pr0f++lAD/v5UA/7+VAf+/lQD/v5UA/7+VAP+/lQD/v5UA/7+V
|
||||
AP+/lQD/v5UA/7+VAP+/lQD/v5UA/7+VAP+/lQD/v5UA/7+VAP+/lQD/v5UA/7+VAP+/lQD/v5UA/7+V
|
||||
AP+/lQD/v5UA/7+VAP+/lQD/v5UA/7+VAP/AlgH/vpQB/7qOAP+8jwD/u48C/7mLAP/OrkH/1blc/7uO
|
||||
AP/AlwP/v5UB/8CWAv/AlgL/wJYC/72SAP/FnyD/7eG5/9O2Uf+9kgD/v5YC/7+VAP+/lQD/v5UA/7+V
|
||||
AP+/lQD/v5UA/7+VAP+/lQD/v5UA/7+VAP+/lQD/v5UA/7+VAP+/lQD/v5UA/7+VAP+/lQD/v5UA/7+V
|
||||
AP+/lQD/v5UA/7+VAP+/lQD/v5UA/7+VAP+/lQD/v5UA/7+VAP+/lQD/v5UB/8CXBP/AlgP/wJYE/8CX
|
||||
Bf+7jwD/2L5m/8qoM/+8kQD/vpQC/7yQAP+9kQD/v5YC/7yQAP/XvGP/xqAl/7mMAP/AlgH/v5UA/7+V
|
||||
AP+/lQD/v5UA/7+VAP+/lQD/v5UA/7+VAP+/lQD/v5UA/7+VAP+/lQD/v5UA/7+VAP+/lQD/v5UA/7+V
|
||||
AP+/lQD/v5UA/7+VAP+/lQD/v5UA/7+VAP+/lQD/v5UA/7+VAP+/lQD/v5UA/7+VAP+/lQD/v5UA/7+V
|
||||
AP+/lQD/v5UA/7+VAf++lAD/wZgP/9rCcP++lAf/w5wT/8yqNP/Kpy3/vZIA/8ijLP/WvGH/vJAA/8CX
|
||||
Bf+/lQD/v5UA/7+VAP+/lQD/v5UA/7+VAP+/lQD/v5UA/7+VAP+/lQD/v5UA/7+VAP+/lQD/v5UA/7+V
|
||||
AP+/lQD/v5UA/7+VAP+/lQD/v5UA/7+VAP+/lQD/v5UA/7+VAP+/lQD/v5UA/7+VAP+/lQD/v5UA/7+V
|
||||
AP+/lQD/v5UA/7+VAP+/lQD/v5UA/7+VAP/AlwP/uo0A/86tSP/y6cv/+vbq////////////9e7X/+nb
|
||||
qv/Alxb/vpMA/7+WAf+/lQD/v5UA/7+VAP+/lQD/v5UA/7+VAP+/lQD/v5UA/7+VAP+/lQD/v5UA/7+V
|
||||
AP+/lQD/v5UA/7+VAP+/lQD/v5UA/7+VAP+/lQD/v5UA/7+VAP+/lQD/v5UA/7+VAP+/lQD/v5UA/7+V
|
||||
AP+/lQD/v5UA/7+VAP+/lQD/v5UA/7+VAP+/lQD/v5UA/8CWAv+9kgD/x6Il//fy4P/////////+////
|
||||
//////////7+///////l05j/vZEA/7+WAf+/lQD/v5UA/7+VAP+/lQD/v5UA/7+VAP+/lQD/v5UA/7+V
|
||||
AP+/lQD/v5UA/7+VAP+/lQD/v5UA/7+VAP+/lQD/v5UA/7+VAP+/lQD/v5UA/7+VAP+/lQD/v5UA/7+V
|
||||
AP+/lQD/v5UA/7+VAP+/lQD/v5UA/7+VAP+/lQD/v5UA/7+VAP+/lQD/v5UA/7+VAf+9kgD/7eK8////
|
||||
///+/fr///7+/////////////v79//79+///////1bpe/7uPAP/AlgP/v5UA/7+VAP+/lQD/v5UA/7+V
|
||||
AP+/lQD/v5UA/7+VAP+/lQD/v5UA/7+VAP+/lQD/v5UA/7+VAP+/lQD/v5UA/7+VAP+/lQD/v5UA/7+V
|
||||
AP+/lQD/v5UA/7+VAP+/lQD/v5UA/7+VAP+/lQD/v5UA/7+VAP+/lQD/v5UA/7+VAP+/lQD/wJYD/7yQ
|
||||
AP/Nqzj///////7+/f////////////////////////////7+/P//////8ObD/76TAP/AlgP/v5UB/7+V
|
||||
AP+/lQD/v5UA/7+VAP+/lQD/v5UA/7+VAP+/lQD/v5UA/7+VAP+/lQD/v5UA/7+VAP+/lQD/v5UA/7+V
|
||||
AP+/lQD/v5UA/7+VAP+/lQD/v5UA/7+VAP+/lQD/v5UA/7+VAP+/lQD/v5UA/7+VAP+/lQD/v5UA/7+V
|
||||
AP+/lQD/wJcE/7uOAP/ZwGj///////79+//////////////////////////////+/v//////+fbq/8CX
|
||||
Ef+8jwD/v5QB/7+WAv/AlgP/v5YB/7+VAP+/lQD/v5UA/7+VAf/AlgT/wJYC/7+VAP+/lQD/v5UA/7+V
|
||||
AP+/lQD/v5UA/7+VAP+/lQD/v5UA/7+VAP+/lQD/v5UA/7+VAP+/lQD/v5UA/7+VAP+/lQD/v5UA/7+V
|
||||
AP+/lQD/v5UA/7+VAP+/lQD/wJcE/7uOAP/ZwWr///////79+///////////////////////////////
|
||||
/v///////Pr0/9W5WP/IpCb/wpkL/72RAP+8jwD/vZEA/76UAP+/lgH/wJcD/76UAf+7jgD/vZEA/8CW
|
||||
Av+/lQD/v5UA/7+VAP+/lQD/v5UA/7+VAP+/lQD/v5UA/7+VAP+/lQD/v5UA/7+VAP+/lQD/v5UA/7+V
|
||||
AP+/lQD/v5UA/7+VAP+/lQD/v5UA/7+VAP+/lQD/wJYD/7yQAP/Orj7///////7+/f//////////////
|
||||
//////////////7+/f//////8unM/8qnLv/Ut1T/2L5l/9e8Yv/Rs0v/yaYr/8KaDP+9kgD/u44A/8Kb
|
||||
E//UuFP/yqcu/7yRAP+/lgH/v5UA/7+VAP+/lQD/v5UA/7+VAP+/lQD/v5UA/7+VAP+/lQD/v5UA/7+V
|
||||
AP+/lQD/v5UA/7+VAP+/lQD/v5UA/7+VAP+/lQD/v5UA/7+VAP+/lQD/v5UB/7+WAf++kwD/7uS/////
|
||||
///+/fn////+///////////////+//79+v//////2L9q/7iKAP+9kQT/vpMA/8OcEv/LqTL/07ZS/9i+
|
||||
Zf/XvWH/0rVP//Tt1P///////////9W5WP+8kAD/wJYD/7+VAP+/lQD/v5UA/7+VAP+/lQD/v5UA/7+V
|
||||
AP+/lQD/v5UA/7+VAP+/lQD/v5UA/7+VAP+/lQD/v5UA/7+VAP+/lQD/v5UA/8CWAv+/lQH/wJcD/76U
|
||||
Av+8kQD/3cd5//z79v/////////+//7+/P///v3//v79///////q3K3/vZIA/8CWAv/AlgP/v5UB/76T
|
||||
AP+8kAD/vI8A/76UA/+/lgL/4MyH///////8+vT///////Dnxf+9kgD/v5YB/7+VAP+/lQD/v5UA/7+V
|
||||
AP+/lQD/v5UA/7+VAP+/lQD/v5UA/7+VAP+/lQD/v5UA/7+VAP+/lQD/v5UA/7+VAP+/lQD/v5YA/72R
|
||||
AP++kwH/u48A/8KaEv/cxnf/yaYt/8eiJP/u5L7//v79///////+/v3//v38/+TSk/+9kgL/v5QB/7+W
|
||||
Af+/lQD/v5UA/7+VAf+/lgL/wJYD/8CXBP+6jQD/0bNP///////+/fr//////+rcrf+8kAD/wJYC/7+V
|
||||
AP+/lQD/v5UA/7+VAP+/lQD/v5UA/7+VAP+/lQD/v5UA/7+VAP+/lQD/v5UA/7+VAP+/lQD/v5UA/7+V
|
||||
AP/AlgL/vZEA/8yqNf/z69D/6duq/9vDcP/GoCD/vJAA/72SAf+8kQH/yKUm/9GzSv/OrTv/yKQk/9W5
|
||||
Xf+9kgD/wJYC/7+VAP+/lQD/v5UA/7+VAP+/lQD/v5UA/7+VAP+/lQH/vpMA/+DMiP/59en/7+S//8ah
|
||||
Iv+9kgD/v5YC/7+VAP+/lQD/v5UA/7+VAP+/lQD/v5UA/7+VAP+/lQD/v5UA/7+VAP+/lQD/v5UA/7+V
|
||||
AP+/lQD/v5UA/7+VAP/AlgP/vI8A/+rdrv///////////9S4XP+5iwD/wZgF/7+WAv/AlgL/vZEA/7uP
|
||||
AP+9kQP/uo0A/9W6Xv/KqDT/vJEA/7+WAv+/lQD/v5UA/7+VAP+/lQD/v5UA/7+VAP+/lQD/v5UB/7yQ
|
||||
AP/BmAf/vZIC/72SAP+/lgD/v5UA/7+VAP+/lQD/v5UA/7+VAP+/lQD/v5UA/7+VAP+/lQD/v5UA/7+V
|
||||
AP+/lQD/v5UA/7+VAP+/lQD/v5UA/7+VAP/AlgP/vI8A/9zEdP//////+/jv/8qnLf+9kgD/v5YC/7+V
|
||||
AP+/lQD/v5YC/8CWA//AlgT/vpMA/8SdGv/Zv23/vZEA/8CXA/+/lQH/v5UA/7+VAP+/lQD/v5UA/7+V
|
||||
AP+/lQD/v5UB/8CWA/+/lAD/v5YC/7+WAv+/lQD/v5UA/7+VAP+/lQD/v5UA/7+VAP+/lQD/v5UA/7+V
|
||||
AP+/lQD/v5UA/7+VAP+/lQD/v5UA/7+VAP+/lQD/v5UA/7+VAP+/lQD/v5UA/72SAf/NrDn/x6Mk/72R
|
||||
AP+/lgH/v5UA/7+VAP+/lQD/v5UA/7+VAP+/lQD/wJYC/7uPAP/Wu2H/yaYv/7qNAP+/lQL/wJYC/7+V
|
||||
AP+/lQD/v5UA/7+VAP+/lQD/v5UA/7+VAP+/lQH/v5UA/7+VAP+/lQD/v5UA/7+VAP+/lQD/v5UA/7+V
|
||||
AP+/lQD/v5UA/7+VAP+/lQD/v5UA/7+VAP+/lQD/v5UA/7+VAP+/lQD/v5UA/7+VAP+/lQD/v5UA/7+V
|
||||
Af+8kAD/vZIB/7+WAf+/lQD/v5UA/7+VAP+/lQD/v5UA/7+VAP+/lQD/v5UB/76TAP/Cmxn/171k/8ah
|
||||
Hf/CmQ//vJAA/7+WAf+/lQD/v5UA/7+VAP+/lQD/v5UA/7+VAP+/lQD/v5UA/7+VAP+/lQD/v5UA/7+V
|
||||
AP+/lQD/v5UA/7+VAP+/lQD/v5UA/7+VAP+/lQD/v5UA/7+VAP+/lQD/v5UA/7+VAP+/lQD/v5UA/7+V
|
||||
AP+/lQD/v5UA/7+VAP/AlgP/v5YC/7+VAP+/lQD/v5UA/7+VAP+/lQD/v5UA/7+VAP+/lQD/wJYC/72R
|
||||
AP/LqDP/+PPj///////59ef/0rVS/7yQAP/AlgL/v5UA/7+VAP+/lQD/v5UA/7+VAP+/lQD/v5UA/7+V
|
||||
AP+/lQD/v5UA/7+VAP+/lQD/v5UA/7+VAP+/lQD/v5UA/7+VAP+/lQD/v5UA/7+VAP+/lQD/v5UA/7+V
|
||||
AP+/lQD/v5UA/7+VAP+/lQD/v5UA/7+VAP+/lQD/v5UA/7+VAP+/lQD/v5UA/7+VAP+/lQD/v5UA/7+V
|
||||
AP+/lQH/v5UA/8CWBf/07NP///////7+/P//////+/jv/8agHP+9kgD/v5YC/7+VAP+/lQD/v5UA/7+V
|
||||
AP+/lQD/v5UA/7+VAP+/lQD/v5UA/7+VAP+/lQD/v5UA/7+VAP+/lQD/v5UA/7+VAP+/lQD/v5UA/7+V
|
||||
AP+/lQD/v5UA/7+VAP+/lQD/v5UA/7+VAP+/lQD/v5UA/7+VAP+/lQD/v5UA/7+VAP+/lQD/v5UA/7+V
|
||||
AP+/lQD/v5UA/7+VAP+/lgL/vZEA/8ilKP/9/Pn///79/////v/+/fn//////9K0TP+7jwD/wJYD/7+V
|
||||
AP+/lQD/v5UA/7+VAP+/lQD/v5UA/7+VAP+/lQD/v5UA/7+VAP+/lQD/v5UA/7+VAP+/lQD/v5UA/7+V
|
||||
AP+/lQD/v5UA/7+VAP+/lQD/v5UA/7+VAP+/lQD/v5UA/7+VAP+/lQD/v5UA/7+VAP+/lQD/v5UA/7+V
|
||||
AP+/lQD/v5UA/7+VAP+/lQD/v5UA/7+VAP+/lQH/vpQA/8KbD//48+T///////79+v///////v38/8mm
|
||||
K/+9kQD/wJYC/7+VAP+/lQD/v5UA/7+VAP+/lQD/v5UA/7+VAP+/lQD/v5UA/7+VAP+/lQD/v5UA/7+V
|
||||
AP+/lQD/v5UA/7+VAP+/lQD/v5UA/7+VAP+/lQD/v5UA/7+VAP+/lQD/v5UA/7+VAP+/lQD/v5UA/7+V
|
||||
AP+/lQD/v5UA/7+VAP+/lQD/v5UA/7+VAP+/lQD/v5UA/7+VAP+/lQD/wJYD/7yQAP/VuVz//v37////
|
||||
/v//////3sh9/7yQAP/AlgL/v5UA/7+VAP+/lQD/v5UA/7+VAP+/lQD/v5UA/7+VAP+/lQD/v5UA/7+V
|
||||
AP+/lQD/v5UA/7+VAP+/lQD/v5UA/7+VAP+/lQD/v5UA/7+VAP+/lQD/v5UA/7+VAP+/lQD/v5UA/7+V
|
||||
AP+/lQD/v5UA/7+VAP+/lQD/v5UA/7+VAP+/lQD/v5UA/7+VAP+/lQD/v5UA/7+VAP+/lQD/v5UA/7+W
|
||||
Af+8kAD/x6Ij/9S4Vv/Kpy7/vJAA/7+VAf+/lQD/v5UA/7+VAP+/lQD/v5UA/7+VAP+/lQD/v5UA/7+V
|
||||
AP+/lQD/v5UA/7+VAP+/lQD/v5UA/7+VAP+/lQD/v5UA/7+VAP+/lQD/v5UA/7+VAP+/lQD/v5UA/7+V
|
||||
AP+/lQD/v5UA/7+VAP+/lQD/v5UA/7+VAP+/lQD/v5UA/7+VAP+/lQD/v5UA/7+VAP+/lQD/v5UA/7+V
|
||||
AP+/lQD/v5UA/7+VAP/AlgL/vZIA/7uOAP+9kQD/wJYC/7+VAP+/lQD/v5UA/7+VAP+/lQD/v5UA/7+V
|
||||
AP+/lQD/v5UA/7+VAP+/lQD/v5UA/7+VAP+/lQD/v5UA/7+VAP+/lQD/v5UA/7+VAP+/lQD/v5UA/7+V
|
||||
AP+/lQD/v5UA/7+VAP+/lQD/v5UA/7+VAP+/lQD/v5UA/7+VAP+/lQD/v5UA/7+VAP+/lQD/v5UA/7+V
|
||||
AP+/lQD/v5UA/7+VAP+/lQD/v5UA/7+VAP+/lQD/v5YC/8CWBP/AlgL/v5UA/7+VAP+/lQD/v5UA/7+V
|
||||
AP+/lQD/v5UA/7+VAP+/lQD/v5UA/7+VAP+/lQD/v5UA/7+VAP+/lQD/v5UA/7+VAP+/lQD/v5UA/7+V
|
||||
AP+/lQD/v5UA/7+VAP+/lQD/v5UA/7+VAP+/lQD/v5UA/7+VAP+/lQD/v5UA/7+VAP+/lQD/v5UA/7+V
|
||||
AP+/lQD/v5UA/7+VAP+/lQD/v5UA/7+VAP+/lQD/v5UA/7+VAP+/lQD/v5UA/7+VAP+/lQD/v5UA/7+V
|
||||
AP+/lQD/v5UA/7+VAP+/lQD/v5UA/7+VAP+/lQD/v5UA/7+VAP+/lQD/v5UA/7+VAP+/lQD/v5UA/7+V
|
||||
AP+/lQD/v5UA/7+VAP+/lQD/v5UA/7+VAP+/lQD/v5UA/7+VAP+/lQD/v5UA/7+VAP+/lQD/v5UA/7+V
|
||||
AP+/lQD/v5UA/7+VAP+/lQD/v5UA/7+VAP+/lQD/v5UA/7+VAP+/lQD/v5UA/7+VAP+/lQD/v5UA/7+V
|
||||
AP+/lQD/v5UA/7+VAP+/lQD/v5UA/7+VAP+/lQD/v5UA/7+VAP+/lQD/v5UA/7+VAP+/lQD/v5UA/7+V
|
||||
AP+/lQD/v5UA/7+VAP+/lQD/v5UA/7+VAP+/lQD/v5UA/7+VAP+/lQD/v5UA/7+VAP+/lQD/v5UA/7+V
|
||||
AP+/lQD/v5UA/7+VAP+/lQD/v5UA/7+VAP+/lQD/v5UA/7+VAP+/lQD/v5UA/7+VAP+/lQD/v5UA/7+V
|
||||
AP+/lQD/v5UA/7+VAP+/lQD/v5UA/7+VAP+/lQD/v5UA/7+VAP+/lQD/v5UA/7+VAP+/lQD/v5UA/7+V
|
||||
AP+/lQD/v5UA/7+VAP+/lQD/v5UA/7+VAP+/lQD/v5UA/7+VAP+/lQD/v5UA/7+VAP+/lQD/v5UA/7+V
|
||||
AP+/lQD/v5UA/7+VAP+/lQD/v5UA/7+VAP+/lQD/v5UA/7+VAP+/lQD/v5UA/7+VAP+/lQD/v5UA/7+V
|
||||
AP+/lQD/v5UA/7+VAP+/lQD/v5UA/7+VAP+/lQD/v5UA/7+VAP+/lQD/v5UA/7+VAP+/lQD/v5UA/7+V
|
||||
AP+/lQD/v5UA/7+VAP+/lQD/v5UA/7+VAP+/lQD/v5UA/7+VAP+/lQD/v5UA/7+VAP+/lQD/v5UA/7+V
|
||||
AP+/lQD/v5UA/7+VAP+/lQD/v5UA/7+VAP+/lQD/v5UA/7+VAP+/lQD/v5UA/7+VAP+/lQD/v5UA/7+V
|
||||
AP+/lQD/v5UA/7+VAP+/lQD/v5UA/7+VAP+/lQD/v5UA/7+VAP+/lQD/v5UA/7+VAP+/lQD/v5UA/7+V
|
||||
AP+/lQD/v5UA/7+VAP+/lQD/v5UA/7+VAP+/lQD/v5UA/7+VAP+/lQD/v5UA/7+VAP+/lQD/v5UA/7+V
|
||||
AP+/lQD/v5UA/7+VAP+/lQD/v5UA/7+VAP+/lQD/v5UA/7+VAP+/lQD/v5UA/7+VAP+/lQD/v5UA/7+V
|
||||
AP+/lQD/v5UA/7+VAP+/lQD/v5UA/7+VAP+/lQD/v5UA/7+VAP+/lQD/v5UA/7+VAP+/lQD/v5UA/7+V
|
||||
AP+/lQD/v5UA/7+VAP+/lQD/v5UA/7+VAP+/lQD/v5UA/7+VAP+/lQD/v5UA/7+VAP+/lQD/v5UA/7+V
|
||||
AP+/lQD/v5UA/7+VAP8AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
|
||||
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
|
||||
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
|
||||
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
|
||||
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
|
||||
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
|
||||
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACJUE5HDQoaCgAAAA1JSERSAAABAAAA
|
||||
AQAIAgAAANMQPzEAACWxSURBVHja7Z15fF1Xde9/a+9z7qDharImS/I8JrZjO4mHzCEUAiGEkhJCBwih
|
||||
rw2EqZQOD0qB5qWE1xI+vEfyQmlLKVAIJKShJcEhITij49gZPM+2bGuer3Sv7r3n7L3eH1uSHQ+JbEu6
|
||||
5/rs78efxNZH0j1XWt9z9rD2WoT7nobFElZEvi/AYsknVgBLqLECWEKNFcASaqwAllBjBbCEGiuAJdRY
|
||||
ASyhxgpgCTVWAEuosQJYQo0VwBJqrACWUGMFsIQaK4Al1FgBLKHGCmAJNVYAS6ixAlhCjRXAEmqsAJZQ
|
||||
YwWwhBorgCXUWAEsocYKYAk1VgBLqLECWEKNFcASaqwAllBjBbCEGiuAJdRYASyhxgpgCTVWAEuosQJY
|
||||
Qo0VwBJqrACWUGMFsIQaK4Al1FgBLKHGCmAJNVYAS6ixAlhCjZPvC7CcFkEQRACUZvMRIhIEZmhmzvfl
|
||||
nR9YAQIHAZJIg7Wvta8BwBEgAsBaaV9DCjhCCsGAtiKcG1aAYCGIwOxnPUixeFrJmtrEBZXF88rikghA
|
||||
Mudv60293jP0YnuyP5khKaQr7dPgXLACBAhJpDw/IuV7F9ffvrj+7Y0VrqATPocBAlpS2R/v7fzXnW07
|
||||
O5LCdUiQfRScHYT7ns73NVgAE/1Zb0ld2f1XL7iyvowZRNDMms3wBwBMkEtBAAjIKv21Vw7fs+lQ1tfC
|
||||
kdaBs8AKEAgkQWXVx1c03XvFvJgUihmAIKLTfL5maLAACcLLnYO3rtt+oDclo87YdNkyTuwyaP6RRCqr
|
||||
PnfprPuvXhARQjFLInn66AcgCA4REXzNl9aUrnvvRXMri1VOiTf7IsspsALkGTPy+cSKpm9cPtfc+OW4
|
||||
g5gAR5CveV5Z/LEblzWURrXSVoEzwgqQTwSR8vzldWX/+/K5AAgkzjx8jQMLyou+eeV8aJ3v91RgWAHy
|
||||
iWaGlPdeOb/YkYr5LKLf4AhSzB+YV3Pr4nrOqfE/QyxWgLwhiZDzb54z7dqGcs18jlFrvvgLK2e4UUdp
|
||||
tgaMEytA3tBgSPHhRXUAzn3tRhAxY2lVyfVNlfDsbHi8WAHygyCwrxdWlbxzRiWACYlXDQZw6/waCOIJ
|
||||
cCoUWAHygyCCr1fXlEal0DwxIxYCAbisriwWdbQdBY0PK0A+ubCqBMBEbV6Zp0h9caShJArNdhA0HqwA
|
||||
+UExwxFzEjEAExWpBDAQlWJ+WRyaCdaAt8YKkE/Oet3zzbHLoOPHCpAnTFrb5ESqnf+OHytAfhBE0NyT
|
||||
8TGa43nu8OhuwEDOB1kNxoUVID8QAUrv6EtN+Hfuy/o7+9IQwp6TGQ9WgPzADEixpScFwJmgqYCJ+F19
|
||||
6d6MN1nTi/MOK0B+0MxwxIvtAweSGUzQSqj5Jk8c6UXOd4js/X88WAHyAwNSiqGh7IN7OzERZ9sZcARl
|
||||
lP7Rng5Ioe0UYHxYAfIGM8MR39/dlsz5jjjXG7Y5C/bw/q693UPCkfZk2DixAuQNzZCO3N05ePfmZhxX
|
||||
/OfsvpUjqD2d+9uXDkCQXQgdP1aAfKKYKeL8wyuH17f2m3MtZ/FNGDCpb1/YcOBAd0q69vZ/BlgB8gwR
|
||||
seY/emLHjr60I8g7w+DVDHOW4O83N39vW4uIufZc/BlhBcgzmlk48khy+F2/eG17X9oV5I+v0hWbhCJA
|
||||
Ev39K81ffG6frYxyFlgB8o9mlq5zOJm59uev/GhPhyNG0tg0s3FhLKh5NO7HQr83633kqV1ffG6fcKVN
|
||||
gD4LJG64Ld/XYAEDQorhnHp4T8fr/em1tYnyqMMgUxpoLLDN34lIEGV8/ZO9nR9ct/3ZQz0y6rKd+Z4V
|
||||
tjRiUNDMQgoI+u99XXetmg3gpY5ksSsWVRRHRrd1NaMv6+3uH368ueeHezsO9aRIkIzbcf/ZYwUIEIKg
|
||||
s/5ty5uWVBYfHcre9NjWrmFvdllsTiIuCJKoN+Pv7k8nsz7nfDhCRByAbfSfC1aAoECAr9iNuXdcOB3A
|
||||
d3e0dQ0My5h7sC99sCd17JOEgCAn5mqwnfKeO1aAoCCJ/Jz3ewumX1xd2jmc+5cdrXAlA2JsUmwmwcwA
|
||||
fBv6E4QVIBAQ4DOLiPPJJQ0AvrezvaUvfdzg3ob7ZGGXQQOBIELOf9/saZfVl/Xn/H/a3grHJvRPBVaA
|
||||
QKCY4co7lzUA+Pdd7Qd6hqRNaJsSzhMBRhfIC7IQgiRCTt0ws+ptDRVpXz+wtRVS2OCfGgpeAEEwucSs
|
||||
mRUzsykaXkCFETQzHLpzaQOAH+3p2NmVlDapYaoobAEkkfa1P+wJoCzu1hRHSyIOmP1hj9W5lpudsrfA
|
||||
nnp7U+W7ZlZ5mu/fchTC3v6njkJdBSJAEFTWm11VctviuutnVM5LxGOOTPtqW0/qv5t7/m1nW89gVkYd
|
||||
FexbqQaD6BNLGwD8ZG/Hax1JEXHs7X/KKNQeYQLQvv7kiqa7V89ORBw+LmHG/L0tlbvzmT2P7OkQkeDO
|
||||
JgWRzvlXNFY8e/NKDVz2s80vtfUL1wowdRTkEEgQtK/+4cr5//fK+SWu4+tjWZOmd7Riri+O/PxdS+5Y
|
||||
3qQD3jmLcOeyRgAP7eu00T/1FJ4Akkhn1ceWNn5+RZM5QuWIkZZyNNpmXRJpZmbcf/WCa2dW6ZwfwPmA
|
||||
INKef2l92S3zagDct6XF7ndNPQUmABGU0tMSsa+umgVA0GmbagkiDSbg79fOIVeqCSpBPsEwPrm0URAe
|
||||
Pdj9TEsfReziz1RTYAJIInjqQ/NrGoqjvn6LplqSiIE1tYm3N1YErWmKINKeWlabuHVBLYD7t7RAsyjI
|
||||
bYzCpsAEMFXFr2kox/iqiptcmt9pqgxavXwCoPUnljZEBK073PvEkV7zmMr3dYWOQhKAANZwXbmgvAij
|
||||
DVHe4ksIAOaWxeCI4ISXIChfLawu/cOFtQDu29oCXwfqARUeCkkAAAALopg8s8uOSQEKULlkAkHpO5ZM
|
||||
L3bkb1v6/+tQNyL29p8fCk0AopzS3RkPwHiShE1QdWU8KB2Q7AgiKF/Nqiz+yKJ6mNu/Zzv75o1CEoDN
|
||||
vDanXusewpkUlN3ak4LSAamXbNrj/cmF0yuizovtyZ8f7ELBbv2aRWdHkCAigiA4RIWViFVIAoxAeGR/
|
||||
F8bRWtTUi+3L+j/Z0xGQICOC8vX0iqKPLq4HcN+2Fp0tyErOJvSZWWV9P53Tns++1p72M54/7LGvBVFB
|
||||
zGoKLBdIMZMrnzjc+6vDvdfPqPQ0u6e/sZuSaYIwv7yopS9N0iXK8yETQaQ8//bF9XVFkVe7hn66rxNu
|
||||
0LOVTvkuWGuV8+PxyNtmTVtZXbqgPF7kSE/r9nRuc+fg+raBw6ZiRUTqINx4Tk+BCYCRWoL6c8/uveh3
|
||||
V9QXRTzNzkm3GmZosCRSzGUR5/Ebl3362b3ffe2IjDhMNIG/ERq5pOP/xYyR6Qmf9MnK11WJ2B9fUA/g
|
||||
/u0t3rDnxN2zKwmaL6QglfVLYu6nLp71xxfUzUnET07EGvLUQ/u7/vG1w9vbkjLm6AC37S68wlimsn7n
|
||||
YOaZ9uS7ZlVVRB0wGOwzmEcmBgQSRBs7B9/72Na6osiSyuIbZ01LxCO/bu7RzFKKc1GAAEEkBQHEAJjZ
|
||||
1GobqeTG0GyO58iRTxvBEaSz/icuarplXs2O3tSnn93nBWhpalxIIpX1Lmuq/MV7lt46v6Y86gJQmk2I
|
||||
8+jELCLFimklty2qG2RsaO0XIrgnlQpPABgHHHm0P/3jfZ0VMXdRRVFECkEkiUzVtL6s943Xj/7pb3Yd
|
||||
7ks9fKCrOOpeVpdYW5e4uLbsicO9qWHPOasSypJImCwjX+msz2AhZYkrG0pjjaWxWWVFDaWxRMyJudJn
|
||||
9jVrT2lPMQBBriBfcWnc/c41C6ti7l2bmp9v7nEiTgHd/SWRyvnvmV/76LuXmp14GslGecMfMwVWml1B
|
||||
755ZVVkUefxAtzjnBgiTRKGmQ8OMRJVmX8+aVnxdQ8WiiqJiVw5k/a09qSeO9HYnh8mVQgpoVjn/Y8ub
|
||||
/s8V84ocuaMv/aF127e0DThxV417MCSJGKxzCpqjRZEV00rW1CUurSldUFY0szSWiEhB5BAB8Ji15p6s
|
||||
dyCZ2d2f3tiRfL49ubs3hZxSvvr4qln3X7Vgf3L4kp9u7s96VDjTXxP9lzVWPHnT8rgjFL/1eSNTudoR
|
||||
dPem5r95fl8wzzkUsAAYaTRN2lfwNQAQQWsQwZVSCpMjTQQBUhnvqllVP/ydC5pKor1Z749/s/uRXe0y
|
||||
5ui36lJq1jp0zocUq6aXf2Bu9XtnTVtQHh//RSrm17uHfrq/61eHe//9ukXLqkr+54YD92w44MQKZvRP
|
||||
ADOXRpxn37/ioqqS8US/gQFmCMLbH33tqUM9MhK4GX9hC2AQNLIkyjwyHz351u4I8jPejMriH7/jwsvq
|
||||
Er7mL208dM/GA0IKCHHKO5N5vqucL6S4fva0zy5rvK6xYmxIr5jNr/bUi94MBmsG0bFu2DmlI1J0Zbyl
|
||||
P9jQkc45UWf8j6D8IolUxvvrtXO+tmaOr/mM2loaWzZ2JNc+/Io2LuX77bzhrRXiHOAEeORpe+wvJ6MZ
|
||||
0pX96dxP9nY0lcZXVJe8vbFiTnnxukM9OV9J58RpsSAihs75FzdU/PAdF3zx4plzyuJEJrvObPqMjHfH
|
||||
ziG84Q+N1HAWRKacmwYcIQDEpZxeGnu1N9U7mJFSBH8URIBmLolHvnPNwsqYC5zZPpf5CTSWRDe0D+zr
|
||||
SUlHBur9ng8CjBNmCCl8rR/Z25FlumZ6+YrqkmubKp5s6e8fzB4/LZaCtKfijrjnqgXfvWbh3LK4GU2N
|
||||
Bv2Zve5YQXPzdxCWVZXcvrh+GHixtR8MEexT8Gb3/XdmVX5yaSPjbBoQK82CKKv5F/u7RMAqvhTgTvA5
|
||||
oJlZkHTlPS/uv2Xd9t6sd1ld2XPvX3nVzEp/2JNERJCCVMa/oLpk/c0rP3dRIxEUs1liOsdXp9H/KuZi
|
||||
V37z8nmP3risuiiiPV8GJE/jlJdNAPPq2jKcbSc/8+Yuri41c4BAvdVwCQCM7BU4cfeRXe3XPvLajr5U
|
||||
U0n08RuXfWxFk8p6kqGGvXfPq37h5pWX1JT6emJC/wTMAU5f83tnTXvx91YuqUmojDdR/eInHM0MKeaV
|
||||
xTG+MxgnYx6asxOx8qgzMT3BJ47QCQCAAV+zE3e3dCSv/vmrv2zuLXLkP1+z8N5rF/lK/9HShv9899Ky
|
||||
iKP4FHvMEwURTFvIOYn4b25afuWMKj8T0OcAM0CIn2EK+sm4QsSlADhQm2JhFMDga5ZRp3vYu+m/Xr/3
|
||||
9aMA/uyixg0fvOTbVy1wBWnGFKQoO4IUc3Xc/cV7lq5uLFcZL5gOADj3qNXMGaWBYO1+h1cAmMmZFBD0
|
||||
57/dffvTu9K+Xl2TKHHF2U31zg6TsFQecR5+15JF1aUqYEVcCHAFQXPzYAZvtWdyWhgA+rJ+2teBuv0j
|
||||
5ALADHAFQdCzh/sySgM424Hu2WMcaCiO/sc7L0xEHa11fhUwGyAmy5+Zta+Rzr3ensTZ3hc0GMDLncl0
|
||||
1qOA5USEXQAyWSuO+N47LqiMOoo5L2MQSeRrXjGt5B+umAdfT33u2IlB7yl/OKdzvivF4uqS29fMvmFu
|
||||
teYz3AJ4I+tbB+DroJ19K7x06IlFCFIZ74uXz7uivmz8O/yTgZkP/MmF0399tO+hnW1y8nu+j25QQDNr
|
||||
zexr7Ss4Ihp1F1cXralNrKopvaK+fG5ZfOymcBYXZM7xtaVzP97TgeBVvgi1AIJI5dTS2sTnVzRhHEfM
|
||||
Jhtz479r9exfH+4dyPmTsUl8UtAr7Ws4MhZzLqwpXlNngr5sdiI+9rMY9vWr3YPrWwba0tm7Vs8ue2Ml
|
||||
1rdEaXYEfXtLS1dyWEZdK0CAML+Kv1s9p9iRPrOTbwEEQTEvKi/63PKmLz+/T0xQuJjhjdnR4+OCPh5z
|
||||
ltaWralNrKotvaK+bGZpbOxLUr7a1Dn4YntyY2fypY7BtlRW5JTy/GJXjqUDjeeHZY7srW8d+PorzQE5
|
||||
lXoC4RXAVGa+vLHifXOmAch79I9dFYA7ljQ8sK21LZUlSWcXM8eCXjMzK09BabiyOOYuqypeU5tYVZO4
|
||||
or6ssSQ69iWDnnq5M/lie3Jjx+DGzmRHKsc5HwQ4EoIo5rhR556XDzWVRD+xpMFnNseCT3cBzFDMrqBd
|
||||
/enbfr1DKS0C2fUjvAIYTFuu/I7+j8ckStTE3Y8srrtnwwEhXTXugfcbgl6zUiNBXxJ3l08vWVObWFWb
|
||||
uLyubHpxZOxLkjn/pY7ki+3JjZ2DL3cOdqazyKmxoHfirjlcCoavmQgkxCef3jPk6b9c0QRAM2vGG/Kj
|
||||
eGTNR4AcQRs6kh94fNvRZEa4QYx+nB/p0GeBIGhfz6ko3nbrpXFHnNGgdrLRDEHY05++6MFNGV+/eUWv
|
||||
E4IeSkNpRJxEzF0xbTTo6xO18WNB35f1N3QkN7QnN3YmN3UOdg/nkFNmaxqCHEFjQX/y6xJBMFTOv35e
|
||||
zdfXzllWVXLyj858ZCDnf/3VI9/Y3JwL6r3fENIngCDSvr5p9rRxHm6a2msDAwvKi66ZXv6r/V3ipCY3
|
||||
p7jTa4Yry+PuxdWlq2pK19QmLqsvmxZzx76kJ+O92J7c0JF8qSO5uWuwb9iDNxL0JEiO3umZ8eZndJih
|
||||
ARF1f7W/68nDvTfMnva7s6ddUlM6KxEjkADah3M7+9KPN/c8uK+zc2BYuE6Qox/hFMAkoiEib5pdle9r
|
||||
OTVm5eSmOdN+tb8Lo0nUAscFva/ADFdWFkUuqS5ZVZtYU5tYW5uoPC7ou4a9F9oHTNC/0j00YIJeEORx
|
||||
Qc9sMqPGf23meIPJ63x0d/ujezrcqFMedWJSMNCd8TI5BU/BlTLqauaAdzsOowBmoN2YiF1aU4oArH6e
|
||||
jLmktzWUx+JuTjMAVqx8HwxE5LTiyKXVpatqE2trE6trE+XRY7/E9nTu+faBlzoGX+oYeK07lRzOwVcQ
|
||||
4hyD/mRMVrOMugA8xV2p3EiahCDzQqZQRr5/kG9NGAUQIOX7a2sTRY40A+6gYZSclYjPKors6kiKokh1
|
||||
cXRVbemqmtK1dWWrakoTkWO/uJZU9vm25MbO5Ib25Os9Q0MZD56CFJCCpJCunKigPwE21erN1RKNXDRj
|
||||
wl9oUgmjAESA5pXVpQA0cwCfAObgbETQncub2tK5dzZVrqwuKXHl2CccGco+1zZggn5Lbyo9FvSOIGcS
|
||||
g/6U8Bv+V2CEUQDNDFfOScQw9Ylv48Zc1yeXNph/MnBoMPNc28DGjuSGjuS23tRwxoev4AjINwY9wy+E
|
||||
sUdACJ0AZNYZHTnXHHHK9/WcDrOY2Jv1/+tQtwn67b3pbNYEvYQk4QrTAZZt0J8DoRMAAJijjqiOuxhf
|
||||
m5m8YCr7buocvO3x7WAmKfiNQW/KTuX7MgueUAoAOEQjQ+qAxv8IRY4QUSmIzPDGBv2EE0oBGBEpIiLQ
|
||||
ZyGMmEWOJJCpwmkDfzIIdBBMHqa5fL6vYhzXyUEuLX4+EEoBCD5zRp2qhn9gMNc1mFO6cNbUC5FQCgB4
|
||||
mvuzHoIb/yMMegp2/DOZhE4As3WZ89VImYOghpYZoB0azATwHO35ROgEgDnG4euDySzOus7HFEAAcCiZ
|
||||
AQerktR5RhgFIAKU3tGXQoB3gs0Jte29KZxbQyfLmxNGATQDjnyxPWnKvwUwuswl9WS8V7oGIUVBLFgV
|
||||
KGEUgJkhaVtvqiWVBYI4wTQRv7Ej2TscuEpS5xmhFACQQqTTuceaezCa0xtA1h3pg6eCWy30vCCMAozx
|
||||
6MFuAEGLMFNJKu3rRw92w7Hjn8klpAKYjOgnj/Zt6RkiBKtmvYn4x5t7DvWlyRGBurbzj5AKwIAjyRv2
|
||||
vrO9FQHbDTAHdB7Y1gJmYVdAJ5mQCgDT7Scif7inY39yWBIF5EZrzto+daTvySN9Aaykef4RXgHMVDg5
|
||||
lP3a5sMIzEPA3PLv3nwIym4ATwXhFQBm/Sfi/MuO1vWt/aZIf36vx1Rf+9edbU8f6hXB6yl9XhJqAWAG
|
||||
3Er/xXP7Ur7K76aYZnYEHUxm/nbDQTgiIE+k856wC6CZZcR5uaX/r17YD+TtvBUDJvvn4+v3tAykT27c
|
||||
bZkkwi4ATKewmHPfa0e/t6vddGrJzzUQvvTSwXX7O2V00ltjWMawAgDmBizFHb/Z9cvmXtO9dCpf2pTb
|
||||
//bWlv+14YCM2qH/lGIFAABmCEE5zX+wbtv61n7jwBSEIfNIGdDv727/1Po95Eqd7x9F2LACjKCZhRQD
|
||||
OfWeX7z+nwe7HUFK86Q+CTRDgx1B39py9LYndggiUIDPJ5ynWAGOYRxI+fqWx7Z+e2uLI86lJ+JbYFoR
|
||||
a8bnX9j/2ad3SylY2OjPAxI33JbvawgQDJAQAH65r2v3YObahvIiR2pmPUFFpBkjJTsF0e7+9Psf3/7g
|
||||
jlYZdbS99+cJ+wQ4EWbWgBNzfrKl5d2/2OJrFkSSyJQfPOsoNT2zcFxfra3dQ88f6nZirmYb/XnDCnAK
|
||||
2JwVdsUfLqp1BO0bGH7iSB8RHCLTw8vX46rXw4BmU4MIRJBEmvkHu9s/vn5PTunfm1dz0+J6P+MFsDx1
|
||||
eAhlZbi3QgpSGe/mRXWfWtYI4C9f2P/Irva3za3+H4vrr59RWR51xnI0x+7rAEaaefGxbzJaN58I6Ejn
|
||||
HjnYff+21q0dSXj+yurSOy6c/uVLZz15uDflq8loCWwZDyFtkvcmCCLtqxmlsfU3r5xVGrt/a8udT+2S
|
||||
UUfnfAZqy+I3zqy6trFibW1iZmn0zW/enua9/ekNHYOPH+759ZG+gaEsBMmIVL5uKI6+8IGLZ5RE/+al
|
||||
g3e/sF/G7eZXfrACnIggaE8/dMPSm+dWv9YzdO3Dr/Z7PgkSIAa00vAUJMWi7oLy+PyyorllsbqiaIkr
|
||||
S1ypmNO+GsypI0PZ5sHMzr70vuSwyvqmn5cUwkyCpSA17P3pyqYHrl7Yn/Uvf2jzjt5UwJvJna9YAd6A
|
||||
Cc07Vsz4f9csUMzX/edr6w/3yuMSM0eH8tBaQzG0hhngC9MjiEcG/swQApIghBkLqTdOoAlgxm/et/za
|
||||
hvKf7eu85bGtwg1iI/XzHjsJPoYgUjm1pDZx99rZAO7e1Ly+ueeE3AQemdQyEQlXyqjrFEWcuCsjjnCF
|
||||
cB0ZcZy46xRFZNQRjiCCYj55+UgQwVdf3XgQwAfm1bxnbo3O+vYAwNRjBRiBAGYWUnzr6gWVUXd968Bd
|
||||
Lx9CxDldbVozmDErQr5mNVq8/4SPnO6WrphFxFnf3Pudba0AvrpqVlHcVVpbA6YYK8AIQhDn/C9cMvNt
|
||||
DeX9Of8zz+zxfSUmc3GGwXDE3ZsOHRnKrqwu/exFjcgpEbASFec9VgAAkEQq61/RVPmlS2cB+NKGg6+3
|
||||
DcjI5A7KmSEdcaQv/bXNzQA+v2LG4ppS5Sm7LTCVWAFABKV1Iu5+66oFEUGPHuz+9utHRMyZgnVJpRlR
|
||||
54Htretb+yuizldWz7Z7wlOMFQACBE/dtWbOyuqSI0PZP3tmL4Apax4midhTX3npIIBb5tXcMLfazoan
|
||||
krALIAWprHfj/NpPL2sE8BfP7zvYl5Lu1C3Jm9nwb5t7/2m7mQ3PjsddpdkaMDWEWgBBUL6enojfe8U8
|
||||
AP+yo+3BXe1TfyKRwZB098uHjqayF1eXfuaiRuR8OxueGkItAEDQ+h+vnD+vLL69N/XXL+yDFHrKyzEw
|
||||
Q7ry8Ohs+C9WzFhYXap85QiSRI6dFE8m4RVACtIZ7/YlDR+aXwPgM8/u6x7K5ascw8hseFvrM639lWY2
|
||||
nFUq56uc7w97zGwtmCRCeiBGEGlPLaou+eE7Lix25T2bm7/7+hEZy2dGmiTSvtqbzPzRwrolVcWN5UXv
|
||||
nVP9/vk1RTHn6FBuOOsJKe0K0YQT0nRoZoagb121oCbuvtA+8JWNh+A6+W1IqgEQ7esbbk/nmkqiH1tc
|
||||
LwgM3Lao7shQ9g9+vePZw71ikrcmQsh5MgSi0T/jQQrirP9XF894R1PFkKc+88zerOfLvDZiIYA1R135
|
||||
H9df0FQSVcya2desNCvmppLouhsvunZmlc7ZFdIJpoAFEASHyBFk7pQ8ehZFjHzw1JFiNn1XN1Z8+dLZ
|
||||
AL688eCmln6Z70KcUhBy/ueWN72tocLXbOa+5o+p1RV3xN+tnm3qRVsDJpDCE4AAszCife1nPT+d0/5o
|
||||
DhkzmHXO99M57fnMLImOnz4SoLQuijrfunpB3BGPNffc+8phEZ2KTd83f0e+Zhlzb55bDeDk9U9HkGZc
|
||||
UV/2zqZK2FyJCaWQ5gBkMpa19od9OGLhtJKLp5UuKI9fUFncVBL1NeeU9pnb07lNnYMbOwe39aZSqSyE
|
||||
EK6EqXpCpHL+3102b3VNaVs691mz6Ut5LslABPb1rMriCyuLAZzy0cVggOaWxaGZbOf4iaNgBBBEYFZZ
|
||||
L1EcvXFh3YcX1l7bUOGeZrfowwvrGGhP5R7c3/nA9tbdnYNEFIk6ueHc9XNr/nxFE4C/emH/3u6hIJxF
|
||||
NM3rM75+kwkuM0CoiDqwQ6AJpTAEkETKU0LQHStn/O3FM+uLowyY3l6amWhk+mvCh0dLMNQXRz67rPGO
|
||||
C6c/erD7rk3N21v66sqLv3nlPAD/vrv9B9tbRV7XPY/BAKE/6w/mVJEjT/kpZtiztScFYbuGTSQFIIAk
|
||||
Ujn/gprSb1+14NqG8uNrSwk6Vb0qAkZLmzA4KsUH59XcMLPqzmf2Xj29bFF50Z7+4b98bh9kUGrwm141
|
||||
qeHcg/s6P72s0dd8wpNNMUuiw0PZp1r64Nq+kRNJ0AVwiPyM94EL6r9/3eK4IxQzgcYzCzQlSQBiQDEX
|
||||
u/L71y0C4Gn+1LN7OoayeV/5OR4GQ9C9rx65ZV5NXVHE0ywINLI6OiL5VzYeTKVzditgYgn0KpAk8rPe
|
||||
h5c1/vgdF5jol0RnmiRGphgbwxQ9PziYebF1AFIEqg6zZghHNg8Mv/u/txxIZlxBBBIEMrlAhC9sOPC9
|
||||
rS0iYitHTDDBTYWQglTW/+iyxn+7bpG5kZ/LHhARBJFmnhZzl9eUPryvy9dMQdKfASFF28Dwzw50dWb8
|
||||
uCMU48DA8JNH+z7y1K6H97SLiLSj/wknoGVRzLj/kvqy9e9fWeQIzZio7GDzGPnezrbbn9gRwOGEIGKl
|
||||
OefLqOs4Iqc15xQItmjKJBGke+AoZrsqHnXuu2ZhkSMU8wTmxptukB9dXP++BbU66wUts0AzQ5JTFNGE
|
||||
rK+YISKOjf7JI4gCCCJ4+kuXzlpVU2pu2BP7/c2q6dfXzq0qjSmlA6bASOkhYKSoqGa20T95BE4AIihf
|
||||
NVUU3bGkARNUlf/E90zwNS8oj39ueRN8Jabq+O8ZcXx2k2XyCJwAkgi+/vCiuoqo40/arqd5qvz+gtqS
|
||||
4qgtRxVmgiUAAb7SpSXRjy6ug6nXMEkvRNDMs0pjN86ssullYSZYAggi+PryurK5iThjwlZ+TokZXXxw
|
||||
fg2k3VsNL8ESgAhQ+tLaUphjspP6zokAXFZXVhpz2WaYhZVgCaA0I+JcUlOKkUSGSaci6swqjUHxJHaE
|
||||
tASYAAlg6jPHI3L5tBJM5gRg7OU0wxF0QWUx7Dw4rARIAABgOEQJ1wGmojahGfrPK4tDT+Rem6WACJgA
|
||||
gOlJOpWvaCM/zARJAAKAqJzqooAZpWG3nMJKkARgwOz8T9krEgD4dg00xARJAABE/Vn/UDIDTMU5dfPm
|
||||
B7L+FC05WYJHgARgQAj4ntrem8JIHYRJfjkiX/OmrkFIe9A2pARIAIz2TtwzkMYUPAEYAI4MZff2D0MS
|
||||
24FQKAmWAMyAFM+0DgBwJnkubMqgv9SRzGR9kde6iJY8EiwBNDNc+duWvle6BjG6Tj9JmFMBjx7qhtZk
|
||||
10LDSrAEYMARpDL+j/d2Api8cbk5Y7mtN/Xz/d2w561CTLAEAKCY4cqf7O3sGvacSRuZmIj/5x1tueGc
|
||||
I+34J7wETgBmSCmO9qXu3nwIkzMK0syOoB196X/b1YaIDERxOEueCJwAABQzRZxvvX706ZZ+Uxx8Ar85
|
||||
A2YD7NPP7BkYykkhbPiHmSAKAFMhWfGfP7u3P+c7gibwOaA0C8Ldm5qfOtgtowEqDmfJCwEVQDNLV77a
|
||||
kbx13fa0rwXRuUcqA75mR9BD+7u+/NJBCl5RIMvUE1ABYCpYRZ11+7p+/4ntOc3y3BzQzEqzI+hHezs+
|
||||
9KttCgyyCXCWAAsAQGmWcffRPZ03/nLL0VTWOHCmGpjiuARyBD2wvfXD63YogER+2qFagkagBYBxIOo8
|
||||
sb975YObHjrQZVoeaYZifvOyOSbujS2S6Egqe/O67R9/aqcpqW4THyyG4BbHHYMB6cpU1v/pno5dyeFZ
|
||||
pbHGkqjpgWe6a2k+VkZKj2yfjZRWFkQpT313R9uHntj+Sku/jLjapv5bjiOgxXFPxmQG6awvXXndzKqP
|
||||
Xzj9qullFVH3dDkMmvnV7qEf7O742f7O1v5hkkI4wi75W06gYAQwSCLNzDkFQWXFkYuqilfXli2uKIpK
|
||||
coWISTHkqZ196V19qR196d29KT/rw5VCCtNpwmI5gQITwCCJGKwVQ2koDSlg+oQRQTN8BUGQgqSQgjTb
|
||||
0LeclqC3SDolZmpLgoR0TI9Tc3qGGSRJRKT5yFiZZYvldBSkAAazznPClJZ5cpOoLecZQV8GtVgmFSuA
|
||||
JdRYASyhxgpgCTVWAEuosQJYQo0VwBJqrACWUGMFsIQaK4Al1FgBLKHGCmAJNVYAS6ixAlhCjRXAEmqs
|
||||
AJZQYwWwhBorgCXUWAEsocYKYAk1VgBLqLECWEKNFcASaqwAllBjBbCEGiuAJdRYASyhxgpgCTVWAEuo
|
||||
sQJYQo0VwBJqrACWUGMFsIQaK4Al1FgBLKHGCmAJNVYAS6ixAlhCjRXAEmqsAJZQYwWwhBorgCXUWAEs
|
||||
oeb/A5fj85sn5OS0AAAAAElFTkSuQmCC
|
||||
</value>
|
||||
</data>
|
||||
</root>
|
76
agent/windows-setup-agent/SetupWizard.Designer.cs
generated
@ -46,6 +46,7 @@
|
||||
this.colGlobalZoneName = ((System.Windows.Forms.ColumnHeader)(new System.Windows.Forms.ColumnHeader()));
|
||||
this.introduction1 = new System.Windows.Forms.Label();
|
||||
this.groupBox3 = new System.Windows.Forms.GroupBox();
|
||||
this.chkDisableConf = new System.Windows.Forms.CheckBox();
|
||||
this.txtUser = new System.Windows.Forms.TextBox();
|
||||
this.chkRunServiceAsThisUser = new System.Windows.Forms.CheckBox();
|
||||
this.chkInstallNSCP = new System.Windows.Forms.CheckBox();
|
||||
@ -87,7 +88,7 @@
|
||||
this.txtError = new System.Windows.Forms.TextBox();
|
||||
this.lblError = new System.Windows.Forms.Label();
|
||||
this.picBanner = new System.Windows.Forms.PictureBox();
|
||||
this.chkDisableConf = new System.Windows.Forms.CheckBox();
|
||||
this.linkLabelDocs = new System.Windows.Forms.LinkLabel();
|
||||
this.tabFinish.SuspendLayout();
|
||||
this.tabConfigure.SuspendLayout();
|
||||
this.tabParameters.SuspendLayout();
|
||||
@ -141,7 +142,7 @@
|
||||
this.tabFinish.Location = new System.Drawing.Point(4, 5);
|
||||
this.tabFinish.Name = "tabFinish";
|
||||
this.tabFinish.Padding = new System.Windows.Forms.Padding(3);
|
||||
this.tabFinish.Size = new System.Drawing.Size(617, 471);
|
||||
this.tabFinish.Size = new System.Drawing.Size(617, 495);
|
||||
this.tabFinish.TabIndex = 5;
|
||||
this.tabFinish.Text = "Finish";
|
||||
this.tabFinish.UseVisualStyleBackColor = true;
|
||||
@ -151,9 +152,9 @@
|
||||
this.lblSetupCompleted.AutoSize = true;
|
||||
this.lblSetupCompleted.Location = new System.Drawing.Point(34, 35);
|
||||
this.lblSetupCompleted.Name = "lblSetupCompleted";
|
||||
this.lblSetupCompleted.Size = new System.Drawing.Size(259, 13);
|
||||
this.lblSetupCompleted.Size = new System.Drawing.Size(252, 13);
|
||||
this.lblSetupCompleted.TabIndex = 0;
|
||||
this.lblSetupCompleted.Text = "The Icinga 2 Windows client was set up successfully.";
|
||||
this.lblSetupCompleted.Text = "The Icinga Windows agent was set up successfully.";
|
||||
//
|
||||
// tabConfigure
|
||||
//
|
||||
@ -162,7 +163,7 @@
|
||||
this.tabConfigure.Location = new System.Drawing.Point(4, 5);
|
||||
this.tabConfigure.Name = "tabConfigure";
|
||||
this.tabConfigure.Padding = new System.Windows.Forms.Padding(3);
|
||||
this.tabConfigure.Size = new System.Drawing.Size(617, 471);
|
||||
this.tabConfigure.Size = new System.Drawing.Size(617, 495);
|
||||
this.tabConfigure.TabIndex = 4;
|
||||
this.tabConfigure.Text = "Configure Icinga 2";
|
||||
this.tabConfigure.UseVisualStyleBackColor = true;
|
||||
@ -185,6 +186,7 @@
|
||||
//
|
||||
// tabParameters
|
||||
//
|
||||
this.tabParameters.Controls.Add(this.linkLabelDocs);
|
||||
this.tabParameters.Controls.Add(this.groupBox4);
|
||||
this.tabParameters.Controls.Add(this.introduction1);
|
||||
this.tabParameters.Controls.Add(this.groupBox3);
|
||||
@ -270,9 +272,9 @@
|
||||
this.introduction1.AutoSize = true;
|
||||
this.introduction1.Location = new System.Drawing.Point(11, 3);
|
||||
this.introduction1.Name = "introduction1";
|
||||
this.introduction1.Size = new System.Drawing.Size(269, 13);
|
||||
this.introduction1.Size = new System.Drawing.Size(262, 13);
|
||||
this.introduction1.TabIndex = 6;
|
||||
this.introduction1.Text = "Welcome to the Icinga 2 Windows Client Setup Wizard!";
|
||||
this.introduction1.Text = "Welcome to the Icinga Windows Agent Setup Wizard!";
|
||||
//
|
||||
// groupBox3
|
||||
//
|
||||
@ -289,6 +291,18 @@
|
||||
this.groupBox3.TabStop = false;
|
||||
this.groupBox3.Text = "Advanced Options";
|
||||
//
|
||||
// chkDisableConf
|
||||
//
|
||||
this.chkDisableConf.AutoSize = true;
|
||||
this.chkDisableConf.Checked = true;
|
||||
this.chkDisableConf.CheckState = System.Windows.Forms.CheckState.Checked;
|
||||
this.chkDisableConf.Location = new System.Drawing.Point(9, 137);
|
||||
this.chkDisableConf.Name = "chkDisableConf";
|
||||
this.chkDisableConf.Size = new System.Drawing.Size(211, 17);
|
||||
this.chkDisableConf.TabIndex = 9;
|
||||
this.chkDisableConf.Text = "Disable including local \'conf.d\' directory";
|
||||
this.chkDisableConf.UseVisualStyleBackColor = true;
|
||||
//
|
||||
// txtUser
|
||||
//
|
||||
this.txtUser.Enabled = false;
|
||||
@ -341,9 +355,9 @@
|
||||
//
|
||||
// txtTicket
|
||||
//
|
||||
this.txtTicket.Location = new System.Drawing.Point(136, 56);
|
||||
this.txtTicket.Location = new System.Drawing.Point(164, 56);
|
||||
this.txtTicket.Name = "txtTicket";
|
||||
this.txtTicket.Size = new System.Drawing.Size(378, 20);
|
||||
this.txtTicket.Size = new System.Drawing.Size(350, 20);
|
||||
this.txtTicket.TabIndex = 1;
|
||||
//
|
||||
// lblTicket
|
||||
@ -351,15 +365,15 @@
|
||||
this.lblTicket.AutoSize = true;
|
||||
this.lblTicket.Location = new System.Drawing.Point(9, 59);
|
||||
this.lblTicket.Name = "lblTicket";
|
||||
this.lblTicket.Size = new System.Drawing.Size(117, 13);
|
||||
this.lblTicket.Size = new System.Drawing.Size(149, 13);
|
||||
this.lblTicket.TabIndex = 4;
|
||||
this.lblTicket.Text = "Setup Ticket (optional):";
|
||||
this.lblTicket.Text = "CSR Signing Ticket (optional):";
|
||||
//
|
||||
// txtInstanceName
|
||||
//
|
||||
this.txtInstanceName.Location = new System.Drawing.Point(136, 27);
|
||||
this.txtInstanceName.Location = new System.Drawing.Point(164, 27);
|
||||
this.txtInstanceName.Name = "txtInstanceName";
|
||||
this.txtInstanceName.Size = new System.Drawing.Size(378, 20);
|
||||
this.txtInstanceName.Size = new System.Drawing.Size(350, 20);
|
||||
this.txtInstanceName.TabIndex = 0;
|
||||
//
|
||||
// lblInstanceName
|
||||
@ -437,7 +451,7 @@
|
||||
this.groupBox1.Size = new System.Drawing.Size(601, 110);
|
||||
this.groupBox1.TabIndex = 1;
|
||||
this.groupBox1.TabStop = false;
|
||||
this.groupBox1.Text = "Parent master/satellite instance(s) for this client";
|
||||
this.groupBox1.Text = "Parent master/satellite instance(s) for this agent";
|
||||
//
|
||||
// btnEditEndpoint
|
||||
//
|
||||
@ -527,7 +541,7 @@
|
||||
this.tabRetrieveCertificate.Location = new System.Drawing.Point(4, 5);
|
||||
this.tabRetrieveCertificate.Name = "tabRetrieveCertificate";
|
||||
this.tabRetrieveCertificate.Padding = new System.Windows.Forms.Padding(3);
|
||||
this.tabRetrieveCertificate.Size = new System.Drawing.Size(617, 471);
|
||||
this.tabRetrieveCertificate.Size = new System.Drawing.Size(617, 495);
|
||||
this.tabRetrieveCertificate.TabIndex = 7;
|
||||
this.tabRetrieveCertificate.Text = "Checking Certificate";
|
||||
this.tabRetrieveCertificate.UseVisualStyleBackColor = true;
|
||||
@ -559,7 +573,7 @@
|
||||
this.tabVerifyCertificate.Location = new System.Drawing.Point(4, 5);
|
||||
this.tabVerifyCertificate.Name = "tabVerifyCertificate";
|
||||
this.tabVerifyCertificate.Padding = new System.Windows.Forms.Padding(3);
|
||||
this.tabVerifyCertificate.Size = new System.Drawing.Size(617, 471);
|
||||
this.tabVerifyCertificate.Size = new System.Drawing.Size(617, 495);
|
||||
this.tabVerifyCertificate.TabIndex = 6;
|
||||
this.tabVerifyCertificate.Text = "Verify Certificate";
|
||||
this.tabVerifyCertificate.UseVisualStyleBackColor = true;
|
||||
@ -659,7 +673,7 @@
|
||||
this.tabError.Location = new System.Drawing.Point(4, 5);
|
||||
this.tabError.Name = "tabError";
|
||||
this.tabError.Padding = new System.Windows.Forms.Padding(3);
|
||||
this.tabError.Size = new System.Drawing.Size(617, 471);
|
||||
this.tabError.Size = new System.Drawing.Size(617, 495);
|
||||
this.tabError.TabIndex = 8;
|
||||
this.tabError.Text = "Error";
|
||||
this.tabError.UseVisualStyleBackColor = true;
|
||||
@ -686,25 +700,25 @@
|
||||
//
|
||||
// picBanner
|
||||
//
|
||||
this.picBanner.Image = global::Icinga.Properties.Resources.icinga_banner;
|
||||
this.picBanner.Image = ((System.Drawing.Image)(resources.GetObject("picBanner.Image")));
|
||||
this.picBanner.Location = new System.Drawing.Point(0, 0);
|
||||
this.picBanner.Name = "picBanner";
|
||||
this.picBanner.Size = new System.Drawing.Size(625, 77);
|
||||
this.picBanner.TabIndex = 1;
|
||||
this.picBanner.TabStop = false;
|
||||
//
|
||||
// chkDisableConf
|
||||
// linkLabelDocs
|
||||
//
|
||||
this.chkDisableConf.AutoSize = true;
|
||||
this.chkDisableConf.Checked = true;
|
||||
this.chkDisableConf.CheckState = System.Windows.Forms.CheckState.Checked;
|
||||
this.chkDisableConf.Location = new System.Drawing.Point(9, 137);
|
||||
this.chkDisableConf.Name = "chkDisableConf";
|
||||
this.chkDisableConf.Size = new System.Drawing.Size(138, 17);
|
||||
this.chkDisableConf.TabIndex = 9;
|
||||
this.chkDisableConf.Text = "Disable conf.d inclusion";
|
||||
this.chkDisableConf.UseVisualStyleBackColor = true;
|
||||
this.chkDisableConf.CheckedChanged += new System.EventHandler(this.checkBox1_CheckedChanged);
|
||||
this.linkLabelDocs.AutoSize = true;
|
||||
this.linkLabelDocs.LinkColor = System.Drawing.Color.FromArgb(((int)(((byte)(0)))), ((int)(((byte)(149)))), ((int)(((byte)(191)))));
|
||||
this.linkLabelDocs.Location = new System.Drawing.Point(525, 3);
|
||||
this.linkLabelDocs.Name = "linkLabelDocs";
|
||||
this.linkLabelDocs.Size = new System.Drawing.Size(79, 13);
|
||||
this.linkLabelDocs.TabIndex = 10;
|
||||
this.linkLabelDocs.TabStop = true;
|
||||
this.linkLabelDocs.Text = "Documentation";
|
||||
this.linkLabelDocs.VisitedLinkColor = System.Drawing.Color.FromArgb(((int)(((byte)(0)))), ((int)(((byte)(149)))), ((int)(((byte)(191)))));
|
||||
this.linkLabelDocs.LinkClicked += new System.Windows.Forms.LinkLabelLinkClickedEventHandler(this.linkLabelDocs_LinkClicked);
|
||||
//
|
||||
// SetupWizard
|
||||
//
|
||||
@ -722,7 +736,8 @@
|
||||
this.Icon = ((System.Drawing.Icon)(resources.GetObject("$this.Icon")));
|
||||
this.MaximizeBox = false;
|
||||
this.Name = "SetupWizard";
|
||||
this.Text = "Icinga 2 Setup Wizard";
|
||||
this.Text = "Icinga Windows Agent Setup Wizard";
|
||||
this.Load += new System.EventHandler(this.SetupWizard_Load);
|
||||
this.tabFinish.ResumeLayout(false);
|
||||
this.tabFinish.PerformLayout();
|
||||
this.tabConfigure.ResumeLayout(false);
|
||||
@ -810,6 +825,7 @@
|
||||
private System.Windows.Forms.ListView lvwGlobalZones;
|
||||
private System.Windows.Forms.ColumnHeader colGlobalZoneName;
|
||||
private System.Windows.Forms.CheckBox chkDisableConf;
|
||||
private System.Windows.Forms.LinkLabel linkLabelDocs;
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -1,16 +1,11 @@
|
||||
using System;
|
||||
using System.IO;
|
||||
using System.Text;
|
||||
using System.Collections.Generic;
|
||||
using System.ComponentModel;
|
||||
using System.Windows.Forms;
|
||||
using System.Runtime.InteropServices;
|
||||
using System.Security.Cryptography.X509Certificates;
|
||||
using System.Threading;
|
||||
using System.Net.NetworkInformation;
|
||||
using System.IO.Compression;
|
||||
using System.Diagnostics;
|
||||
using System.ServiceProcess;
|
||||
using System.Security.AccessControl;
|
||||
|
||||
namespace Icinga
|
||||
@ -290,7 +285,7 @@ namespace Icinga
|
||||
SetConfigureStatus(100, "Finished.");
|
||||
|
||||
// Override the completed text
|
||||
lblSetupCompleted.Text = "The Icinga 2 Windows client was set up successfully.";
|
||||
lblSetupCompleted.Text = "The Icinga Windows agent was set up successfully.";
|
||||
|
||||
// Add a note for the user for ticket-less signing
|
||||
if (ticket.Length == 0) {
|
||||
@ -572,9 +567,17 @@ namespace Icinga
|
||||
lvwGlobalZones.Items.Add(lvi2);
|
||||
}
|
||||
|
||||
private void checkBox1_CheckedChanged(object sender, EventArgs e)
|
||||
private void SetupWizard_Load(object sender, EventArgs e)
|
||||
{
|
||||
this.MinimumSize = this.Size;
|
||||
this.MaximumSize = this.Size;
|
||||
}
|
||||
|
||||
private void linkLabelDocs_LinkClicked(object sender, LinkLabelLinkClickedEventArgs e)
|
||||
{
|
||||
linkLabelDocs.LinkVisited = true;
|
||||
|
||||
Process.Start("https://icinga.com/docs/icinga2/latest/");
|
||||
}
|
||||
}
|
||||
}
|
||||
|
Before Width: | Height: | Size: 2.3 KiB After Width: | Height: | Size: 42 KiB |
Before Width: | Height: | Size: 766 B After Width: | Height: | Size: 27 KiB |
39
appveyor.yml
@ -1,12 +1,18 @@
|
||||
---
|
||||
version: 2.9.0.dev.{build}
|
||||
version: 2.11.0.dev.{build}
|
||||
|
||||
os: Visual Studio 2017
|
||||
platform: x64
|
||||
|
||||
environment:
|
||||
BITS: 64
|
||||
CMAKE_BUILD_TYPE: Debug
|
||||
CMAKE_GENERATOR: "Visual Studio 15 2017 Win64"
|
||||
BOOST_ROOT: 'C:\Libraries\boost_1_65_1'
|
||||
BOOST_LIBRARYDIR: 'C:\Libraries\boost_1_65_1\lib64-msvc-14.1'
|
||||
# https://www.appveyor.com/docs/windows-images-software/#boost
|
||||
BOOST_ROOT: 'C:\Libraries\boost_1_67_0'
|
||||
BOOST_LIBRARYDIR: 'C:\Libraries\boost_1_67_0\lib64-msvc-14.1'
|
||||
# https://www.appveyor.com/docs/windows-images-software/#tools
|
||||
OPENSSL_ROOT_DIR: 'C:\OpenSSL-v111-Win64'
|
||||
BISON_BINARY: 'C:\ProgramData\chocolatey\lib\winflexbison3\tools\win_bison.exe'
|
||||
FLEX_BINARY: 'C:\ProgramData\chocolatey\lib\winflexbison3\tools\win_flex.exe'
|
||||
|
||||
@ -16,36 +22,35 @@ branches:
|
||||
|
||||
cache:
|
||||
- build -> appveyor.yml
|
||||
- vendor -> tools\win32\download-openssl.ps1
|
||||
- C:\ProgramData\chocolatey\lib\winflexbison3
|
||||
|
||||
install:
|
||||
- ps: |
|
||||
if (-not (Test-Path "vendor\OpenSSL")) {
|
||||
.\tools\win32\download-openssl.ps1
|
||||
if ($LastExitCode -ne 0) { $host.SetShouldExit($LastExitCode) }
|
||||
}
|
||||
- ps: |
|
||||
if (-not (Test-Path "C:\ProgramData\chocolatey\lib\winflexbison3")) {
|
||||
choco install winflexbison3
|
||||
if ($LastExitCode -ne 0) { $host.SetShouldExit($LastExitCode) }
|
||||
& choco install winflexbison3
|
||||
if ($LastExitCode -ne 0) { $host.SetShouldExit($LastExitCode) }
|
||||
}
|
||||
|
||||
# why that env handling, see
|
||||
# https://help.appveyor.com/discussions/questions/18777-how-to-use-vcvars64bat-from-powershell#comment_44999171
|
||||
before_build:
|
||||
- ps: |
|
||||
.\tools\win32\configure.ps1
|
||||
if ($LastExitCode -ne 0) { $host.SetShouldExit($LastExitCode) }
|
||||
& .\tools\win32\load-vsenv.ps1
|
||||
|
||||
& powershell.exe .\tools\win32\configure.ps1
|
||||
if ($LastExitCode -ne 0) { $host.SetShouldExit($LastExitCode) }
|
||||
|
||||
del build\Icinga*.msi
|
||||
|
||||
build_script:
|
||||
- ps: |
|
||||
.\tools\win32\build.ps1
|
||||
if ($LastExitCode -ne 0) { $host.SetShouldExit($LastExitCode) }
|
||||
& powershell.exe .\tools\win32\build.ps1
|
||||
if ($LastExitCode -ne 0) { $host.SetShouldExit($LastExitCode) }
|
||||
|
||||
test_script:
|
||||
- ps: |
|
||||
.\tools\win32\test.ps1
|
||||
if ($LastExitCode -ne 0) { $host.SetShouldExit($LastExitCode) }
|
||||
& powershell.exe .\tools\win32\test.ps1
|
||||
if ($LastExitCode -ne 0) { $host.SetShouldExit($LastExitCode) }
|
||||
|
||||
# Disable until we really need them
|
||||
# https://github.com/Icinga/icinga2/issues/6106
|
||||
|
234
changelog.py
@ -1,234 +0,0 @@
|
||||
#!/usr/bin/env python
|
||||
# -*- coding:utf-8 -*-
|
||||
|
||||
import requests
|
||||
import re
|
||||
import pickle
|
||||
import sys
|
||||
import os
|
||||
from datetime import datetime
|
||||
from collections import defaultdict
|
||||
from collections import OrderedDict
|
||||
|
||||
#################################
|
||||
## Env Config
|
||||
|
||||
try:
|
||||
github_auth_username = os.environ['ICINGA_GITHUB_AUTH_USERNAME']
|
||||
except KeyError:
|
||||
print "ERROR: Environment variable 'ICINGA_GITHUB_AUTH_USERNAME' is not set."
|
||||
sys.exit(1)
|
||||
|
||||
try:
|
||||
github_auth_token = os.environ['ICINGA_GITHUB_AUTH_TOKEN']
|
||||
except:
|
||||
print "ERROR: Environment variable 'ICINGA_GITHUB_AUTH_TOKEN' is not set."
|
||||
sys.exit(1)
|
||||
|
||||
try:
|
||||
project_name = os.environ['ICINGA_GITHUB_PROJECT']
|
||||
except:
|
||||
print "ERROR: Environment variable 'ICINGA_GITHUB_PROJECT' is not set."
|
||||
sys.exit(1)
|
||||
|
||||
#################################
|
||||
## Config
|
||||
|
||||
changelog_file = "CHANGELOG.md" # TODO: config param
|
||||
debug = 1
|
||||
|
||||
# Keep this in sync with GitHub labels.
|
||||
ignored_labels = [
|
||||
"high-priority", "low-priority",
|
||||
"bug", "enhancement",
|
||||
"needs-feedback", "question", "duplicate", "invalid", "wontfix",
|
||||
"backported", "build-fix"
|
||||
]
|
||||
|
||||
# Selectively show and collect specific categories
|
||||
#
|
||||
# (category, list of case sensitive matching labels)
|
||||
# The order is important!
|
||||
# Keep this in sync with GitHub labels.
|
||||
categories = OrderedDict(
|
||||
[
|
||||
("Enhancement", ["enhancement"]),
|
||||
("Bug", ["bug", "crash"]),
|
||||
("ITL", ["ITL"]),
|
||||
("Documentation", ["Documentation"]),
|
||||
("Support", ["code-quality", "Tests", "Packages", "Installation"])
|
||||
]
|
||||
)
|
||||
|
||||
#################################
|
||||
## Helpers
|
||||
|
||||
def write_changelog(line):
|
||||
clfp.write(line + "\n")
|
||||
|
||||
def log(level, msg):
|
||||
if level <= debug:
|
||||
print " " + msg
|
||||
|
||||
def fetch_github_resources(uri, params = {}):
|
||||
resources = []
|
||||
|
||||
url = 'https://api.github.com/repos/' + project_name + uri + "?per_page=100" # 100 is the maximum
|
||||
|
||||
while True:
|
||||
log(2, "Requesting URL: " + url)
|
||||
resp = requests.get(url, auth=(github_auth_username, github_auth_token), params=params)
|
||||
try:
|
||||
resp.raise_for_status()
|
||||
except requests.exceptions.HTTPError as e:
|
||||
raise e
|
||||
|
||||
data = resp.json()
|
||||
|
||||
if len(data) == 0:
|
||||
break
|
||||
|
||||
resources.extend(data)
|
||||
|
||||
# fetch the next page from headers, do not count pages
|
||||
# http://engineering.hackerearth.com/2014/08/21/python-requests-module/
|
||||
if "next" in resp.links:
|
||||
url = resp.links['next']['url']
|
||||
log(2, "Found next link for Github pagination: " + url)
|
||||
else:
|
||||
break # no link found, we are done
|
||||
log(2, "No more pages to fetch, stop.")
|
||||
|
||||
return resources
|
||||
|
||||
def issue_type(issue):
|
||||
issue_labels = [label["name"] for label in issue["labels"]]
|
||||
|
||||
# start with the least important first (e.g. "Support", "Documentation", "Bug", "Enhancement" as order)
|
||||
for category in reversed(categories):
|
||||
labels = categories[category]
|
||||
|
||||
for label in labels:
|
||||
if label in issue_labels:
|
||||
return category
|
||||
|
||||
return "Support"
|
||||
|
||||
def escape_markdown(text):
|
||||
#tmp = text.replace('&', '&').replace('<', '<').replace('>', '>')
|
||||
tmp = text
|
||||
tmp.replace('\\', '\\\\')
|
||||
|
||||
return re.sub("([<>*_()\[\]#])", r"\\\1", tmp)
|
||||
|
||||
def format_labels(issue):
|
||||
labels = filter(lambda label: label not in ignored_labels, [label["name"] for label in issue["labels"]])
|
||||
|
||||
# Mark PRs as custom label
|
||||
if "pull_request" in issue:
|
||||
labels.append("PR")
|
||||
|
||||
if len(labels):
|
||||
return " (" + ", ".join(labels) + ")"
|
||||
else:
|
||||
return ""
|
||||
|
||||
def format_title(title):
|
||||
# Fix encoding
|
||||
try:
|
||||
issue_title = str(title.encode('ascii', 'ignore').encode('utf-8'))
|
||||
except Error:
|
||||
log(1, "Error: Cannot convert " + title + " to UTF-8")
|
||||
|
||||
# Remove dev.icinga.com tag
|
||||
issue_title = re.sub('\[dev\.icinga\.com #\d+\] ', '', issue_title)
|
||||
|
||||
#log(1, "Issue title: " + issue_title + "Type: " + str(type(issue_title)))
|
||||
|
||||
return escape_markdown(issue_title)
|
||||
|
||||
#################################
|
||||
## MAIN
|
||||
|
||||
milestones = {}
|
||||
issues = defaultdict(lambda: defaultdict(list))
|
||||
|
||||
log(1, "Fetching data from GitHub API for project " + project_name)
|
||||
|
||||
try:
|
||||
tickets = fetch_github_resources("/issues", { "state": "all" })
|
||||
except requests.exceptions.HTTPError as e:
|
||||
log(1, "ERROR " + str(e.response.status_code) + ": " + e.response.text)
|
||||
|
||||
sys.exit(1)
|
||||
|
||||
clfp = open(changelog_file, "w+")
|
||||
|
||||
with open('tickets.pickle', 'wb') as fp:
|
||||
pickle.dump(tickets, fp)
|
||||
|
||||
with open('tickets.pickle', 'rb') as fp:
|
||||
cached_issues = pickle.load(fp)
|
||||
|
||||
for issue in cached_issues: #fetch_github_resources("/issues", { "state": "all" }):
|
||||
milestone = issue["milestone"]
|
||||
|
||||
if not milestone:
|
||||
continue
|
||||
|
||||
ms_title = milestone["title"]
|
||||
|
||||
if not re.match('^\d+\.\d+\.\d+$', ms_title):
|
||||
continue
|
||||
|
||||
if ms_title.split(".")[0] != "2":
|
||||
continue
|
||||
|
||||
milestones[ms_title] = milestone
|
||||
|
||||
ms_tickets = issues[ms_title][issue_type(issue)]
|
||||
ms_tickets.append(issue)
|
||||
|
||||
# TODO: Generic header based on project_name
|
||||
write_changelog("# Icinga 2.x CHANGELOG")
|
||||
write_changelog("")
|
||||
|
||||
for milestone in sorted(milestones.values(), key=lambda ms: (ms["due_on"], ms["title"]), reverse=True):
|
||||
if milestone["state"] != "closed":
|
||||
continue
|
||||
|
||||
if milestone["due_on"] == None:
|
||||
print "Milestone", milestone["title"], "does not have a due date."
|
||||
sys.exit(1)
|
||||
|
||||
ms_due_on = datetime.strptime(milestone["due_on"], "%Y-%m-%dT%H:%M:%SZ")
|
||||
|
||||
write_changelog("## %s (%s)" % (milestone["title"], ms_due_on.strftime("%Y-%m-%d")))
|
||||
write_changelog("")
|
||||
|
||||
ms_description = milestone["description"]
|
||||
ms_description = re.sub('\r\n', '\n', ms_description)
|
||||
|
||||
if len(ms_description) > 0:
|
||||
write_changelog("### Notes\n\n" + ms_description + "\n") # Don't escape anything, we take care on Github for valid Markdown
|
||||
|
||||
for category, labels in categories.iteritems():
|
||||
try:
|
||||
ms_issues = issues[milestone["title"]][category]
|
||||
except KeyError:
|
||||
continue
|
||||
|
||||
if len(ms_issues) == 0:
|
||||
continue
|
||||
|
||||
write_changelog("### " + category)
|
||||
write_changelog("")
|
||||
|
||||
for issue in ms_issues:
|
||||
write_changelog("* [#" + str(issue["number"]) + "](https://github.com/" + project_name
|
||||
+ "/issues/" + str(issue["number"]) + ")" + format_labels(issue) + ": " + format_title(issue["title"]))
|
||||
|
||||
write_changelog("")
|
||||
|
||||
clfp.close()
|
||||
log(1, "Finished writing " + changelog_file)
|
@ -1,19 +1,4 @@
|
||||
# Icinga 2
|
||||
# Copyright (C) 2012-2018 Icinga Development Team (https://www.icinga.com/)
|
||||
#
|
||||
# This program is free software; you can redistribute it and/or
|
||||
# modify it under the terms of the GNU General Public License
|
||||
# as published by the Free Software Foundation; either version 2
|
||||
# of the License, or (at your option) any later version.
|
||||
#
|
||||
# This program is distributed in the hope that it will be useful,
|
||||
# but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
# GNU General Public License for more details.
|
||||
#
|
||||
# You should have received a copy of the GNU General Public License
|
||||
# along with this program; if not, write to the Free Software Foundation
|
||||
# Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA.
|
||||
# Icinga 2 | (c) 2012 Icinga GmbH | GPLv2+
|
||||
|
||||
if(WIN32)
|
||||
find_program(CHOCO_BINARY choco)
|
||||
@ -23,7 +8,7 @@ if(WIN32)
|
||||
|
||||
add_custom_target(choco-pkg ALL
|
||||
COMMAND choco pack
|
||||
COMMAND ${CMAKE_COMMAND} -E rename ${CMAKE_CURRENT_BINARY_DIR}/icinga2.${SPEC_VERSION}.nupkg ${CMAKE_CURRENT_BINARY_DIR}/icinga2.nupkg
|
||||
COMMAND ${CMAKE_COMMAND} -E rename ${CMAKE_CURRENT_BINARY_DIR}/icinga2.${ICINGA2_VERSION_SAFE}.nupkg ${CMAKE_CURRENT_BINARY_DIR}/icinga2.nupkg
|
||||
DEPENDS ${CMAKE_CURRENT_BINARY_DIR}/icinga2.nuspec ${CMAKE_CURRENT_BINARY_DIR}/chocolateyInstall.ps1 chocolateyUninstall.ps1
|
||||
)
|
||||
endif()
|
||||
|
@ -1,7 +1,7 @@
|
||||
$packageName = 'icinga2'
|
||||
$installerType = 'msi'
|
||||
$url32 = 'https://packages.icinga.com/windows/Icinga2-v${SPEC_VERSION}-x86.msi'
|
||||
$url64 = 'https://packages.icinga.com/windows/Icinga2-v${SPEC_VERSION}-x86_64.msi'
|
||||
$url32 = 'https://packages.icinga.com/windows/Icinga2-v${ICINGA2_VERSION_SAFE}-x86.msi'
|
||||
$url64 = 'https://packages.icinga.com/windows/Icinga2-v${ICINGA2_VERSION_SAFE}-x86_64.msi'
|
||||
$silentArgs = '/qn /norestart'
|
||||
$validExitCodes = @(0)
|
||||
|
||||
|
@ -6,21 +6,21 @@
|
||||
<!-- Read this before publishing packages to chocolatey.org: https://github.com/chocolatey/chocolatey/wiki/CreatePackages -->
|
||||
<id>icinga2</id>
|
||||
<title>Icinga 2</title>
|
||||
<version>${SPEC_VERSION}</version>
|
||||
<authors>The Icinga Project</authors>
|
||||
<owners>Icinga Development Team</owners>
|
||||
<version>${ICINGA2_VERSION_SAFE}</version>
|
||||
<authors>Icinga GmbH</authors>
|
||||
<owners>Icinga GmbH</owners>
|
||||
<summary>icinga2 - Monitoring Agent for Windows</summary>
|
||||
<description>Icinga 2 is an open source monitoring platform which notifies users about host and service outages.</description>
|
||||
<projectUrl>https://www.icinga.com/</projectUrl>
|
||||
<projectUrl>https://icinga.com/</projectUrl>
|
||||
<tags>icinga2 agent monitoring admin</tags>
|
||||
<licenseUrl>https://www.icinga.com/resources/faq/</licenseUrl>
|
||||
<licenseUrl>https://icinga.com/resources/faq/</licenseUrl>
|
||||
<releaseNotes>https://github.com/Icinga/icinga2/blob/master/ChangeLog</releaseNotes>
|
||||
<docsUrl>https://docs.icinga.com/icinga2/</docsUrl>
|
||||
<bugTrackerUrl>https://github.com/Icinga/icinga2/issues</bugTrackerUrl>
|
||||
<packageSourceUrl>https://github.com/Icinga/icinga2</packageSourceUrl>
|
||||
<projectSourceUrl>https://github.com/Icinga/icinga2</projectSourceUrl>
|
||||
<requireLicenseAcceptance>false</requireLicenseAcceptance>
|
||||
<iconUrl>https://www.icinga.com/wp-content/uploads/2015/05/icinga_icon_128x128.png</iconUrl>
|
||||
<iconUrl>https://icinga.com/wp-content/uploads/2015/05/icinga_icon_128x128.png</iconUrl>
|
||||
</metadata>
|
||||
<files>
|
||||
<file src="${CMAKE_CURRENT_BINARY_DIR}/chocolateyInstall.ps1" target="tools" />
|
||||
|
9
cmake/FindJSON.cmake
Normal file
@ -0,0 +1,9 @@
|
||||
FIND_PATH (JSON_INCLUDE json.hpp HINTS "${PROJECT_SOURCE_DIR}/third-party/nlohmann_json")
|
||||
|
||||
if (JSON_INCLUDE)
|
||||
set(JSON_BuildTests OFF CACHE INTERNAL "")
|
||||
|
||||
message(STATUS "Found JSON: ${JSON_INCLUDE}" )
|
||||
else ()
|
||||
message(FATAL_ERROR "Unable to include json.hpp")
|
||||
endif ()
|
7
cmake/FindUTF8CPP.cmake
Normal file
@ -0,0 +1,7 @@
|
||||
FIND_PATH (UTF8CPP_INCLUDE utf8.h HINTS "${PROJECT_SOURCE_DIR}/third-party/utf8cpp/source")
|
||||
|
||||
if (UTF8CPP_INCLUDE)
|
||||
message(STATUS "Found UTF8CPP: ${UTF8CPP_INCLUDE}" )
|
||||
else ()
|
||||
message(FATAL_ERROR "Unable to include utf8.h")
|
||||
endif ()
|
@ -1,28 +0,0 @@
|
||||
# - Try to find libyajl
|
||||
# Once done this will define
|
||||
# YAJL_FOUND - System has YAJL
|
||||
# YAJL_INCLUDE_DIRS - The YAJL include directories
|
||||
# YAJL_LIBRARIES - The libraries needed to use YAJL
|
||||
# YAJL_DEFINITIONS - Compiler switches required for using YAJL
|
||||
|
||||
find_package(PkgConfig)
|
||||
pkg_check_modules(PC_YAJL QUIET yajl)
|
||||
set(YAJL_DEFINITIONS ${PC_YAJL_CFLAGS_OTHER})
|
||||
|
||||
find_path(YAJL_INCLUDE_DIR yajl/yajl_version.h
|
||||
HINTS ${PC_YAJL_INCLUDEDIR} ${PC_YAJL_INCLUDE_DIRS}
|
||||
PATH_SUFFIXES libyajl)
|
||||
|
||||
find_library(YAJL_LIBRARY NAMES yajl libyajl
|
||||
HINTS ${PC_YAJL_LIBDIR} ${PC_YAJL_LIBRARY_DIRS})
|
||||
|
||||
set(YAJL_LIBRARIES ${YAJL_LIBRARY} )
|
||||
set(YAJL_INCLUDE_DIRS ${YAJL_INCLUDE_DIR})
|
||||
|
||||
include(FindPackageHandleStandardArgs)
|
||||
# handle the QUIETLY and REQUIRED arguments and set YAJL_FOUND to TRUE
|
||||
# if all listed variables are TRUE
|
||||
find_package_handle_standard_args(yajl DEFAULT_MSG
|
||||
YAJL_LIBRARY YAJL_INCLUDE_DIR)
|
||||
|
||||
mark_as_advanced(YAJL_INCLUDE_DIR YAJL_LIBRARY)
|
@ -1,52 +1,47 @@
|
||||
# Icinga 2
|
||||
# Copyright (C) 2012-2018 Icinga Development Team (https://www.icinga.com)
|
||||
# Icinga 2 | (c) 2012 Icinga GmbH | GPLv2+
|
||||
#
|
||||
# This program is free software; you can redistribute it and/or
|
||||
# modify it under the terms of the GNU General Public License
|
||||
# as published by the Free Software Foundation; either version 2
|
||||
# of the License, or (at your option) any later version.
|
||||
# Install $src into directory $dest - usually only used for config files
|
||||
#
|
||||
# This program is distributed in the hope that it will be useful,
|
||||
# but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
# GNU General Public License for more details.
|
||||
# * similar to install() a non absolute path is prefixed with CMAKE_INSTALL_PREFIX on runtime
|
||||
# * in case of CPack path with be prefixed with share/skel/
|
||||
# * DESTDIR is prefixed as well
|
||||
#
|
||||
# You should have received a copy of the GNU General Public License
|
||||
# along with this program; if not, write to the Free Software Foundation
|
||||
# Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA.
|
||||
# also see https://cmake.org/cmake/help/latest/command/install.html
|
||||
|
||||
function(install_if_not_exists src dest)
|
||||
set(real_dest "${dest}")
|
||||
if(NOT IS_ABSOLUTE "${src}")
|
||||
set(src "${CMAKE_CURRENT_SOURCE_DIR}/${src}")
|
||||
endif()
|
||||
|
||||
get_filename_component(src_name "${src}" NAME)
|
||||
get_filename_component(basename_dest "${src}" NAME)
|
||||
string(REPLACE "/" "\\\\" nsis_src "${src}")
|
||||
string(REPLACE "/" "\\\\" nsis_dest_dir "${real_dest}")
|
||||
string(REPLACE "/" "\\\\" nsis_dest "${real_dest}/${basename_dest}")
|
||||
|
||||
install(CODE "
|
||||
if(\"\$ENV{DESTDIR}\" STREQUAL \"\")
|
||||
set(target_dir \${CMAKE_INSTALL_PREFIX})
|
||||
set(dest \"${dest}\")
|
||||
|
||||
if (\"\${CMAKE_INSTALL_PREFIX}\" MATCHES .*/_CPack_Packages/.*)
|
||||
set(dest \"share/skel/\${dest}\")
|
||||
set(force_overwrite TRUE)
|
||||
else()
|
||||
set(target_dir \$ENV{DESTDIR})
|
||||
set(force_overwrite FALSE)
|
||||
endif()
|
||||
if(\${CMAKE_INSTALL_PREFIX} MATCHES .*/_CPack_Packages/.* OR NOT EXISTS \"\$ENV{DESTDIR}\${CMAKE_INSTALL_PREFIX}/\${skel_prefix}${dest}/${src_name}\")
|
||||
message(STATUS \"Installing: \$ENV{DESTDIR}${dest}/${src_name}\")
|
||||
if(\${CMAKE_INSTALL_PREFIX} MATCHES .*/_CPack_Packages/.*)
|
||||
set(skel_prefix \"share/skel/\")
|
||||
else()
|
||||
set(skel_prefix \"\")
|
||||
endif()
|
||||
execute_process(COMMAND \${CMAKE_COMMAND} -E copy \"${src}\"
|
||||
\"\${target_dir}/\${skel_prefix}${dest}/${src_name}\"
|
||||
|
||||
if(NOT IS_ABSOLUTE \"\${dest}\")
|
||||
set(dest \"\${CMAKE_INSTALL_PREFIX}/\${dest}\")
|
||||
endif()
|
||||
|
||||
set(full_dest \"\$ENV{DESTDIR}\${dest}/${src_name}\")
|
||||
|
||||
if(force_overwrite OR NOT EXISTS \"\${full_dest}\")
|
||||
message(STATUS \"Installing: ${src} into \${full_dest}\")
|
||||
|
||||
execute_process(COMMAND \${CMAKE_COMMAND} -E copy \"${src}\" \"\${full_dest}\"
|
||||
RESULT_VARIABLE copy_result
|
||||
ERROR_VARIABLE error_output)
|
||||
if(copy_result)
|
||||
message(FATAL_ERROR \${error_output})
|
||||
endif()
|
||||
else()
|
||||
message(STATUS \"Skipping : \${target_dir}/${dest}/${src_name}\")
|
||||
message(STATUS \"Skipping : \${full_dest}\")
|
||||
endif()
|
||||
")
|
||||
endfunction(install_if_not_exists)
|
||||
|
11
cmake/SetFullDir.cmake
Normal file
@ -0,0 +1,11 @@
|
||||
# Icinga 2 | (c) 2012 Icinga GmbH | GPLv2+
|
||||
#
|
||||
# Ensures a directory is absolute by prefixing CMAKE_INSTALL_PREFIX if it is not
|
||||
# similar to CMAKE_INSTALL_FULL_... https://cmake.org/cmake/help/latest/module/GNUInstallDirs.html
|
||||
function(set_full_dir var path)
|
||||
if(NOT IS_ABSOLUTE "${path}")
|
||||
message(STATUS "Prefixing in ${var} \"${path}\" with ${CMAKE_INSTALL_PREFIX}")
|
||||
set(path "${CMAKE_INSTALL_PREFIX}/${path}")
|
||||
endif()
|
||||
set(${var} "${path}" PARENT_SCOPE)
|
||||
endfunction(set_full_dir)
|
@ -13,17 +13,24 @@
|
||||
|
||||
#cmakedefine ICINGA2_UNITY_BUILD
|
||||
|
||||
#define ICINGA_PREFIX "${CMAKE_INSTALL_PREFIX}"
|
||||
#define ICINGA_SYSCONFDIR "${CMAKE_INSTALL_FULL_SYSCONFDIR}"
|
||||
#define ICINGA_RUNDIR "${ICINGA2_RUNDIR}"
|
||||
#define ICINGA_LOCALSTATEDIR "${CMAKE_INSTALL_FULL_LOCALSTATEDIR}"
|
||||
#define ICINGA_PKGDATADIR "${CMAKE_INSTALL_FULL_DATADIR}/icinga2"
|
||||
#define ICINGA_INCLUDECONFDIR "${CMAKE_INSTALL_FULL_DATADIR}/icinga2/include"
|
||||
#define ICINGA_CONFIGDIR "${ICINGA2_FULL_CONFIGDIR}"
|
||||
#define ICINGA_DATADIR "${ICINGA2_FULL_DATADIR}"
|
||||
#define ICINGA_LOGDIR "${ICINGA2_FULL_LOGDIR}"
|
||||
#define ICINGA_CACHEDIR "${ICINGA2_FULL_CACHEDIR}"
|
||||
#define ICINGA_SPOOLDIR "${ICINGA2_FULL_SPOOLDIR}"
|
||||
#define ICINGA_INITRUNDIR "${ICINGA2_FULL_INITRUNDIR}"
|
||||
#define ICINGA_INCLUDECONFDIR "${ICINGA2_FULL_INCLUDEDIR}"
|
||||
#define ICINGA_USER "${ICINGA2_USER}"
|
||||
#define ICINGA_GROUP "${ICINGA2_GROUP}"
|
||||
#define ICINGA_SYSCONFIGFILE "${ICINGA2_SYSCONFIGFILE}"
|
||||
#define ICINGA_BUILD_HOST_NAME "${ICINGA2_BUILD_HOST_NAME}"
|
||||
#define ICINGA_BUILD_COMPILER_NAME "${ICINGA2_BUILD_COMPILER_NAME}"
|
||||
#define ICINGA_BUILD_COMPILER_VERSION "${ICINGA2_BUILD_COMPILER_VERSION}"
|
||||
|
||||
// Deprecated options?
|
||||
#define ICINGA_PKGDATADIR "${ICINGA2_FULL_PKGDATADIR}"
|
||||
#define ICINGA_PREFIX "${CMAKE_INSTALL_PREFIX}"
|
||||
#define ICINGA_SYSCONFDIR "${CMAKE_INSTALL_FULL_SYSCONFDIR}"
|
||||
#define ICINGA_RUNDIR "${ICINGA2_FULL_RUNDIR}"
|
||||
#define ICINGA_LOCALSTATEDIR "${CMAKE_INSTALL_FULL_LOCALSTATEDIR}"
|
||||
|
||||
#endif /* CONFIG_H */
|
||||
|
@ -1,19 +1 @@
|
||||
/******************************************************************************
|
||||
* Icinga 2 *
|
||||
* Copyright (C) 2012-2018 Icinga Development Team (https://www.icinga.com/) *
|
||||
* *
|
||||
* This program is free software; you can redistribute it and/or *
|
||||
* modify it under the terms of the GNU General Public License *
|
||||
* as published by the Free Software Foundation; either version 2 *
|
||||
* of the License, or (at your option) any later version. *
|
||||
* *
|
||||
* This program is distributed in the hope that it will be useful, *
|
||||
* but WITHOUT ANY WARRANTY; without even the implied warranty of *
|
||||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the *
|
||||
* GNU General Public License for more details. *
|
||||
* *
|
||||
* You should have received a copy of the GNU General Public License *
|
||||
* along with this program; if not, write to the Free Software Foundation *
|
||||
* Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA. *
|
||||
******************************************************************************/
|
||||
|
||||
# Icinga 2 | (c) 2012 Icinga GmbH | GPLv2+
|
||||
|
@ -1,20 +1,5 @@
|
||||
#!/usr/bin/env python
|
||||
# Icinga 2
|
||||
# Copyright (C) 2012-2018 Icinga Development Team (https://www.icinga.com/)
|
||||
#
|
||||
# This program is free software; you can redistribute it and/or
|
||||
# modify it under the terms of the GNU General Public License
|
||||
# as published by the Free Software Foundation; either version 2
|
||||
# of the License, or (at your option) any later version.
|
||||
#
|
||||
# This program is distributed in the hope that it will be useful,
|
||||
# but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
# GNU General Public License for more details.
|
||||
#
|
||||
# You should have received a copy of the GNU General Public License
|
||||
# along with this program; if not, write to the Free Software Foundation
|
||||
# Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA.
|
||||
# Icinga 2 | (c) 2012 Icinga GmbH | GPLv2+
|
||||
|
||||
import sys
|
||||
import subprocess
|
||||
|
@ -1,20 +1,5 @@
|
||||
#!/usr/bin/env python
|
||||
# Icinga 2
|
||||
# Copyright (C) 2012-2018 Icinga Development Team (https://www.icinga.com/)
|
||||
#
|
||||
# This program is free software; you can redistribute it and/or
|
||||
# modify it under the terms of the GNU General Public License
|
||||
# as published by the Free Software Foundation; either version 2
|
||||
# of the License, or (at your option) any later version.
|
||||
#
|
||||
# This program is distributed in the hope that it will be useful,
|
||||
# but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
# GNU General Public License for more details.
|
||||
#
|
||||
# You should have received a copy of the GNU General Public License
|
||||
# along with this program; if not, write to the Free Software Foundation
|
||||
# Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA.
|
||||
# Icinga 2 | (c) 2012 Icinga GmbH | GPLv2+
|
||||
|
||||
import sys
|
||||
import subprocess
|
||||
|
@ -2,24 +2,45 @@
|
||||
|
||||
## What is Icinga 2? <a id="what-is-icinga2"></a>
|
||||
|
||||
Icinga 2 is an open source monitoring system which checks the availability of
|
||||
your network resources, notifies users of outages and generates performance
|
||||
data for reporting.
|
||||
[Icinga](https://icinga.com/products/) is a monitoring system which checks
|
||||
the availability of your network resources, notifies users of outages, and generates
|
||||
performance data for reporting.
|
||||
|
||||
Scalable and extensible, Icinga 2 can monitor large, complex environments across
|
||||
Scalable and extensible, Icinga can monitor large, complex environments across
|
||||
multiple locations.
|
||||
|
||||
## Licensing <a id="licensing"></a>
|
||||
Icinga 2 is the monitoring server and requires [Icinga Web 2](https://icinga.com/products/)
|
||||
on top in your Icinga Stack. The [configuration](https://icinga.com/products/configuration/)
|
||||
can be easily managed with either the [Icinga Director](https://icinga.com/docs/director/latest/),
|
||||
config management tools or plain text within the [Icinga DSL](04-configuration.md#configuration).
|
||||
|
||||
Icinga 2 and the Icinga 2 documentation are licensed under the terms of the GNU
|
||||
General Public License Version 2. You will find a copy of this license in the
|
||||
LICENSE file included in the source package.
|
||||
|
||||
## Support <a id="support"></a>
|
||||

|
||||
|
||||
Check the project website at https://www.icinga.com for status updates. Join the
|
||||
[community channels](https://www.icinga.com/community/get-involved/) for questions
|
||||
or ask an Icinga partner for [professional support](https://www.icinga.com/services/support/).
|
||||
## Start with Icinga <a id="start-icinga"></a>
|
||||
|
||||
* [Installation](02-installation.md#installation)
|
||||
* [Monitoring Basics](03-monitoring-basics.md#monitoring-basics)
|
||||
* [Configuration](04-configuration.md#configuration)
|
||||
* [Distributed Monitoring](06-distributed-monitoring.md#distributed-monitoring)
|
||||
* [Addons, Integrations and Features](13-addons.md#addons)
|
||||
* [Troubleshooting](15-troubleshooting.md#troubleshooting)
|
||||
* [Upgrading](16-upgrading-icinga-2.md#upgrading-icinga-2)
|
||||
|
||||
Once Icinga Server and Web are running in your distributed environment,
|
||||
make sure to check out the many [Icinga modules](https://icinga.com/docs/)
|
||||
for even better monitoring.
|
||||
|
||||
## What's New <a id="whats-new"></a>
|
||||
|
||||
You can follow the development and release milestones on [GitHub](https://github.com/icinga/icinga2/issues).
|
||||
Please follow our release announcements on [icinga.com](https://icinga.com/blog/) too.
|
||||
|
||||
## Support <a id="support"></a>
|
||||
|
||||
Check the project website at [icinga.com](https://icinga.com) for status updates. Join the
|
||||
[community channels](https://icinga.com/community/) for questions
|
||||
or get in touch for [professional support](https://icinga.com/subscription/).
|
||||
|
||||
## Contribute <a id="contribute"></a>
|
||||
|
||||
@ -29,15 +50,21 @@ contribution is appreciated!
|
||||
|
||||
Please continue reading in the [Contributing chapter](https://github.com/Icinga/icinga2/blob/master/CONTRIBUTING.md).
|
||||
|
||||
### Security Issues <a id="security"></a>
|
||||
|
||||
For reporting security issues please visit [this page](https://icinga.com/contact/security/).
|
||||
|
||||
### Icinga 2 Development <a id="development-info"></a>
|
||||
|
||||
The Git repository is located on [GitHub](https://github.com/Icinga/icinga2).
|
||||
|
||||
Icinga 2 is written in C++ and can be built on Linux/Unix and Windows.
|
||||
Read more about development builds in the [INSTALL.md](https://github.com/Icinga/icinga2/blob/master/INSTALL.md)
|
||||
file.
|
||||
Read more about development builds in the [development chapter](21-development.md#development).
|
||||
|
||||
## What's New <a id="whats-new"></a>
|
||||
|
||||
The Icinga 2 Changelog is located [here](https://github.com/Icinga/icinga2/blob/master/CHANGELOG.md).
|
||||
Please follow our release announcements on [icinga.com](https://www.icinga.com/blog/) too.
|
||||
## License <a id="license"></a>
|
||||
|
||||
Icinga 2 and the Icinga 2 documentation are licensed under the terms of the GNU
|
||||
General Public License Version 2. You will find a copy of this license in the
|
||||
LICENSE file included in the source package.
|
||||
|
||||
|
@ -1,7 +1,7 @@
|
||||
# Getting Started <a id="getting-started"></a>
|
||||
# Installation <a id="installation"></a>
|
||||
|
||||
This tutorial is a step-by-step introduction to installing [Icinga 2](02-getting-started.md#setting-up-icinga2)
|
||||
and [Icinga Web 2](02-getting-started.md#setting-up-icingaweb2).
|
||||
This tutorial is a step-by-step introduction to installing [Icinga 2](02-installation.md#setting-up-icinga2)
|
||||
and [Icinga Web 2](02-installation.md#setting-up-icingaweb2).
|
||||
It assumes that you are familiar with the operating system you're using to install Icinga 2.
|
||||
|
||||
In case you are upgrading an existing setup, please ensure to
|
||||
@ -13,13 +13,21 @@ First off you have to install Icinga 2. The preferred way of doing this
|
||||
is to use the official package repositories depending on which operating system
|
||||
and distribution you are running.
|
||||
|
||||
Official repositories ([support matrix](https://icinga.com/subscription/support-details/)):
|
||||
|
||||
Distribution | Repository
|
||||
------------------------|---------------------------
|
||||
Debian | [Icinga Repository](https://packages.icinga.com/debian/)
|
||||
Ubuntu | [Icinga Repository](https://packages.icinga.com/ubuntu/)
|
||||
Raspbian | [Icinga Repository](https://packages.icinga.com/raspbian/). Note that **Raspbian `icinga-buster` is required.**
|
||||
RHEL/CentOS | [Icinga Repository](https://packages.icinga.com/epel/)
|
||||
openSUSE | [Icinga Repository](https://packages.icinga.com/openSUSE/)
|
||||
SLES | [Icinga Repository](https://packages.icinga.com/SUSE/)
|
||||
|
||||
Community repositories:
|
||||
|
||||
Distribution | Repository
|
||||
------------------------|---------------------------
|
||||
Gentoo | [Upstream](https://packages.gentoo.org/package/net-analyzer/icinga2)
|
||||
FreeBSD | [Upstream](https://www.freshports.org/net-mgmt/icinga2)
|
||||
OpenBSD | [Upstream](http://ports.su/net/icinga/core2,-main)
|
||||
@ -29,84 +37,106 @@ and distribution you are running.
|
||||
Packages for distributions other than the ones listed above may also be
|
||||
available. Please contact your distribution packagers.
|
||||
|
||||
> **Note**
|
||||
>
|
||||
> Windows is only supported for agent installations. Please refer
|
||||
> to the [distributed monitoring chapter](06-distributed-monitoring.md#distributed-monitoring-setup-client-windows).
|
||||
|
||||
### Package Repositories <a id="package-repositories"></a>
|
||||
|
||||
You need to add the Icinga repository to your package management configuration.
|
||||
The following commands must be executed with `root` permissions unless noted otherwise.
|
||||
|
||||
#### Debian/Ubuntu/Raspbian Repositories <a id="package-repositories-debian-ubuntu-raspbian"></a>
|
||||
|
||||
Debian:
|
||||
|
||||
```
|
||||
apt-get -y install apt-transport-https
|
||||
apt-get update
|
||||
apt-get -y install apt-transport-https wget gnupg
|
||||
|
||||
wget -O - https://packages.icinga.com/icinga.key | apt-key add -
|
||||
echo 'deb https://packages.icinga.com/debian icinga-stretch main' >/etc/apt/sources.list.d/icinga.list
|
||||
|
||||
DIST=$(awk -F"[)(]+" '/VERSION=/ {print $2}' /etc/os-release); \
|
||||
echo "deb https://packages.icinga.com/debian icinga-${DIST} main" > \
|
||||
/etc/apt/sources.list.d/${DIST}-icinga.list
|
||||
echo "deb-src https://packages.icinga.com/debian icinga-${DIST} main" >> \
|
||||
/etc/apt/sources.list.d/${DIST}-icinga.list
|
||||
|
||||
apt-get update
|
||||
```
|
||||
|
||||
Ubuntu:
|
||||
|
||||
```
|
||||
apt-get -y install apt-transport-https
|
||||
apt-get update
|
||||
apt-get -y install apt-transport-https wget gnupg
|
||||
|
||||
wget -O - https://packages.icinga.com/icinga.key | apt-key add -
|
||||
echo 'deb https://packages.icinga.com/ubuntu icinga-xenial main' >/etc/apt/sources.list.d/icinga.list
|
||||
|
||||
. /etc/os-release; if [ ! -z ${UBUNTU_CODENAME+x} ]; then DIST="${UBUNTU_CODENAME}"; else DIST="$(lsb_release -c| awk '{print $2}')"; fi; \
|
||||
echo "deb https://packages.icinga.com/ubuntu icinga-${DIST} main" > \
|
||||
/etc/apt/sources.list.d/${DIST}-icinga.list
|
||||
echo "deb-src https://packages.icinga.com/ubuntu icinga-${DIST} main" >> \
|
||||
/etc/apt/sources.list.d/${DIST}-icinga.list
|
||||
|
||||
apt-get update
|
||||
```
|
||||
|
||||
Raspbian Buster:
|
||||
|
||||
```
|
||||
apt-get update
|
||||
apt-get -y install apt-transport-https wget gnupg
|
||||
|
||||
wget -O - https://packages.icinga.com/icinga.key | apt-key add -
|
||||
|
||||
DIST=$(awk -F"[)(]+" '/VERSION=/ {print $2}' /etc/os-release); \
|
||||
echo "deb https://packages.icinga.com/raspbian icinga-${DIST} main" > \
|
||||
/etc/apt/sources.list.d/icinga.list
|
||||
echo "deb-src https://packages.icinga.com/raspbian icinga-${DIST} main" >> \
|
||||
/etc/apt/sources.list.d/icinga.list
|
||||
|
||||
apt-get update
|
||||
```
|
||||
|
||||
##### Debian Backports Repository <a id="package-repositories-debian-backports"></a>
|
||||
|
||||
> **Note**:
|
||||
>
|
||||
> This repository is required for Debian Stretch since v2.11.
|
||||
|
||||
Debian Stretch:
|
||||
|
||||
```
|
||||
DIST=$(awk -F"[)(]+" '/VERSION=/ {print $2}' /etc/os-release); \
|
||||
echo "deb https://deb.debian.org/debian ${DIST}-backports main" > \
|
||||
/etc/apt/sources.list.d/${DIST}-backports.list
|
||||
|
||||
apt-get update
|
||||
```
|
||||
|
||||
#### RHEL/CentOS/Fedora Repositories <a id="package-repositories-rhel-centos-fedora"></a>
|
||||
|
||||
RHEL/CentOS 7:
|
||||
|
||||
```
|
||||
yum install https://packages.icinga.com/epel/icinga-rpm-release-7-latest.noarch.rpm
|
||||
```
|
||||
|
||||
RHEL/CentOS 6:
|
||||
RHEL/CentOS 6 x64:
|
||||
|
||||
```
|
||||
yum install https://packages.icinga.com/epel/icinga-rpm-release-6-latest.noarch.rpm
|
||||
```
|
||||
|
||||
Fedora 27:
|
||||
Fedora 29:
|
||||
|
||||
```
|
||||
dnf install https://packages.icinga.com/fedora/icinga-rpm-release-27-latest.noarch.rpm
|
||||
dnf install https://packages.icinga.com/fedora/icinga-rpm-release-29-latest.noarch.rpm
|
||||
```
|
||||
|
||||
Fedora 26:
|
||||
|
||||
```
|
||||
dnf install https://packages.icinga.com/fedora/icinga-rpm-release-26-latest.noarch.rpm
|
||||
```
|
||||
|
||||
SLES 12:
|
||||
|
||||
```
|
||||
zypper ar https://packages.icinga.com/SUSE/ICINGA-release.repo
|
||||
zypper ref
|
||||
```
|
||||
|
||||
SLES 11:
|
||||
|
||||
```
|
||||
zypper ar https://packages.icinga.com/SUSE/ICINGA-release-11.repo
|
||||
zypper ref
|
||||
```
|
||||
|
||||
openSUSE:
|
||||
|
||||
```
|
||||
zypper ar https://packages.icinga.com/openSUSE/ICINGA-release.repo
|
||||
zypper ref
|
||||
```
|
||||
|
||||
Alpine Linux:
|
||||
|
||||
```
|
||||
echo "http://dl-cdn.alpinelinux.org/alpine/edge/community" >> /etc/apk/repositories
|
||||
apk update
|
||||
```
|
||||
|
||||
#### RHEL/CentOS EPEL Repository <a id="package-repositories-rhel-epel"></a>
|
||||
##### RHEL/CentOS EPEL Repository <a id="package-repositories-rhel-epel"></a>
|
||||
|
||||
The packages for RHEL/CentOS depend on other packages which are distributed
|
||||
as part of the [EPEL repository](https://fedoraproject.org/wiki/EPEL).
|
||||
@ -126,17 +156,38 @@ subscription-manager repos --enable rhel-7-server-optional-rpms
|
||||
subscription-manager repos --enable rhel-6-server-optional-rpms
|
||||
```
|
||||
|
||||
#### SLES Security Repository <a id="package-repositories-sles-security"></a>
|
||||
#### SLES/OpenSUSE Repositories <a id="package-repositories-sles-opensuse"></a>
|
||||
|
||||
The packages for SLES 11 depend on the `openssl1` package which is distributed
|
||||
as part of the [SLES 11 Security Module](https://www.suse.com/communities/conversations/introducing-the-suse-linux-enterprise-11-security-module/).
|
||||
The release repository also provides the required Boost 1.66+ packages
|
||||
since v2.11.
|
||||
|
||||
#### SLES 12 SDK <a id="package-sles-sdk"></a>
|
||||
SLES 15/12:
|
||||
|
||||
Icinga 2 requires the `libboost_chrono1_54_0` package from the `SLES 12 SDK` repository. Refer to the SUSE Enterprise
|
||||
Linux documentation for further information.
|
||||
```
|
||||
rpm --import https://packages.icinga.com/icinga.key
|
||||
|
||||
#### Alpine Linux Notes <a id="package-repositories-alpine-notes"></a>
|
||||
zypper ar https://packages.icinga.com/SUSE/ICINGA-release.repo
|
||||
zypper ref
|
||||
```
|
||||
|
||||
openSUSE:
|
||||
|
||||
```
|
||||
rpm --import https://packages.icinga.com/icinga.key
|
||||
|
||||
zypper ar https://packages.icinga.com/openSUSE/ICINGA-release.repo
|
||||
zypper ref
|
||||
```
|
||||
|
||||
#### Alpine Linux Repositories <a id="package-repositories-alpine"></a>
|
||||
|
||||
Alpine Linux:
|
||||
|
||||
```
|
||||
echo "http://dl-cdn.alpinelinux.org/alpine/edge/main" >> /etc/apk/repositories
|
||||
echo "http://dl-cdn.alpinelinux.org/alpine/edge/community" >> /etc/apk/repositories
|
||||
apk update
|
||||
```
|
||||
|
||||
The example provided assumes that you are running Alpine edge, which is the -dev branch and is a rolling release.
|
||||
If you are using a stable version please "pin" the edge repository on the latest Icinga 2 package version.
|
||||
@ -155,14 +206,6 @@ Debian/Ubuntu:
|
||||
apt-get install icinga2
|
||||
```
|
||||
|
||||
RHEL/CentOS 6:
|
||||
|
||||
```
|
||||
yum install icinga2
|
||||
chkconfig icinga2 on
|
||||
service icinga2 start
|
||||
```
|
||||
|
||||
RHEL/CentOS 7 and Fedora:
|
||||
|
||||
```
|
||||
@ -171,6 +214,14 @@ systemctl enable icinga2
|
||||
systemctl start icinga2
|
||||
```
|
||||
|
||||
RHEL/CentOS 6:
|
||||
|
||||
```
|
||||
yum install icinga2
|
||||
chkconfig icinga2 on
|
||||
service icinga2 start
|
||||
```
|
||||
|
||||
SLES/openSUSE:
|
||||
|
||||
```
|
||||
@ -215,8 +266,8 @@ By default Icinga 2 uses the following files and directories:
|
||||
Path | Description
|
||||
----------------------------------------------|------------------------------------
|
||||
/etc/icinga2 | Contains Icinga 2 configuration files.
|
||||
/usr/lib/systemd/system/icinga2.service | The Icinga 2 Systemd service file on systems using Systemd.
|
||||
/etc/systemd/system/icinga2.service.d/limits.conf | On distributions with Systemd >227, additional service limits are required.
|
||||
/usr/lib/systemd/system/icinga2.service | The Icinga 2 systemd service file on systems using systemd.
|
||||
/etc/systemd/system/icinga2.service.d/limits.conf | On distributions with systemd >227, additional service limits are required.
|
||||
/etc/init.d/icinga2 | The Icinga 2 init script on systems using SysVinit or OpenRC.
|
||||
/usr/sbin/icinga2 | Shell wrapper for the Icinga 2 binary.
|
||||
/usr/lib\*/icinga2 | Libraries and the Icinga 2 binary (use `find /usr -type f -name icinga2` to locate the binary path).
|
||||
@ -255,7 +306,7 @@ Without plugins Icinga 2 does not know how to check external services. The
|
||||
an extensive set of plugins which can be used with Icinga 2 to check whether
|
||||
services are working properly.
|
||||
|
||||
These plugins are required to make the [example configuration](04-configuring-icinga-2.md#configuring-icinga2-overview)
|
||||
These plugins are required to make the [example configuration](04-configuration.md#configuring-icinga2-overview)
|
||||
work out-of-the-box.
|
||||
|
||||
For your convenience here is a list of package names for some of the more
|
||||
@ -268,7 +319,7 @@ SLES/OpenSUSE | monitoring-plugins | [server:monitoring](https://build.
|
||||
Debian/Ubuntu | monitoring-plugins | - | /usr/lib/nagios/plugins
|
||||
FreeBSD | monitoring-plugins | - | /usr/local/libexec/nagios
|
||||
Alpine Linux | monitoring-plugins | - | /usr/lib/monitoring-plugins
|
||||
OS X | nagios-plugins | [MacPorts](https://www.macports.org), [Homebrew](https://brew.sh) | /opt/local/libexec or /usr/local/sbin
|
||||
macOS | monitoring-plugins | [MacPorts](https://www.macports.org), [Homebrew](https://brew.sh) | /opt/local/libexec or /usr/local/sbin
|
||||
|
||||
The recommended way of installing these standard plugins is to use your
|
||||
distribution's package manager.
|
||||
@ -286,9 +337,7 @@ yum install nagios-plugins-all
|
||||
```
|
||||
|
||||
The packages for RHEL/CentOS depend on other packages which are distributed
|
||||
as part of the [EPEL repository](https://fedoraproject.org/wiki/EPEL). Please
|
||||
make sure to enable this repository by following
|
||||
[these instructions](https://fedoraproject.org/wiki/EPEL#How_can_I_use_these_extra_packages.3F).
|
||||
as part of the [EPEL repository](02-installation.md#package-repositories-rhel-epel).
|
||||
|
||||
Fedora:
|
||||
|
||||
@ -322,7 +371,7 @@ Note: For Alpine you don't need to explicitly add the `monitoring-plugins` packa
|
||||
`icinga2` and is pulled automatically.
|
||||
|
||||
Depending on which directory your plugins are installed into you may need to
|
||||
update the global `PluginDir` constant in your [Icinga 2 configuration](04-configuring-icinga-2.md#constants-conf).
|
||||
update the global `PluginDir` constant in your [Icinga 2 configuration](04-configuration.md#constants-conf).
|
||||
This constant is used by the check command definitions contained in the Icinga Template Library
|
||||
to determine where to find the plugin binaries.
|
||||
|
||||
@ -335,10 +384,10 @@ to determine where to find the plugin binaries.
|
||||
|
||||
### Systemd Service <a id="systemd-service"></a>
|
||||
|
||||
Some distributions (e.g. Fedora, openSUSE and RHEL/CentOS 7) use Systemd. The
|
||||
Icinga 2 packages automatically install the necessary Systemd unit files.
|
||||
Some distributions (e.g. Fedora, openSUSE and RHEL/CentOS 7) use systemd. The
|
||||
Icinga 2 packages automatically install the necessary systemd unit files.
|
||||
|
||||
The Icinga 2 Systemd service can be (re-)started, reloaded, stopped and also
|
||||
The Icinga 2 systemd service can be (re-)started, reloaded, stopped and also
|
||||
queried for its current status.
|
||||
|
||||
```
|
||||
@ -387,7 +436,7 @@ If you're stuck with configuration errors, you can manually invoke the
|
||||
|
||||
> **Tip**
|
||||
>
|
||||
> If you are running into fork errors with Systemd enabled distributions,
|
||||
> If you are running into fork errors with systemd enabled distributions,
|
||||
> please check the [troubleshooting chapter](15-troubleshooting.md#check-fork-errors).
|
||||
|
||||
### Init Script <a id="init-script"></a>
|
||||
@ -500,7 +549,7 @@ Test it:
|
||||
# vim /etc/icinga2/conf.d/templates.conf
|
||||
```
|
||||
|
||||

|
||||

|
||||
|
||||
|
||||
### Configuration Syntax Highlighting using Nano <a id="configuration-syntax-highlighting-nano"></a>
|
||||
@ -544,7 +593,7 @@ Test it:
|
||||
$ nano /etc/icinga2/conf.d/templates.conf
|
||||
```
|
||||
|
||||

|
||||

|
||||
|
||||
## Setting up Icinga Web 2 <a id="setting-up-icingaweb2"></a>
|
||||
|
||||
@ -554,8 +603,8 @@ This chapter explains how to set up Icinga Web 2.
|
||||
The DB IDO (Database Icinga Data Output) feature for Icinga 2 take care of
|
||||
exporting all configuration and status information into a database.
|
||||
|
||||
Please choose whether to install [MySQL](02-getting-started.md#configuring-db-ido-mysql) or
|
||||
[PostgreSQL](02-getting-started.md#configuring-db-ido-postgresql).
|
||||
Please choose whether to install [MySQL](02-installation.md#configuring-db-ido-mysql) or
|
||||
[PostgreSQL](02-installation.md#configuring-db-ido-postgresql).
|
||||
|
||||
### Configuring DB IDO MySQL <a id="configuring-db-ido-mysql"></a>
|
||||
|
||||
@ -578,16 +627,6 @@ systemctl start mariadb
|
||||
mysql_secure_installation
|
||||
```
|
||||
|
||||
RHEL/CentOS 6:
|
||||
|
||||
```
|
||||
yum install mysql-server mysql
|
||||
chkconfig mysqld on
|
||||
service mysqld start
|
||||
|
||||
mysql_secure_installation
|
||||
```
|
||||
|
||||
SUSE:
|
||||
|
||||
```
|
||||
@ -665,7 +704,7 @@ GRANT SELECT, INSERT, UPDATE, DELETE, DROP, CREATE VIEW, INDEX, EXECUTE ON icing
|
||||
quit
|
||||
```
|
||||
|
||||

|
||||

|
||||
|
||||
After creating the database you can import the Icinga 2 IDO schema using the
|
||||
following command. Enter the root password into the prompt when asked.
|
||||
@ -705,7 +744,7 @@ Alpine Linux:
|
||||
rc-service icinga2 restart
|
||||
```
|
||||
|
||||
Continue with the [webserver setup](02-getting-started.md#icinga2-user-interface-webserver).
|
||||
Continue with the [webserver setup](02-installation.md#icinga2-user-interface-webserver).
|
||||
|
||||
### Configuring DB IDO PostgreSQL <a id="configuring-db-ido-postgresql"></a>
|
||||
|
||||
@ -717,15 +756,6 @@ Debian/Ubuntu:
|
||||
apt-get install postgresql
|
||||
```
|
||||
|
||||
RHEL/CentOS 6:
|
||||
|
||||
```
|
||||
yum install postgresql-server postgresql
|
||||
chkconfig postgresql on
|
||||
service postgresql initdb
|
||||
service postgresql start
|
||||
```
|
||||
|
||||
RHEL/CentOS 7:
|
||||
|
||||
```
|
||||
@ -846,7 +876,7 @@ export PGPASSWORD=icinga
|
||||
psql -U icinga -d icinga < /usr/share/icinga2-ido-pgsql/schema/pgsql.sql
|
||||
```
|
||||
|
||||

|
||||

|
||||
|
||||
|
||||
#### Enabling the IDO PostgreSQL module <a id="enabling-ido-postgresql"></a>
|
||||
@ -880,7 +910,7 @@ Alpine Linux:
|
||||
rc-service icinga2 restart
|
||||
```
|
||||
|
||||
Continue with the [webserver setup](02-getting-started.md#icinga2-user-interface-webserver).
|
||||
Continue with the [webserver setup](02-installation.md#icinga2-user-interface-webserver).
|
||||
|
||||
### Webserver <a id="icinga2-user-interface-webserver"></a>
|
||||
|
||||
@ -902,19 +932,11 @@ systemctl enable httpd
|
||||
systemctl start httpd
|
||||
```
|
||||
|
||||
RHEL/CentOS 6:
|
||||
|
||||
```
|
||||
yum install httpd
|
||||
chkconfig httpd on
|
||||
service httpd start
|
||||
```
|
||||
|
||||
SUSE:
|
||||
|
||||
```
|
||||
zypper install apache2
|
||||
chkconfig on
|
||||
chkconfig apache2 on
|
||||
service apache2 start
|
||||
```
|
||||
|
||||
@ -1003,10 +1025,10 @@ rc-service icinga2 restart
|
||||
|
||||
### Installing Icinga Web 2 <a id="installing-icingaweb2"></a>
|
||||
|
||||
Please consult the [installation documentation](https://www.icinga.com/docs/icingaweb2/latest/doc/02-Installation/)
|
||||
Please consult the [installation documentation](https://icinga.com/docs/icingaweb2/latest/doc/02-Installation/)
|
||||
for further instructions on how to install Icinga Web 2.
|
||||
|
||||
The Icinga 2 API can be defined as [command transport](https://www.icinga.com/docs/icingaweb2/latest/modules/monitoring/doc/05-Command-Transports/)
|
||||
The Icinga 2 API can be defined as [command transport](https://icinga.com/docs/icingaweb2/latest/modules/monitoring/doc/05-Command-Transports/)
|
||||
in Icinga Web 2 >= 2.4.
|
||||
|
||||
## Addons <a id="install-addons"></a>
|
@ -1,8 +1,18 @@
|
||||
# Configuring Icinga 2: First Steps <a id="configuring-icinga2-first-steps"></a>
|
||||
# Configuration <a id="configuration"></a>
|
||||
|
||||
This chapter provides an introduction into best practices for your Icinga 2 configuration.
|
||||
The configuration files which are automatically created when installing the Icinga 2 packages
|
||||
are a good way to start with Icinga 2.
|
||||
The Icinga [configuration](https://icinga.com/products/configuration/)
|
||||
can be easily managed with either the [Icinga Director](https://icinga.com/docs/director/latest/),
|
||||
config management tools or plain text within the [Icinga DSL](04-configuration.md#configuration).
|
||||
|
||||
Before looking into web based configuration or any sort of automation,
|
||||
we recommend to start with the configuration files and fully understand
|
||||
the possibilities of the Icinga DSL (Domain Specific Language).
|
||||
|
||||
The package installation provides example configuration which already
|
||||
monitors the local Icinga server. You can view the monitoring details
|
||||
in Icinga Web.
|
||||
|
||||

|
||||
|
||||
The [Language Reference](17-language-reference.md#language-reference) chapter explains details
|
||||
on value types (string, number, dictionaries, etc.) and the general configuration syntax.
|
||||
@ -15,8 +25,9 @@ decide for a possible strategy.
|
||||
|
||||
There are many ways of creating Icinga 2 configuration objects:
|
||||
|
||||
* The [Icinga Director](https://icinga.com/docs/director/latest/) as web based and/or automation configuration interface
|
||||
* [Monitoring Automation with Icinga - The Director](https://icinga.com/2019/04/23/monitoring-automation-with-icinga-the-director/)
|
||||
* Manually with your preferred editor, for example vi(m), nano, notepad, etc.
|
||||
* A configuration tool for Icinga 2 e.g. the [Icinga Director](https://github.com/Icinga/icingaweb2-module-director)
|
||||
* Generated by a [configuration management tool](13-addons.md#configuration-tools) such as Puppet, Chef, Ansible, etc.
|
||||
* A custom exporter script from your CMDB or inventory tool
|
||||
* etc.
|
||||
@ -36,7 +47,7 @@ host and service basis.
|
||||
Then you should look for the object specific configuration setting `host_name` etc. accordingly.
|
||||
|
||||
You decide on the "best" layout for configuration files and directories. Ensure that
|
||||
the [icinga2.conf](04-configuring-icinga-2.md#icinga2-conf) configuration file includes them.
|
||||
the [icinga2.conf](04-configuration.md#icinga2-conf) configuration file includes them.
|
||||
|
||||
Consider these ideas:
|
||||
|
||||
@ -48,12 +59,12 @@ Consider these ideas:
|
||||
|
||||
In either way of choosing the right strategy you should additionally check the following:
|
||||
|
||||
* Are there any specific attributes describing the host/service you could set as `vars` custom attributes?
|
||||
* Are there any specific attributes describing the host/service you could set as `vars` custom variables?
|
||||
You can later use them for applying assign/ignore rules, or export them into external interfaces.
|
||||
* Put hosts into hostgroups, services into servicegroups and use these attributes for your apply rules.
|
||||
* Use templates to store generic attributes for your objects and apply rules making your configuration more readable.
|
||||
Details can be found in the [using templates](03-monitoring-basics.md#object-inheritance-using-templates) chapter.
|
||||
* Apply rules may overlap. Keep a central place (for example, [services.conf](04-configuring-icinga-2.md#services-conf) or [notifications.conf](04-configuring-icinga-2.md#notifications-conf)) storing
|
||||
* Apply rules may overlap. Keep a central place (for example, [services.conf](04-configuration.md#services-conf) or [notifications.conf](04-configuration.md#notifications-conf)) storing
|
||||
the configuration instead of defining apply rules deep in your configuration tree.
|
||||
* Every plugin used as check, notification or event command requires a `Command` definition.
|
||||
Further details can be looked up in the [check commands](03-monitoring-basics.md#check-commands) chapter.
|
||||
@ -66,7 +77,7 @@ There is a detailed chapter on [distributed monitoring scenarios](06-distributed
|
||||
Please ensure to have read the [introduction](06-distributed-monitoring.md#distributed-monitoring) at first glance.
|
||||
|
||||
If you happen to have further questions, do not hesitate to join the
|
||||
[community support channels](https://www.icinga.com/community/get-involved/)
|
||||
[community forum](https://community.icinga.com)
|
||||
and ask community members for their experience and best practices.
|
||||
|
||||
## Your Configuration <a id="your-configuration"></a>
|
||||
@ -77,14 +88,16 @@ If you prefer to organize your own local object tree, you can also remove
|
||||
Create a new configuration directory, e.g. `objects.d` and include it
|
||||
in your icinga2.conf file.
|
||||
|
||||
[root@icinga2-master1.localdomain /]# mkdir -p /etc/icinga2/objects.d
|
||||
```
|
||||
[root@icinga2-master1.localdomain /]# mkdir -p /etc/icinga2/objects.d
|
||||
|
||||
[root@icinga2-master1.localdomain /]# vim /etc/icinga2/icinga2.conf
|
||||
[root@icinga2-master1.localdomain /]# vim /etc/icinga2/icinga2.conf
|
||||
|
||||
/* Local object configuration on our master instance. */
|
||||
include_recursive "objects.d"
|
||||
/* Local object configuration on our master instance. */
|
||||
include_recursive "objects.d"
|
||||
```
|
||||
|
||||
This approach is used by the [Icinga 2 Puppet module](https://github.com/Icinga/puppet-icinga2).
|
||||
This approach is used by the [Icinga 2 Puppet module](https://icinga.com/products/integrations/puppet/).
|
||||
|
||||
If you plan to setup a distributed setup with HA clusters and clients, please refer to [this chapter](#06-distributed-monitoring.md#distributed-monitoring-top-down)
|
||||
for examples with `zones.d` as configuration directory.
|
||||
@ -97,76 +110,84 @@ An example configuration file is installed for you in `/etc/icinga2/icinga2.conf
|
||||
|
||||
Here's a brief description of the example configuration:
|
||||
|
||||
/**
|
||||
* Icinga 2 configuration file
|
||||
* -- this is where you define settings for the Icinga application including
|
||||
* which hosts/services to check.
|
||||
*
|
||||
* For an overview of all available configuration options please refer
|
||||
* to the documentation that is distributed as part of Icinga 2.
|
||||
*/
|
||||
```
|
||||
/**
|
||||
* Icinga 2 configuration file
|
||||
* -- this is where you define settings for the Icinga application including
|
||||
* which hosts/services to check.
|
||||
*
|
||||
* For an overview of all available configuration options please refer
|
||||
* to the documentation that is distributed as part of Icinga 2.
|
||||
*/
|
||||
```
|
||||
|
||||
Icinga 2 supports [C/C++-style comments](17-language-reference.md#comments).
|
||||
|
||||
/**
|
||||
* The constants.conf defines global constants.
|
||||
*/
|
||||
include "constants.conf"
|
||||
/**
|
||||
* The constants.conf defines global constants.
|
||||
*/
|
||||
include "constants.conf"
|
||||
|
||||
The `include` directive can be used to include other files.
|
||||
|
||||
/**
|
||||
* The zones.conf defines zones for a cluster setup.
|
||||
* Not required for single instance setups.
|
||||
*/
|
||||
include "zones.conf"
|
||||
```
|
||||
/**
|
||||
* The zones.conf defines zones for a cluster setup.
|
||||
* Not required for single instance setups.
|
||||
*/
|
||||
include "zones.conf"
|
||||
```
|
||||
|
||||
The [Icinga Template Library](10-icinga-template-library.md#icinga-template-library) provides a set of common templates
|
||||
and [CheckCommand](03-monitoring-basics.md#check-commands) definitions.
|
||||
|
||||
/**
|
||||
* The Icinga Template Library (ITL) provides a number of useful templates
|
||||
* and command definitions.
|
||||
* Common monitoring plugin command definitions are included separately.
|
||||
*/
|
||||
include <itl>
|
||||
include <plugins>
|
||||
include <plugins-contrib>
|
||||
include <manubulon>
|
||||
```
|
||||
/**
|
||||
* The Icinga Template Library (ITL) provides a number of useful templates
|
||||
* and command definitions.
|
||||
* Common monitoring plugin command definitions are included separately.
|
||||
*/
|
||||
include <itl>
|
||||
include <plugins>
|
||||
include <plugins-contrib>
|
||||
include <manubulon>
|
||||
|
||||
/**
|
||||
* This includes the Icinga 2 Windows plugins. These command definitions
|
||||
* are required on a master node when a client is used as command endpoint.
|
||||
*/
|
||||
include <windows-plugins>
|
||||
/**
|
||||
* This includes the Icinga 2 Windows plugins. These command definitions
|
||||
* are required on a master node when a client is used as command endpoint.
|
||||
*/
|
||||
include <windows-plugins>
|
||||
|
||||
/**
|
||||
* This includes the NSClient++ check commands. These command definitions
|
||||
* are required on a master node when a client is used as command endpoint.
|
||||
*/
|
||||
include <nscp>
|
||||
/**
|
||||
* This includes the NSClient++ check commands. These command definitions
|
||||
* are required on a master node when a client is used as command endpoint.
|
||||
*/
|
||||
include <nscp>
|
||||
|
||||
/**
|
||||
* The features-available directory contains a number of configuration
|
||||
* files for features which can be enabled and disabled using the
|
||||
* icinga2 feature enable / icinga2 feature disable CLI commands.
|
||||
* These commands work by creating and removing symbolic links in
|
||||
* the features-enabled directory.
|
||||
*/
|
||||
include "features-enabled/*.conf"
|
||||
/**
|
||||
* The features-available directory contains a number of configuration
|
||||
* files for features which can be enabled and disabled using the
|
||||
* icinga2 feature enable / icinga2 feature disable CLI commands.
|
||||
* These commands work by creating and removing symbolic links in
|
||||
* the features-enabled directory.
|
||||
*/
|
||||
include "features-enabled/*.conf"
|
||||
```
|
||||
|
||||
This `include` directive takes care of including the configuration files for all
|
||||
the features which have been enabled with `icinga2 feature enable`. See
|
||||
[Enabling/Disabling Features](11-cli-commands.md#enable-features) for more details.
|
||||
|
||||
/**
|
||||
* Although in theory you could define all your objects in this file
|
||||
* the preferred way is to create separate directories and files in the conf.d
|
||||
* directory. Each of these files must have the file extension ".conf".
|
||||
*/
|
||||
include_recursive "conf.d"
|
||||
```
|
||||
/**
|
||||
* Although in theory you could define all your objects in this file
|
||||
* the preferred way is to create separate directories and files in the conf.d
|
||||
* directory. Each of these files must have the file extension ".conf".
|
||||
*/
|
||||
include_recursive "conf.d"
|
||||
```
|
||||
|
||||
You can put your own configuration files in the [conf.d](04-configuring-icinga-2.md#conf-d) directory. This
|
||||
You can put your own configuration files in the [conf.d](04-configuration.md#conf-d) directory. This
|
||||
directive makes sure that all of your own configuration files are included.
|
||||
|
||||
### constants.conf <a id="constants-conf"></a>
|
||||
@ -175,7 +196,7 @@ The `constants.conf` configuration file can be used to define global constants.
|
||||
|
||||
By default, you need to make sure to set these constants:
|
||||
|
||||
* The `PluginDir` constant must be set to the path where the [Monitoring Project plugins](02-getting-started.md#setting-up-check-plugins) are installed.
|
||||
* The `PluginDir` constant must be set to the path where the [Monitoring Project plugins](02-installation.md#setting-up-check-plugins) are installed.
|
||||
This constant is used by a number of
|
||||
[built-in check command definitions](10-icinga-template-library.md#icinga-template-library).
|
||||
* The `NodeName` constant defines your local node name. Should be set to FQDN which is the default
|
||||
@ -184,27 +205,30 @@ cluster setup.
|
||||
|
||||
Example:
|
||||
|
||||
/* The directory which contains the plugins from the Monitoring Plugins project. */
|
||||
const PluginDir = "/usr/lib64/nagios/plugins"
|
||||
```
|
||||
/* The directory which contains the plugins from the Monitoring Plugins project. */
|
||||
const PluginDir = "/usr/lib64/nagios/plugins"
|
||||
|
||||
/* The directory which contains the Manubulon plugins.
|
||||
* Check the documentation, chapter "SNMP Manubulon Plugin Check Commands", for details.
|
||||
*/
|
||||
const ManubulonPluginDir = "/usr/lib64/nagios/plugins"
|
||||
/* The directory which contains the Manubulon plugins.
|
||||
* Check the documentation, chapter "SNMP Manubulon Plugin Check Commands", for details.
|
||||
*/
|
||||
const ManubulonPluginDir = "/usr/lib64/nagios/plugins"
|
||||
|
||||
/* Our local instance name. By default this is the server's hostname as returned by `hostname --fqdn`.
|
||||
* This should be the common name from the API certificate.
|
||||
*/
|
||||
//const NodeName = "localhost"
|
||||
/* Our local instance name. By default this is the server's hostname as returned by `hostname --fqdn`.
|
||||
* This should be the common name from the API certificate.
|
||||
*/
|
||||
//const NodeName = "localhost"
|
||||
|
||||
/* Our local zone name. */
|
||||
const ZoneName = NodeName
|
||||
/* Our local zone name. */
|
||||
const ZoneName = NodeName
|
||||
|
||||
/* Secret key for remote node tickets */
|
||||
const TicketSalt = ""
|
||||
/* Secret key for remote node tickets */
|
||||
const TicketSalt = ""
|
||||
```
|
||||
|
||||
The `ZoneName` and `TicketSalt` constants are required for remote client
|
||||
and distributed setups only.
|
||||
and distributed setups. The `node setup/wizard` CLI tools take care of
|
||||
populating these values.
|
||||
|
||||
### zones.conf <a id="zones-conf"></a>
|
||||
|
||||
@ -212,7 +236,7 @@ This file can be used to specify the required [Zone](09-object-types.md#objectty
|
||||
and [Endpoint](09-object-types.md#objecttype-endpoint) configuration object for
|
||||
[distributed monitoring](06-distributed-monitoring.md#distributed-monitoring).
|
||||
|
||||
By default the `NodeName` and `ZoneName` [constants](04-configuring-icinga-2.md#constants-conf) will be used.
|
||||
By default the `NodeName` and `ZoneName` [constants](04-configuration.md#constants-conf) will be used.
|
||||
|
||||
It also contains several [global zones](06-distributed-monitoring.md#distributed-monitoring-global-zone-config-sync)
|
||||
for distributed monitoring environments.
|
||||
@ -225,38 +249,38 @@ for your `Zone` and `Endpoint` object names.
|
||||
|
||||
This directory contains **example configuration** which should help you get started
|
||||
with monitoring the local host and its services. It is included in the
|
||||
[icinga2.conf](04-configuring-icinga-2.md#icinga2-conf) configuration file by default.
|
||||
[icinga2.conf](04-configuration.md#icinga2-conf) configuration file by default.
|
||||
|
||||
It can be used as reference example for your own configuration strategy.
|
||||
Just keep in mind to include the main directories in the
|
||||
[icinga2.conf](04-configuring-icinga-2.md#icinga2-conf) file.
|
||||
[icinga2.conf](04-configuration.md#icinga2-conf) file.
|
||||
|
||||
> **Note**
|
||||
>
|
||||
> You can remove the include directive in [icinga2.conf](04-configuring-icinga-2.md#icinga2-conf)
|
||||
> You can remove the include directive in [icinga2.conf](04-configuration.md#icinga2-conf)
|
||||
> if you prefer your own way of deploying Icinga 2 configuration.
|
||||
|
||||
Further details on configuration best practice and how to build your
|
||||
own strategy is described in [this chapter](04-configuring-icinga-2.md#configuration-best-practice).
|
||||
own strategy is described in [this chapter](04-configuration.md#configuration-best-practice).
|
||||
|
||||
Available configuration files which are installed by default:
|
||||
|
||||
* [hosts.conf](04-configuring-icinga-2.md#hosts-conf)
|
||||
* [services.conf](04-configuring-icinga-2.md#services-conf)
|
||||
* [users.conf](04-configuring-icinga-2.md#users-conf)
|
||||
* [notifications.conf](04-configuring-icinga-2.md#notifications-conf)
|
||||
* [commands.conf](04-configuring-icinga-2.md#commands-conf)
|
||||
* [groups.conf](04-configuring-icinga-2.md#groups-conf)
|
||||
* [templates.conf](04-configuring-icinga-2.md#templates-conf)
|
||||
* [downtimes.conf](04-configuring-icinga-2.md#downtimes-conf)
|
||||
* [timeperiods.conf](04-configuring-icinga-2.md#timeperiods-conf)
|
||||
* [api-users.conf](04-configuring-icinga-2.md#api-users-conf)
|
||||
* [app.conf](04-configuring-icinga-2.md#app-conf)
|
||||
* [hosts.conf](04-configuration.md#hosts-conf)
|
||||
* [services.conf](04-configuration.md#services-conf)
|
||||
* [users.conf](04-configuration.md#users-conf)
|
||||
* [notifications.conf](04-configuration.md#notifications-conf)
|
||||
* [commands.conf](04-configuration.md#commands-conf)
|
||||
* [groups.conf](04-configuration.md#groups-conf)
|
||||
* [templates.conf](04-configuration.md#templates-conf)
|
||||
* [downtimes.conf](04-configuration.md#downtimes-conf)
|
||||
* [timeperiods.conf](04-configuration.md#timeperiods-conf)
|
||||
* [api-users.conf](04-configuration.md#api-users-conf)
|
||||
* [app.conf](04-configuration.md#app-conf)
|
||||
|
||||
#### hosts.conf <a id="hosts-conf"></a>
|
||||
|
||||
The `hosts.conf` file contains an example host based on your
|
||||
`NodeName` setting in [constants.conf](04-configuring-icinga-2.md#constants-conf). You
|
||||
`NodeName` setting in [constants.conf](04-configuration.md#constants-conf). You
|
||||
can use global constants for your object names instead of string
|
||||
values.
|
||||
|
||||
@ -264,82 +288,84 @@ The `import` keyword is used to import the `generic-host` template which
|
||||
takes care of setting up the host check command to `hostalive`. If you
|
||||
require a different check command, you can override it in the object definition.
|
||||
|
||||
The `vars` attribute can be used to define custom attributes which are available
|
||||
The `vars` attribute can be used to define custom variables which are available
|
||||
for check and notification commands. Most of the [Plugin Check Commands](10-icinga-template-library.md#icinga-template-library)
|
||||
in the Icinga Template Library require an `address` attribute.
|
||||
|
||||
The custom attribute `os` is evaluated by the `linux-servers` group in
|
||||
[groups.conf](04-configuring-icinga-2.md#groups-conf) making the local host a member.
|
||||
The custom variable `os` is evaluated by the `linux-servers` group in
|
||||
[groups.conf](04-configuration.md#groups-conf) making the local host a member.
|
||||
|
||||
The example host will show you how to:
|
||||
|
||||
* define http vhost attributes for the `http` service apply rule defined
|
||||
in [services.conf](04-configuring-icinga-2.md#services-conf).
|
||||
in [services.conf](04-configuration.md#services-conf).
|
||||
* define disks (all, specific `/`) and their attributes for the `disk`
|
||||
service apply rule defined in [services.conf](04-configuring-icinga-2.md#services-conf).
|
||||
service apply rule defined in [services.conf](04-configuration.md#services-conf).
|
||||
* define notification types (`mail`) and set the groups attribute. This
|
||||
will be used by notification apply rules in [notifications.conf](04-configuring-icinga-2.md#notifications-conf).
|
||||
will be used by notification apply rules in [notifications.conf](04-configuration.md#notifications-conf).
|
||||
|
||||
If you've installed [Icinga Web 2](02-getting-started.md#setting-up-icingaweb2), you can
|
||||
If you've installed [Icinga Web 2](02-installation.md#setting-up-icingaweb2), you can
|
||||
uncomment the http vhost attributes and reload Icinga 2. The apply
|
||||
rules in [services.conf](04-configuring-icinga-2.md#services-conf) will automatically
|
||||
rules in [services.conf](04-configuration.md#services-conf) will automatically
|
||||
generate a new service checking the `/icingaweb2` URI using the `http`
|
||||
check.
|
||||
|
||||
/*
|
||||
* Host definitions with object attributes
|
||||
* used for apply rules for Service, Notification,
|
||||
* Dependency and ScheduledDowntime objects.
|
||||
*
|
||||
* Tip: Use `icinga2 object list --type Host` to
|
||||
* list all host objects after running
|
||||
* configuration validation (`icinga2 daemon -C`).
|
||||
*/
|
||||
```
|
||||
/*
|
||||
* Host definitions with object attributes
|
||||
* used for apply rules for Service, Notification,
|
||||
* Dependency and ScheduledDowntime objects.
|
||||
*
|
||||
* Tip: Use `icinga2 object list --type Host` to
|
||||
* list all host objects after running
|
||||
* configuration validation (`icinga2 daemon -C`).
|
||||
*/
|
||||
|
||||
/*
|
||||
* This is an example host based on your
|
||||
* local host's FQDN. Specify the NodeName
|
||||
* constant in `constants.conf` or use your
|
||||
* own description, e.g. "db-host-1".
|
||||
*/
|
||||
/*
|
||||
* This is an example host based on your
|
||||
* local host's FQDN. Specify the NodeName
|
||||
* constant in `constants.conf` or use your
|
||||
* own description, e.g. "db-host-1".
|
||||
*/
|
||||
|
||||
object Host NodeName {
|
||||
/* Import the default host template defined in `templates.conf`. */
|
||||
import "generic-host"
|
||||
object Host NodeName {
|
||||
/* Import the default host template defined in `templates.conf`. */
|
||||
import "generic-host"
|
||||
|
||||
/* Specify the address attributes for checks e.g. `ssh` or `http`. */
|
||||
address = "127.0.0.1"
|
||||
address6 = "::1"
|
||||
/* Specify the address attributes for checks e.g. `ssh` or `http`. */
|
||||
address = "127.0.0.1"
|
||||
address6 = "::1"
|
||||
|
||||
/* Set custom attribute `os` for hostgroup assignment in `groups.conf`. */
|
||||
vars.os = "Linux"
|
||||
/* Set custom variable `os` for hostgroup assignment in `groups.conf`. */
|
||||
vars.os = "Linux"
|
||||
|
||||
/* Define http vhost attributes for service apply rules in `services.conf`. */
|
||||
vars.http_vhosts["http"] = {
|
||||
http_uri = "/"
|
||||
}
|
||||
/* Uncomment if you've sucessfully installed Icinga Web 2. */
|
||||
//vars.http_vhosts["Icinga Web 2"] = {
|
||||
// http_uri = "/icingaweb2"
|
||||
//}
|
||||
/* Define http vhost attributes for service apply rules in `services.conf`. */
|
||||
vars.http_vhosts["http"] = {
|
||||
http_uri = "/"
|
||||
}
|
||||
/* Uncomment if you've sucessfully installed Icinga Web 2. */
|
||||
//vars.http_vhosts["Icinga Web 2"] = {
|
||||
// http_uri = "/icingaweb2"
|
||||
//}
|
||||
|
||||
/* Define disks and attributes for service apply rules in `services.conf`. */
|
||||
vars.disks["disk"] = {
|
||||
/* No parameters. */
|
||||
}
|
||||
vars.disks["disk /"] = {
|
||||
disk_partitions = "/"
|
||||
}
|
||||
/* Define disks and attributes for service apply rules in `services.conf`. */
|
||||
vars.disks["disk"] = {
|
||||
/* No parameters. */
|
||||
}
|
||||
vars.disks["disk /"] = {
|
||||
disk_partitions = "/"
|
||||
}
|
||||
|
||||
/* Define notification mail attributes for notification apply rules in `notifications.conf`. */
|
||||
vars.notification["mail"] = {
|
||||
/* The UserGroup `icingaadmins` is defined in `users.conf`. */
|
||||
groups = [ "icingaadmins" ]
|
||||
}
|
||||
}
|
||||
/* Define notification mail attributes for notification apply rules in `notifications.conf`. */
|
||||
vars.notification["mail"] = {
|
||||
/* The UserGroup `icingaadmins` is defined in `users.conf`. */
|
||||
groups = [ "icingaadmins" ]
|
||||
}
|
||||
}
|
||||
```
|
||||
|
||||
This is only the host object definition. Now we'll need to make sure that this
|
||||
host and your additional hosts are getting [services](04-configuring-icinga-2.md#services-conf) applied.
|
||||
host and your additional hosts are getting [services](04-configuration.md#services-conf) applied.
|
||||
|
||||
> **Tip**
|
||||
>
|
||||
@ -363,8 +389,8 @@ Service(s) | Applied on host(s)
|
||||
`load`, `procs`, `swap`, `users`, `icinga` | The `NodeName` host only.
|
||||
`ping4`, `ping6` | All hosts with `address` resp. `address6` attribute.
|
||||
`ssh` | All hosts with `address` and `vars.os` set to `Linux`
|
||||
`http`, optional: `Icinga Web 2` | All hosts with custom attribute `http_vhosts` defined as dictionary.
|
||||
`disk`, `disk /` | All hosts with custom attribute `disks` defined as dictionary.
|
||||
`http`, optional: `Icinga Web 2` | All hosts with custom variable `http_vhosts` defined as dictionary.
|
||||
`disk`, `disk /` | All hosts with custom variable `disks` defined as dictionary.
|
||||
|
||||
The Debian packages also include an additional `apt` service check applied to the local host.
|
||||
|
||||
@ -376,24 +402,26 @@ which we enabled earlier by including the `itl` and `plugins` configuration file
|
||||
|
||||
Example `load` service apply rule:
|
||||
|
||||
apply Service "load" {
|
||||
import "generic-service"
|
||||
```
|
||||
apply Service "load" {
|
||||
import "generic-service"
|
||||
|
||||
check_command = "load"
|
||||
check_command = "load"
|
||||
|
||||
/* Used by the ScheduledDowntime apply rule in `downtimes.conf`. */
|
||||
vars.backup_downtime = "02:00-03:00"
|
||||
/* Used by the ScheduledDowntime apply rule in `downtimes.conf`. */
|
||||
vars.backup_downtime = "02:00-03:00"
|
||||
|
||||
assign where host.name == NodeName
|
||||
}
|
||||
assign where host.name == NodeName
|
||||
}
|
||||
```
|
||||
|
||||
The `apply` keyword can be used to create new objects which are associated with
|
||||
another group of objects. You can `import` existing templates, define (custom)
|
||||
attributes.
|
||||
|
||||
The custom attribute `backup_downtime` is defined to a specific timerange string.
|
||||
The custom variable `backup_downtime` is defined to a specific timerange string.
|
||||
This variable value will be used for applying a `ScheduledDowntime` object to
|
||||
these services in [downtimes.conf](04-configuring-icinga-2.md#downtimes-conf).
|
||||
these services in [downtimes.conf](04-configuration.md#downtimes-conf).
|
||||
|
||||
In this example the `assign where` condition is a boolean expression which is
|
||||
evaluated for all objects of type `Host` and a new service with name "load"
|
||||
@ -403,16 +431,18 @@ may be used in `assign where` conditions.
|
||||
Multiple `assign where` condition can be combined with `AND` using the `&&` operator
|
||||
as shown in the `ssh` example:
|
||||
|
||||
apply Service "ssh" {
|
||||
import "generic-service"
|
||||
```
|
||||
apply Service "ssh" {
|
||||
import "generic-service"
|
||||
|
||||
check_command = "ssh"
|
||||
check_command = "ssh"
|
||||
|
||||
assign where host.address && host.vars.os == "Linux"
|
||||
}
|
||||
assign where host.address && host.vars.os == "Linux"
|
||||
}
|
||||
```
|
||||
|
||||
In this example, the service `ssh` is applied to all hosts having the `address`
|
||||
attribute defined `AND` having the custom attribute `os` set to the string
|
||||
attribute defined `AND` having the custom variable `os` set to the string
|
||||
`Linux`.
|
||||
You can modify this condition to match multiple expressions by combining `AND`
|
||||
and `OR` using `&&` and `||` [operators](17-language-reference.md#expression-operators), for example
|
||||
@ -424,21 +454,22 @@ rules. While one `apply` rule for `ssh` will only create a service for matching
|
||||
hosts, you can go one step further: Generate apply rules based on array items
|
||||
or dictionary key-value pairs.
|
||||
|
||||
The idea is simple: Your host in [hosts.conf](04-configuring-icinga-2.md#hosts-conf) defines the
|
||||
`disks` dictionary as custom attribute in `vars`.
|
||||
The idea is simple: Your host in [hosts.conf](04-configuration.md#hosts-conf) defines the
|
||||
`disks` dictionary as custom variable in `vars`.
|
||||
|
||||
Remember the example from [hosts.conf](04-configuring-icinga-2.md#hosts-conf):
|
||||
|
||||
...
|
||||
/* Define disks and attributes for service apply rules in `services.conf`. */
|
||||
vars.disks["disk"] = {
|
||||
/* No parameters. */
|
||||
}
|
||||
vars.disks["disk /"] = {
|
||||
disk_partition = "/"
|
||||
}
|
||||
...
|
||||
Remember the example from [hosts.conf](04-configuration.md#hosts-conf):
|
||||
|
||||
```
|
||||
...
|
||||
/* Define disks and attributes for service apply rules in `services.conf`. */
|
||||
vars.disks["disk"] = {
|
||||
/* No parameters. */
|
||||
}
|
||||
vars.disks["disk /"] = {
|
||||
disk_partition = "/"
|
||||
}
|
||||
...
|
||||
```
|
||||
|
||||
This dictionary contains multiple service names we want to monitor. `disk`
|
||||
should just check all available disks, while `disk /` will pass an additional
|
||||
@ -466,23 +497,25 @@ generated service
|
||||
|
||||
Configuration example:
|
||||
|
||||
apply Service for (disk => config in host.vars.disks) {
|
||||
import "generic-service"
|
||||
```
|
||||
apply Service for (disk => config in host.vars.disks) {
|
||||
import "generic-service"
|
||||
|
||||
check_command = "disk"
|
||||
check_command = "disk"
|
||||
|
||||
vars += config
|
||||
}
|
||||
vars += config
|
||||
}
|
||||
```
|
||||
|
||||
A similar example is used for the `http` services. That way you can make your
|
||||
host the information provider for all apply rules. Define them once, and only
|
||||
manage your hosts.
|
||||
|
||||
Look into [notifications.conf](04-configuring-icinga-2.md#notifications-conf) how this technique is used
|
||||
Look into [notifications.conf](04-configuration.md#notifications-conf) how this technique is used
|
||||
for applying notifications to hosts and services using their type and user
|
||||
attributes.
|
||||
|
||||
Don't forget to install the [check plugins](02-getting-started.md#setting-up-check-plugins) required by
|
||||
Don't forget to install the [check plugins](02-installation.md#setting-up-check-plugins) required by
|
||||
the hosts and services and their check commands.
|
||||
|
||||
Further details on the monitoring configuration can be found in the
|
||||
@ -491,22 +524,23 @@ Further details on the monitoring configuration can be found in the
|
||||
#### users.conf <a id="users-conf"></a>
|
||||
|
||||
Defines the `icingaadmin` User and the `icingaadmins` UserGroup. The latter is used in
|
||||
[hosts.conf](04-configuring-icinga-2.md#hosts-conf) for defining a custom host attribute later used in
|
||||
[notifications.conf](04-configuring-icinga-2.md#notifications-conf) for notification apply rules.
|
||||
[hosts.conf](04-configuration.md#hosts-conf) for defining a custom host attribute later used in
|
||||
[notifications.conf](04-configuration.md#notifications-conf) for notification apply rules.
|
||||
|
||||
object User "icingaadmin" {
|
||||
import "generic-user"
|
||||
```
|
||||
object User "icingaadmin" {
|
||||
import "generic-user"
|
||||
|
||||
display_name = "Icinga 2 Admin"
|
||||
groups = [ "icingaadmins" ]
|
||||
display_name = "Icinga 2 Admin"
|
||||
groups = [ "icingaadmins" ]
|
||||
|
||||
email = "icinga@localhost"
|
||||
}
|
||||
|
||||
object UserGroup "icingaadmins" {
|
||||
display_name = "Icinga 2 Admin Group"
|
||||
}
|
||||
email = "icinga@localhost"
|
||||
}
|
||||
|
||||
object UserGroup "icingaadmins" {
|
||||
display_name = "Icinga 2 Admin Group"
|
||||
}
|
||||
```
|
||||
|
||||
#### notifications.conf <a id="notifications-conf"></a>
|
||||
|
||||
@ -519,31 +553,33 @@ nested dictionary attribute `notification.mail` is set.
|
||||
|
||||
Please note that the `to` keyword is important in [notification apply rules](03-monitoring-basics.md#using-apply-notifications)
|
||||
defining whether these notifications are applies to hosts or services.
|
||||
The `import` keyword imports the specific mail templates defined in [templates.conf](04-configuring-icinga-2.md#templates-conf).
|
||||
The `import` keyword imports the specific mail templates defined in [templates.conf](04-configuration.md#templates-conf).
|
||||
|
||||
The `interval` attribute is not explicitly set -- it [defaults to 30 minutes](09-object-types.md#objecttype-notification).
|
||||
|
||||
By setting the `user_groups` to the value provided by the
|
||||
respective [host.vars.notification.mail](04-configuring-icinga-2.md#hosts-conf) attribute we'll
|
||||
implicitely use the `icingaadmins` UserGroup defined in [users.conf](04-configuring-icinga-2.md#users-conf).
|
||||
respective [host.vars.notification.mail](04-configuration.md#hosts-conf) attribute we'll
|
||||
implicitely use the `icingaadmins` UserGroup defined in [users.conf](04-configuration.md#users-conf).
|
||||
|
||||
apply Notification "mail-icingaadmin" to Host {
|
||||
import "mail-host-notification"
|
||||
```
|
||||
apply Notification "mail-icingaadmin" to Host {
|
||||
import "mail-host-notification"
|
||||
|
||||
user_groups = host.vars.notification.mail.groups
|
||||
users = host.vars.notification.mail.users
|
||||
user_groups = host.vars.notification.mail.groups
|
||||
users = host.vars.notification.mail.users
|
||||
|
||||
assign where host.vars.notification.mail
|
||||
}
|
||||
assign where host.vars.notification.mail
|
||||
}
|
||||
|
||||
apply Notification "mail-icingaadmin" to Service {
|
||||
import "mail-service-notification"
|
||||
apply Notification "mail-icingaadmin" to Service {
|
||||
import "mail-service-notification"
|
||||
|
||||
user_groups = host.vars.notification.mail.groups
|
||||
users = host.vars.notification.mail.users
|
||||
user_groups = host.vars.notification.mail.groups
|
||||
users = host.vars.notification.mail.users
|
||||
|
||||
assign where host.vars.notification.mail
|
||||
}
|
||||
assign where host.vars.notification.mail
|
||||
}
|
||||
```
|
||||
|
||||
More details on defining notifications and their additional attributes such as
|
||||
filters can be read in [this chapter](03-monitoring-basics.md#alert-notifications).
|
||||
@ -551,7 +587,7 @@ filters can be read in [this chapter](03-monitoring-basics.md#alert-notification
|
||||
#### commands.conf <a id="commands-conf"></a>
|
||||
|
||||
This is the place where your own command configuration can be defined. By default
|
||||
only the notification commands used by the notification templates defined in [templates.conf](04-configuring-icinga-2.md#templates-conf).
|
||||
only the notification commands used by the notification templates defined in [templates.conf](04-configuration.md#templates-conf).
|
||||
|
||||
You can freely customize these notification commands, and adapt them for your needs.
|
||||
Read more on that topic [here](03-monitoring-basics.md#notification-commands).
|
||||
@ -559,122 +595,129 @@ Read more on that topic [here](03-monitoring-basics.md#notification-commands).
|
||||
#### groups.conf <a id="groups-conf"></a>
|
||||
|
||||
The example host defined in [hosts.conf](hosts-conf) already has the
|
||||
custom attribute `os` set to `Linux` and is therefore automatically
|
||||
custom variable `os` set to `Linux` and is therefore automatically
|
||||
a member of the host group `linux-servers`.
|
||||
|
||||
This is done by using the [group assign](17-language-reference.md#group-assign) expressions similar
|
||||
to previously seen [apply rules](03-monitoring-basics.md#using-apply).
|
||||
|
||||
object HostGroup "linux-servers" {
|
||||
display_name = "Linux Servers"
|
||||
```
|
||||
object HostGroup "linux-servers" {
|
||||
display_name = "Linux Servers"
|
||||
|
||||
assign where host.vars.os == "Linux"
|
||||
}
|
||||
assign where host.vars.os == "Linux"
|
||||
}
|
||||
|
||||
object HostGroup "windows-servers" {
|
||||
display_name = "Windows Servers"
|
||||
object HostGroup "windows-servers" {
|
||||
display_name = "Windows Servers"
|
||||
|
||||
assign where host.vars.os == "Windows"
|
||||
}
|
||||
assign where host.vars.os == "Windows"
|
||||
}
|
||||
```
|
||||
|
||||
Service groups can be grouped together by similar pattern matches.
|
||||
The [match function](18-library-reference.md#global-functions-match) expects a wildcard match string
|
||||
and the attribute string to match with.
|
||||
|
||||
object ServiceGroup "ping" {
|
||||
display_name = "Ping Checks"
|
||||
```
|
||||
object ServiceGroup "ping" {
|
||||
display_name = "Ping Checks"
|
||||
|
||||
assign where match("ping*", service.name)
|
||||
}
|
||||
assign where match("ping*", service.name)
|
||||
}
|
||||
|
||||
object ServiceGroup "http" {
|
||||
display_name = "HTTP Checks"
|
||||
object ServiceGroup "http" {
|
||||
display_name = "HTTP Checks"
|
||||
|
||||
assign where match("http*", service.check_command)
|
||||
}
|
||||
assign where match("http*", service.check_command)
|
||||
}
|
||||
|
||||
object ServiceGroup "disk" {
|
||||
display_name = "Disk Checks"
|
||||
|
||||
assign where match("disk*", service.check_command)
|
||||
}
|
||||
object ServiceGroup "disk" {
|
||||
display_name = "Disk Checks"
|
||||
|
||||
assign where match("disk*", service.check_command)
|
||||
}
|
||||
```
|
||||
|
||||
#### templates.conf <a id="templates-conf"></a>
|
||||
|
||||
Most of the example configuration objects use generic global templates by
|
||||
default:
|
||||
|
||||
template Host "generic-host" {
|
||||
max_check_attempts = 5
|
||||
check_interval = 1m
|
||||
retry_interval = 30s
|
||||
```
|
||||
template Host "generic-host" {
|
||||
max_check_attempts = 5
|
||||
check_interval = 1m
|
||||
retry_interval = 30s
|
||||
|
||||
check_command = "hostalive"
|
||||
}
|
||||
check_command = "hostalive"
|
||||
}
|
||||
|
||||
template Service "generic-service" {
|
||||
max_check_attempts = 3
|
||||
check_interval = 1m
|
||||
retry_interval = 30s
|
||||
}
|
||||
template Service "generic-service" {
|
||||
max_check_attempts = 3
|
||||
check_interval = 1m
|
||||
retry_interval = 30s
|
||||
}
|
||||
```
|
||||
|
||||
The `hostalive` check command is part of the
|
||||
[Plugin Check Commands](10-icinga-template-library.md#icinga-template-library).
|
||||
|
||||
```
|
||||
template Notification "mail-host-notification" {
|
||||
command = "mail-host-notification"
|
||||
|
||||
template Notification "mail-host-notification" {
|
||||
command = "mail-host-notification"
|
||||
states = [ Up, Down ]
|
||||
types = [ Problem, Acknowledgement, Recovery, Custom,
|
||||
FlappingStart, FlappingEnd,
|
||||
DowntimeStart, DowntimeEnd, DowntimeRemoved ]
|
||||
|
||||
states = [ Up, Down ]
|
||||
types = [ Problem, Acknowledgement, Recovery, Custom,
|
||||
FlappingStart, FlappingEnd,
|
||||
DowntimeStart, DowntimeEnd, DowntimeRemoved ]
|
||||
period = "24x7"
|
||||
}
|
||||
|
||||
period = "24x7"
|
||||
}
|
||||
template Notification "mail-service-notification" {
|
||||
command = "mail-service-notification"
|
||||
|
||||
template Notification "mail-service-notification" {
|
||||
command = "mail-service-notification"
|
||||
states = [ OK, Warning, Critical, Unknown ]
|
||||
types = [ Problem, Acknowledgement, Recovery, Custom,
|
||||
FlappingStart, FlappingEnd,
|
||||
DowntimeStart, DowntimeEnd, DowntimeRemoved ]
|
||||
|
||||
states = [ OK, Warning, Critical, Unknown ]
|
||||
types = [ Problem, Acknowledgement, Recovery, Custom,
|
||||
FlappingStart, FlappingEnd,
|
||||
DowntimeStart, DowntimeEnd, DowntimeRemoved ]
|
||||
|
||||
period = "24x7"
|
||||
}
|
||||
period = "24x7"
|
||||
}
|
||||
```
|
||||
|
||||
More details on `Notification` object attributes can be found [here](09-object-types.md#objecttype-notification).
|
||||
|
||||
|
||||
#### downtimes.conf <a id="downtimes-conf"></a>
|
||||
|
||||
The `load` service apply rule defined in [services.conf](04-configuring-icinga-2.md#services-conf) defines
|
||||
the `backup_downtime` custom attribute.
|
||||
The `load` service apply rule defined in [services.conf](04-configuration.md#services-conf) defines
|
||||
the `backup_downtime` custom variable.
|
||||
|
||||
The ScheduledDowntime apply rule uses this attribute to define the default value
|
||||
for the time ranges required for recurring downtime slots.
|
||||
|
||||
Learn more about downtimes in [this chapter](08-advanced-topics.md#downtimes).
|
||||
|
||||
apply ScheduledDowntime "backup-downtime" to Service {
|
||||
author = "icingaadmin"
|
||||
comment = "Scheduled downtime for backup"
|
||||
```
|
||||
apply ScheduledDowntime "backup-downtime" to Service {
|
||||
author = "icingaadmin"
|
||||
comment = "Scheduled downtime for backup"
|
||||
|
||||
ranges = {
|
||||
monday = service.vars.backup_downtime
|
||||
tuesday = service.vars.backup_downtime
|
||||
wednesday = service.vars.backup_downtime
|
||||
thursday = service.vars.backup_downtime
|
||||
friday = service.vars.backup_downtime
|
||||
saturday = service.vars.backup_downtime
|
||||
sunday = service.vars.backup_downtime
|
||||
}
|
||||
|
||||
assign where service.vars.backup_downtime != ""
|
||||
}
|
||||
ranges = {
|
||||
monday = service.vars.backup_downtime
|
||||
tuesday = service.vars.backup_downtime
|
||||
wednesday = service.vars.backup_downtime
|
||||
thursday = service.vars.backup_downtime
|
||||
friday = service.vars.backup_downtime
|
||||
saturday = service.vars.backup_downtime
|
||||
sunday = service.vars.backup_downtime
|
||||
}
|
||||
|
||||
assign where service.vars.backup_downtime != ""
|
||||
}
|
||||
```
|
||||
|
||||
#### timeperiods.conf <a id="timeperiods-conf"></a>
|
||||
|
@ -4,44 +4,142 @@ The power of Icinga 2 lies in its modularity. There are thousands of
|
||||
community plugins available next to the standard plugins provided by
|
||||
the [Monitoring Plugins project](https://www.monitoring-plugins.org).
|
||||
|
||||
Start your research on [Icinga Exchange](https://exchange.icinga.com)
|
||||
and look which services are already [covered](05-service-monitoring.md#service-monitoring-overview).
|
||||
|
||||
The [requirements chapter](05-service-monitoring.md#service-monitoring-requirements) guides you
|
||||
through the plugin setup, tests and their integration with an [existing](05-service-monitoring.md#service-monitoring-plugin-checkcommand)
|
||||
or [new](05-service-monitoring.md#service-monitoring-plugin-checkcommand-new) CheckCommand object
|
||||
and host/service objects inside the [Director](05-service-monitoring.md#service-monitoring-plugin-checkcommand-integration-director)
|
||||
or [Icinga config files](05-service-monitoring.md#service-monitoring-plugin-checkcommand-integration-config-files).
|
||||
It also adds hints on [modifying](05-service-monitoring.md#service-monitoring-plugin-checkcommand-modify) existing commands.
|
||||
|
||||
Plugins follow the [Plugin API specification](05-service-monitoring.md#service-monitoring-plugin-api)
|
||||
which is enriched with examples and also code examples to get you started with
|
||||
[your own plugin](05-service-monitoring.md#service-monitoring-plugin-new).
|
||||
|
||||
|
||||
|
||||
## Requirements <a id="service-monitoring-requirements"></a>
|
||||
|
||||
### Plugins <a id="service-monitoring-plugins"></a>
|
||||
|
||||
All existing Nagios or Icinga 1.x plugins work with Icinga 2. Community
|
||||
All existing Icinga or Nagios plugins work with Icinga 2. Community
|
||||
plugins can be found for example on [Icinga Exchange](https://exchange.icinga.com).
|
||||
|
||||
The recommended way of setting up these plugins is to copy them to a common directory
|
||||
and create a new global constant, e.g. `CustomPluginDir` in your [constants.conf](04-configuring-icinga-2.md#constants-conf)
|
||||
configuration file:
|
||||
The recommended way of setting up these plugins is to copy them
|
||||
into the `PluginDir` directory.
|
||||
|
||||
# cp check_snmp_int.pl /opt/monitoring/plugins
|
||||
# chmod +x /opt/plugins/check_snmp_int.pl
|
||||
If you have plugins with many dependencies, consider creating a
|
||||
custom RPM/DEB package which handles the required libraries and binaries.
|
||||
|
||||
# cat /etc/icinga2/constants.conf
|
||||
/**
|
||||
* This file defines global constants which can be used in
|
||||
* the other configuration files. At a minimum the
|
||||
* PluginDir constant should be defined.
|
||||
*/
|
||||
Configuration management tools such as Puppet, Ansible, Chef or Saltstack
|
||||
also help with automatically installing the plugins on different
|
||||
operating systems. They can also help with installing the required
|
||||
dependencies, e.g. Python libraries, Perl modules, etc.
|
||||
|
||||
const PluginDir = "/usr/lib/nagios/plugins"
|
||||
const CustomPluginDir = "/opt/monitoring/plugins"
|
||||
### Plugin Setup <a id="service-monitoring-plugins-setup"></a>
|
||||
|
||||
Good plugins provide installations and configuration instructions
|
||||
in their docs and/or README on GitHub.
|
||||
|
||||
Sometimes dependencies are not listed, or your distribution differs from the one
|
||||
described. Try running the plugin after setup and [ensure it works](05-service-monitoring.md#service-monitoring-plugins-it-works).
|
||||
|
||||
#### Ensure it works <a id="service-monitoring-plugins-it-works"></a>
|
||||
|
||||
Prior to using the check plugin with Icinga 2 you should ensure that it is working properly
|
||||
by trying to run it on the console using whichever user Icinga 2 is running as:
|
||||
|
||||
# su - icinga -s /bin/bash
|
||||
$ /opt/monitoring/plugins/check_snmp_int.pl --help
|
||||
RHEL/CentOS/Fedora
|
||||
|
||||
```
|
||||
sudo -u icinga /usr/lib64/nagios/plugins/check_mysql_health --help
|
||||
```
|
||||
|
||||
Debian/Ubuntu
|
||||
|
||||
```
|
||||
sudo -u nagios /usr/lib/nagios/plugins/check_mysql_health --help
|
||||
```
|
||||
|
||||
Additional libraries may be required for some plugins. Please consult the plugin
|
||||
documentation and/or the included README file for installation instructions.
|
||||
Sometimes plugins contain hard-coded paths to other components. Instead of changing
|
||||
the plugin it might be easier to create a symbolic link to make sure it doesn't get overwritten during the next update.
|
||||
the plugin it might be easier to create a symbolic link to make sure it doesn't get
|
||||
overwritten during the next update.
|
||||
|
||||
Sometimes there are plugins which do not exactly fit your requirements.
|
||||
In that case you can modify an existing plugin or just write your own.
|
||||
|
||||
#### Plugin Dependency Errors <a id="service-monitoring-plugins-setup-dependency-errors"></a>
|
||||
|
||||
Plugins can be scripts (Shell, Python, Perl, Ruby, PHP, etc.)
|
||||
or compiled binaries (C, C++, Go).
|
||||
|
||||
These scripts/binaries may require additional libraries
|
||||
which must be installed on every system they are executed.
|
||||
|
||||
> **Tip**
|
||||
>
|
||||
> Don't test the plugins on your master instance, instead
|
||||
> do that on the satellites and clients which execute the
|
||||
> checks.
|
||||
|
||||
There are errors, now what? Typical errors are missing libraries,
|
||||
binaries or packages.
|
||||
|
||||
##### Python Example
|
||||
|
||||
Example for a Python plugin which uses the `tinkerforge` module
|
||||
to query a network service:
|
||||
|
||||
```
|
||||
ImportError: No module named tinkerforge.ip_connection
|
||||
```
|
||||
|
||||
Its [documentation](https://github.com/NETWAYS/check_tinkerforge#installation)
|
||||
points to installing the `tinkerforge` Python module.
|
||||
|
||||
##### Perl Example
|
||||
|
||||
Example for a Perl plugin which uses SNMP:
|
||||
|
||||
```
|
||||
Can't locate Net/SNMP.pm in @INC (you may need to install the Net::SNMP module)
|
||||
```
|
||||
|
||||
Prior to installing the Perl module via CPAN, look for a distribution
|
||||
specific package, e.g. `libnet-snmp-perl` on Debian/Ubuntu or `perl-Net-SNMP`
|
||||
on RHEL/CentOS.
|
||||
|
||||
|
||||
#### Optional: Custom Path <a id="service-monitoring-plugins-custom-path"></a>
|
||||
|
||||
If you are not using the default `PluginDir` directory, you
|
||||
can create a custom plugin directory and constant
|
||||
and reference this in the created CheckCommand objects.
|
||||
|
||||
Create a common directory e.g. `/opt/monitoring/plugins`
|
||||
and install the plugin there.
|
||||
|
||||
```
|
||||
mkdir -p /opt/monitoring/plugins
|
||||
cp check_snmp_int.pl /opt/monitoring/plugins
|
||||
chmod +x /opt/monitoring/plugins/check_snmp_int.pl
|
||||
```
|
||||
|
||||
Next create a new global constant, e.g. `CustomPluginDir`
|
||||
in your [constants.conf](04-configuration.md#constants-conf)
|
||||
configuration file:
|
||||
|
||||
```
|
||||
vim /etc/icinga2/constants.conf
|
||||
|
||||
const PluginDir = "/usr/lib/nagios/plugins"
|
||||
const CustomPluginDir = "/opt/monitoring/plugins"
|
||||
```
|
||||
|
||||
### CheckCommand Definition <a id="service-monitoring-plugin-checkcommand"></a>
|
||||
|
||||
Each plugin requires a [CheckCommand](09-object-types.md#objecttype-checkcommand) object in your
|
||||
@ -50,54 +148,617 @@ configuration which can be used in the [Service](09-object-types.md#objecttype-s
|
||||
|
||||
Please check if the Icinga 2 package already provides an
|
||||
[existing CheckCommand definition](10-icinga-template-library.md#icinga-template-library).
|
||||
If that's the case, throroughly check the required parameters and integrate the check command
|
||||
into your host and service objects.
|
||||
|
||||
If that's the case, thoroughly check the required parameters and integrate the check command
|
||||
into your host and service objects. Best practice is to run the plugin on the CLI
|
||||
with the required parameters first.
|
||||
|
||||
Example for database size checks with [check_mysql_health](10-icinga-template-library.md#plugin-contrib-command-mysql_health).
|
||||
|
||||
```
|
||||
/usr/lib64/nagios/plugins/check_mysql_health --hostname '127.0.0.1' --username root --password icingar0xx --mode sql --name 'select sum(data_length + index_length) / 1024 / 1024 from information_schema.tables where table_schema = '\''icinga'\'';' '--name2' 'db_size' --units 'MB' --warning 4096 --critical 8192
|
||||
```
|
||||
|
||||
The parameter names inside the ITL commands follow the
|
||||
`<command name>_<parameter name>` schema.
|
||||
|
||||
#### Icinga Director Integration <a id="service-monitoring-plugin-checkcommand-integration-director"></a>
|
||||
|
||||
Navigate into `Commands > External Commands` and search for `mysql_health`.
|
||||
Select `mysql_health` and navigate into the `Fields` tab.
|
||||
|
||||
In order to access the parameters, the Director requires you to first
|
||||
define the needed custom data fields:
|
||||
|
||||
* `mysql_health_hostname`
|
||||
* `mysql_health_username` and `mysql_health_password`
|
||||
* `mysql_health_mode`
|
||||
* `mysql_health_name`, `mysql_health_name2` and `mysql_health_units`
|
||||
* `mysql_health_warning` and `mysql_health_critical`
|
||||
|
||||
Create a new host template and object where you'll generic
|
||||
settings like `mysql_health_hostname` (if it differs from the host's
|
||||
`address` attribute) and `mysql_health_username` and `mysql_health_password`.
|
||||
|
||||
Create a new service template for `mysql-health` and set the `mysql_health`
|
||||
as check command. You can also define a default for `mysql_health_mode`.
|
||||
|
||||
Next, create a service apply rule or a new service set which gets assigned
|
||||
to matching host objects.
|
||||
|
||||
|
||||
#### Icinga Config File Integration <a id="service-monitoring-plugin-checkcommand-integration-config-files"></a>
|
||||
|
||||
Create or modify a host object which stores
|
||||
the generic database defaults and prepares details
|
||||
for a service apply for rule.
|
||||
|
||||
```
|
||||
object Host "icinga2-master1.localdomain" {
|
||||
check_command = "hostalive"
|
||||
address = "..."
|
||||
|
||||
// Database listens locally, not external
|
||||
vars.mysql_health_hostname = "127.0.0.1"
|
||||
|
||||
// Basic database size checks for Icinga DBs
|
||||
vars.databases["icinga"] = {
|
||||
mysql_health_warning = 4096 //MB
|
||||
mysql_health_critical = 8192 //MB
|
||||
}
|
||||
vars.databases["icingaweb2"] = {
|
||||
mysql_health_warning = 4096 //MB
|
||||
mysql_health_critical = 8192 //MB
|
||||
}
|
||||
}
|
||||
```
|
||||
|
||||
The host object prepares the database details and thresholds already
|
||||
for advanced [apply for](03-monitoring-basics.md#using-apply-for) rules. It also uses
|
||||
conditions to fetch host specified values, or set default values.
|
||||
|
||||
```
|
||||
apply Service "db-size-" for (db_name => config in host.vars.databases) {
|
||||
check_interval = 1m
|
||||
retry_interval = 30s
|
||||
|
||||
check_command = "mysql_health"
|
||||
|
||||
if (config.mysql_health_username) {
|
||||
vars.mysql_healt_username = config.mysql_health_username
|
||||
} else {
|
||||
vars.mysql_health_username = "root"
|
||||
}
|
||||
if (config.mysql_health_password) {
|
||||
vars.mysql_healt_password = config.mysql_health_password
|
||||
} else {
|
||||
vars.mysql_health_password = "icingar0xx"
|
||||
}
|
||||
|
||||
vars.mysql_health_mode = "sql"
|
||||
vars.mysql_health_name = "select sum(data_length + index_length) / 1024 / 1024 from information_schema.tables where table_schema = '" + db_name + "';"
|
||||
vars.mysql_health_name2 = "db_size"
|
||||
vars.mysql_health_units = "MB"
|
||||
|
||||
if (config.mysql_health_warning) {
|
||||
vars.mysql_health_warning = config.mysql_health_warning
|
||||
}
|
||||
if (config.mysql_health_critical) {
|
||||
vars.mysql_health_critical = config.mysql_health_critical
|
||||
}
|
||||
|
||||
vars += config
|
||||
}
|
||||
```
|
||||
|
||||
#### New CheckCommand <a id="service-monitoring-plugin-checkcommand-new"></a>
|
||||
|
||||
This chapter describes how to add a new CheckCommand object for a plugin.
|
||||
|
||||
Please make sure to follow these conventions when adding a new command object definition:
|
||||
|
||||
* Use [command arguments](03-monitoring-basics.md#command-arguments) whenever possible. The `command` attribute
|
||||
must be an array in `[ ... ]` for shell escaping.
|
||||
* Define a unique `prefix` for the command's specific arguments. That way you can safely
|
||||
set them on host/service level and you'll always know which command they control.
|
||||
* Define a unique `prefix` for the command's specific arguments. Best practice is to follow this schema:
|
||||
|
||||
```
|
||||
<command name>_<parameter name>
|
||||
```
|
||||
|
||||
That way you can safely set them on host/service level and you'll always know which command they control.
|
||||
* Use command argument default values, e.g. for thresholds.
|
||||
* Use [advanced conditions](09-object-types.md#objecttype-checkcommand) like `set_if` definitions.
|
||||
|
||||
This is an example for a custom `my-snmp-int` check command:
|
||||
Before starting with the CheckCommand definition, please check
|
||||
the existing objects available inside the ITL. They follow best
|
||||
practices and are maintained by developers and our community.
|
||||
|
||||
object CheckCommand "my-snmp-int" {
|
||||
command = [ CustomPluginDir + "/check_snmp_int.pl" ]
|
||||
This example picks a new plugin called [check_systemd](https://exchange.icinga.com/joseffriedrich/check_systemd)
|
||||
uploaded to Icinga Exchange in June 2019.
|
||||
|
||||
arguments = {
|
||||
"-H" = "$snmp_address$"
|
||||
"-C" = "$snmp_community$"
|
||||
"-p" = "$snmp_port$"
|
||||
"-2" = {
|
||||
set_if = "$snmp_v2$"
|
||||
}
|
||||
"-n" = "$snmp_interface$"
|
||||
"-f" = {
|
||||
set_if = "$snmp_perf$"
|
||||
}
|
||||
"-w" = "$snmp_warn$"
|
||||
"-c" = "$snmp_crit$"
|
||||
}
|
||||
First, [install](05-service-monitoring.md#service-monitoring-plugins-setup) the plugin and ensure
|
||||
that [it works](05-service-monitoring.md#service-monitoring-plugins-it-works). Then run it with the
|
||||
`--help` parameter to see the actual parameters (docs might be outdated).
|
||||
|
||||
vars.snmp_v2 = true
|
||||
vars.snmp_perf = true
|
||||
vars.snmp_warn = "300,400"
|
||||
vars.snmp_crit = "0,600"
|
||||
```
|
||||
./check_systemd.py --help
|
||||
|
||||
usage: check_systemd.py [-h] [-c SECONDS] [-e UNIT | -u UNIT] [-v] [-V]
|
||||
[-w SECONDS]
|
||||
|
||||
...
|
||||
|
||||
optional arguments:
|
||||
-h, --help show this help message and exit
|
||||
-c SECONDS, --critical SECONDS
|
||||
Startup time in seconds to result in critical status.
|
||||
-e UNIT, --exclude UNIT
|
||||
Exclude a systemd unit from the checks. This option
|
||||
can be applied multiple times. For example: -e mnt-
|
||||
data.mount -e task.service.
|
||||
-u UNIT, --unit UNIT Name of the systemd unit that is beeing tested.
|
||||
-v, --verbose Increase output verbosity (use up to 3 times).
|
||||
-V, --version show program's version number and exit
|
||||
-w SECONDS, --warning SECONDS
|
||||
Startup time in seconds to result in warning status.
|
||||
```
|
||||
|
||||
The argument description is important, based on this you need to create the
|
||||
command arguments.
|
||||
|
||||
> **Tip**
|
||||
>
|
||||
> When you are using the Director, you can prepare the commands as files
|
||||
> e.g. inside the `global-templates` zone. Then run the kickstart wizard
|
||||
> again to import the commands as external reference.
|
||||
>
|
||||
> If you prefer to use the Director GUI/CLI, please apply the steps
|
||||
> in the `Add Command` form.
|
||||
|
||||
Start with the basic plugin call without any parameters.
|
||||
|
||||
```
|
||||
object CheckCommand "systemd" { // Plugin name without 'check_' prefix
|
||||
command = [ PluginContribDir + "/check_systemd.py" ] // Use the 'PluginContribDir' constant, see the contributed ITL commands
|
||||
}
|
||||
```
|
||||
|
||||
Run a config validation to see if that works, `icinga2 daemon -C`
|
||||
|
||||
Next, analyse the plugin parameters. Plugins with a good help output show
|
||||
optional parameters in square brackes. This is the case for all parameters
|
||||
for this plugin. If there are required parameters, use the `required` key
|
||||
inside the argument.
|
||||
|
||||
The `arguments` attribute is a dictionary which takes the parameters as keys.
|
||||
|
||||
```
|
||||
arguments = {
|
||||
"--unit" = { ... }
|
||||
}
|
||||
```
|
||||
|
||||
If there a long parameter names available, prefer them. This increases
|
||||
readability in both the configuration as well as the executed command line.
|
||||
|
||||
The argument value itself is a sub dictionary which has additional keys:
|
||||
|
||||
* `value` which references the runtime macro string
|
||||
* `description` where you copy the plugin parameter help text into
|
||||
* `required`, `set_if`, etc. for advanced parameters, check the [CheckCommand object](09-object-types.md#objecttype-checkcommand) chapter.
|
||||
|
||||
The runtime macro syntax is required to allow value extraction when
|
||||
the command is executed.
|
||||
|
||||
> **Tip**
|
||||
>
|
||||
> Inside the Director, store the new command first in order to
|
||||
> unveil the `Arguments` tab.
|
||||
|
||||
Best practice is to use the command name as prefix, in this specific
|
||||
case e.g. `systemd_unit`.
|
||||
|
||||
```
|
||||
arguments = {
|
||||
"--unit" = {
|
||||
value = "$systemd_unit$" // The service parameter would then be defined as 'vars.systemd_unit = "icinga2"'
|
||||
description = "Name of the systemd unit that is beeing tested."
|
||||
}
|
||||
"--warning" = {
|
||||
value = "$systemd_warning$"
|
||||
description = "Startup time in seconds to result in warning status."
|
||||
}
|
||||
"--critical" = {
|
||||
value = "$systemd_critical$"
|
||||
description = "Startup time in seconds to result in critical status."
|
||||
}
|
||||
}
|
||||
```
|
||||
|
||||
This may take a while -- validate the configuration in between up until
|
||||
the CheckCommand definition is done.
|
||||
|
||||
Then test and integrate it into your monitoring configuration.
|
||||
|
||||
Remember: Do it once and right, and never touch the CheckCommand again.
|
||||
Optional arguments allow different use cases and scenarios.
|
||||
|
||||
|
||||
For further information on your monitoring configuration read the
|
||||
[Monitoring Basics](03-monitoring-basics.md#monitoring-basics) chapter.
|
||||
Once you have created your really good CheckCommand, please consider
|
||||
sharing it with our community by creating a new PR on [GitHub](https://github.com/Icinga/icinga2/blob/master/CONTRIBUTING.md).
|
||||
_Please also update the documentation for the ITL._
|
||||
|
||||
|
||||
> **Tip**
|
||||
>
|
||||
> Inside the Director, you can render the configuration in the Deployment
|
||||
> section. Extract the static configuration object and use that as a source
|
||||
> for sending it upstream.
|
||||
|
||||
|
||||
|
||||
#### Modify Existing CheckCommand <a id="service-monitoring-plugin-checkcommand-modify"></a>
|
||||
|
||||
Sometimes an existing CheckCommand inside the ITL is missing a parameter.
|
||||
Or you don't need a default parameter value being set.
|
||||
|
||||
Instead of copying the entire configuration object, you can import
|
||||
an object into another new object.
|
||||
|
||||
```
|
||||
object CheckCommand "http-custom" {
|
||||
import "http" // Import existing http object
|
||||
|
||||
arguments += { // Use additive assignment to add missing parameters
|
||||
"--key" = {
|
||||
value = "$http_..." // Keep the parameter name the same as with http
|
||||
}
|
||||
}
|
||||
|
||||
// Override default parameters
|
||||
vars.http_address = "..."
|
||||
}
|
||||
```
|
||||
|
||||
This CheckCommand can then be referenced in your host/service object
|
||||
definitions.
|
||||
|
||||
If you have created your own `CheckCommand` definition, please kindly
|
||||
[send it upstream](https://www.icinga.com/community/get-involved/).
|
||||
|
||||
### Plugin API <a id="service-monitoring-plugin-api"></a>
|
||||
|
||||
Currently Icinga 2 supports the native plugin API specification from the Monitoring Plugins project. It is defined in the [Monitoring Plugins Development Guidelines](https://www.monitoring-plugins.org/doc/guidelines.html).
|
||||
Icinga 2 supports the native plugin API specification from the Monitoring Plugins project.
|
||||
It is defined in the [Monitoring Plugins](https://www.monitoring-plugins.org) guidelines.
|
||||
|
||||
The Icinga documentation revamps the specification into our
|
||||
own guideline enriched with examples and best practices.
|
||||
|
||||
#### Output <a id="service-monitoring-plugin-api-output"></a>
|
||||
|
||||
The output should be as short and as detailed as possible. The
|
||||
most common cases include:
|
||||
|
||||
- Viewing a problem list in Icinga Web and dashboards
|
||||
- Getting paged about a problem
|
||||
- Receiving the alert on the CLI or forwarding it to external (ticket) systems
|
||||
|
||||
Examples:
|
||||
|
||||
```
|
||||
<STATUS>: <A short description what happened>
|
||||
|
||||
OK: MySQL connection time is fine (0.0002s)
|
||||
WARNING: MySQL connection time is slow (0.5s > 0.1s threshold)
|
||||
CRITICAL: MySQL connection time is causing degraded performance (3s > 0.5s threshold)
|
||||
```
|
||||
|
||||
Icinga supports reading multi-line output where Icinga Web
|
||||
only shows the first line in the listings and everything in the detail view.
|
||||
|
||||
Example for an end2end check with many smaller test cases integrated:
|
||||
|
||||
```
|
||||
OK: Online banking works.
|
||||
Testcase 1: Site reached.
|
||||
Testcase 2: Attempted login, JS loads.
|
||||
Testcase 3: Login succeeded.
|
||||
Testcase 4: View current state works.
|
||||
Testcase 5: Transactions fine.
|
||||
```
|
||||
|
||||
If the extended output shouldn't be visible in your monitoring, but only for testing,
|
||||
it is recommended to implement the `--verbose` plugin parameter to allow
|
||||
developers and users to debug further. Check [here](05-service-monitoring.md#service-monitoring-plugin-api-verbose)
|
||||
for more implementation tips.
|
||||
|
||||
> **Tip**
|
||||
>
|
||||
> More debug output also helps when implementing your plugin.
|
||||
>
|
||||
> Best practice is to have the plugin parameter and handling implemented first,
|
||||
> then add it anywhere you want to see more, e.g. from initial database connections
|
||||
> to actual query results.
|
||||
|
||||
|
||||
#### Status <a id="service-monitoring-plugin-api-status"></a>
|
||||
|
||||
Value | Status | Description
|
||||
------|-----------|-------------------------------
|
||||
0 | OK | The check went fine and everything is considered working.
|
||||
1 | Warning | The check is above the given warning threshold, or anything else is suspicious requiring attention before it breaks.
|
||||
2 | Critical | The check exceeded the critical threshold, or something really is broken and will harm the production environment.
|
||||
3 | Unknown | Invalid parameters, low level resource errors (IO device busy, no fork resources, TCP sockets, etc.) preventing the actual check. Higher level errors such as DNS resolving, TCP connection timeouts should be treated as `Critical` instead. Whenever the plugin reaches its timeout (best practice) it should also terminate with `Unknown`.
|
||||
|
||||
Keep in mind that these are service states. Icinga automatically maps
|
||||
the [host state](03-monitoring-basics.md#check-result-state-mapping) from the returned plugin states.
|
||||
|
||||
#### Thresholds <a id="service-monitoring-plugin-api-thresholds"></a>
|
||||
|
||||
A plugin calculates specific values and may decide about the exit state on its own.
|
||||
This is done with thresholds - warning and critical values which are compared with
|
||||
the actual value. Upon this logic, the exit state is determined.
|
||||
|
||||
Imagine the following value and defined thresholds:
|
||||
|
||||
```
|
||||
ptc_value = 57.8
|
||||
|
||||
warning = 50
|
||||
critical = 60
|
||||
```
|
||||
|
||||
Whenever `ptc_value` is higher than warning or critical, it should return
|
||||
the appropriate [state](05-service-monitoring.md#service-monitoring-plugin-api-status).
|
||||
|
||||
The threshold evaluation order also is important:
|
||||
|
||||
* Critical thresholds are evaluated first and superseed everything else.
|
||||
* Warning thresholds are evaluated second
|
||||
* If no threshold is matched, return the OK state
|
||||
|
||||
Avoid using hardcoded threshold values in your plugins, always
|
||||
add them to the argument parser.
|
||||
|
||||
Example for Python:
|
||||
|
||||
```
|
||||
import argparse
|
||||
import signal
|
||||
import sys
|
||||
|
||||
if __name__ == '__main__':
|
||||
parser = argparse.ArgumentParser()
|
||||
|
||||
parser.add_argument("-w", "--warning", help="Warning threshold. Single value or range, e.g. '20:50'.")
|
||||
parser.add_argument("-c", "--critical", help="Critical threshold. Single vluae or range, e.g. '25:45'.")
|
||||
|
||||
args = parser.parse_args()
|
||||
```
|
||||
|
||||
Users might call plugins only with the critical threshold parameter,
|
||||
leaving out the warning parameter. Keep this in mind when evaluating
|
||||
the thresholds, always check if the parameters have been defined before.
|
||||
|
||||
```
|
||||
if args.critical:
|
||||
if ptc_value > args.critical:
|
||||
print("CRITICAL - ...")
|
||||
sys.exit(2) # Critical
|
||||
|
||||
if args.warning:
|
||||
if ptc_value > args.warning:
|
||||
print("WARNING - ...")
|
||||
sys.exit(1) # Warning
|
||||
|
||||
print("OK - ...")
|
||||
sys.exit(0) # OK
|
||||
```
|
||||
|
||||
The above is a simplified example for printing the [output](05-service-monitoring.md#service-monitoring-plugin-api-output)
|
||||
and using the [state](05-service-monitoring.md#service-monitoring-plugin-api-status)
|
||||
as exit code.
|
||||
|
||||
Before diving into the implementation, learn more about required
|
||||
[performance data metrics](05-service-monitoring.md#service-monitoring-plugin-api-performance-data-metrics)
|
||||
and more best practices below.
|
||||
|
||||
##### Threshold Ranges <a id="service-monitoring-plugin-api-thresholds-ranges"></a>
|
||||
|
||||
Threshold ranges can be used to specify an alert window, e.g. whenever a calculated
|
||||
value is between a lower and higher critical threshold.
|
||||
|
||||
The schema for threshold ranges looks as follows. The `@` character in square brackets
|
||||
is optional.
|
||||
|
||||
```
|
||||
[@]start:end
|
||||
```
|
||||
|
||||
There are a few requirements for ranges:
|
||||
|
||||
* `start <= end`. Add a check in your code and let the user know about problematic values.
|
||||
|
||||
```
|
||||
10:20 # OK
|
||||
|
||||
30:10 # Error
|
||||
```
|
||||
|
||||
* `start:` can be omitted if its value is 0. This is the default handling for single threshold values too.
|
||||
|
||||
```
|
||||
10 # Every value > 10 and < 0, outside of 0..10
|
||||
```
|
||||
|
||||
* If `end` is omitted, assume end is infinity.
|
||||
|
||||
```
|
||||
10: # < 10, outside of 10..∞
|
||||
```
|
||||
|
||||
* In order to specify negative infinity, use the `~` character.
|
||||
|
||||
```
|
||||
~:10 # > 10, outside of -∞..10
|
||||
```
|
||||
|
||||
* Raise alert if value is outside of the defined range.
|
||||
|
||||
```
|
||||
10:20 # < 10 or > 20, outside of 10..20
|
||||
```
|
||||
|
||||
* Start with `@` to raise an alert if the value is **inside** the defined range, inclusive start/end values.
|
||||
|
||||
```
|
||||
@10:20 # >= 10 and <= 20, inside of 10..20
|
||||
```
|
||||
|
||||
Best practice is to either implement single threshold values, or fully support ranges.
|
||||
This requires parsing the input parameter values, therefore look for existing libraries
|
||||
already providing this functionality.
|
||||
|
||||
[check_tinkerforge](https://github.com/NETWAYS/check_tinkerforge/blob/master/check_tinkerforge.py)
|
||||
implements a simple parser to avoid dependencies.
|
||||
|
||||
|
||||
#### Performance Data Metrics <a id="service-monitoring-plugin-api-performance-data-metrics"></a>
|
||||
|
||||
Performance data metrics must be appended to the plugin output with a preceding `|` character.
|
||||
The schema is as follows:
|
||||
|
||||
```
|
||||
<output> | 'label'=value[UOM];[warn];[crit];[min];[max]
|
||||
```
|
||||
|
||||
The label should be encapsulated with single quotes. Avoid spaces or special characters such
|
||||
as `%` in there, this could lead to problems with metric receivers such as Graphite.
|
||||
|
||||
Labels must not include `'` and `=` characters. Keep the label length as short and unique as possible.
|
||||
|
||||
Example:
|
||||
|
||||
```
|
||||
'load1'=4.7
|
||||
```
|
||||
|
||||
Values must respect the C/POSIX locale and not implement e.g. German locale for floating point numbers with `,`.
|
||||
Icinga sets `LC_NUMERIC=C` to enforce this locale on plugin execution.
|
||||
|
||||
##### Unit of Measurement (UOM) <a id="service-monitoring-plugin-api-performance-data-metrics-uom"></a>
|
||||
|
||||
Unit | Description
|
||||
---------|---------------------------------
|
||||
None | Integer or floating point number for any type (processes, users, etc.).
|
||||
`s` | Seconds, can be `s`, `ms`, `us`.
|
||||
`%` | Percentage.
|
||||
`B` | Bytes, can be `KB`, `MB`, `GB`, `TB`. Lowercase is also possible.
|
||||
`c` | A continuous counter (e.g. interface traffic counters).
|
||||
|
||||
Icinga metric writers normalize these values to the lowest common base, e.g. seconds and bytes.
|
||||
Bad plugins change the UOM for different sizing, e.g. returning the disk usage in MB and later GB
|
||||
for the same performance data label. This is to ensure that graphs always look the same.
|
||||
|
||||
```
|
||||
'rta'=12.445000ms 'pl'=0%
|
||||
```
|
||||
|
||||
##### Thresholds and Min/Max <a id="service-monitoring-plugin-api-performance-data-metrics-thresholds-min-max"></a>
|
||||
|
||||
Next to the performance data value, warn, crit, min, max can optionally be provided. They must be separated
|
||||
with the semi-colon `;` character. They share the same UOM with the performance data value.
|
||||
|
||||
```
|
||||
$ check_ping -4 -H icinga.com -c '200,15%' -w '100,5%'
|
||||
|
||||
PING OK - Packet loss = 0%, RTA = 12.44 ms|rta=12.445000ms;100.000000;200.000000;0.000000 pl=0%;5;15;0
|
||||
```
|
||||
|
||||
##### Multiple Performance Data Values <a id="service-monitoring-plugin-api-performance-data-metrics-multiple"></a>
|
||||
|
||||
Multiple performance data values must be joined with a space character. The below example
|
||||
is from the [check_load](10-icinga-template-library.md#plugin-check-command-load) plugin.
|
||||
|
||||
```
|
||||
load1=4.680;1.000;2.000;0; load5=0.000;5.000;10.000;0; load15=0.000;10.000;20.000;0;
|
||||
```
|
||||
|
||||
#### Timeout <a id="service-monitoring-plugin-api-timeout"></a>
|
||||
|
||||
Icinga has a safety mechanism where it kills processes running for too
|
||||
long. The timeout can be specified in [CheckCommand objects](09-object-types.md#objecttype-checkcommand)
|
||||
or on the host/service object.
|
||||
|
||||
Best practice is to control the timeout in the plugin itself
|
||||
and provide a clear message followed by the Unknown state.
|
||||
|
||||
Example in Python taken from [check_tinkerforge](https://github.com/NETWAYS/check_tinkerforge/blob/master/check_tinkerforge.py):
|
||||
|
||||
```
|
||||
import argparse
|
||||
import signal
|
||||
import sys
|
||||
|
||||
def handle_sigalrm(signum, frame, timeout=None):
|
||||
output('Plugin timed out after %d seconds' % timeout, 3)
|
||||
|
||||
if __name__ == '__main__':
|
||||
parser = argparse.ArgumentParser()
|
||||
# ... add more arguments
|
||||
parser.add_argument("-t", "--timeout", help="Timeout in seconds (default 10s)", type=int, default=10)
|
||||
args = parser.parse_args()
|
||||
|
||||
signal.signal(signal.SIGALRM, partial(handle_sigalrm, timeout=args.timeout))
|
||||
signal.alarm(args.timeout)
|
||||
|
||||
# ... perform the check and generate output/status
|
||||
```
|
||||
|
||||
#### Versions <a id="service-monitoring-plugin-api-versions"></a>
|
||||
|
||||
Plugins should provide a version via `-V` or `--version` parameter
|
||||
which is bumped on releases. This allows to identify problems with
|
||||
too old or new versions on the community support channels.
|
||||
|
||||
Example in Python taken from [check_tinkerforge](https://github.com/NETWAYS/check_tinkerforge/blob/master/check_tinkerforge.py):
|
||||
|
||||
```
|
||||
import argparse
|
||||
import signal
|
||||
import sys
|
||||
|
||||
__version__ = '0.9.1'
|
||||
|
||||
if __name__ == '__main__':
|
||||
parser = argparse.ArgumentParser()
|
||||
|
||||
parser.add_argument('-V', '--version', action='version', version='%(prog)s v' + sys.modules[__name__].__version__)
|
||||
```
|
||||
|
||||
#### Verbose <a id="service-monitoring-plugin-api-verbose"></a>
|
||||
|
||||
Plugins should provide a verbose mode with `-v` or `--verbose` in order
|
||||
to show more detailed log messages. This helps to debug and analyse the
|
||||
flow and execution steps inside the plugin.
|
||||
|
||||
Ensure to add the parameter prior to implementing the check logic into
|
||||
the plugin.
|
||||
|
||||
Example in Python taken from [check_tinkerforge](https://github.com/NETWAYS/check_tinkerforge/blob/master/check_tinkerforge.py):
|
||||
|
||||
```
|
||||
import argparse
|
||||
import signal
|
||||
import sys
|
||||
|
||||
if __name__ == '__main__':
|
||||
parser = argparse.ArgumentParser()
|
||||
|
||||
parser.add_argument('-v', '--verbose', action='store_true')
|
||||
|
||||
if args.verbose:
|
||||
print("Verbose debug output")
|
||||
```
|
||||
|
||||
|
||||
### Create a new Plugin <a id="service-monitoring-plugin-new"></a>
|
||||
|
||||
@ -113,42 +774,55 @@ its output/exit code and return your specified output/exit code.
|
||||
On the other hand plugins for specific services and hardware might not yet
|
||||
exist.
|
||||
|
||||
Common best practices when creating a new plugin are for example:
|
||||
> **Tip**
|
||||
>
|
||||
> Watch this presentation from Icinga Camp Berlin to learn more
|
||||
> about [How to write checks that don't suck](https://www.youtube.com/watch?v=Ey_APqSCoFQ).
|
||||
|
||||
Common best practices:
|
||||
|
||||
* Choose the programming language wisely
|
||||
* Scripting languages (Bash, Python, Perl, Ruby, PHP, etc.) are easier to write and setup but their check execution might take longer (invoking the script interpreter as overhead, etc.).
|
||||
* Plugins written in C/C++, Go, etc. improve check execution time but may generate an overhead with installation and packaging.
|
||||
* Use a modern VCS such as Git for developing the plugin (e.g. share your plugin on GitHub).
|
||||
* Use a modern VCS such as Git for developing the plugin, e.g. share your plugin on GitHub and let it sync to [Icinga Exchange](https://exchange.icinga.com).
|
||||
* **Look into existing plugins endorsed by community members.**
|
||||
|
||||
Implementation hints:
|
||||
|
||||
* Add parameters with key-value pairs to your plugin. They should allow long names (e.g. `--host localhost`) and also short parameters (e.g. `-H localhost`)
|
||||
* `-h|--help` should print the version and all details about parameters and runtime invocation.
|
||||
* Add a verbose/debug output functionality for detailed on-demand logging.
|
||||
* `-h|--help` should print the version and all details about parameters and runtime invocation. Note: Python's ArgParse class provides this OOTB.
|
||||
* `--version` should print the plugin [version](05-service-monitoring.md#service-monitoring-plugin-api-versions).
|
||||
* Add a [verbose/debug output](05-service-monitoring.md#service-monitoring-plugin-api-verbose) functionality for detailed on-demand logging.
|
||||
* Respect the exit codes required by the [Plugin API](05-service-monitoring.md#service-monitoring-plugin-api).
|
||||
* Always add performance data to your plugin output
|
||||
* Always add [performance data](05-service-monitoring.md#service-monitoring-plugin-api-performance-data-metrics) to your plugin output.
|
||||
* Allow to specify [warning/critical thresholds](05-service-monitoring.md#service-monitoring-plugin-api-thresholds) as parameters.
|
||||
|
||||
Example skeleton:
|
||||
|
||||
# 1. include optional libraries
|
||||
# 2. global variables
|
||||
# 3. helper functions and/or classes
|
||||
# 4. define timeout condition
|
||||
```
|
||||
# 1. include optional libraries
|
||||
# 2. global variables
|
||||
# 3. helper functions and/or classes
|
||||
# 4. define timeout condition
|
||||
|
||||
if (<timeout_reached>) then
|
||||
print "UNKNOWN - Timeout (...) reached | 'time'=30.0
|
||||
endif
|
||||
if (<timeout_reached>) then
|
||||
print "UNKNOWN - Timeout (...) reached | 'time'=30.0
|
||||
endif
|
||||
|
||||
# 5. main method
|
||||
# 5. main method
|
||||
|
||||
<execute and fetch data>
|
||||
<execute and fetch data>
|
||||
|
||||
if (<threshold_critical_condition>) then
|
||||
print "CRITICAL - ... | 'time'=0.1 'myperfdatavalue'=5.0
|
||||
exit(2)
|
||||
else if (<threshold_warning_condition>) then
|
||||
print "WARNING - ... | 'time'=0.1 'myperfdatavalue'=3.0
|
||||
exit(1)
|
||||
else
|
||||
print "OK - ... | 'time'=0.2 'myperfdatavalue'=1.0
|
||||
endif
|
||||
if (<threshold_critical_condition>) then
|
||||
print "CRITICAL - ... | 'time'=0.1 'myperfdatavalue'=5.0
|
||||
exit(2)
|
||||
else if (<threshold_warning_condition>) then
|
||||
print "WARNING - ... | 'time'=0.1 'myperfdatavalue'=3.0
|
||||
exit(1)
|
||||
else
|
||||
print "OK - ... | 'time'=0.2 'myperfdatavalue'=1.0
|
||||
endif
|
||||
```
|
||||
|
||||
There are various plugin libraries available which will help
|
||||
with plugin execution and output formatting too, for example
|
||||
@ -162,12 +836,17 @@ with plugin execution and output formatting too, for example
|
||||
Once you've finished your plugin please upload/sync it to [Icinga Exchange](https://exchange.icinga.com/new).
|
||||
Thanks in advance!
|
||||
|
||||
|
||||
## Service Monitoring Overview <a id="service-monitoring-overview"></a>
|
||||
|
||||
The following examples should help you to start implementing your own ideas.
|
||||
There is a variety of plugins available. This collection is not complete --
|
||||
if you have any updates, please send a documentation patch upstream.
|
||||
|
||||
Please visit our [community forum](https://community.icinga.com) which
|
||||
may provide an answer to your use case already. If not, do not hesitate
|
||||
to create a new topic.
|
||||
|
||||
### General Monitoring <a id="service-monitoring-general"></a>
|
||||
|
||||
If the remote service is available (via a network protocol and port),
|
||||
@ -226,11 +905,13 @@ Instead, choose a plugin and configure its parameters and thresholds. The follow
|
||||
* [ftp](10-icinga-template-library.md#plugin-check-command-ftp)
|
||||
* [webinject](10-icinga-template-library.md#plugin-contrib-command-webinject)
|
||||
* [squid](10-icinga-template-library.md#plugin-contrib-command-squid)
|
||||
* [apache_status](10-icinga-template-library.md#plugin-contrib-command-apache_status)
|
||||
* [apache-status](10-icinga-template-library.md#plugin-contrib-command-apache-status)
|
||||
* [nginx_status](10-icinga-template-library.md#plugin-contrib-command-nginx_status)
|
||||
* [kdc](10-icinga-template-library.md#plugin-contrib-command-kdc)
|
||||
* [rbl](10-icinga-template-library.md#plugin-contrib-command-rbl)
|
||||
|
||||
* [Icinga Certificate Monitoring](https://icinga.com/products/icinga-certificate-monitoring/)
|
||||
|
||||
### Java Monitoring <a id="service-monitoring-java"></a>
|
||||
|
||||
* [jmx4perl](10-icinga-template-library.md#plugin-contrib-command-jmx4perl)
|
||||
@ -255,11 +936,14 @@ Instead, choose a plugin and configure its parameters and thresholds. The follow
|
||||
|
||||
### VMware Monitoring <a id="service-monitoring-virtualization-vmware"></a>
|
||||
|
||||
* [Icinga Module for vSphere](https://icinga.com/products/icinga-module-for-vsphere/)
|
||||
* [esxi_hardware](10-icinga-template-library.md#plugin-contrib-command-esxi-hardware)
|
||||
* [VMware](10-icinga-template-library.md#plugin-contrib-vmware)
|
||||
|
||||
**Tip**: If you are encountering timeouts using the VMware Perl SDK,
|
||||
check [this blog entry](https://www.claudiokuenzler.com/blog/650/slow-vmware-perl-sdk-soap-request-error-libwww-version).
|
||||
Ubuntu 16.04 LTS can have troubles with random entropy in Perl asked [here](https://monitoring-portal.org/t/check-vmware-api-slow-when-run-multiple-times/2868).
|
||||
In that case, [haveged](http://issihosts.com/haveged/) may help.
|
||||
|
||||
### SAP Monitoring <a id="service-monitoring-sap"></a>
|
||||
|
||||
|
@ -1,181 +1,221 @@
|
||||
# Additional Agent-based Checks <a id="agent-based-checks-addon"></a>
|
||||
# Agent-based Checks <a id="agent-based-checks-addon"></a>
|
||||
|
||||
If the remote services are not directly accessible through the network, a
|
||||
local agent installation exposing the results to check queries can
|
||||
become handy.
|
||||
|
||||
Prior to installing and configuration an agent service, evaluate possible
|
||||
options based on these requirements:
|
||||
|
||||
* Security (authentication, TLS certificates, secure connection handling, etc.)
|
||||
* Connection direction
|
||||
* Master/satellite can execute commands directly or
|
||||
* Agent sends back passive/external check results
|
||||
* Availability on specific OS types and versions
|
||||
* Packages available
|
||||
* Configuration and initial setup
|
||||
* Updates and maintenance, compatibility
|
||||
|
||||
Available agent types:
|
||||
|
||||
* [Icinga Agent](07-agent-based-monitoring.md#agent-based-checks-icinga) on Linux/Unix and Windows
|
||||
* [SSH](07-agent-based-monitoring.md#agent-based-checks-ssh) on Linux/Unix
|
||||
* [SNMP](07-agent-based-monitoring.md#agent-based-checks-snmp) on Linux/Unix and hardware
|
||||
* [SNMP Traps](07-agent-based-monitoring.md#agent-based-checks-snmp-traps) as passive check results
|
||||
* [REST API](07-agent-based-monitoring.md#agent-based-checks-rest-api) for passive external check results
|
||||
* [NSClient++](07-agent-based-monitoring.md#agent-based-checks-nsclient) and [WMI](07-agent-based-monitoring.md#agent-based-checks-wmi) on Windows
|
||||
|
||||
|
||||
## Icinga Agent <a id="agent-based-checks-icinga"></a>
|
||||
|
||||
For the most common setups on Linux/Unix and Windows, we recommend
|
||||
to setup the Icinga agent in a [distributed environment](06-distributed-monitoring.md#distributed-monitoring).
|
||||
|
||||

|
||||
|
||||
Key benefits:
|
||||
|
||||
* Directly integrated into the distributed monitoring stack of Icinga
|
||||
* Works on Linux/Unix and Windows
|
||||
* Secure communication with TLS
|
||||
* Connection can be established from both sides. Once connected, command execution and check results are exchanged.
|
||||
* Master/satellite connects to agent
|
||||
* Agent connects to parent satellite/master
|
||||
* Same configuration language and binaries
|
||||
* Troubleshooting docs and community best practices
|
||||
|
||||
Follow the setup and configuration instructions [here](06-distributed-monitoring.md#distributed-monitoring-setup-agent-satellite).
|
||||
|
||||
On Windows hosts, the Icinga agent can query a local NSClient++ service
|
||||
for additional checks in case there are no plugins available. The NSCP
|
||||
installer is bundled with Icinga and can be installed with the setup wizard.
|
||||
|
||||

|
||||
|
||||
## SSH <a id="agent-based-checks-ssh"></a>
|
||||
|
||||
> **Tip**
|
||||
>
|
||||
> This is the recommended way for systems where the Icinga agent is not available
|
||||
> Be it specific hardware architectures, old systems or forbidden to install an additional software.
|
||||
|
||||
This method uses the SSH service on the remote host to execute
|
||||
an arbitrary plugin command line. The output and exit code is
|
||||
returned and used by the core.
|
||||
|
||||
The `check_by_ssh` plugin takes care of this. It is available in the
|
||||
[Monitoring Plugins package](02-installation.md#setting-up-check-plugins).
|
||||
For your convenience, the Icinga template library provides the [by_ssh](10-icinga-template-library.md#plugin-check-command-by-ssh)
|
||||
CheckCommand already.
|
||||
|
||||
### SSH: Preparations <a id="agent-based-checks-ssh-preparations"></a>
|
||||
|
||||
SSH key pair for the Icinga daemon user. In case the user has no shell, temporarily enable this.
|
||||
When asked for a passphrase, **do not set it** and press enter.
|
||||
|
||||
```
|
||||
sudo su - icinga
|
||||
|
||||
ssh-keygen -b 4096 -t rsa -C "icinga@$(hostname) user for check_by_ssh" -f $HOME/.ssh/id_rsa
|
||||
```
|
||||
|
||||
On the remote agent, create the icinga user and generate a temporary password.
|
||||
|
||||
```
|
||||
useradd -m icinga
|
||||
passwd icinga
|
||||
```
|
||||
|
||||
Copy the public key from the Icinga server to the remote agent, e.g. with `ssh-copy-id`
|
||||
or manually into `/home/icinga/.ssh/authorized_keys`.
|
||||
This will ask for the password once.
|
||||
|
||||
```
|
||||
sudo su - icinga
|
||||
|
||||
ssh-copy-id -i $HOME/.ssh/id_rsa icinga@ssh-agent1.localdomain
|
||||
```
|
||||
|
||||
After the SSH key is copied, test at the connection **at least once** and
|
||||
accept the host key verification. If you forget about this step, checks will
|
||||
become UNKNOWN later.
|
||||
|
||||
```
|
||||
ssh -i $HOME/.ssh/id_rsa icinga@ssh-agent1.localdomain
|
||||
```
|
||||
|
||||
After the SSH key login works, disable the previously enabled logins.
|
||||
|
||||
* Remote agent user's password with `passwd -l icinga`
|
||||
* Local icinga user terminal
|
||||
|
||||
Also, ensure that the permissions are correct for the `.ssh` directory
|
||||
as otherwise logins will fail.
|
||||
|
||||
* `.ssh` directory: 700
|
||||
* `.ssh/id_rsa.pub` public key file: 644
|
||||
* `.ssh/id_rsa` private key file: 600
|
||||
|
||||
|
||||
### SSH: Configuration <a id="agent-based-checks-ssh-config"></a>
|
||||
|
||||
First, create a host object which has SSH configured and enabled.
|
||||
Mark this e.g. with the custom variable `agent_type` to later
|
||||
use this for service apply rule matches. Best practice is to
|
||||
store that in a specific template, either in the static configuration
|
||||
or inside the Director.
|
||||
|
||||
```
|
||||
template Host "ssh-agent" {
|
||||
check_command = "hostalive"
|
||||
|
||||
vars.agent_type = "ssh"
|
||||
vars.os_type = "linux"
|
||||
}
|
||||
|
||||
object Host "ssh-agent1.localdomain" {
|
||||
import "ssh-agent"
|
||||
|
||||
address = "192.168.56.115"
|
||||
}
|
||||
```
|
||||
|
||||
Example for monitoring the remote users:
|
||||
|
||||
```
|
||||
apply Service "users" {
|
||||
check_command = "by_ssh"
|
||||
|
||||
vars.by_ssh_command = [ "/usr/lib/nagios/plugins/check_users" ]
|
||||
|
||||
// Follows the same principle as with command arguments, e.g. for ordering
|
||||
vars.by_ssh_arguments = {
|
||||
"-w" = {
|
||||
value = "$users_wgreater$" // Can reference an existing custom variable defined on the host or service, evaluated at runtime
|
||||
}
|
||||
"-c" = {
|
||||
value = "$users_cgreater$"
|
||||
}
|
||||
}
|
||||
|
||||
vars.users_wgreater = 3
|
||||
vars.users_cgreater = 5
|
||||
|
||||
assign where host.vars.os_type == "linux" && host.vars.agent_type == "ssh"
|
||||
}
|
||||
```
|
||||
|
||||
A more advanced example with better arguments is shown in [this blogpost](https://www.netways.de/blog/2016/03/21/check_by_ssh-mit-icinga-2/).
|
||||
|
||||
|
||||
## SNMP <a id="agent-based-checks-snmp"></a>
|
||||
|
||||
The SNMP daemon runs on the remote system and answers SNMP queries by plugin
|
||||
binaries. The [Monitoring Plugins package](02-getting-started.md#setting-up-check-plugins) ships
|
||||
The SNMP daemon runs on the remote system and answers SNMP queries by plugin scripts.
|
||||
The [Monitoring Plugins package](02-installation.md#setting-up-check-plugins) provides
|
||||
the `check_snmp` plugin binary, but there are plenty of [existing plugins](05-service-monitoring.md#service-monitoring-plugins)
|
||||
for specific use cases already around, for example monitoring Cisco routers.
|
||||
|
||||
The following example uses the [SNMP ITL](10-icinga-template-library.md#plugin-check-command-snmp) `CheckCommand` and just
|
||||
overrides the `snmp_oid` custom attribute. A service is created for all hosts which
|
||||
have the `snmp-community` custom attribute.
|
||||
The following example uses the [SNMP ITL](10-icinga-template-library.md#plugin-check-command-snmp)
|
||||
CheckCommand and sets the `snmp_oid` custom variable. A service is created for all hosts which
|
||||
have the `snmp-community` custom variable.
|
||||
|
||||
apply Service "uptime" {
|
||||
import "generic-service"
|
||||
```
|
||||
template Host "snmp-agent" {
|
||||
check_command = "hostalive"
|
||||
|
||||
check_command = "snmp"
|
||||
vars.snmp_oid = "1.3.6.1.2.1.1.3.0"
|
||||
vars.snmp_miblist = "DISMAN-EVENT-MIB"
|
||||
vars.agent_type = "snmp"
|
||||
|
||||
assign where host.vars.snmp_community != ""
|
||||
}
|
||||
vars.snmp_community = "public-icinga"
|
||||
}
|
||||
|
||||
Additional SNMP plugins are available using the [Manubulon SNMP Plugins](10-icinga-template-library.md#snmp-manubulon-plugin-check-commands).
|
||||
object Host "snmp-agent1.localdomain" {
|
||||
import "snmp-agent"
|
||||
}
|
||||
```
|
||||
|
||||
```
|
||||
apply Service "uptime" {
|
||||
import "generic-service"
|
||||
|
||||
check_command = "snmp"
|
||||
vars.snmp_oid = "1.3.6.1.2.1.1.3.0"
|
||||
vars.snmp_miblist = "DISMAN-EVENT-MIB"
|
||||
|
||||
assign where host.vars.agent_type == "snmp" && host.vars.snmp_community != ""
|
||||
}
|
||||
```
|
||||
|
||||
If no `snmp_miblist` is specified, the plugin will default to `ALL`. As the number of available MIB files
|
||||
on the system increases so will the load generated by this plugin if no `MIB` is specified.
|
||||
As such, it is recommended to always specify at least one `MIB`.
|
||||
|
||||
## SSH <a id="agent-based-checks-ssh"></a>
|
||||
Additional SNMP plugins are available using the [Manubulon SNMP Plugins](10-icinga-template-library.md#snmp-manubulon-plugin-check-commands).
|
||||
|
||||
Calling a plugin using the SSH protocol to execute a plugin on the remote server fetching
|
||||
its return code and output. The `by_ssh` command object is part of the built-in templates and
|
||||
requires the `check_by_ssh` check plugin which is available in the [Monitoring Plugins package](02-getting-started.md#setting-up-check-plugins).
|
||||
|
||||
object CheckCommand "by_ssh_swap" {
|
||||
import "by_ssh"
|
||||
|
||||
vars.by_ssh_command = "/usr/lib/nagios/plugins/check_swap -w $by_ssh_swap_warn$ -c $by_ssh_swap_crit$"
|
||||
vars.by_ssh_swap_warn = "75%"
|
||||
vars.by_ssh_swap_crit = "50%"
|
||||
}
|
||||
|
||||
object Service "swap" {
|
||||
import "generic-service"
|
||||
|
||||
host_name = "remote-ssh-host"
|
||||
|
||||
check_command = "by_ssh_swap"
|
||||
|
||||
vars.by_ssh_logname = "icinga"
|
||||
}
|
||||
|
||||
## NSClient++ <a id="agent-based-checks-nsclient"></a>
|
||||
|
||||
[NSClient++](https://nsclient.org/) works on both Windows and Linux platforms and is well
|
||||
known for its magnificent Windows support. There are alternatives like the WMI interface,
|
||||
but using `NSClient++` will allow you to run local scripts similar to check plugins fetching
|
||||
the required output and performance counters.
|
||||
|
||||
You can use the `check_nt` plugin from the Monitoring Plugins project to query NSClient++.
|
||||
Icinga 2 provides the [nscp check command](10-icinga-template-library.md#plugin-check-command-nscp) for this:
|
||||
|
||||
Example:
|
||||
|
||||
object Service "disk" {
|
||||
import "generic-service"
|
||||
|
||||
host_name = "remote-windows-host"
|
||||
|
||||
check_command = "nscp"
|
||||
|
||||
vars.nscp_variable = "USEDDISKSPACE"
|
||||
vars.nscp_params = "c"
|
||||
vars.nscp_warn = 70
|
||||
vars.nscp_crit = 80
|
||||
}
|
||||
|
||||
For details on the `NSClient++` configuration please refer to the [official documentation](https://docs.nsclient.org/).
|
||||
|
||||
## NSCA-NG <a id="agent-based-checks-nsca-ng"></a>
|
||||
|
||||
[NSCA-ng](http://www.nsca-ng.org) provides a client-server pair that allows the
|
||||
remote sender to push check results into the Icinga 2 `ExternalCommandListener`
|
||||
feature.
|
||||
|
||||
> **Note**
|
||||
>
|
||||
> This addon works in a similar fashion like the Icinga 1.x distributed model. If you
|
||||
> are looking for a real distributed architecture with Icinga 2, scroll down.
|
||||
|
||||
## NRPE <a id="agent-based-checks-nrpe"></a>
|
||||
|
||||
[NRPE](https://docs.icinga.com/latest/en/nrpe.html) runs as daemon on the remote client including
|
||||
the required plugins and command definitions.
|
||||
Icinga 2 calls the `check_nrpe` plugin binary in order to query the configured command on the
|
||||
remote client.
|
||||
|
||||
> **Note**
|
||||
>
|
||||
> The NRPE protocol is considered insecure and has multiple flaws in its
|
||||
> design. Upstream is not willing to fix these issues.
|
||||
>
|
||||
> In order to stay safe, please use the native [Icinga 2 client](06-distributed-monitoring.md#distributed-monitoring)
|
||||
> instead.
|
||||
|
||||
The NRPE daemon uses its own configuration format in nrpe.cfg while `check_nrpe`
|
||||
can be embedded into the Icinga 2 `CheckCommand` configuration syntax.
|
||||
|
||||
You can use the `check_nrpe` plugin from the NRPE project to query the NRPE daemon.
|
||||
Icinga 2 provides the [nrpe check command](10-icinga-template-library.md#plugin-check-command-nrpe) for this:
|
||||
|
||||
Example:
|
||||
|
||||
object Service "users" {
|
||||
import "generic-service"
|
||||
|
||||
host_name = "remote-nrpe-host"
|
||||
|
||||
check_command = "nrpe"
|
||||
vars.nrpe_command = "check_users"
|
||||
}
|
||||
|
||||
nrpe.cfg:
|
||||
|
||||
command[check_users]=/usr/local/icinga/libexec/check_users -w 5 -c 10
|
||||
|
||||
If you are planning to pass arguments to NRPE using the `-a`
|
||||
command line parameter, make sure that your NRPE daemon has them
|
||||
supported and enabled.
|
||||
|
||||
> **Note**
|
||||
>
|
||||
> Enabling command arguments in NRPE is considered harmful
|
||||
> and exposes a security risk allowing attackers to execute
|
||||
> commands remotely. Details at [seclists.org](http://seclists.org/fulldisclosure/2014/Apr/240).
|
||||
|
||||
The plugin check command `nrpe` provides the `nrpe_arguments` custom
|
||||
attribute which expects either a single value or an array of values.
|
||||
|
||||
Example:
|
||||
|
||||
object Service "nrpe-disk-/" {
|
||||
import "generic-service"
|
||||
|
||||
host_name = "remote-nrpe-host"
|
||||
|
||||
check_command = "nrpe"
|
||||
vars.nrpe_command = "check_disk"
|
||||
vars.nrpe_arguments = [ "20%", "10%", "/" ]
|
||||
}
|
||||
|
||||
Icinga 2 will execute the nrpe plugin like this:
|
||||
|
||||
/usr/lib/nagios/plugins/check_nrpe -H <remote-nrpe-host> -c 'check_disk' -a '20%' '10%' '/'
|
||||
|
||||
NRPE expects all additional arguments in an ordered fashion
|
||||
and interprets the first value as `$ARG1$` macro, the second
|
||||
value as `$ARG2$`, and so on.
|
||||
|
||||
nrpe.cfg:
|
||||
|
||||
command[check_disk]=/usr/local/icinga/libexec/check_disk -w $ARG1$ -c $ARG2$ -p $ARG3$
|
||||
|
||||
Using the above example with `nrpe_arguments` the command
|
||||
executed by the NRPE daemon looks similar to that:
|
||||
|
||||
/usr/local/icinga/libexec/check_disk -w 20% -c 10% -p /
|
||||
|
||||
You can pass arguments in a similar manner to [NSClient++](07-agent-based-monitoring.md#agent-based-checks-nsclient)
|
||||
when using its NRPE supported check method.
|
||||
For network monitoring, community members advise to use [nwc_health](05-service-monitoring.md#service-monitoring-network)
|
||||
for example.
|
||||
|
||||
|
||||
## Passive Check Results and SNMP Traps <a id="agent-based-checks-snmp-traps"></a>
|
||||
## SNMP Traps and Passive Check Results <a id="agent-based-checks-snmp-traps"></a>
|
||||
|
||||
SNMP Traps can be received and filtered by using [SNMPTT](http://snmptt.sourceforge.net/)
|
||||
and specific trap handlers passing the check results to Icinga 2.
|
||||
@ -193,14 +233,16 @@ state or from a missed reset event.
|
||||
|
||||
Add a directive in `snmptt.conf`
|
||||
|
||||
EVENT coldStart .1.3.6.1.6.3.1.1.5.1 "Status Events" Normal
|
||||
FORMAT Device reinitialized (coldStart)
|
||||
EXEC echo "[$@] PROCESS_SERVICE_CHECK_RESULT;$A;Coldstart;2;The snmp agent has reinitialized." >> /var/run/icinga2/cmd/icinga2.cmd
|
||||
SDESC
|
||||
A coldStart trap signifies that the SNMPv2 entity, acting
|
||||
in an agent role, is reinitializing itself and that its
|
||||
configuration may have been altered.
|
||||
EDESC
|
||||
```
|
||||
EVENT coldStart .1.3.6.1.6.3.1.1.5.1 "Status Events" Normal
|
||||
FORMAT Device reinitialized (coldStart)
|
||||
EXEC echo "[$@] PROCESS_SERVICE_CHECK_RESULT;$A;Coldstart;2;The snmp agent has reinitialized." >> /var/run/icinga2/cmd/icinga2.cmd
|
||||
SDESC
|
||||
A coldStart trap signifies that the SNMPv2 entity, acting
|
||||
in an agent role, is reinitializing itself and that its
|
||||
configuration may have been altered.
|
||||
EDESC
|
||||
```
|
||||
|
||||
1. Define the `EVENT` as per your need.
|
||||
2. Construct the `EXEC` statement with the service name matching your template
|
||||
@ -208,107 +250,123 @@ applied to your _n_ hosts. The host address inferred by SNMPTT will be the
|
||||
correlating factor. You can have snmptt provide host names or ip addresses to
|
||||
match your Icinga convention.
|
||||
|
||||
> **Note**
|
||||
>
|
||||
> Replace the deprecated command pipe EXEC statement with a curl call
|
||||
> to the REST API action [process-check-result](12-icinga2-api.md#icinga2-api-actions-process-check-result).
|
||||
|
||||
Add an `EventCommand` configuration object for the passive service auto reset event.
|
||||
|
||||
object EventCommand "coldstart-reset-event" {
|
||||
command = [ SysconfDir + "/icinga2/conf.d/custom/scripts/coldstart_reset_event.sh" ]
|
||||
```
|
||||
object EventCommand "coldstart-reset-event" {
|
||||
command = [ ConfigDir + "/conf.d/custom/scripts/coldstart_reset_event.sh" ]
|
||||
|
||||
arguments = {
|
||||
"-i" = "$service.state_id$"
|
||||
"-n" = "$host.name$"
|
||||
"-s" = "$service.name$"
|
||||
}
|
||||
}
|
||||
arguments = {
|
||||
"-i" = "$service.state_id$"
|
||||
"-n" = "$host.name$"
|
||||
"-s" = "$service.name$"
|
||||
}
|
||||
}
|
||||
```
|
||||
|
||||
Create the `coldstart_reset_event.sh` shell script to pass the expanded variable
|
||||
data in. The `$service.state_id$` is important in order to prevent an endless loop
|
||||
of event firing after the service has been reset.
|
||||
|
||||
#!/bin/bash
|
||||
```
|
||||
#!/bin/bash
|
||||
|
||||
SERVICE_STATE_ID=""
|
||||
HOST_NAME=""
|
||||
SERVICE_NAME=""
|
||||
SERVICE_STATE_ID=""
|
||||
HOST_NAME=""
|
||||
SERVICE_NAME=""
|
||||
|
||||
show_help()
|
||||
{
|
||||
cat <<-EOF
|
||||
Usage: ${0##*/} [-h] -n HOST_NAME -s SERVICE_NAME
|
||||
Writes a coldstart reset event to the Icinga command pipe.
|
||||
show_help()
|
||||
{
|
||||
cat <<-EOF
|
||||
Usage: ${0##*/} [-h] -n HOST_NAME -s SERVICE_NAME
|
||||
Writes a coldstart reset event to the Icinga command pipe.
|
||||
|
||||
-h Display this help and exit.
|
||||
-i SERVICE_STATE_ID The associated service state id.
|
||||
-n HOST_NAME The associated host name.
|
||||
-s SERVICE_NAME The associated service name.
|
||||
EOF
|
||||
}
|
||||
-h Display this help and exit.
|
||||
-i SERVICE_STATE_ID The associated service state id.
|
||||
-n HOST_NAME The associated host name.
|
||||
-s SERVICE_NAME The associated service name.
|
||||
EOF
|
||||
}
|
||||
|
||||
while getopts "hi:n:s:" opt; do
|
||||
case "$opt" in
|
||||
h)
|
||||
show_help
|
||||
exit 0
|
||||
;;
|
||||
i)
|
||||
SERVICE_STATE_ID=$OPTARG
|
||||
;;
|
||||
n)
|
||||
HOST_NAME=$OPTARG
|
||||
;;
|
||||
s)
|
||||
SERVICE_NAME=$OPTARG
|
||||
;;
|
||||
'?')
|
||||
show_help
|
||||
exit 0
|
||||
;;
|
||||
esac
|
||||
done
|
||||
while getopts "hi:n:s:" opt; do
|
||||
case "$opt" in
|
||||
h)
|
||||
show_help
|
||||
exit 0
|
||||
;;
|
||||
i)
|
||||
SERVICE_STATE_ID=$OPTARG
|
||||
;;
|
||||
n)
|
||||
HOST_NAME=$OPTARG
|
||||
;;
|
||||
s)
|
||||
SERVICE_NAME=$OPTARG
|
||||
;;
|
||||
'?')
|
||||
show_help
|
||||
exit 0
|
||||
;;
|
||||
esac
|
||||
done
|
||||
|
||||
if [ -z "$SERVICE_STATE_ID" ]; then
|
||||
show_help
|
||||
printf "\n Error: -i required.\n"
|
||||
exit 1
|
||||
fi
|
||||
if [ -z "$SERVICE_STATE_ID" ]; then
|
||||
show_help
|
||||
printf "\n Error: -i required.\n"
|
||||
exit 1
|
||||
fi
|
||||
|
||||
if [ -z "$HOST_NAME" ]; then
|
||||
show_help
|
||||
printf "\n Error: -n required.\n"
|
||||
exit 1
|
||||
fi
|
||||
if [ -z "$HOST_NAME" ]; then
|
||||
show_help
|
||||
printf "\n Error: -n required.\n"
|
||||
exit 1
|
||||
fi
|
||||
|
||||
if [ -z "$SERVICE_NAME" ]; then
|
||||
show_help
|
||||
printf "\n Error: -s required.\n"
|
||||
exit 1
|
||||
fi
|
||||
if [ -z "$SERVICE_NAME" ]; then
|
||||
show_help
|
||||
printf "\n Error: -s required.\n"
|
||||
exit 1
|
||||
fi
|
||||
|
||||
if [ "$SERVICE_STATE_ID" -gt 0 ]; then
|
||||
echo "[`date +%s`] PROCESS_SERVICE_CHECK_RESULT;$HOST_NAME;$SERVICE_NAME;0;Auto-reset (`date +"%m-%d-%Y %T"`)." >> /var/run/icinga2/cmd/icinga2.cmd
|
||||
fi
|
||||
if [ "$SERVICE_STATE_ID" -gt 0 ]; then
|
||||
echo "[`date +%s`] PROCESS_SERVICE_CHECK_RESULT;$HOST_NAME;$SERVICE_NAME;0;Auto-reset (`date +"%m-%d-%Y %T"`)." >> /var/run/icinga2/cmd/icinga2.cmd
|
||||
fi
|
||||
```
|
||||
|
||||
> **Note**
|
||||
>
|
||||
> Replace the deprecated command pipe EXEC statement with a curl call
|
||||
> to the REST API action [process-check-result](12-icinga2-api.md#icinga2-api-actions-process-check-result).
|
||||
|
||||
Finally create the `Service` and assign it:
|
||||
|
||||
apply Service "Coldstart" {
|
||||
import "generic-service-custom"
|
||||
```
|
||||
apply Service "Coldstart" {
|
||||
import "generic-service-custom"
|
||||
|
||||
check_command = "dummy"
|
||||
event_command = "coldstart-reset-event"
|
||||
check_command = "dummy"
|
||||
event_command = "coldstart-reset-event"
|
||||
|
||||
enable_notifications = 1
|
||||
enable_active_checks = 0
|
||||
enable_passive_checks = 1
|
||||
enable_flapping = 0
|
||||
volatile = 1
|
||||
enable_perfdata = 0
|
||||
enable_notifications = 1
|
||||
enable_active_checks = 0
|
||||
enable_passive_checks = 1
|
||||
enable_flapping = 0
|
||||
volatile = 1
|
||||
enable_perfdata = 0
|
||||
|
||||
vars.dummy_state = 0
|
||||
vars.dummy_text = "Manual reset."
|
||||
vars.dummy_state = 0
|
||||
vars.dummy_text = "Manual reset."
|
||||
|
||||
vars.sla = "24x7"
|
||||
vars.sla = "24x7"
|
||||
|
||||
assign where (host.vars.os == "Linux" || host.vars.os == "Windows")
|
||||
}
|
||||
assign where (host.vars.os == "Linux" || host.vars.os == "Windows")
|
||||
}
|
||||
```
|
||||
|
||||
### Complex SNMP Traps <a id="complex-traps"></a>
|
||||
|
||||
@ -321,39 +379,109 @@ As long as the most recent passive update has occurred, the active check is bypa
|
||||
|
||||
Add a directive in `snmptt.conf`
|
||||
|
||||
EVENT enterpriseSpecific <YOUR OID> "Status Events" Normal
|
||||
FORMAT Enterprise specific trap
|
||||
EXEC echo "[$@] PROCESS_SERVICE_CHECK_RESULT;$A;$1;$2;$3" >> /var/run/icinga2/cmd/icinga2.cmd
|
||||
SDESC
|
||||
An enterprise specific trap.
|
||||
The varbinds in order denote the Icinga service name, state and text.
|
||||
EDESC
|
||||
```
|
||||
EVENT enterpriseSpecific <YOUR OID> "Status Events" Normal
|
||||
FORMAT Enterprise specific trap
|
||||
EXEC echo "[$@] PROCESS_SERVICE_CHECK_RESULT;$A;$1;$2;$3" >> /var/run/icinga2/cmd/icinga2.cmd
|
||||
SDESC
|
||||
An enterprise specific trap.
|
||||
The varbinds in order denote the Icinga service name, state and text.
|
||||
EDESC
|
||||
```
|
||||
|
||||
1. Define the `EVENT` as per your need using your actual oid.
|
||||
2. The service name, state and text are extracted from the first three varbinds.
|
||||
This has the advantage of accommodating an unlimited set of use cases.
|
||||
|
||||
> **Note**
|
||||
>
|
||||
> Replace the deprecated command pipe EXEC statement with a curl call
|
||||
> to the REST API action [process-check-result](12-icinga2-api.md#icinga2-api-actions-process-check-result).
|
||||
|
||||
Create a `Service` for the specific use case associated to the host. If the host
|
||||
matches and the first varbind value is `Backup`, SNMPTT will submit the corresponding
|
||||
passive update with the state and text from the second and third varbind:
|
||||
|
||||
object Service "Backup" {
|
||||
import "generic-service-custom"
|
||||
```
|
||||
object Service "Backup" {
|
||||
import "generic-service-custom"
|
||||
|
||||
host_name = "host.domain.com"
|
||||
check_command = "dummy"
|
||||
host_name = "host.domain.com"
|
||||
check_command = "dummy"
|
||||
|
||||
enable_notifications = 1
|
||||
enable_active_checks = 1
|
||||
enable_passive_checks = 1
|
||||
enable_flapping = 0
|
||||
volatile = 1
|
||||
max_check_attempts = 1
|
||||
check_interval = 87000
|
||||
enable_perfdata = 0
|
||||
enable_notifications = 1
|
||||
enable_active_checks = 1
|
||||
enable_passive_checks = 1
|
||||
enable_flapping = 0
|
||||
volatile = 1
|
||||
max_check_attempts = 1
|
||||
check_interval = 87000
|
||||
enable_perfdata = 0
|
||||
|
||||
vars.sla = "24x7"
|
||||
vars.dummy_state = 2
|
||||
vars.dummy_text = "No passive check result received."
|
||||
}
|
||||
```
|
||||
|
||||
|
||||
## Agents sending Check Results via REST API <a id="agent-based-checks-rest-api"></a>
|
||||
|
||||
Whenever the remote agent cannot run the Icinga agent, or a backup script
|
||||
should just send its current state after finishing, you can use the [REST API](12-icinga2-api.md#icinga2-api)
|
||||
as secure transport and send [passive external check results](08-advanced-topics.md#external-check-results).
|
||||
|
||||
Use the [process-check-result](12-icinga2-api.md#icinga2-api-actions-process-check-result) API action to send the external passive check result.
|
||||
You can either use `curl` or implement the HTTP requests in your preferred programming
|
||||
language. Examples for API clients are available in [this chapter](12-icinga2-api.md#icinga2-api-clients).
|
||||
|
||||
Feeding check results from remote hosts requires the host/service
|
||||
objects configured on the master/satellite instance.
|
||||
|
||||
## NSClient++ on Windows <a id="agent-based-checks-nsclient"></a>
|
||||
|
||||
[NSClient++](https://nsclient.org/) works on both Windows and Linux platforms and is well
|
||||
known for its magnificent Windows support. There are alternatives like the WMI interface,
|
||||
but using `NSClient++` will allow you to run local scripts similar to check plugins fetching
|
||||
the required output and performance counters.
|
||||
|
||||
> **Tip**
|
||||
>
|
||||
> Best practice is to use the Icinga agent as secure execution
|
||||
> bridge (`check_nt` and `check_nrpe` are considered insecure)
|
||||
> and query the NSClient++ service [locally](06-distributed-monitoring.md#distributed-monitoring-windows-nscp).
|
||||
|
||||
You can use the `check_nt` plugin from the Monitoring Plugins project to query NSClient++.
|
||||
Icinga 2 provides the [nscp check command](10-icinga-template-library.md#plugin-check-command-nscp) for this:
|
||||
|
||||
Example:
|
||||
|
||||
```
|
||||
object Service "disk" {
|
||||
import "generic-service"
|
||||
|
||||
host_name = "remote-windows-host"
|
||||
|
||||
check_command = "nscp"
|
||||
|
||||
vars.nscp_variable = "USEDDISKSPACE"
|
||||
vars.nscp_params = "c"
|
||||
vars.nscp_warn = 70
|
||||
vars.nscp_crit = 80
|
||||
}
|
||||
```
|
||||
|
||||
For details on the `NSClient++` configuration please refer to the [official documentation](https://docs.nsclient.org/).
|
||||
|
||||
## WMI on Windows <a id="agent-based-checks-wmi"></a>
|
||||
|
||||
The most popular plugin is [check_wmi_plus](http://edcint.co.nz/checkwmiplus/).
|
||||
|
||||
> Check WMI Plus uses the Windows Management Interface (WMI) to check for common services (cpu, disk, sevices, eventlog…) on Windows machines. It requires the open source wmi client for Linux.
|
||||
|
||||
Community examples:
|
||||
|
||||
* [Icinga 2 check_wmi_plus example by 18pct](http://18pct.com/icinga2-check_wmi_plus-example/)
|
||||
* [Agent-less monitoring with WMI](https://www.devlink.de/linux/icinga2-nagios-agentless-monitoring-von-windows/)
|
||||
|
||||
vars.sla = "24x7"
|
||||
vars.dummy_state = 2
|
||||
vars.dummy_text = "No passive check result received."
|
||||
}
|
||||
|
||||
|
@ -206,14 +206,6 @@ the `check_period` attribute. Or a notification should be sent to
|
||||
users or not, filtered by the `period` and `notification_period`
|
||||
configuration attributes for `Notification` and `User` objects.
|
||||
|
||||
> **Note**
|
||||
>
|
||||
> If you are familiar with Icinga 1.x, these time period definitions
|
||||
> are called `legacy timeperiods` in Icinga 2.
|
||||
>
|
||||
> An Icinga 2 legacy timeperiod requires the `ITL` provided template
|
||||
>`legacy-timeperiod`.
|
||||
|
||||
The `TimePeriod` attribute `ranges` may contain multiple directives,
|
||||
including weekdays, days of the month, and calendar dates.
|
||||
These types may overlap/override other types in your ranges dictionary.
|
||||
@ -231,78 +223,97 @@ If you don't set any `check_period` or `notification_period` attribute
|
||||
on your configuration objects, Icinga 2 assumes `24x7` as time period
|
||||
as shown below.
|
||||
|
||||
object TimePeriod "24x7" {
|
||||
import "legacy-timeperiod"
|
||||
|
||||
display_name = "Icinga 2 24x7 TimePeriod"
|
||||
ranges = {
|
||||
"monday" = "00:00-24:00"
|
||||
"tuesday" = "00:00-24:00"
|
||||
"wednesday" = "00:00-24:00"
|
||||
"thursday" = "00:00-24:00"
|
||||
"friday" = "00:00-24:00"
|
||||
"saturday" = "00:00-24:00"
|
||||
"sunday" = "00:00-24:00"
|
||||
}
|
||||
}
|
||||
```
|
||||
object TimePeriod "24x7" {
|
||||
display_name = "Icinga 2 24x7 TimePeriod"
|
||||
ranges = {
|
||||
"monday" = "00:00-24:00"
|
||||
"tuesday" = "00:00-24:00"
|
||||
"wednesday" = "00:00-24:00"
|
||||
"thursday" = "00:00-24:00"
|
||||
"friday" = "00:00-24:00"
|
||||
"saturday" = "00:00-24:00"
|
||||
"sunday" = "00:00-24:00"
|
||||
}
|
||||
}
|
||||
```
|
||||
|
||||
If your operation staff should only be notified during workhours,
|
||||
create a new timeperiod named `workhours` defining a work day from
|
||||
09:00 to 17:00.
|
||||
|
||||
object TimePeriod "workhours" {
|
||||
import "legacy-timeperiod"
|
||||
```
|
||||
object TimePeriod "workhours" {
|
||||
display_name = "Icinga 2 8x5 TimePeriod"
|
||||
ranges = {
|
||||
"monday" = "09:00-17:00"
|
||||
"tuesday" = "09:00-17:00"
|
||||
"wednesday" = "09:00-17:00"
|
||||
"thursday" = "09:00-17:00"
|
||||
"friday" = "09:00-17:00"
|
||||
}
|
||||
}
|
||||
```
|
||||
|
||||
display_name = "Icinga 2 8x5 TimePeriod"
|
||||
ranges = {
|
||||
"monday" = "09:00-17:00"
|
||||
"tuesday" = "09:00-17:00"
|
||||
"wednesday" = "09:00-17:00"
|
||||
"thursday" = "09:00-17:00"
|
||||
"friday" = "09:00-17:00"
|
||||
}
|
||||
}
|
||||
### Across midnight <a id="timeperiods-across-midnight"></a>
|
||||
|
||||
Furthermore if you wish to specify a notification period across midnight,
|
||||
If you want to specify a notification period across midnight,
|
||||
you can define it the following way:
|
||||
|
||||
object Timeperiod "across-midnight" {
|
||||
import "legacy-timeperiod"
|
||||
```
|
||||
object Timeperiod "across-midnight" {
|
||||
display_name = "Nightly Notification"
|
||||
ranges = {
|
||||
"saturday" = "22:00-24:00"
|
||||
"sunday" = "00:00-03:00"
|
||||
}
|
||||
}
|
||||
```
|
||||
|
||||
display_name = "Nightly Notification"
|
||||
ranges = {
|
||||
"saturday" = "22:00-24:00"
|
||||
"sunday" = "00:00-03:00"
|
||||
}
|
||||
}
|
||||
Starting with v2.11 this can be shortened to using
|
||||
the first day as start with an overlapping range into
|
||||
the next day:
|
||||
|
||||
```
|
||||
object Timeperiod "do-not-disturb" {
|
||||
display_name = "Weekend DND"
|
||||
ranges = {
|
||||
"saturday" = "22:00-06:00"
|
||||
}
|
||||
}
|
||||
```
|
||||
|
||||
### Across several days, weeks or months <a id="timeperiods-across-days-weeks-months"></a>
|
||||
|
||||
Below you can see another example for configuring timeperiods across several
|
||||
days, weeks or months. This can be useful when taking components offline
|
||||
for a distinct period of time.
|
||||
|
||||
object Timeperiod "standby" {
|
||||
import "legacy-timeperiod"
|
||||
|
||||
display_name = "Standby"
|
||||
ranges = {
|
||||
"2016-09-30 - 2016-10-30" = "00:00-24:00"
|
||||
}
|
||||
}
|
||||
```
|
||||
object Timeperiod "standby" {
|
||||
display_name = "Standby"
|
||||
ranges = {
|
||||
"2016-09-30 - 2016-10-30" = "00:00-24:00"
|
||||
}
|
||||
}
|
||||
```
|
||||
|
||||
Please note that the spaces before and after the dash are mandatory.
|
||||
|
||||
Once your time period is configured you can Use the `period` attribute
|
||||
to assign time periods to `Notification` and `Dependency` objects:
|
||||
|
||||
object Notification "mail" {
|
||||
import "generic-notification"
|
||||
```
|
||||
apply Notification "mail-icingaadmin" to Service {
|
||||
import "mail-service-notification"
|
||||
user_groups = host.vars.notification.mail.groups
|
||||
users = host.vars.notification.mail.users
|
||||
|
||||
host_name = "localhost"
|
||||
period = "workhours"
|
||||
|
||||
command = "mail-notification"
|
||||
users = [ "icingaadmin" ]
|
||||
period = "workhours"
|
||||
}
|
||||
assign where host.vars.notification.mail
|
||||
}
|
||||
```
|
||||
|
||||
### Time Periods Inclusion and Exclusion <a id="timeperiods-includes-excludes"></a>
|
||||
|
||||
@ -319,53 +330,53 @@ preferred.
|
||||
The following example defines a time period called `holidays` where
|
||||
notifications should be suppressed:
|
||||
|
||||
object TimePeriod "holidays" {
|
||||
import "legacy-timeperiod"
|
||||
|
||||
ranges = {
|
||||
"january 1" = "00:00-24:00" //new year's day
|
||||
"july 4" = "00:00-24:00" //independence day
|
||||
"december 25" = "00:00-24:00" //christmas
|
||||
"december 31" = "18:00-24:00" //new year's eve (6pm+)
|
||||
"2017-04-16" = "00:00-24:00" //easter 2017
|
||||
"monday -1 may" = "00:00-24:00" //memorial day (last monday in may)
|
||||
"monday 1 september" = "00:00-24:00" //labor day (1st monday in september)
|
||||
"thursday 4 november" = "00:00-24:00" //thanksgiving (4th thursday in november)
|
||||
}
|
||||
}
|
||||
```
|
||||
object TimePeriod "holidays" {
|
||||
ranges = {
|
||||
"january 1" = "00:00-24:00" //new year's day
|
||||
"july 4" = "00:00-24:00" //independence day
|
||||
"december 25" = "00:00-24:00" //christmas
|
||||
"december 31" = "18:00-24:00" //new year's eve (6pm+)
|
||||
"2017-04-16" = "00:00-24:00" //easter 2017
|
||||
"monday -1 may" = "00:00-24:00" //memorial day (last monday in may)
|
||||
"monday 1 september" = "00:00-24:00" //labor day (1st monday in september)
|
||||
"thursday 4 november" = "00:00-24:00" //thanksgiving (4th thursday in november)
|
||||
}
|
||||
}
|
||||
```
|
||||
|
||||
In addition to that the time period `weekends` defines an additional
|
||||
time window which should be excluded from notifications:
|
||||
|
||||
object TimePeriod "weekends-excluded" {
|
||||
import "legacy-timeperiod"
|
||||
|
||||
ranges = {
|
||||
"saturday" = "00:00-09:00,18:00-24:00"
|
||||
"sunday" = "00:00-09:00,18:00-24:00"
|
||||
}
|
||||
}
|
||||
```
|
||||
object TimePeriod "weekends-excluded" {
|
||||
ranges = {
|
||||
"saturday" = "00:00-09:00,18:00-24:00"
|
||||
"sunday" = "00:00-09:00,18:00-24:00"
|
||||
}
|
||||
}
|
||||
```
|
||||
|
||||
The time period `prod-notification` defines the default time ranges
|
||||
and adds the excluded time period names as an array.
|
||||
|
||||
object TimePeriod "prod-notification" {
|
||||
import "legacy-timeperiod"
|
||||
```
|
||||
object TimePeriod "prod-notification" {
|
||||
excludes = [ "holidays", "weekends-excluded" ]
|
||||
|
||||
excludes = [ "holidays", "weekends-excluded" ]
|
||||
ranges = {
|
||||
"monday" = "00:00-24:00"
|
||||
"tuesday" = "00:00-24:00"
|
||||
"wednesday" = "00:00-24:00"
|
||||
"thursday" = "00:00-24:00"
|
||||
"friday" = "00:00-24:00"
|
||||
"saturday" = "00:00-24:00"
|
||||
"sunday" = "00:00-24:00"
|
||||
}
|
||||
}
|
||||
```
|
||||
|
||||
ranges = {
|
||||
"monday" = "00:00-24:00"
|
||||
"tuesday" = "00:00-24:00"
|
||||
"wednesday" = "00:00-24:00"
|
||||
"thursday" = "00:00-24:00"
|
||||
"friday" = "00:00-24:00"
|
||||
"saturday" = "00:00-24:00"
|
||||
"sunday" = "00:00-24:00"
|
||||
}
|
||||
}
|
||||
|
||||
## External Check Results <a id="external-check-results"></a>
|
||||
## External Passive Check Results <a id="external-check-results"></a>
|
||||
|
||||
Hosts or services which do not actively execute a check plugin to receive
|
||||
the state and output are called "passive checks" or "external check results".
|
||||
@ -393,12 +404,16 @@ In Icinga 2 active check freshness is enabled by default. It is determined by th
|
||||
|
||||
The threshold is calculated based on the last check execution time for actively executed checks:
|
||||
|
||||
(last check execution time + check interval) > current time
|
||||
```
|
||||
(last check execution time + check interval) > current time
|
||||
```
|
||||
|
||||
If this host/service receives check results from an [external source](08-advanced-topics.md#external-check-results),
|
||||
the threshold is based on the last time a check result was received:
|
||||
|
||||
(last check result time + check interval) > current time
|
||||
```
|
||||
(last check result time + check interval) > current time
|
||||
```
|
||||
|
||||
> **Tip**
|
||||
>
|
||||
@ -443,13 +458,12 @@ Icinga 2 supports optional detection of hosts and services that are "flapping".
|
||||
|
||||
Flapping occurs when a service or host changes state too frequently, which would result in a storm of problem and
|
||||
recovery notifications. With flapping detection enabled a flapping notification will be sent while other notifications are
|
||||
suppresed until it calms down after receiving the same status from checks a few times. Flapping detection can help detect
|
||||
|
||||
configuration problems (wrong thresholds), troublesome services, or network problems.
|
||||
suppressed until it calms down after receiving the same status from checks a few times. Flapping detection can help detect
|
||||
configuration problems (wrong thresholds), troublesome services or network problems.
|
||||
|
||||
Flapping detection can be enabled or disabled using the `enable_flapping` attribute.
|
||||
The `flapping_threshold_high` and `flapping_threshold_low` attributes allows to specify the thresholds that control
|
||||
when a [host](09-object-types.md#objecttype-host) or [service](objecttype-service) is considered to be flapping.
|
||||
when a [host](09-object-types.md#objecttype-host) or [service](09-object-types.md#objecttype-service) is considered to be flapping.
|
||||
|
||||
The default thresholds are 30% for high and 25% for low. If the computed flapping value exceeds the high threshold a
|
||||
host or service is considered flapping until it drops below the low flapping threshold.
|
||||
@ -466,7 +480,7 @@ Icinga 2 saves the last 20 state changes for every host and service. See the gra
|
||||
|
||||

|
||||
|
||||
All the states ware weighted, with the most recent one being worth the most (1.15) and the 20th the least (0.8). The
|
||||
All the states are weighted, with the most recent one being worth the most (1.15) and the 20th the least (0.8). The
|
||||
states in between are fairly distributed. The final flapping value are the weighted state changes divided by the total
|
||||
count of 20.
|
||||
|
||||
@ -515,7 +529,7 @@ System | Memory, Swap | [mem](10-icinga-template-library.md#plugin-contrib-co
|
||||
System | Hardware | [hpasm](10-icinga-template-library.md#plugin-contrib-command-hpasm), [ipmi-sensor](10-icinga-template-library.md#plugin-contrib-command-ipmi-sensor)
|
||||
System | Virtualization | [VMware](10-icinga-template-library.md#plugin-contrib-vmware), [esxi_hardware](10-icinga-template-library.md#plugin-contrib-command-esxi-hardware)
|
||||
System | Processes | [procs](10-icinga-template-library.md#plugin-check-command-processes), [service-windows](10-icinga-template-library.md#windows-plugins) (Windows Client)
|
||||
System | System Activity Reports | [check_sar_perf](https://github.com/dnsmichi/icinga-plugins/blob/master/scripts/check_sar_perf.py)
|
||||
System | System Activity Reports | [sar-perf](10-icinga-template-library.md#plugin-contrib-command-sar-perf)
|
||||
System | I/O | [iostat](10-icinga-template-library.md#plugin-contrib-command-iostat)
|
||||
System | Network interfaces | [nwc_health](10-icinga-template-library.md#plugin-contrib-command-nwc_health), [interfaces](10-icinga-template-library.md#plugin-contrib-command-interfaces)
|
||||
System | Users | [users](10-icinga-template-library.md#plugin-check-command-users), [users-windows](10-icinga-template-library.md#windows-plugins) (Windows Client)
|
||||
@ -528,8 +542,8 @@ Database | MySQL | [mysql_health](10-icinga-template-library.md#plugin-contri
|
||||
Database | PostgreSQL | [postgres](10-icinga-template-library.md#plugin-contrib-command-postgres)
|
||||
Database | Housekeeping | Check the database size and growth and analyse metrics to examine trends.
|
||||
Database | DB IDO | [ido](10-icinga-template-library.md#itl-icinga-ido) (more below)
|
||||
Webserver | Apache2, Nginx, etc. | [http](10-icinga-template-library.md#plugin-check-command-http), [apache_status](10-icinga-template-library.md#plugin-contrib-command-apache_status), [nginx_status](10-icinga-template-library.md#plugin-contrib-command-nginx_status)
|
||||
Webserver | Certificates | [http](10-icinga-template-library.md#plugin-check-command-http)
|
||||
Webserver | Apache2, Nginx, etc. | [http](10-icinga-template-library.md#plugin-check-command-http), [apache-status](10-icinga-template-library.md#plugin-contrib-command-apache-status), [nginx_status](10-icinga-template-library.md#plugin-contrib-command-nginx_status)
|
||||
Webserver | Certificates | [http](10-icinga-template-library.md#plugin-check-command-http), [Icinga certificate monitoring](https://icinga.com/products/icinga-certificate-monitoring/)
|
||||
Webserver | Authorization | [http](10-icinga-template-library.md#plugin-check-command-http)
|
||||
Notifications | Mail (queue) | [smtp](10-icinga-template-library.md#plugin-check-command-smtp), [mailq](10-icinga-template-library.md#plugin-check-command-mailq)
|
||||
Notifications | SMS (GSM modem) | [check_sms3_status](https://exchange.icinga.com/netways/check_sms3status)
|
||||
@ -564,7 +578,10 @@ apply Service "ido-mysql" {
|
||||
More specific database queries can be found in the [DB IDO](14-features.md#db-ido) chapter.
|
||||
|
||||
Distributed setups should include specific [health checks](06-distributed-monitoring.md#distributed-monitoring-health-checks).
|
||||
You might also want to add additional checks for SSL certificate expiration.
|
||||
|
||||
You might also want to add additional checks for TLS certificate expiration.
|
||||
This can be done using the [Icinga certificate monitoring](https://icinga.com/products/icinga-certificate-monitoring/) module.
|
||||
|
||||
|
||||
|
||||
## Advanced Configuration Hints <a id="advanced-configuration-hints"></a>
|
||||
@ -573,7 +590,7 @@ You might also want to add additional checks for SSL certificate expiration.
|
||||
|
||||
[Apply rules](03-monitoring-basics.md#using-apply) can be used to create a rule set which is
|
||||
entirely based on host objects and their attributes.
|
||||
In addition to that [apply for and custom attribute override](03-monitoring-basics.md#using-apply-for)
|
||||
In addition to that [apply for and custom variable override](03-monitoring-basics.md#using-apply-for)
|
||||
extend the possibilities.
|
||||
|
||||
The following example defines a dictionary on the host object which contains
|
||||
@ -586,67 +603,71 @@ In addition to that you can optionally define the `ssl` attribute which enables
|
||||
|
||||
Host definition:
|
||||
|
||||
object Host "webserver01" {
|
||||
import "generic-host"
|
||||
address = "192.168.56.200"
|
||||
vars.os = "Linux"
|
||||
```
|
||||
object Host "webserver01" {
|
||||
import "generic-host"
|
||||
address = "192.168.56.200"
|
||||
vars.os = "Linux"
|
||||
|
||||
vars.webserver = {
|
||||
instance["status"] = {
|
||||
address = "192.168.56.201"
|
||||
port = "80"
|
||||
url = "/status"
|
||||
}
|
||||
instance["tomcat"] = {
|
||||
address = "192.168.56.202"
|
||||
port = "8080"
|
||||
}
|
||||
instance["icingaweb2"] = {
|
||||
address = "192.168.56.210"
|
||||
port = "443"
|
||||
url = "/icingaweb2"
|
||||
ssl = true
|
||||
}
|
||||
}
|
||||
vars.webserver = {
|
||||
instance["status"] = {
|
||||
address = "192.168.56.201"
|
||||
port = "80"
|
||||
url = "/status"
|
||||
}
|
||||
instance["tomcat"] = {
|
||||
address = "192.168.56.202"
|
||||
port = "8080"
|
||||
}
|
||||
instance["icingaweb2"] = {
|
||||
address = "192.168.56.210"
|
||||
port = "443"
|
||||
url = "/icingaweb2"
|
||||
ssl = true
|
||||
}
|
||||
}
|
||||
}
|
||||
```
|
||||
|
||||
Service apply for definitions:
|
||||
|
||||
apply Service "webserver_ping" for (instance => config in host.vars.webserver.instance) {
|
||||
display_name = "webserver_" + instance
|
||||
check_command = "ping4"
|
||||
```
|
||||
apply Service "webserver_ping" for (instance => config in host.vars.webserver.instance) {
|
||||
display_name = "webserver_" + instance
|
||||
check_command = "ping4"
|
||||
|
||||
vars.ping_address = config.address
|
||||
vars.ping_address = config.address
|
||||
|
||||
assign where host.vars.webserver.instance
|
||||
}
|
||||
assign where host.vars.webserver.instance
|
||||
}
|
||||
|
||||
apply Service "webserver_port" for (instance => config in host.vars.webserver.instance) {
|
||||
display_name = "webserver_" + instance + "_" + config.port
|
||||
check_command = "tcp"
|
||||
apply Service "webserver_port" for (instance => config in host.vars.webserver.instance) {
|
||||
display_name = "webserver_" + instance + "_" + config.port
|
||||
check_command = "tcp"
|
||||
|
||||
vars.tcp_address = config.address
|
||||
vars.tcp_port = config.port
|
||||
vars.tcp_address = config.address
|
||||
vars.tcp_port = config.port
|
||||
|
||||
assign where host.vars.webserver.instance
|
||||
}
|
||||
assign where host.vars.webserver.instance
|
||||
}
|
||||
|
||||
apply Service "webserver_url" for (instance => config in host.vars.webserver.instance) {
|
||||
display_name = "webserver_" + instance + "_" + config.url
|
||||
check_command = "http"
|
||||
apply Service "webserver_url" for (instance => config in host.vars.webserver.instance) {
|
||||
display_name = "webserver_" + instance + "_" + config.url
|
||||
check_command = "http"
|
||||
|
||||
vars.http_address = config.address
|
||||
vars.http_port = config.port
|
||||
vars.http_uri = config.url
|
||||
vars.http_address = config.address
|
||||
vars.http_port = config.port
|
||||
vars.http_uri = config.url
|
||||
|
||||
if (config.ssl) {
|
||||
vars.http_ssl = config.ssl
|
||||
}
|
||||
if (config.ssl) {
|
||||
vars.http_ssl = config.ssl
|
||||
}
|
||||
|
||||
assign where config.url != ""
|
||||
}
|
||||
assign where config.url != ""
|
||||
}
|
||||
```
|
||||
|
||||
The variables defined in the host dictionary are not using the typical custom attribute
|
||||
The variables defined in the host dictionary are not using the typical custom variable
|
||||
prefix recommended for CheckCommand parameters. Instead they are re-used for multiple
|
||||
service checks in this example.
|
||||
In addition to defining check parameters this way, you can also enrich the `display_name`
|
||||
@ -656,7 +677,7 @@ attribute with more details. This will be shown in in Icinga Web 2 for example.
|
||||
|
||||
There is a limited scope where functions can be used as object attributes such as:
|
||||
|
||||
* As value for [Custom Attributes](03-monitoring-basics.md#custom-attributes-functions)
|
||||
* As value for [Custom Variables](03-monitoring-basics.md#custom-variables-functions)
|
||||
* Returning boolean expressions for [set_if](08-advanced-topics.md#use-functions-command-arguments-setif) inside command arguments
|
||||
* Returning a [command](08-advanced-topics.md#use-functions-command-attribute) array inside command objects
|
||||
|
||||
@ -665,7 +686,7 @@ The other way around you can create objects dynamically using your own global fu
|
||||
> **Note**
|
||||
>
|
||||
> Functions called inside command objects share the same global scope as runtime macros.
|
||||
> Therefore you can access host custom attributes like `host.vars.os`, or any other
|
||||
> Therefore you can access host custom variables like `host.vars.os`, or any other
|
||||
> object attribute from inside the function definition used for [set_if](08-advanced-topics.md#use-functions-command-arguments-setif) or [command](08-advanced-topics.md#use-functions-command-attribute).
|
||||
|
||||
Tips when implementing functions:
|
||||
@ -681,7 +702,7 @@ inside the `icinga2.log` file depending in your log severity
|
||||
in objects and other functions. Keep in mind that these functions are not marked
|
||||
as side-effect-free and as such are not available via the REST API.
|
||||
|
||||
Add a new configuration file `functions.conf` and include it into the [icinga2.conf](04-configuring-icinga-2.md#icinga2-conf)
|
||||
Add a new configuration file `functions.conf` and include it into the [icinga2.conf](04-configuration.md#icinga2-conf)
|
||||
configuration file in the very beginning, e.g. after `constants.conf`. You can also manage global
|
||||
functions inside `constants.conf` if you prefer.
|
||||
|
||||
@ -721,7 +742,7 @@ to connect to the REST API.
|
||||
|
||||
```
|
||||
$ ICINGA2_API_PASSWORD=icinga icinga2 console --connect 'https://root@localhost:5665/'
|
||||
Icinga 2 (version: v2.8.1-373-g4bea6d25c)
|
||||
Icinga 2 (version: v2.11.0)
|
||||
<1> => globals.state_to_string(1)
|
||||
"Warning"
|
||||
<2> => state_to_string(2)
|
||||
@ -763,25 +784,27 @@ slightly unexpected way. The following example shows how to assign values
|
||||
depending on group membership. All hosts in the `slow-lan` host group use 300
|
||||
as value for `ping_wrta`, all other hosts use 100.
|
||||
|
||||
globals.group_specific_value = function(group, group_value, non_group_value) {
|
||||
return function() use (group, group_value, non_group_value) {
|
||||
if (group in host.groups) {
|
||||
return group_value
|
||||
} else {
|
||||
return non_group_value
|
||||
}
|
||||
```
|
||||
globals.group_specific_value = function(group, group_value, non_group_value) {
|
||||
return function() use (group, group_value, non_group_value) {
|
||||
if (group in host.groups) {
|
||||
return group_value
|
||||
} else {
|
||||
return non_group_value
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
apply Service "ping4" {
|
||||
import "generic-service"
|
||||
check_command = "ping4"
|
||||
apply Service "ping4" {
|
||||
import "generic-service"
|
||||
check_command = "ping4"
|
||||
|
||||
vars.ping_wrta = group_specific_value("slow-lan", 300, 100)
|
||||
vars.ping_crta = group_specific_value("slow-lan", 500, 200)
|
||||
vars.ping_wrta = group_specific_value("slow-lan", 300, 100)
|
||||
vars.ping_crta = group_specific_value("slow-lan", 500, 200)
|
||||
|
||||
assign where true
|
||||
}
|
||||
assign where true
|
||||
}
|
||||
```
|
||||
|
||||
#### Use Functions in Assign Where Expressions <a id="use-functions-assign-where"></a>
|
||||
|
||||
@ -797,81 +820,85 @@ The following example requires the host `myprinter` being added
|
||||
to the host group `printers-lexmark` but only if the host uses
|
||||
a template matching the name `lexmark*`.
|
||||
|
||||
template Host "lexmark-printer-host" {
|
||||
vars.printer_type = "Lexmark"
|
||||
```
|
||||
template Host "lexmark-printer-host" {
|
||||
vars.printer_type = "Lexmark"
|
||||
}
|
||||
|
||||
object Host "myprinter" {
|
||||
import "generic-host"
|
||||
import "lexmark-printer-host"
|
||||
|
||||
address = "192.168.1.1"
|
||||
}
|
||||
|
||||
/* register a global function for the assign where call */
|
||||
globals.check_host_templates = function(host, search) {
|
||||
/* iterate over all host templates and check if the search matches */
|
||||
for (tmpl in host.templates) {
|
||||
if (match(search, tmpl)) {
|
||||
return true
|
||||
}
|
||||
}
|
||||
|
||||
object Host "myprinter" {
|
||||
import "generic-host"
|
||||
import "lexmark-printer-host"
|
||||
|
||||
address = "192.168.1.1"
|
||||
}
|
||||
|
||||
/* register a global function for the assign where call */
|
||||
globals.check_host_templates = function(host, search) {
|
||||
/* iterate over all host templates and check if the search matches */
|
||||
for (tmpl in host.templates) {
|
||||
if (match(search, tmpl)) {
|
||||
return true
|
||||
}
|
||||
}
|
||||
|
||||
/* nothing matched */
|
||||
return false
|
||||
}
|
||||
|
||||
object HostGroup "printers-lexmark" {
|
||||
display_name = "Lexmark Printers"
|
||||
/* call the global function and pass the arguments */
|
||||
assign where check_host_templates(host, "lexmark*")
|
||||
}
|
||||
/* nothing matched */
|
||||
return false
|
||||
}
|
||||
|
||||
object HostGroup "printers-lexmark" {
|
||||
display_name = "Lexmark Printers"
|
||||
/* call the global function and pass the arguments */
|
||||
assign where check_host_templates(host, "lexmark*")
|
||||
}
|
||||
```
|
||||
|
||||
Take a different more complex example: All hosts with the
|
||||
custom attribute `vars_app` as nested dictionary should be
|
||||
custom variable `vars_app` as nested dictionary should be
|
||||
added to the host group `ABAP-app-server`. But only if the
|
||||
`app_type` for all entries is set to `ABAP`.
|
||||
|
||||
It could read as wildcard match for nested dictionaries:
|
||||
|
||||
```
|
||||
where host.vars.vars_app["*"].app_type == "ABAP"
|
||||
```
|
||||
|
||||
The solution for this problem is to register a global
|
||||
function which checks the `app_type` for all hosts
|
||||
with the `vars_app` dictionary.
|
||||
|
||||
object Host "appserver01" {
|
||||
check_command = "dummy"
|
||||
vars.vars_app["ABC"] = { app_type = "ABAP" }
|
||||
}
|
||||
object Host "appserver02" {
|
||||
check_command = "dummy"
|
||||
vars.vars_app["DEF"] = { app_type = "ABAP" }
|
||||
```
|
||||
object Host "appserver01" {
|
||||
check_command = "dummy"
|
||||
vars.vars_app["ABC"] = { app_type = "ABAP" }
|
||||
}
|
||||
object Host "appserver02" {
|
||||
check_command = "dummy"
|
||||
vars.vars_app["DEF"] = { app_type = "ABAP" }
|
||||
}
|
||||
|
||||
globals.check_app_type = function(host, type) {
|
||||
/* ensure that other hosts without the custom variable do not match */
|
||||
if (typeof(host.vars.vars_app) != Dictionary) {
|
||||
return false
|
||||
}
|
||||
|
||||
/* iterate over the vars_app dictionary */
|
||||
for (key => val in host.vars.vars_app) {
|
||||
/* if the value is a dictionary and if contains the app_type being the requested type */
|
||||
if (typeof(val) == Dictionary && val.app_type == type) {
|
||||
return true
|
||||
}
|
||||
}
|
||||
|
||||
globals.check_app_type = function(host, type) {
|
||||
/* ensure that other hosts without the custom attribute do not match */
|
||||
if (typeof(host.vars.vars_app) != Dictionary) {
|
||||
return false
|
||||
}
|
||||
|
||||
/* iterate over the vars_app dictionary */
|
||||
for (key => val in host.vars.vars_app) {
|
||||
/* if the value is a dictionary and if contains the app_type being the requested type */
|
||||
if (typeof(val) == Dictionary && val.app_type == type) {
|
||||
return true
|
||||
}
|
||||
}
|
||||
|
||||
/* nothing matched */
|
||||
return false
|
||||
}
|
||||
|
||||
object HostGroup "ABAP-app-server" {
|
||||
assign where check_app_type(host, "ABAP")
|
||||
}
|
||||
/* nothing matched */
|
||||
return false
|
||||
}
|
||||
|
||||
object HostGroup "ABAP-app-server" {
|
||||
assign where check_app_type(host, "ABAP")
|
||||
}
|
||||
```
|
||||
|
||||
#### Use Functions in Command Arguments set_if <a id="use-functions-command-arguments-setif"></a>
|
||||
|
||||
@ -886,35 +913,39 @@ multiple conditions and attributes.
|
||||
The following example was found on the community support channels. The user had defined a host
|
||||
dictionary named `compellent` with the key `disks`. This was then used inside service apply for rules.
|
||||
|
||||
object Host "dict-host" {
|
||||
check_command = "check_compellent"
|
||||
vars.compellent["disks"] = {
|
||||
file = "/var/lib/check_compellent/san_disks.0.json",
|
||||
checks = ["disks"]
|
||||
}
|
||||
}
|
||||
```
|
||||
object Host "dict-host" {
|
||||
check_command = "check_compellent"
|
||||
vars.compellent["disks"] = {
|
||||
file = "/var/lib/check_compellent/san_disks.0.json",
|
||||
checks = ["disks"]
|
||||
}
|
||||
}
|
||||
```
|
||||
|
||||
The more significant problem was to only add the command parameter `--disk` to the plugin call
|
||||
when the dictionary `compellent` contains the key `disks`, and omit it if not found.
|
||||
|
||||
By defining `set_if` as [abbreviated lambda function](17-language-reference.md#nullary-lambdas)
|
||||
and evaluating the host custom attribute `compellent` containing the `disks` this problem was
|
||||
and evaluating the host custom variable `compellent` containing the `disks` this problem was
|
||||
solved like this:
|
||||
|
||||
object CheckCommand "check_compellent" {
|
||||
command = [ "/usr/bin/check_compellent" ]
|
||||
arguments = {
|
||||
"--disks" = {
|
||||
set_if = {{
|
||||
var host_vars = host.vars
|
||||
log(host_vars)
|
||||
var compel = host_vars.compellent
|
||||
log(compel)
|
||||
compel.contains("disks")
|
||||
}}
|
||||
}
|
||||
}
|
||||
```
|
||||
object CheckCommand "check_compellent" {
|
||||
command = [ "/usr/bin/check_compellent" ]
|
||||
arguments = {
|
||||
"--disks" = {
|
||||
set_if = {{
|
||||
var host_vars = host.vars
|
||||
log(host_vars)
|
||||
var compel = host_vars.compellent
|
||||
log(compel)
|
||||
compel.contains("disks")
|
||||
}}
|
||||
}
|
||||
}
|
||||
}
|
||||
```
|
||||
|
||||
This implementation uses the dictionary type method [contains](18-library-reference.md#dictionary-contains)
|
||||
and will fail if `host.vars.compellent` is not of the type `Dictionary`.
|
||||
@ -922,35 +953,38 @@ Therefore you can extend the checks using the [typeof](17-language-reference.md#
|
||||
|
||||
You can test the types using the `icinga2 console`:
|
||||
|
||||
# icinga2 console
|
||||
Icinga (version: v2.3.0-193-g3eb55ad)
|
||||
<1> => srv_vars.compellent["check_a"] = { file="outfile_a.json", checks = [ "disks", "fans" ] }
|
||||
null
|
||||
<2> => srv_vars.compellent["check_b"] = { file="outfile_b.json", checks = [ "power", "voltages" ] }
|
||||
null
|
||||
<3> => typeof(srv_vars.compellent)
|
||||
type 'Dictionary'
|
||||
<4> =>
|
||||
```
|
||||
# icinga2 console
|
||||
Icinga (version: v2.3.0-193-g3eb55ad)
|
||||
<1> => srv_vars.compellent["check_a"] = { file="outfile_a.json", checks = [ "disks", "fans" ] }
|
||||
null
|
||||
<2> => srv_vars.compellent["check_b"] = { file="outfile_b.json", checks = [ "power", "voltages" ] }
|
||||
null
|
||||
<3> => typeof(srv_vars.compellent)
|
||||
type 'Dictionary'
|
||||
<4> =>
|
||||
```
|
||||
|
||||
The more programmatic approach for `set_if` could look like this:
|
||||
|
||||
"--disks" = {
|
||||
set_if = {{
|
||||
var srv_vars = service.vars
|
||||
if(len(srv_vars) > 0) {
|
||||
if (typeof(srv_vars.compellent) == Dictionary) {
|
||||
return srv_vars.compellent.contains("disks")
|
||||
} else {
|
||||
log(LogInformationen, "checkcommand set_if", "custom attribute compellent_checks is not a dictionary, ignoring it.")
|
||||
return false
|
||||
}
|
||||
} else {
|
||||
log(LogWarning, "checkcommand set_if", "empty custom attributes")
|
||||
return false
|
||||
}
|
||||
}}
|
||||
```
|
||||
"--disks" = {
|
||||
set_if = {{
|
||||
var srv_vars = service.vars
|
||||
if(len(srv_vars) > 0) {
|
||||
if (typeof(srv_vars.compellent) == Dictionary) {
|
||||
return srv_vars.compellent.contains("disks")
|
||||
} else {
|
||||
log(LogInformationen, "checkcommand set_if", "custom variable compellent_checks is not a dictionary, ignoring it.")
|
||||
return false
|
||||
}
|
||||
} else {
|
||||
log(LogWarning, "checkcommand set_if", "empty custom variables")
|
||||
return false
|
||||
}
|
||||
|
||||
}}
|
||||
}
|
||||
```
|
||||
|
||||
#### Use Functions as Command Attribute <a id="use-functions-command-attribute"></a>
|
||||
|
||||
@ -959,53 +993,56 @@ or [EventCommands](09-object-types.md#objecttype-eventcommand) which does not re
|
||||
a returned checkresult including state/output.
|
||||
|
||||
The following example was taken from the community support channels. The requirement was to
|
||||
specify a custom attribute inside the notification apply rule and decide which notification
|
||||
specify a custom variable inside the notification apply rule and decide which notification
|
||||
script to call based on that.
|
||||
|
||||
object User "short-dummy" {
|
||||
}
|
||||
```
|
||||
object User "short-dummy" {
|
||||
}
|
||||
|
||||
object UserGroup "short-dummy-group" {
|
||||
assign where user.name == "short-dummy"
|
||||
}
|
||||
object UserGroup "short-dummy-group" {
|
||||
assign where user.name == "short-dummy"
|
||||
}
|
||||
|
||||
apply Notification "mail-admins-short" to Host {
|
||||
import "mail-host-notification"
|
||||
command = "mail-host-notification-test"
|
||||
user_groups = [ "short-dummy-group" ]
|
||||
vars.short = true
|
||||
assign where host.vars.notification.mail
|
||||
}
|
||||
apply Notification "mail-admins-short" to Host {
|
||||
import "mail-host-notification"
|
||||
command = "mail-host-notification-test"
|
||||
user_groups = [ "short-dummy-group" ]
|
||||
vars.short = true
|
||||
assign where host.vars.notification.mail
|
||||
}
|
||||
```
|
||||
|
||||
The solution is fairly simple: The `command` attribute is implemented as function returning
|
||||
an array required by the caller Icinga 2.
|
||||
The local variable `mailscript` sets the default value for the notification scrip location.
|
||||
If the notification custom attribute `short` is set, it will override the local variable `mailscript`
|
||||
If the notification custom variable `short` is set, it will override the local variable `mailscript`
|
||||
with a new value.
|
||||
The `mailscript` variable is then used to compute the final notification command array being
|
||||
returned.
|
||||
|
||||
You can omit the `log()` calls, they only help debugging.
|
||||
|
||||
object NotificationCommand "mail-host-notification-test" {
|
||||
command = {{
|
||||
log("command as function")
|
||||
var mailscript = "mail-host-notification-long.sh"
|
||||
if (notification.vars.short) {
|
||||
mailscript = "mail-host-notification-short.sh"
|
||||
}
|
||||
log("Running command")
|
||||
log(mailscript)
|
||||
|
||||
var cmd = [ SysconfDir + "/icinga2/scripts/" + mailscript ]
|
||||
log(LogCritical, "me", cmd)
|
||||
return cmd
|
||||
}}
|
||||
|
||||
env = {
|
||||
}
|
||||
```
|
||||
object NotificationCommand "mail-host-notification-test" {
|
||||
command = {{
|
||||
log("command as function")
|
||||
var mailscript = "mail-host-notification-long.sh"
|
||||
if (notification.vars.short) {
|
||||
mailscript = "mail-host-notification-short.sh"
|
||||
}
|
||||
log("Running command")
|
||||
log(mailscript)
|
||||
|
||||
var cmd = [ ConfigDir + "/scripts/" + mailscript ]
|
||||
log(LogCritical, "me", cmd)
|
||||
return cmd
|
||||
}}
|
||||
|
||||
env = {
|
||||
}
|
||||
}
|
||||
```
|
||||
|
||||
### Access Object Attributes at Runtime <a id="access-object-attributes-at-runtime"></a>
|
||||
|
||||
@ -1077,8 +1114,6 @@ time of the day compared to the defined time period.
|
||||
|
||||
```
|
||||
object TimePeriod "backup" {
|
||||
import "legacy-timeperiod"
|
||||
|
||||
ranges = {
|
||||
monday = "02:00-03:00"
|
||||
tuesday = "02:00-03:00"
|
||||
@ -1155,3 +1190,16 @@ Icinga 2 parses performance data strings returned by check plugins and makes the
|
||||
warn | Value | Warning threshold value.
|
||||
min | Value | Minimum value returned by the check.
|
||||
max | Value | Maximum value returned by the check.
|
||||
|
||||
### NotificationResult <a id="advanced-value-types-notificationresult"></a>
|
||||
|
||||
Name | Type | Description
|
||||
--------------------------|-----------------------|----------------------------------
|
||||
exit\_status | Number | The exit status returned by the check execution.
|
||||
output | String | The notification command output.
|
||||
execution\_endpoint | String | Name of the node executing the check.
|
||||
command | Value | Array of command with shell-escaped arguments or command line string.
|
||||
execution\_start | Timestamp | Check execution start time (as a UNIX timestamp).
|
||||
execution\_end | Timestamp | Check execution end time (as a UNIX timestamp).
|
||||
active | Boolean | Whether the result is from an active or passive check.
|
||||
|
||||
|
@ -13,17 +13,18 @@ options.
|
||||
|
||||
```
|
||||
# icinga2
|
||||
icinga2 - The Icinga 2 network monitoring daemon (version: v2.8.0)
|
||||
icinga2 - The Icinga 2 network monitoring daemon (version: v2.11.0)
|
||||
|
||||
Usage:
|
||||
icinga2 <command> [<arguments>]
|
||||
|
||||
Supported commands:
|
||||
* api setup (setup for API)
|
||||
* api user (API user creation helper)
|
||||
* ca list (lists all certificate signing requests)
|
||||
* ca restore (restores a removed certificate request)
|
||||
* ca remove (removes an outstanding certificate request)
|
||||
* ca sign (signs an outstanding certificate request)
|
||||
* console (Icinga console)
|
||||
* console (Icinga debug console)
|
||||
* daemon (starts Icinga 2)
|
||||
* feature disable (disables specified feature)
|
||||
* feature enable (enables specified feature)
|
||||
@ -37,7 +38,6 @@ Supported commands:
|
||||
* pki save-cert (saves another Icinga 2 instance's certificate)
|
||||
* pki sign-csr (signs a CSR)
|
||||
* pki ticket (generates a ticket)
|
||||
* troubleshoot (collect information for troubleshooting)
|
||||
* variable get (gets a variable)
|
||||
* variable list (lists all variables)
|
||||
|
||||
@ -56,7 +56,7 @@ Global options:
|
||||
-X [ --script-debugger ] whether to enable the script debugger
|
||||
|
||||
Report bugs at <https://github.com/Icinga/icinga2>
|
||||
Icinga home page: <https://www.icinga.com/>
|
||||
Icinga home page: <https://icinga.com/>
|
||||
```
|
||||
|
||||
|
||||
@ -136,20 +136,19 @@ added.
|
||||
|
||||
## CLI command: Api <a id="cli-command-api"></a>
|
||||
|
||||
Provides the helper functions `api setup` and `api user`. The first to enable the REST API, the second to create
|
||||
ApiUser objects with hashed password strings.
|
||||
More details in the [Icinga 2 API](12-icinga2-api.md#icinga2-api-setup) chapter.
|
||||
Provides helper functions to enable and setup the
|
||||
[Icinga 2 API](12-icinga2-api.md#icinga2-api-setup).
|
||||
|
||||
### CLI command: Api Setup <a id="cli-command-api-setup "></a>
|
||||
|
||||
```
|
||||
# icinga2 api --help
|
||||
icinga2 - The Icinga 2 network monitoring daemon (version: v2.8.0)
|
||||
# icinga2 api setup --help
|
||||
icinga2 - The Icinga 2 network monitoring daemon (version: v2.11.0)
|
||||
|
||||
Usage:
|
||||
icinga2 <command> [<arguments>]
|
||||
icinga2 api setup [<arguments>]
|
||||
|
||||
Supported commands:
|
||||
* api setup (setup for API)
|
||||
* api user (API user creation helper)
|
||||
Setup for Icinga 2 API.
|
||||
|
||||
Global options:
|
||||
-h [ --help ] show this help message
|
||||
@ -157,16 +156,19 @@ Global options:
|
||||
--color use VT100 color codes even when stdout is not a
|
||||
terminal
|
||||
-D [ --define ] arg define a constant
|
||||
-a [ --app ] arg application library name (default: icinga)
|
||||
-l [ --library ] arg load a library
|
||||
-I [ --include ] arg add include search directory
|
||||
-x [ --log-level ] arg specify the log level for the console log.
|
||||
The valid value is either debug, notice,
|
||||
information (default), warning, or critical
|
||||
-X [ --script-debugger ] whether to enable the script debugger
|
||||
|
||||
Command options:
|
||||
--cn arg The certificate's common name
|
||||
|
||||
Report bugs at <https://github.com/Icinga/icinga2>
|
||||
Icinga home page: <https://www.icinga.com/>
|
||||
Get support: <https://icinga.com/support/>
|
||||
Documentation: <https://icinga.com/docs/>
|
||||
Icinga home page: <https://icinga.com/>
|
||||
```
|
||||
|
||||
## CLI command: Ca <a id="cli-command-ca"></a>
|
||||
@ -177,7 +179,7 @@ chapter. This CLI command is available since v2.8.
|
||||
|
||||
```
|
||||
# icinga2 ca --help
|
||||
icinga2 - The Icinga 2 network monitoring daemon (version: v2.8.0)
|
||||
icinga2 - The Icinga 2 network monitoring daemon (version: v2.11.0)
|
||||
|
||||
Usage:
|
||||
icinga2 <command> [<arguments>]
|
||||
@ -185,6 +187,8 @@ Usage:
|
||||
Supported commands:
|
||||
* ca list (lists all certificate signing requests)
|
||||
* ca sign (signs an outstanding certificate request)
|
||||
* ca restore (restores a removed certificate request)
|
||||
* ca remove (removes an outstanding certificate request)
|
||||
|
||||
Global options:
|
||||
-h [ --help ] show this help message
|
||||
@ -201,7 +205,44 @@ Global options:
|
||||
-X [ --script-debugger ] whether to enable the script debugger
|
||||
|
||||
Report bugs at <https://github.com/Icinga/icinga2>
|
||||
Icinga home page: <https://www.icinga.com/>
|
||||
Icinga home page: <https://icinga.com/>
|
||||
```
|
||||
|
||||
|
||||
### CLI command: Ca List <a id="cli-command-ca-list"></a>
|
||||
|
||||
```
|
||||
icinga2 ca list --help
|
||||
icinga2 - The Icinga 2 network monitoring daemon (version: v2.11.0)
|
||||
|
||||
Usage:
|
||||
icinga2 ca list [<arguments>]
|
||||
|
||||
Lists pending certificate signing requests.
|
||||
|
||||
Global options:
|
||||
-h [ --help ] show this help message
|
||||
-V [ --version ] show version information
|
||||
--color use VT100 color codes even when stdout is not a
|
||||
terminal
|
||||
-D [ --define ] arg define a constant
|
||||
-I [ --include ] arg add include search directory
|
||||
-x [ --log-level ] arg specify the log level for the console log.
|
||||
The valid value is either debug, notice,
|
||||
information (default), warning, or critical
|
||||
-X [ --script-debugger ] whether to enable the script debugger
|
||||
|
||||
Command options:
|
||||
--all List all certificate signing requests, including
|
||||
signed. Note: Old requests are automatically
|
||||
cleaned by Icinga after 1 week.
|
||||
--removed List all removed CSRs (for use with 'ca restore')
|
||||
--json encode output as JSON
|
||||
|
||||
Report bugs at <https://github.com/Icinga/icinga2>
|
||||
Get support: <https://icinga.com/support/>
|
||||
Documentation: <https://icinga.com/docs/>
|
||||
Icinga home page: <https://icinga.com/>
|
||||
```
|
||||
|
||||
## CLI command: Console <a id="cli-command-console"></a>
|
||||
@ -211,7 +252,7 @@ e.g. to test [functions](17-language-reference.md#functions) in your local sandb
|
||||
|
||||
```
|
||||
$ icinga2 console
|
||||
Icinga 2 (version: v2.8.0)
|
||||
Icinga 2 (version: v2.11.0)
|
||||
<1> => function test(name) {
|
||||
<1> .. log("Hello " + name)
|
||||
<1> .. }
|
||||
@ -226,7 +267,7 @@ Further usage examples can be found in the [library reference](18-library-refere
|
||||
|
||||
```
|
||||
# icinga2 console --help
|
||||
icinga2 - The Icinga 2 network monitoring daemon (version: v2.8.0)
|
||||
icinga2 - The Icinga 2 network monitoring daemon (version: v2.11.0)
|
||||
|
||||
Usage:
|
||||
icinga2 console [<arguments>]
|
||||
@ -255,7 +296,7 @@ Command options:
|
||||
--sandbox enable sandbox mode
|
||||
|
||||
Report bugs at <https://github.com/Icinga/icinga2>
|
||||
Icinga home page: <https://www.icinga.com/>
|
||||
Icinga home page: <https://icinga.com/>
|
||||
```
|
||||
|
||||
|
||||
@ -273,7 +314,7 @@ are required for executing config expressions and auto-completion.
|
||||
|
||||
> **Note**
|
||||
>
|
||||
> The debug console does not currently support SSL certificate verification.
|
||||
> The debug console does not currently support TLS certificate verification.
|
||||
>
|
||||
> Runtime modifications are not validated and might cause the Icinga 2
|
||||
> daemon to crash or behave in an unexpected way. Use these runtime changes
|
||||
@ -294,19 +335,19 @@ Here's an example:
|
||||
|
||||
```
|
||||
$ ICINGA2_API_PASSWORD=icinga icinga2 console --connect 'https://root@localhost:5665/'
|
||||
Icinga 2 (version: v2.8.0)
|
||||
Icinga 2 (version: v2.11.0)
|
||||
<1> =>
|
||||
```
|
||||
|
||||
Once connected you can inspect variables and execute other expressions by entering them at the prompt:
|
||||
|
||||
```
|
||||
<1> => var h = get_host("icinga2-client1.localdomain")
|
||||
<1> => var h = get_host("icinga2-agent1.localdomain")
|
||||
null
|
||||
<2> => h.last_check_result
|
||||
{
|
||||
active = true
|
||||
check_source = "icinga2-client1.localdomain"
|
||||
check_source = "icinga2-agent1.localdomain"
|
||||
command = [ "/usr/local/sbin/check_ping", "-H", "127.0.0.1", "-c", "5000,100%", "-w", "3000,80%" ]
|
||||
execution_end = 1446653527.174983
|
||||
execution_start = 1446653523.152673
|
||||
@ -341,10 +382,10 @@ The `--syntax-only` option can be used in combination with `--eval` or `--file`
|
||||
to check a script for syntax errors. In this mode the script is parsed to identify
|
||||
syntax errors but not evaluated.
|
||||
|
||||
Here's an example that retrieves the command that was used by Icinga to check the `icinga2-client1.localdomain` host:
|
||||
Here's an example that retrieves the command that was used by Icinga to check the `icinga2-agent1.localdomain` host:
|
||||
|
||||
```
|
||||
$ ICINGA2_API_PASSWORD=icinga icinga2 console --connect 'https://root@localhost:5665/' --eval 'get_host("icinga2-client1.localdomain").last_check_result.command' | python -m json.tool
|
||||
$ ICINGA2_API_PASSWORD=icinga icinga2 console --connect 'https://root@localhost:5665/' --eval 'get_host("icinga2-agent1.localdomain").last_check_result.command' | python -m json.tool
|
||||
[
|
||||
"/usr/local/sbin/check_ping",
|
||||
"-H",
|
||||
@ -363,7 +404,7 @@ Furthermore it allows to run the [configuration validation](11-cli-commands.md#c
|
||||
|
||||
```
|
||||
# icinga2 daemon --help
|
||||
icinga2 - The Icinga 2 network monitoring daemon (version: v2.8.0)
|
||||
icinga2 - The Icinga 2 network monitoring daemon (version: v2.11.0)
|
||||
|
||||
Usage:
|
||||
icinga2 daemon [<arguments>]
|
||||
@ -389,11 +430,13 @@ Command options:
|
||||
-z [ --no-config ] start without a configuration file
|
||||
-C [ --validate ] exit after validating the configuration
|
||||
-e [ --errorlog ] arg log fatal errors to the specified log file (only
|
||||
works in combination with --daemonize)
|
||||
works in combination with --daemonize or
|
||||
--close-stdio)
|
||||
-d [ --daemonize ] detach from the controlling terminal
|
||||
--close-stdio do not log to stdout (or stderr) after startup
|
||||
|
||||
Report bugs at <https://github.com/Icinga/icinga2>
|
||||
Icinga home page: <https://www.icinga.com/>
|
||||
Icinga home page: <https://icinga.com/>
|
||||
```
|
||||
|
||||
### Config Files <a id="cli-command-daemon-config-files"></a>
|
||||
@ -403,7 +446,7 @@ Configuration files are processed in the order they're specified on the command-
|
||||
|
||||
When no configuration file is specified and the `--no-config` is not used
|
||||
Icinga 2 automatically falls back to using the configuration file
|
||||
`SysconfDir + "/icinga2/icinga2.conf"` (where SysconfDir is usually `/etc`).
|
||||
`ConfigDir + "/icinga2.conf"` (where ConfigDir is usually `/etc/icinga2`).
|
||||
|
||||
### Validation <a id="cli-command-daemon-validation"></a>
|
||||
|
||||
@ -442,7 +485,7 @@ nodes in a [distributed monitoring](06-distributed-monitoring.md#distributed-mon
|
||||
|
||||
```
|
||||
# icinga2 node --help
|
||||
icinga2 - The Icinga 2 network monitoring daemon (version: v2.8.0)
|
||||
icinga2 - The Icinga 2 network monitoring daemon (version: v2.11.0)
|
||||
|
||||
Usage:
|
||||
icinga2 <command> [<arguments>]
|
||||
@ -466,7 +509,7 @@ Global options:
|
||||
-X [ --script-debugger ] whether to enable the script debugger
|
||||
|
||||
Report bugs at <https://github.com/Icinga/icinga2>
|
||||
Icinga home page: <https://www.icinga.com/>
|
||||
Icinga home page: <https://icinga.com/>
|
||||
```
|
||||
|
||||
## CLI command: Object <a id="cli-command-object"></a>
|
||||
@ -485,7 +528,7 @@ More information can be found in the [troubleshooting](15-troubleshooting.md#tro
|
||||
|
||||
```
|
||||
# icinga2 object --help
|
||||
icinga2 - The Icinga 2 network monitoring daemon (version: v2.7.1-196-g23e8a6253; debug)
|
||||
icinga2 - The Icinga 2 network monitoring daemon (version: v2.11.0)
|
||||
|
||||
Usage:
|
||||
icinga2 <command> [<arguments>]
|
||||
@ -508,7 +551,7 @@ Global options:
|
||||
-X [ --script-debugger ] whether to enable the script debugger
|
||||
|
||||
Report bugs at <https://github.com/Icinga/icinga2>
|
||||
Icinga home page: <https://www.icinga.com/>
|
||||
Icinga home page: <https://icinga.com/>
|
||||
```
|
||||
|
||||
## CLI command: Pki <a id="cli-command-pki"></a>
|
||||
@ -527,7 +570,7 @@ You will need them in the [distributed monitoring chapter](06-distributed-monito
|
||||
|
||||
```
|
||||
# icinga2 pki --help
|
||||
icinga2 - The Icinga 2 network monitoring daemon (version: v2.8.0)
|
||||
icinga2 - The Icinga 2 network monitoring daemon (version: v2.11.0)
|
||||
|
||||
Usage:
|
||||
icinga2 <command> [<arguments>]
|
||||
@ -555,51 +598,7 @@ Global options:
|
||||
-X [ --script-debugger ] whether to enable the script debugger
|
||||
|
||||
Report bugs at <https://github.com/Icinga/icinga2>
|
||||
Icinga home page: <https://www.icinga.com/>
|
||||
```
|
||||
|
||||
## CLI command: Troubleshoot <a id="cli-command-troubleshoot"></a>
|
||||
|
||||
Collects basic information like version, paths, log files and crash reports for troubleshooting
|
||||
purposes and prints them to a file or the console. See [troubleshooting](15-troubleshooting.md#troubleshooting-information-required).
|
||||
|
||||
Its output defaults to a file named `troubleshooting-[TIMESTAMP].log` so it won't overwrite older troubleshooting files.
|
||||
|
||||
Keep in mind that this tool can not collect information from other icinga2 nodes, you will have to run it on
|
||||
each of one of you instances.
|
||||
This is only a tool to collect information to help others help you, it will not attempt to fix anything.
|
||||
|
||||
```
|
||||
# icinga2 troubleshoot --help
|
||||
icinga2 - The Icinga 2 network monitoring daemon (version: v2.8.0)
|
||||
|
||||
Usage:
|
||||
icinga2 troubleshoot [<arguments>]
|
||||
|
||||
Collect logs and other relevant information for troubleshooting purposes.
|
||||
|
||||
Global options:
|
||||
-h [ --help ] show this help message
|
||||
-V [ --version ] show version information
|
||||
--color use VT100 color codes even when stdout is not a
|
||||
terminal
|
||||
-D [ --define ] arg define a constant
|
||||
-a [ --app ] arg application library name (default: icinga)
|
||||
-l [ --library ] arg load a library
|
||||
-I [ --include ] arg add include search directory
|
||||
-x [ --log-level ] arg specify the log level for the console log.
|
||||
The valid value is either debug, notice,
|
||||
information (default), warning, or critical
|
||||
-X [ --script-debugger ] whether to enable the script debugger
|
||||
|
||||
Command options:
|
||||
-c [ --console ] print to console instead of file
|
||||
-o [ --output ] arg path to output file
|
||||
--include-objects Print the whole objectfile (like `object list`)
|
||||
--include-vars Print all Variables (like `variable list`)
|
||||
|
||||
Report bugs at <https://github.com/Icinga/icinga2>
|
||||
Icinga home page: <https://www.icinga.com/>
|
||||
Icinga home page: <https://icinga.com/>
|
||||
```
|
||||
|
||||
## CLI command: Variable <a id="cli-command-variable"></a>
|
||||
@ -608,7 +607,7 @@ Lists all configured variables (constants) in a similar fashion like [object lis
|
||||
|
||||
```
|
||||
# icinga2 variable --help
|
||||
icinga2 - The Icinga 2 network monitoring daemon (version: v2.8.0; debug)
|
||||
icinga2 - The Icinga 2 network monitoring daemon (version: v2.11.0)
|
||||
|
||||
Usage:
|
||||
icinga2 <command> [<arguments>]
|
||||
@ -632,7 +631,7 @@ Global options:
|
||||
-X [ --script-debugger ] whether to enable the script debugger
|
||||
|
||||
Report bugs at <https://github.com/Icinga/icinga2>
|
||||
Icinga home page: <https://www.icinga.com/>
|
||||
Icinga home page: <https://icinga.com/>
|
||||
```
|
||||
|
||||
## Enabling/Disabling Features <a id="enable-features"></a>
|
||||
@ -731,4 +730,3 @@ safely reload the Icinga 2 daemon.
|
||||
The `reload` action will send the `SIGHUP` signal to the Icinga 2 daemon
|
||||
which will validate the configuration in a separate process and not stop
|
||||
the other events like check execution, notifications, etc.
|
||||
|
||||
|
230
doc/13-addons.md
@ -1,37 +1,27 @@
|
||||
# Icinga 2 Addons <a id="addons"></a>
|
||||
# Icinga 2 Addons and Integrations <a id="addons"></a>
|
||||
|
||||
## Graphing <a id="addons-graphing"></a>
|
||||
For an uptodate overview of all integrations and modules,
|
||||
please visit [https://icinga.com/products/](https://icinga.com/products/).
|
||||
|
||||
### PNP <a id="addons-graphing-pnp"></a>
|
||||
|
||||
[PNP](https://www.pnp4nagios.org) is a graphing addon.
|
||||
## Icinga Reporting <a id="addons-reporting"></a>
|
||||
|
||||
[PNP](https://www.pnp4nagios.org) is an addon which adds a graphical representation of the performance data collected
|
||||
by the monitoring plugins. The data is stored as rrd (round robin database) files.
|
||||
The [Icinga Reporting Module](https://icinga.com/docs/reporting/latest/)
|
||||
is the framework and foundation we created to handle data collected
|
||||
by Icinga 2 and other data providers. By definition Icinga Reporting does not collect
|
||||
or calculate any data. The framework processes usable data from data providers such as
|
||||
Icinga’s IDO or Icinga Web 2 modules and makes them available in different formats.
|
||||
|
||||
Use your distribution's package manager to install the `pnp4nagios` package.
|
||||
It can display the data directly within the Icinga web interface or export it to PDF,
|
||||
JSON or CSV format. With scheduled reports you can receive the prepared data periodically
|
||||
via email.
|
||||
|
||||
If you're planning to use it, configure it to use the
|
||||
[bulk mode with npcd and npcdmod](https://docs.pnp4nagios.org/pnp-0.6/modes#bulk_mode_with_npcd_and_npcdmod)
|
||||
in combination with Icinga 2's [PerfdataWriter](14-features.md#performance-data). NPCD collects the performance
|
||||
data files which Icinga 2 generates.
|
||||

|
||||
|
||||
Enable performance data writer in icinga 2
|
||||
Follow along in this [hands-on blog post](https://icinga.com/2019/06/17/icinga-reporting-hands-on/).
|
||||
|
||||
# icinga2 feature enable perfdata
|
||||
|
||||
Configure npcd to use the performance data created by Icinga 2:
|
||||
|
||||
vim /etc/pnp4nagios/npcd.cfg
|
||||
|
||||
Set `perfdata_spool_dir = /var/spool/icinga2/perfdata` and restart the `npcd` daemon.
|
||||
|
||||
There's also an Icinga Web 2 module for direct PNP graph integration
|
||||
available at [Icinga Exchange](https://exchange.icinga.com/icinga/PNP).
|
||||
|
||||
More information on [action_url as attribute](13-addons.md#addons-graphing-pnp-action-url)
|
||||
and [graph template names](13-addons.md#addons-graphing-pnp-custom-templates).
|
||||
|
||||
## Graphs and Metrics <a id="addons-graphs-metrics"></a>
|
||||
|
||||
### Graphite <a id="addons-graphing-graphite"></a>
|
||||
|
||||
@ -45,15 +35,22 @@ Graphite consists of 3 software components:
|
||||
* whisper -- a simple database library for storing time-series data (similar in design to RRD)
|
||||
* graphite webapp -- a Django webapp that renders graphs on-demand using Cairo
|
||||
|
||||
You need to install Graphite first, then proceed with configuring it in Icinga 2.
|
||||
|
||||
Use the [GraphiteWriter](14-features.md#graphite-carbon-cache-writer) feature
|
||||
for sending real-time metrics from Icinga 2 to Graphite.
|
||||
|
||||
# icinga2 feature enable graphite
|
||||
|
||||
There are Graphite addons available for collecting the performance data files too (e.g. `Graphios`).
|
||||
```
|
||||
# icinga2 feature enable graphite
|
||||
```
|
||||
|
||||
A popular alternative frontend for Graphite is for example [Grafana](https://grafana.org).
|
||||
|
||||
Integration in Icinga Web 2 is possible by installing the official [graphite module](https://icinga.com/docs/graphite/latest/).
|
||||
|
||||

|
||||
|
||||
|
||||
### InfluxDB <a id="addons-graphing-influxdb"></a>
|
||||
|
||||
[InfluxDB](https://influxdb.com) is a time series, metrics, and analytics database.
|
||||
@ -62,35 +59,96 @@ It’s written in Go and has no external dependencies.
|
||||
Use the [InfluxdbWriter](14-features.md#influxdb-writer) feature
|
||||
for sending real-time metrics from Icinga 2 to InfluxDB.
|
||||
|
||||
# icinga2 feature enable influxdb
|
||||
```
|
||||
# icinga2 feature enable influxdb
|
||||
```
|
||||
|
||||
A popular frontend for InfluxDB is for example [Grafana](https://grafana.org).
|
||||
|
||||
Integration in Icinga Web 2 is possible by installing the community [Grafana module](https://github.com/Mikesch-mp/icingaweb2-module-grafana).
|
||||
|
||||

|
||||
|
||||
|
||||
### PNP <a id="addons-graphing-pnp"></a>
|
||||
|
||||
[PNP](https://www.pnp4nagios.org) is a graphing addon.
|
||||
|
||||
[PNP](https://www.pnp4nagios.org) is an addon which adds a graphical representation of the performance data collected
|
||||
by the monitoring plugins. The data is stored as rrd (round robin database) files.
|
||||
|
||||
Use your distribution's package manager to install the `pnp4nagios` package.
|
||||
|
||||
If you're planning to use it, configure it to use the
|
||||
[bulk mode with npcd and npcdmod](https://docs.pnp4nagios.org/pnp-0.6/modes#bulk_mode_with_npcd_and_npcdmod)
|
||||
in combination with Icinga 2's [PerfdataWriter](14-features.md#writing-performance-data-files). NPCD collects the performance
|
||||
data files which Icinga 2 generates.
|
||||
|
||||
Enable performance data writer in icinga 2
|
||||
|
||||
```
|
||||
# icinga2 feature enable perfdata
|
||||
```
|
||||
|
||||
Configure npcd to use the performance data created by Icinga 2:
|
||||
|
||||
```
|
||||
vim /etc/pnp4nagios/npcd.cfg
|
||||
```
|
||||
|
||||
Set `perfdata_spool_dir = /var/spool/icinga2/perfdata` and restart the `npcd` daemon.
|
||||
|
||||
There's also an Icinga Web 2 module for direct PNP graph integration
|
||||
available at [Icinga Exchange](https://exchange.icinga.com/icinga/PNP).
|
||||
|
||||
## Visualization <a id="addons-visualization"></a>
|
||||
|
||||
### Icinga Reporting <a id="addons-visualization-reporting"></a>
|
||||
### Maps <a id="addons-visualization-maps"></a>
|
||||
|
||||
By enabling the [DB IDO](14-features.md#db-ido) feature you can use the
|
||||
[Icinga Reporting package](https://docs.icinga.com/latest/en/reporting.html).
|
||||
This community module displays host objects as markers on openstreetmap in Icinga Web 2.
|
||||
It uses the data provided by the monitoring module and as such the [DB IDO](14-features.md#db-ido)
|
||||
from Icinga 2.
|
||||
|
||||
### NagVis <a id="addons-visualization-nagvis"></a>
|
||||
If you configure multiple hosts with the same coordinates, i.e. servers in a datacenter, a clustered view is rendered.
|
||||
|
||||
By using either [Livestatus](14-features.md#setting-up-livestatus) or
|
||||
[DB IDO](14-features.md#db-ido) as a backend you can create your own network maps
|
||||
based on your monitoring configuration and status data using [NagVis](https://www.nagvis.org).
|
||||
Check the [Map module docs](https://github.com/nbuchwitz/icingaweb2-module-map) for more details on
|
||||
installation, configuration and integration.
|
||||
|
||||
The configuration in nagvis.ini.php should look like this for Livestatus for example:
|
||||

|
||||
|
||||
[backend_live_1]
|
||||
backendtype="mklivestatus"
|
||||
socket="unix:/var/run/icinga2/cmd/livestatus"
|
||||
### Business Process <a id="addons-business-process"></a>
|
||||
|
||||
If you are planning an integration into Icinga Web 2, look at [this module](https://github.com/Icinga/icingaweb2-module-nagvis).
|
||||
Create top-level views of your applications in a graphical editor.
|
||||
Rules express dependencies between existing hosts and services and
|
||||
let you alert on application level. Business processes are displayed
|
||||
in a tree or list overview and can be added to any dashboard.
|
||||
|
||||
### Thruk <a id="addons-visualization-thruk"></a>
|
||||

|
||||
|
||||
Read more [here](https://icinga.com/products/icinga-business-process-modelling/).
|
||||
|
||||
### Certificate Monitoring <a id="addons-visualization-certificate-monitoring"></a>
|
||||
|
||||
Monitor your certificates in an efficient and comfortable way. Be aware of required
|
||||
actions and view all details at a glance.
|
||||
|
||||

|
||||
|
||||
Read more [here](https://icinga.com/products/icinga-certificate-monitoring/)
|
||||
and [here](https://icinga.com/2019/06/03/monitoring-automation-with-icinga-certificate-monitoring/).
|
||||
|
||||
### Dashing Dashboard <a id="addons-visualization-dashing-dashboard"></a>
|
||||
|
||||
The [Icinga 2 dashboard](https://github.com/dnsmichi/dashing-icinga2) is built
|
||||
on top of Dashing and uses the [REST API](12-icinga2-api.md#icinga2-api) to visualize what's going
|
||||
on with your monitoring. It combines several popular widgets and provides development
|
||||
instructions for your own implementation.
|
||||
|
||||
The dashboard also allows to embed the [Icinga Web 2](https://icinga.com/products/icinga-web-2/)
|
||||
host and service problem lists as Iframe.
|
||||
|
||||

|
||||
|
||||
[Thruk](https://www.thruk.org) is an alternative web interface which can be used with Icinga 2
|
||||
and the [Livestatus](14-features.md#setting-up-livestatus) feature.
|
||||
|
||||
## Log Monitoring <a id="log-monitoring"></a>
|
||||
|
||||
@ -102,7 +160,7 @@ is even simpler these days.
|
||||
* Configure the logstash `nagios` output to send passive traps to Icinga 2 using the external command pipe.
|
||||
* Execute a plugin to check Graylog alert streams.
|
||||
|
||||
More details can be found in [this blog post](https://www.icinga.com/2014/12/02/team-icinga-at-osmc-2014/).
|
||||
More details can be found in [this blog post](https://icinga.com/2014/12/02/team-icinga-at-osmc-2014/).
|
||||
|
||||
## Notification Scripts and Interfaces <a id="notification-scripts-interfaces"></a>
|
||||
|
||||
@ -116,79 +174,27 @@ There's a variety of resources available, for example different notification scr
|
||||
* Ticket systems
|
||||
* etc.
|
||||
|
||||
Additionally external services can be [integrated with Icinga 2](https://www.icinga.com/products/integrations/):
|
||||
Blog posts and howtos:
|
||||
|
||||
* [Pagerduty](https://www.icinga.com/partners/pagerduty/)
|
||||
* [VictorOps](https://www.icinga.com/partners/victorops/)
|
||||
* [StackStorm](https://www.icinga.com/partners/stackstorm/)
|
||||
* [Environmental Monitoring and Alerting](https://icinga.com/2019/09/02/environmental-monitoring-and-alerting-via-text-message/)
|
||||
|
||||
More information can be found on the [Icinga Website](https://www.icinga.com/).
|
||||
Additionally external services can be [integrated with Icinga 2](https://icinga.com/products/integrations/):
|
||||
|
||||
* [Pagerduty](https://icinga.com/products/integrations/pagerduty/)
|
||||
* [VictorOps](https://icinga.com/products/integrations/victorops/)
|
||||
* [StackStorm](https://icinga.com/products/integrations/stackstorm/)
|
||||
|
||||
More information can be found on the [Icinga Website](https://icinga.com/).
|
||||
|
||||
## Configuration Management Tools <a id="configuration-tools"></a>
|
||||
|
||||
If you require your favourite configuration tool to export the Icinga 2 configuration, please get in
|
||||
touch with their developers. The Icinga project does not provide a configuration web interface
|
||||
yet. Follow the [Icinga Blog](https://www.icinga.com/blog/) for updates on this topic.
|
||||
Checkout these specific integrations:
|
||||
|
||||
If you're looking for puppet manifests, chef cookbooks, ansible recipes, etc. -- we're happy
|
||||
to integrate them upstream, so please get in touch with the [Icinga team](https://www.icinga.com/community/get-involved/).
|
||||
* [Ansible Roles](https://icinga.com/products/integrations/)
|
||||
* [Puppet Module](https://icinga.com/products/integrations/puppet/)
|
||||
* [Chef Cookbook](https://icinga.com/products/integrations/chef/)
|
||||
|
||||
These tools are currently in development and require feedback and tests:
|
||||
If you're looking for different config management integrations -- we're happy
|
||||
to add them upstream, so please get in touch with the [Icinga team](https://icinga.com/community/).
|
||||
|
||||
* [Ansible Roles](https://github.com/Icinga/icinga2-ansible)
|
||||
* [Puppet Module](https://github.com/Icinga/puppet-icinga2)
|
||||
* [Chef Cookbook](https://github.com/Icinga/chef-icinga2)
|
||||
|
||||
## More Addon Integration Hints <a id="addon-integration-hints"></a>
|
||||
|
||||
### PNP Action Url <a id="addons-graphing-pnp-action-url"></a>
|
||||
|
||||
They work in a similar fashion for Icinga 2 and are used for 1.x web interfaces (Icinga Web 2 doesn't require
|
||||
the action url attribute in its own module).
|
||||
|
||||
template Host "pnp-hst" {
|
||||
action_url = "/pnp4nagios/graph?host=$HOSTNAME$"
|
||||
}
|
||||
|
||||
template Service "pnp-svc" {
|
||||
action_url = "/pnp4nagios/graph?host=$HOSTNAME$&srv=$SERVICEDESC$"
|
||||
}
|
||||
|
||||
### PNP Custom Templates with Icinga 2 <a id="addons-graphing-pnp-custom-templates"></a>
|
||||
|
||||
PNP automatically determines the graph template from the check command name (or the argument's name).
|
||||
This behavior changed in Icinga 2 compared to Icinga 1.x. Though there are certain possibilities to
|
||||
fix this:
|
||||
|
||||
* Create a symlink for example from the `templates.dist/check_ping.php` template to the actual check name in Icinga 2 (`templates/ping4.php`)
|
||||
* Pass the check command name inside the [format template configuration](14-features.md#writing-performance-data-files)
|
||||
|
||||
The latter becomes difficult with agent based checks like NRPE or SSH where the first command argument acts as
|
||||
graph template identifier. There is the possibility to define the pnp template name as custom attribute
|
||||
and use that inside the formatting templates as `SERVICECHECKCOMMAND` for instance.
|
||||
|
||||
Example for services:
|
||||
|
||||
# vim /etc/icinga2/features-enabled/perfdata.conf
|
||||
|
||||
service_format_template = "DATATYPE::SERVICEPERFDATA\tTIMET::$icinga.timet$\tHOSTNAME::$host.name$\tSERVICEDESC::$service.name$\tSERVICEPERFDATA::$service.perfdata$\tSERVICECHECKCOMMAND::$service.check_command$$pnp_check_arg1$\tHOSTSTATE::$host.state$\tHOSTSTATETYPE::$host.state_type$\tSERVICESTATE::$service.state$\tSERVICESTATETYPE::$service.state_type$"
|
||||
|
||||
# vim /etc/icinga2/conf.d/services.conf
|
||||
|
||||
template Service "pnp-svc" {
|
||||
action_url = "/pnp4nagios/graph?host=$HOSTNAME$&srv=$SERVICEDESC$"
|
||||
vars.pnp_check_arg1 = ""
|
||||
}
|
||||
|
||||
apply Service "nrpe-check" {
|
||||
import "pnp-svc"
|
||||
check_command = nrpe
|
||||
vars.nrpe_command = "check_disk"
|
||||
|
||||
vars.pnp_check_arg1 = "!$nrpe_command$"
|
||||
}
|
||||
|
||||
If there are warnings about unresolved macros, make sure to specify a default value for `vars.pnp_check_arg1` inside the
|
||||
|
||||
In PNP, the custom template for nrpe is then defined in `/etc/pnp4nagios/custom/nrpe.cfg`
|
||||
and the additional command arg string will be seen in the xml too for other templates.
|
||||
|
@ -21,25 +21,42 @@ By default file the `mainlog` feature is enabled. When running Icinga 2
|
||||
on a terminal log messages with severity `information` or higher are
|
||||
written to the console.
|
||||
|
||||
Packages will install a configuration file for logrotate on supported
|
||||
platforms. This configuration ensures that the `icinga2.log`, `error.log` and
|
||||
`debug.log` files are rotated on a daily basis.
|
||||
### Log Rotation <a id="logging-logrotate"></a>
|
||||
|
||||
## DB IDO <a id="db-ido"></a>
|
||||
Packages provide a configuration file for [logrotate](https://linux.die.net/man/8/logrotate)
|
||||
on Linux/Unix. Typically this is installed into `/etc/logrotate.d/icinga2`
|
||||
and modifications won't be overridden on upgrade.
|
||||
|
||||
Instead of sending the reload HUP signal, logrotate
|
||||
sends the USR1 signal to notify the Icinga daemon
|
||||
that it has rotate the log file. Icinga reopens the log
|
||||
files then:
|
||||
|
||||
* `/var/log/icinga2/icinga2.log` (requires `mainlog` enabled)
|
||||
* `/var/log/icinga2/debug.log` (requires `debuglog` enabled)
|
||||
* `/var/log/icinga2/erorr.log`
|
||||
|
||||
By default, log files will be rotated daily.
|
||||
|
||||
## Core Backends <a id="core-backends"></a>
|
||||
|
||||
### REST API <a id="core-backends-api"></a>
|
||||
|
||||
The REST API is documented [here](12-icinga2-api.md#icinga2-api) as a core feature.
|
||||
|
||||
### IDO Database (DB IDO) <a id="db-ido"></a>
|
||||
|
||||
The IDO (Icinga Data Output) feature for Icinga 2 takes care of exporting all
|
||||
configuration and status information into a database. The IDO database is used
|
||||
by Icinga Web 2 as data backend.
|
||||
|
||||
Details on the installation can be found in the [Configuring DB IDO](02-getting-started.md#configuring-db-ido-mysql)
|
||||
Details on the installation can be found in the [Configuring DB IDO](02-installation.md#configuring-db-ido-mysql)
|
||||
chapter. Details on the configuration can be found in the
|
||||
[IdoMysqlConnection](09-object-types.md#objecttype-idomysqlconnection) and
|
||||
[IdoPgsqlConnection](09-object-types.md#objecttype-idopgsqlconnection)
|
||||
object configuration documentation.
|
||||
The DB IDO feature supports [High Availability](06-distributed-monitoring.md#distributed-monitoring-high-availability-db-ido) in
|
||||
the Icinga 2 cluster.
|
||||
|
||||
### DB IDO Health <a id="db-ido-health"></a>
|
||||
#### DB IDO Health <a id="db-ido-health"></a>
|
||||
|
||||
If the monitoring health indicator is critical in Icinga Web 2,
|
||||
you can use the following queries to manually check whether Icinga 2
|
||||
@ -87,8 +104,46 @@ status_update_time
|
||||
|
||||
A detailed list on the available table attributes can be found in the [DB IDO Schema documentation](24-appendix.md#schema-db-ido).
|
||||
|
||||
#### DB IDO in Cluster HA Zones <a id="db-ido-cluster-ha"></a>
|
||||
|
||||
### DB IDO Tuning <a id="db-ido-tuning"></a>
|
||||
The DB IDO feature supports [High Availability](06-distributed-monitoring.md#distributed-monitoring-high-availability-db-ido) in
|
||||
the Icinga 2 cluster.
|
||||
|
||||
By default, both endpoints in a zone calculate the
|
||||
endpoint which activates the feature, the other endpoint
|
||||
automatically pauses it. If the cluster connection
|
||||
breaks at some point, the paused IDO feature automatically
|
||||
does a failover.
|
||||
|
||||
You can disable this behaviour by setting `enable_ha = false`
|
||||
in both feature configuration files.
|
||||
|
||||
#### DB IDO Cleanup <a id="db-ido-cleanup"></a>
|
||||
|
||||
Objects get deactivated when they are deleted from the configuration.
|
||||
This is visible with the `is_active` column in the `icinga_objects` table.
|
||||
Therefore all queries need to join this table and add `WHERE is_active=1` as
|
||||
condition. Deleted objects preserve their history table entries for later SLA
|
||||
reporting.
|
||||
|
||||
Historical data isn't purged by default. You can enable the least
|
||||
kept data age inside the `cleanup` configuration attribute for the
|
||||
IDO features [IdoMysqlConnection](09-object-types.md#objecttype-idomysqlconnection)
|
||||
and [IdoPgsqlConnection](09-object-types.md#objecttype-idopgsqlconnection).
|
||||
|
||||
Example if you prefer to keep notification history for 30 days:
|
||||
|
||||
```
|
||||
cleanup = {
|
||||
notifications_age = 30d
|
||||
contactnotifications_age = 30d
|
||||
}
|
||||
```
|
||||
|
||||
The historical tables are populated depending on the data `categories` specified.
|
||||
Some tables are empty by default.
|
||||
|
||||
#### DB IDO Tuning <a id="db-ido-tuning"></a>
|
||||
|
||||
As with any application database, there are ways to optimize and tune the database performance.
|
||||
|
||||
@ -134,103 +189,52 @@ VACUUM
|
||||
> Don't use `VACUUM FULL` as this has a severe impact on performance.
|
||||
|
||||
|
||||
## External Commands <a id="external-commands"></a>
|
||||
## Metrics <a id="metrics"></a>
|
||||
|
||||
> **Note**
|
||||
>
|
||||
> Please use the [REST API](12-icinga2-api.md#icinga2-api) as modern and secure alternative
|
||||
> for external actions.
|
||||
Whenever a host or service check is executed, or received via the REST API,
|
||||
best practice is to provide performance data.
|
||||
|
||||
Icinga 2 provides an external command pipe for processing commands
|
||||
triggering specific actions (for example rescheduling a service check
|
||||
through the web interface).
|
||||
This data is parsed by features sending metrics to time series databases (TSDB):
|
||||
|
||||
In order to enable the `ExternalCommandListener` configuration use the
|
||||
following command and restart Icinga 2 afterwards:
|
||||
* [Graphite](14-features.md#graphite-carbon-cache-writer)
|
||||
* [InfluxDB](14-features.md#influxdb-writer)
|
||||
* [OpenTSDB](14-features.md#opentsdb-writer)
|
||||
|
||||
# icinga2 feature enable command
|
||||
Metrics, state changes and notifications can be managed with the following integrations:
|
||||
|
||||
Icinga 2 creates the command pipe file as `/var/run/icinga2/cmd/icinga2.cmd`
|
||||
using the default configuration.
|
||||
* [Elastic Stack](14-features.md#elastic-stack-integration)
|
||||
* [Graylog](14-features.md#graylog-integration)
|
||||
|
||||
Web interfaces and other Icinga addons are able to send commands to
|
||||
Icinga 2 through the external command pipe, for example for rescheduling
|
||||
a forced service check:
|
||||
|
||||
# /bin/echo "[`date +%s`] SCHEDULE_FORCED_SVC_CHECK;localhost;ping4;`date +%s`" >> /var/run/icinga2/cmd/icinga2.cmd
|
||||
### Graphite Writer <a id="graphite-carbon-cache-writer"></a>
|
||||
|
||||
# tail -f /var/log/messages
|
||||
[Graphite](13-addons.md#addons-graphing-graphite) is a tool stack for storing
|
||||
metrics and needs to be running prior to enabling the `graphite` feature.
|
||||
|
||||
Oct 17 15:01:25 icinga-server icinga2: Executing external command: [1382014885] SCHEDULE_FORCED_SVC_CHECK;localhost;ping4;1382014885
|
||||
Oct 17 15:01:25 icinga-server icinga2: Rescheduling next check for service 'ping4'
|
||||
|
||||
A list of currently supported external commands can be found [here](24-appendix.md#external-commands-list-detail).
|
||||
|
||||
Detailed information on the commands and their required parameters can be found
|
||||
on the [Icinga 1.x documentation](https://docs.icinga.com/latest/en/extcommands2.html).
|
||||
|
||||
## Performance Data <a id="performance-data"></a>
|
||||
|
||||
When a host or service check is executed plugins should provide so-called
|
||||
`performance data`. Next to that additional check performance data
|
||||
can be fetched using Icinga 2 runtime macros such as the check latency
|
||||
or the current service state (or additional custom attributes).
|
||||
|
||||
The performance data can be passed to external applications which aggregate and
|
||||
store them in their backends. These tools usually generate graphs for historical
|
||||
reporting and trending.
|
||||
|
||||
Well-known addons processing Icinga performance data are [PNP4Nagios](13-addons.md#addons-graphing-pnp),
|
||||
[Graphite](13-addons.md#addons-graphing-graphite) or [OpenTSDB](14-features.md#opentsdb-writer).
|
||||
|
||||
### Writing Performance Data Files <a id="writing-performance-data-files"></a>
|
||||
|
||||
PNP4Nagios and Graphios use performance data collector daemons to fetch
|
||||
the current performance files for their backend updates.
|
||||
|
||||
Therefore the Icinga 2 [PerfdataWriter](09-object-types.md#objecttype-perfdatawriter)
|
||||
feature allows you to define the output template format for host and services helped
|
||||
with Icinga 2 runtime vars.
|
||||
|
||||
host_format_template = "DATATYPE::HOSTPERFDATA\tTIMET::$icinga.timet$\tHOSTNAME::$host.name$\tHOSTPERFDATA::$host.perfdata$\tHOSTCHECKCOMMAND::$host.check_command$\tHOSTSTATE::$host.state$\tHOSTSTATETYPE::$host.state_type$"
|
||||
service_format_template = "DATATYPE::SERVICEPERFDATA\tTIMET::$icinga.timet$\tHOSTNAME::$host.name$\tSERVICEDESC::$service.name$\tSERVICEPERFDATA::$service.perfdata$\tSERVICECHECKCOMMAND::$service.check_command$\tHOSTSTATE::$host.state$\tHOSTSTATETYPE::$host.state_type$\tSERVICESTATE::$service.state$\tSERVICESTATETYPE::$service.state_type$"
|
||||
|
||||
The default templates are already provided with the Icinga 2 feature configuration
|
||||
which can be enabled using
|
||||
|
||||
# icinga2 feature enable perfdata
|
||||
|
||||
By default all performance data files are rotated in a 15 seconds interval into
|
||||
the `/var/spool/icinga2/perfdata/` directory as `host-perfdata.<timestamp>` and
|
||||
`service-perfdata.<timestamp>`.
|
||||
External collectors need to parse the rotated performance data files and then
|
||||
remove the processed files.
|
||||
|
||||
### Graphite Carbon Cache Writer <a id="graphite-carbon-cache-writer"></a>
|
||||
|
||||
While there are some [Graphite](13-addons.md#addons-graphing-graphite)
|
||||
collector scripts and daemons like Graphios available for Icinga 1.x it's more
|
||||
reasonable to directly process the check and plugin performance
|
||||
in memory in Icinga 2. Once there are new metrics available, Icinga 2 will directly
|
||||
write them to the defined Graphite Carbon daemon tcp socket.
|
||||
Icinga 2 writes parsed metrics directly to Graphite's Carbon Cache
|
||||
TCP port, defaulting to `2003`.
|
||||
|
||||
You can enable the feature using
|
||||
|
||||
# icinga2 feature enable graphite
|
||||
```
|
||||
# icinga2 feature enable graphite
|
||||
```
|
||||
|
||||
By default the [GraphiteWriter](09-object-types.md#objecttype-graphitewriter) feature
|
||||
expects the Graphite Carbon Cache to listen at `127.0.0.1` on TCP port `2003`.
|
||||
|
||||
#### Current Graphite Schema <a id="graphite-carbon-cache-writer-schema"></a>
|
||||
#### Graphite Schema <a id="graphite-carbon-cache-writer-schema"></a>
|
||||
|
||||
The current naming schema is defined as follows. The [Icinga Web 2 Graphite module](https://github.com/icinga/icingaweb2-module-graphite)
|
||||
The current naming schema is defined as follows. The [Icinga Web 2 Graphite module](https://icinga.com/products/integrations/graphite/)
|
||||
depends on this schema.
|
||||
|
||||
The default prefix for hosts and services is configured using
|
||||
[runtime macros](03-monitoring-basics.md#runtime-macros)like this:
|
||||
|
||||
icinga2.$host.name$.host.$host.check_command$
|
||||
icinga2.$host.name$.services.$service.name$.$service.check_command$
|
||||
```
|
||||
icinga2.$host.name$.host.$host.check_command$
|
||||
icinga2.$host.name$.services.$service.name$.$service.check_command$
|
||||
```
|
||||
|
||||
You can customize the prefix name by using the `host_name_template` and
|
||||
`service_name_template` configuration attributes.
|
||||
@ -250,9 +254,12 @@ The following characters are escaped in prefix labels:
|
||||
|
||||
Metric values are stored like this:
|
||||
|
||||
<prefix>.perfdata.<perfdata-label>.value
|
||||
```
|
||||
<prefix>.perfdata.<perfdata-label>.value
|
||||
```
|
||||
|
||||
The following characters are escaped in perfdata labels:
|
||||
The following characters are escaped in performance labels
|
||||
parsed from plugin output:
|
||||
|
||||
Character | Escaped character
|
||||
--------------|--------------------------
|
||||
@ -261,29 +268,33 @@ The following characters are escaped in perfdata labels:
|
||||
/ | _
|
||||
:: | .
|
||||
|
||||
Note that perfdata labels may contain dots (`.`) allowing to
|
||||
Note that labels may contain dots (`.`) allowing to
|
||||
add more subsequent levels inside the Graphite tree.
|
||||
`::` adds support for [multi performance labels](http://my-plugin.de/wiki/projects/check_multi/configuration/performance)
|
||||
and is therefore replaced by `.`.
|
||||
|
||||
By enabling `enable_send_thresholds` Icinga 2 automatically adds the following threshold metrics:
|
||||
|
||||
<prefix>.perfdata.<perfdata-label>.min
|
||||
<prefix>.perfdata.<perfdata-label>.max
|
||||
<prefix>.perfdata.<perfdata-label>.warn
|
||||
<prefix>.perfdata.<perfdata-label>.crit
|
||||
```
|
||||
<prefix>.perfdata.<perfdata-label>.min
|
||||
<prefix>.perfdata.<perfdata-label>.max
|
||||
<prefix>.perfdata.<perfdata-label>.warn
|
||||
<prefix>.perfdata.<perfdata-label>.crit
|
||||
```
|
||||
|
||||
By enabling `enable_send_metadata` Icinga 2 automatically adds the following metadata metrics:
|
||||
|
||||
<prefix>.metadata.current_attempt
|
||||
<prefix>.metadata.downtime_depth
|
||||
<prefix>.metadata.acknowledgement
|
||||
<prefix>.metadata.execution_time
|
||||
<prefix>.metadata.latency
|
||||
<prefix>.metadata.max_check_attempts
|
||||
<prefix>.metadata.reachable
|
||||
<prefix>.metadata.state
|
||||
<prefix>.metadata.state_type
|
||||
```
|
||||
<prefix>.metadata.current_attempt
|
||||
<prefix>.metadata.downtime_depth
|
||||
<prefix>.metadata.acknowledgement
|
||||
<prefix>.metadata.execution_time
|
||||
<prefix>.metadata.latency
|
||||
<prefix>.metadata.max_check_attempts
|
||||
<prefix>.metadata.reachable
|
||||
<prefix>.metadata.state
|
||||
<prefix>.metadata.state_type
|
||||
```
|
||||
|
||||
Metadata metric overview:
|
||||
|
||||
@ -302,10 +313,31 @@ Metadata metric overview:
|
||||
The following example illustrates how to configure the storage schemas for Graphite Carbon
|
||||
Cache.
|
||||
|
||||
[icinga2_default]
|
||||
# intervals like PNP4Nagios uses them per default
|
||||
pattern = ^icinga2\.
|
||||
retentions = 1m:2d,5m:10d,30m:90d,360m:4y
|
||||
```
|
||||
[icinga2_default]
|
||||
# intervals like PNP4Nagios uses them per default
|
||||
pattern = ^icinga2\.
|
||||
retentions = 1m:2d,5m:10d,30m:90d,360m:4y
|
||||
```
|
||||
|
||||
#### Graphite in Cluster HA Zones <a id="graphite-carbon-cache-writer-cluster-ha"></a>
|
||||
|
||||
The Graphite feature supports [high availability](06-distributed-monitoring.md#distributed-monitoring-high-availability-features)
|
||||
in cluster zones since 2.11.
|
||||
|
||||
By default, all endpoints in a zone will activate the feature and start
|
||||
writing metrics to a Carbon Cache socket. In HA enabled scenarios,
|
||||
it is possible to set `enable_ha = true` in all feature configuration
|
||||
files. This allows each endpoint to calculate the feature authority,
|
||||
and only one endpoint actively writes metrics, the other endpoints
|
||||
pause the feature.
|
||||
|
||||
When the cluster connection breaks at some point, the remaining endpoint(s)
|
||||
in that zone will automatically resume the feature. This built-in failover
|
||||
mechanism ensures that metrics are written even if the cluster fails.
|
||||
|
||||
The recommended way of running Graphite in this scenario is a dedicated server
|
||||
where Carbon Cache/Relay is running as receiver.
|
||||
|
||||
|
||||
### InfluxDB Writer <a id="influxdb-writer"></a>
|
||||
@ -315,7 +347,9 @@ defined InfluxDB HTTP API.
|
||||
|
||||
You can enable the feature using
|
||||
|
||||
# icinga2 feature enable influxdb
|
||||
```
|
||||
# icinga2 feature enable influxdb
|
||||
```
|
||||
|
||||
By default the [InfluxdbWriter](09-object-types.md#objecttype-influxdbwriter) feature
|
||||
expects the InfluxDB daemon to listen at `127.0.0.1` on port `8086`.
|
||||
@ -352,7 +386,7 @@ apply Service "disk" for (disk => attributes in host.vars.disks) {
|
||||
}
|
||||
```
|
||||
|
||||
This is a typical pattern for checking individual disks, NICs, SSL certificates etc associated
|
||||
This is a typical pattern for checking individual disks, NICs, TLS certificates etc associated
|
||||
with a host. What would be useful is to have the data points tagged with the specific instance
|
||||
for that check. This would allow you to query time series data for a check on a host and for a
|
||||
specific instance e.g. /dev/sda. To do this quite simply add the instance to the service variables:
|
||||
@ -383,16 +417,35 @@ object InfluxdbWriter "influxdb" {
|
||||
}
|
||||
```
|
||||
|
||||
#### InfluxDB in Cluster HA Zones <a id="influxdb-writer-cluster-ha"></a>
|
||||
|
||||
The InfluxDB feature supports [high availability](06-distributed-monitoring.md#distributed-monitoring-high-availability-features)
|
||||
in cluster zones since 2.11.
|
||||
|
||||
By default, all endpoints in a zone will activate the feature and start
|
||||
writing metrics to the InfluxDB HTTP API. In HA enabled scenarios,
|
||||
it is possible to set `enable_ha = true` in all feature configuration
|
||||
files. This allows each endpoint to calculate the feature authority,
|
||||
and only one endpoint actively writes metrics, the other endpoints
|
||||
pause the feature.
|
||||
|
||||
When the cluster connection breaks at some point, the remaining endpoint(s)
|
||||
in that zone will automatically resume the feature. This built-in failover
|
||||
mechanism ensures that metrics are written even if the cluster fails.
|
||||
|
||||
The recommended way of running InfluxDB in this scenario is a dedicated server
|
||||
where the InfluxDB HTTP API or Telegraf as Proxy are running.
|
||||
|
||||
### Elastic Stack Integration <a id="elastic-stack-integration"></a>
|
||||
|
||||
[Icingabeat](https://github.com/icinga/icingabeat) is an Elastic Beat that fetches data
|
||||
[Icingabeat](https://icinga.com/products/integrations/elastic/) is an Elastic Beat that fetches data
|
||||
from the Icinga 2 API and sends it either directly to [Elasticsearch](https://www.elastic.co/products/elasticsearch)
|
||||
or [Logstash](https://www.elastic.co/products/logstash).
|
||||
|
||||
More integrations:
|
||||
|
||||
* [Logstash output](https://github.com/Icinga/logstash-output-icinga) for the Icinga 2 API.
|
||||
* [Logstash Grok Pattern](https://github.com/Icinga/logstash-grok-pattern) for Icinga 2 logs.
|
||||
* [Logstash output](https://icinga.com/products/integrations/elastic/) for the Icinga 2 API.
|
||||
* [Logstash Grok Pattern](https://icinga.com/products/integrations/elastic/) for Icinga 2 logs.
|
||||
|
||||
#### Elasticsearch Writer <a id="elasticsearch-writer"></a>
|
||||
|
||||
@ -403,7 +456,10 @@ The check results include parsed performance data metrics if enabled.
|
||||
|
||||
> **Note**
|
||||
>
|
||||
> Elasticsearch 5.x or 6.x are required. This feature has been successfully tested with Elasticsearch 5.6.7 and 6.2.3.
|
||||
> Elasticsearch 5.x or 6.x are required. This feature has been successfully tested with
|
||||
> Elasticsearch 5.6.7 and 6.3.1.
|
||||
|
||||
|
||||
|
||||
Enable the feature and restart Icinga 2.
|
||||
|
||||
@ -429,7 +485,9 @@ attribute.
|
||||
|
||||
Metric values are stored like this:
|
||||
|
||||
check_result.perfdata.<perfdata-label>.value
|
||||
```
|
||||
check_result.perfdata.<perfdata-label>.value
|
||||
```
|
||||
|
||||
The following characters are escaped in perfdata labels:
|
||||
|
||||
@ -448,10 +506,32 @@ and is therefore replaced by `.`.
|
||||
Icinga 2 automatically adds the following threshold metrics
|
||||
if existing:
|
||||
|
||||
check_result.perfdata.<perfdata-label>.min
|
||||
check_result.perfdata.<perfdata-label>.max
|
||||
check_result.perfdata.<perfdata-label>.warn
|
||||
check_result.perfdata.<perfdata-label>.crit
|
||||
```
|
||||
check_result.perfdata.<perfdata-label>.min
|
||||
check_result.perfdata.<perfdata-label>.max
|
||||
check_result.perfdata.<perfdata-label>.warn
|
||||
check_result.perfdata.<perfdata-label>.crit
|
||||
```
|
||||
|
||||
#### Elasticsearch in Cluster HA Zones <a id="elasticsearch-writer-cluster-ha"></a>
|
||||
|
||||
The Elasticsearch feature supports [high availability](06-distributed-monitoring.md#distributed-monitoring-high-availability-features)
|
||||
in cluster zones since 2.11.
|
||||
|
||||
By default, all endpoints in a zone will activate the feature and start
|
||||
writing events to the Elasticsearch HTTP API. In HA enabled scenarios,
|
||||
it is possible to set `enable_ha = true` in all feature configuration
|
||||
files. This allows each endpoint to calculate the feature authority,
|
||||
and only one endpoint actively writes events, the other endpoints
|
||||
pause the feature.
|
||||
|
||||
When the cluster connection breaks at some point, the remaining endpoint(s)
|
||||
in that zone will automatically resume the feature. This built-in failover
|
||||
mechanism ensures that events are written even if the cluster fails.
|
||||
|
||||
The recommended way of running Elasticsearch in this scenario is a dedicated server
|
||||
where you either have the Elasticsearch HTTP API, or a TLS secured HTTP proxy,
|
||||
or Logstash for additional filtering.
|
||||
|
||||
### Graylog Integration <a id="graylog-integration"></a>
|
||||
|
||||
@ -467,7 +547,9 @@ While it has been specified by the [Graylog](https://www.graylog.org) project as
|
||||
|
||||
You can enable the feature using
|
||||
|
||||
# icinga2 feature enable gelf
|
||||
```
|
||||
# icinga2 feature enable gelf
|
||||
```
|
||||
|
||||
By default the `GelfWriter` object expects the GELF receiver to listen at `127.0.0.1` on TCP port `12201`.
|
||||
The default `source` attribute is set to `icinga2`. You can customize that for your needs if required.
|
||||
@ -477,6 +559,24 @@ Currently these events are processed:
|
||||
* State changes
|
||||
* Notifications
|
||||
|
||||
#### Graylog/GELF in Cluster HA Zones <a id="gelf-writer-cluster-ha"></a>
|
||||
|
||||
The Gelf feature supports [high availability](06-distributed-monitoring.md#distributed-monitoring-high-availability-features)
|
||||
in cluster zones since 2.11.
|
||||
|
||||
By default, all endpoints in a zone will activate the feature and start
|
||||
writing events to the Graylog HTTP API. In HA enabled scenarios,
|
||||
it is possible to set `enable_ha = true` in all feature configuration
|
||||
files. This allows each endpoint to calculate the feature authority,
|
||||
and only one endpoint actively writes events, the other endpoints
|
||||
pause the feature.
|
||||
|
||||
When the cluster connection breaks at some point, the remaining endpoint(s)
|
||||
in that zone will automatically resume the feature. This built-in failover
|
||||
mechanism ensures that events are written even if the cluster fails.
|
||||
|
||||
The recommended way of running Graylog in this scenario is a dedicated server
|
||||
where you have the Graylog HTTP API listening.
|
||||
|
||||
### OpenTSDB Writer <a id="opentsdb-writer"></a>
|
||||
|
||||
@ -487,27 +587,35 @@ write them to the defined TSDB TCP socket.
|
||||
|
||||
You can enable the feature using
|
||||
|
||||
# icinga2 feature enable opentsdb
|
||||
```
|
||||
# icinga2 feature enable opentsdb
|
||||
```
|
||||
|
||||
By default the `OpenTsdbWriter` object expects the TSD to listen at
|
||||
`127.0.0.1` on port `4242`.
|
||||
|
||||
The current naming schema is
|
||||
|
||||
icinga.host.<metricname>
|
||||
icinga.service.<servicename>.<metricname>
|
||||
```
|
||||
icinga.host.<metricname>
|
||||
icinga.service.<servicename>.<metricname>
|
||||
```
|
||||
|
||||
for host and service checks. The tag host is always applied.
|
||||
|
||||
To make sure Icinga 2 writes a valid metric into OpenTSDB some characters are replaced
|
||||
with `_` in the target name:
|
||||
|
||||
\ (and space)
|
||||
```
|
||||
\ (and space)
|
||||
```
|
||||
|
||||
The resulting name in OpenTSDB might look like:
|
||||
|
||||
www-01 / http-cert / response time
|
||||
icinga.http_cert.response_time
|
||||
```
|
||||
www-01 / http-cert / response time
|
||||
icinga.http_cert.response_time
|
||||
```
|
||||
|
||||
In addition to the performance data retrieved from the check plugin, Icinga 2 sends
|
||||
internal check statistic data to OpenTSDB:
|
||||
@ -527,7 +635,9 @@ internal check statistic data to OpenTSDB:
|
||||
While reachable, state and state_type are metrics for the host or service the
|
||||
other metrics follow the current naming schema
|
||||
|
||||
icinga.check.<metricname>
|
||||
```
|
||||
icinga.check.<metricname>
|
||||
```
|
||||
|
||||
with the following tags
|
||||
|
||||
@ -542,6 +652,75 @@ with the following tags
|
||||
> You might want to set the tsd.core.auto_create_metrics setting to `true`
|
||||
> in your opentsdb.conf configuration file.
|
||||
|
||||
#### OpenTSDB in Cluster HA Zones <a id="opentsdb-writer-cluster-ha"></a>
|
||||
|
||||
The OpenTSDB feature supports [high availability](06-distributed-monitoring.md#distributed-monitoring-high-availability-features)
|
||||
in cluster zones since 2.11.
|
||||
|
||||
By default, all endpoints in a zone will activate the feature and start
|
||||
writing events to the OpenTSDB listener. In HA enabled scenarios,
|
||||
it is possible to set `enable_ha = true` in all feature configuration
|
||||
files. This allows each endpoint to calculate the feature authority,
|
||||
and only one endpoint actively writes metrics, the other endpoints
|
||||
pause the feature.
|
||||
|
||||
When the cluster connection breaks at some point, the remaining endpoint(s)
|
||||
in that zone will automatically resume the feature. This built-in failover
|
||||
mechanism ensures that metrics are written even if the cluster fails.
|
||||
|
||||
The recommended way of running OpenTSDB in this scenario is a dedicated server
|
||||
where you have OpenTSDB running.
|
||||
|
||||
|
||||
### Writing Performance Data Files <a id="writing-performance-data-files"></a>
|
||||
|
||||
PNP and Graphios use performance data collector daemons to fetch
|
||||
the current performance files for their backend updates.
|
||||
|
||||
Therefore the Icinga 2 [PerfdataWriter](09-object-types.md#objecttype-perfdatawriter)
|
||||
feature allows you to define the output template format for host and services helped
|
||||
with Icinga 2 runtime vars.
|
||||
|
||||
```
|
||||
host_format_template = "DATATYPE::HOSTPERFDATA\tTIMET::$icinga.timet$\tHOSTNAME::$host.name$\tHOSTPERFDATA::$host.perfdata$\tHOSTCHECKCOMMAND::$host.check_command$\tHOSTSTATE::$host.state$\tHOSTSTATETYPE::$host.state_type$"
|
||||
service_format_template = "DATATYPE::SERVICEPERFDATA\tTIMET::$icinga.timet$\tHOSTNAME::$host.name$\tSERVICEDESC::$service.name$\tSERVICEPERFDATA::$service.perfdata$\tSERVICECHECKCOMMAND::$service.check_command$\tHOSTSTATE::$host.state$\tHOSTSTATETYPE::$host.state_type$\tSERVICESTATE::$service.state$\tSERVICESTATETYPE::$service.state_type$"
|
||||
```
|
||||
|
||||
The default templates are already provided with the Icinga 2 feature configuration
|
||||
which can be enabled using
|
||||
|
||||
```
|
||||
# icinga2 feature enable perfdata
|
||||
```
|
||||
|
||||
By default all performance data files are rotated in a 15 seconds interval into
|
||||
the `/var/spool/icinga2/perfdata/` directory as `host-perfdata.<timestamp>` and
|
||||
`service-perfdata.<timestamp>`.
|
||||
External collectors need to parse the rotated performance data files and then
|
||||
remove the processed files.
|
||||
|
||||
#### Perfdata Files in Cluster HA Zones <a id="perfdata-writer-cluster-ha"></a>
|
||||
|
||||
The Perfdata feature supports [high availability](06-distributed-monitoring.md#distributed-monitoring-high-availability-features)
|
||||
in cluster zones since 2.11.
|
||||
|
||||
By default, all endpoints in a zone will activate the feature and start
|
||||
writing metrics to the local spool directory. In HA enabled scenarios,
|
||||
it is possible to set `enable_ha = true` in all feature configuration
|
||||
files. This allows each endpoint to calculate the feature authority,
|
||||
and only one endpoint actively writes metrics, the other endpoints
|
||||
pause the feature.
|
||||
|
||||
When the cluster connection breaks at some point, the remaining endpoint(s)
|
||||
in that zone will automatically resume the feature. This built-in failover
|
||||
mechanism ensures that metrics are written even if the cluster fails.
|
||||
|
||||
The recommended way of running Perfdata is to mount the perfdata spool
|
||||
directory via NFS on a central server where PNP with the NPCD collector
|
||||
is running on.
|
||||
|
||||
|
||||
|
||||
|
||||
## Livestatus <a id="setting-up-livestatus"></a>
|
||||
|
||||
@ -557,7 +736,7 @@ Livestatus.
|
||||
>
|
||||
> Only install the Livestatus feature if your web interface or addon requires
|
||||
> you to do so.
|
||||
> [Icinga Web 2](02-getting-started.md#setting-up-icingaweb2) does not need
|
||||
> [Icinga Web 2](02-installation.md#setting-up-icingaweb2) does not need
|
||||
> Livestatus.
|
||||
|
||||
Details on the available tables and attributes with Icinga 2 can be found
|
||||
@ -565,18 +744,24 @@ in the [Livestatus Schema](24-appendix.md#schema-livestatus) section.
|
||||
|
||||
You can enable Livestatus using icinga2 feature enable:
|
||||
|
||||
# icinga2 feature enable livestatus
|
||||
```
|
||||
# icinga2 feature enable livestatus
|
||||
```
|
||||
|
||||
After that you will have to restart Icinga 2:
|
||||
|
||||
# systemctl restart icinga2
|
||||
```
|
||||
# systemctl restart icinga2
|
||||
```
|
||||
|
||||
By default the Livestatus socket is available in `/var/run/icinga2/cmd/livestatus`.
|
||||
|
||||
In order for queries and commands to work you will need to add your query user
|
||||
(e.g. your web server) to the `icingacmd` group:
|
||||
|
||||
# usermod -a -G icingacmd www-data
|
||||
```
|
||||
# usermod -a -G icingacmd www-data
|
||||
```
|
||||
|
||||
The Debian packages use `nagios` as the user and group name. Make sure to change `icingacmd` to
|
||||
`nagios` if you're using Debian.
|
||||
@ -588,8 +773,9 @@ In order to use the historical tables provided by the livestatus feature (for ex
|
||||
are expected to be in `/var/log/icinga2/compat`. A different path can be set using the
|
||||
`compat_log_path` configuration attribute.
|
||||
|
||||
# icinga2 feature enable compatlog
|
||||
|
||||
```
|
||||
# icinga2 feature enable compatlog
|
||||
```
|
||||
|
||||
### Livestatus Sockets <a id="livestatus-sockets"></a>
|
||||
|
||||
@ -615,33 +801,35 @@ programmatically: [Monitoring::Livestatus](http://search.cpan.org/~nierlein/Moni
|
||||
|
||||
Example using the unix socket:
|
||||
|
||||
# echo -e "GET services\n" | /usr/bin/nc -U /var/run/icinga2/cmd/livestatus
|
||||
```
|
||||
# echo -e "GET services\n" | /usr/bin/nc -U /var/run/icinga2/cmd/livestatus
|
||||
|
||||
Example using the tcp socket listening on port `6558`:
|
||||
|
||||
# echo -e 'GET services\n' | netcat 127.0.0.1 6558
|
||||
# echo -e 'GET services\n' | netcat 127.0.0.1 6558
|
||||
|
||||
# cat servicegroups <<EOF
|
||||
GET servicegroups
|
||||
# cat servicegroups <<EOF
|
||||
GET servicegroups
|
||||
|
||||
EOF
|
||||
|
||||
(cat servicegroups; sleep 1) | netcat 127.0.0.1 6558
|
||||
EOF
|
||||
|
||||
(cat servicegroups; sleep 1) | netcat 127.0.0.1 6558
|
||||
```
|
||||
|
||||
### Livestatus COMMAND Queries <a id="livestatus-command-queries"></a>
|
||||
|
||||
A list of available external commands and their parameters can be found [here](24-appendix.md#external-commands-list-detail)
|
||||
|
||||
$ echo -e 'COMMAND <externalcommandstring>' | netcat 127.0.0.1 6558
|
||||
|
||||
```
|
||||
$ echo -e 'COMMAND <externalcommandstring>' | netcat 127.0.0.1 6558
|
||||
```
|
||||
|
||||
### Livestatus Filters <a id="livestatus-filters"></a>
|
||||
|
||||
and, or, negate
|
||||
|
||||
Operator | Negate | Description
|
||||
----------|------------------------
|
||||
----------|----------|-------------
|
||||
= | != | Equality
|
||||
~ | !~ | Regex match
|
||||
=~ | !=~ | Equality ignoring case
|
||||
@ -669,20 +857,22 @@ Schema: "Stats: aggregatefunction aggregateattribute"
|
||||
|
||||
Example:
|
||||
|
||||
GET hosts
|
||||
Filter: has_been_checked = 1
|
||||
Filter: check_type = 0
|
||||
Stats: sum execution_time
|
||||
Stats: sum latency
|
||||
Stats: sum percent_state_change
|
||||
Stats: min execution_time
|
||||
Stats: min latency
|
||||
Stats: min percent_state_change
|
||||
Stats: max execution_time
|
||||
Stats: max latency
|
||||
Stats: max percent_state_change
|
||||
OutputFormat: json
|
||||
ResponseHeader: fixed16
|
||||
```
|
||||
GET hosts
|
||||
Filter: has_been_checked = 1
|
||||
Filter: check_type = 0
|
||||
Stats: sum execution_time
|
||||
Stats: sum latency
|
||||
Stats: sum percent_state_change
|
||||
Stats: min execution_time
|
||||
Stats: min latency
|
||||
Stats: min percent_state_change
|
||||
Stats: max execution_time
|
||||
Stats: max latency
|
||||
Stats: max percent_state_change
|
||||
OutputFormat: json
|
||||
ResponseHeader: fixed16
|
||||
```
|
||||
|
||||
### Livestatus Output <a id="livestatus-output"></a>
|
||||
|
||||
@ -694,7 +884,9 @@ is a pipe (2nd level).
|
||||
|
||||
Separators can be set using ASCII codes like:
|
||||
|
||||
Separators: 10 59 44 124
|
||||
```
|
||||
Separators: 10 59 44 124
|
||||
```
|
||||
|
||||
* JSON
|
||||
|
||||
@ -735,27 +927,33 @@ The `commands` table is populated with `CheckCommand`, `EventCommand` and `Notif
|
||||
A detailed list on the available table attributes can be found in the [Livestatus Schema documentation](24-appendix.md#schema-livestatus).
|
||||
|
||||
|
||||
## Status Data Files <a id="status-data"></a>
|
||||
## Deprecated Features <a id="deprecated-features"></a>
|
||||
|
||||
### Status Data Files <a id="status-data"></a>
|
||||
|
||||
> **Note**
|
||||
>
|
||||
> This feature is DEPRECATED and will be removed in Icinga 2 v2.11.
|
||||
> This feature is DEPRECATED and will be removed in future releases.
|
||||
> Check the [roadmap](https://github.com/Icinga/icinga2/milestones).
|
||||
|
||||
Icinga 1.x writes object configuration data and status data in a cyclic
|
||||
interval to its `objects.cache` and `status.dat` files. Icinga 2 provides
|
||||
the `StatusDataWriter` object which dumps all configuration objects and
|
||||
status updates in a regular interval.
|
||||
|
||||
# icinga2 feature enable statusdata
|
||||
```
|
||||
# icinga2 feature enable statusdata
|
||||
```
|
||||
|
||||
If you are not using any web interface or addon which uses these files,
|
||||
you can safely disable this feature.
|
||||
|
||||
## Compat Log Files <a id="compat-logging"></a>
|
||||
### Compat Log Files <a id="compat-logging"></a>
|
||||
|
||||
> **Note**
|
||||
>
|
||||
> This feature is DEPRECATED and will be removed in Icinga 2 v2.11.
|
||||
> This feature is DEPRECATED and will be removed in future releases.
|
||||
> Check the [roadmap](https://github.com/Icinga/icinga2/milestones).
|
||||
|
||||
The Icinga 1.x log format is considered being the `Compat Log`
|
||||
in Icinga 2 provided with the `CompatLogger` object.
|
||||
@ -768,17 +966,65 @@ for answering queries to historical tables.
|
||||
|
||||
The `CompatLogger` object can be enabled with
|
||||
|
||||
# icinga2 feature enable compatlog
|
||||
```
|
||||
# icinga2 feature enable compatlog
|
||||
```
|
||||
|
||||
By default, the Icinga 1.x log file called `icinga.log` is located
|
||||
in `/var/log/icinga2/compat`. Rotated log files are moved into
|
||||
`var/log/icinga2/compat/archives`.
|
||||
|
||||
## Check Result Files <a id="check-result-files"></a>
|
||||
### External Command Pipe <a id="external-commands"></a>
|
||||
|
||||
> **Note**
|
||||
>
|
||||
> This feature is DEPRECATED and will be removed in Icinga 2 v2.11.
|
||||
> Please use the [REST API](12-icinga2-api.md#icinga2-api) as modern and secure alternative
|
||||
> for external actions.
|
||||
|
||||
> **Note**
|
||||
>
|
||||
> This feature is DEPRECATED and will be removed in future releases.
|
||||
> Check the [roadmap](https://github.com/Icinga/icinga2/milestones).
|
||||
|
||||
Icinga 2 provides an external command pipe for processing commands
|
||||
triggering specific actions (for example rescheduling a service check
|
||||
through the web interface).
|
||||
|
||||
In order to enable the `ExternalCommandListener` configuration use the
|
||||
following command and restart Icinga 2 afterwards:
|
||||
|
||||
```
|
||||
# icinga2 feature enable command
|
||||
```
|
||||
|
||||
Icinga 2 creates the command pipe file as `/var/run/icinga2/cmd/icinga2.cmd`
|
||||
using the default configuration.
|
||||
|
||||
Web interfaces and other Icinga addons are able to send commands to
|
||||
Icinga 2 through the external command pipe, for example for rescheduling
|
||||
a forced service check:
|
||||
|
||||
```
|
||||
# /bin/echo "[`date +%s`] SCHEDULE_FORCED_SVC_CHECK;localhost;ping4;`date +%s`" >> /var/run/icinga2/cmd/icinga2.cmd
|
||||
|
||||
# tail -f /var/log/messages
|
||||
|
||||
Oct 17 15:01:25 icinga-server icinga2: Executing external command: [1382014885] SCHEDULE_FORCED_SVC_CHECK;localhost;ping4;1382014885
|
||||
Oct 17 15:01:25 icinga-server icinga2: Rescheduling next check for service 'ping4'
|
||||
```
|
||||
|
||||
A list of currently supported external commands can be found [here](24-appendix.md#external-commands-list-detail).
|
||||
|
||||
Detailed information on the commands and their required parameters can be found
|
||||
on the [Icinga 1.x documentation](https://docs.icinga.com/latest/en/extcommands2.html).
|
||||
|
||||
|
||||
### Check Result Files <a id="check-result-files"></a>
|
||||
|
||||
> **Note**
|
||||
>
|
||||
> This feature is DEPRECATED and will be removed in future releases.
|
||||
> Check the [roadmap](https://github.com/Icinga/icinga2/milestones).
|
||||
|
||||
Icinga 1.x writes its check result files to a temporary spool directory
|
||||
where they are processed in a regular interval.
|
||||
@ -793,7 +1039,8 @@ environments, Icinga 2 supports the `CheckResultReader` object.
|
||||
There is no feature configuration available, but it must be defined
|
||||
on-demand in your Icinga 2 objects configuration.
|
||||
|
||||
object CheckResultReader "reader" {
|
||||
spool_dir = "/data/check-results"
|
||||
}
|
||||
|
||||
```
|
||||
object CheckResultReader "reader" {
|
||||
spool_dir = "/data/check-results"
|
||||
}
|
||||
```
|
||||
|
@ -1,22 +1,541 @@
|
||||
# Upgrading Icinga 2 <a id="upgrading-icinga-2"></a>
|
||||
|
||||
Upgrading Icinga 2 is usually quite straightforward. Ordinarily the only manual steps involved
|
||||
Upgrading Icinga 2 is usually quite straightforward.
|
||||
Ordinarily the only manual steps involved
|
||||
are scheme updates for the IDO database.
|
||||
|
||||
Specific version upgrades are described below. Please note that version
|
||||
updates are incremental. An upgrade from v2.6 to v2.8 requires to
|
||||
follow the instructions for v2.7 too.
|
||||
|
||||
## Upgrading to v2.11 <a id="upgrading-to-2-11"></a>
|
||||
|
||||
### Packages <a id="upgrading-to-2-11-packages"></a>
|
||||
|
||||
EOL distributions where no packages are available with this release:
|
||||
|
||||
* SLES 11
|
||||
* Ubuntu 14 LTS
|
||||
* RHEL/CentOS 6 x86
|
||||
|
||||
Raspbian Packages are available inside the `icinga-buster` repository
|
||||
on [https://packages.icinga.com](http://packages.icinga.com/raspbian/).
|
||||
Please note that Stretch is not supported suffering from compiler
|
||||
regressions. Upgrade to Raspbian Buster is highly recommended.
|
||||
|
||||
#### Added: Boost 1.66+
|
||||
|
||||
The rewrite of our core network stack for cluster and REST API
|
||||
requires newer Boost versions, specifically >= 1.66. For technical
|
||||
details, please continue reading in [this issue](https://github.com/Icinga/icinga2/issues/7041).
|
||||
|
||||
The package dependencies have been updated for RPM/DEB already.
|
||||
On platforms where EPEL or Backports cannot satisfy this dependency,
|
||||
we provide Boost as package on our [package repository](https://packages.icinga.com):
|
||||
|
||||
* SLES 12 (this replaces the SDK requirement)
|
||||
* CentOS 6 x64
|
||||
* Debian Jessie
|
||||
* Ubuntu Xenial/Bionic
|
||||
|
||||
After upgrade, you may remove the old Boost packages (1.53 or anything above)
|
||||
if you don't need them anymore.
|
||||
|
||||
#### Added: .NET Framework 4.6
|
||||
|
||||
We modernized the graphical Windows wizard to use the more recent .NET Framework 4.6. This requires that Windows versions
|
||||
older than Windows 10/Windows Server 2016 installs at least [.NET Framework 4.6](https://www.microsoft.com/en-US/download/details.aspx?id=53344). Starting with Windows 10/Windows Server 2016 a .NET Framework 4.6 or higher is installed by default.
|
||||
|
||||
The MSI-Installer package checks if the .NET Framework 4.6 or higher is present, if not the installation wizard will abort with an error message telling you to install at least .NET Framework 4.6.
|
||||
|
||||
#### Removed: YAJL
|
||||
|
||||
Our JSON library, namely [YAJL](https://github.com/lloyd/yajl), isn't maintained anymore
|
||||
and may cause [crashes](https://github.com/Icinga/icinga2/issues/6684).
|
||||
|
||||
It is replaced by [JSON for Modern C++](https://github.com/nlohmann/json) by Niels Lohmann
|
||||
and compiled into the binary as header only include. It helps our way to C++11 and allows
|
||||
to fix additional UTF8 issues more easily. Read more about its [design goals](https://github.com/nlohmann/json#design-goals)
|
||||
and [benchmarks](https://github.com/miloyip/nativejson-benchmark#parsing-time).
|
||||
|
||||
### Core <a id="upgrading-to-2-11-core"></a>
|
||||
|
||||
#### Reload Handling <a id="upgrading-to-2-11-core-reload-handling"></a>
|
||||
|
||||
2.11 provides fixes for unwanted notifications during restarts.
|
||||
The updated systemd service file now uses the `KillMode=mixed` setting.
|
||||
|
||||
The reload handling was improved with an umbrella process, which means
|
||||
that normal runtime operations include **3 processes**. You may need to
|
||||
adjust the local instance monitoring of the [procs](08-advanced-topics.md#monitoring-icinga) check.
|
||||
|
||||
More details can be found in the [technical concepts](19-technical-concepts.md#technical-concepts-core-reload) chapter.
|
||||
|
||||
#### Downtime Notifications <a id="upgrading-to-2-11-core-downtime-notifications"></a>
|
||||
|
||||
Imagine that a host/service changes to a HARD NOT-OK state,
|
||||
and its check interval is set to a high interval e.g. 1 hour.
|
||||
|
||||
A maintenance downtime prevents the notification being sent,
|
||||
but once it ends and the host/service is still in a downtime,
|
||||
no immediate notification is re-sent but you'll have to wait
|
||||
for the next check.
|
||||
|
||||
Another scenario is with one-shot notifications (interval=0)
|
||||
which would never notify again after the downtime ends and
|
||||
the problem state being intact. The state change logic requires
|
||||
to recover and become HARD NOT-OK to notify again.
|
||||
|
||||
In order to solve these problems with filtered/suppressed notifications
|
||||
in downtimes, v2.11 changes the behaviour like this:
|
||||
|
||||
- If there was a notification suppressed in a downtime, the core stores that information
|
||||
- Once the downtime ends and the problem state is still intact, Icinga checks whether a re-notification should be sent immediately
|
||||
|
||||
A new cluster message was added to keep this in sync amongst HA masters.
|
||||
|
||||
> **Important**
|
||||
>
|
||||
> In order to properly use this new feature, all involved endpoints
|
||||
> must be upgraded to v2.11.
|
||||
|
||||
### Network Stack <a id="upgrading-to-2-11-network-stack"></a>
|
||||
|
||||
The core network stack has been rewritten in 2.11 (some say this could be Icinga 3).
|
||||
|
||||
You can read the full story [here](https://github.com/Icinga/icinga2/issues/7041).
|
||||
|
||||
The only visible changes for users are:
|
||||
|
||||
- No more dead-locks with hanging TLS connections (Cluster, REST API)
|
||||
- Better log messages in error cases
|
||||
- More robust and stable with using external libraries instead of self-written socket I/O
|
||||
|
||||
Coming with this release, we've also updated TLS specific requirements
|
||||
explained below.
|
||||
|
||||
#### TLS 1.2 <a id="upgrading-to-2-11-network-stack-tls-1-2"></a>
|
||||
|
||||
v2.11 raises the minimum required TLS version to 1.2.
|
||||
This is available since OpenSSL 1.0.1 (EL6 & Debian Jessie).
|
||||
|
||||
Older Icinga satellites/agents need to support TLS 1.2 during the TLS
|
||||
handshake.
|
||||
|
||||
The `api` feature attribute `tls_protocolmin` now only supports the
|
||||
value `TLSv1.2` being the default.
|
||||
|
||||
#### Hardened Cipher List <a id="upgrading-to-2-11-network-stack-cipher-list"></a>
|
||||
|
||||
The previous default cipher list allowed weak ciphers. There's no sane way
|
||||
other than explicitly setting the allowed ciphers.
|
||||
|
||||
The new default sets this to:
|
||||
|
||||
```
|
||||
ECDHE-ECDSA-AES256-GCM-SHA384:ECDHE-RSA-AES256-GCM-SHA384:ECDHE-ECDSA-CHACHA20-POLY1305:ECDHE-RSA-CHACHA20-POLY1305:ECDHE-ECDSA-AES128-GCM-SHA256:ECDHE-RSA-AES128-GCM-SHA256:ECDHE-ECDSA-AES256-SHA384:ECDHE-RSA-AES256-SHA384:ECDHE-ECDSA-AES128-SHA256:ECDHE-RSA-AES128-SHA256:DHE-RSA-AES128-GCM-SHA256:DHE-RSA-AES256-GCM-SHA384:AES256-GCM-SHA384:AES128-GCM-SHA256
|
||||
```
|
||||
|
||||
You can override this setting in the [api](09-object-types.md#objecttype-apilistener)
|
||||
feature with the `cipher_list` attribute.
|
||||
|
||||
In case that one of these ciphers is marked as insecure in the future,
|
||||
please let us know with an issue on GitHub.
|
||||
|
||||
### Cluster <a id="upgrading-to-2-11-cluster"></a>
|
||||
|
||||
#### Config Sync <a id="upgrading-to-2-11-cluster-config-sync"></a>
|
||||
|
||||
2.11 overhauls the cluster config sync in many ways. This includes the
|
||||
following under the hood:
|
||||
|
||||
- Synced configuration files are not immediately put into production, but left inside a stage.
|
||||
- Unsuccessful config validation never puts the config into production, additional logging and API states are available.
|
||||
- Zone directories which are not configured in zones.conf, are not included anymore on secondary master/satellites/clients.
|
||||
- Synced config change calculation use checksums instead of timestamps to trigger validation/reload. This is more safe, and the usage of timestamps is now deprecated.
|
||||
- Don't allow parallel cluster syncs to avoid race conditions with overridden files.
|
||||
- Deleted directories and files are now purged, previous versions had a bug.
|
||||
|
||||
Whenever a newer child endpoint receives a configuration update without
|
||||
checksums, it will log a warning.
|
||||
|
||||
```
|
||||
Received configuration update without checksums from parent endpoint satellite1. This behaviour is deprecated. Please upgrade the parent endpoint to 2.11+
|
||||
```
|
||||
|
||||
This is a gentle reminder to upgrade the master and satellites first,
|
||||
prior to installing new clients/agents.
|
||||
|
||||
Technical details are available in the [technical concepts](19-technical-concepts.md#technical-concepts-cluster-config-sync) chapter.
|
||||
|
||||
Since the config sync change detection now uses checksums, this may fail
|
||||
with anything else than syncing configuration text files. Syncing binary
|
||||
files were never supported, but rumors say that some users do so.
|
||||
|
||||
This is now prohibited and logged.
|
||||
|
||||
```
|
||||
[2019-08-02 16:03:19 +0200] critical/ApiListener: Ignoring file '/etc/icinga2/zones.d/global-templates/forbidden.exe' for cluster config sync: Does not contain valid UTF8. Binary files are not supported.
|
||||
Context:
|
||||
(0) Creating config update for file '/etc/icinga2/zones.d/global-templates/forbidden.exe'
|
||||
(1) Activating object 'api' of type 'ApiListener'
|
||||
```
|
||||
|
||||
Such binaries wrapped into JSON-RPC cluster messages may always cause changes
|
||||
and trigger reload loops. In order to prevent such harm in production,
|
||||
use infrastructure tools such as Foreman, Puppet, Ansible, etc. to install
|
||||
plugins on the masters, satellites and agents.
|
||||
|
||||
|
||||
#### HA-aware Features <a id="upgrading-to-2-11-cluster-ha-aware-features"></a>
|
||||
|
||||
v2.11 introduces additional HA functionality similar to the DB IDO feature.
|
||||
This enables the feature being active only on one endpoint while the other
|
||||
endpoint is paused. When one endpoint is shut down, automatic failover happens.
|
||||
|
||||
This feature is turned off by default keeping the current behaviour. If you need
|
||||
it active on just one endpoint, set `enable_ha = true` on both endpoints in the
|
||||
feature configuration.
|
||||
|
||||
This affects the following features:
|
||||
|
||||
* [Elasticsearch](09-object-types.md#objecttype-elasticsearchwriter)
|
||||
* [Gelf](09-object-types.md#objecttype-gelfwriter)
|
||||
* [Graphite](09-object-types.md#objecttype-graphitewriter)
|
||||
* [InfluxDB](09-object-types.md#objecttype-influxdbwriter)
|
||||
* [OpenTsdb](09-object-types.md#objecttype-opentsdbwriter)
|
||||
* [Perfdata](09-object-types.md#objecttype-perfdatawriter) (for PNP)
|
||||
|
||||
### HA Failover <a id="upgrading-to-2-11-ha-failover"></a>
|
||||
|
||||
The reconnect failover has been improved, and the default `failover_timeout`
|
||||
for the DB IDO features has been lowered from 60 to 30 seconds.
|
||||
Object authority updates (required for balancing in the cluster) happen
|
||||
more frequenty (was 30, is 10 seconds).
|
||||
Also the cold startup without object authority updates has been reduced
|
||||
from 60 to 30 seconds. This is to allow cluster reconnects (lowered from 60s to 10s in 2.10)
|
||||
before actually considering a failover/split brain scenario.
|
||||
|
||||
The [IdoMysqlConnection](09-object-types.md#objecttype-idomysqlconnection) and [IdoPgsqlConnection](09-object-types.md#objecttype-idopgsqlconnection)
|
||||
objects provide a new attribute named `last_failover` which shows the last failover timestamp.
|
||||
This value also is available in the [ido](10-icinga-template-library.md#itl-icinga-ido) CheckCommand output.
|
||||
|
||||
|
||||
### CLI Commands <a id="upgrading-to-2-11-cli-commands"></a>
|
||||
|
||||
The `troubleshoot` CLI command has been removed. It was never completed,
|
||||
and turned out not to provide required details for GitHub issues anyways.
|
||||
|
||||
We didn't ask nor endorse users on GitHub/Discourse in the past 2 years, so
|
||||
we're removing it without deprecation.
|
||||
|
||||
Issue templates, the troubleshooting docs and support knowledge has
|
||||
proven to be better.
|
||||
|
||||
#### Permissions <a id="upgrading-to-2-11-cli-commands-permissions"></a>
|
||||
|
||||
CLI commands such as `api setup`, `node wizard/setup`, `feature enable/disable/list`
|
||||
required root permissions previously. Since the file permissions allow
|
||||
the Icinga user to change things already, and users kept asking to
|
||||
run Icinga on their own webspace without root permissions, this is now possible
|
||||
with 2.11.
|
||||
|
||||
If you are running the commands with a different user than the
|
||||
compiled `ICINGA_USER` and `ICINGA_GROUP` CMake settings (`icinga` everywhere,
|
||||
except Debian with `nagios` for historical reasons), ensure that this
|
||||
user has the capabilities to change to a different user.
|
||||
|
||||
If you still encounter problems, run the aforementioned CLI commands as root,
|
||||
or with sudo.
|
||||
|
||||
#### CA List Behaviour Change <a id="upgrading-to-2-11-cli-commands-ca-list"></a>
|
||||
|
||||
`ca list` only shows the pending certificate signing requests by default.
|
||||
|
||||
You can use the new `--all` parameter to show all signing requests.
|
||||
Note that Icinga automatically purges signed requests older than 1 week.
|
||||
|
||||
#### New: CA Remove/Restore <a id="upgrading-to-2-11-cli-commands-ca-remove-restore"></a>
|
||||
|
||||
`ca remove` allows you to remove pending signing requests. Once the
|
||||
master receives a CSR, and it is marked as removed, the request is
|
||||
denied.
|
||||
|
||||
`ca restore` allows you to restore a removed signing request. You
|
||||
can list removed signing requests with the new `--removed` parameter
|
||||
for `ca list`.
|
||||
|
||||
### Configuration <a id="upgrading-to-2-11-configuration"></a>
|
||||
|
||||
The deprecated `concurrent_checks` attribute in the [checker feature](09-object-types.md#objecttype-checkercomponent)
|
||||
has no effect anymore if set. Please use the [MaxConcurrentChecks](17-language-reference.md#icinga-constants-global-config)
|
||||
constant in [constants.conf](04-configuration.md#constants-conf) instead.
|
||||
|
||||
### REST API <a id="upgrading-to-2-11-api"></a>
|
||||
|
||||
#### Actions <a id="upgrading-to-2-11-api-actions"></a>
|
||||
|
||||
The [schedule-downtime](12-icinga2-api.md#icinga2-api-actions-schedule-downtime-host-all-services)
|
||||
action supports the `all_services` parameter for Host types. Defaults to false.
|
||||
|
||||
#### Config Packages <a id="upgrading-to-2-11-api-config-packages"></a>
|
||||
|
||||
Deployed configuration packages require an active stage, with many previous
|
||||
allowed. This mechanism is used by the Icinga Director as external consumer,
|
||||
and Icinga itself for storing runtime created objects inside the `_api`
|
||||
package.
|
||||
|
||||
This includes downtimes and comments, which where sometimes stored in the wrong
|
||||
directory path, because the active-stage file was empty/truncated/unreadable at
|
||||
this point.
|
||||
|
||||
2.11 makes this mechanism more stable and detects broken config packages.
|
||||
It will also attempt to fix them, the following log entry is perfectly fine.
|
||||
|
||||
```
|
||||
[2019-05-10 12:12:09 +0200] information/ConfigObjectUtility: Repairing config package '_api' with stage 'dbe0bef8-c72c-4cc9-9779-da7c4527c5b2'.
|
||||
```
|
||||
|
||||
If you still encounter problems, please follow [this troubleshooting entry](15-troubleshooting.md#troubleshooting-api-missing-runtime-objects).
|
||||
|
||||
### DB IDO MySQL Schema <a id="upgrading-to-2-11-db-ido"></a>
|
||||
|
||||
The schema for MySQL contains an optional update which
|
||||
drops unneeded indexes. You don't necessarily need to apply
|
||||
this update.
|
||||
|
||||
### Documentation <a id="upgrading-to-2-11-documentation"></a>
|
||||
|
||||
* `Custom attributes` have been renamed to `Custom variables` following the name `vars` and their usage in backends and web interfaces.
|
||||
The term `custom attribute` still applies, but referring from the web to the core docs is easier.
|
||||
* The distributed environment term `client` has been refined into `agent`. Wordings and images have been adjusted, and a `client` only is used as
|
||||
general term when requesting something from a parent server role.
|
||||
* The images for basics, modes and scenarios in the distributed monitoring chapter have been re-created from scratch.
|
||||
* `02-getting-started.md` was renamed to `02-installation.md`, `04-configuring-icinga-2.md` into `04-configuration.md`. Apache redirects will be in place.
|
||||
|
||||
## Upgrading to v2.10 <a id="upgrading-to-2-10"></a>
|
||||
|
||||
### Path Constant Changes <a id="upgrading-to-2-10-path-constant-changes"></a>
|
||||
|
||||
During package upgrades you may see a notice that the configuration
|
||||
content of features has changed. This is due to a more general approach
|
||||
with path constants in v2.10.
|
||||
|
||||
The known constants `SysconfDir` and `LocalStateDir` stay intact and won't
|
||||
break on upgrade.
|
||||
If you are using these constants in your own custom command definitions
|
||||
or other objects, you are advised to revise them and update them according
|
||||
to the [documentation](17-language-reference.md#icinga-constants).
|
||||
|
||||
Example diff:
|
||||
|
||||
```
|
||||
object NotificationCommand "mail-service-notification" {
|
||||
- command = [ SysconfDir + "/icinga2/scripts/mail-service-notification.sh" ]
|
||||
+ command = [ ConfigDir + "/scripts/mail-service-notification.sh" ]
|
||||
```
|
||||
|
||||
If you have the `ICINGA2_RUN_DIR` environment variable configured in the
|
||||
sysconfig file, you need to rename it to `ICINGA2_INIT_RUN_DIR`. `ICINGA2_STATE_DIR`
|
||||
has been removed and this setting has no effect.
|
||||
|
||||
> **Note**
|
||||
>
|
||||
> This is important if you rely on the sysconfig configuration in your own scripts.
|
||||
|
||||
### New Constants <a id="upgrading-to-2-10-path-new-constants"></a>
|
||||
|
||||
New [Icinga constants](17-language-reference.md#icinga-constants) have been added in this release.
|
||||
|
||||
* `Environment` for specifying the Icinga environment. Defaults to not set.
|
||||
* `ApiBindHost` and `ApiBindPort` to allow overriding the default ApiListener values. This will be used for an Icinga addon only.
|
||||
|
||||
### Configuration: Namespaces <a id="upgrading-to-2-10-configuration-namespaces"></a>
|
||||
|
||||
The keywords `namespace` and `using` are now [reserved](17-language-reference.md#reserved-keywords) for the namespace functionality provided
|
||||
with v2.10. Read more about how it works [here](17-language-reference.md#namespaces).
|
||||
|
||||
### Configuration: ApiListener <a id="upgrading-to-2-10-configuration-apilistener"></a>
|
||||
|
||||
Anonymous JSON-RPC connections in the cluster can now be configured with `max_anonymous_clients`
|
||||
attribute.
|
||||
The corresponding REST API results from `/v1/status/ApiListener` in `json_rpc` have been renamed
|
||||
from `clients` to `anonymous_clients` to better reflect their purpose. Authenticated clients
|
||||
are counted as connected endpoints. A similar change is there for the performance data metrics.
|
||||
|
||||
The TLS handshake timeout defaults to 10 seconds since v2.8.2. This can now be configured
|
||||
with the configuration attribute `tls_handshake_timeout`. Beware of performance issues
|
||||
with setting a too high value.
|
||||
|
||||
### API: schedule-downtime Action <a id="upgrading-to-2-10-api-schedule-downtime-action"></a>
|
||||
|
||||
The attribute `child_options` was previously accepting 0,1,2 for specific child downtime settings.
|
||||
This behaviour stays intact, but the new proposed way are specific constants as values (`DowntimeNoChildren`, `DowntimeTriggeredChildren`, `DowntimeNonTriggeredChildren`).
|
||||
|
||||
### Notifications: Recovery and Acknowledgement <a id="upgrading-to-2-10-notifications"></a>
|
||||
|
||||
When a user should be notified on `Problem` and `Acknowledgement`, v2.10 now checks during
|
||||
the `Acknowledgement` notification event whether this user has been notified about a problem before.
|
||||
|
||||
```
|
||||
types = [ Problem, Acknowledgement, Recovery ]
|
||||
```
|
||||
|
||||
If **no** `Problem` notification was sent, and the types filter includes problems for this user,
|
||||
the `Acknowledgement` notification is **not** sent.
|
||||
|
||||
In contrast to that, the following configuration always sends `Acknowledgement` notifications.
|
||||
|
||||
```
|
||||
types = [ Acknowledgement, Recovery ]
|
||||
```
|
||||
|
||||
This change also restores the old behaviour for `Recovery` notifications. The above configuration
|
||||
leaving out the `Problem` type can be used to only receive recovery notifications. If `Problem`
|
||||
is added to the types again, Icinga 2 checks whether it has notified a user of a problem when
|
||||
sending the recovery notification.
|
||||
|
||||
More details can be found in [this PR](https://github.com/Icinga/icinga2/pull/6527).
|
||||
|
||||
### Stricter configuration validation
|
||||
|
||||
Some config errors are now fatal. While it never worked before, icinga2 refuses to start now!
|
||||
|
||||
For example the following started to give a fatal error in 2.10:
|
||||
|
||||
```
|
||||
object Zone "XXX" {
|
||||
endpoints = [ "master-server" ]
|
||||
parent = "global-templates"
|
||||
}
|
||||
```
|
||||
|
||||
```critical/config: Error: Zone 'XXX' can not have a global zone as parent.```
|
||||
|
||||
### Package Changes <a id="upgrading-to-2-10-package-changes"></a>
|
||||
|
||||
Debian/Ubuntu drops the `libicinga2` package. `apt-get upgrade icinga2`
|
||||
won't remove such packages leaving the upgrade in an unsatisfied state.
|
||||
|
||||
Please use `apt-get full-upgrade` or `apt-get dist-upgrade` instead, as explained [here](https://github.com/Icinga/icinga2/issues/6695#issuecomment-430585915).
|
||||
|
||||
On RHEL/CentOS/Fedora, `icinga2-libs` has been obsoleted. Unfortunately yum's dependency
|
||||
resolver doesn't allow to install older versions than 2.10 then. Please
|
||||
read [here](https://github.com/Icinga/icinga-packaging/issues/114#issuecomment-429264827)
|
||||
for details.
|
||||
|
||||
RPM packages dropped the [Classic UI](16-upgrading-icinga-2.md#upgrading-to-2-8-removed-classicui-config-package)
|
||||
package in v2.8, Debian/Ubuntu packages were forgotten. This is now the case with this
|
||||
release. Icinga 1.x is EOL by the end of 2018, plan your migration to [Icinga Web 2](https://icinga.com/docs/icingaweb2/latest/).
|
||||
|
||||
## Upgrading to v2.9 <a id="upgrading-to-2-9"></a>
|
||||
|
||||
### Deprecation and Removal Notes <a id="upgrading-to-2-9-deprecation-removal-notes"></a>
|
||||
|
||||
- Deprecation of 1.x compatibility features: `StatusDataWriter`, `CompatLogger`, `CheckResultReader`. Their removal is scheduled for 2.11.
|
||||
Icinga 1.x is EOL and will be out of support by the end of 2018.
|
||||
- Removal of Icinga Studio. It always has been experimental and did not satisfy our high quality standards. We've therefore removed it.
|
||||
|
||||
### Sysconfig Changes <a id="upgrading-to-2-9-sysconfig-changes"></a>
|
||||
|
||||
The security fixes in v2.8.2 required moving specific runtime settings
|
||||
into the Sysconfig file and environment. This included that Icinga 2
|
||||
would itself parse this file and read the required variables. This has generated
|
||||
numerous false-positive log messages and led to many support questions. v2.9.0
|
||||
changes this in the standard way to read these variables from the environment, and use
|
||||
sane compile-time defaults.
|
||||
|
||||
> **Note**
|
||||
>
|
||||
> In order to upgrade, remove everything in the sysconfig file and re-apply
|
||||
> your changes.
|
||||
|
||||
There is a bug with existing sysconfig files where path variables are not expanded
|
||||
because systemd [does not support](https://github.com/systemd/systemd/issues/2123)
|
||||
shell variable expansion. This worked with SysVInit though.
|
||||
|
||||
Edit the sysconfig file and either remove everything, or edit this line
|
||||
on RHEL 7. Modify the path for other distributions.
|
||||
|
||||
```
|
||||
vim /etc/sysconfig/icinga2
|
||||
|
||||
-ICINGA2_PID_FILE=$ICINGA2_RUN_DIR/icinga2/icinga2.pid
|
||||
+ICINGA2_PID_FILE=/run/icinga2/icinga2.pid
|
||||
```
|
||||
|
||||
If you want to adjust the number of open files for the Icinga application
|
||||
for example, you would just add this setting like this on RHEL 7:
|
||||
|
||||
```
|
||||
vim /etc/sysconfig/icinga2
|
||||
|
||||
ICINGA2_RLIMIT_FILES=50000
|
||||
```
|
||||
|
||||
Restart Icinga 2 afterwards, the systemd service file automatically puts the
|
||||
value into the application's environment where this is read on startup.
|
||||
|
||||
### Setup Wizard Changes <a id="upgrading-to-2-9-setup-wizard-changes"></a>
|
||||
|
||||
Client and satellite setups previously had the example configuration in `conf.d` included
|
||||
by default. This caused trouble on config sync, or with locally executed checks generating
|
||||
wrong check results for command endpoint clients.
|
||||
|
||||
In v2.9.0 `node wizard`, `node setup` and the graphical Windows wizard will disable
|
||||
the inclusion by default. You can opt-out and explicitly enable it again if needed.
|
||||
|
||||
In addition to the default global zones `global-templates` and `director-global`,
|
||||
the setup wizards also offer to specify your own custom global zones and generate
|
||||
the required configuration automatically.
|
||||
|
||||
The setup wizards also use full qualified names for Zone and Endpoint object generation,
|
||||
either the default values (FQDN for clients) or the user supplied input. This removes
|
||||
the dependency on the `NodeName` and `ZoneName` constant and helps to immediately see
|
||||
the parent-child relationship. Those doing support will also see the benefit in production.
|
||||
|
||||
### CLI Command Changes <a id="upgrading-to-2-9-cli-changes"></a>
|
||||
|
||||
The [node setup](06-distributed-monitoring.md#distributed-monitoring-automation-cli-node-setup)
|
||||
parameter `--master_host` was deprecated and replaced with `--parent_host`.
|
||||
This parameter is now optional to allow connection-less client setups similar to the `node wizard`
|
||||
CLI command. The `parent_zone` parameter has been added to modify the parent zone name e.g.
|
||||
for client-to-satellite setups.
|
||||
|
||||
The `api user` command which was released in v2.8.2 turned out to cause huge problems with
|
||||
configuration validation, windows restarts and OpenSSL versions. It is therefore removed in 2.9,
|
||||
the `password_hash` attribute for the ApiUser object stays intact but has no effect. This is to ensure
|
||||
that clients don't break on upgrade. We will revise this feature in future development iterations.
|
||||
|
||||
### Configuration Changes <a id="upgrading-to-2-9-config-changes"></a>
|
||||
|
||||
The CORS attributes `access_control_allow_credentials`, `access_control_allow_headers` and
|
||||
`access_control_allow_methods` are now controlled by Icinga 2 and cannot be changed anymore.
|
||||
|
||||
### CLI Command Changes <a id="upgrading-to-2-9-cli-changes"></a>
|
||||
### Unique Generated Names <a id="upgrading-to-2-9-unique-name-changes"></a>
|
||||
|
||||
With the removal of RHEL 5 as supported platform, we can finally use real unique IDs.
|
||||
This is reflected in generating names for e.g. API stage names. Previously it was a handcrafted
|
||||
mix of local FQDN, timestamps and random numbers.
|
||||
|
||||
### Custom Vars not updating <a id="upgrading-to-2-9-custom-vars-not-updating"></a>
|
||||
|
||||
A rare issue preventing the custom vars of objects created prior to 2.9.0 being updated when changed may occur. To
|
||||
remedy this, truncate the customvar tables and restart Icinga 2. The following is an example of how to do this with mysql:
|
||||
|
||||
```
|
||||
$ mysql -uroot -picinga icinga
|
||||
MariaDB [icinga]> truncate icinga_customvariables;
|
||||
Query OK, 0 rows affected (0.05 sec)
|
||||
MariaDB [icinga]> truncate icinga_customvariablestatus;
|
||||
Query OK, 0 rows affected (0.03 sec)
|
||||
MariaDB [icinga]> exit
|
||||
Bye
|
||||
$ sudo systemctl restart icinga2
|
||||
```
|
||||
|
||||
Custom vars should now stay up to date.
|
||||
|
||||
The `node setup` parameter `--master_host` was deprecated and replaced with `--parent_host`. This parameter is now optional to allow connection-less client setups similar to the `node wizard` CLI command. The `parent_zone` parameter has been added to modify the parent zone name e.g. for client-to-satellite setups.
|
||||
|
||||
## Upgrading to v2.8.2 <a id="upgrading-to-2-8-2"></a>
|
||||
|
||||
@ -53,8 +572,8 @@ The default certificate path was changed from `/etc/icinga2/pki` to
|
||||
|
||||
Old Path | New Path
|
||||
---------------------------------------------------|---------------------------------------------------
|
||||
`/etc/icinga2/pki/icinga2-client1.localdomain.crt` | `/var/lib/icinga2/certs/icinga2-client1.localdomain.crt`
|
||||
`/etc/icinga2/pki/icinga2-client1.localdomain.key` | `/var/lib/icinga2/certs/icinga2-client1.localdomain.key`
|
||||
`/etc/icinga2/pki/icinga2-agent1.localdomain.crt` | `/var/lib/icinga2/certs/icinga2-agent1.localdomain.crt`
|
||||
`/etc/icinga2/pki/icinga2-agent1.localdomain.key` | `/var/lib/icinga2/certs/icinga2-agent1.localdomain.key`
|
||||
`/etc/icinga2/pki/ca.crt` | `/var/lib/icinga2/certs/ca.crt`
|
||||
|
||||
This applies to Windows clients in the same way: `%ProgramData%\etc\icinga2\pki`
|
||||
@ -62,8 +581,8 @@ was moved to `%ProgramData%\var\lib\icinga2\certs`.
|
||||
|
||||
Old Path | New Path
|
||||
----------------------------------------------------------------|----------------------------------------------------------------
|
||||
`%ProgramData%\etc\icinga2\pki\icinga2-client1.localdomain.crt` | `%ProgramData%\var\lib\icinga2\certs\icinga2-client1.localdomain.crt`
|
||||
`%ProgramData%\etc\icinga2\pki\icinga2-client1.localdomain.key` | `%ProgramData%\var\lib\icinga2\certs\icinga2-client1.localdomain.key`
|
||||
`%ProgramData%\etc\icinga2\pki\icinga2-agent1.localdomain.crt` | `%ProgramData%\var\lib\icinga2\certs\icinga2-agent1.localdomain.crt`
|
||||
`%ProgramData%\etc\icinga2\pki\icinga2-agent1.localdomain.key` | `%ProgramData%\var\lib\icinga2\certs\icinga2-agent1.localdomain.key`
|
||||
`%ProgramData%\etc\icinga2\pki\ca.crt` | `%ProgramData%\var\lib\icinga2\certs\ca.crt`
|
||||
|
||||
|
||||
@ -205,10 +724,10 @@ attributes. More details can be found [here](08-advanced-topics.md#check-flappin
|
||||
## Upgrading to v2.7 <a id="upgrading-to-2-7"></a>
|
||||
|
||||
v2.7.0 provided new notification scripts and commands. Please ensure to
|
||||
update your configuration accordingly. An advisory has been published [here](https://www.icinga.com/2017/08/23/advisory-for-icinga-2-v2-7-update-and-mail-notification-scripts/).
|
||||
update your configuration accordingly. An advisory has been published [here](https://icinga.com/2017/08/23/advisory-for-icinga-2-v2-7-update-and-mail-notification-scripts/).
|
||||
|
||||
In case are having troubles with OpenSSL 1.1.0 and the
|
||||
public CA certificates, please read [this advisory](https://www.icinga.com/2017/08/30/advisory-for-ssl-problems-with-leading-zeros-on-openssl-1-1-0/)
|
||||
public CA certificates, please read [this advisory](https://icinga.com/2017/08/30/advisory-for-ssl-problems-with-leading-zeros-on-openssl-1-1-0/)
|
||||
and check the [troubleshooting chapter](15-troubleshooting.md#troubleshooting).
|
||||
|
||||
If Icinga 2 fails to start with an empty reference to `$ICINGA2_CACHE_DIR`
|
||||
|
@ -3,7 +3,9 @@
|
||||
You can run the Icinga 2 daemon with the `-X` (`--script-debugger`)
|
||||
parameter to enable the script debugger:
|
||||
|
||||
# icinga2 daemon -X
|
||||
```
|
||||
# icinga2 daemon -X
|
||||
```
|
||||
|
||||
When an exception occurs or the [debugger](17-language-reference.md#breakpoints)
|
||||
keyword is encountered in a user script, Icinga 2 launches a console that
|
||||
@ -11,7 +13,9 @@ allows the user to debug the script.
|
||||
|
||||
You can also attach the script debugger to the [configuration validation](11-cli-commands.md#config-validation):
|
||||
|
||||
# icinga2 daemon -C -X
|
||||
```
|
||||
# icinga2 daemon -C -X
|
||||
```
|
||||
|
||||
Here is a list of common errors which can be diagnosed with the script debugger:
|
||||
|
||||
@ -21,51 +25,57 @@ Here is a list of common errors which can be diagnosed with the script debugger:
|
||||
## Debugging Configuration Errors <a id="script-debugger-config-errors"></a>
|
||||
|
||||
The following example illustrates the problem of a service [apply rule](03-monitoring-basics.md#using-apply-for)
|
||||
which expects a dictionary value for `config`, but the host custom attribute only
|
||||
which expects a dictionary value for `config`, but the host custom variable only
|
||||
provides a string value:
|
||||
|
||||
object Host "script-debugger-host" {
|
||||
check_command = "icinga"
|
||||
```
|
||||
object Host "script-debugger-host" {
|
||||
check_command = "icinga"
|
||||
|
||||
vars.http_vhosts["example.org"] = "192.168.1.100" // a string value
|
||||
}
|
||||
vars.http_vhosts["example.org"] = "192.168.1.100" // a string value
|
||||
}
|
||||
|
||||
apply Service for (http_vhost => config in host.vars.http_vhosts) {
|
||||
import "generic-service"
|
||||
apply Service for (http_vhost => config in host.vars.http_vhosts) {
|
||||
import "generic-service"
|
||||
|
||||
vars += config // expects a dictionary
|
||||
vars += config // expects a dictionary
|
||||
|
||||
check_command = "http"
|
||||
}
|
||||
check_command = "http"
|
||||
}
|
||||
```
|
||||
|
||||
The error message on config validation will warn about the wrong value type,
|
||||
but does not provide any context which objects are affected.
|
||||
|
||||
Enable the script debugger and run the config validation:
|
||||
|
||||
# icinga2 daemon -C -X
|
||||
```
|
||||
# icinga2 daemon -C -X
|
||||
|
||||
Breakpoint encountered in /etc/icinga2/conf.d/services.conf: 59:67-65:1
|
||||
Exception: Error: Error while evaluating expression: Cannot convert value of type 'String' to an object.
|
||||
Location:
|
||||
/etc/icinga2/conf.d/services.conf(62): check_command = "http"
|
||||
/etc/icinga2/conf.d/services.conf(63):
|
||||
/etc/icinga2/conf.d/services.conf(64): vars += config
|
||||
^^^^^^^^^^^^^^
|
||||
/etc/icinga2/conf.d/services.conf(65): }
|
||||
/etc/icinga2/conf.d/services.conf(66):
|
||||
You can inspect expressions (such as variables) by entering them at the prompt.
|
||||
To leave the debugger and continue the program use "$continue".
|
||||
<1> =>
|
||||
Breakpoint encountered in /etc/icinga2/conf.d/services.conf: 59:67-65:1
|
||||
Exception: Error: Error while evaluating expression: Cannot convert value of type 'String' to an object.
|
||||
Location:
|
||||
/etc/icinga2/conf.d/services.conf(62): check_command = "http"
|
||||
/etc/icinga2/conf.d/services.conf(63):
|
||||
/etc/icinga2/conf.d/services.conf(64): vars += config
|
||||
^^^^^^^^^^^^^^
|
||||
/etc/icinga2/conf.d/services.conf(65): }
|
||||
/etc/icinga2/conf.d/services.conf(66):
|
||||
You can inspect expressions (such as variables) by entering them at the prompt.
|
||||
To leave the debugger and continue the program use "$continue".
|
||||
<1> =>
|
||||
```
|
||||
|
||||
You can print the variables `vars` and `config` to get an idea about
|
||||
their values:
|
||||
|
||||
<1> => vars
|
||||
null
|
||||
<2> => config
|
||||
"192.168.1.100"
|
||||
<3> =>
|
||||
```
|
||||
<1> => vars
|
||||
null
|
||||
<2> => config
|
||||
"192.168.1.100"
|
||||
<3> =>
|
||||
```
|
||||
|
||||
The `vars` attribute has to be a dictionary. Trying to set this attribute to a string caused
|
||||
the error in our configuration example.
|
||||
@ -73,10 +83,12 @@ the error in our configuration example.
|
||||
In order to determine the name of the host where the value of the `config` variable came from
|
||||
you can inspect attributes of the service object:
|
||||
|
||||
<3> => host_name
|
||||
"script-debugger-host-01"
|
||||
<4> => name
|
||||
"http"
|
||||
```
|
||||
<3> => host_name
|
||||
"script-debugger-host-01"
|
||||
<4> => name
|
||||
"http"
|
||||
```
|
||||
|
||||
Additionally you can view the service object attributes by printing the value of `this`.
|
||||
|
||||
@ -84,28 +96,31 @@ Additionally you can view the service object attributes by printing the value of
|
||||
|
||||
In order to halt execution in a script you can use the `debugger` keyword:
|
||||
|
||||
object Host "script-debugger-host-02" {
|
||||
check_command = "dummy"
|
||||
check_interval = 5s
|
||||
```
|
||||
object Host "script-debugger-host-02" {
|
||||
check_command = "dummy"
|
||||
check_interval = 5s
|
||||
|
||||
vars.dummy_text = {{
|
||||
var text = "Hello from " + macro("$name$")
|
||||
debugger
|
||||
return text
|
||||
}}
|
||||
}
|
||||
vars.dummy_text = {{
|
||||
var text = "Hello from " + macro("$name$")
|
||||
debugger
|
||||
return text
|
||||
}}
|
||||
}
|
||||
```
|
||||
|
||||
Icinga 2 will spawn a debugger console every time the function is executed:
|
||||
|
||||
# icinga2 daemon -X
|
||||
...
|
||||
Breakpoint encountered in /etc/icinga2/tests/script-debugger.conf: 7:5-7:12
|
||||
You can inspect expressions (such as variables) by entering them at the prompt.
|
||||
To leave the debugger and continue the program use "$continue".
|
||||
<1> => text
|
||||
"Hello from script-debugger-host-02"
|
||||
<2> => $continue
|
||||
|
||||
```
|
||||
# icinga2 daemon -X
|
||||
...
|
||||
Breakpoint encountered in /etc/icinga2/tests/script-debugger.conf: 7:5-7:12
|
||||
You can inspect expressions (such as variables) by entering them at the prompt.
|
||||
To leave the debugger and continue the program use "$continue".
|
||||
<1> => text
|
||||
"Hello from script-debugger-host-02"
|
||||
<2> => $continue
|
||||
```
|
||||
|
||||
## Debugging API Filters <a id="script-debugger-api-filters"></a>
|
||||
|
||||
@ -115,7 +130,7 @@ an internal error, they return an empty result to the caller.
|
||||
|
||||
In order to analyse these server-side errors, you can use the script debugger.
|
||||
|
||||
The following example tries filter for all host objects where the custom attribute
|
||||
The following example tries filter for all host objects where the custom variable
|
||||
`os` is set. There are various possibilities to check that, one of them would be
|
||||
`host.vars.os != ""`. Another idea is to use the [contains](18-library-reference.md#dictionary-contains) method on the custom
|
||||
attribute dictionary like this: `host.vars.contains("os")`.
|
||||
@ -126,7 +141,7 @@ $ curl -k -s -u root:icinga -H 'Accept: application/json' -H 'X-HTTP-Method-Over
|
||||
-d '{ "filter": "host.vars.contains(\"os\")", "attrs": [ "__name" ], "joins": [ "host.name", "host.vars" ], "pretty": true }'
|
||||
```
|
||||
|
||||
This will fail on all hosts which don't have any custom attribute specified.
|
||||
This will fail on all hosts which don't have any custom variable specified.
|
||||
|
||||
```
|
||||
# icinga2 daemon -X
|
||||
|
@ -18,16 +18,18 @@ There are two ways of installing the SELinux Policy for Icinga 2 on Enterprise L
|
||||
|
||||
If the system runs in enforcing mode and you encounter problems you can set Icinga 2's domain to permissive mode.
|
||||
|
||||
# sestatus
|
||||
SELinux status: enabled
|
||||
SELinuxfs mount: /sys/fs/selinux
|
||||
SELinux root directory: /etc/selinux
|
||||
Loaded policy name: targeted
|
||||
Current mode: enforcing
|
||||
Mode from config file: enforcing
|
||||
Policy MLS status: enabled
|
||||
Policy deny_unknown status: allowed
|
||||
Max kernel policy version: 28
|
||||
```
|
||||
# sestatus
|
||||
SELinux status: enabled
|
||||
SELinuxfs mount: /sys/fs/selinux
|
||||
SELinux root directory: /etc/selinux
|
||||
Loaded policy name: targeted
|
||||
Current mode: enforcing
|
||||
Mode from config file: enforcing
|
||||
Policy MLS status: enabled
|
||||
Policy deny_unknown status: allowed
|
||||
Max kernel policy version: 28
|
||||
```
|
||||
|
||||
You can change the configured mode by editing `/etc/selinux/config` and the current mode by executing `setenforce 0`.
|
||||
|
||||
@ -35,13 +37,17 @@ You can change the configured mode by editing `/etc/selinux/config` and the curr
|
||||
|
||||
Simply add the `icinga2-selinux` package to your installation.
|
||||
|
||||
# yum install icinga2-selinux
|
||||
```
|
||||
# yum install icinga2-selinux
|
||||
```
|
||||
|
||||
Ensure that the `icinga2` process is running in its own `icinga2_t` domain after installing the policy package:
|
||||
|
||||
# systemctl restart icinga2.service
|
||||
# ps -eZ | grep icinga2
|
||||
system_u:system_r:icinga2_t:s0 2825 ? 00:00:00 icinga2
|
||||
```
|
||||
# systemctl restart icinga2.service
|
||||
# ps -eZ | grep icinga2
|
||||
system_u:system_r:icinga2_t:s0 2825 ? 00:00:00 icinga2
|
||||
```
|
||||
|
||||
#### Manual installation <a id="selinux-policy-installation-manual"></a>
|
||||
|
||||
@ -49,24 +55,32 @@ This section describes the installation to support development and testing. It a
|
||||
|
||||
As a prerequisite install the `git`, `selinux-policy-devel` and `audit` packages. Enable and start the audit daemon afterwards:
|
||||
|
||||
# yum install git selinux-policy-devel audit
|
||||
# systemctl enable auditd.service
|
||||
# systemctl start auditd.service
|
||||
```
|
||||
# yum install git selinux-policy-devel audit
|
||||
# systemctl enable auditd.service
|
||||
# systemctl start auditd.service
|
||||
```
|
||||
|
||||
After that clone the icinga2 git repository:
|
||||
|
||||
# git clone https://github.com/icinga/icinga2
|
||||
```
|
||||
# git clone https://github.com/icinga/icinga2
|
||||
```
|
||||
|
||||
To create and install the policy package run the installation script which also labels the resources. (The script assumes Icinga 2 was started once after system startup, the labeling of the port will only happen once and fail later on.)
|
||||
|
||||
# cd tools/selinux/
|
||||
# ./icinga.sh
|
||||
```
|
||||
# cd tools/selinux/
|
||||
# ./icinga.sh
|
||||
```
|
||||
|
||||
After that restart Icinga 2 and verify it running in its own domain `icinga2_t`.
|
||||
|
||||
# systemctl restart icinga2.service
|
||||
# ps -eZ | grep icinga2
|
||||
system_u:system_r:icinga2_t:s0 2825 ? 00:00:00 icinga2
|
||||
```
|
||||
# systemctl restart icinga2.service
|
||||
# ps -eZ | grep icinga2
|
||||
system_u:system_r:icinga2_t:s0 2825 ? 00:00:00 icinga2
|
||||
```
|
||||
|
||||
### General <a id="selinux-policy-general"></a>
|
||||
|
||||
@ -106,6 +120,10 @@ SELinux is based on the least level of access required for a service to run. Usi
|
||||
|
||||
Having this boolean enabled allows icinga2 to connect to all ports. This can be necessary if you use features which connect to unconfined services, for example the [influxdb writer](14-features.md#influxdb-writer).
|
||||
|
||||
**icinga2_run_sudo**
|
||||
|
||||
To allow Icinga 2 executing plugins via sudo you can toogle this boolean. It is disabled by default, resulting in error messages like `execvpe(sudo) failed: Permission denied`.
|
||||
|
||||
**httpd_can_write_icinga2_command**
|
||||
|
||||
To allow httpd to write to the command pipe of icinga2 this boolean has to be enabled. This is enabled by default, if not needed you can disable it for more security.
|
||||
@ -126,23 +144,29 @@ Make sure to report the bugs in the policy afterwards.
|
||||
|
||||
Download and install a plugin, for example check_mysql_health.
|
||||
|
||||
# wget https://labs.consol.de/download/shinken-nagios-plugins/check_mysql_health-2.1.9.2.tar.gz
|
||||
# tar xvzf check_mysql_health-2.1.9.2.tar.gz
|
||||
# cd check_mysql_health-2.1.9.2/
|
||||
# ./configure --libexecdir /usr/lib64/nagios/plugins
|
||||
# make
|
||||
# make install
|
||||
```
|
||||
# wget https://labs.consol.de/download/shinken-nagios-plugins/check_mysql_health-2.1.9.2.tar.gz
|
||||
# tar xvzf check_mysql_health-2.1.9.2.tar.gz
|
||||
# cd check_mysql_health-2.1.9.2/
|
||||
# ./configure --libexecdir /usr/lib64/nagios/plugins
|
||||
# make
|
||||
# make install
|
||||
```
|
||||
|
||||
It is labeled `nagios_unconfined_plugins_exec_t` by default, so it runs without restrictions.
|
||||
|
||||
# ls -lZ /usr/lib64/nagios/plugins/check_mysql_health
|
||||
-rwxr-xr-x. root root system_u:object_r:nagios_unconfined_plugin_exec_t:s0 /usr/lib64/nagios/plugins/check_mysql_health
|
||||
```
|
||||
# ls -lZ /usr/lib64/nagios/plugins/check_mysql_health
|
||||
-rwxr-xr-x. root root system_u:object_r:nagios_unconfined_plugin_exec_t:s0 /usr/lib64/nagios/plugins/check_mysql_health
|
||||
```
|
||||
|
||||
In this case the plugin is monitoring a service, so it should be labeled `nagios_services_plugin_exec_t` to restrict its permissions.
|
||||
|
||||
# chcon -t nagios_services_plugin_exec_t /usr/lib64/nagios/plugins/check_mysql_health
|
||||
# ls -lZ /usr/lib64/nagios/plugins/check_mysql_health
|
||||
-rwxr-xr-x. root root system_u:object_r:nagios_services_plugin_exec_t:s0 /usr/lib64/nagios/plugins/check_mysql_health
|
||||
```
|
||||
# chcon -t nagios_services_plugin_exec_t /usr/lib64/nagios/plugins/check_mysql_health
|
||||
# ls -lZ /usr/lib64/nagios/plugins/check_mysql_health
|
||||
-rwxr-xr-x. root root system_u:object_r:nagios_services_plugin_exec_t:s0 /usr/lib64/nagios/plugins/check_mysql_health
|
||||
```
|
||||
|
||||
The plugin still runs fine but if someone changes the script to do weird stuff it will fail to do so.
|
||||
|
||||
@ -152,28 +176,56 @@ You are running graphite on a different port than `2003` and want `icinga2` to c
|
||||
|
||||
Change the port value for the graphite feature according to your graphite installation before enabling it.
|
||||
|
||||
# cat /etc/icinga2/features-enabled/graphite.conf
|
||||
/**
|
||||
* The GraphiteWriter type writes check result metrics and
|
||||
* performance data to a graphite tcp socket.
|
||||
*/
|
||||
```
|
||||
# cat /etc/icinga2/features-enabled/graphite.conf
|
||||
/**
|
||||
* The GraphiteWriter type writes check result metrics and
|
||||
* performance data to a graphite tcp socket.
|
||||
*/
|
||||
|
||||
library "perfdata"
|
||||
library "perfdata"
|
||||
|
||||
object GraphiteWriter "graphite" {
|
||||
//host = "127.0.0.1"
|
||||
//port = 2003
|
||||
port = 2004
|
||||
}
|
||||
# icinga2 feature enable graphite
|
||||
object GraphiteWriter "graphite" {
|
||||
//host = "127.0.0.1"
|
||||
//port = 2003
|
||||
port = 2004
|
||||
}
|
||||
# icinga2 feature enable graphite
|
||||
```
|
||||
|
||||
Before you restart the icinga2 service allow it to connect to all ports by enabling the boolean ´icinga2_can_connect_all` (now and permanent).
|
||||
Before you restart the icinga2 service allow it to connect to all ports by enabling the boolean `icinga2_can_connect_all` (now and permanent).
|
||||
|
||||
# setsebool icinga2_can_connect_all true
|
||||
# setsebool -P icinga2_can_connect_all true
|
||||
```
|
||||
# setsebool icinga2_can_connect_all true
|
||||
# setsebool -P icinga2_can_connect_all true
|
||||
```
|
||||
|
||||
If you restart the daemon now it will successfully connect to graphite.
|
||||
|
||||
#### Running plugins requiring sudo <a id="selinux-policy-examples-sudo"></a>
|
||||
|
||||
Some plugins require privileged access to the system and are designied to be executed via `sudo` to get these privileges.
|
||||
|
||||
In this case it is the CheckCommand [running_kernel](10-icinga-template-library.md#plugin-contrib-command-running_kernel) which is set to use `sudo`.
|
||||
|
||||
# cat /etc/icinga2/conf.d/services.conf
|
||||
apply Service "kernel" {
|
||||
import "generic-service"
|
||||
|
||||
check_command = "running_kernel"
|
||||
|
||||
vars.running_kernel_use_sudo = true
|
||||
|
||||
assign where host.name == NodeName
|
||||
}
|
||||
|
||||
Having this Service defined will result in a UNKNOWN state and the error message `execvpe(sudo) failed: Permission denied` because SELinux dening the execution.
|
||||
|
||||
Switching the boolean `icinga2_run_sudo` to allow the execution will result in the check executed successfully.
|
||||
|
||||
# setsebool icinga2_run_sudo true
|
||||
# setsebool -P icinga2_run_sudo true
|
||||
|
||||
#### Confining a user <a id="selinux-policy-examples-user"></a>
|
||||
|
||||
If you want to have an administrative account capable of only managing icinga2 and not the complete system, you can restrict the privileges by confining
|
||||
@ -181,49 +233,63 @@ this user. This is completly optional!
|
||||
|
||||
Start by adding the Icinga 2 administrator role `icinga2adm_r` to the administrative SELinux user `staff_u`.
|
||||
|
||||
# semanage user -m -R "staff_r sysadm_r system_r unconfined_r icinga2adm_r" staff_u
|
||||
```
|
||||
# semanage user -m -R "staff_r sysadm_r system_r unconfined_r icinga2adm_r" staff_u
|
||||
```
|
||||
|
||||
Confine your user login and create a sudo rule.
|
||||
|
||||
# semanage login -a dirk -s staff_u
|
||||
# echo "dirk ALL=(ALL) NOPASSWD: ALL" > /etc/sudoers.d/dirk
|
||||
```
|
||||
# semanage login -a dirk -s staff_u
|
||||
# echo "dirk ALL=(ALL) NOPASSWD: ALL" > /etc/sudoers.d/dirk
|
||||
```
|
||||
|
||||
Login to the system using ssh and verify your id.
|
||||
|
||||
$ id -Z
|
||||
staff_u:staff_r:staff_t:s0-s0:c0.c1023
|
||||
```
|
||||
$ id -Z
|
||||
staff_u:staff_r:staff_t:s0-s0:c0.c1023
|
||||
```
|
||||
|
||||
Try to execute some commands as root using sudo.
|
||||
|
||||
$ sudo id -Z
|
||||
staff_u:staff_r:staff_t:s0-s0:c0.c1023
|
||||
$ sudo vi /etc/icinga2/icinga2.conf
|
||||
"/etc/icinga2/icinga2.conf" [Permission Denied]
|
||||
$ sudo cat /var/log/icinga2/icinga2.log
|
||||
cat: /var/log/icinga2/icinga2.log: Keine Berechtigung
|
||||
$ sudo systemctl reload icinga2.service
|
||||
Failed to get D-Bus connection: No connection to service manager.
|
||||
```
|
||||
$ sudo id -Z
|
||||
staff_u:staff_r:staff_t:s0-s0:c0.c1023
|
||||
$ sudo vi /etc/icinga2/icinga2.conf
|
||||
"/etc/icinga2/icinga2.conf" [Permission Denied]
|
||||
$ sudo cat /var/log/icinga2/icinga2.log
|
||||
cat: /var/log/icinga2/icinga2.log: Keine Berechtigung
|
||||
$ sudo systemctl reload icinga2.service
|
||||
Failed to get D-Bus connection: No connection to service manager.
|
||||
```
|
||||
|
||||
Those commands fail because you only switch to root but do not change your SELinux role. Try again but tell sudo also to switch the SELinux role and type.
|
||||
|
||||
$ sudo -r icinga2adm_r -t icinga2adm_t id -Z
|
||||
staff_u:icinga2adm_r:icinga2adm_t:s0-s0:c0.c1023
|
||||
$ sudo -r icinga2adm_r -t icinga2adm_t vi /etc/icinga2/icinga2.conf
|
||||
"/etc/icinga2/icinga2.conf"
|
||||
$ sudo -r icinga2adm_r -t icinga2adm_t cat /var/log/icinga2/icinga2.log
|
||||
[2015-03-26 20:48:14 +0000] information/DynamicObject: Dumping program state to file '/var/lib/icinga2/icinga2.state'
|
||||
$ sudo -r icinga2adm_r -t icinga2adm_t systemctl reload icinga2.service
|
||||
```
|
||||
$ sudo -r icinga2adm_r -t icinga2adm_t id -Z
|
||||
staff_u:icinga2adm_r:icinga2adm_t:s0-s0:c0.c1023
|
||||
$ sudo -r icinga2adm_r -t icinga2adm_t vi /etc/icinga2/icinga2.conf
|
||||
"/etc/icinga2/icinga2.conf"
|
||||
$ sudo -r icinga2adm_r -t icinga2adm_t cat /var/log/icinga2/icinga2.log
|
||||
[2015-03-26 20:48:14 +0000] information/DynamicObject: Dumping program state to file '/var/lib/icinga2/icinga2.state'
|
||||
$ sudo -r icinga2adm_r -t icinga2adm_t systemctl reload icinga2.service
|
||||
```
|
||||
|
||||
Now the commands will work, but you have always to remember to add the arguments, so change the sudo rule to set it by default.
|
||||
|
||||
# echo "dirk ALL=(ALL) ROLE=icinga2adm_r TYPE=icinga2adm_t NOPASSWD: ALL" > /etc/sudoers.d/dirk
|
||||
```
|
||||
# echo "dirk ALL=(ALL) ROLE=icinga2adm_r TYPE=icinga2adm_t NOPASSWD: ALL" > /etc/sudoers.d/dirk
|
||||
```
|
||||
|
||||
Now try the commands again without providing the role and type and they will work, but if you try to read apache logs or restart apache for example it will still fail.
|
||||
|
||||
$ sudo cat /var/log/httpd/error_log
|
||||
/bin/cat: /var/log/httpd/error_log: Keine Berechtigung
|
||||
$ sudo systemctl reload httpd.service
|
||||
Failed to issue method call: Access denied
|
||||
```
|
||||
$ sudo cat /var/log/httpd/error_log
|
||||
/bin/cat: /var/log/httpd/error_log: Keine Berechtigung
|
||||
$ sudo systemctl reload httpd.service
|
||||
Failed to issue method call: Access denied
|
||||
```
|
||||
|
||||
## Bugreports <a id="selinux-bugreports"></a>
|
||||
|
||||
@ -231,7 +297,7 @@ If you experience any problems while running in enforcing mode try to reproduce
|
||||
|
||||
After some feedback Icinga 2 is now running in a enforced domain, but still adds also some rules for other necessary services so no problems should occure at all. But you can help to enhance the policy by testing Icinga 2 running confined by SELinux.
|
||||
|
||||
Please add the following information to [bug reports](https://www.icinga.com/community/get-involved/):
|
||||
Please add the following information to [bug reports](https://icinga.com/community/):
|
||||
|
||||
* Versions, configuration snippets, etc.
|
||||
* Output of `semodule -l | grep -e icinga2 -e nagios -e apache`
|
||||
|
@ -188,7 +188,7 @@ New columns:
|
||||
{host,service}group | notes | TEXT | NULL | -
|
||||
{host,service}group | notes_url | TEXT | NULL | -
|
||||
{host,service}group | action_url | TEXT | NULL | -
|
||||
customvariable* | is_json | integer | 0 | Defines whether `varvalue` is a json encoded string from custom attributes, or not
|
||||
customvariable* | is_json | integer | 0 | Defines whether `varvalue` is a json encoded string from custom variables, or not
|
||||
servicestatus | original_attributes | TEXT | NULL | JSON encoded dictionary of original attributes if modified at runtime.
|
||||
hoststatus | original_attributes | TEXT | NULL | JSON encoded dictionary of original attributes if modified at runtime.
|
||||
|
||||
@ -611,7 +611,7 @@ Not supported: `neb_callbacks`, `neb_callbacks_rate`, `requests`, `requests_rate
|
||||
host_ | join | Prefix for attributes from implicit join with hosts table.
|
||||
|
||||
|
||||
#### Livestatus Timeperiod Table Attributes <a id="schema-livestatus-timeperiod-table-attributes"></a>
|
||||
#### Livestatus Timeperiods Table Attributes <a id="schema-livestatus-timeperiods-table-attributes"></a>
|
||||
|
||||
Key | Type | Note
|
||||
----------------------|-----------|-------------------------
|
||||
|
@ -1,19 +1,4 @@
|
||||
# Icinga 2
|
||||
# Copyright (C) 2012-2018 Icinga Development Team (https://www.icinga.com/)
|
||||
#
|
||||
# This program is free software; you can redistribute it and/or
|
||||
# modify it under the terms of the GNU General Public License
|
||||
# as published by the Free Software Foundation; either version 2
|
||||
# of the License, or (at your option) any later version.
|
||||
#
|
||||
# This program is distributed in the hope that it will be useful,
|
||||
# but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
# GNU General Public License for more details.
|
||||
#
|
||||
# You should have received a copy of the GNU General Public License
|
||||
# along with this program; if not, write to the Free Software Foundation
|
||||
# Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA.
|
||||
# Icinga 2 | (c) 2012 Icinga GmbH | GPLv2+
|
||||
|
||||
file(GLOB DOCSRCS "*.md")
|
||||
|
||||
|
@ -13,7 +13,7 @@ icinga2 \- The Icinga 2 network monitoring daemon
|
||||
|
||||
.I command
|
||||
:= [
|
||||
.B api | console | daemon | feature | node | object | pki | repository | troubleshoot | variable
|
||||
.B api | ca | console | daemon | feature | node | object | pki | variable
|
||||
]
|
||||
.B --help
|
||||
|
||||
@ -69,9 +69,9 @@ Config files are processed in the order they are specified on the command-line.
|
||||
When no configuration file is specified and the
|
||||
.B --no-config
|
||||
is not used, Icinga 2 automatically falls back to using the configuration file
|
||||
.B SysconfDir + "/icinga2/icinga2.conf"
|
||||
(where SysconfDir is usually
|
||||
.BI "/etc" ")."
|
||||
.B ConfigDir + "/icinga2.conf"
|
||||
(where ConfigDir is usually
|
||||
.BI "/etc/icinga2" ")."
|
||||
|
||||
.TP
|
||||
.B "-z, --noconfig"
|
||||
@ -90,9 +90,9 @@ Detach from the controlling terminal.
|
||||
.SH "REPORTING BUGS"
|
||||
Report bugs at <https://github.com/Icinga/icinga2>
|
||||
.br
|
||||
Icinga home page: <https://www.icinga.com/>
|
||||
Icinga home page: <https://icinga.com/>
|
||||
.SH COPYRIGHT
|
||||
Copyright \(co 2012\-2014 Icinga Development Team (https://www.icinga.com)
|
||||
Copyright \(co 2012 Icinga GmbH
|
||||
License GPLv2+: GNU GPL version 2 or later <http://gnu.org/licenses/gpl2.html>
|
||||
.br
|
||||
This is free software: you are free to change and redistribute it.
|
||||
|
BIN
doc/images/addons/dashing_icinga2.png
Normal file
After Width: | Height: | Size: 863 KiB |
BIN
doc/images/addons/icinga_certificate_monitoring.png
Normal file
After Width: | Height: | Size: 246 KiB |
BIN
doc/images/addons/icinga_reporting.png
Normal file
After Width: | Height: | Size: 306 KiB |
BIN
doc/images/addons/icingaweb2_businessprocess.png
Normal file
After Width: | Height: | Size: 177 KiB |
BIN
doc/images/addons/icingaweb2_grafana.png
Normal file
After Width: | Height: | Size: 560 KiB |
BIN
doc/images/addons/icingaweb2_graphite.png
Normal file
After Width: | Height: | Size: 246 KiB |
BIN
doc/images/addons/icingaweb2_maps.png
Normal file
After Width: | Height: | Size: 530 KiB |
BIN
doc/images/api/icinga2_api_powershell_ise.png
Normal file
After Width: | Height: | Size: 492 KiB |
BIN
doc/images/configuration/icinga_web_local_server.png
Normal file
After Width: | Height: | Size: 296 KiB |
BIN
doc/images/development/windows_boost_build_dev_cmd.png
Normal file
After Width: | Height: | Size: 14 KiB |
BIN
doc/images/development/windows_builds_gitlab_pipeline.png
Normal file
After Width: | Height: | Size: 18 KiB |
BIN
doc/images/development/windows_powershell_posh_git.png
Normal file
After Width: | Height: | Size: 10 KiB |
BIN
doc/images/development/windows_visual_studio_installer_01.png
Normal file
After Width: | Height: | Size: 91 KiB |
BIN
doc/images/development/windows_visual_studio_installer_02.png
Normal file
After Width: | Height: | Size: 95 KiB |
BIN
doc/images/development/windows_visual_studio_installer_03.png
Normal file
After Width: | Height: | Size: 85 KiB |
BIN
doc/images/development/windows_visual_studio_tabs_c++.png
Normal file
After Width: | Height: | Size: 16 KiB |
Before Width: | Height: | Size: 13 KiB |
After Width: | Height: | Size: 90 KiB |
After Width: | Height: | Size: 74 KiB |
After Width: | Height: | Size: 112 KiB |
After Width: | Height: | Size: 87 KiB |
After Width: | Height: | Size: 134 KiB |
After Width: | Height: | Size: 144 KiB |
After Width: | Height: | Size: 124 KiB |
After Width: | Height: | Size: 117 KiB |
Before Width: | Height: | Size: 19 KiB |
Before Width: | Height: | Size: 40 KiB |
Before Width: | Height: | Size: 24 KiB |
Before Width: | Height: | Size: 60 KiB |