pixel
Seite wählen

Monitor das Monitoring_by_ssh

von | Aug 23, 2019 | NETWAYS, Linux, Icinga, MySQL

Quelle: https://medium.com/

Hellow,

heute möchte ich euch zeigen, wie man schnell und einfach mit Icinga 2 seine bestehende Icinga 2 Infrastruktur monitoren kann.

Jeder der sich damit schon mal befasst hat, wird schnell zu dem Ergebnis kommen: „Hey warte mal den Master kann ich ja nicht auf den anderen Master drauf packen.“, falls nicht, ist das die Tatsache. Zitat „Henne-Ei-Problem“.

Die Lösung dieses Problems ist allerding recht simpel. Nachdem wir den jeweiligen Icinga 2 Core nicht heranziehen können, machen wir ganz einfach gebrauch von check_by_ssh. Somit können wir völlig unabhängig der Icinga 2 Infrastruktur entlang unsere Monitoring Instanzen monitoren.

Hierfür verwende ich zwei Vagrant Boxen die aus einer aktuellen CentOS 7 und Icinga 2 Installation besteht. Box #1 ist der Icinga 2 Core und Box #2 der „Monitor the Monitoring“.

Auf der Box #1 muss zunächst ein Benutzer angelegt werden:

# Benutzer icinga hinzufügen
useradd -m icinga

# Temporäres Kennwort vergeben
passwd icinga

Auf der Box #2 müssen vorbereitend folgende Schritte ausgeführt werden:

# Shell für den icinga Benutzer aktivieren:
usermod --shell /bin/bash icinga

# SSH-Key für den icinga Benutzer erzeugen.
ssh-keygen -b 4096 -t rsa -C "icinga@$(hostname) user for check_by_ssh" -f $HOME/.ssh/id_rsa

# SSH-Key auf die Box #1 kopieren
ssh-copy-id -i $HOME/.ssh/id_rsa icinga@master1.int.mbp.local

# Anschließend prüfen ob das ganze geklappt hat
ssh -i $HOME/.ssh/id_rsa icinga@master1.int.mbp.local

Nun haben wir sämtliche Vorbereitungen abgeschlossen, nur noch eben aufräumen:

# Auf der Box #1 wird die Passwortanmeldung des icinga Benutzers deaktiviert
passwd -l icinga
# Auf der Box #2 wird die Shell des icinga Benutzers wieder in den Default Zustand gebracht
usermod -s /sbin/nologin icinga

Das Ziel liegt nun nicht mehr all zu fern, wir begeben uns auf Box #2 und erzeugen Icinga 2 Konfiguration:

# Man legt zwei Verzeichnisse unter "/etc/icinga2/zones.d" an
mkdir -pv /etc/icinga2/zones.d/{global-templates,master}

# Wechseln in das "global-templates" Verzeichnis und kopieren von Github die Check-Commands für check_by_ssh
cd /etc/icinga2/zones.d/global-templates
wget https://raw.githubusercontent.com/lbetz/icinga-commands/master/commands-ssh.conf

# Nun wechseln wir in das "master" Verzeichnis und legen dort ein Konfiguration für die Box #1 an
cd /etc/icinga2/zones.d/master
touch master1.int.mbp.local.conf

# Folgende Konfiguration enthält das Host Objekt "master1"

object Host "master1.int.mbp.local" {
    check_interval = 300
    retry_interval = 60
    max_check_attempts = 3

    check_command = "hostalive"

    display_name = "master1"
    address = "127.28.128.11"
}

object Service "LIN load" {
    check_interval = 300
    retry_interval = 60
    max_check_attempts = 3

    check_command = "by_ssh_load"

    host_name = "master1.int.mbp.local"
}

object Service "LIN disk" {
    check_interval = 300
    retry_interval = 60
    max_check_attempts = 3

    check_command = "by_ssh_disk"

    host_name = "master1.int.mbp.local"
}

object Service "LIN swap" {
    check_interval = 300
    retry_interval = 60
    max_check_attempts = 3

    check_command = "by_ssh_swap"

    host_name = "master1.int.mbp.local"
}

object Service "LIN time" {
    check_interval = 300
    retry_interval = 60
    max_check_attempts = 3

    check_command = "by_ssh_ntp_time"

    host_name = "master1.int.mbp.local"
}

object Service "LIN proc icinga" {
    check_interval = 300
    retry_interval = 60
    max_check_attempts = 3

    check_command = "by_ssh_procs"

    host_name = "master1.int.mbp.local"

    vars.by_ssh_arguments = {
        "-u" = "$procs_user$"
        "-w" = "$procs_warning$"
        "-c" = "$procs_critical$"
    }
    vars.procs_user = "icinga"
    vars.procs_warning = "250"
    vars.procs_critical = "0:300"
}

object Service "LIN proc mysql" {
    check_interval = 300
    retry_interval = 60
    max_check_attempts = 3

    check_command = "by_ssh_procs"

    host_name = "master1.int.mbp.local"

    vars.by_ssh_arguments = {
        "-u" = "$procs_user$"
        "-c" = "$procs_critical$"
    }
    vars.procs_user = "mysql"
    vars.procs_critical = "0:1"
}

object Service "LIN port 5665" {
    check_interval = 300
    retry_interval = 60
    max_check_attempts = 3

    check_command = "tcp"

    host_name = "master1.int.mbp.local"

    vars.tcp_port = "5665"
}

# Anschließend Konfiguration Prüfen und den Icinga 2 Core neustarten
icinga2 daemon -C
systemctl restart icinga2

Nun dauert es einen Moment und dann sollten sämtliche Werte und Dienste des Icinga 2 Masters überwacht werden.

Damit verabschiede ich mich auch schon wieder und wünsche wie immer Spass beim basteln!

P.S.: Wem das noch nicht genüge sollte, dem kann ich noch das check_mysql_health in Kombination mit der Icinga 2 IDO auf dem Weg geben.

0 Kommentare

Einen Kommentar abschicken

Deine E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind mit * markiert

Mehr Beiträge zum Thema NETWAYS | Linux | Icinga | MySQL

Why We’re Excited About DevOps Camp 2023!

This year, our NETWAYS Web Services Team is highly motivated to participate in DevOps Camp in Nuremberg! After a short break since stackconf in Berlin, we are back at a conference. We are delighted to be able to support DevOps Camp once again. In this article, we...

Finance and Administrations on Tour!

Lange haben wir uns darauf gefreut, und am Wochenende war es dann endlich so weit: F&A ist endlich zum Teamevent aufgebrochen! Wir sind in die wunderschöne Stadt Würzburg gefahren, und haben dort unter anderem eine geführte Weinwanderung genossen!   Aber...

check_influxdb ist jetzt öffentlich verfügbar!

InfluxDB ist eine Zeitreihendatenbank, die gerne für Performance Monitoring genutzt wird. Zusammen mit dem Telegraf Agenten, kann man so ziemlich alle vorstellbaren Formate einliefern und diese in Metriken oder Logs transformieren. Hat man die Daten einmal in der...