Zum Inhalt springen
PLUTEX
MENUMENU
  • Hos­ting
        • Hosting-Produkte im Überblick
        • Managed Server
        • Root Server
        • Backup & Storage
        • Web­hos­ting
        • CMS-Hosting
        • Shop-Hosting
        • Top­sel­ler
          • PLUT­EX­sto­rage
          • Plesk Ser­ver
          • Büro­ser­ver
          • Ser­ver­ma­nage­ment
          • PLUTEX Next­cloud
  • Colocation
        • Colocation im Überblick
        • 19″-Racks
        • Ser­ver-Housing
        • Top­sel­ler
          • PLUT­EX­sto­rage
          • Plesk Ser­ver
          • Büro­ser­ver
          • Ser­ver­ma­nage­ment
          • PLUTEX Next­cloud
  • Inter­net
        • Internet von PLUTEX
        • VPN
        • Internet per Richtfunk – PLUTEXwave
        • Internet für das HAG-Quartier in Bremen
        • Internet für das TABAKQUARTIER in Bremen
        • Webseite erstellen lassen
        • Top­sel­ler
          • PLUT­EX­sto­rage
          • Plesk Ser­ver
          • Büro­ser­ver
          • Ser­ver­ma­nage­ment
          • PLUTEX Next­cloud
  • Ser­vice
        • Service im Überblick
        • Consulting
        • Datenmanagement
        • Sup­port
        • Für Agen­tu­ren
        • Für vir­tu­elle Arbeitsplätze
        • Für Shell-Lieb­ha­ber
        • Top­sel­ler
          • PLUT­EX­sto­rage
          • Plesk Ser­ver
          • Büro­ser­ver
          • Ser­ver­ma­nage­ment
          • PLUTEX Next­cloud
  • Über PLUTEX
        • PLUTEX im Überblick
        • PLUTEX-Rechenzentren
        • Zer­ti­fi­zie­rung
        • Part­ner & Kooperationen
        • Aktu­el­les
        • Refe­ren­zen
        • Jobs
        • Anfrage
        • Kontakt
        • Top­sel­ler
          • PLUT­EX­sto­rage
          • Plesk Ser­ver
          • Büro­ser­ver
          • Ser­ver­ma­nage­ment
          • PLUTEX Next­cloud

Abhän­gig­kei­ten im Moni­to­ring abbilden

Wie man aus dem Graph der Netz­werk­to­po­lo­gie pro­gram­ma­tisch sinn­volle Kon­fi­gu­ra­tio­nen für Nagios-basierte Sys­teme ableitet.

Schon Nagios 3 konnte Abhän­gig­kei­ten (“par­ents”) zwi­schen Hosts spe­zi­fi­zie­ren, damit nur der dich­teste Host beim Aus­fall eine Benach­rich­ti­gung gene­riert. Und als Vater aller Moni­to­ring-Lösun­gen hat Nagios die­ses Fea­ture an fast alle heu­ti­gen Sys­teme vererbt.

Wer also ein voll­stän­di­ges Asset Manage­ment inklu­sive Netz­werk­ver­bin­dun­gen hat, möchte diese natür­lich auch als Abhän­gig­kei­ten im Moni­to­ring wie­der­fin­den. Lei­der lässt sich das bei red­un­dan­ten Topo­lo­gien nicht 1:1 über­set­zen, da die Abhän­gig­kei­ten von Nagios azy­klisch sein müssen.

Ein Bei­spiel: Wir haben die Hosts A bis E (z.B. Rou­ter oder Swit­che), die im Kreis ver­bun­den sind. An Host A hängt unser Monitoring.

   Monitoring
       |
       |
E ---- A ---- B
|             |
|             |
D ----------- C

Der Host D ist also sowohl über C als auch über E erreich­bar. So weit ließe sich das auch noch darstellen:

define host {
    host_name D
    parents C,E
}

So wür­den Benach­rich­ti­gun­gen für D unter­drückt wer­den, wenn sowohl C als auch E schon nicht erreich­bar sind.

Nun ist ja aber auch C sowohl über B als auch über D erreich­bar. Ana­log würde man also konfigurieren:

define host {
    host_name C
    parents B,D
}

Und nun ist C gleich­zei­tig “über” als auch “unter” D in der Hier­ar­chie. Das funk­tio­niert natür­lich nicht.

Das ist auch inhalt­lich klar: Würde Nagios sol­che “zykli­schen” Abhän­gig­kei­ten erlau­ben, könn­ten wir schlicht A bis E jeweils von bei­den Nach­barn abhän­gig machen (was in die­ser Topo­lo­gie zwar falsch wäre, aber mög­lich zu kon­fi­gu­rie­ren). Wenn dann alle 5 Hosts aus­fal­len wird für kei­nen eine Benach­rich­ti­gung ver­schickt, weil ja für jeden ein­zel­nen Host auch seine bei­den Parents/Nachbarn aus­ge­fal­len sind.

Wir kön­nen aber doch wenigs­tens etwas über die Abhän­gig­kei­ten in die­ser Topo­lo­gie kon­fi­gu­rie­ren, näm­lich dass die Hosts B bis E vom Host A abhän­gig sind!

Nun haben wir bei PLUTEX ein gut gepfleg­tes Asset Manage­ment inklu­sive phy­si­schen (und vir­tu­el­len) Netz­werk­ver­bin­dun­gen. Abs­trakt sind wir also ganz klas­sisch im Bereich der Gra­phen­theo­rie, mit Hosts als Kno­ten und Ver­bin­dun­gen als Kan­ten. Um aus die­sem Gra­phen die zu kon­fi­gu­rie­ren­den Abhän­gig­kei­ten zu ermit­teln, müs­sen wir das obige Kon­strukt in die Spra­che der Gra­phen­theo­rie über­set­zen. Und prak­ti­scher­weise gibt es für Kno­ten wie A einen Namen: Ein Gelenk­punkt (engl. cut point) teilt den Gra­phen in meh­rere Blö­cke, die durch ent­fer­nen des Gelenk­punkts zu eigen­stän­di­gen Zusam­men­hangs­kom­po­nen­ten werden.

Um also alle kon­fi­gu­rier­ba­ren Abhän­gig­kei­ten in einem Gra­phen G zu fin­den dient uns daher die­ser Python-Code, der den Gra­phen bereits als net­workx-Objekt erhält:

# We will store the dependencies in a new, directed graph
dependencies = nx.DiGraph()
dependencies.add_nodes_from(G.nodes)

# We really only operate on the connected component of the root node.
# For all other connected components, we have no idea which way a
# dependency should point.
G = G.subgraph(nx.node_connected_component(G, root_node))

# We want to add dependencies from host A to host B if A is only
# reachable via B. Graph theoretically, B is then a cut vertex or
# articulation point (i.e. increases the number of connected components
# if removed), and A is not in the same connected component as the root
# node after the removal of B.
#
# We build this list of dependencies by iterating the cut vertices and
# adding dependencies on them to all nodes in the non-root components of
# the modified graph.
for cut_vertex in nx.articulation_points(G):
    if cut_vertex == root_node:
        # Even though the root node probably is well connected in the
        # topology, it may be a cut vertex in some cases, in which case
        # it doesn't yield any useful dependencies anyway
        continue

    tmpG = G.copy()
    tmpG.remove_node(cut_vertex)

    # We iterate the relevant connected components of the reduced graph
    # by iterating the neighbors of the cut vertex in the original graph
    for neighbor in G.neighbors(cut_vertex):
        component = nx.node_connected_component(tmpG, neighbor)
        if root_node in component:
            # The connected component that still contains the root node
            # isn't dependant on the cut vertex
            continue

        for host in component:
            dependencies.add_edge(host, cut_vertex)

# We cannot have cyclic dependencies
assert nx.is_directed_acyclic_graph(dependencies)

Übri­gens: Natür­lich ver­wen­den wir die Topo­lo­gie­in­for­ma­tio­nen unse­res Asset Manage­ments nicht nur zur Gene­rie­rung von Kon­fi­gu­ra­tio­nen für unser Moni­to­ring, son­dern auch zur Visua­li­sie­rung unse­res Netzes.

Abhängigkeiten in Nagios, Asset Management, Konfiguration Netzwerk, Monitoring, Nagios, Netzwerkadministration

Tags

  • Abhängigkeiten in Nagios
  • Asset Management
  • Catchall
  • Debian Buster
  • E-Mail
  • eBGP-Router
  • Firewalls
  • ipset
  • iptables
  • Konfiguration Netzwerk
  • Linux-Server
  • Mailserver
  • Monitoring
  • Nagios
  • Netzwerkadministration
  • nftables
  • Postfix
  • Router
  • Routing
  • Serverkonfiguration
  • Switch
  • VLAN
  • VLANs
  • VyOS

PLUTEX Ser­vices

  • Ser­ver­ma­nage­ment
  • Mana­ged Backup
  • Mana­ged Firewall
  • Mana­ged Monitoring
  • Update- und Patchmanagement
  • Con­sul­ting: Bera­tung auf Augenhöhe

Wei­tere Informationen

  • Kon­takt
  • Refe­ren­zen
  • Sta­tus Rechenzentren
  • PLUTEX Tech­Blog
  • PLUTEX Cus­to­mer-Cen­ter
  • PLUTEX Doku­Wiki & HowTos

Social

  • Face­book
  • Twit­ter
  • Lin­ke­dIn
  • Xing
  • Insta­gram

Foo­ter bottom

  • Impres­sum
  • Daten­schutz
  • AGBs
© 2025 PLUTEX • Erstellt mit GeneratePress