ProxySQL wurde zu einem sehr wichtigen Teil der Infrastruktur in Datenbankumgebungen. Es fungiert als Load Balancer, es hilft, den Verkehrsfluss zu gestalten und die Ausfallzeiten zu reduzieren. Mit großer Macht kommt große Verantwortung. Wie können Sie auf dem Laufenden bleiben, wer auf die ProxySQL-Konfiguration zugreift? Wer verbindet sich über ProxySQL mit der Datenbank? Diese Fragen können mit ProxySQL Audit Log beantwortet werden, das ab ProxySQL 2.0.5 verfügbar ist. In diesem Blog-Beitrag werden wir untersuchen, wie Sie diese Funktion aktivieren und wie die Protokollinhalte aussehen.
Die ersten Schritte bestehen in der Bereitstellung von ProxySQL. Wir können das ganz einfach mit ClusterControl tun - sowohl die MySQL-Replikation als auch die Galera-Cluster-Typen unterstützen die ProxySQL-Bereitstellung.
Angenommen, wir haben einen Cluster, der läuft, können wir ProxySQL über Manage -> LoadBalancers bereitstellen:
Wir müssen entscheiden, auf welchem Knoten ProxySQL installiert werden soll, seine Version ( wir behalten die Standardeinstellung 2.x bei) und definieren Anmeldeinformationen für administrative und überwachende ProxySQL-Benutzer.
Im Folgenden können wir entweder vorhandene Anwendungsbenutzer aus der Datenbank importieren oder eine neue erstellen eine durch die Zuweisung von Namen, Passwort, Schema und MySQL-Berechtigungen. Wir können dann konfigurieren, welche Knoten in ProxySQL enthalten sein sollen, und entscheiden, ob wir implizite Transaktionen verwenden oder nicht. Sobald alles erledigt ist, können wir ProxySQL bereitstellen. Für eine hohe Verfügbarkeit möchten Sie wahrscheinlich ein zweites ProxySQL hinzufügen und dann darauf Keepalived. Keepalived kann auch einfach von ClusterControl bereitgestellt werden:
Hier müssen wir Knoten auswählen, auf denen ProxySQL bereitgestellt wird, und die Virtual IP- und Netzwerkschnittstelle, der VIP zugewiesen werden soll. Sobald dies erledigt ist, kann ClusterControl Keepalived für Sie bereitstellen.
Werfen wir nun einen Blick auf das Audit-Log. Alle Konfigurationen sollten auf beiden ProxySQL-Knoten durchgeführt werden. Alternativ können Sie eine Option verwenden, um die Knoten zu synchronisieren:
Es gibt zwei Einstellungen, die bestimmen, wie das Überwachungsprotokoll funktionieren soll:
Der erste definiert die Datei, in der die Daten gespeichert werden sollen, der zweite gibt an wie groß die Protokolldatei sein soll, bevor sie rotiert wird. Lassen Sie uns das Protokoll im ProxySQL-Datenverzeichnis konfigurieren:
Jetzt können wir uns die Daten ansehen, die wir im Audit sehen Logdatei. Zunächst einmal ist das Format, in dem Daten gespeichert werden, JSON. Es gibt zwei Arten von Ereignissen, eines im Zusammenhang mit der MySQL-Konnektivität und das zweite im Zusammenhang mit der Konnektivität der ProxySQL-Verwaltungsschnittstelle.
Hier ist ein Beispiel für Einträge, die durch MySQL-Traffic ausgelöst werden:
"client_addr": "10.0.0.100:40578",
"event": "MySQL_Client_Connect_OK",
"proxy_addr": "0.0.0.0:6033",
"schemaname": "sbtest",
"ssl": false,
"thread_id": 810,
"time": "2020-01-23 14:24:17.595",
"timestamp": 1579789457595,
"username": "sbtest"
}
{
"client_addr": "10.0.0.100:40572",
"event": "MySQL_Client_Quit",
"proxy_addr": "0.0.0.0:6033",
"schemaname": "sbtest",
"ssl": false,
"thread_id": 807,
"time": "2020-01-23 14:24:17.657",
"timestamp": 1579789457657,
"username": "sbtest"
}
{
"client_addr": "10.0.0.100:40572",
"creation_time": "2020-01-23 14:24:17.357",
"duration": "299.653ms",
"event": "MySQL_Client_Close",
"extra_info": "MySQL_Thread.cpp:4307:process_all_sessions()",
"proxy_addr": "0.0.0.0:6033",
"schemaname": "sbtest",
"ssl": false,
"thread_id": 807,
"time": "2020-01-23 14:24:17.657",
"timestamp": 1579789457657,
"username": "sbtest"
}
Wie Sie sehen können, wiederholen sich die meisten Daten:Client-Adresse, ProxySQL-Adresse, Schemaname, wenn SSL in Verbindungen verwendet wurde, zugehörige Thread-Nummer in MySQL, Benutzer, der die Verbindung erstellt hat. Das Event „MySQL_Client_Close“ enthält auch Informationen über den Zeitpunkt des Verbindungsaufbaus und die Dauer der Verbindung. Sie können auch sehen, welcher Teil des ProxySQL-Codes für das Schließen der Verbindung verantwortlich war.
Admin-Verbindungen sind ziemlich ähnlich:
{
"client_addr": "10.0.0.100:52056",
"event": "Admin_Connect_OK",
"schemaname": "information_schema",
"ssl": false,
"thread_id": 815,
"time": "2020-01-23 14:24:19.490",
"timestamp": 1579789459490,
"username": "proxysql-admin"
}
{
"client_addr": "10.0.0.100:52056",
"event": "Admin_Quit",
"schemaname": "information_schema",
"ssl": false,
"thread_id": 815,
"time": "2020-01-23 14:24:19.494",
"timestamp": 1579789459494,
"username": "proxysql-admin"
}
{
"client_addr": "10.0.0.100:52056",
"creation_time": "2020-01-23 14:24:19.482",
"duration": "11.795ms",
"event": "Admin_Close",
"extra_info": "MySQL_Thread.cpp:3123:~MySQL_Thread()",
"schemaname": "information_schema",
"ssl": false,
"thread_id": 815,
"time": "2020-01-23 14:24:19.494",
"timestamp": 1579789459494,
"username": "proxysql-admin"
}
Die gesammelten Daten sind sehr ähnlich, der Hauptunterschied besteht darin, dass sie sich auf Verbindungen zur ProxySQL-Verwaltungsschnittstelle beziehen.
Fazit
Wie Sie sehen, können Sie auf sehr einfache Weise die Überwachung des Zugriffs auf ProxySQL aktivieren. Dies, insbesondere der administrative Zugriff, sollte unter Sicherheitsgesichtspunkten überwacht werden. Das Audit-Plug-in macht dies ganz einfach.