BlogIcinga2LinuxMonitoringRaspberryShell

Icinga Linux remote client einrichten

Damit Icinga auch optimal genutzt wird, sollten Clients installiert werden. Dabei gibt es mehrere Möglichkeiten diese zu überwachen. Die eine ist mit dem Icinga Agent, den ich hier beschreiben werde. Die andere über ssh, die ich in “Icinga2 check by ssh” beschrieben habe. Icinga benötigt dafür ein Master + Satellite/Agent Aufbau. 

Rollenmodell
  • Ein master hat kein weiteres Elternknoten
    • Icinga Web 2 ist normalerweise auf dem master installiert
    • Ein master fügt die Informationen vom Kindknoten in das Backend oder generiert Benachrichtigungen
  • Ein Satellite hat ein Eltern- und ein Kindknoten
    • Der Satellite kann die Konfiguration für Hosts/services vom Elternknoten erhalten
    • Ein Satellite kann eigene checks ausführen, aber diese auch weiterleiten
    • Ein Satellite kann auch dann weiterlaufen, wenn der master nicht verfügbar ist
  • Ein agent hat immer nur Elternknoten
    • Ein agent führt entweder seine eigenen checks aus oder erhält diese vom Elternknoten

Da ich mein Icinga nur für den privaten Gebrauch verwende, macht für mich ein Cluster keinen Sinn. Auch ein Satellite ist nicht in Verwendung, sodass der Master die Checks direkt zum Agent schickt. Für den Client installieren wir das Icinga2 Packet. In der Regel kommen damit auch die Plugins/Checks mit.

root@client:~$ sudo apt install icinga2

Client Node Wizard

Nun können wir das Setup für den Agent auf dem Client ausführen. Das Setup führt euch durch jeden einzelnen Punkt und fragt euch einige Sachen ab. Meinen Durchlauf habe ich euch hier niedergeschrieben. “raspberrypi” ist dabei mein Master.

root@client:~# icinga2 node wizard
Welcome to the Icinga 2 Setup Wizard!

We will guide you through all required configuration details.

Please specify if this is a satellite/client setup ('n' installs a master setup) [Y/n]: Y

Starting the Client/Satellite setup routine...

Please specify the common name (CN) [clientname]:

Please specify the parent endpoint(s) (master or satellite) where this node should connect to:
Master/Satellite Common Name (CN from your master/satellite node): raspberrypi

Do you want to establish a connection to the parent node from this node? [Y/n]: Y
Please specify the master/satellite connection information:
Master/Satellite endpoint host (IP address or FQDN): 192.168.188.67
Master/Satellite endpoint port [5665]:

Add more master/satellite endpoints? [y/N]: N
Parent certificate information:

 Subject:     CN = raspberrypi
 Issuer:      CN = Icinga CA
 Valid From:  Apr 26 19:50:56 2020 GMT
 Valid Until: Apr 23 19:50:56 2035 GMT
 Fingerprint: XX XX XX XX XX XX XX XX XX XX XX XX XX XX XX XX XX XX

Is this information correct? [y/N]: y

Please specify the request ticket generated on your Icinga 2 master (optional).
 (Hint: # icinga2 pki ticket --cn 'clientname'):

No ticket was specified. Please approve the certificate signing request manually
on the master (see 'icinga2 ca list' and 'icinga2 ca sign --help' for details).
Please specify the API bind host/port (optional):
Bind Host []:
Bind Port []:

Accept config from parent node? [y/N]: y
Accept commands from parent node? [y/N]: y

Reconfiguring Icinga...
Disabling feature notification. Make sure to restart Icinga 2 for these changes to take effect.
Enabling feature api. Make sure to restart Icinga 2 for these changes to take effect.

Local zone name [clientname]:
Parent zone name [master]: raspberrypi

Default global zones: global-templates director-global
Do you want to specify additional global zones? [y/N]: N

Do you want to disable the inclusion of the conf.d directory [Y/n]: n

Done.

Now restart your Icinga 2 daemon to finish the installation!
root@retropie:~# systemctl restart icinga2

Den Neustart bitte nicht vergessen.

Das Setup wizard stellt sicher, dass folgende Aufgaben gemacht sind:

  • Das api Feature aktivieren
  • Eine Zertifikat-Signierunganfrage(CSR) für den eigenen Knoten erzeugen
  • Erlauben das Zertifikat vom Elternknoten zu verifizieren
  • Das signierte Agent/Satellite Zertifikat + ca.crt in /var/lib/icinga2/certs ablegen
  • zones.conf mit der neuen Zonen Hierarchie updaten
  • Update von /etc/icinga2/features-enabled/api.conf (accept_config, accept_commands) und constants.conf
  • Update von /etc/icinga2/icinga2.conf und include_recursive “conf.d” auskommentieren

 Mit dem Wizard haben wir eine Signierungsanfrage an den Master geschickt. Diese gilt es nun zu akzeptieren. Suchen wir erst die Anfrage raus und kopieren uns den Fingerprint. Diesen benötigen wir für die Signierung.

root@master:~# icinga2 ca list

Fingerprint                                                      | Timestamp                | Signed | Subject
-----------------------------------------------------------------|--------------------------|--------|--------
<fingerprint> | Jul 30 17:23:36 2020 GMT |       | CN = clientname

Nehmen wir nun den Fingerprint und benutzen ihn im folgenden Snippet

root@master:~# icinga2 ca sign <fingerprint>
information/cli: Signed certificate for 'CN = clientname'.

Endpoint einrichten

Unserem Master müssen wir nun noch den neuen Endpoint bekannt machen und einer Zone zuordnen. Das machen wir in der /etc/icinga2/zones.conf. Nehmt dort folgende Änderungen vor.

#NodeName ist in constants.conf definiert
#NodeName ist bei mir 'raspberrypi'


object Endpoint NodeName {
  host = NodeName
}

object Zone ZoneName {
  endpoints = [ NodeName ]
}

# Endpoint einrichten
object Endpoint "clientname" {
  host = "clientip"
}


object Zone "clientname" {
  parent = NodeName
  endpoints = [ "clientname" ]
}

Dem Endpoint müsst ihr nur noch Services zuordnen und diese werden nach einem Neustart der Instanz vom Master beim Endpoint/Client abgefragt. Ebenfalls habe ich die Variable vars.client_endpoint in den Host eingebracht.

object Host "clientname" {
        import "generic-host"

        address = "clientIP"
        check_command = "hostalive"
        vars["os"] = "Linux"
        vars.remote_client = name
        vars.client_endpoint = name
        version = 1596036000.782959
}

Damit der Service hinzugezogen wird, ist das “assign where” anzupassen. Mit “host.vars_client_endpoint” wird überprüft, ob dieser im Host gesetzt ist. Falls dies der Fall ist, wird der Service dem Host angeknüpft.

apply Service "users" {
  import "generic-service"
  check_command = "users"
  command_endpoint = host.vars.client_endpoint
  assign where host.name == NodeName || host.vars.os == "Linux" && host.vars.client_endpoint
}

Ein Gedanke zu „Icinga Linux remote client einrichten

Schreibe einen Kommentar

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