sql >> Databasteknik >  >> RDS >> Mysql

Förstå ProxySQL-granskningsloggen

ProxySQL blev en mycket viktig del av infrastrukturen i databasmiljöerna. Den fungerar som en lastbalanserare, den hjälper till att forma trafikflödet och minska stilleståndstiden. Med stor makt kommer stort ansvar. Hur kan du hålla dig uppdaterad om vem som har åtkomst till ProxySQL-konfigurationen? Vem ansluter till databasen via ProxySQL? Dessa frågor kan besvaras med hjälp av ProxySQL Audit Log, som är tillgänglig från ProxySQL 2.0.5. I det här blogginlägget kommer vi att undersöka hur man aktiverar den här funktionen och hur logginnehållet ser ut.

De första stegen är att distribuera ProxySQL. Vi kan enkelt göra det med ClusterControl - både MySQL-replikering och Galera-klustertyper stöder ProxySQL-distribution.

Förutsatt att vi har ett kluster igång, kan vi distribuera ProxySQL från Manage -> LoadBalancers:

Vi måste bestämma på vilken nod ProxySQL ska installeras, dess version ( vi behåller standard 2.x) och definierar autentiseringsuppgifter för ProxySQL-administratörer och övervakningsanvändare.

Nedan kan vi antingen importera befintliga applikationsanvändare från databasen eller skapa en ny en genom att tilldela namn, lösenord, schema och MySQL-privilegier. Vi kan sedan konfigurera vilka noder som ska ingå i ProxySQL och bestämma om vi använder implicita transaktioner eller inte. När allt är klart kan vi distribuera ProxySQL. För hög tillgänglighet vill du förmodligen lägga till en andra ProxySQL och sedan hålla liv ovanpå dem. Keepalived kan också enkelt distribueras från ClusterControl:

Här måste vi välja noder där ProxySQL är utplacerad, skicka den virtuella IP och nätverksgränssnitt VIP bör tilldelas. När detta är gjort kan ClusterControl distribuera Keepalved åt dig.

Nu ska vi ta en titt på granskningsloggen. Alla konfigurationer bör utföras på båda ProxySQL-noderna. Alternativt kan du använda ett alternativ för att synkronisera noderna:

Det finns två inställningar som styr hur granskningsloggen ska fungera:

Den första definierar filen där data ska lagras, den andra talar om hur stor loggfilen ska vara innan den roteras. Låt oss konfigurera inloggning i ProxySQL-datakatalogen:

Nu kan vi ta en titt på uppgifterna vi ser i granskningen loggfil. Först och främst är formatet som data lagras i JSON. Det finns två typer av händelser, en relaterad till MySQL-anslutning och den andra relaterad till ProxySQL-admingränssnittsanslutning.

Här är ett exempel på poster som utlöses av MySQL-trafik:

  "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"

}

Som du kan se upprepas de flesta data:klientadress, ProxySQL-adress, schemanamn, om SSL användes i anslutningar, relaterat trådnummer i MySQL, användare som skapade anslutningen. Händelsen "MySQL_Client_Close" innehåller också information om tidpunkten när anslutningen skapades och anslutningens varaktighet. Du kan också se vilken del av ProxySQL-koden som var ansvarig för att stänga anslutningen.

Adminanslutningar är ganska lika:

{

  "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"

}

Datan som samlas in är mycket lika, den största skillnaden är att den är relaterad till anslutningar till det administrativa gränssnittet för ProxySQL.

Slutsats

Som du kan se kan du på ett mycket enkelt sätt aktivera granskning av åtkomsten till ProxySQL. Detta, särskilt den administrativa åtkomsten, är något som bör övervakas ur säkerhetssynpunkt. Granskningsplugin gör det ganska enkelt att utföra.


  1. Hantera felhantering när du kör sqlplus från skalskript

  2. Snabbaste sättet att hitta avstånd mellan två lat/långa punkter

  3. Krävs för att gå med 2 bord med sina FKs i ett 3:e bord

  4. Välj kolumner från resultatuppsättningen av lagrad procedur