Heim System-Tutorial LINUX Überwachung von SQL-Abfragen auf Slack

Überwachung von SQL-Abfragen auf Slack

Jan 17, 2024 pm 07:45 PM
linux linux教程 红帽 linux系统 linux命令 Linux-Zertifizierung Red Hat Linux Linux-Video

Überwachung von SQL-Abfragen auf Slack

Ein einfacher Go-Tipp, um Benachrichtigungen über langsame Abfragen, unerwartete Fehler und andere wichtige Protokolle zu erhalten.

Mein Slack-Bot hat mich auf eine lang laufende SQL-Abfrage aufmerksam gemacht. Ich sollte es so schnell wie möglich beheben.

Wir können nicht verwalten, was wir nicht messen können. Für jede Backend-Anwendung müssen wir ihre Leistung in der Datenbank überwachen. Wenn eine bestimmte Abfrage mit zunehmender Datenmenge langsamer wird, müssen Sie sie optimieren, bevor sie zu langsam wird.

Da Slack zum zentralen Bestandteil unserer Arbeit geworden ist, verändert es auch die Art und Weise, wie wir unsere Systeme überwachen. Obwohl wir bereits über ziemlich gute Überwachungstools verfügen, ist es auch eine gute Idee, einen Slack-Bot zu haben, der uns mitteilt, wenn sich im System ein Trend entwickelt. Beispielsweise dauert die Ausführung einer SQL-Abfrage zu lange oder in einem bestimmten Go-Paket tritt ein schwerwiegender Fehler auf.

In diesem Blogbeitrag erklären wir Ihnen, wie Sie ein einfaches Protokollierungssystem einrichten, das diese Funktionen bereits unterstützt, und eine vorhandene Datenbankbibliothek, um dieses Ziel zu erreichen.

Verwenden Sie einen Logger

logger ist eine kleine Bibliothek, die für die Verwendung durch Go-Bibliotheken und -Anwendungen entwickelt wurde. In diesem Beispiel verwenden wir seine drei wichtigen Funktionen:

Es bietet einen einfachen Timer zur Leistungsmessung.
Unterstützt komplexe Ausgabefilter, sodass Sie Protokolle aus bestimmten Paketen auswählen können. Beispielsweise können Sie den Logger anweisen, nur Datenbankpakete auszugeben und nur Timer-Protokolle auszugeben, die länger als 500 ms sind.
Es verfügt über einen Slack-Hook, sodass Sie Protokolle filtern und in Slack einspeisen können.
Sehen wir uns in diesem Beispiel an, wie man einen Timer verwendet. Später werden wir auch Filter verwenden:

package main
import (
    "github.com/azer/logger"
    "time"
)
var (
  users = logger.New("users")
  database = logger.New("database")
)
func main () {
  users.Info("Hi!")
  timer := database.Timer()
  time.Sleep(time.Millisecond * 250) // sleep 250ms
  timer.End("Connected to database")
  users.Error("Failed to create a new user.", logger.Attrs{
    "e-mail": "[email protected]",
  })
  database.Info("Just a random log.")
  fmt.Println("Bye.")
}
Nach dem Login kopieren

Keine Ausgabe beim Ausführen dieses Programms:

Der Logger ist standardmäßig stumm, sodass er innerhalb der Bibliothek verwendet werden kann. Wir verwenden einfach eine Umgebungsvariable, um das Protokoll anzuzeigen: Zum Beispiel:

$ LOG=database@timer go run example-01.go
01:08:54.997 database(250.095587ms): Connected to database.
Bye
Nach dem Login kopieren

Im obigen Beispiel haben wir den Datenbank@Timer-Filter verwendet, um die Timer-Protokollausgabe im Datenbankpaket anzuzeigen. Sie können auch andere Filter ausprobieren, wie zum Beispiel:

LOG=*: Alle Protokolle
LOG=users@error,database: alle Fehlerprotokolle von Benutzern, alle Protokolle aus der Datenbank
LOG=*@timer,database@info: Timer-Protokolle und Fehlerprotokolle von allen Paketen und alle Protokolle von der Datenbank
LOG=*,users@mute: Alle Protokolle außer Benutzern

Protokolle an Slack senden

Konsolenprotokoll ist für die Entwicklungsumgebung bestimmt, wir benötigen jedoch, dass das Produkt eine benutzerfreundliche Oberfläche bietet. Dank Slack-Hook können wir es im obigen Beispiel problemlos mit Slack integrieren:

import (
  "github.com/azer/logger"
  "github.com/azer/logger-slack-hook"
)
func init () {
  logger.Hook(&slackhook.Writer{
    WebHookURL: "https://hooks.slack.com/services/...",
    Channel: "slow-queries",
    Username: "Query Person",
    Filter: func (log *logger.Log) bool {
      return log.Package == "database" && log.Level == "TIMER" && log.Elapsed >= 200
    }
  })
}
Nach dem Login kopieren

Lassen Sie uns erklären, was wir im obigen Beispiel getan haben:

Zeile Nr. 5: Legen Sie die eingehende Webhook-URL fest. Die URL ist hier verlinkt.
Zeile Nr. 6: Wählen Sie den Eingangskanal für das Flussprotokoll aus.
Zeile #7: Angezeigter Benutzername des Absenders.
Zeile Nr. 11: Verwenden Sie einen Stream-Filter, um nur Timer-Protokolle auszugeben, die älter als 200 ms sind.
Ich hoffe, dieses Beispiel kann Ihnen einen allgemeinen Eindruck vermitteln. Wenn Sie weitere Fragen haben, schauen Sie sich die Dokumentation des Loggers an.

Ein Beispiel aus dem wirklichen Leben: CRUD

crud ist eine Bibliothek im ORM-Stil für Go-Datenbanken. Eine ihrer versteckten Funktionen ist, dass das interne Protokollierungssystem Logger verwendet. Dadurch können wir laufende SQL-Abfragen einfach überwachen.

Abfrage

Hier ist eine einfache Abfrage, die den Benutzernamen einer E-Mail-Adresse zurückgibt:

func GetUserNameByEmail (email string) (string, error) {
  var name string
  if err := DB.Read(&name, "SELECT name FROM user WHERE email=?", email); err != nil {
    return "", err
  }
  return name, nil
}
Nach dem Login kopieren

Okay, das ist zu kurz und es fühlt sich an, als würde etwas fehlen. Fügen wir den vollständigen Kontext hinzu:

import (
  "github.com/azer/crud"
  _ "github.com/go-sql-driver/mysql"
  "os"
)
var db *crud.DB
func main () {
  var err error
  DB, err = crud.Connect("mysql", os.Getenv("DATABASE_URL"))
  if err != nil {
    panic(err)
  }
  username, err := GetUserNameByEmail("[email protected]")
  if err != nil {
    panic(err)
  }
  fmt.Println("Your username is: ", username)
}
Nach dem Login kopieren

Wir haben also eine Rohinstanz, die über die Umgebungsvariable DATABASE_URL mit der MySQL-Datenbank verbunden ist. Wenn wir dieses Programm ausführen, sehen wir eine Ausgabezeile:

$ DATABASE_URL=root:123456@/testdb go run example.go
Your username is: azer
Nach dem Login kopieren

Wie ich bereits erwähnt habe, erfolgt die Protokollierung standardmäßig stumm. Werfen wir einen Blick auf die internen Protokolle von Crud:

$ LOG=crud go run example.go
22:56:29.691 crud(0): SQL Query Executed: SELECT username FROM user WHERE email='[email protected]'
Your username is: azer
Nach dem Login kopieren

Das ist einfach und reicht aus, um zu sehen, wie die Abfrage in unserer Entwicklungsumgebung ausgeführt wird.

CRUD- und Slack-Integration

Logger ist für die Konfigurationsverwaltung von „internen Protokollierungssystemen“ auf Anwendungsebene konzipiert. Das bedeutet, dass Sie grobe Protokolle in Slack einfließen lassen können, indem Sie den Logger auf Ihrer Anwendungsebene konfigurieren:

import (
  "github.com/azer/logger"
  "github.com/azer/logger-slack-hook"
)
func init () {
  logger.Hook(&slackhook.Writer{
    WebHookURL: "https://hooks.slack.com/services/...",
    Channel: "slow-queries",
    Username: "Query Person",
    Filter: func (log *logger.Log) bool {
      return log.Package == "mysql" && log.Level == "TIMER" && log.Elapsed >= 250
    }
  })
}
Nach dem Login kopieren

Im Code oben:

Wir haben die Bibliotheken logger und logger-slack-hook importiert.
Wir konfigurieren die Logger-Protokolle so, dass sie in Slack einfließen. Diese Konfiguration deckt alle Verwendungen des Loggers in der Codebasis ab, einschließlich Abhängigkeiten von Drittanbietern.
Wir haben einen Stream-Filter verwendet, um nur Timer-Protokolle aus dem MySQL-Paket auszugeben, die länger als 250 ms sind.
Diese Verwendung kann über die einfache Berichterstattung über langsame Abfragen hinaus erweitert werden. Ich persönlich verwende es, um wichtige Fehler in bestimmten Paketen zu verfolgen und auch für Statistiken wie neue Benutzeranmeldungen oder Protokolle zur Zahlungsgenerierung.

In diesem Beitrag erwähnte Packs

krud

Logger

logger-slack-hook

Sagen Sie uns, wenn Sie Fragen oder Anregungen haben

Das obige ist der detaillierte Inhalt vonÜberwachung von SQL-Abfragen auf Slack. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Erklärung dieser Website
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn

Heiße KI -Werkzeuge

Undresser.AI Undress

Undresser.AI Undress

KI-gestützte App zum Erstellen realistischer Aktfotos

AI Clothes Remover

AI Clothes Remover

Online-KI-Tool zum Entfernen von Kleidung aus Fotos.

Undress AI Tool

Undress AI Tool

Ausziehbilder kostenlos

Clothoff.io

Clothoff.io

KI-Kleiderentferner

AI Hentai Generator

AI Hentai Generator

Erstellen Sie kostenlos Ai Hentai.

Heißer Artikel

R.E.P.O. Energiekristalle erklärten und was sie tun (gelber Kristall)
1 Monate vor By 尊渡假赌尊渡假赌尊渡假赌
R.E.P.O. Beste grafische Einstellungen
1 Monate vor By 尊渡假赌尊渡假赌尊渡假赌
Will R.E.P.O. Crossplay haben?
1 Monate vor By 尊渡假赌尊渡假赌尊渡假赌

Heiße Werkzeuge

Notepad++7.3.1

Notepad++7.3.1

Einfach zu bedienender und kostenloser Code-Editor

SublimeText3 chinesische Version

SublimeText3 chinesische Version

Chinesische Version, sehr einfach zu bedienen

Senden Sie Studio 13.0.1

Senden Sie Studio 13.0.1

Leistungsstarke integrierte PHP-Entwicklungsumgebung

Dreamweaver CS6

Dreamweaver CS6

Visuelle Webentwicklungstools

SublimeText3 Mac-Version

SublimeText3 Mac-Version

Codebearbeitungssoftware auf Gottesniveau (SublimeText3)

Unterschied zwischen CentOS und Ubuntu Unterschied zwischen CentOS und Ubuntu Apr 14, 2025 pm 09:09 PM

Die wichtigsten Unterschiede zwischen CentOS und Ubuntu sind: Ursprung (CentOS stammt von Red Hat, für Unternehmen; Ubuntu stammt aus Debian, für Einzelpersonen), Packungsmanagement (CentOS verwendet yum, konzentriert sich auf Stabilität; Ubuntu verwendet apt, für hohe Aktualisierungsfrequenz), Support Cycle (Centos) (CENTOS bieten 10 Jahre. Tutorials und Dokumente), Verwendungen (CentOS ist auf Server voreingenommen, Ubuntu ist für Server und Desktops geeignet). Weitere Unterschiede sind die Einfachheit der Installation (CentOS ist dünn)

So installieren Sie CentOs So installieren Sie CentOs Apr 14, 2025 pm 09:03 PM

CentOS -Installationsschritte: Laden Sie das ISO -Bild herunter und verbrennen Sie bootfähige Medien. Starten und wählen Sie die Installationsquelle; Wählen Sie das Layout der Sprache und Tastatur aus. Konfigurieren Sie das Netzwerk; Partition die Festplatte; Setzen Sie die Systemuhr; Erstellen Sie den Root -Benutzer; Wählen Sie das Softwarepaket aus; Starten Sie die Installation; Starten Sie nach Abschluss der Installation von der Festplatte neu und starten Sie von der Festplatte.

CentOS 'Wahl nach der Beendigung der Wartung CentOS 'Wahl nach der Beendigung der Wartung Apr 14, 2025 pm 08:51 PM

CentOS wurde eingestellt, Alternativen umfassen: 1. Rocky Linux (beste Kompatibilität); 2. Almalinux (kompatibel mit CentOS); 3. Ubuntu Server (Konfiguration erforderlich); 4. Red Hat Enterprise Linux (kommerzielle Version, bezahlte Lizenz); 5. Oracle Linux (kompatibel mit CentOS und RHEL). Bei der Migration sind Überlegungen: Kompatibilität, Verfügbarkeit, Unterstützung, Kosten und Unterstützung in der Gemeinde.

So verwenden Sie Docker Desktop So verwenden Sie Docker Desktop Apr 15, 2025 am 11:45 AM

Wie benutze ich Docker Desktop? Docker Desktop ist ein Werkzeug zum Ausführen von Docker -Containern auf lokalen Maschinen. Zu den zu verwendenden Schritten gehören: 1.. Docker Desktop installieren; 2. Start Docker Desktop; 3.. Erstellen Sie das Docker -Bild (mit Dockerfile); 4. Build Docker Image (mit Docker Build); 5. Docker -Container ausführen (mit Docker Run).

Detaillierte Erklärung des Docker -Prinzips Detaillierte Erklärung des Docker -Prinzips Apr 14, 2025 pm 11:57 PM

Docker verwendet Linux -Kernel -Funktionen, um eine effiziente und isolierte Anwendungsumgebung zu bieten. Sein Arbeitsprinzip lautet wie folgt: 1. Der Spiegel wird als schreibgeschützte Vorlage verwendet, die alles enthält, was Sie für die Ausführung der Anwendung benötigen. 2. Das Union File System (UnionFS) stapelt mehrere Dateisysteme, speichert nur die Unterschiede, speichert Platz und beschleunigt. 3. Der Daemon verwaltet die Spiegel und Container, und der Kunde verwendet sie für die Interaktion. 4. Namespaces und CGroups implementieren Container -Isolation und Ressourcenbeschränkungen; 5. Mehrere Netzwerkmodi unterstützen die Containerverbindung. Nur wenn Sie diese Kernkonzepte verstehen, können Sie Docker besser nutzen.

Was zu tun ist, nachdem CentOS die Wartung gestoppt hat Was zu tun ist, nachdem CentOS die Wartung gestoppt hat Apr 14, 2025 pm 08:48 PM

Nachdem CentOS gestoppt wurde, können Benutzer die folgenden Maßnahmen ergreifen, um sich damit zu befassen: Wählen Sie eine kompatible Verteilung aus: wie Almalinux, Rocky Linux und CentOS Stream. Migrieren Sie auf kommerzielle Verteilungen: wie Red Hat Enterprise Linux, Oracle Linux. Upgrade auf CentOS 9 Stream: Rolling Distribution und bietet die neueste Technologie. Wählen Sie andere Linux -Verteilungen aus: wie Ubuntu, Debian. Bewerten Sie andere Optionen wie Container, virtuelle Maschinen oder Cloud -Plattformen.

Was tun, wenn das Docker -Bild fehlschlägt? Was tun, wenn das Docker -Bild fehlschlägt? Apr 15, 2025 am 11:21 AM

Fehlerbehebung Schritte für fehlgeschlagene Docker -Bild Build: Überprüfen Sie die Dockerfile -Syntax und die Abhängigkeitsversion. Überprüfen Sie, ob der Build -Kontext den erforderlichen Quellcode und die erforderlichen Abhängigkeiten enthält. Sehen Sie sich das Build -Protokoll für Fehlerdetails an. Verwenden Sie die Option -Target -Option, um eine hierarchische Phase zu erstellen, um Fehlerpunkte zu identifizieren. Verwenden Sie die neueste Version von Docker Engine. Erstellen Sie das Bild mit--t [Bildname]: Debugg-Modus, um das Problem zu debuggen. Überprüfen Sie den Speicherplatz und stellen Sie sicher, dass dies ausreicht. Deaktivieren Sie Selinux, um eine Störung des Build -Prozesses zu verhindern. Fragen Sie Community -Plattformen um Hilfe, stellen Sie Dockerfiles an und erstellen Sie Protokollbeschreibungen für genauere Vorschläge.

Welche Computerkonfiguration ist für VSCODE erforderlich? Welche Computerkonfiguration ist für VSCODE erforderlich? Apr 15, 2025 pm 09:48 PM

VS Code system requirements: Operating system: Windows 10 and above, macOS 10.12 and above, Linux distribution processor: minimum 1.6 GHz, recommended 2.0 GHz and above memory: minimum 512 MB, recommended 4 GB and above storage space: minimum 250 MB, recommended 1 GB and above other requirements: stable network connection, Xorg/Wayland (Linux)

See all articles