Icinga Agent und eigene Commandos einbinden-

This forum was archived to /woltlab and is now in read-only mode.
  • Hi zusammen,


    ich bitte um eine kleine Anfänger-Unterstützung bezüglich IcingaAgents Fragen. Nachdem ich einiges gelesen habe, gibt es noch ein paar Verständnisschwierigkeiten.


    Icinga2 läuft auf einem Ubuntu. Ich möchte gerne ein check_Windows-Update.ps1 Skript ausführen und das Ergebniss entsprechend in icinga2 anzeigen.

    Das Skript selber läuft auf dem Windows Server und gibt schon passend (für nagios) die Ausgabe zurück.


    Ich schreibe einfach meine Fragen runter, dann ist es vermutlich einfacher zu antworten.


    1. Den Win Agent habe ich nach dieser Anleitung installiert. Ich habe den nsclient++ mit installiert und nur den Haken bei "Enable common check plugin" gesetzt. Ich hoffe das ist richtig?
    2. Ich habe mich wegen dieses Threads für den Icinga Agent entschieden.
    3. Nach der icinga-doku hier komme ich etwas durcheinander, da ich es nicht immer schaffe zu erkennen, reden wir nun vom icinga2 "Server" oder vom Client, den ich checken möchte? Beispiel unter 3.8.1.1 steht: "...download your check plugin and put it into the PluginDir directory...". Da der Pfad /usr/lib64/nagios/plugins/ bei mir nicht auf dem Icinga2 Server existiert nehme ich an, dass es um den zu überwachenden Rechner geht, richtig? Dann ist diese Beschreibung im Moment nicht für mich passend, da Windows, richtig?
    4. Nun habe ich weiter gestöbert und bin zum Kapitel Plugin Check Commands for NSClient++ gekommen. Der Include ist in meiner constant.conf auf dem icinga2 Server. Nach einer Nagios Anleitung habe ich das Skript auch in der nscp.ini eingetragen. Wenn ich aber einen Befehl ./check_nrpe -H 10.1.1.12 -n -t 120 -p 5666 -c check_updates auf dem Server eingebe, kommt ein Connection Refused. Installiere ich auf dem gleichen zu überprüfenden Host nsclient++ mit allen Haken, dann komme ich wenigstens rauf, bekomme aber eine SSL Fehlermeldung. Firewall ist auf. Daran liegt es nicht.
    5. Nun frage ich mich, ob und wie denn ich überhaupt solch einen eignes Skript richtig einbinde? Im Agent direkt, oder doch via nsclient++ ... hier versteh ich einfach nicht den Zusammenhang zwischen icinga2, Icinga Agent und nsclient++.
    6. Nachdem ich noch in der Doku stöberte bin ich auf Punkt 5.1gestossen - und nun verlässt es mich so langsam.||


    Wahrscheinlich ist wie immer alles ganz einfach und ich stelle mich zu doof an. Nach Tagen der Recherche hoffe ich nun um eine kleine Hilfestellung von Euch.


    Vielen Dank im Voraus!


    Fiiti

    Wenn man etwas nicht einfach erklären kann, hat man es nicht verstanden.

    -Albert Einstein-

  • Das auszuführende Plugin muss am Client selbst liegen, wo es dann ausgeführt wird. Wie das auf Windows geht, fehlt wohl in der Doku (darfst du gerne ein Issue aufmachen, oder wenn du es selbst hinbekommst, sehr gerne auch einen Pull Request mit Doku-Patch).


    Prinzipiell brauchst du einen Ablage-Ort für deine Scripts. In der constants.conf wird das wie folgt definiert:


    Code
    1. const PluginDir = PrefixDir + "/sbin"


    Das heisst, PluginDir als Konstante in deinen CheckCommands ist schon mal gut, keinerlei Änderung. Wenn du den genauen Pfad auf deinem Windows herausfinden möchtest, gibt es das CLI-Command "icinga2 variable get PluginDir" welches dir den genauen Pfad auflistet. Im wesentlichen ist das der Installationspfad unterhalb von %ProgramFiles% im sbin Directory.


    Das CheckCommand musst du dir dafür selbst erstellen, du kannst dich hier aber an den mitgelieferten Windows-Plugins orientieren: https://github.com/Icinga/icin…mand-plugins-windows.conf


    Dieses muss sowohl am Master und am Client verfügbar sein, also ist es am besten wenn du eine globale Zone für den Config-Sync verwendest. Danach kannst du das etwa via top down command endpoint antriggern. Das entspricht im wesentlichen der Distributed Monitoring-Doku für die Clients und deren Beispiele.



    Alternativ, wenn du nicht Icinga 2 am Client selbst das Script ausführen lassen willst, sondern eben NSClient++ als eigenen Agent, geht die Einbindung ein wenig anders vonstatten. Da du aber eh schon den Client installiert hast, würde ich von diesem Schritt abraten (Nummer 4 in deiner Frageliste).

  • Vielen Dank! Das hilft schon mal!

    Quote

    Dieses muss sowohl am Master und am Client verfügbar sein, also ist es am besten wenn du eine globale Zone für den Config-Sync verwendest.

    Danach kannst du das etwa via top down command endpoint antriggern.


    Das Kommando muss ich also auf dem Icinga"Server" (/usr/share/icinga2/include/command-plugins-windows.conf) anlegen UND

    auf dem WindowsClient (C:\Program Files\ICINGA2\share\icinga2\include\command-plugins-windows.conf)?

    Die Pfade ich ich rausgesucht - die Dateen liegen hier bei mir.


    Ist das richtig?


    Ich benutze auch Director - lege ich den Befehl besser damit an?


    Das mit den Zonen ist auch noch so ein ??? Thema. Kopiert das System das dann automatisch rüber? Ich nutze bereits eine Cluster-Zone.

    Oder bringe ich hier was durcheinander?

    Wenn man etwas nicht einfach erklären kann, hat man es nicht verstanden.

    -Albert Einstein-

  • Ne, diese beiden Daten solltest du nie angreifen, die kommen aus dem Icinga 2 Paket und werden bei jedem Upgrade überschrieben.


    Wenn du eh den Director hast, bau dir dort das CheckCommand und leg es in die director-global Zone. Auf deinem Client hast du die globale Zone hoffentlich schon konfiguriert, dann klappt das automagisch via Cluster-Sync.

  • Ich bin hier noch nicht sicher, ob ich die Zone auf dem Client eingeichtet habe.


    Du hast mir ja den Link zur Installation


    6.9.3 beschreibt es ja schön. Das werde ich jetzt auch durcharbeiten.


    Im Director kann ich NICHT diese Zoneneinstellungen bearbeiten, richtig?

    Oder anders: Ich mache nix falsch, wen ich jetzt diese Schritte 6.9.3 usw. durcharbeite, richtig?

    Wenn man etwas nicht einfach erklären kann, hat man es nicht verstanden.

    -Albert Einstein-

  • Soweit alles eingerichtet - jedoch kommt der Status nicht aus lila (unknown) raus für meinen Service.

    Ich habe eigentlich nur eine Zone nagios01.local

    Beim Ersteinrichten hatte ich jedoch wohl auch eine director-global angelegt.

    Schaue ich ins icinga2 Server Log, sehe ich hier einen Hinweis auf diese Zone. Liegt es daran, das der Command anscheinend nicht ausgeführt wird?

    Ich habe alle Settings mir angesehen und finde nicht einen Hinweis auf die Verwendung von director-global. Überall steht brav die nagios01.local Zone drinnen.

    Lösche ich die director-global aus der zones.conf auf dem icinga2 server (Zeile 10-12), gibt's Fehlermeldungen beim Konfig-Check.


    Hier meine zones.conf, so wie sie auf dem Server als auch auf dem Windowsclient aussieht:


    Und das Log des Servers:


    Bin wieder über jeden Tipp dankbar.

    Wenn man etwas nicht einfach erklären kann, hat man es nicht verstanden.

    -Albert Einstein-

  • Heisst im Umkehrschluss, deine Client-Kiste hat im Zertifikat "Nagios01" drinstehen als Common Name (CN), wohingegen der NodeName bzw Endpoint-Name dann "nagios01local" ist. Diese Namen müssen exakt identisch sein.


    Code
    1. [2017-03-02 15:47:27 +0100] warning/ApiListener: Unexpected certificate common name while connecting to endpoint 'nagios01local': got Nagios01'


    Du brauchst in deiner zones.conf 2 Zonen und 2 Endpoints für den Master und den Client. Nimm das Beispiel mit NodeName und ZoneName raus.


    Wenn ich das richtig verstehe, ist Nagios01 dein Client, und fp05 dein Master?

  • Erst einmal noch ein wirklich dolles DankeSchön, dass Du hier so fleißig hilfst.


    Mein Master ist nagios01.local auf Ubuntu.

    Der (erste) Slave ist fp05 - ein Windows Svr.


    Das mit den 2 Zonen und 2 Endpunkten habe ich soweit herausgelesen und gedacht es auch genau so in meiner zones.conf eingestellt zu haben.

    Das mit den Certificatnamen wird dann wohl so stimmen, obwohl ich überrascht bin. Das muss ich mir nochmal ansehen.



    Zu den Zonen & Endpunkten und wie ich es verstanden habe. Es sollen noch etliche WindowsServer dazu kommen. Ist folgende annahme richtig:


    Hostname Zone Endpunkt Parent Zones.conf
    Master (mit icinga2 drauf) = M1
    M1, Cw1, Cw2, Cwx..., CL1
    E1, E2, E3, E4
    keinen zones.con auf M1
    Client Windows 1 = cw1
    Cw1, M1
    E2, E1
    M1 zones.con auf Cw1
    Client Windows 2 = cw2 Cw2, M1
    E3, E1
    M1 zones.con auf Cw2
    Client Windows x = Cwx...
    Cwx..., , M1
    Ex..., E1
    M1 zones.conf auf Cwx...
    Client Linux 1 = CL1
    CL1, M1
    E4, E1
    M1 zones.conf auf CL1


    => Würde das so stimmen, was in die jeweilige zones.conf kommen muss?

    Jede Zeile ist eine eigene zones.coonf des jeweilgen Rechners.


    => Ein Knoten => ist ein Node in der Doku => ist ein Host => ist ein Master oder ein Client, richtig?


    => Wie bekomme ich diese falsche Zone director-global weg?


    ------------------------------------------------------------------------------------------------------------

    Nimm das Beispiel mit NodeName und ZoneName raus.

    Damit meinst Du folgende Zeilen in meinen zones.conf?

    Wenn man etwas nicht einfach erklären kann, hat man es nicht verstanden.

    -Albert Einstein-

  • Coole Tabelle :thumbup:Ja, das stimmt so. Probiers mal mit zwei Clients aus.


    Die Beispielconfig nimmt generische Konstanten, die aber meist zu Verwirrung führt. Deswegen meine Empfehlung immer FQDNs zu verwenden, und die Struktur sauber nachzubilden.

  • Ohh man - ich will erst mal das Zertifikatsproblem lösen....


    Du hast ja die Stelle rausgesucht, wo steht

    [2017-03-02 15:47:27 +0100] warning/ApiListener: Unexpected certificate common name while connecting to endpoint 'nagios01.local': got Nagios01'

    Ich habe nun in der constants.conf aus const NodeName ="nagios01" ein "nagios01.local" gemacht.


    Ein Konfigcheck bringt natürlich nun hunderte Fehler, da die Zone "nagios01" überall drinnen steht.


    Wie kann ich denn am einfachsten die Zone auch mit director anpassen?

    Wobei im Director steht bei den Zonen, dass es ein external Object ist.

    Wenn man etwas nicht einfach erklären kann, hat man es nicht verstanden.

    -Albert Einstein-

  • Die Änderung in der constants.conf bringt dir aber nur wenig am Client, da das im SSL-Zertifikat fest verdrahtet ist. Du hast wohl im Windows Setup Wizard den Default so belassen wie er war. Wenn du den nochmal durchlaufen lässt, inkl dem vollen Namen, solltest du auf Master-Seite nichts mehr ändern müssen.

  • Ist es denn egal, wenn ich im Director die Zone "nagios01" habe -

    aber in den zones.conf "nagios01.local"?


    Oder bringe ich hier Zertifikat und Zonen komplett durcheinander?

    Wenn man etwas nicht einfach erklären kann, hat man es nicht verstanden.

    -Albert Einstein-

  • Okay - das hat ja leider nicht geklappt, da Windows Crashte und ich die Zonen nicht in den Griff bekommen habe.


    Nun ist alles neu. Ich habe von vorne angefangen.


    Was ist BestPractice, um z. B. 2 Windows und 2 Linux via Icinga Agent anzubinden?


    Erst die Zonen und Endpunkte mit Director anlegen, dann die Windows Installer laufen lassen?


    Muss es eine Zone mit dem Namen MASTER geben?

    Wenn man etwas nicht einfach erklären kann, hat man es nicht verstanden.

    -Albert Einstein-

  • Gentlemens,

    ich kannn doch nicht der Einzige sein, der hier nur Bahnhof versteht. Desto mehr ich lese, desto weniger versteh ich.


    Schade auch, dass so gar keiner einem hilft bis auf dnsmichi.


    Warum ist das so kompliziert mit den Zonen, Zertifikaten, dem Zusammenspiel mit Director usw.

    Viele Links sind mittlerweile nicht mehr funktionabel. Ich bin in der IT nicht seit gestern. Ich bin auch gerne bereit zu geben, wenn ich nur irgendwie überhaupt nur den Anfang verstehen würde.


    Kann sich bitte einer Erbamen und mir eine Starthilfe geben? Alles was ich wünsche, ist aus meiner sicht eine Basicfunktion: Eigene Befehle auf einem Windowsclient als Client ausführen um einen bestimmten Task abzufragen.


    Wo sind meine Schwierigkeiten:

    • Beim Anfang - nehme ich den Director um alle Zonen für jeden Client anzulegen?
    • Wie sind die Hostnamen, die ich eintragen muss? In der Empfehlung steht, man soll den vollen Namen mit Domäne nehmen - also z. B. meinrechner1.meinedomäne.local. Dann steht in einer Anleitung, man soll mittels hostctl den Hostnamen abfragen und diesen verwenden. Der spuckt aber in meiner Testumgebung nur ein meinrechner1 aus.
    • Wie hängt das erstellte APIZertifikat mit den Zonen zusammen, als ich den Director einrichtete? Da habe ich ja mittels icinga2 api setup wohl ein Zertifikat angelegt. Wird das nun auch verwendet?
    • Werden denn überhaupt meine Skripte, die ich auf meinem MAster (mein Icinga2 Server) speichere nun zum Clinet kopiert?
    • Was ist bei Windows mit PowerShell Skripten - geht das auch (klar auf dem Client ja - aber wird dieses Skript dahin kopiert und dann ausgehführt und der Rückgabewert dann wieder zum Master zurückgegeben)?
    • Was macht in den Zonen.conf einobject Zone "global-templates" { global = true } ? Suche ich danach in den docs.icinga, bekomme ich hunderte von Antworten.
    • Wozu dient in der zones.conf
    Code
    1. object Endpoint NodeName {
    2. host = NodeName
    3. }
    4. object Zone ZoneName {
    5. endpoints = [ NodeName ]
    6. }

    ?


    Ich bin mir sicher, dass es in der Doku irgendwie und irgendwo steht... in den 80.000 Seiten. Wenn man dann noch die Querverweise versteht dann hat man es gepackt.


    Mein Angebot: Wahrscheinlich ist für einem Profi das Ganze in 30 Minuten gezeigt und eingerichtet (z. B. via TeamViewer und Telefon). Zwei Windows Clients zu einem Icinga2 Master auf Linux. Ich bin gerne bereit dafür was zu Bezahlen. Z. B. per Paypal Mailüberweisung. Ich werde es privat bezahlen. Ich möchte nicht das Gefühl vermitteln, nur nehmen zu wollen. Meine Firma hat mich zu einem sündhaft teurem Training geschickt - und all das wurde leider nicht behandelt. So langsam muss ich aber Ergebnisse zeigen. Ich bin also wirklich in einer angespannten Situation.


    Oder ich schreibe dann eine eindeutige Doku darüber mit Bild und allen Erklärungen, wenn ich es mal verstanden habe.


    Ich bitte einfach nur um etwas Hilfe! Ein herzliches Danke im Voraus.

    Wenn man etwas nicht einfach erklären kann, hat man es nicht verstanden.

    -Albert Einstein-

  • Hast ja recht.


    In meinen hunderten von tests: Kann es sein, dass der Fehler in der Doku liegt, wenn man den Director verwendet?

    Man darf wohl KEINE Zonen in der /etc/icinga2/zones.conf vornehmen. -- wenn man den Director verwendet.


    Ich habe diese Client Anleitung durchgearbeitet.

    Dann kommt die Stelle:

    Now that you've successfully installed a satellite/client, please proceed to
    the detailed configuration modes.


    Arbeitet man nun detailed configurtation modes durch, steht:


    To make sure that all nodes involved will accept configuration and/or commands, you need to configure the Zone and Endpoint hierarchy on all nodes.

    • icinga2-master1.localdomain is the configuration master in this scenario.
    • icinga2-client1.localdomain acts as client which receives command execution messages via command endpoint from the master. In addition, it receives the global check command configuration from the master.

    Include the endpoint and zone configuration on both nodes in the file /etc/icinga2/zones.conf.


    Und dann kracht es beim icinga2 daemon -C auf dem Master.


    Etwas geforscht, und siehe da, das macht der Director alles selber. Er legt selber diese Zones an, ohne das ich nur irgendwo etwas eintragen muss.

    Nett - aber verwirrend.


    Kann es sein, dass im Director ich besser in den "Icinga agent and zone settings" Einstellungen NICHTS unter Cluster Zone eintrage?

    Wenn man etwas nicht einfach erklären kann, hat man es nicht verstanden.

    -Albert Einstein-

    The post was edited 1 time, last by Fiiti ().

  • Ich habe diese Directoe anleitung durchgearbeitet.

    Dann kommt die Stelle:

    Now that you've successfully installed a satellite/client, please proceed to
    the detailed configuration modes.

    Da steht nix vom Director.

    Das bezieht sich auf die config files unter master:/etc/icinga2/zones.d/[zonename].

    Und das was da steht stimmt.


    Wenn der Director (den ich selbst nicht nutze) in der Lage ist, zone und endpoint Objekte auf dem Master anzulegen - prima.

    Auf den Agent bekommt der die aber sicher nicht.

    Zum Replizieren von Objekten bräuchte er eine Verbindung, und für die bräuchte es genau die Zonen und Endpunkte.


    Also glaube ich:

    leg die Zonen und Endpunkte auf Master und Satellite / Client / Agent manuell an damit die sich erstmal unterhalten können.

  • Da steht nix vom Director.

    Stimmt - mein Fehler - ich wollte "Client Anleitung" schreiben. Hab's angepasst.


    Also glaube ich:

    leg die Zonen und Endpunkte auf Master und Satellite / Client / Agent manuell an damit die sich erstmal unterhalten können.

    Damit begannen meine Probleme, wie ich es ja geschrieben habe. Denn anscheinend, so sehe ich es hier, werden die Zonen dann doppelt angelegt (der Director legt seine autom. an wenn man z. B. einen Host hinzufügt und meine per Hand eingetragenen.), was zu etlichen Fehlern im Konfig-Check führt.

    Wenn man etwas nicht einfach erklären kann, hat man es nicht verstanden.

    -Albert Einstein-

  • Um den Director verwenden zu können, musst du Icinga 2 und dessen verteilte Umgebung auch verstanden haben. Wenn dem nicht so ist, rennst du vermutlich mehrfach gegen die Wand.


    Ich würde dir folgendes empfehlen - versuch dir in einem Testlab mal manuell, so wie in der Doku beschrieben, ein Mini-Setup zu bauen. 1 Master, 2 Clients. Meinetwegen dann auch einen Satelliten dazwischen. Wenn das mal läuft, und du auch verstanden hast, wie Zonen und Endpoints ticken (du wirst sicher in den einen oder anderen Fehler laufen und das dann im Log nachvollziehen), dann kannst du dich an den Director vorwagen.


    An dieser Stelle auch empfehlenswert - das Icinga 2 Buch von Lennart & Thomas, wo die Sache mit Zonen und Clients echt gut erklärt wird. Und wenns dann immer noch nicht klar ist, rate ich zu einem der Icinga 2 Trainings. Im besten Fall wohl beide.