Add Checkmk OS info plugin
This commit is contained in:
1 parent
f90b81606d
commit
11ce8a4615
10 files changed
+334
No files matched your search
@@ -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
|
||||
@@ -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.
|
||||
@@ -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/...`.
|
||||
@@ -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
|
||||
Vendored
BIN
Binary file not shown.
Executable
+48
@@ -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.
|
||||
Reference in new issue
Block a user