Śledzenie aktywności bazy danych za pomocą dzienników inspekcji w usłudze Azure Database for MySQL — serwer elastyczny
Serwer elastyczny usługi Azure Database for MySQL zapewnia użytkownikom możliwość konfigurowania dzienników inspekcji. Dzienniki inspekcji mogą służyć do śledzenia aktywności na poziomie bazy danych, w tym połączeń, administratorów, Zdarzeń DDL i DML. Te typy dzienników są często używane na potrzeby zapewniania zgodności.
Konfigurowanie rejestrowania inspekcji
Ważne
Zaleca się rejestrowanie tylko typów zdarzeń i użytkowników wymaganych do celów inspekcji, aby upewnić się, że wydajność serwera nie jest mocno dotknięta i zbierana jest minimalna ilość danych.
Domyślnie dzienniki inspekcji są wyłączone. Aby je włączyć, ustaw audit_log_enabled
parametr serwera na WŁ. Można to skonfigurować przy użyciu witryny Azure Portal lub interfejsu wiersza polecenia platformy Azure.
Inne parametry, które można dostosować do kontrolowania zachowania rejestrowania inspekcji, obejmują:
audit_log_events
: steruje zdarzeniami, które mają być rejestrowane. Zobacz poniższą tabelę, aby zapoznać się z konkretnymi zdarzeniami inspekcji.audit_log_include_users
: użytkownicy programu MySQL, którzy mają być dołączani do rejestrowania. Wartość domyślna tego parametru jest pusta, która będzie zawierać wszystkich użytkowników do rejestrowania. Ma to wyższy priorytet niżaudit_log_exclude_users
. Maksymalna długość parametru to 512 znaków. Na przykład wartość symbolidev*
wieloznacznych zawiera wszystkich użytkowników z wpisami rozpoczynającymi się od słowa kluczowegodev
, takiego jak "dev1,dev_user,dev_2". Innym przykładem wprowadzania symboli wieloznacznych dla dołączania użytkownika jest*dev
w tym przykładzie wszyscy użytkownicy kończący się wartością "dev", taką jak "stage_dev,prod_dev,user_dev" są uwzględnione w wpisach dziennika inspekcji. Ponadto użycie znaku(?)
zapytania jako symbolu wieloznakowego jest dozwolone we wzorcach.audit_log_exclude_users
: użytkownicy mySQL, którzy mają zostać wykluczeni z rejestrowania. Maksymalna długość parametru wynosi 512 znaków. Wpisy z symbolami wieloznacznymi dla użytkownika są również akceptowane w celu wykluczenia użytkowników w dziennikach inspekcji. Na przykład wartość symbolustage*
wieloznakowego wyklucza wszystkich użytkowników z wpisami rozpoczynającymi się od słowa kluczowegostage
, takiego jak "stage1,stage_user,stage_2". Innym przykładem wprowadzania symboli wieloznacznych dla wykluczania użytkownika jest*com
w tym przykładzie, wszyscy użytkownicy kończący się wartościącom
zostaną wykluczeni z wpisów dziennika inspekcji. Ponadto użycie znaku(?)
zapytania jako symbolu wieloznakowego jest dozwolone we wzorcach.
Uwaga
audit_log_include_users
ma wyższy priorytet niż audit_log_exclude_users
. Na przykład jeśli audit_log_include_users
= demouser
idemouser
audit_log_exclude_users
= , użytkownik zostanie uwzględniony w dziennikach inspekcji, ponieważ audit_log_include_users
ma wyższy priorytet.
Zdarzenie | Opis |
---|---|
CONNECTION |
- Inicjowanie połączenia - Kończenie połączenia |
CONNECTION_V2 |
— Inicjowanie połączenia (kod błędu pomyślnej lub nieudanej próby) - Kończenie połączenia |
DML_SELECT |
Zapytania SELECT |
DML_NONSELECT |
ZAPYTANIA INSERT/DELETE/UPDATE |
DML |
DML = DML_SELECT + DML_NONSELECT |
DDL |
Zapytania takie jak "DROP DATABASE" |
DCL |
Zapytania takie jak "UDZIEL UPRAWNIENIA" |
ADMIN |
Zapytania takie jak "SHOW STATUS" |
GENERAL |
Wszystkie w DML_SELECT, DML_NONSELECT, DML, DDL, DCL i ADMIN |
TABLE_ACCESS |
- Instrukcje odczytu tabeli, takie jak SELECT lub INSERT INTO ... WYBRAĆ - Instrukcje usuwania tabeli, takie jak DELETE lub TRUNCATE TABLE - Instrukcje wstawiania tabeli, takie jak INSERT lub REPLACE - Instrukcje aktualizacji tabeli, takie jak UPDATE |
Uzyskiwanie dostępu do dzienników inspekcji
Dzienniki inspekcji są zintegrowane z ustawieniami diagnostycznymi usługi Azure Monitor. Po włączeniu dzienników inspekcji na serwerze elastycznym można je emitować do dzienników usługi Azure Monitor, usługi Azure Event Hubs lub usługi Azure Storage. Aby dowiedzieć się więcej na temat ustawień diagnostycznych, zobacz dokumentację dzienników diagnostycznych. Aby dowiedzieć się więcej na temat włączania ustawień diagnostycznych w witrynie Azure Portal, zobacz artykuł w portalu dziennika inspekcji.
Uwaga
Konta usługi Premium Storage nie są obsługiwane w przypadku wysyłania dzienników do usługi Azure Storage za pośrednictwem diagnostyki i ustawień.
W poniższych sekcjach opisano dane wyjściowe dzienników inspekcji mySQL na podstawie typu zdarzenia. W zależności od metody wyjściowej uwzględnione pola i kolejność ich wyświetlania mogą się różnić.
Connection
Właściwości | Opis |
---|---|
TenantId |
Identyfikator dzierżawy |
SourceSystem |
Azure |
TimeGenerated [UTC] |
Sygnatura czasowa zarejestrowania dziennika w formacie UTC |
Type |
Typ dziennika. Zawsze AzureDiagnostics |
SubscriptionId |
Identyfikator GUID subskrypcji, do którego należy serwer |
ResourceGroup |
Nazwa grupy zasobów, do którego należy serwer |
ResourceProvider |
Nazwa dostawcy zasobów. Zawsze MICROSOFT.DBFORMYSQL |
ResourceType |
Servers |
ResourceId |
Adres URI zasobu |
Resource |
Nazwa serwera w wielkim przypadku |
Category |
MySqlAuditLogs |
OperationName |
LogEvent |
LogicalServerName_s |
Nazwa serwera |
event_class_s |
connection_log |
event_subclass_s |
CONNECT , , DISCONNECT CHANGE USER |
connection_id_d |
Unikatowy identyfikator połączenia wygenerowany przez program MySQL |
host_s |
Pusta |
ip_s |
Adres IP klienta nawiązującego połączenie z bazą danych MySQL |
user_s |
Nazwa użytkownika wykonującego zapytanie |
db_s |
Nazwa bazy danych połączonej z |
\_ResourceId |
Adres URI zasobu |
status_d |
Wpis kodu błędu połączenia dla zdarzenia CONNECTIONS_V2. |
Ogólne
Poniższy schemat dotyczy typów zdarzeń OGÓLNE, DML_SELECT, DML_NONSELECT, DML, DDL, DCL i ADMIN.
Uwaga
W przypadku sql_text_s
programu dziennik zostanie obcięty, jeśli przekroczy 2048 znaków.
Właściwości | Opis |
---|---|
TenantId |
Identyfikator dzierżawy |
SourceSystem |
Azure |
TimeGenerated [UTC] |
Sygnatura czasowa zarejestrowania dziennika w formacie UTC |
Type |
Typ dziennika. Zawsze AzureDiagnostics |
SubscriptionId |
Identyfikator GUID subskrypcji, do którego należy serwer |
ResourceGroup |
Nazwa grupy zasobów, do którego należy serwer |
ResourceProvider |
Nazwa dostawcy zasobów. Zawsze MICROSOFT.DBFORMYSQL |
ResourceType |
Servers |
ResourceId |
Adres URI zasobu |
Resource |
Nazwa serwera w wielkim przypadku |
Category |
MySqlAuditLogs |
OperationName |
LogEvent |
LogicalServerName_s |
Nazwa serwera |
event_class_s |
general_log |
event_subclass_s |
LOG , , ERROR RESULT (dostępne tylko dla programu MySQL 5.6) |
event_time |
Czas rozpoczęcia zapytania w znaczniku czasu UTC |
error_code_d |
Kod błędu, jeśli zapytanie nie powiodło się. 0 oznacza brak błędu |
thread_id_d |
Identyfikator wątku, który wykonał zapytanie |
host_s |
Pusta |
ip_s |
Adres IP klienta nawiązującego połączenie z bazą danych MySQL |
user_s |
Nazwa użytkownika wykonującego zapytanie |
sql_text_s |
Pełny tekst zapytania |
\_ResourceId |
Adres URI zasobu |
Dostęp do tabel
Uwaga
W przypadku sql_text_s
programu dziennik zostanie obcięty, jeśli przekroczy 2048 znaków.
Właściwości | Opis |
---|---|
TenantId |
Identyfikator dzierżawy |
SourceSystem |
Azure |
TimeGenerated [UTC] |
Sygnatura czasowa zarejestrowania dziennika w formacie UTC |
Type |
Typ dziennika. Zawsze AzureDiagnostics |
SubscriptionId |
Identyfikator GUID subskrypcji, do którego należy serwer |
ResourceGroup |
Nazwa grupy zasobów, do którego należy serwer |
ResourceProvider |
Nazwa dostawcy zasobów. Zawsze MICROSOFT.DBFORMYSQL |
ResourceType |
Servers |
ResourceId |
Adres URI zasobu |
Resource |
Nazwa serwera w wielkim przypadku |
Category |
MySqlAuditLogs |
OperationName |
LogEvent |
LogicalServerName_s |
Nazwa serwera |
event_class_s |
table_access_log |
event_subclass_s |
READ , INSERT , lub UPDATE DELETE |
connection_id_d |
Unikatowy identyfikator połączenia wygenerowany przez program MySQL |
db_s |
Nazwa bazy danych, do których uzyskiwano dostęp |
table_s |
Nazwa dostępnej tabeli |
sql_text_s |
Pełny tekst zapytania |
\_ResourceId |
Adres URI zasobu |
Analizowanie dzienników w dziennikach usługi Azure Monitor
Po potoku dzienników inspekcji do dzienników usługi Azure Monitor za pomocą dzienników diagnostycznych można przeprowadzić dalszą analizę zdarzeń inspekcji. Poniżej przedstawiono kilka przykładowych zapytań, które ułatwiają rozpoczęcie pracy. Pamiętaj o zaktualizowaniu poniższej nazwy serwera.
Wyświetlanie listy zdarzeń OGÓLNYCH na określonym serwerze
AzureDiagnostics | where Resource == '<your server name>' //Server name must be in Upper case | where Category == 'MySqlAuditLogs' and event_class_s == "general_log" | project TimeGenerated, Resource, event_class_s, event_subclass_s, event_time_t, user_s , ip_s , sql_text_s | order by TimeGenerated asc nulls last
Wyświetl listę CONNECTION_V2 zdarzeń na określonym serwerze,
status_d
kolumna określa kod błędu połączenia klienta napotkany przez aplikację kliencką podczas nawiązywania połączenia.AzureDiagnostics | where Resource == '<your server name>' //Server name must be in Upper case | where Category == 'MySqlAuditLogs' and event_subclass_s == "CONNECT" | project TimeGenerated, Resource, event_class_s, event_subclass_s, user_s, ip_s, status_d | order by TimeGenerated asc nulls last
Wyświetlanie listy zdarzeń POŁĄCZENIA na określonym serwerze
AzureDiagnostics | where Resource == '<your server name>' //Server name must be in Upper case | where Category == 'MySqlAuditLogs' and event_class_s == "connection_log" | project TimeGenerated, Resource, event_class_s, event_subclass_s, event_time_t, user_s , ip_s , sql_text_s | order by TimeGenerated asc nulls last
Podsumowywanie zdarzeń inspekcji na określonym serwerze
AzureDiagnostics | where Resource == '<your server name>' //Server name must be in Upper case | where Category == 'MySqlAuditLogs' | project TimeGenerated, Resource, event_class_s, event_subclass_s, event_time_t, user_s , ip_s , sql_text_s | summarize count() by event_class_s, event_subclass_s, user_s, ip_s
Wykres dystrybucji typów zdarzeń inspekcji na określonym serwerze
AzureDiagnostics | where Resource == '<your server name>' //Server name must be in Upper case | where Category == 'MySqlAuditLogs' | project TimeGenerated, Resource, event_class_s, event_subclass_s, event_time_t, user_s , ip_s , sql_text_s | summarize count() by Resource, bin(TimeGenerated, 5m) | render timechart
Wyświetlanie listy zdarzeń inspekcji we wszystkich wystąpieniach serwera elastycznego usługi Azure Database for MySQL z włączonymi dziennikami diagnostycznymi dla dzienników inspekcji
AzureDiagnostics | where Category == 'MySqlAuditLogs' | project TimeGenerated, Resource, event_class_s, event_subclass_s, event_time_t, user_s , ip_s , sql_text_s | order by TimeGenerated asc nulls last