Sampler. Konsolen-Dienstprogramm zur Visualisierung des Ergebnisses von Shell-Befehlen

Im Allgemeinen können Sie mit dem Shell-Befehl jede Metrik abrufen, ohne Code oder Integrationen zu schreiben. In der Konsole sollte es also ein einfaches und bequemes Werkzeug zur Visualisierung geben.


Sampler


Das Überwachen der Statusänderung in der Datenbank, das Überwachen der Größe von Warteschlangen, die Telemetrie von Remoteservern, das Ausführen von Skriptbereitstellungen und das Empfangen von Benachrichtigungen nach Abschluss werden in einer Minute mit einer einfachen YAML-Datei konfiguriert.


Der Code ist auf Github verfügbar . Installationsanweisungen - für Linux, MacOS und (experimentelles) Windows.


Warum brauche ich das, wenn es komplette Überwachungssysteme gibt?


Ich muss sofort sagen, dass dies in keiner Weise eine Alternative zu vollständigen Dashboards und Überwachung ist. Der Vergleich von Sampler mit Prometheus + Grafana entspricht dem Vergleich von tail und less mit Elastic Stack oder Splunk .


Wenn Sie jedoch die Produktionsüberwachung für Ihre Aufgabe erhöhen und konfigurieren - wie eine Kanone auf Spatzen -, ist Sampler möglicherweise die Antwort auf die Frage. Es wurde als Tool zum Prototyping, Demonstrieren oder einfachen Beobachten von Metriken auf einem Gebietsschema und einem Remote-Server konzipiert.


Also muss es auf allen Servern installiert werden?


Nein, Sampler kann lokal ausgeführt werden, aber Metriken können von vielen Remotecomputern übernommen werden. Jede Komponente im Dashboard verfügt über einen init Bereich, in den Sie über ssh eingeben können (oder eine andere Aktion ssh , um die interactive shell - eine Verbindung zur Datenbank herstellen, eine Verbindung über JMX herstellen, sich bei der API anmelden usw.)


Komponentenansichten und Konfigurationsbeispiele


Die Konfigurationsbeispiele zeigen Befehle für macOS. Viele funktionieren unter Linux unverändert, einige müssen jedoch angepasst werden.


Runchart




Konfiguration
 runcharts: - title: Search engine response time rate-ms: 500 # sampling rate, default = 1000 scale: 2 # number of digits after sample decimal point, default = 1 legend: enabled: true # enables item labels, default = true details: false # enables item statistics: cur/min/max/dlt, default = true items: - label: GOOGLE sample: curl -o /dev/null -s -w '%{time_total}' https://www.google.com - label: YAHOO sample: curl -o /dev/null -s -w '%{time_total}' https://search.yahoo.com - label: BING sample: curl -o /dev/null -s -w '%{time_total}' https://www.bing.com 

Sparkline




Konfiguration
 sparklines: - title: CPU usage rate-ms: 200 scale: 0 sample: ps -A -o %cpu | awk '{s+=$1} END {print s}' - title: Free memory pages rate-ms: 200 scale: 0 sample: memory_pressure | grep 'Pages free' | awk '{print $3}' 

Barchart




Konfiguration
 barcharts: - title: Local network activity rate-ms: 500 # sampling rate, default = 1000 scale: 0 # number of digits after sample decimal point, default = 1 items: - label: UDP bytes in sample: nettop -J bytes_in -l 1 -m udp | awk '{sum += $4} END {print sum}' - label: UDP bytes out sample: nettop -J bytes_out -l 1 -m udp | awk '{sum += $4} END {print sum}' - label: TCP bytes in sample: nettop -J bytes_in -l 1 -m tcp | awk '{sum += $4} END {print sum}' - label: TCP bytes out sample: nettop -J bytes_out -l 1 -m tcp | awk '{sum += $4} END {print sum}' 

Messgerät




Konfiguration
 gauges: - title: Minute progress rate-ms: 500 # sampling rate, default = 1000 scale: 2 # number of digits after sample decimal point, default = 1 percent-only: false # toggle display of the current value, default = false color: 178 # 8-bit color number, default one is chosen from a pre-defined palette cur: sample: date +%S # sample script for current value max: sample: echo 60 # sample script for max value min: sample: echo 0 # sample script for min value - title: Year progress cur: sample: date +%j max: sample: echo 365 min: sample: echo 0 

Textfeld




Konfiguration
 textboxes: - title: Local weather rate-ms: 10000 # sampling rate, default = 1000 sample: curl wttr.in?0ATQF border: false # border around the item, default = true color: 178 # 8-bit color number, default is white - title: Docker containers stats rate-ms: 500 sample: docker stats --no-stream --format "table {{.Name}}\t{{.CPUPerc}}\t{{.MemUsage}}\t{{.PIDs}}" 

Asciibox




Konfiguration
 asciiboxes: - title: UTC time rate-ms: 500 # sampling rate, default = 1000 font: 3d # font type, default = 2d border: false # border around the item, default = true color: 43 # 8-bit color number, default is white sample: env TZ=UTC date +%r 

Zusätzliche Funktionalität


Auslöser


Mit Triggern können Sie zusätzliche Aktionen auslösen, wenn der gemessene Wert die angegebene Bedingung erfüllt. Sowohl die Bedingung als auch die Reaktion sind Shell-Befehle, in die die Variablen $label , $cur und $prev werden. Zunächst wurden Trigger für Warnmeldungen konzipiert (akustische und visuelle Benachrichtigungen sind integriert). Mit der Option Ihres eigenen Skripts, auf das Auslösen eines Auslösers zu reagieren, können Sie dessen Aktion nach Ihren Wünschen anpassen (z. B. eine Benachrichtigung mit Pushover an Ihr Telefon senden).


Das folgende Beispiel zeigt die Konfiguration der Trigger. Wenn die Latenz der Suchmaschinenantwort 0,3 Sekunden überschreitet, blinkt der Sampler die Standard-Terminalglocke, verliert den NASA-Quindarton, zeigt eine visuelle Benachrichtigung in der Grafik an und führt ein Skript aus, das in diesem Fall den gemessenen Latenzwert in Sprache spricht:


 runcharts: - title: SEARCH ENGINE RESPONSE TIME (sec) rate-ms: 200 items: - label: GOOGLE sample: curl -o /dev/null -s -w '%{time_total}' https://www.google.com - label: YAHOO sample: curl -o /dev/null -s -w '%{time_total}' https://search.yahoo.com triggers: - title: Latency threshold exceeded condition: echo "$prev < 0.3 && $cur > 0.3" |bc -l #  "1"  TRUE actions: terminal-bell: true # default = false sound: true # NASA quindar tone, default = false visual: true # default = false script: 'say alert: ${label} latency exceeded ${cur} second' 

Interaktive Shell


Wenn Sie die interaktive Shell eingeben müssen, bevor Sie mit dem Sampling beginnen (für eine einmalige Verbindung zur Datenbank, SSH-Anmeldung, Verbindung zu JMX usw.), können Sie ein init script angeben, das beim Start einmal ausgeführt wird. Ein Beispiel für das Verbinden und Abrufen von mongoDB:


 textboxes: - title: MongoDB polling rate-ms: 500 init: mongo --quiet --host=localhost test #    sample: Date.now(); #    mongo shell transform: echo result = $sample #         

Darüber hinaus werden PTY-Modus- und Multistep-Init-Skripte unterstützt .


Variablen


Wenn die Konfiguration häufig verwendete Teile enthält, die Sie nicht wiederholen möchten, können Sie sie in Variablen einfügen und an einer beliebigen Stelle in der YML-Datei verwenden.


In der Praxis


Als Backend-Programmierer muss ich oft debuggen, prototypisieren und messen. Daher ist regelmäßig eine schnelle Visualisierung und Überwachung erforderlich. Jedes Mal etwas Benutzerdefiniertes zu schreiben ist unangemessen lang, aber wenn der Anpassungsprozess schnell und (mehr oder weniger) bequem wäre, könnte eine solche Visualisierung Zeit sparen und Probleme lösen. Ich konnte so etwas nicht finden, daher wurde beschlossen, ein solches Tool selbst zu schreiben und es so universell wie möglich zu konfigurieren.


Zum ersten Mal für den beabsichtigten Zweck begann ich damit den Mechanismus der Gruppierung und Akkumulation von Daten zu debuggen, wodurch sich der Status von "Ereignissen" im Speicher schnell ändert. Das Lesen des Systemstatus aus den Protokollen oder das Abfragen einzelner Zähler für jeden Status hilft Ihnen nicht dabei, schnell zu navigieren und zu verstehen, was was ist, aber ein Blick auf Sampler löst dieses Problem vollständig -




Für alles, was ich selbst benutze, habe ich eine Sammlung von "Rezepten" vorbereitet - Mook-Konfigurationen, die Sie kopieren und sofort mit der Anpassung an Ihre Aufgaben beginnen können


  • Datenbankverbindungen: MySQL, PostgreSQL, MongoDB, Neo4J
  • Kafka
  • Docker
  • Ssh
  • Jmx

Diese Liste wird ergänzt (und Ihr Beitrag ist sehr willkommen). In der Zwischenzeit haben die Benutzer bei Problemen begonnen , ihre Konfigurationen für Dashboards wie Kubernetes, Github und mehr zu teilen .


Das ist alles, habr. Ich würde mich freuen, wenn jemand nützlich wäre.

Source: https://habr.com/ru/post/de463441/


All Articles