Udostępnij za pośrednictwem


Śledzenie aktywności bazy danych za pomocą dzienników inspekcji w usłudze Azure Database for MySQL — serwer elastyczny

DOTYCZY: 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 ma znacznego wpływu i zbierana jest minimalna ilość danych.

Domyślnie dzienniki inspekcji są wyłączone. Aby je włączyć, ustaw audit_log_enabled parametr serwera na . 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ść symboli dev* wieloznacznych zawiera wszystkich użytkowników z wpisami rozpoczynającymi się od słowa kluczowego dev , 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ść symbolu stage* wieloznakowego wyklucza wszystkich użytkowników z wpisami rozpoczynającymi się od słowa kluczowego stage , 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 idemouseraudit_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, , DISCONNECTCHANGE 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_sprogramu 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, , ERRORRESULT (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_sprogramu 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 UPDATEDELETE
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
    

Następne kroki