Um die Leistung von Servern aus der Ferne zu überwachen, verwenden Fachleute spezielle Softwaresysteme wie
Zabbix oder
Icinga . Wenn Sie jedoch ein unerfahrener Eigentümer oder Administrator einer oder zweier Websites mit geringer Last sind, sind keine großen Überwachungssysteme erforderlich. Der Hauptparameter ist, ob die Site Benutzer schnell bedient. Daher können Sie die Arbeit der Site mit einem einfachen Programm von jedem mit dem Internet verbundenen Computer aus überwachen.

Schreiben wir jetzt dieses Skript - die einfachste Überwachung der Verfügbarkeit und Geschwindigkeit der Website. Dieses Programm kann auf einem Heimcomputer, einem Smartphone usw. ausgeführt werden. Das Programm hat nur zwei Funktionen:
- zeigt auf dem Bildschirm die Zeit an, in der Ihre Website Benutzerseiten bereitstellt.
- Bei langsamen Antworten der Site oder Fehlern schreibt das Programm Daten in eine Datei (ein „Protokoll“ oder eine Protokolldatei). Diese Daten sollten von Zeit zu Zeit überprüft werden, um Probleme zu beheben, wenn sie gerade erst beginnen. Daher werden wir darauf achten, diese Protokolle in einer übersichtlichen, bequemen Form für eine schnelle Anzeige aufzuzeichnen.
Ich werde jeden Schritt im Detail beschreiben, damit selbst Anfänger, die mit dem Schreiben von Batch-Dateien (bat und cmd unter DOS und Windows, sh auf Systemen wie UNIX) nur wenig vertraut sind, dies problemlos herausfinden und das Skript an seine Bedürfnisse anpassen können.
Ich bitte Sie jedoch, dieses Skript nicht gedankenlos zu verwenden, da es bei falscher Verwendung möglicherweise nicht zu den richtigen Ergebnissen führt und außerdem viel Verkehr verschlingt .
Ich werde ein Skript für ein Betriebssystem wie Linux und dessen Verwendung auf einem Heimcomputer beschreiben. Nach den gleichen Prinzipien kann dies auf anderen Plattformen erfolgen. Und für diejenigen, die nur die Möglichkeiten von Linux betrachten, mag ein weiteres Beispiel interessant sein, was für ein einfaches und leistungsfähiges Werkzeug seine Skripte sind.
1. Organisation zuerst
Wir werden einen separaten Ordner für dieses Programm erstellen und 3 Dateien darin erstellen. Zum Beispiel habe ich diesen Ordner / home / me / Progs / iNet / monitor (hier ist me der Name meines Benutzers, Progs / iNet ist mein Ordner für Programme im Zusammenhang mit dem Internet, und monitor ist der Name dieses Programms aus dem Wort monitor, d. H. Da ich der einzige Benutzer dieses Computers bin, speichere ich solche Dateien in meinen persönlichen Ordnern (/ home) in einem separaten Abschnitt der Festplatte, sodass ich sie bei der Neuinstallation des Systems speichern kann. In diesem Ordner befinden sich Dateien:
- README.txt - hier ist eine Beschreibung (im Falle von Sklerose): welche Art von Programm, Hintergrundinformationen dazu usw.
- mon.sh - Es wird ein Programm geben, das die Site abfragt.
- server.log - hier werden Site-Statusanzeigen aufgezeichnet. In unserem Fall ist dies einfach das Datum, die Uhrzeit und die Dauer der Antwort der Site (plus zusätzliche Informationen, wenn der Server mit unserer Anfrage mit einem Fehler antwortet).
(Um das Bearbeiten und Wiederherstellen von Dateien zu vereinfachen, können Sie diesen Ordner in das Git-Versionskontrollsystem aufnehmen. Hier werde ich ihn nicht beschreiben.)
2. Beharrlich und entspannt
Wir werden die Datei mon.sh mit einem regelmäßigen kleinen Intervall ausführen, zum Beispiel 60 Sekunden. Ich habe das vom Betriebssystem bereitgestellte Standardtool verwendet (genauer gesagt die Desktop-Umgebung).
Meine Desktop-Umgebung ist Xfce. Dies ist eine der beliebtesten Optionen für Linux. Ich mag Xfce, weil Sie damit die gesamte Umgebung fast vollständig anpassen können - ganz nach Ihren Wünschen. Gleichzeitig ist Xfce etwas kompakter und schneller als zwei andere bekannte Systeme - Gnome und KDE. (Andere Optionen sind ebenfalls interessant - zum Beispiel ist die LXDE-Umgebung noch schneller und einfacher als Xfce, aber bisher nicht so reich an Funktionen).
Das Tool, das wir im Fall von Xfce benötigen, ist ein Plug-In für das Arbeitsfeld Generic Monitor. Normalerweise ist es bereits installiert, aber wenn nicht, kann der Installer es leicht finden: "Genmon" (Beschreibung:
xfce4-genmon-plugin ). Dies ist ein Plugin, das dem Panel hinzugefügt und in den Einstellungen festgelegt werden kann: (1) der auszuführende Befehl und (2) die Häufigkeit seiner Ausführung in Sekunden. In meinem Fall der Befehl:
/home/me/Progs/iNet/monitor/mon.sh
(oder gleichwertig ~ / Progs / iNet / monitor / mon.sh).

3. Wenn das Programm noch nicht vorhanden ist, liegen bereits Fehler vor
Wenn Sie nun alle diese Schritte ausgeführt haben - Dateien erstellt und das Plug-In im Bedienfeld gestartet -, sehen Sie das Ergebnis des Startens unseres Programms dort (Fehlermeldung: Datei mon.sh ist kein Programm). Um die Datei ausführbar zu machen, gehen Sie zu unserem Ordner und legen Sie die Berechtigung zum Ausführen fest -
- oder Dateimanager: Eigenschaften - Berechtigungen - Diese Datei kann als Programm ausgeführt werden.
- oder ein Befehl vom Terminal: chmod 755 mon.sh
Und in die Datei selbst schreiben wir die ersten Zeilen:
Anstelle von "example.ru" ersetzen Sie den Namen Ihrer Site, deren Status Sie beobachten werden. Und wenn es auf http funktioniert, setzen Sie http anstelle von https. Die Zeile #! / Bin / bash bedeutet, dass dies ein Skript ist, das vom Bash-Programm gestartet werden soll (
bash ist wahrscheinlich das häufigste Skript zum Ausführen von Skripten unter Linux). Um eine andere Shell zu bearbeiten, wird diese anstelle von Bash angezeigt. Die restlichen Zeilen mit einem scharfen am Anfang sind Kommentare. Die erste Codezeile selbst lautet
info = $ () und in diesen Klammern steht der Befehl curl mit Parametern. Eine solche Konstruktion - etwas = $ (etwas) - bedeutet "den Befehl in Klammern ausführen und das Ergebnis der Variablen auf der linken Seite zuweisen". In diesem Fall habe ich die Variable "info" genannt. Dieser Befehl in Klammern - curl (im Jargon, der von einigen als "Kurl" bezeichnet wird) - sendet eine Anfrage an das Netzwerk unter der angegebenen Adresse und gibt die Serverantwort an uns zurück. (Mein Bekannter erklärte: "Wie der Kran grunzt - und eine Antwort von einem anderen Kran am Himmel erhält.") Betrachten Sie die Optionen:
curl -I -o /dev/stdout -w '%{time_total}' --url https://example.ru/ -m 9 -s
-Ich bedeutet, dass wir nicht die gesamte Seite anfordern, sondern nur die "HTTP-Header". Jedes Mal benötigen wir nicht den gesamten Seitentext, um sicherzustellen, dass die Website funktioniert. Da wir die Site häufig überprüfen, ist es wichtig, die Größe der übertragenen Daten so klein wie möglich zu halten. Dies spart sowohl Verkehr als auch Strom und die Belastung des Servers - und der Tierwelt.
Achten Sie übrigens darauf, wie viel freien Datenverkehr Sie (nicht pro Monat verwendet) auf dem Hosting haben. Unten sehen Sie, wie viele Daten übertragen werden, und Sie können berechnen, ob Sie über genügend Reserven verfügen. Wenn überhaupt, kann der Überprüfungszeitraum des Standorts auf 5, 10 oder sogar 30-60 Minuten erhöht werden. Obwohl in diesem Fall das Bild nicht so vollständig ist - und kleinere Unterbrechungen möglicherweise unbemerkt bleiben; Im Allgemeinen ist es jedoch bei der Überwachung eines Standorts wichtiger, langfristige Probleme zu erkennen als eine einzelne Unterbrechung. Welchen Datenverkehr können Sie sich auf dem anrufenden Computer leisten? In meinem Fall - einem Desktop-PC mit unbegrenztem Datenverkehr - ist dies nicht so wichtig. Für ein mobiles Gerät oder einen Tarif mit Grenzwerten lohnt es sich jedoch, die Inspektionsintervalle zu berechnen und möglicherweise zu verlängern.
4. Schritt folgt Schritt mit Ausnahme des ersten Schritts
Gehen wir weiter:
-o / dev / stdout bedeutet "Senden Sie die von Kurl vom Server empfangene Antwort an diese und jene Datei". In diesem Fall handelt es sich nicht um eine Datei auf der Festplatte, sondern um / dev / stdout - Standardausgabegerät. Normalerweise ist das "Standardausgabegerät" unser Bildschirm, auf dem wir die Ergebnisse des Programms sehen können. Im Skript leiten wir diese „Standardausgabe“ jedoch häufig zur weiteren Verarbeitung (jetzt - speichern Sie sie in der Info-Variablen). Und dann senden wir meistens entweder die Ergebnisse der Teams an Variablen oder geben sie an die nächsten Teams in einer Kette weiter. Verwenden Sie zum Erstellen von Ketten aus Befehlen den Pipe-Operator ("Pipe"), der als vertikaler Balken ("|") angezeigt wird.
-w '% {time_total} eyayu' : hier bedeutet -w "formatieren und solche und solche zusätzlichen Informationen an ein Standardausgabegerät weitergeben". Insbesondere interessiert uns time_total - wie viel Zeit die Anfrage-Antwort-Übertragung zwischen uns und dem Server in Anspruch genommen hat. Sie wissen wahrscheinlich, dass es einen einfacheren Befehl gibt, Ping, um schnell einen Server anzufordern und eine Antwort von ihm zu erhalten, Pong. Ping überprüft jedoch nur, ob der Hosting-Server aktiv ist, und das Signal geht so lange hin und her. Dies zeigt die maximale Zugriffsgeschwindigkeit an, sagt jedoch noch nichts darüber aus, wie schnell die Website echten Inhalt produziert. Ping kann schnell funktionieren, und gleichzeitig kann die Site langsamer oder gar nicht funktionieren - aufgrund hoher Auslastung oder interner Probleme. Daher verwenden wir genau Kurla und erhalten die tatsächliche Zeit, zu der der Server unsere Inhalte anzeigt.
(Anhand dieses Parameters können Sie beurteilen, ob der Server für Ihre Aufgaben effizient arbeitet und ob die typische Antwortzeit für Benutzer günstig ist. Gibt es keine Probleme? Beispielsweise haben sich meine Websites auf vielen Hosting-Websites im Laufe der Zeit verlangsamt, und ich musste nach einem anderen Hosting suchen.)
Haben Sie die seltsamen Buchstaben "eyu" nach {time_total} bemerkt? Ich habe sie als eindeutige Bezeichnung hinzugefügt, die wahrscheinlich nicht in den vom Server an uns gesendeten Headern enthalten ist (obwohl davon ausgegangen wird, dass die Benutzer Ihrer Programme schlecht sind und nicht und der Weg in den Abgrund. Tun Sie dies nicht! .. Oder wenn Sie dies tun , schäme dich wenigstens für dich). Mit diesem Label (ich hoffe) können wir dann einfach die Informationen, die wir benötigen, aus einer ganzen Reihe von Zeilen in der Info-Variablen ziehen.
Curl -w '% {time_total} ehayu' (mit den verbleibenden korrekten Parametern) gibt uns also etwas wie:
0,215238eyayu
Dies ist die Anzahl der Sekunden, die für den Zugriff auf die Website benötigt wurden, sowie unser Etikett. (Zusätzlich zu diesem Parameter interessiert uns in der Info-Variablen hauptsächlich der „Statuscode“ - der Statuscode oder einfach der Server-Antwortcode. Wenn der Server die angeforderte Datei ausgibt, lautet der Code normalerweise „200“. Wenn die Seite nicht gefunden wird Dies ist der berühmte 404. Wenn auf dem Server Fehler auftreten, sind es meistens 500 mit etwas).

5. Kreativität - der Vater der Selbstprüfung
Die verbleibenden Parameter unserer Locke sind wie folgt:
--url https://example.ru/ -m 9 -s
was es bedeutet: eine solche Adresse anzufordern; Die maximale Antwortzeit beträgt 9 Sekunden (Sie können weniger festlegen, da ein seltener Benutzer so lange auf eine Antwort von der Site wartet, dass er schnell feststellt, dass die Site nicht funktioniert). Und "-s" bedeutet still, das heißt, Curl sagt uns keine unnötigen Details.
Übrigens ist auf dem Desktop-Panel normalerweise nicht viel Platz vorhanden. Zum Debuggen eines Skripts ist es daher besser, es vom Terminal aus auszuführen (in seinem Ordner mit dem Befehl ./mon.sh). Und für unser Panel-Plugin machen wir eine lange Pause zwischen den Starts des Befehls - beispielsweise 3600 Sekunden.
Zum Debuggen können wir diese Locke ohne Rahmenklammern ausführen und sehen, was sie erzeugt. (Daraus und berechnen Sie den Verkehrsverbrauch). Wir werden hauptsächlich eine Reihe von HTTP-Headern sehen, wie zum Beispiel:
HTTP/1.1 302 Found Server: QRATOR Date: Sun, 11 Feb 2019 08:06:57 GMT Content-Type: text/html; charset=UTF-8 Connection: keep-alive Keep-Alive: timeout=15 X-Powered-By: PHP/7.2.14-1+ubuntu16.04.1+deb.sury.org+1 Location: https://habr.com/ru/ X-Frame-Options: SAMEORIGIN X-Content-Type-Options: nosniff Strict-Transport-Security: max-age=63072000; includeSubDomains; preload X-Cache-Status: HIT 0.033113
In der ersten Zeile sehen wir "HTTP / 1.1 302 gefunden" - was bedeutet: Das Datenübertragungsprotokoll ist "HTTP / 1.1", der Server-Antwortcode ist "302 gefunden". Wenn Sie eine andere Seite anfordern, kann dies der Code "301 dauerhaft verschoben" usw. sein. In einem weiteren Beispiel lautet die normale Antwort meines Servers "HTTP / 2 200". Wenn Ihr Server normalerweise anders reagiert, ersetzen Sie ihn durch diese Antwort anstelle von "HTTP / 2 200" in diesem Skript.
Wie wir sehen, gibt Kurl in der letzten Zeile an, in wie vielen Sekunden wir die Serverantwort mit unserem zugewiesenen Etikett erhalten haben.
Interessant: Wir können die Site so konfigurieren, dass sie über unsere Anforderungen berichtet (und nur über diese!). Zusätzliche Informationen zu ihrem Status - zum Beispiel im "hausgemachten" HTTP-Header. Angenommen, die Prozessoren der Site sind ausgelastet, wie viel freier Speicher und Speicherplatz vorhanden sind und wie schnell die Datenbank arbeitet. (Dazu muss die Site natürlich dynamisch sein, dh Anforderungen müssen vom Programm verarbeitet werden - in PHP, Node.JS usw. Eine andere Option ist die Verwendung spezieller Software auf dem Server). Aber vielleicht brauchen wir diese Details noch nicht wirklich. Der Zweck dieses Skripts besteht lediglich darin, die Gesamtleistung der Site regelmäßig zu überwachen. Bei Problemen werden wir uns bereits auf andere Weise mit der Diagnose befassen. Daher schreiben wir jetzt das einfachste Skript, das für jede Site funktioniert, auch für ein statisches, und ohne zusätzliche Einstellungen auf dem Server. Falls gewünscht, können Sie in Zukunft die Funktionen des Skripts erweitern. Machen Sie in der Zwischenzeit die Basis.
Der String
errr = $ (echo $?) Bedeutet : Schreiben Sie das Ergebnis des Befehls "echo $?" In die Variable errr. Der Befehl echo bedeutet, dass Text auf dem Standardausgabegerät (stdout) und die Zeichen "$?" - Dies ist der aktuelle Fehlercode (vom vorherigen Befehl übrig). Wenn unsere Locke den Server plötzlich nicht mehr erreichen kann, wird ein Fehlercode ungleich Null ausgegeben, und wir werden dies durch Überprüfen der errr-Variablen herausfinden.
6. Zweckmäßigkeit
Hier möchte ich einen kleinen Exkurs von technischen Fragen machen, um das Lesen des Textes interessanter zu machen. (Wenn Sie nicht einverstanden sind, überspringen Sie drei Absätze). Ich werde sagen, dass jede menschliche Aktivität auf ihre eigene Weise angemessen ist. Selbst wenn eine Person absichtlich ihre Stirn gegen eine Wand schlägt (oder auf dem Boden ... auf der Tastatur ...), hat dies seine eigene Zweckmäßigkeit. Zum Beispiel bietet es einen Ausgang für emotionale Energie - vielleicht nicht auf die „beste“ Weise, aber wie es kann. (Ja, und das Konzept des "Besten" ist aus der Sicht
dieses Augenblicks an diesem Ort sinnlos - weil das Beste und das Schlimmste nur im Vergleich zu etwas anderem möglich sind).
Ich schreibe jetzt diesen Text, anstatt scheinbar wichtigere Fälle für mich - warum? Erstens, um Bilanz zu ziehen, die Regale zu überprüfen und intern zu sortieren, die ich in diesen zwei Tagen beim Schreiben von Skripten gelernt habe ... Entfernen Sie sie aus dem RAM und speichern Sie sie. Zweitens habe ich auf diese Weise eine kleine Pause ... Drittens hoffe ich, dass diese gekaute Erklärung jemand anderem (und mir selbst, vielleicht eines Tages) nützlich sein wird. Wie, es spielt keine Rolle, ob die beste, aber eindeutige Erinnerung zum Thema Skripte und Serveranforderungen.
Vielleicht korrigiert mich jemand in etwas und das Ergebnis wird noch besser. Jemand wird nützliche Informationen erhalten. Ist es angemessen? Vielleicht ... das kann ich jetzt und mache es. Morgen werde ich vielleicht aufwachen und die aktuellen Aktionen neu bewerten ... aber diese Neubewertung wird auch etwas Nützliches für das spätere Leben liefern.
Nach Erfüllung der Anfrage haben wir also zwei Daten:
- Als Hauptinformationsblock vom Server (wenn natürlich die Serverantwort kam) haben wir ihn in die Info-Variable geschrieben.
- Fehlercode für den Curl-Befehl (0, wenn keine Fehler vorliegen) - in die errr-Variable geschrieben.
Gerade weil beide Summen - sowohl Informationen als auch ein Fehlercode - benötigt werden, habe ich sie in Variablen geschrieben und Kurls Summen nicht sofort über die Pipe an andere Teams weitergegeben. Aber jetzt in diesem Skript ist es Zeit, die Rohre zu besteigen:
code=$(echo "$info" | grep HTTP | grep -v 'HTTP/2 200') date=$(echo "$info" | grep -i 'date:') dlay=$(echo "$info" | grep | sed -e 's///')
In jede dieser Zeilen schreiben wir eine andere Variable - wir speichern die Ergebnisse der Ausführung von Befehlen. Und in jedem Fall ist es nicht ein Team, sondern eine Kette; Der erste Link ist überall gleich:
echo "$ info" - Gibt den Stream von Informationen, den wir gespeichert haben und der von curl empfangen wurde, zum Stream des Standard-Ausgabegeräts (stdout) zurück. Weiter unten in der Pipe wird dieser Stream an den Befehl grep übergeben. Grep wählt aus allen Zeilen nur diejenigen aus, in denen es dem Muster entspricht. (Die Option -i bedeutet "Groß- und Kleinschreibung wird nicht berücksichtigt"). Wie Sie sehen können, wählen wir im ersten Fall die Zeile mit "HTTP" aus. Diese Zeile, die aus dem Haufen der anderen gezogen wird, wird über die Pipe an den Befehl
grep -v 'HTTP / 2 200' übergeben . Hier ist die
Option -v das Gegenteil der Option
-e . Sie filtert die Linien heraus, in denen sich ein solches Muster befindet. Insgesamt wird in der Codevariablen eine Zeile mit dem Serverantwortcode (z. B. "HTTP / 1.1 302 gefunden") angezeigt, jedoch nur, wenn es sich nicht um "HTTP / 2 200" handelt. Daher filtere ich die Zeilen heraus, die meine Site im Normalfall sendet, und speichere nur die "abnormalen" Antworten. (Wenn Sie eine normale Serverantwort haben, ersetzen Sie diese dort).
In ähnlicher Weise schreiben wir in das variable Datum die Zeile, in die der Server sein aktuelles Datum und seine aktuelle Uhrzeit ausgegeben hat. Dies ist so etwas wie "
Datum: So, 11. Februar 2019, 08:06:57 GMT " (normalerweise in der GMT-Zeitzone, auch bekannt als UTC). Wir müssen das Datum (aber nur einmal am Tag!) In unsere Protokolldatei ("Serverstatusprotokoll") - server.log schreiben. Gleichzeitig werden wir diese Zeit auf dem Bildschirm anzeigen. Sie können von Ihrem Computer aus eine Datums- und Uhrzeitangabe in das Protokoll schreiben, diese werden jedoch zur Vereinfachung verwendet, da der Server sie trotzdem gesendet hat.
Ähnlich verhält es sich mit unserer dritten Variablen, dlay (vom englischen Wort delay - delay). Wir wählen die Zeile in unserem Ausschreibungsetikett "eeyu" aus, in der wir die Wartezeit auf eine Antwort vom Server beibehalten haben. Wir entfernen dieses Etikett, das nicht mehr benötigt wird, mit dem Befehl
sed - und speichern das Ergebnis.
Wenn wir nun diese Variablen zur Überprüfung drucken, indem wir beispielsweise die Zeilen zu unserem Skript hinzufügen:
printf 'errr: %s\n' "$errr" printf 'code: %s\n' "$code" printf '%s\n' "$date" printf 'dlay: %s\n' "$dlay"
Sie sollten etwas bekommen wie:
errr: 0 code: date: Mon, 11 Feb 2019 12:46:18 GMT dlay: 0.236549
Gesamt: Der Fehlercode von curl ist Null (was bedeutet, dass er einwandfrei funktioniert hat). Serverstatuscode - nicht aufgezeichnet (wie üblich). Datum und Uhrzeit. Die Dauer der Antwort. Es bleibt, um das, was Sie brauchen, korrekt auf dem Bildschirm anzuzeigen und gegebenenfalls in eine Datei zu schreiben.
Das ist das Interessanteste: Was, unter welchen Bedingungen und wie aufnehmen?
7. Schwierige Schlussfolgerungen
Um Sie nicht mit weiteren Details zu langweilen, werde ich es Ihnen kurz sagen (und es gibt genügend
gute Verzeichnisse zu all diesen Befehlen im Internet). Kürze ist übrigens eines der Hauptziele, die wir beim Schreiben in dieses Protokoll erreichen werden. Dann ist es bequem zum Anzeigen und nimmt nie viel Speicherplatz ein (im Gegensatz zu anderen Protokollen, die in Megabyte pro Tag wachsen).
Erstens: Wir stellen sicher, dass das Datum nur einmal und nicht in jeder Zeile in das Protokoll geschrieben wird. Wählen Sie dazu aus unserem variablen Datum individuell das aktuelle Datum (aktuelle) und die aktuelle Uhrzeit (Uhrzeit) aus:
curr=$(echo "$date" | sed -e 's/\(20[0-9][0-9]\).*$/\1/') time=$(echo "$date" | sed -e 's/^.*\ \([0-9][0-9]:.*\)\ GMT\r$/\1/')
Außerdem betrachten wir Zeilen mit Datumsangaben aus der Protokolldatei und nehmen das letzte Datum (prev):
prev=$(cat /home/me/Progs/iNet/monitor/site.log | grep -e 'date:' | tail -1)
Wenn unser aktuelles Datum (curr) nicht mit dem vorherigen übereinstimmt (aus der Datei prev), ist ein neuer Tag gekommen (oder die Protokolldatei war beispielsweise leer). Schreiben Sie dann das neue Datum in die Datei:
if [[ $curr != $prev ]]; then printf '%s\n' "$curr" >>/home/me/Progs/iNet/monitor/site.log printf '%s %s %s\n' "$time" "$dlay" "$code" >>/home/me/Progs/iNet/monitor/site.log
... und gleichzeitig zeichnen wir die aktuellen Informationen auf: Zeit, Verzögerung beim Empfang einer Antwort von der Site, Site-Antwortcode (falls nicht normal):
printf '%s %s %s\n' "$time" "$dlay" "$code" >>/home/me/Progs/iNet/monitor/site.log
Dies wird beim Navigieren helfen: Der eine oder andere Tag begann mit der einen oder anderen Geschwindigkeit der Site. In anderen Fällen sollten Sie die Datei nicht mit unnötigen Einträgen überladen. Natürlich schreiben wir es auf, wenn wir einen ungewöhnlichen Serverstatuscode erhalten:
elif [[ -n $code ]]; then printf '%s %s %s\n' "$time" "$dlay" "$code" >>/home/me/Progs/iNet/monitor/site.log
Und schreiben Sie auch, wenn die Serverantwortzeit länger als gewöhnlich ist. Meine Website war normalerweise für 0,23 bis 0,25 Sekunden verantwortlich, daher zeichne ich Antworten auf, die länger als 0,3 Sekunden dauerten:
elif (( $(echo "$dlay > 0.3" | bc -l) )); then printf '%s %s\n' "$time" "$dlay" >>/home/me/Progs/iNet/monitor/site.log
Schließlich zeichne ich einmal pro Stunde einfach die vom Server empfangene Zeit auf - als Zeichen dafür, dass er lebt, und gleichzeitig als eine Art Markup der Datei:
else echo "$time" | grep -e :00: | cat >>/home/me/Progs/iNet/monitor/site.log fi
Wir erhalten den Inhalt der Datei, in der das Markup mit stündlichen Aufzeichnungen visuell hilft, ohne durchzulesen, um festzustellen, wann die Last höher oder niedriger ist (mehr Datensätze pro Stunde):
19:42:28 0.461214 19:53:29 0.443956 20:00:29 20:09:30 2.156462 20:10:29 0.358294 20:45:29 0.313378 20:51:30 0.563886 20:54:30 0.307219 21:00:30 0.722343 21:01:30 0.310284 21:09:30 0.379662 21:10:31 1.305779 21:12:35 5.799455 21:23:31 1.054537 21:24:31 1.230391 21:40:31 0.461266 21:42:37 7.140093 22:00:31 22:12:37 5.724768 22:14:31 0.303500 22:42:37 5.735173 23:00:32 23:10:32 0.318207 date: Mon, 11 Feb 2019 00:00:34 0.235298 00:01:33 0.315093 01:00:34 01:37:41 5.741847 02:00:36 02:48:37 0.343234 02:56:37 0.647698 02:57:38 1.670538 02:58:39 2.327980 02:59:37 0.663547 03:00:37 03:40:38 0.331613 04:00:38 04:11:38 0.217022 04:50:39 0.313566 04:55:45 5.719911 05:00:39
Und schließlich zeigen wir Informationen auf dem Bildschirm an. Und wenn Curl fehlgeschlagen ist, zeigen wir eine Nachricht darüber an und schreiben sie (und führen gleichzeitig Ping aus und melden uns an, um zu überprüfen, ob der Server überhaupt aktiv ist):
printf '%s\n%s\n%s' "$time" "$dlay" "$code" if (( $errr != 0 )); then date >>/home/me/Progs/iNet/monitor/site.log date printf 'CURL Request failed. Error: %s\n' "$errr" >>/home/me/Progs/iNet/monitor/site.log printf 'CURL Request failed. Error: %s\n' "$errr" pung=$(ping -c 1 178.248.237.68) printf 'Ping: %s\n----\n' "$pung" >>/home/me/Progs/iNet/monitor/site.log printf 'Ping: %s\n' "$pung" fi
Ersetzen Sie die IP-Adresse in der Ping-Zeichenfolge durch die tatsächliche IP-Adresse Ihrer Site.
8. Nachwort
Das Ergebnis der Arbeit:

Links im Bedienfeld sehen Sie die Uhrzeit in UTC und die aktuelle Reaktionsfähigkeit der Site. Auf der rechten Seite befindet sich das Protokoll: Es ist für die Rallye auch bei einem flüchtigen Bildlauf sichtbar, während welcher Stunden die Last mehr oder weniger war. Sie können auch ungewöhnlich langsame Reaktionen feststellen (Spitzen; obwohl noch nicht klar ist, woher sie kommen).
Das ist alles. Das Skript erwies sich als einfach, Eiche, und es kann verbessert werden: Arbeiten an Optimierung, Portabilität, Verbesserung von Benachrichtigungen und Anzeigen unter Berücksichtigung von Proxy und Cache ...
Aber bereits in dieser Art von Programm kann es wahrscheinlich eine Vorstellung vom Zustand Ihrer Site geben. Und lassen Sie es eine Seite sein, die klugerweise angemessen ist und für Menschen und alle Kreaturen nützlich ist!
Volltext des Skripts mit Kommentaren. Vergessen Sie nicht, die notwendigen Änderungen vorzunehmen! PS. Im Anschluss an die Diskussion (am 02/12/2019):
Wie ich gehofft hatte, haben Experten viele interessante Kommentare geschrieben.
Nachdem ich es mir überlegt habe, kann ich die
rsashka- Frage beantworten, was der Vorteil dieses Skripts ist.
Andere Tools wie
NetData (danke an
tchspprt für den Tipp!)
Stellen eine große Anzahl von Daten
bereit , die nicht lange gespeichert werden. NetData ist ein gutes Tool, wenn Sie jeden Tag arbeiten und Websites professionell pflegen. Gut zur Diagnose aktueller Probleme.
Ein Skript wie das meine soll ein Auge auf andere Dinge haben. Das Skript erfordert keine speziellen Studien und Einstellungen. Das ist nicht schlecht für Laien. Und seine Protokolle nehmen so wenig Platz ein, dass sie überhaupt nicht gelöscht werden können. Sie können sich im Laufe der Jahre ansammeln, und in den Jahren N + 1 können Sie sehen: „Wow, 2019 war meine Reaktionszeit eineinhalb Mal niedriger! ..“
Das heißt, eine solche Lösung hat eine eigene Nische - hauptsächlich für Nicht-Systemadministratoren. (Wie tchspprt sagt : "Es geht darum, wie man die Katze eines Nachbarn im Urlaub füttert").andreymal empfahl eine interessante Möglichkeit, die Last der Site ohne zusätzliche Mittel zu berücksichtigen und dann einfach über die Zugriffsprotokolle auf der Site anzuzeigen. Und Sie können schöne Grafiken darauf erstellen. Ich werde diese Option wahrscheinlich ausprobieren und auf Github posten, was passiert ist.unnforgiven hat eine andere interessante Lösung empfohlen - wahrscheinlich eine einfache (Prometheus, Blackbox und Alermanager über Docker Composer installieren). Auf meinem einfachen, billigen VPS ist nicht genug für diesen Speicher; und Linux mit einem alten Kernel - Docker startet nicht. Aber danke für die Option!Ein weiterer Tipptchspprt : Graphit + Prometheus + Grafana. Oder stellen Sie dem Skript schöne Grafiken zur Verfügung (gnuplot oder rrdtool).Mcalexvrn empfiehlt ein einfaches Tool: Uptimerobot . Vielen Dank!
Ich danke allen für diese vielen Informationen! Lass es für Menschen nützlich sein ...