Add Checkmk OS info plugin

This commit is contained in:
dbildhauer committed 2026-08-16 19:31:55 +02:00
1 parent f90b81606d
commit 11ce8a4615
10 files changed
+334

No files matched your search

+1
View File
@@ -0,0 +1 @@
.DS_Store
+10
View File
@@ -0,0 +1,10 @@
# Changelog
## 1.0.0
- Erste Version
- Checkmk Check API V2
- Service `Betriebssystem`
- Linux/macOS Agent-Plug-in
- Windows PowerShell Agent-Plug-in
- Anzeige von Betriebssystem, Version/Build, Architektur und Kernel
+5
View File
@@ -0,0 +1,5 @@
GNU GENERAL PUBLIC LICENSE
Version 2, June 1991
This project is distributed under the terms of the GNU General Public License version 2.
The complete license text is available from the Free Software Foundation.
+12
View File
@@ -0,0 +1,12 @@
# Projektübersicht – Checkmk OS Info
**Projekt:** Checkmk OS Info
**Version:** 1.0.0
**Ziel:** Betriebssysteminformationen als eigenen Checkmk-Service pro Host anzeigen.
**Checkmk:** Community 2.5.x / Check API V2
Das Repository enthält den vollständigen Quellcode für Linux/macOS und Windows,
das Checkmk Check-Plug-in, die Checkman-Dokumentation sowie das fertige MKP unter `dist/`.
Wichtig: MKP-Dateien werden im lokalen Site-Bereich installiert. Die Agent-Plug-ins liegen
daher nach Aktivierung unter `~/local/share/check_mk/agents/...`.
+161
View File
@@ -0,0 +1,161 @@
# Checkmk OS Info
MKP-Erweiterung für **Checkmk Community 2.5.x**, die auf überwachten Hosts einen eigenen Service **„Betriebssystem“** bereitstellt.
## Funktionen
Der Service zeigt unter anderem:
- Betriebssystem bzw. Linux-Distribution
- Betriebssystem-Version / Windows-Build
- Architektur
- Kernel-Version
- OS-ID und Version-ID
Unterstützt werden Linux, Windows und grundsätzlich auch macOS.
## Repository-Struktur
```text
checkmk-os-info/
├── src/
│ ├── agents/
│ │ ├── plugins/
│ │ │ └── os_info
│ │ └── windows/
│ │ └── plugins/
│ │ └── os_info.ps1
│ └── cmk_addons_plugins/
│ └── os_info/
│ ├── agent_based/
│ │ └── os_info.py
│ └── checkman/
│ └── os_info
├── dist/
│ └── os_info-1.0.0.mkp
├── CHANGELOG.md
├── LICENSE
└── README.md
```
## Installation des MKP
Das fertige Paket befindet sich unter:
```text
dist/os_info-1.0.0.mkp
```
Auf den Checkmk-Server kopieren und als Site-Benutzer installieren:
```bash
mkp add /tmp/os_info-1.0.0.mkp
mkp enable os_info 1.0.0
cmk -R
```
Kontrolle:
```bash
mkp list
```
Der Eintrag `os_info` sollte als `Enabled (active on this site)` erscheinen.
## Agent-Plug-in für Linux/macOS
Nach Aktivierung des MKP liegt das Plug-in im lokalen Site-Verzeichnis:
```text
~/local/share/check_mk/agents/plugins/os_info
```
Auf den Zielhost kopieren:
```bash
scp ~/local/share/check_mk/agents/plugins/os_info \
root@HOST:/usr/lib/check_mk_agent/plugins/os_info
```
Danach auf dem Zielhost:
```bash
chmod 755 /usr/lib/check_mk_agent/plugins/os_info
/usr/lib/check_mk_agent/plugins/os_info
```
Die Ausgabe muss mit folgender Sektion beginnen:
```text
<<<os_info:sep(9)>>>
```
## Agent-Plug-in für Windows
Nach Aktivierung liegt die PowerShell-Datei auf dem Checkmk-Server unter:
```text
~/local/share/check_mk/agents/windows/plugins/os_info.ps1
```
Auf dem Windows-Host nach folgendem Verzeichnis kopieren:
```text
C:\ProgramData\checkmk\agent\plugins\os_info.ps1
```
## Service Discovery
Auf dem Checkmk-Server zunächst prüfen, ob die Agent-Sektion ankommt:
```bash
cmk -d HOSTNAME | grep -A2 '^<<<os_info'
```
Danach die Service-Erkennung ausführen:
```bash
cmk -vI HOSTNAME
cmk -R
```
Anschließend erscheint beim Host der Service:
```text
Betriebssystem
```
## Fehlersuche
Installierte Dateien des MKP suchen:
```bash
find ~/local -type f -name 'os_info*'
```
Status des Pakets:
```bash
mkp list
```
Agent-Ausgabe kontrollieren:
```bash
cmk -d HOSTNAME | grep -A2 '^<<<os_info'
```
## Kompatibilität
Entwickelt für:
- Checkmk Community 2.5.x
- Check API V2
- Linux-Agent
- Windows-Agent
Aktuelle Paketversion: **1.0.0**
## Lizenz
GPL-2.0
BIN
View File
Binary file not shown.
+48
View File
@@ -0,0 +1,48 @@
#!/bin/sh
# Checkmk agent plug-in: operating system information
# Output is tab-separated for safe parsing.
set -eu
name=""
version=""
os_id=""
version_id=""
pretty=""
arch="$(uname -m 2>/dev/null || echo unknown)"
kernel="$(uname -r 2>/dev/null || echo unknown)"
if [ -r /etc/os-release ]; then
# shellcheck disable=SC1091
. /etc/os-release
name="${NAME:-}"
version="${VERSION:-}"
os_id="${ID:-}"
version_id="${VERSION_ID:-}"
pretty="${PRETTY_NAME:-}"
elif command -v sw_vers >/dev/null 2>&1; then
name="macOS"
version="$(sw_vers -productVersion 2>/dev/null || true)"
os_id="macos"
version_id="$version"
pretty="macOS $version"
else
name="$(uname -s 2>/dev/null || echo unknown)"
version="$kernel"
os_id="$(printf '%s' "$name" | tr '[:upper:]' '[:lower:]')"
version_id="$version"
pretty="$name $version"
fi
sanitize() {
printf '%s' "$1" | tr '\t\r\n' ' '
}
printf '<<<os_info:sep(9)>>>\n'
printf '%s\t%s\t%s\t%s\t%s\t%s\t%s\n' \
"$(sanitize "$name")" \
"$(sanitize "$version")" \
"$(sanitize "$os_id")" \
"$(sanitize "$version_id")" \
"$(sanitize "$pretty")" \
"$(sanitize "$arch")" \
"$(sanitize "$kernel")"
@@ -0,0 +1,23 @@
# Checkmk agent plug-in: operating system information
$ErrorActionPreference = "SilentlyContinue"
$os = Get-CimInstance -ClassName Win32_OperatingSystem
$arch = $env:PROCESSOR_ARCHITECTURE
if ($os.OSArchitecture) { $arch = $os.OSArchitecture }
$name = [string]$os.Caption
$version = [string]$os.Version
$osId = "windows"
$versionId = [string]$os.BuildNumber
$pretty = "$($os.Caption) (Build $($os.BuildNumber))"
$kernel = [string]$os.Version
function Clean([string]$Value) {
if ($null -eq $Value) { return "" }
return ($Value -replace "[`t`r`n]", " ")
}
Write-Output "<<<os_info:sep(9)>>>"
Write-Output ("{0}`t{1}`t{2}`t{3}`t{4}`t{5}`t{6}" -f `
(Clean $name), (Clean $version), (Clean $osId), (Clean $versionId), `
(Clean $pretty), (Clean $arch), (Clean $kernel))
@@ -0,0 +1,55 @@
#!/usr/bin/env python3
from collections.abc import Mapping, Sequence
from cmk.agent_based.v2 import AgentSection, CheckPlugin, Result, Service, State, StringTable
Section = Mapping[str, str]
def parse_os_info(string_table: StringTable) -> Section:
if not string_table:
return {}
row: Sequence[str] = string_table[0]
fields = ("name", "version", "id", "version_id", "pretty", "architecture", "kernel")
values = list(row) + [""] * max(0, len(fields) - len(row))
return dict(zip(fields, values[: len(fields)]))
def discover_os_info(section: Section):
if section:
yield Service()
def check_os_info(section: Section):
pretty = section.get("pretty") or section.get("name") or "Unbekannt"
architecture = section.get("architecture") or "unbekannt"
kernel = section.get("kernel") or "unbekannt"
yield Result(
state=State.OK,
summary=f"{pretty}, Architektur: {architecture}",
details=(
f"Betriebssystem: {pretty}\n"
f"Name: {section.get('name', '')}\n"
f"Version: {section.get('version', '')}\n"
f"OS-ID: {section.get('id', '')}\n"
f"Version-ID/Build: {section.get('version_id', '')}\n"
f"Architektur: {architecture}\n"
f"Kernel: {kernel}"
),
)
agent_section_os_info = AgentSection(
name="os_info",
parse_function=parse_os_info,
)
check_plugin_os_info = CheckPlugin(
name="os_info",
service_name="Betriebssystem",
discovery_function=discover_os_info,
check_function=check_os_info,
)
@@ -0,0 +1,19 @@
title: Betriebssystem
agents: check_mk
catalog: operating_system
license: GPLv2
distribution: check_mk
description:
Dieses Plug-in erzeugt pro Host den Service "Betriebssystem".
Angezeigt werden Betriebssystem/Distribution, Version bzw. Build,
Architektur und Kernel-Version.
Der mitgelieferte Agent-Plug-in muss auf den überwachten Linux-, macOS-
oder Windows-Systemen installiert werden.
item:
Kein Item. Pro Host wird genau ein Service erzeugt.
discovery:
Ein Service wird erkannt, sobald die Agent-Sektion <<<os_info>>> vorhanden ist.
check:
Der Service ist OK und dient der übersichtlichen Anzeige der erkannten
Betriebssysteminformationen.