PDF

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:

  1. Azure Monitor API Query — Telegraf wysyła zapytania do Azure Monitor API dotyczące metryk VM, używając poświadczeń service principal.
  2. Metric Collection — Azure Monitor zwraca żądane metryki dla określonego zasobu.
  3. Data Forwarding — Telegraf przekazuje zebrane metryki do NetCrunch Telemetry Node za pośrednictwem HTTP POST.
  4. 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 metryk
  • flush_interval — częstotliwość wysyłania danych do wyjść
  • metric_buffer_limit — maksymalna liczba niezapisanych metryk przypadających na wyjście
  • debug — włączanie szczegółowego rejestrowania
  • quiet — pomijanie komunikatów innych niż błędy

Azure Monitor Input:

  • tenant_id — identyfikator dzierżawy Azure
  • client_id — identyfikator klienta service principal
  • client_secret — klucz tajny service principal
  • subscription_id — identyfikator subskrypcji Azure
  • resource_id — pełny identyfikator zasobu Azure
  • metrics — lista metryk do zebrania
  • aggregations — metody agregacji danych (Average, Maximum, Minimum, Total, Count)

HTTP Output:

  • url — punkt końcowy NetCrunch Telemetry Node
  • method — metoda HTTP (POST)
  • data_format — format wyjściowy (JSON)
  • content_encoding — typ kodowania
  • timeout — limit czasu żądania
  • headers — 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 sieciowe
  • Network 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 operacyjnego
  • Data 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

azureazure monitorchmura hybrydowagrupa zasobówinfrastruktura chmurowametryki chmurowemonitorowanie vmservice principaltelegraftelemetria