DEVOPS

OTel(l) Me How to: Ping - ICMP mit dem Splunk OpenTelemetry Collector

Von vielen Kunden haben wir die Frage gestellt bekommen, wie man Verbindungen mit Hilfe des Internet Control Message Protocol,  aka ping, und dem OpenTelemetry Collector prüft. “Wozu?!” mögen manche von euch fragen. “Die 90er haben angerufen und wollen ihr ICMP zurück.” höre ich ein paar andere schon sagen – aber ein Grund kann z. B. sein, dass man dadurch auf das Erstellen und die Pflege umfangreicher Scripte verzichten kann. Und das kann initial gut und gerne einen ganzen Arbeitstag an Zeit einsparen (und dauerhaft die Nerven schonen).

Der umgangssprachliche ping kann uns einiges über den Zustand unserer Infrastruktur verraten. Gerade wenn wir nicht alle Details über die Komponenten zwischen zwei Endpunkten kennen. Mithilfe des ping können wir eine Einschätzung zur Lage vornehmen und die häufige Aussage “Das ist so langsam…” qualifizieren. Die bei einer Einzelmessung anfallenden Datenmengen sind sehr gering und die Erkenntnisse bei der Durchführung mittel- bis langfristiger Messungen helfen frühzeitig temporäre Degradierungen zu erkennen und zu alarmieren. 

Und so gehen wir vor:

Zuerst installiert ihr den Splunk OpenTelemetry Collector (z. B. über Github hier). Die Anleitung für das jeweilige Betriebssystem findet ihr hier.

Damit habt ihr auch schon alle Komponenten, die für das Einsammeln von Latenz, Droprate und Standardabweichung eines ping benötigt werden. 

Nun müsst ihr nur noch in der agent_config.yaml (üblicherweise zu finden unter Linux: /etc/otel/collector/) beschreiben, welche Hosts anzupingen sind. Das macht man mit folgenden Eintrag im Bereich der receivers: 

receivers:
  smartagent/myping:
    type: collectd/custom
    template: |
      LoadPlugin ping
      <Plugin ping>
        Host "10.202.11.101"
      </Plugin>
  ...

Mit den hier auf collectd.org hinterlegten Informationen kann der ping noch detaillierter konfiguriert werden. Diese Ergänzungen müsst ihr dann in das Plugin Tag eintragen, an die Stelle wo auch der Host konfiguriert wurde. 

Erklärung: 

Wir haben hier einen “Receiver” im OTel Collector erstellt. Dieser erhält Daten vom smartagent und heißt myping. Der Name hinter dem smartagent kann fast beliebig gewählt werden. Den smartagent konfigurieren wir über den OTel Collector so, dass er collectd verwenden soll. Und dem collectd geben wir ebenso mit, dass es das ping Plugin laden muss. Alle Komponenten (smartagent, collectd, ping Plugin) wurden mit der Installation des Splunk OpenTelemetry Collectors mitgeliefert.

Hinweis: Warum so viele Komponenten? 

Solange die oben beschriebenen Funktionalitäten nicht im standard OpenTelemetry Collector zur Verfügung stehen, liefern wir diese über die Splunk-eigene Distribution, den Splunk OpenTelemetry Collector, mit. 

Zum Schluss muss man den neu geschaffenen Receiver noch in die metrics Pipeline unter service einbinden. Dies geschieht in der Konfigurationsdatei agent_config.yaml etwas weiter unten:

service:
  ...
  pipelines:
    ...
    metrics:
      receivers: [..., smartagent/myping]
...

Ihr könnt so viele ping-Receiver anlegen, wie ihr benötigt. Achtet aber auf jeden Fall auf die richtige Benennung und die richtige Referenzierung.

Die Metriken werden nach der Standardinstallation des Splunk OpenTelemetry Collectors an Splunk Infrastructure Monitoring (IM) in die Splunk Observability Cloud geliefert. Ihr findet die Metriken sehr einfach über den Metric Finder (linke Navigation) wenn ihr im Suchfeld nach dem Stichwort “ping” sucht. Im Ergebnis tauchen dann die Metriken ping.[HOST] (Latenz), ping_droprate.[HOST] und ping_stddev.[HOST] (Standardabweichung) auf. Der HOST bezieht sich dabei auf das Ziel das wir unter dem Eintrag Host in der Konfigurationsdatei angegeben haben. Wenn ihr wissen möchtet, welcher Host die Quelle des Ping war, findet ihr diese Information im Tag host an der Metrik. Damit kann der Quellhost als Dimension zur Auswertung der Metrik verwendet werden. Zum Beispiel wenn ihr ein Ziel von unterschiedlichen Quellen aus anpingen möchtet. 

 ICMP mit dem Splunk Open Telemetry Collector

Im Weiteren können diese Metriken ganz normal auf Dashboards visualisiert und auch für die Alarmierung durch einen Detector über Outlier Detection oder Historical Anomaly verwendet werden. 

 ICMP mit dem Splunk Open Telemetry Collector

Mit diesem Vorgehen könnt ihr euch sehr schnell und einfach ein eigenes Netzwerk von Ping-Agenten auf Open Source Basis aufbauen. 

Troubleshooting Linux:

Sollte nichts in eurer Splunk Observability Cloud ankommen bitte in den Logs (Linux: sudo journalctl -u splunk-otel-collector -n 100 -f) prüfen, ob der ping auch ausgeführt werden konnte. Wenn ihr da eine Fehlermeldung seht, die was von "operation not permitted" erzählt, bitte noch folgendes ausführen:

  1. getcap /usr/bin/ping
    (output:/usr/bin/ping = cap_net_admin,cap_net_raw+p)
  2. sudo setcap cap_net_raw+ep /usr/lib/splunk-otel-collector/agent-bundle/bin/collectd
  3. restart service. 

Wenn ihr mehr Informationen möchtet oder an anderen Beispielen interessiert seid, kommt gerne auf uns zu

Andre ist im Herzen Entwickler. Seit mehr als zwei Jahren arbeitet er bei Splunk. Vorher hat er sich 5 Jahre lang beim Kunden mit den Produkten beschäftigt und dort Kollegen geholfen mit Ihrem Datenchaos zurecht zukommen. Auf Konferenzen hat er über die Jahre auch immer wieder seine Erfahrung geteilt und neue Vorgehensweisen gechallenged.