diff --git a/components/agent/agentlistener.cpp b/components/agent/agentlistener.cpp
index 452935710..3d4675afa 100644
--- a/components/agent/agentlistener.cpp
+++ b/components/agent/agentlistener.cpp
@@ -151,18 +151,13 @@ void AgentListener::NewClientHandler(const Socket::Ptr& client, TlsRole role)
JsonRpc::SendMessage(tlsStream, request);
}
- Dictionary::Ptr message;
-
try {
- message = JsonRpc::ReadMessage(tlsStream);
+ Dictionary::Ptr message = JsonRpc::ReadMessage(tlsStream);
+ MessageHandler(tlsStream, identity, message);
} catch (const std::exception& ex) {
Log(LogWarning, "agent", "Error while reading JSON-RPC message for agent '" + identity + "': " + DiagnosticInformation(ex));
-
- return;
}
- MessageHandler(tlsStream, identity, message);
-
tlsStream->Close();
}
diff --git a/doc/5-icinga-template-library.md b/doc/5-icinga-template-library.md
index 4b5b4d7b0..664e0789c 100644
--- a/doc/5-icinga-template-library.md
+++ b/doc/5-icinga-template-library.md
@@ -212,7 +212,7 @@ cgreater | **Optional.** The user count critical threshold. Defaults to 5
### processes
-Check command object for the `check_processes` plugin.
+Check command object for the `check_procs` plugin.
Custom Attributes:
@@ -221,6 +221,17 @@ Name | Description
wgreater | **Optional.** The process count warning threshold. Defaults to 250.
cgreater | **Optional.** The process count critical threshold. Defaults to 400.
+### swap
+
+Check command object for the `check_swap` plugin.
+
+Custom Attributes:
+
+Name | Description
+----------------|--------------
+wfree | **Optional.** The free swap space warning threshold in %. Defaults to 50.
+cfree | **Optional.** The free swap space critical threshold in %. Defaults to 25.
+
### load
Check command object for the `check_load` plugin.
@@ -266,3 +277,8 @@ Check command for the built-in `icinga` check. This check returns performance
data for the current Icinga instance.
The `icinga` check command does not support any vars.
+
+### kernel
+
+Checks whether the version of the currently running kernel matches the
+on-disk kernel image.
diff --git a/etc/CMakeLists.txt b/etc/CMakeLists.txt
index a1f0a8fd1..8f60608e7 100644
--- a/etc/CMakeLists.txt
+++ b/etc/CMakeLists.txt
@@ -30,6 +30,7 @@ install_if_not_exists(icinga2/conf.d/localhost.conf ${CMAKE_INSTALL_SYSCONFDIR}/
install_if_not_exists(icinga2/conf.d/notifications.conf ${CMAKE_INSTALL_SYSCONFDIR}/icinga2/conf.d)
install_if_not_exists(icinga2/conf.d/timeperiods.conf ${CMAKE_INSTALL_SYSCONFDIR}/icinga2/conf.d)
install_if_not_exists(icinga2/conf.d/users.conf ${CMAKE_INSTALL_SYSCONFDIR}/icinga2/conf.d)
+install_if_not_exists(icinga2/features-available/agent.conf ${CMAKE_INSTALL_SYSCONFDIR}/icinga2/features-available)
install_if_not_exists(icinga2/features-available/checker.conf ${CMAKE_INSTALL_SYSCONFDIR}/icinga2/features-available)
install_if_not_exists(icinga2/features-available/command.conf ${CMAKE_INSTALL_SYSCONFDIR}/icinga2/features-available)
install_if_not_exists(icinga2/features-available/compatlog.conf ${CMAKE_INSTALL_SYSCONFDIR}/icinga2/features-available)
diff --git a/etc/icinga2/conf.d/localhost.conf b/etc/icinga2/conf.d/localhost.conf
index f4b208347..432427f72 100644
--- a/etc/icinga2/conf.d/localhost.conf
+++ b/etc/icinga2/conf.d/localhost.conf
@@ -66,3 +66,9 @@ object Service "disk" {
check_command = "disk"
}
+object Service "kernel" {
+ import "generic-service"
+
+ host_name = "localhost"
+ check_command = "kernel"
+}
diff --git a/etc/icinga2/features-available/agent.conf b/etc/icinga2/features-available/agent.conf
new file mode 100644
index 000000000..152e9fd5d
--- /dev/null
+++ b/etc/icinga2/features-available/agent.conf
@@ -0,0 +1,11 @@
+/**
+ * The agent listener accepts checks from agents.
+ */
+
+library "agent"
+
+object AgentListener "agent" {
+ cert_path = SysconfDir + "/icinga2/pki/your-master.crt"
+ key_path = SysconfDir + "/icinga2/pki/your-master.key"
+ ca_path = SysconfDir + "/icinga2/pki/ca.crt"
+}
diff --git a/itl/command-common.conf b/itl/command-common.conf
index adc29de07..942466a19 100644
--- a/itl/command-common.conf
+++ b/itl/command-common.conf
@@ -199,7 +199,7 @@ object CheckCommand "disk" {
vars.cfree = 10,
}
-object CheckCommand "users"{
+object CheckCommand "users" {
import "plugin-check-command",
command = [
@@ -212,7 +212,7 @@ object CheckCommand "users"{
vars.cgreater = 50,
}
-object CheckCommand "processes"{
+object CheckCommand "processes" {
import "plugin-check-command",
command = [
@@ -225,7 +225,20 @@ object CheckCommand "processes"{
vars.cgreater = 400,
}
-object CheckCommand "load"{
+object CheckCommand "swap" {
+ import "plugin-check-command",
+
+ command = [
+ PluginDir + "/check_swap",
+ "-w", "$wgreater$%",
+ "-c", "$cgreater$%"
+ ],
+
+ vars.wfree = 50,
+ vars.cfree = 25,
+}
+
+object CheckCommand "load" {
import "plugin-check-command",
command = [
@@ -243,7 +256,7 @@ object CheckCommand "load"{
vars.cload15 = 4.0
}
-object CheckCommand "snmp"{
+object CheckCommand "snmp" {
import "plugin-check-command",
command = [
@@ -256,23 +269,23 @@ object CheckCommand "snmp"{
vars.community = "public"
}
-object CheckCommand "snmp-uptime"{
+object CheckCommand "snmp-uptime" {
import "snmp",
vars.oid = "1.3.6.1.2.1.1.3.0"
}
-object CheckCommand "icinga"{
+object CheckCommand "icinga" {
import "icinga-check-command",
}
-object CheckCommand "cluster"{
+object CheckCommand "cluster" {
import "cluster-check-command",
}
-object CheckCommand "snmp-extend"{
+object CheckCommand "snmp-extend" {
import "plugin-check-command",
command = [
@@ -285,6 +298,12 @@ object CheckCommand "snmp-extend"{
vars.community = "public"
}
+object CheckCommand "kernel" {
+ import "plugin-check-command"
+
+ command = [ SysconfDir + "/icinga2/scripts/check_kernel" ]
+}
+
object CheckCommand "agent" {
import "agent-check-command"
}