Pozyskiwanie danych z programu Telegraf do usługi Azure Data Explorer

Ważne

Tego łącznika można używać w analizie czasu rzeczywistego w usłudze Microsoft Fabric. Skorzystaj z instrukcji w tym artykule z następującymi wyjątkami:

Usługa Azure Data Explorer obsługuje pozyskiwanie danych z programu Telegraf. Telegraf to open source, lekki, minimalny agent drukowania stóp pamięci do zbierania, przetwarzania i zapisywania danych telemetrycznych, w tym dzienników, metryk i danych IoT. Program Telegraf obsługuje setki wtyczek wejściowych i wyjściowych. Jest powszechnie używany i dobrze wspierany przez społeczność open source. Wtyczka danych wyjściowych usługi Azure Data Explorer służy jako łącznik z aplikacji Telegraf i obsługuje pozyskiwanie danych z wielu typów wtyczek wejściowych do usługi Azure Data Explorer.

Wymagania wstępne

  • Subskrypcja platformy Azure. Utwórz bezpłatne konto platformy Azure.
  • Baza danych i klaster usługi Azure Data Explorer. Utwórz klaster i bazę danych.
  • Telegraf. Hostowanie programu Telegraf na maszynie wirtualnej lub w kontenerze. Program Telegraf może być hostowany lokalnie, gdy monitorowana aplikacja lub usługa jest wdrażana lub zdalnie w dedykowanym monitorze obliczeniowym/kontenerze.

Obsługiwane metody uwierzytelniania

Wtyczka obsługuje następujące metody uwierzytelniania:

Niezależnie od używanej metody wyznaczony podmiot zabezpieczeń musi mieć przypisaną rolę Użytkownika bazy danych w usłudze Azure Data Explorer. Ta rola umożliwia wtyczkom tworzenie tabel wymaganych do pozyskiwania danych. Jeśli wtyczka jest skonfigurowana z create_tables=falseprogramem , wyznaczony podmiot zabezpieczeń musi mieć co najmniej rolę Database Ingestor .

Konfigurowanie metody uwierzytelniania

Wtyczka sprawdza określone konfiguracje zmiennych środowiskowych, aby określić, która metoda uwierzytelniania ma być używana. Konfiguracje są oceniane w określonej kolejności, a pierwsza wykryta konfiguracja jest używana. Jeśli nie zostanie wykryta prawidłowa konfiguracja, uwierzytelnienie wtyczki zakończy się niepowodzeniem.

Aby skonfigurować uwierzytelnianie dla wtyczki, ustaw odpowiednie zmienne środowiskowe dla wybranej metody uwierzytelniania:

  • Poświadczenia klienta (Microsoft Entra tokeny aplikacji): Microsoft Entra identyfikator aplikacji i wpis tajny.

    • AZURE_TENANT_ID: identyfikator dzierżawy Microsoft Entra używany do uwierzytelniania.
    • AZURE_CLIENT_ID: identyfikator klienta rejestracji aplikacji w dzierżawie.
    • AZURE_CLIENT_SECRET: klucz tajny klienta, który został wygenerowany dla rejestracji aplikacji.
  • Certyfikat klienta (Microsoft Entra tokeny aplikacji): Microsoft Entra identyfikator aplikacji i certyfikat X.509.

    • AZURE_TENANT_ID: identyfikator dzierżawy Microsoft Entra używany do uwierzytelniania.
    • AZURE_CERTIFICATE_PATH: ścieżka do certyfikatu i pary kluczy prywatnych w formacie PEM lub PFX, który może uwierzytelniać rejestrację aplikacji.
    • AZURE_CERTIFICATE_PASSWORD: hasło ustawione dla certyfikatu.
  • Hasło właściciela zasobu (Microsoft Entra tokeny użytkownika): Microsoft Entra użytkownika i hasło. Nie zalecamy używania tego typu przyznawania. Jeśli potrzebujesz logowania interakcyjnego, użyj identyfikatora logowania urządzenia.

    • AZURE_TENANT_ID: identyfikator dzierżawy Microsoft Entra używany do uwierzytelniania.
    • AZURE_CLIENT_ID: identyfikator klienta rejestracji aplikacji w dzierżawie.
    • AZURE_USERNAME: nazwa użytkownika, znana również jako upn, konta użytkownika Microsoft Entra.
    • AZURE_PASSWORD: hasło konta użytkownika Microsoft Entra. Należy pamiętać, że nie obsługuje to kont z włączoną usługą MFA.
  • Tożsamość usługi zarządzanej platformy Azure: delegowanie zarządzania poświadczeniami do platformy. Ta metoda wymaga uruchomienia kodu na platformie Azure, na przykład maszyny wirtualnej. Cała konfiguracja jest obsługiwana przez platformę Azure. Aby uzyskać więcej informacji, zobacz Tożsamość usługi zarządzanej platformy Azure. Ta metoda jest dostępna tylko w przypadku korzystania z usługi Azure Resource Manager.

Konfigurowanie programu Telegraf

Telergraf to agent oparty na konfiguracji. Aby rozpocząć pracę, należy zainstalować program Telegraf i skonfigurować wymagane wtyczki wejściowe i wyjściowe. Domyślna lokalizacja pliku konfiguracji jest następująca:

  • Dla systemu Windows: C:\Program Files\Telegraf\telegraf.conf
  • W przypadku systemu Linux: etc/telegraf/telegraf.conf

Aby włączyć wtyczkę danych wyjściowych usługi Azure Data Explorer, należy usunąć komentarz z następującej sekcji w automatycznie wygenerowanych plikach konfiguracji:

[[outputs.azure_data_explorer]]
  ## The URI property of the Azure Data Explorer resource on Azure
  ## ex: https://myadxresource.australiasoutheast.kusto.windows.net
  # endpoint_url = ""

  ## The Azure Data Explorer database that the metrics will be ingested into.
  ## The plugin will NOT generate this database automatically, it's expected that this database already exists before ingestion.
  ## ex: "exampledatabase"
  # database = ""

  ## Timeout for Azure Data Explorer operations, default value is 20 seconds
  # timeout = "20s"

  ## Type of metrics grouping used when ingesting to Azure Data Explorer
  ## Default value is "TablePerMetric" which means there will be one table for each metric
  # metrics_grouping_type = "TablePerMetric"

  ## Name of the single table to store all the metrics (Only needed if metrics_grouping_type is "SingleTable").
  # table_name = ""

  ## Creates tables and relevant mapping if set to true(default).
  ## Skips table and mapping creation if set to false, this is useful for running telegraf with the least possible access permissions i.e. table ingestor role.
  # create_tables = true

Obsługiwane typy pozyskiwania

Wtyczka obsługuje zarządzane (przesyłanie strumieniowe) i pozyskiwanie w kolejce (przetwarzanie wsadowe). Domyślny typ pozyskiwania jest ustawiany w kolejce.

Ważne

Aby korzystać z zarządzanego pozyskiwania danych, należy włączyć pozyskiwanie strumieniowe w klastrze.

Aby skonfigurować typ pozyskiwania dla wtyczki, zmodyfikuj automatycznie wygenerowany plik konfiguracji w następujący sposób:

  ##  Ingestion method to use.
  ##  Available options are
  ##    - managed  --  streaming ingestion with fallback to batched ingestion or the "queued" method below
  ##    - queued   --  queue up metrics data and process sequentially
  # ingestion_type = "queued"

Wykonywanie zapytań dotyczących pozyskanych danych

Poniżej przedstawiono przykłady danych zebranych przy użyciu wtyczek wejściowych SQL i syslog wraz z wtyczką danych wyjściowych usługi Azure Data Explorer. Dla każdej metody wejściowej przedstawiono przykład użycia przekształceń danych i zapytań w usłudze Azure Data Explorer.

Wtyczka danych wejściowych SQL

W poniższej tabeli przedstawiono przykładowe dane metryk zebrane przez wtyczkę danych wejściowych SQL:

name tags sygnatura czasowa fields
sqlserver_database_io {"database_name":"azure-sql-db2","file_type":"DATA","host":"adx-vm","logical_filename":"tempdev","measurement_db_type ":"AzureSQLDB","physical_filename":"tempdb.mdf","replica_updateability":"READ_WRITE","sql_instance":"adx-sql-server"} 2021-09-09T13:51:20Z {"current_size_mb":16,"database_id":2,"file_id":1,"read_bytes":2965504,"read_latency_ms":68,"reads":47," rg_read_stall_ms":42,"rg_write_stall_ms":0,"space_used_mb":0,"write_bytes":1220608,"write_latency_ms":103,"writes":149}
sqlserver_waitstats {"database_name":"azure-sql-db2","host":"adx-vm","measurement_db_type":"AzureSQLDB","replica_updateability":"READ_WRITE","sql_instance":"adx-sql-server","wait_category":"Worker Thread","wait_type":"THREADPOOL"} 2021-09-09T13:51:20Z {"max_wait_time_ms":15,"resource_wait_ms":4469,"signal_wait_time_ms":0,"wait_time_ms":4469,"waiting_tasks_count":1464}

Ponieważ obiekt zebranych metryk jest typem złożonym, pola i kolumny tagów są przechowywane jako dynamiczne typy danych. Istnieje wiele sposobów wykonywania zapytań dotyczących tych danych, na przykład:

  • Wysyłaj zapytania bezpośrednio do atrybutów JSON: dane JSON można wykonywać w nieprzetworzonym formacie bez ich analizowania.

    Przykład 1

    Tablename
    | where name == "sqlserver_azure_db_resource_stats" and todouble(fields.avg_cpu_percent) > 7
    

    Przykład 2

    Tablename
    | distinct tostring(tags.database_name)
    

    Uwaga

    Takie podejście może mieć wpływ na wydajność podczas korzystania z dużych ilości danych. W takich przypadkach należy użyć podejścia do zasad aktualizacji.

  • Użyj zasad aktualizacji: Przekształć kolumny typu danych dynamicznych przy użyciu zasad aktualizacji. Zalecamy takie podejście do wykonywania zapytań dotyczących dużych ilości danych.

    // Function to transform data
    .create-or-alter function Transform_TargetTableName() {
      SourceTableName
      | mv-apply fields on (extend key = tostring(bag_keys(fields)[0]))
      | project fieldname=key, value=todouble(fields[key]), name, tags, timestamp
    }
    
    // Create destination table with above query's results schema (if it doesn't exist already)
    .set-or-append TargetTableName <| Transform_TargetTableName() | take 0
    
    // Apply update policy on destination table
    .alter table TargetTableName policy update
    @'[{"IsEnabled": true, "Source": "SourceTableName", "Query": "Transform_TargetTableName()", "IsTransactional": true, "PropagateIngestionProperties": false}]'
    

Wtyczka wejściowa dziennika systemowego

W poniższej tabeli przedstawiono przykładowe dane metryk zebrane przez wtyczkę danych wejściowych syslog:

name tags sygnatura czasowa fields
syslog {"appname":"azsecmond","facility":"user","host":"adx-linux-vm","hostname":"adx-linux-vm","severity":"info"} 2021-09-20T14:36:44Z {"facility_code":1,"message":" 2021/09/20 14:36:44.890110 Nie można nawiązać połączenia z mdsd: wybieranie numerów unix /var/run/run/mdsd/default_djson.socket: connect: no such file or directory","procid":"2184","severity_code":6,"timestamp":"1632148604890477000","version":1}
syslog {"appname":"CRON","facility":"authpriv","host":"adx-linux-vm","hostname":"adx-linux-vm","severity":"info"} 2021-09-20T14:37:01Z {"facility_code":10,"message":" pam_unix(cron:session): sesja otwarta dla katalogu głównego użytkownika przez użytkownika (uid=0)","procid":"26446","severity_code":6"timestamp":"1632148621120781000","version":1}

Istnieje wiele sposobów spłaszczenia kolumn dynamicznych przy użyciu operatora extend lub wtyczki bag_unpack(). Można ich użyć w funkcji Transform_TargetTableName() zasad aktualizacji.

  • Użyj operatora rozszerzania: zalecamy użycie tego podejścia, ponieważ jest szybsze i niezawodne. Nawet jeśli schemat ulegnie zmianie, nie spowoduje to przerwania zapytań ani pulpitów nawigacyjnych.

    Tablename
    | extend facility_code=toint(fields.facility_code), message=tostring(fields.message), procid= tolong(fields.procid), severity_code=toint(fields.severity_code),
    SysLogTimestamp=unixtime_nanoseconds_todatetime(tolong(fields.timestamp)), version= todouble(fields.version),
    appname= tostring(tags.appname), facility= tostring(tags.facility),host= tostring(tags.host), hostname=tostring(tags.hostname), severity=tostring(tags.severity)
    | project-away fields, tags
    
  • Użyj wtyczki bag_unpack(): to podejście automatycznie rozpakowuje kolumny typu dynamicznego. Zmiana schematu źródłowego może powodować problemy podczas dynamicznego rozszerzania kolumn.

    Tablename
    | evaluate bag_unpack(tags, columnsConflict='replace_source')
    | evaluate bag_unpack(fields, columnsConflict='replace_source')