Udostępnij przez


Pozyskiwanie danych za pomocą funkcji Fluent Bit w usłudze Azure Data Explorer

Fluent Bit to agent open source, który zbiera dzienniki, metryki i ślady z różnych źródeł. Umożliwia filtrowanie, modyfikowanie i agregowanie danych zdarzeń przed wysłaniem ich do magazynu. Ten artykuł przeprowadzi Cię przez proces wysyłania danych do bazy danych KQL przy użyciu języka Fluent Bit.

W tym artykule pokazano, jak pozyskiwać dane za pomocą Fluent Bit.

Aby uzyskać pełną listę łączników danych, zobacz Omówienie łączników danych.

Wymagania wstępne

Tworzenie jednostki usługi Entra firmy Microsoft

Jednostkę usługi Microsoft Entra można utworzyć za pomocą witryny Azure Portal lub programowo, jak w poniższym przykładzie.

Ta główna jednostka usługi to tożsamość używana przez łącznik do zapisywania danych w tabeli w Kusto. Przyznasz uprawnienia dla tej jednostki usługi w celu uzyskania dostępu do zasobów usługi Kusto.

  1. Zaloguj się do subskrypcji platformy Azure za pomocą interfejsu wiersza polecenia platformy Azure. Następnie uwierzytelnij się w przeglądarce.

    az login
    
  2. Wybierz subskrypcję do hostowania podmiotu zabezpieczeń. Ten krok jest wymagany, gdy masz wiele subskrypcji.

    az account set --subscription YOUR_SUBSCRIPTION_GUID
    
  3. Utwórz jednostkę usługi. W tym przykładzie jednostka usługi nosi nazwę my-service-principal.

    az ad sp create-for-rbac -n "my-service-principal" --role Contributor --scopes /subscriptions/{SubID}
    
  4. Z zwróconych danych JSON skopiuj wartości appId, passwordi tenant do użycia w przyszłości.

    {
      "appId": "00001111-aaaa-2222-bbbb-3333cccc4444",
      "displayName": "my-service-principal",
      "name": "my-service-principal",
      "password": "00001111-aaaa-2222-bbbb-3333cccc4444",
      "tenant": "00001111-aaaa-2222-bbbb-3333cccc4444"
    }
    

Utworzono aplikację Microsoft Entra i jednostkę usługi.

Tworzenie tabeli docelowej

Fluent Bit przekazuje dzienniki w formacie JSON z trzema właściwościami: log (dynamiczny), tag (ciąg) i timestamp (datetime).

Możesz utworzyć tabelę z kolumnami dla każdej z tych właściwości. Alternatywnie, jeśli masz dzienniki ustrukturyzowane, możesz utworzyć tabelę z właściwościami dziennika zamapowanymi na kolumny niestandardowe. Aby dowiedzieć się więcej, wybierz odpowiednią kartę.

Aby utworzyć tabelę dla dzienników przychodzących z poziomu fluent bitu:

  1. Przejdź do środowiska zapytań.

  2. Wybierz bazę danych, w której chcesz utworzyć tabelę.

  3. Uruchom następujące .create table polecenie:

    .create table FluentBitLogs (log:dynamic, tag:string, timestamp:datetime)
    

    Przychodzące właściwości JSON są automatycznie mapowane na poprawną kolumnę.

Udzielanie uprawnień jednostce usługi

Udziel jednostce usługi z Utwórz jednostkę usługi Microsoft Entrauprawnienia roli ingestor bazy danych do pracy z bazą danych. Aby uzyskać więcej informacji, zobacz Przykłady. Zastąp symbol zastępczy DatabaseName nazwą docelowej bazy danych i symbol zastępczy ApplicationID wartością AppId, którą zapisałeś podczas tworzenia inspektora usługi Microsoft Entra.

.add database <DatabaseName> ingestors ('aadapp=<ApplicationID>;<TenantID>')

Konfigurowanie usługi Fluent Bit w celu wysyłania dzienników do tabeli

Aby skonfigurować aplikację Fluent Bit do wysyłania dzienników do tabeli w usłudze Kusto, utwórz tryb klasyczny lub tryb YAML pliku konfiguracji z następującymi właściwościami wyjściowymi:

Pole Opis Wymagane Domyślny
Nazwa/nazwisko Nazwa rurociągu. azure_kusto
identyfikator_najemcy Identyfikator dzierżawy z Utwórz jednostkę usługi Microsoft Entra. ✔️
identyfikator_klienta Identyfikator aplikacji z Utworzenie jednostki usługi Microsoft Entra. ✔️
tajny_klucz_klienta Wartość klucza tajnego klienta (hasło) z Utwórz podmiot usługi Microsoft Entra. ✔️
id_klienta_zarządzanej_tożsamości Identyfikator klienta zarządzanej tożsamości używany do uwierzytelniania. ✔️
punkt odbioru danych Wprowadź wartość zgodnie z opisem dla Ingestion_Endpoint. ✔️
nazwa_bazy_danych Nazwa bazy danych zawierającej tabelę dzienników. ✔️
nazwa_tabeli Nazwa tabeli z Utwórz tabelę docelową. ✔️
odniesienie_do_mapowania_importu Nazwa mapowania pozyskiwania z Utwórz tabelę docelową. Jeśli nie utworzono mapowania pozyskiwania, usuń właściwość z pliku konfiguracji.
klucz_logu Kluczowa nazwa zawartości dziennika. Na przykład log. log
włącz_klucz_tagu W przypadku włączenia tag jest dołączany do danych wyjściowych. On
klucz_tag Kluczowa nazwa tagu. Ignorowane, jeśli include_tag_key ma wartość false. tag
include_time_key Znacznik czasu jest dołączany do danych wyjściowych, jeśli jest włączony. Używa właściwości time_key. On
klucz_czasu Nazwa klucza znacznika czasu w rekordach dziennika. Ignorowane, jeśli include_time_key jest fałszywe. timestamp
czas oczekiwania na połączenie z punktem końcowym przyjmowania Limit czasu oczekiwania na połączenie różnych punktów końcowych Kusto w sekundach. 60
kompresja_włączona Wysyła skompresowany ładunek HTTP (gzip) do usługi Kusto, jeśli jest włączony. true
interwał_odświeżania_zasobów_ingestion Interwał odświeżania zasobów do pozyskiwania danych w punkcie końcowym usługi Kusto w sekundach.
Pracownicy Liczba pracowników do wykonywania operacji czyszczenia dla tego wyniku. 0
buforowanie_włączone Jeśli to ustawienie jest włączone, dane są buforowane na dysku przed przesłaniem do Kusto. Off
ścieżka_buforu Określa lokalizację katalogu, w którym buforowane dane będą przechowywane, jeśli buffering_enabled ma wartość On. /tmp/fluent-bit/azure-kusto/
upload_timeout Określa limit czasu dla przesyłania, jeśli buffering_enabled ma wartość On. Pliki starsze niż ten są przetwarzane, nawet jeśli są poniżej limitu rozmiaru. 30m
rozmiar_pliku_do_przesłania Określa maksymalny rozmiar pliku, który ma zostać przekazany, jeśli buffering_enabled ma wartość On. 200MB
azure_kusto_buffer_key Klucz buforujący w Azure Kusto do identyfikacji wystąpień wtyczek, gdy buffering_enabled jest On. Wymagane dla wielu danych wyjściowych usługi Azure Kusto z buforowaniem. key
maksymalny_rozmiar_katalogu_sklepu Maksymalny rozmiar katalogu, w którym buforowane dane są przechowywane, jeśli buffering_enabled ma wartość On. 8GB
wczesne_usunięcie_pliku_bufora Gdy buffering_enabled jest On, czy wcześnie usunąć buforowany plik po pomyślnym utworzeniu obiektu blob. Off
uogólnij_tag Tworzy pojedynczy plik buforu, gdy buffering_enabled ma wartość On. On
długość_uri_bloba Ustaw długość wygenerowanego adresu URI obiektu blob przed przesłaniem do usługi Kusto. 64
scheduler_max_retries Gdy buffering_enabled jest On, ustaw maksymalną liczbę ponownych prób pozyskiwania za pomocą harmonogramu. 3
usuń_przy_błędzie_max_ładowania Gdy buffering_enabled jest On, czy usunąć plik buforu w przypadku maksymalnych błędów przesyłania. Off
limit czasu operacji I/O Skonfiguruj limit czasu dla operacji we/wy HTTP podczas przesyłania. 60s

Aby wyświetlić przykładowy plik konfiguracji, wybierz odpowiednią kartę:

[SERVICE]
    Daemon Off
    Flush 1
    Log_Level trace
    HTTP_Server On
    HTTP_Listen 0.0.0.0
    HTTP_Port 2020
    Health_Check On

[INPUT]
    Name tail
    Path /var/log/containers/*.log
    Tag kube.*
    Mem_Buf_Limit 1MB
    Skip_Long_Lines On
    Refresh_Interval 10

[OUTPUT]
    [OUTPUT]
    Match *
    Name azure_kusto
    Tenant_Id <app_tenant_id>
    Client_Id <app_client_id>
    Client_Secret <app_secret>
    Ingestion_Endpoint https://ingest-<cluster>.<region>.kusto.windows.net
    Database_Name <database_name>
    Table_Name <table_name>
    Ingestion_Mapping_Reference <mapping_name>
    ingestion_endpoint_connect_timeout <ingestion_endpoint_connect_timeout>
    compression_enabled <compression_enabled>
    ingestion_resources_refresh_interval <ingestion_resources_refresh_interval>
    buffering_enabled On
    upload_timeout 2m
    upload_file_size 125M
    azure_kusto_buffer_key kusto1
    buffer_file_delete_early Off
    unify_tag On
    buffer_dir /var/log/
    store_dir_limit_size 16GB
    blob_uri_length 128
    scheduler_max_retries 3
    delete_on_max_upload_error Off
    io_timeout 60s

Potwierdzanie pozyskiwania danych

  1. Po nadejściu danych w tabeli potwierdź transfer danych, sprawdzając liczbę wierszy:

    FluentBitLogs
    | count
    
  2. Aby wyświetlić przykład danych dziennika, uruchom następujące zapytanie:

    FluentBitLogs
    | take 100