Monitorowanie zasobów Azure za pomocą Telegraf w NetCrunch
Ten dokument opisuje sposób konfigurowania Telegraf w celu zbierania metryk z różnych zasobów Azure (takich jak Virtual Machines, Storage Accounts i Databases) oraz wysyłania ich do NetCrunch za pośrednictwem punktu końcowego Telemetry Node.
Omówienie
Telegraf może zbierać metryki zasobów Azure za pomocą Azure Monitor input plugin. Umożliwia to monitorowanie zasobów Azure bez konieczności zapewniania bezpośredniego dostępu sieciowego z NetCrunch do Azure.
Przykłady konfiguracji w tym dokumencie wykorzystują Azure Virtual Machines jako odniesienie, ale wtyczka obsługuje dowolny typ zasobu Azure udostępniający metryki za pośrednictwem Azure Monitor API.
Obsługa telemetrii Azure VM przez NetCrunch
NetCrunch odbiera dane z Telegraf za pośrednictwem punktu końcowego REST Telemetry Node. Węzły Telemetry Node akceptują dane w formacie JSON i zapisują odebrane wartości jako liczniki lub stany alarmów.
Punkt końcowy, format jego adresu URL oraz sposób jego autoryzacji zostały opisane w Monitoring with Telegraf. Wszystkie opisane poniżej czynności zakładają, że Telemetry Node już istnieje — zobacz Węzeł telemetryczny.
Przepływ danych
Monitorowanie Azure VM za pomocą Telegraf przebiega według następującego procesu:
- Azure Monitor API Query — Telegraf wysyła zapytania do Azure Monitor API dotyczące metryk VM, używając poświadczeń service principal.
- Metric Collection — Azure Monitor zwraca żądane metryki dla określonego zasobu.
- Data Forwarding — Telegraf przekazuje zebrane metryki do NetCrunch Telemetry Node za pośrednictwem HTTP POST.
- NetCrunch Processing — Telemetry Node przypisuje identyfikatory przychodzącym metrykom i zapisuje je jako liczniki lub stany alarmów.
Metody monitorowania
Azure Monitor input plugin obsługuje trzy metody zbierania danych:
Resource Target
Zbieranie metryk z określonych zasobów przy użyciu identyfikatora zasobu. Ta metoda jest odpowiednia do monitorowania pojedynczych zasobów.
[[inputs.azure_monitor.resource_target]] resource_id = "resourceGroups/<group>/providers/Microsoft.Compute/virtualMachines/<vm-name>" metrics = ["Percentage CPU", "Available Memory Bytes"] aggregations = ["Average", "Maximum"]
Resource Group Target
Zbieranie metryk ze wszystkich zasobów określonego typu w ramach grupy zasobów.
[[inputs.azure_monitor.resource_group_target]] resource_group = "production-rg"[[inputs.azure_monitor.resource_group_target.resource]] resource_type = "Microsoft.Compute/virtualMachines" metrics = ["Percentage CPU", "Available Memory Bytes"] aggregations = ["Average"]
Subscription Target
Zbieranie metryk ze wszystkich zasobów określonego typu w ramach całej subskrypcji.
[[inputs.azure_monitor.subscription_target]] resource_type = "Microsoft.Compute/virtualMachines" metrics = ["Percentage CPU"] aggregations = ["Average"]
Obsługiwane zasoby Azure
Azure Monitor plugin może zbierać metryki z dowolnego typu zasobu Azure, który udostępnia metryki za pośrednictwem Azure Monitor API. Typowe typy zasobów obejmują:
Zasoby obliczeniowe
- Virtual Machines:
Microsoft.Compute/virtualMachines - Virtual Machine Scale Sets:
Microsoft.Compute/virtualMachineScaleSets - App Services:
Microsoft.Web/sites - Azure Functions:
Microsoft.Web/sites - Container Instances:
Microsoft.ContainerInstance/containerGroups - Kubernetes Service:
Microsoft.ContainerService/managedClusters
Zasoby magazynowe
- Storage Accounts:
Microsoft.Storage/storageAccounts - Blob Storage:
Microsoft.Storage/storageAccounts/blobServices - File Storage:
Microsoft.Storage/storageAccounts/fileServices - Queue Storage:
Microsoft.Storage/storageAccounts/queueServices - Table Storage:
Microsoft.Storage/StorageAccounts/tableServices
Zasoby baz danych
- SQL Database:
Microsoft.Sql/servers/databases - SQL Managed Instance:
Microsoft.Sql/managedInstances - Cosmos DB:
Microsoft.DocumentDB/databaseAccounts - MySQL Database:
Microsoft.DBforMySQL/servers - PostgreSQL Database:
Microsoft.DBforPostgreSQL/servers - Redis Cache:
Microsoft.Cache/redis
Zasoby sieciowe
- Load Balancer:
Microsoft.Network/loadBalancers - Application Gateway:
Microsoft.Network/applicationGateways - Virtual Network Gateway:
Microsoft.Network/virtualNetworkGateways - ExpressRoute Circuit:
Microsoft.Network/expressRouteCircuits - Public IP Address:
Microsoft.Network/publicIPAddresses - Network Interface:
Microsoft.Network/networkInterfaces
Zasoby integracyjne
- Service Bus:
Microsoft.ServiceBus/namespaces - Event Hub:
Microsoft.EventHub/namespaces - Event Grid:
Microsoft.EventGrid/topics - Logic Apps:
Microsoft.Logic/workflows
Zasoby analityczne
- Data Factory:
Microsoft.DataFactory/factories - Stream Analytics:
Microsoft.StreamAnalytics/streamingjobs - Synapse Analytics:
Microsoft.Synapse/workspaces
Zasoby monitorowania
- Application Insights:
Microsoft.Insights/components - Log Analytics Workspace:
Microsoft.OperationalInsights/workspaces
Pełną listę obsługiwanych zasobów i dostępnych dla nich metryk można znaleźć w dokumentacji dotyczącej obsługiwanych metryk Azure Monitor.
Konfiguracja Azure
Tworzenie service principal
Azure Monitor input plugin wymaga uwierzytelniania za pośrednictwem service principal.
- Zarejestruj aplikację w Azure Active Directory
- Utwórz klucz tajny klienta
- Przypisz aplikacji rolę Monitoring Reader na poziomie subskrypcji lub grupy zasobów
Wymagane informacje: - Tenant ID - Client ID - Client Secret - Subscription ID
Konfiguracja Telegraf
Głównym plikiem konfiguracyjnym jest /etc/telegraf/telegraf.conf.
Podstawowa konfiguracja
[agent] interval = "10m" flush_interval = "10m" metric_buffer_limit = 10000 debug = false quiet = true[[inputs.azure_monitor]] tenant_id = "<your-tenant-id>" client_id = "<your-client-id>" client_secret = "<your-client-secret>" subscription_id = "<your-subscription-id>"
[[inputs.azure_monitor.resource_target]] resource_id = "resourceGroups/<resource-group>/providers/Microsoft.Compute/virtualMachines/<vm-name>"
metrics = [ "Percentage CPU", "Available Memory Bytes", "Network In Total", "Network Out Total", "Disk Read Bytes", "Disk Write Bytes", "Disk Read Operations/Sec", "Disk Write Operations/Sec", "OS Disk Queue Depth", "Data Disk Queue Depth" ] aggregations = ["Average", "Maximum", "Minimum"][[outputs.http]] url = "https://gw.netcrunch.io/tm/v1/SRV-001@sensor01@node100/update" method = "POST" data_format = "json" content_encoding = "identity" [outputs.http.headers] Content-Type = "application/json" timeout = "30s"
Parametry konfiguracji
Sekcja Agent:
interval— częstotliwość zbierania metrykflush_interval— częstotliwość wysyłania danych do wyjśćmetric_buffer_limit— maksymalna liczba niezapisanych metryk przypadających na wyjściedebug— włączanie szczegółowego rejestrowaniaquiet— pomijanie komunikatów innych niż błędy
Azure Monitor Input:
tenant_id— identyfikator dzierżawy Azureclient_id— identyfikator klienta service principalclient_secret— klucz tajny service principalsubscription_id— identyfikator subskrypcji Azureresource_id— pełny identyfikator zasobu Azuremetrics— lista metryk do zebraniaaggregations— metody agregacji danych (Average, Maximum, Minimum, Total, Count)
HTTP Output:
url— punkt końcowy NetCrunch Telemetry Nodemethod— metoda HTTP (POST)data_format— format wyjściowy (JSON)content_encoding— typ kodowaniatimeout— limit czasu żądaniaheaders— nagłówki HTTP, w tym typ zawartości
Zbierane metryki
Azure Monitor input plugin zbiera następujące metryki VM:
Metryki CPU
Percentage CPU— procentowe wykorzystanie CPU
Metryki pamięci
Available Memory Bytes— ilość dostępnej pamięci fizycznej w bajtach
Metryki sieciowe
Network In Total— całkowita liczba bajtów odebranych przez wszystkie interfejsy siecioweNetwork Out Total— całkowita liczba bajtów wysłanych przez wszystkie interfejsy sieciowe
Metryki operacji dyskowych I/O
Disk Read Bytes— liczba bajtów odczytywanych z dysku na sekundęDisk Write Bytes— liczba bajtów zapisywanych na dysku na sekundęDisk Read Operations/Sec— liczba operacji odczytu na sekundęDisk Write Operations/Sec— liczba operacji zapisu na sekundę
Metryki kolejki dyskowej
OS Disk Queue Depth— głębokość kolejki dysku systemu operacyjnegoData Disk Queue Depth— głębokość kolejki dysku danych
Przykłady konfiguracji dla innych zasobów Azure
Azure Storage Account
[[inputs.azure_monitor]] tenant_id = "<your-tenant-id>" client_id = "<your-client-id>" client_secret = "<your-client-secret>" subscription_id = "<your-subscription-id>"[[inputs.azure_monitor.resource_target]] resource_id = "resourceGroups/<rg-name>/providers/Microsoft.Storage/storageAccounts/<storage-account>" metrics = [ "UsedCapacity", "Transactions", "Ingress", "Egress", "SuccessServerLatency", "SuccessE2ELatency", "Availability" ] aggregations = ["Average", "Total"]
[[outputs.http]] url = "https://gw.netcrunch.io/tm/v1/SRV-001@sensor02@node101/update" method = "POST" data_format = "json" content_encoding = "identity" [outputs.http.headers] Content-Type = "application/json"
Azure SQL Database
[[inputs.azure_monitor]] tenant_id = "<your-tenant-id>" client_id = "<your-client-id>" client_secret = "<your-client-secret>" subscription_id = "<your-subscription-id>"[[inputs.azure_monitor.resource_target]] resource_id = "resourceGroups/<rg-name>/providers/Microsoft.Sql/servers/<server>/databases/<database>" metrics = [ "cpu_percent", "physical_data_read_percent", "log_write_percent", "dtu_consumption_percent", "storage_percent", "connection_successful", "connection_failed", "blocked_by_firewall" ] aggregations = ["Average", "Maximum"]
[[outputs.http]] url = "https://gw.netcrunch.io/tm/v1/SRV-001@sensor03@node102/update" method = "POST" data_format = "json" content_encoding = "identity" [outputs.http.headers] Content-Type = "application/json"
Azure Kubernetes Service
[[inputs.azure_monitor]] tenant_id = "<your-tenant-id>" client_id = "<your-client-id>" client_secret = "<your-client-secret>" subscription_id = "<your-subscription-id>"[[inputs.azure_monitor.resource_target]] resource_id = "resourceGroups/<rg-name>/providers/Microsoft.ContainerService/managedClusters/<cluster-name>" metrics = [ "node_cpu_usage_percentage", "node_memory_working_set_percentage", "node_disk_usage_percentage", "node_network_in_bytes", "node_network_out_bytes" ] aggregations = ["Average"]
[[outputs.http]] url = "https://gw.netcrunch.io/tm/v1/SRV-001@sensor04@node103/update" method = "POST" data_format = "json" content_encoding = "identity" [outputs.http.headers] Content-Type = "application/json"
Monitorowanie wszystkich VM w grupie zasobów
[[inputs.azure_monitor]] tenant_id = "<your-tenant-id>" client_id = "<your-client-id>" client_secret = "<your-client-secret>" subscription_id = "<your-subscription-id>"[[inputs.azure_monitor.resource_group_target]] resource_group = "production-rg"
[[inputs.azure_monitor.resource_group_target.resource]] resource_type = "Microsoft.Compute/virtualMachines" metrics = ["Percentage CPU", "Available Memory Bytes", "Network In Total", "Network Out Total"] aggregations = ["Average", "Maximum"][[outputs.http]] url = "https://gw.netcrunch.io/tm/v1/SRV-001@sensor05@node104/update" method = "POST" data_format = "json" content_encoding = "identity" [outputs.http.headers] Content-Type = "application/json"
Konfiguracja zaawansowana
Wiele Virtual Machines
Monitorowanie wielu Azure VM:
[[inputs.azure_monitor]] tenant_id = "<your-tenant-id>" client_id = "<your-client-id>" client_secret = "<your-client-secret>" subscription_id = "<your-subscription-id>"[[inputs.azure_monitor.resource_target]] resource_id = "resourceGroups/rg-prod/providers/Microsoft.Compute/virtualMachines/vm-web-01" metrics = ["Percentage CPU", "Available Memory Bytes"] aggregations = ["Average"]
[[inputs.azure_monitor.resource_target]] resource_id = "resourceGroups/rg-prod/providers/Microsoft.Compute/virtualMachines/vm-db-01" metrics = ["Percentage CPU", "Available Memory Bytes", "Disk Read Bytes", "Disk Write Bytes"] aggregations = ["Average", "Maximum"]
Wiele docelowych miejsc wyjściowych
Wysyłanie danych do wielu instancji NetCrunch:
[[outputs.http]] url = "https://gw.netcrunch.io/tm/v1/SRV-001@sensor01@node100/update" method = "POST" data_format = "json" content_encoding = "identity" [outputs.http.headers] Content-Type = "application/json" timeout = "30s"[[outputs.http]] url = "https://gw.netcrunch.io/tm/v1/SRV-002@sensor02@node200/update" method = "POST" data_format = "json" content_encoding = "identity" [outputs.http.headers] Content-Type = "application/json" timeout = "30s"
Optymalizacja wykorzystania zasobów
W przypadku wdrożeń na dużą skalę:
[agent] interval = "15m" flush_interval = "15m" metric_buffer_limit = 5000 debug = false
Dłuższe interwały zmniejszają liczbę wywołań Azure API i ruch sieciowy.
Metryki systemu lokalnego
Telegraf może jednocześnie zbierać metryki systemu lokalnego z hosta, na którym działa agent.
Przykład konfiguracji łączonej
[agent] interval = "60s" flush_interval = "60s"
# Azure VM metrics[[inputs.azure_monitor]] tenant_id = "<your-tenant-id>" client_id = "<your-client-id>" client_secret = "<your-client-secret>" subscription_id = "<your-subscription-id>"[[inputs.azure_monitor.resource_target]] resource_id = "resourceGroups/rg-prod/providers/Microsoft.Compute/virtualMachines/vm-01" metrics = ["Percentage CPU", "Available Memory Bytes"] aggregations = ["Average"]
# Local system metrics[[inputs.cpu]] percpu = true totalcpu = true[[inputs.mem]]
[[inputs.disk]] ignore_fs = ["tmpfs", "devtmpfs", "devfs"]
[[inputs.diskio]]
[[inputs.net]]
# Send to NetCrunch[[outputs.http]] url = "https://gw.netcrunch.io/tm/v1/SRV-001@sensor01@node100/update" method = "POST" data_format = "json" content_encoding = "identity" [outputs.http.headers] Content-Type = "application/json"
Ta konfiguracja zbiera zarówno metryki Azure VM, jak i metryki systemu lokalnego z hosta Telegraf.
Przypadki użycia
Monitorowanie infrastruktury chmurowej
- Monitorowanie zasobów Azure z obszaru usług obliczeniowych, magazynowych, bazodanowych i sieciowych bez konieczności zapewniania bezpośredniej łączności sieciowej między serwerami NetCrunch działającymi lokalnie a Azure.
Środowiska chmury hybrydowej
- Zbieranie metryk zarówno z zasobów Azure, jak i systemów lokalnych za pomocą pojedynczej instancji Telegraf wdrożonej w sieci hybrydowej.
Monitorowanie wielu subskrypcji
- Wdrażanie agentów Telegraf do monitorowania zasobów w wielu subskrypcjach Azure przy użyciu różnych service principal z odpowiednimi uprawnieniami.
Monitorowanie grup zasobów
- Monitorowanie wszystkich zasobów określonego typu w ramach grupy zasobów, z automatycznym uwzględnianiem nowych zasobów w miarę ich tworzenia.
Monitorowanie wielu typów zasobów
- Łączenie monitorowania różnych typów zasobów Azure (VM, baz danych, magazynów i zasobów sieciowych) w jednej konfiguracji Telegraf w celu zapewnienia scentralizowanego wglądu.
Ekonomiczne monitorowanie
- Ograniczenie kosztów Azure API przez kontrolowanie interwałów zbierania danych i wybieranie tylko wymaganych metryk. Azure Monitor API ma limit odczytu wynoszący 12 000 żądań na godzinę.
Podsumowanie
Telegraf zapewnia natywną integrację z Azure Monitor w celu zbierania metryk z dowolnego typu zasobu Azure. Wtyczka obsługuje trzy metody zbierania danych: resource target, resource group target i subscription target. Dane są przekazywane do NetCrunch Telemetry Nodes w celu scentralizowanego monitorowania i obsługi alarmów.
Takie podejście umożliwia kompleksowe monitorowanie chmury bez konieczności korzystania z połączeń VPN ani zapewniania bezpośredniego dostępu sieciowego z NetCrunch do Azure. Wtyczka może monitorować zasoby obliczeniowe, konta magazynów, bazy danych, usługi sieciowe i inne zasoby Azure za pomocą ujednoliconej konfiguracji.
Najważniejsze możliwości: - Natywna integracja z Azure Monitor API - Obsługa wszystkich typów zasobów Azure udostępniających metryki - Trzy metody zbierania danych: poziom zasobu, grupy zasobów i subskrypcji - Konfigurowalne interwały zbierania danych umożliwiające zarządzanie limitami szybkości API - Scentralizowane monitorowanie za pośrednictwem NetCrunch Telemetry Nodes
- Monitoring with Telegraf
Use Telegraf, the open-source metrics agent, to collect from systems NetCrunch does not poll directly and push the results into NetCrunch as ordinary counters and statuses.
- Monitorowanie Linux Sysctl Filesystem za pomocą Telegraf w NetCrunch
Ten temat wyjaśnia, jak monitorować parametry systemu plików jądra Linux za pomocą Telegraf i wysyłać zebrane metryki do NetCrunch Telemetry Nodes. Wtyczka wejściowa Linux Sysctl Filesystem odczytuje wartości z katalogu proc sys fs i przekazuje je do NetCrunch za pomocą wtyczki wyjściowej HTTP.
- Telemetria MQTT za pośrednictwem Telegraf w NetCrunch
Ten temat wyjaśnia, jak zbierać metryki systemowe publikowane za pośrednictwem MQTT, przetwarzać je przy użyciu Telegraf oraz przekazywać do punktu końcowego NetCrunch Telemetry Node jako dane telemetryczne w formacie JSON.
- Monitorowanie SQL Server za pośrednictwem Telegraf w NetCrunch
Ten temat wyjaśnia, jak skonfigurować Telegraf do zbierania metryk Microsoft SQL Server i przekazywania ich do punktu końcowego NetCrunch Telemetry Node przy użyciu danych telemetrycznych opartych na JSON. Obejmuje konfigurację logowania do SQL Server, parametry połączeń, konfigurację wejścia Telegraf oraz obsługiwane typy metryk.