Beiträge zu dem Tag: “icinga2”

Icinga2 Ampelanbindung

Mit dem Dashboard für Icinga2 hat man ja schon eine schöne Möglichkeit sich eine gute Übersicht über den Systemstatus der überwachten Systeme zusammenzustellen.

Ich wollte jedoch eine weiteres Benachrichtigungssystem über eine Straßenampel realisieren.

Keine Angst diese Ampel fehlt jetzt nicht auf der Straße sondern wurde während des Studiums aus einem Müllcontainer bei Siemens gerettet. Die Lampen können über ein Relais das an einem Raspberry Pi angeschlossen ist über eine Web Anwendung individuell geschaltet werden und sind zusätzlich noch über einen Dimmer in der Helligkeit reguliert.

Dabei sollten nicht pauschal jeder “Alert” mit Rot/Gelb auf der Ampel angezeigt werden sondern es sollten nur bei bestimmten Alerts einer der Leuchten angehen.

  • Ampel Rot Dauerleuchten = Fehler mit sofortige Benachrichtigung

  • Ampel Rot Blinken => Fehler auf die man schauen sollte

  • Ampel Gelb = Warnungen bei denen man mal beizeiten drauf schauen sollte

Bei den Kommandos und Befehlen kann man noch etwas optimieren aber bis das mal passiert …..

Das Perl Programm das die Ampelleuchten schaltet basiert auf dieser Lösung ist so aufgebaut

  #!/usr/bin/env perl
  use version; our $VERSION = qv("1.0");
  use HTTP::Request::Common qw(POST);
  use LWP::UserAgent;
  use strict;
  use warnings; 
  my $api_url    = 'http://pi:8080/';
  my $api_path   = '0/';
  my $timeout = 180;
  my ($status) = @ARGV;
  my $kommando = do {
                      if( $status eq "OK" ) { 'Off' }
                          else         { 'On' }
                     };
  my $server_endpoint = ($api_url . $api_path .$kommando );
  my $req = HTTP::Request->new(GET => $server_endpoint);
  my $ua = LWP::UserAgent->new;
  $ua->timeout($timeout);
  my $resp = $ua->request($req);
  exit 0;

Der “API Path” ist die Leuchte (Rot:0 - Gelb:1 - Grün:2)

Dann die Definition des Icinga Kommandos

object NotificationCommand "ampel-red-notification" {
  command = [ "/opt/c/ampel-red-notification.pl" ]
  arguments = {
             "-X" = {
                           skip_key = true
                           value = "$alertops_state$"
                     }}}

Das Notification Template sieht dann so aus:

template Notification "c-red-service-notification" {
  command = "ampel-red-notification"
  states = [ OK, Critical, Unknown ]
  types = [ Problem, Acknowledgement, Recovery, Custom,
            FlappingStart, FlappingEnd,
            DowntimeStart, DowntimeEnd, DowntimeRemoved ]
  period = "24x7"
}

Dieses Template wird in einer Notification Definition “AmpelRed” für Services definiert die eine bestimmte Variable gesetzt haben:

  apply Notification "AmpelRed" to Service {
    import "c-red-service-notification"
    user_groups = host.vars.notification.mail.groups
    users = host.vars.notification.mail.users
    vars.alertops_state = "$service.state$"
    assign where service.vars.notification_red == true
  }

Dann nur noch die Variable bei den “wichtigen” Services setzen

  vars.notification_red = true
30.12.17
Weitere Beiträge zu: icinga2  

Fehlersuche bei Icinga2

Einer meiner Icinga2 Client Checks hat sich leider nicht so verhalten wie von mir gewünscht :-(

Ich wollte die Aktualität eines Backups prüfen. Ich dachte, ich hätte die richtigen Syntax aber leider wurde auf dem Master immer ein falscher Alarm ausgegeben. Wie sich später herausstellte wurden nicht die von mir gewünschten Werte geprüft sondern die Standartwerte.

Durch Hinweise im Monitoring-Portal bin ich auf die Troubleshooting Tips verwiesen worden.

Also beim nächsten Mal gehe ich so vor

Debugging auf dem Icinga2 Server einschalten

dann kann man schön sehen was auf dem Server passiert. (Dank an Christoph Stöttner für die Fehlerkorrektur)

 icinga2 feature disable debuglog
 Disabling feature debuglog. Make sure to restart Icinga 2 for these changes to take effect.

Dann viel mir auch schnell auf was geprüft worden ist:

 tail -f /var/log/icinga2/debug.log
 .......
 notice/Process: PID 4515 ('/usr/lib/nagios/plugins/check_file_age' '-f' '/home/user/backup/databases.tar.gz' ) terminated with exit code 2

Es wurden gar nicht die Warn und Critical Werte verwendet ich die in meiner Service Definition angegeben hatte.

Service Konfiguration gegen Template Doku prüfen

Dann gab es den nächsten Hinweis auf die Dokumentation der Plugings die ich trotz Suche nicht gefunden habe. Aber das kann auch mein Problem sein. Vielleicht hat mit der Titel “Icinga Template Library” nicht so richtig angesprochen. Dort stehen dann auch die Namen der Variablen die zu verwenden sind. In meinem Fall waren es einfach andere Namen.

Und dann klappte es auch.

 notice/Process: PID 4903 ('/usr/lib/nagios/plugins/check_file_age' '-c' '270000' '-f' '/home/user/backup/databases.tar.gz' '-w' '90000') terminated with exit code 1

Dann natürlich das debugging wieder ausschalten.

30.8.17
Weitere Beiträge zu: icinga2  

Icinga2: Remote Clients

Ich verwende einen Backup Server der einmal am Tag “aufwacht” und Backups von definierten Rechner via rsnapshot zieht. Der “Server” ist ein Pentium 3 mit einem aktuelle Debian 9.

Ich möchte natürlich auch auf diesem Server eine Überwachung des Festplattenplatzes und der Aktualität des Backups durchführen. Da der Server nicht ständig läuft müssen die Checks von Backup Server angestossen werden und dafür habe ich bisher NSCA verwendet. Leider scheint dieses Verfahren für Icinga2 nicht mehr so verwendbar zu sein denn es gibt etwas viel besserers, an das ich mich aber bisher nicht getraut habe. Heute habe ich diese Beschreibung gefunden und war in 20 Minuten fertig. deeply impressed

Hier meine Notizen

Auf dem Server

Konfiguration des Masters

 icinga2 node wizard
 Welcome to the Icinga 2 Setup Wizard!
 We'll guide you through all required configuration details.
 
 Please specify if this is a satellite setup ('n' installs a master setup) [Y/n]     : n
 Starting the Master setup routine...
 Please specify the common name (CN) [icinga.server.de]: 
 Checking for existing certificates for common name 'icinga.server.de'...
 Certificate '/etc/icinga2/pki/icinga.server.de.crt' for CN 'icinga.server.de'      already existing. Skipping certificate generation.
 Generating master configuration for Icinga 2.
 information/cli: API user config file '/etc/icinga2/conf.d/api-users.conf'      already exists, not creating config file.
 'api' feature already enabled.
 information/cli: Dumping config items to file '/etc/icinga2/zones.conf'.
 information/cli: Created backup file '/etc/icinga2/zones.conf.orig'.
 Please specify the API bind host/port (optional):
 Bind Host []: 
 Bind Port []: 
 information/cli: Created backup file '/etc/icinga2/features-available/api.conf.     orig'.
 information/cli: Updating constants.conf.
 information/cli: Created backup file '/etc/icinga2/constants.conf.orig'.
 information/cli: Updating constants file '/etc/icinga2/constants.conf'.
 information/cli: Updating constants file '/etc/icinga2/constants.conf'.
 information/cli: Updating constants file '/etc/icinga2/constants.conf'.

Eine Zonendatei anpassen und neu starten

vi /etc/icinga2/zones.conf
  object Endpoint "icinga.server.de" {
  }
  object Zone "icinga.server.de" {
          endpoints = ["icinga.server.de" ]
  }
  /etc/init.d/icinga2 restart

Für den Client den wir gleich einrichten müssen wir ein Ticket erstellen:

pki ticket --cn 'client.server.de'
fd6c5fadd492de1fea510600bdd43d949f222202

Auf dem Client

Der Client ist mein alter Backup Server (Pentium 3) auf dem noch Icinga2 installiert werden muss

 apt install icinga2 nagios-plugins

Icinga2 starten und prüfen ob alles läuft

/etc/init.d/icinga2 start    [ ok ] Starting icinga2 (via systemctl): icinga2.service.

Jetzt starten wir wieder einen Wizard der fast alles für uns macht. Einige der Aktionen habe ich für eine bessere Übersicht entfernt.

icinga2 node wizard
Welcome to the Icinga 2 Setup Wizard!

We'll guide you through all required configuration details.

Please specify if this is a satellite setup ('n' installs a master setup) [Y/n]    : y
Starting the Node setup routine...
Please specify the common name (CN) [client.server.de]: 
Please specify the master endpoint(s) this node should connect to:
Master Common Name (CN from your master setup): icinga.server.de
Do you want to establish a connection to the master from this node? [Y/n]: 
Please fill out the master connection information:
Master endpoint host (Your master's IP address or FQDN): icinga.server.de
Master endpoint port [5665]: 
Add more master endpoints? [y/N]: 
Please specify the master connection for CSR auto-signing (defaults to master     endpoint host):
Host [icinga.server.de]: 
Port [5665]: 
information/base: Writing private key to '/etc/icinga2/pki/client.server.de.    key'.
information/base: Writing X509 certificate to '/etc/icinga2/pki/client.server.    de.crt'.
information/cli: Fetching public certificate from master (icinga.server.de,     5665):

Certificate information:

 Subject:     CN = icinga.server.de
 Issuer:      CN = Icinga CA
 Valid From:  Jun 20 06:34:49 2017 GMT
 Valid Until: Jun 16 06:34:49 2032 GMT
 Fingerprint: BA 2C F7 E6 21 88 01 10 17 E6 49 7C 54 81 A2 D7 63 DF F5 A7 

Is this information correct? [y/N]: y
information/cli: Received trusted master certificate.

Please specify the request ticket generated on your Icinga 2 master.
 (Hint: # icinga2 pki ticket --cn 'client.server.de'):     fd6c5fadd492de1fea510600bdd43d949f222202
information/cli: Requesting certificate with ticket     'fd6c5fadd492de1fea510600bdd43d949f222202'.

information/cli: Created backup file '/etc/icinga2/pki/client.server.de.crt.    orig'.
information/cli: Writing signed certificate to file '/etc/icinga2/pki/client.    server.de.crt'.
information/cli: Writing CA certificate to file '/etc/icinga2/pki/ca.crt'.
Please specify the API bind host/port (optional):
Bind Host []: 
Bind Port []: 
Accept config from master? [y/N]: y
Accept commands from master? [y/N]: y
information/cli: Disabling the Notification feature.
Disabling feature notification. Make sure to restart Icinga 2 for these     changes to take effect
......
Done.
Now restart your Icinga 2 daemon to finish the installation!
/etc/init.d/icinga2 restart

Wieder die Zone.conf anpassen

vi /etc/icinga2/zones.conf
  object Endpoint "icinga.server.de" {
          host = "icinga.server.de"
          port = "5665"
  }
  object Zone "master" {
          endpoints = [ "icinga.server.de" ]
  }
  object Endpoint "client.server.de" {
  }
  object Zone "client.server.de"  {
          endpoints = ["client.server.de"  ]
          parent = "master"
  }

Auf dem Server

Auf dem Server kann man sehen welche Services eingerichtet wurden

icinga2 node list
Warning: CLI command 'node list' is DEPRECATED! Please read the Changelog.
Node 'client.server.de' (last seen: Thu Aug 24 20:42:01 2017)
    * Host 'client.server.de'
        * Service 'apt'
        * Service 'disk'
        * Service 'disk /'
        * Service 'http'
        * Service 'icinga'
        * Service 'load'
        * Service 'ping4'
        * Service 'ping6'
        * Service 'procs'
        * Service 'ssh'
        * Service 'swap'
        * Service 'users'

Und dann gibt es einen Befehl der automatisch die Konfigurationen für die Checks des clients anlegt

icinga2 node  update-config
/etc/init.d/icinga2 restart

Und TARAAAA

Auf dem Client

Jetzt sind auf dem Satelliten alle Standardchecks installiert von denen ich in diesem Falle viele nicht brauche. Die kann man wie üblich aus der Service Konfiguration löschen

vi services.conf 
 /etc/init.d/icinga2 restart

Auf dem Server schauen wir jetzt noch mal an was so anliegt

icinga2 node list
Warning: CLI command 'node list' is DEPRECATED! Please read the Changelog.

Node 'client.server.de' (last seen: Thu Aug 24 20:54:34 2017)
    * Host 'client.server.de'
        * Service 'apt'
        * Service 'swap'

Und aktualisieren die Konfiguration

icinga2 node  update-config

dabei werden alle gelöschten Services auch auf dem Master gelöscht

Jetzt muss ich nur noch die alten Checks wieder einrichten die ich früher über NSCA transportiert habe.

24.8.17
Weitere Beiträge zu: icinga2  

Icinga2: Ein NAS4Free mit NRPE überwachen

Als NAS verwende ich bei uns zu Hause NAS4Free. Um dies mit Icinga2 zu überwachen scheint mir aktuell das NRPE verfahren das einfachste zu sein. Die Installation ist wie immer “ganz” einfach. Hier die Dokumentation meiner Schritte.

Auf dem Icinga2 Server zuerst das NRPE Plugin installiert:

apt install nagios-nrpe-plugin

Dann auf dem NAS4Free Server wie hier beschrieben das NRPE Paket installiert:

pkg update
pkg install nrpe-2.15_6
Updating FreeBSD repository catalogue...
FreeBSD repository is up-to-date.
All repositories are up-to-date.
The following 5 package(s) will be affected (of 0 checked):    
New packages to be INSTALLED:
    nrpe: 2.15_6
    nagios-plugins: 2.2.0_2,1
    perl5: 5.24.1
    gettext-runtime: 0.19.8.1_1
    indexinfo: 0.2.6
....
.....

Message from nrpe-2.15_6:
**********************************************************************

 Enable NRPE in /etc/rc.conf with the following line:

   nrpe2_enable="YES"

 A sample configuration is available in /usr/local/etc/nrpe.cfg.sample.
 Copy to nrpe.cfg where required and edit to suit your needs.

**********************************************************************

vi /etc/rc.conf
    nrpe2_enable="YES"

und den Icinga2 Monitoring Server zulassen:

vi /usr/local/etc/nrpe.cfg
    allowed_hosts=127.0.0.1, <icinga2 ip>

Welche Kommandos aufgerufen werden wird auch in der Datei /usr/local/etc/nrpe.cfg festgelegt. Standardmäßig sind dort nur “fest verdrahtete” Befehle festgelegt. Das hier habe ich eingetragen um eine angeschlossene USV testen zu können:

    command[check_usv]=/usr/local/libexec/nagios/check_ups -u caseriousv
/usr/local/etc/rc.d/nrpe2 restart

und kann das vom Icinga Server testen. (ohne -n ging es nicht da SSL nicht richtig eingerichtet war. Das brauche ich hier intern erst mal nicht).

/usr/lib/nagios/plugins/check_nrpe -n -H nas -c check_usv

Auf dem Icinga2 Server habe ich dann in der Host Definition des NAS Services die zu überwachenden Services eingetragen

 object Service "USV" {
 import "generic-service"
 host_name = "nas"
 check_command = "nrpe"
 vars.remote_nrpe_command = "check_usv"
 vars.nrpe_no_ssl = true
 }
 
 object Service "Firstpool" {
 import "generic-service"
 host_name = "nas"
 check_command = "nrpe"
 vars.remote_nrpe_command = "check_Firstpool"
 vars.nrpe_no_ssl = true
 }

Dann sieht das Ergebnis so aus:

23.8.17
Weitere Beiträge zu: icinga2   NAS4Free  

Icinga2: Einen Host nicht auf alive prüfen

Aus einem bestimmten Grund pflege ich in Icinga auch Hosts die ich garnicht überwachen kann da diese in einem “unerreichbaren” Netzwerksegment stehen. Das führte natürlich dazu das diese Hosts von Icinga als “Host Down” gemeldet wurden.

Durch ein weiteres Template konnte ich es erreichen das diese Hosts immer als “Grün” gemeldet werden

 template Host "no-alive-check-host" {
     check_command = "dummy"
 }
7.8.17
Weitere Beiträge zu: icinga2  

icinga2: Defaultwerte für Plugins

stehen in

  /usr/share/icinga2/include/command-plugins.conf
4.7.17
Weitere Beiträge zu: icinga2  

icinga2: HP Laser Drucker überwachen

Icinga2 ist (vermutlich) deutlich besser als die Icinga 1 / Nagios aber die verfügbare Dokumentation hat noch Luft nach oben.

Ich wollte Drucker überwachen aber leider gibt es kaum Beispiel so das ich mir die folgende Konfiguration aus diesem Beitrag übertragen habe. Es gibt mit Sicherheit bessere Wege aber hier erfüllt es erst mal die Anforderung.

Auf Debian sind die Voraussetzungen zu installieren

apt install monitoring-plugins-standard

Ein erster Test

 /usr/lib/nagios/plugins/check_hpjd -H p-1.domain.de
 Printer ok - ("BEREIT")

Jetzt die Icinga2 Konfiguration

 vi /etc/icinga2/conf.d/hplj.conf
    object CheckCommand "hp-printers" {
         command = [ "/usr/lib/nagios/plugins/check_hpjd" ]
         arguments = {
            "-H" = "$address$"
         }
    }
    apply Service "hplj" {
        import "generic-service"
        check_command = "hp-printers"
        assign where host.vars.os_family == "hp"
    }

Damit bekommen alle Hosts die in Ihrer Host Definition das “Betriebsystem” auf “hp” gesetzt bekommen haben diese Service zugewiesen.

Warum das Plugin check_hpdj allerdings des Status OK vergibt wenn ein Fach offen ist muss ich erst noch herausfinden.

27.1.17
Weitere Beiträge zu: icinga2  

icinga2: ssh check mit anderem Port

Möchte man mit Icinga2 den check ssh nicht mit dem Standard Port sondern mit einem anderen machen steht hier beschrieben wie das geht.

Einfach

 vars.ssh_port = 2022

in die Service Konfiguration einstellen.

Wahrscheinlich gibt es eine Stelle wo das richtig beschrieben ist. Ich habe etwas gebraucht um das zu finden.

23.1.17
Weitere Beiträge zu: icinga2  

Dies ist ein privater Blog von Hagen Bauer- berufstätiger Vater, Ehemann, Naturliebhaber, Läufer, Zelter, technikverliebt.


Creative Commons License
This blog is licensed under a Creative Commons License