Checkmk Version überwachen – check_cmk


Da Checkmk nicht automatisch über eine neue Version informiert (oder ich hab’s bisher noch nicht gefunden),
erstelle ich mir dafür einfach einen eigenen kleinen check.

30.09.2022 - Anleitung aktualisiert, script update
24.10.2021 - Anleitung aktualisiert, script update
25.12.2020 - Anleitung aktualisiert

check_cmk

#!/bin/bash
# 30.09.2022 - script updated, get latest release on tags
# 24.10.2021 - script updated, https://github.com/tribe29/checkmk/releases no content
# 25.12.2020 - script updated (page layout changed)
# 16.10.2019 - script updated (page layout changed)

# set YOUR-SITE to check
SITE=blan

# set desired CMK Release
RELEASE=2.0   # old stable
#RELEASE=2.1   # current stable

# get versions
version_online=$(git ls-remote --tags https://github.com/tribe29/checkmk/ -l *$RELEASE.0p??* | cut --delimiter='/' --fields=3 | sort -V | tail -1 | sed 's/v//; s/\^{}//')
version_installed=$(omd version $SITE | sed s'/.cre//' | cut -d " " -f7)

# check if we can get current available online release
if [[ $version_online = "" ]]; then
        echo Checkmk CRE available release could not be determined!
        exit 2
fi

# check if a newer version is online available
if [[ $version_online = $version_installed ]]; then
        echo Checkmk CRE $version_installed
         echo "mrpe check every 12 hours"
          exit 0
         else
        echo Checkmk CRE $version_installed - update to $version_online available
       echo "https://checkmk.de/download" "Checkmk downloads"
      exit 1
fi

Die Ausgabe des checks.

Den check lasse ich nur alle 12 Stunden laufen. (siehe Checkmk Intervall für bestimmte service checks anpassen)

# /etc/check_mk/mrpe.cfg
check_cmk    (interval=43200:appendage=1)    /etc/check_mk/check_cmk

4 Gedanken zu „Checkmk Version überwachen – check_cmk“

  1. Dieses Skript hat einen kleinen Haken: Meiner Erfahrung nach dauert es einige bis viele Stunden von “neue Version wird auf github getagged” bis “Release-Datei steht zum Download bereit”, so dass ich, sobald der Check gelb wird, alle paar Stunden auf die Downloadseite schaue (bzw. per wget versuche, die neue Datei zu laden).

    Man könnte den Check so erweitern, dass er bei neuem Tag zusätzlich per curl prüft, ob die neue Version auch tatsächlich schon zum Download bereit steht, z.B. mit zusätzlichem


    dlpath="https://download.checkmk.com/checkmk/$version_online/check-mk-raw-${version_online}_0.focal_amd64.deb"
    if [ "$(curl -o /dev/null --silent -Iw '%{http_code}' $dlpath)" -eq "404" ]; then
    # new version tagged but not yet available for download
    echo "0 'Checkmk Version' - Checkmk CRE $version_installed"
    exit 0
    fi

    Antworten
    • Da bei mir der Check nur alle 12 Stunden läuft, ist mir das noch nie aufgefallen und der Download einer neuen Version war immer verfügbar.
      Die Idee ist aber gut, werde das mal testen und ggf. das Skript erweitern.

      Danke und Gruß,
      Michael…

      Antworten
  2. Hier mal meine Lösung, basierend auf eurer Grundlage. Es ist gedacht als einfacher Lokaler check des Agenten.
    Der Pfad für den Aufruf alle 24h: /usr/lib/check_mk_agent/local/86400/

    Im zum Agenten zugehörigen Host Setup einfach einen neuen Suchlauf starten. Getestet mit CheckMK 2.1.0.p14 RAW Edition


    #!/bin/sh
    # Reason for this no-op: shellcheck disable=... before the first command disables the error for the
    # entire script.
    :

    # Disable unused variable error (needed to keep track of version)
    # shellcheck disable=SC2034
    CMK_VERSION="2.1.0p14"

    # This script based on https://www.bachmann-lan.de/check_mk-version-ueberwachen-check_cmk/

    # get the data out
    getOut () {
    if [ "$1" = "0" ]; then
    echo "0 \"CMK Version\" update=0;1;2;0;2; OK: Installed Checkmk CRE $3"
    elif [ "$1" = "1" ]; then
    echo "1 \"CMK Version\" update=1;1;2;0;2; WARN: Installed Checkmk CRE $3 - update to $2 will soon available"
    elif [ "$1" = "2" ]; then
    echo "2 \"CMK Version\" update=2;1;2;0;2; CRIT: Installed Checkmk CRE $3 - update to $2 available"
    else
    echo "3 \"CMK Version\" update=0;1;2;0;2; UNKW: Online CMK Version is UNAVAILABLE"
    fi
    }

    # get distribution codename release
    DISTRIB_CODENAME=$(cat /etc/lsb-release | grep "DISTRIB_CODENAME" | tr -d '[DISTRIB_CODENAME=]')

    # set YOUR-SITE to check or get your site automatic if you only have one
    #SITE=
    SITE=$(omd sites | grep .cre | awk {'print $1'})

    # get latest online version
    VERSION_ONLINE=$(git ls-remote --tags --sort=v:refname https://github.com/tribe29/checkmk/ -l *refs* | tail -1 | grep -o 'v[0-9].[0-9].[0-9][a-z]\?[0-9]\?[0-9]\?-\?[r]\?[c]\?[0-9]\?[0-9]\?' | sed 's/v//;')
    VERSION_INSTALLED=$(omd version $SITE | sed s'/.cre//' | cut -d " " -f7)

    # check if we can get current available online release
    if [ -z "$VERSION_ONLINE" ]; then
    echo $(getOut)
    exit 2
    fi

    # check if a newer version is online available
    if [ $VERSION_ONLINE = $VERSION_INSTALLED ]; then
    echo $(getOut "0" $VERSION_ONLINE $VERSION_INSTALLED)
    exit 0
    else
    # check if new version is tagged but not yet available for download
    DLPATH="https://download.checkmk.com/checkmk/$VERSION_ONLINE/check-mk-raw-${VERSION_ONLINE}_0.${DISTRIB_CODENAME}_amd64.deb"

    if [ "$(curl -o /dev/null --silent -Iw '%{http_code}' $DLPATH)" -eq "404" ]; then
    echo $(getOut "1" $VERSION_ONLINE $VERSION_INSTALLED)
    exit 0
    fi

    echo $(getOut "2" $VERSION_ONLINE $VERSION_INSTALLED)
    exit 0
    fi

    Antworten
    • Danke für das Skript, funktioniert gut! :)

      Kleine Anpassung: Die /etc/lsb-release gibt es unter Debian nicht.

      #DISTRIB_CODENAME=$(cat /etc/lsb-release | grep "DISTRIB_CODENAME" | tr -d '[DISTRIB_CODENAME=]')
      DISTRIB_CODENAME=$(cat /etc/os-release | grep "VERSION_CODENAME" | tr -d '[VEERSION_CODENAME=]')

      Antworten

Schreibe einen Kommentar