Pozyskiwanie danych z programu Telegraf do usługi Azure Data Explorer
Ważne
Ten łącznik może być używany w analizie czasu rzeczywistego w usłudze Microsoft Fabric. Skorzystaj z instrukcji w tym artykule z następującymi wyjątkami:
- W razie potrzeby utwórz bazy danych, korzystając z instrukcji w temacie Tworzenie bazy danych KQL.
- W razie potrzeby utwórz tabele, korzystając z instrukcji w temacie Tworzenie pustej tabeli.
- Pobierz identyfikatory URI zapytań lub pozyskiwania, korzystając z instrukcji w temacie Copy URI (Kopiowanie identyfikatora URI).
- Uruchamianie zapytań w zestawie zapytań języka KQL.
Usługa Azure Data Explorer obsługuje pozyskiwanie danych z programu Telegraf. Telegraf to lekki, 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 ona powszechnie używana i dobrze obsługiwana przez społeczność open source. Wtyczka danych wyjściowych usługi Azure Data Explorer służy jako łącznik z programu 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, gdzie monitorowana aplikacja lub usługa jest wdrażana lub zdalnie w dedykowanym środowisku obliczeniowym/kontenerze monitorowania.
Obsługiwane metody uwierzytelniania
Wtyczka obsługuje następujące metody uwierzytelniania:
Aplikacje firmy Microsoft Entra z kluczami aplikacji lub certyfikatami.
- Aby uzyskać informacje na temat tworzenia i rejestrowania aplikacji w usłudze Microsoft Entra ID, zobacz Rejestrowanie aplikacji.
- Aby uzyskać informacje na temat jednostek usługi, zobacz Application and service principal objects in Microsoft Entra ID (Obiekty aplikacji i jednostki usługi w identyfikatorze Entra firmy Microsoft).
Tokeny użytkowników firmy Microsoft Entra
- Umożliwia wtyczkom uwierzytelnianie jak użytkownik. Zalecamy używanie tej metody tylko do celów programistycznych.
Token tożsamości usługi zarządzanej (MSI) platformy Azure
- Jest to preferowana metoda uwierzytelniania, jeśli używasz programu Telegraf w środowisku pomocniczym platformy Azure, takim jak Azure Virtual Machines.
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=false
programem , wyznaczony podmiot zabezpieczeń musi mieć co najmniej rolę Ingestor bazy danych.
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, wtyczka zakończy się niepowodzeniem podczas uwierzytelniania.
Aby skonfigurować uwierzytelnianie dla wtyczki, ustaw odpowiednie zmienne środowiskowe dla wybranej metody uwierzytelniania:
Poświadczenia klienta (tokeny aplikacji Firmy Microsoft Entra): identyfikator aplikacji Entra firmy Microsoft i wpis tajny.
AZURE_TENANT_ID
: identyfikator dzierżawy entra firmy Microsoft używany do uwierzytelniania.AZURE_CLIENT_ID
: identyfikator klienta rejestracji aplikacji w dzierżawie.AZURE_CLIENT_SECRET
: klucz tajny klienta wygenerowany dla rejestracji aplikacji.
Certyfikat klienta (tokeny aplikacji Firmy Microsoft Entra): identyfikator aplikacji Entra firmy Microsoft i certyfikat X.509.
AZURE_TENANT_ID
: identyfikator dzierżawy entra firmy Microsoft używany do uwierzytelniania.AZURE_CERTIFICATE_PATH
: ścieżka do pary certyfikatu i klucza prywatnego w formacie PEM lub PFX, który może uwierzytelnić rejestrację aplikacji.AZURE_CERTIFICATE_PASSWORD
: hasło ustawione dla certyfikatu.
Hasło właściciela zasobu (tokeny użytkownika entra firmy Microsoft): użytkownik i hasło firmy Microsoft Entra. Nie zalecamy używania tego typu udzielania. Jeśli potrzebujesz logowania interakcyjnego, użyj nazwy logowania urządzenia.
AZURE_TENANT_ID
: identyfikator dzierżawy entra firmy Microsoft 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 jest agentem opartym na konfiguracji. Aby rozpocząć, 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 (wsadowe). Domyślny typ pozyskiwania jest kolejkowany.
Ważne
Aby korzystać z zarządzanego pozyskiwania danych, należy włączyć pozyskiwanie przesyłania strumieniowego 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ą wyjściową usługi Azure Data Explorer. Dla każdej metody wejściowej istnieje 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 | timestamp | pola |
---|---|---|---|
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ż zebrany obiekt 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:
Bezpośrednie wykonywanie zapytań względem atrybutów JSON: dane JSON można wykonywać w formacie nieprzetworzonym bez 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 zasad aktualizacji.
Użyj zasad aktualizacji: Przekształcanie kolumn 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 danych wejściowych dziennika systemowego
W poniższej tabeli przedstawiono przykładowe dane metryk zebrane przez wtyczkę danych wejściowych usługi Syslog:
name | tags | timestamp | pola |
---|---|---|---|
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 usługą mdsd: dial 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 (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 rozpakuje 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')