Allmählich wurde diese Idee umgesetzt, es gab Verbesserungsvorschläge, die Überwachung von Hosts erschien, dann die Überwachung von Anwendungen und, wie das i-Tüpfelchen, Vorfälle mit Benachrichtigung.
Als Ergebnis haben wir ein vollwertiges Überwachungssystem erhalten, das eine vollständig Open-Source-Self-Host-Lösung ohne externe Kommunikation mit vollständig benutzerdefinierten Vorfällen ist.
In diesem Beitrag möchten wir Ihnen das resultierende Produkt vorstellen.
Technische Details
Für die Entwicklung wurde eine Microservice-Architektur ausgewählt. Das Backend wurde in GoLang als schnelle und bequeme Sprache für die Entwicklung von Microservices entwickelt. Wir haben gRPC verwendet, um zwischen Diensten zu kommunizieren. Zusätzlich zu der Tatsache, dass gRPC mit allem, was dies impliziert, unter HTTP / 2 arbeitet, können Sie als Benutzer bei der Beschreibung der Dienstschnittstellen über proto bei Bedarf Ihre eigenen Implementierungen einzelner Teile des Systems erstellen.
Das Projekt verwendet Mongo als Schnellzugriffsdatenbank und Postgres zum Speichern gesammelter Statistiken.
Bazel wurde für die Montage und Bereitstellung verwendet. Mit Bazel können Sie Abhängigkeiten und Beziehungen zwischen Paketen in Golang deklarativ beschreiben. Darüber hinaus haben wir begonnen, Bazel mit einem Remote-Cache zu testen, was sich positiv auf die Geschwindigkeit des Systems auswirkt. Bazel sammelt auch alle Anwendungen in Docker und organisiert Unit-Tests. All dies ist in Github-Aktionen integriert.
Das Dashboard des Systems ist in Winkel 9 geschrieben.
Wir versuchen, die Leiste in Komponententests zu belassen, sobald jede Entität abgedeckt ist. In naher Zukunft die Implementierung von Integrations- und E2E-Tests für die umfassendste Systemunterstützung
Systembeschreibung
Wie oben erwähnt, ist Squzy eine Reihe von Mikrodiensten, die miteinander interagieren und sich jeweils mit einer separaten Aufgabe befassen.
Liste der Dienstleistungen:
- Agent Client — , . , . Agent Server.
- Agent Server — , . Mongo, Storage.
- Application Monitoiring — , / Squzy , . GoLang NodeJS, — PHP & Java .
- Monitoring — external/internal .
- Storage — . Postgres, ClickHouse.
- Incident Manager- . ( ). Mongo, Storage.
- Notification Manager — . Webhook & Slack.
- API — API Gateway
Das Service-Interaktionsschema lautet wie folgt:
Um die Funktionen von Squzy zu demonstrieren, wurde eine Demo entwickelt, die den eigenen Server überwacht und es Ihnen ermöglicht, das System im Dashboard zu überwachen: https://demo.squzy.app/ .
Einige Funktionen, wie das Hinzufügen / Entfernen neuer Entitäten, sind in der Demo deaktiviert, aber Sie können alle Teile des Systems sehen und fühlen. Im Folgenden werden wir uns eingehender mit den einzelnen Arten der Überwachung befassen.
Dieser Teil des Systems ist für externe / interne Prüfungen verantwortlich. Derzeit können Sie Anforderungen senden und Antworten auf die folgenden Arten von Endpunkten erwarten:
- Tcp - Open Port Check;
- gRPC - Protokollprüfung ;
- HTTP - Überprüfung der Einhaltung des Statuscodes;
- SiteMap - Überprüfen, ob alle URLs aus der Sitemap mit 200 OK antworten .
- JsonValue - Sammlung spezifischer Werte aus der JSON-Antwort.
Mit Squzy können Sie allen Arten von HTTP-Prüfungen benutzerdefinierte Header hinzufügen.
Die Schnittstelle zum Hinzufügen einer Prüfung über das Squzy-Dashboard sieht folgendermaßen aus:
Hier ist das Intervall das Intervall zwischen den Prüfungen in Sekunden und das Zeitlimit die Zeit, nach der die Prüfung als nicht erfolgreich angesehen wird.
Nach der Erstellung hat der Benutzer Zugriff auf die Prüferkonfiguration:
Für jede Art von Prüfung können Sie eine Vorfallregel schreiben. Weitere Details zu Vorfällen werden unten beschrieben, aber hier geben wir nur ein Beispiel:
In diesem Fall messen wir den Wert des Dollar-Wechselkurses von der Site aus und erstellen einen Vorfall, wenn er mehr als 80 beträgt.
Link zur Demo.
Vorfälle können erstellt werden auf:
- Dauer der Überprüfung (Zeitpunkt des Empfangs einer Antwort vom Server);
- Status (zurückgegebener Statuscode);
- Wert (im Prüfer übermittelte Informationen).
Squzy Agent
Zur Überwachung von Hosts im System wird der auf dem Server installierte Squzy Agent verwendet. Derzeit werden folgende Statistiken erfasst:
- CPU - Prozessorlast;
- Speicher - Verwendet / Frei / Gesamt / Geteilt;
- Festplatte - Verwendet / Frei / Gesamt für jede der Festplatten;
- Netz - für jede Netzwerkschnittstelle.
Agenten-Timeline:
- Der Agent registriert sich beim Agentenserver und erhält eine ID (während der Registrierung können das Überwachungsintervall und der Agentenname angegeben werden).
- Der Agent sendet in einem bestimmten Intervall Statistiken an den Server.
- ….
- Der Agent benachrichtigt den Server über das Herunterfahren.
Wenn keine Verbindung zum Server besteht, sammelt der Agent weiterhin Statistiken und diese werden gesendet, wenn die Verbindung wiederhergestellt wird.
Die Demoversion des Agenten kann hier angezeigt werden: https://demo.squzy.app/agents/5f142b6141a1c6518723483a/live Der
Agent kann auch eine Reihe von Regeln zum Überprüfen von Vorfällen festlegen:
Squzy Application Monitoring
Für Überwachungsanwendungen wurden Integrationen mit gängigen Frameworks für Go / NodeJs entwickelt (weiter, wie erfolgreiche Vermarkter sagen). Integrationen definieren den Transaktionstyp ( HTTP / Router / gRPC / WebSocket / usw.) und analysieren Antworten von Engines / Anforderungen.
Squzy unterstützt auch die Transaktionsverfolgung, mit der Sie verwandte Transaktionen mehrerer Server / Dienste überwachen können. Ein Beispiel für die Überwachung solcher Transaktionen im Dashboard: https://demo.squzy.app/transactions/om8l8LP96PRsvx67UxkES .
Bibliotheken zur Integration in Go und Node Js.
- Gehen Sie - https://github.com/squzy/squzy_go (GIN / gRPC / Http);
- NodeJs - https://github.com/squzy/squzy_node (Express) + FE (Angular + Vanille).
Bibliotheken sind im Kern Middleware, die die Zeit vor dem Senden einer Transaktion und die Zeit nach ihrer Verarbeitung zeitlich festlegt und die Antwort analysiert. Wir haben auch eine Beispielanwendung für die GO-Überwachung geschrieben: https://github.com/squzy/test_tracing.
Sie können Ihre eigenen Transaktionen erstellen und deren Ausführungszeiten, Status und Fehler messen. Verwenden Sie dazu das Core-Paket. Zur Vereinfachung der Produktunterstützung verwenden alle Sprachen denselben Namen für die Pakete, die das Verhalten definieren.
Sie können Vorfälle pro Transaktion basierend auf den folgenden Daten erstellen:
- Die Dauer der Transaktion;
- Transaktionsstatus;
- Fehler erhalten;
- Art der Transaktion.
Squzy Incident Manager + Benachrichtigungsmanager
Vorfälle in Squzy basieren auf Regeln. Beim Hinzufügen einer neuen Entität zum Speicher wird die beschriebene Regel überprüft. Wenn dies der Fall ist, wird ein Vorfall erstellt (sofern dieser noch nicht erstellt wurde).
Die Regeln sind eine erweiterte Version von expr , zu der bestimmte Regeln hinzugefügt wurden, wobei die Systemspezifikation berücksichtigt wird, z. B. Last (verwendet die letzten n Datensätze aus dem Speicher), Use (verwendet hierfür einen bestimmten Filter) usw. Eine ausführliche Beschreibung aller Regeln finden Sie unter https://squzy.app/usage/squzy-incident/incident-rules . Hier konzentrieren wir uns auf ein anschauliches Beispiel.
Angenommen, Sie haben einen Server mit 1.792 Prozessoren, 256 GB RAM und 16 TB Festplattenspeicher. Und Sie möchten wirklich überprüfen, ob Ihre Entwickler Doom nicht auf dem CPU-Lastmonitor ausführen. Sie wissen, dass die Pflege einer einseitigen Site, die Ihren Server bedient, niemals länger als eine Minute 100 Prozent mehr als 8 Prozessoren lädt. Außerdem ist der RAM mehr als halb frei. Während die Festplatte über eine ganze TB freien Speicherplatz verfügt (wenn Sie keine bekannten Archive zu Hause aufbewahren, wird Ihre Frau dies sehen). In diesem Fall können Sie, wenn Sie wissen, dass Metriken alle 10 Sekunden erfasst werden, die folgende Regel definieren, um zu überprüfen, ob Ihr Server ordnungsgemäß funktioniert:
any(Last(7, UseType(All)),
{all(.CpuInfo.Cpus, {.Load > 80}) &&
.MemoryInfo.Mem.UsedPercent < 50 &&
.DiskInfo.Disks["System"].Free > 1000000000000}
)
In ähnlicher Weise können Sie mit Squzy verschiedene Muster unerwünschten Systemverhaltens beschreiben.
Nachdem die Regelprüfung erfolgreich (oder eher erfolglos) war, wird ein Vorfall erstellt und der Benutzer benachrichtigt, falls konfiguriert.
Ein aktiver Vorfall, dh ein Vorfall, der vom Benutzer noch nicht überprüft wurde, kann automatisch geschlossen werden, dh wenn die Überprüfung zu einem bestimmten Zeitpunkt nicht bestanden wurde und die entsprechende Option ausgewählt ist.
Für jede überprüfte Entität, sei es eine Anwendung / Prüfer / Agent, können Sie Ihre eigenen Benachrichtigungen über Vorfälle erstellen.
Fazit
Wir sind gerade dabei, Feedback und Kommentare von der IT-Community zu sammeln.
Wir haben bereits eine Reihe von Plänen für die Produktentwicklung:
- Hinzufügen von Java / PHP-Integrationen;
- Datenbankprüfer;
- Migration von Postgres zu ClickHouse;
- mehr Benachrichtigungsmethoden;
- Integration mit Kubernetes;
- Verbesserung der Dokumentation;
- GQL API;
- Integrations- und E2E-Tests;
- Überwachung mobiler Anwendungen.
- Autocomplete für Vorfallregeln auf der Benutzeroberfläche
Wir freuen uns über Feedback oder Anregungen.
Links
- System-Backend: https://github.com/squzy/squzy
- Frontend-Systeme: https://github.com/squzy/squzy-dashboard
- Demo-Dashboard: https://demo.squzy.app/
- Dokumentation: https://squzy.app/
- Autoren: PxyUp DreamAndDrum
PS:
Danke für den Artikel Vonotirax
Try in 1 Klick