
Ich bin auf ein Problem gestoßen und habe beschlossen, um Rat zu fragen. Schließlich habe ich jemanden mit dem gleichen geschäftlichen Bedarf (und Problem) gefunden.
Zusammenfassung: Wir haben vor Kurzem den SQL-Dienst eines unserer Kunden von einem selbstgehosteten MySQL zum Google CloudSQL MySQL 5.7-Dienst migriert und suchen nun nach einer Möglichkeit, unserem Kunden den Zugriff/die Anzeige und Analyse der langsamen MySQL-Protokolle in seinem selbstgehosteten ELK-Stack zu ermöglichen.
Dies war vorher kein Problem, da wir Zugriff auf die langsame Protokolldatei des SQL-Dienstes hatten und diese Protokolle in Elasticsearch „verfolgen“, exportieren und indizieren konnten. Ein kurzes Beispiel dafür, wie ein bestimmtes Elasticsearch MySQL-langsames Protokoll-Einzeldokument vorher aussah, finden Sie unten: https://prnt.sc/sjitys
Bitte beachten Sie, dass jedes einzelne Dokument Folgendes enthielt:
Time
User@Host
Query_time
timestamp
Auswählen/Einfügen/Aktualisieren/Löschen von Abfragen und die Möglichkeit, Daten basierend auf Sperrzeit, abgefragten Zeilen, betroffenen Zeilen, zurückgegebenen Zeilen usw. zu analysieren.
Hier ist ein Beispiel, wie die langsamen MySQL-Protokolle im GCP-Protokoll-Viewer angezeigt werden, auf den unser Client keinen Zugriff hat: https://user-images.githubusercontent.com/9348708/80950753-2418bf80-8dff-11ea-9a00-3f5131b5e0f3.png
Unser Ziel besteht also darin, die langsamen MySQL-Protokolle auf eine ähnliche Weise wie zuvor zum ELK-Stapel zu streamen.
Um unser Ziel zu erreichen, haben wir versucht, die langsamen GCP MySQL-Protokolle über den Pub/Sub-Exporter abzurufen (https://cloud.google.com/logging/docs/export) und Protokolle an den ELK-Stack streamen. Zu diesem Zweck haben wir Folgendes getan: 1. einen Protokollsenke (Log Router) erstellt, indem wir den folgenden Filter verwendet haben: resource.type="cloudsql_database" logName="projects/XXX/logs/cloudsql.googleapis.com%2Fmysql-slow.log" und in den Pub/Sub-Sink-Dienst von Google exportiert 2. auf einer Google Computer Engine-VM haben wir einen Dateiexportdienst namens pubsubbeat installiert und konfiguriert (der Dienst ähnelt der Pubsub-Eingabemethode von Filebeat), um die langsamen SQL-Protokolle von GCP in eine Datei auf der betreffenden VM zu streamen 3. einen Filebeat-Dienst konfiguriert, um den von GCP auf der VM exportierten Protokollen zu folgen und indem er include_lines: [‘textPayload’]
nur die wichtigen Informationen in jedes von GCP abgerufene JSON-Objekt einschließt
NB: Auf langsame GCP MySQL-Protokolle wird über den Agenten google-fluentd zugegriffen und sie werden mithilfe eines einzigen Datentyps, LogEntry, dargestellt, der bestimmte gemeinsame Daten für alle Protokolleinträge definiert und einzelne Nutzdaten überträgt. Das Format ist JSON und jede Protokollzeile ist in einem separaten JSON-Objekt gekapselt. Beispiel:https://prnt.sc/sep2zk
Unmittelbares Problem: Pub/Sub geht einige Kompromisse ein, um eine hohe Verfügbarkeit und einen hohen Durchsatz zu erreichen. Leider ist einer dieser Kompromisse, dass Nachrichten in der falschen Reihenfolge eingehen. Mit anderen Worten: Die Reihenfolge der langsamen MySQL-Protokolle ist gemischt und wir können nicht jedes einzelne langsame Protokollobjekt richtig kapseln, indem wir definieren, dass es mit der Zeichenfolge „^# Time“ beginnt. Stattdessen haben wir das folgende Format:https://prnt.sc/seoztj
Daher wäre es eine große Hilfe, wenn jemand mitteilen würde, wie er mehrzeilige Protokolldateien (oder direkt langsame MySQL-Protokolle) von GCP in ein externes Protokollanalysesystem (wie ELK-Stack) exportiert, damit wir besser verstehen, was in dieser Situation der beste Ansatz ist.
Antwort1
Das ist richtig.Pub/Sub garantiert nicht die Reihenfolge der Lieferung. Was Sie tun können, ist, zu bestellen durch dieVeröffentlichungszeit. Dort sind einigeProbenin der Pub/Sub-Dokumentation.
Alternativ können Sie der Gleichung eine Datenflusspipeline hinzufügen und die Daten von dieser für Sie sortieren lassen. Sie können dann einen Batch-Job ausführen, je nach den Geschäftsanforderungen Ihres Kunden. Diese Methode erfordert viel Konfigurationsarbeit und kostet deutlich mehr.
Ich empfehle Ihnen dringend, sich einige der oben aufgeführten Beispiele anzusehen und zu prüfen, ob sie Ihren Anforderungen entsprechen.