PDF

Azure-Ressourcenüberwachung mit Telegraf in NetCrunch

Dieses Dokument beschreibt, wie Telegraf konfiguriert wird, um Metriken aus verschiedenen Azure-Ressourcen (z. B. Virtual Machines, Storage Accounts und Datenbanken) zu erfassen und über den Telemetry Node-Endpunkt an NetCrunch zu senden.

Übersicht

Telegraf kann Azure-Ressourcenmetriken mithilfe des Azure Monitor input plugin erfassen. Dadurch können Azure-Ressourcen überwacht werden, ohne dass NetCrunch direkten Netzwerkzugriff auf Azure benötigt.

Die Konfigurationsbeispiele in diesem Dokument verwenden Azure Virtual Machines als Referenz. Das Plugin unterstützt jedoch jeden Azure-Ressourcentyp, der Metriken über die Azure Monitor API bereitstellt.

Unterstützung der Azure-VM-Telemetrie durch NetCrunch

NetCrunch empfängt Daten von Telegraf über einen Telemetry Node REST endpoint. Telemetry Nodes akzeptieren JSON-formatierte Daten und speichern empfangene Werte als Zähler oder Alarmstatus.

Der Endpunkt, seine URL-Struktur und die Autorisierung werden einmalig unter Monitoring with Telegraf beschrieben. Im Folgenden wird vorausgesetzt, dass bereits ein Telemetry Node vorhanden ist – siehe Telemetrieknoten.

Datenfluss

Die Überwachung von Azure-VMs über Telegraf erfolgt nach diesem Ablauf:

  1. Azure Monitor API Query – Telegraf fragt die Azure Monitor API mithilfe von Service-Principal-Anmeldeinformationen nach VM-Metriken ab.
  2. Metric Collection – Azure Monitor gibt die angeforderten Metriken für die angegebene Ressource zurück.
  3. Data Forwarding – Telegraf leitet die erfassten Metriken per HTTP POST an den NetCrunch Telemetry Node weiter.
  4. NetCrunch Processing – Der Telemetry Node ordnet eingehende Metriken zu und speichert sie als Zähler oder Alarmstatus.

Überwachungsmethoden

Das Azure Monitor input plugin unterstützt drei Erfassungsmethoden:

Ressourcenziel

Erfasst Metriken bestimmter Ressourcen anhand ihrer Ressourcen-ID. Diese Methode eignet sich für die Überwachung einzelner Ressourcen.

[[inputs.azure_monitor.resource_target]] resource_id = "resourceGroups/<group>/providers/Microsoft.Compute/virtualMachines/<vm-name>" metrics = ["Percentage CPU", "Available Memory Bytes"] aggregations = ["Average", "Maximum"]

Ressourcengruppenziel

Erfasst Metriken aller Ressourcen eines bestimmten Typs innerhalb einer Ressourcengruppe.

[[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"]

Abonnementziel

Erfasst Metriken aller Ressourcen eines bestimmten Typs im gesamten Abonnement.

[[inputs.azure_monitor.subscription_target]] resource_type = "Microsoft.Compute/virtualMachines" metrics = ["Percentage CPU"] aggregations = ["Average"]

Unterstützte Azure-Ressourcen

Das Azure Monitor plugin kann Metriken von jedem Azure-Ressourcentyp erfassen, der Metriken über die Azure Monitor API bereitstellt. Zu den häufig verwendeten Ressourcentypen gehören:

Compute-Ressourcen

  • 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

Speicherressourcen

  • 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

Datenbankressourcen

  • 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

Netzwerkressourcen

  • 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

Integrationsressourcen

  • Service Bus: Microsoft.ServiceBus/namespaces
  • Event Hub: Microsoft.EventHub/namespaces
  • Event Grid: Microsoft.EventGrid/topics
  • Logic Apps: Microsoft.Logic/workflows

Analytics-Ressourcen

  • Data Factory: Microsoft.DataFactory/factories
  • Stream Analytics: Microsoft.StreamAnalytics/streamingjobs
  • Synapse Analytics: Microsoft.Synapse/workspaces

Überwachungsressourcen

  • Application Insights: Microsoft.Insights/components
  • Log Analytics Workspace: Microsoft.OperationalInsights/workspaces

Eine vollständige Liste der unterstützten Ressourcen und der verfügbaren Metriken finden Sie in der Dokumentation zu den von Azure Monitor unterstützten Metriken.

Azure-Konfiguration

Service Principal erstellen

Das Azure Monitor input plugin erfordert eine Authentifizierung über einen service principal.

  • Registrieren Sie eine Anwendung in Azure Active Directory
  • Erstellen Sie ein Client Secret
  • Weisen Sie der Anwendung auf Abonnement- oder Ressourcengruppenebene die Rolle Monitoring Reader zu

Erforderliche Informationen: - Tenant ID - Client ID - Client Secret - Subscription ID

Telegraf-Konfiguration

Die primäre Konfigurationsdatei ist /etc/telegraf/telegraf.conf.

Grundlegende Konfiguration

[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"

Konfigurationsparameter

Agent-Abschnitt:

  • interval – Häufigkeit der Metrikerfassung
  • flush_interval – Wie häufig Daten an Ausgaben gesendet werden
  • metric_buffer_limit – Maximale Anzahl nicht geschriebener Metriken pro Ausgabe
  • debug – Detaillierte Protokollierung aktivieren
  • quiet – Nachrichten ohne Fehler unterdrücken

Azure Monitor Input:

  • tenant_id – Azure-Tenant-Bezeichner
  • client_id – Client-Bezeichner des Service Principal
  • client_secret – Secret des Service Principal
  • subscription_id – Azure-Abonnementbezeichner
  • resource_id – Vollständiger Azure-Ressourcenbezeichner
  • metrics – Liste der zu erfassenden Metriken
  • aggregations – Methoden zur Datenaggregation (Average, Maximum, Minimum, Total, Count)

HTTP Output:

  • url – NetCrunch Telemetry Node-Endpunkt
  • method – HTTP-Methode (POST)
  • data_format – Ausgabeformat (JSON)
  • content_encoding – Codierungstyp
  • timeout – Zeitüberschreitung der Anforderung
  • headers – HTTP-Header einschließlich des Inhaltstyps

Erfasste Metriken

Das Azure Monitor input plugin erfasst die folgenden VM-Metriken:

CPU-Metriken

  • Percentage CPU – CPU-Auslastung in Prozent

Speichermetriken

  • Available Memory Bytes – Verfügbarer physischer Speicher in Byte

Netzwerkmetriken

  • Network In Total – Gesamtzahl der über alle Netzwerkschnittstellen empfangenen Byte
  • Network Out Total – Gesamtzahl der über alle Netzwerkschnittstellen übertragenen Byte

Datenträger-E/A-Metriken

  • Disk Read Bytes – Pro Sekunde vom Datenträger gelesene Byte
  • Disk Write Bytes – Pro Sekunde auf den Datenträger geschriebene Byte
  • Disk Read Operations/Sec – Lese-IOPS
  • Disk Write Operations/Sec – Schreib-IOPS

Datenträgerwarteschlangenmetriken

  • OS Disk Queue Depth – Tiefe der Datenträgerwarteschlange des Betriebssystems
  • Data Disk Queue Depth – Tiefe der Datenträgerwarteschlange des Datenträgers

Konfigurationsbeispiele für andere Azure-Ressourcen

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"

Überwachung aller VMs in einer Ressourcengruppe

[[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"

Erweiterte Konfiguration

Mehrere Virtual Machines

Überwachen Sie mehrere Azure-VMs:

[[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"]

Mehrere Ausgabeziele

Senden Sie Daten an mehrere NetCrunch-Instanzen:

[[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"

Optimierung der Ressourcennutzung

Für umfangreiche Bereitstellungen:

[agent] interval = "15m" flush_interval = "15m" metric_buffer_limit = 5000 debug = false

Längere Intervalle reduzieren Azure-API-Aufrufe und den Netzwerkverkehr.

Lokale Systemmetriken

Telegraf kann gleichzeitig lokale Systemmetriken vom Host erfassen, auf dem der Agent ausgeführt wird.

Beispiel für eine kombinierte Konfiguration

[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"

Diese Konfiguration erfasst sowohl Azure-VM-Metriken als auch lokale Systemmetriken vom Telegraf-Host.

Anwendungsfälle

Überwachung der Cloud-Infrastruktur

  • Überwachen Sie Azure-Ressourcen aus den Bereichen Compute, Speicher, Datenbanken und Netzwerkdienste, ohne dass eine direkte Netzwerkverbindung von lokalen NetCrunch-Servern zu Azure erforderlich ist.

Hybride Cloud-Umgebungen

  • Erfassen Sie Metriken sowohl von Azure-Ressourcen als auch von lokalen Systemen mithilfe einer einzigen Telegraf-Instanz, die in einem hybriden Netzwerk bereitgestellt wird.

Überwachung mehrerer Abonnements

  • Stellen Sie Telegraf-Agenten bereit, um Ressourcen in mehreren Azure-Abonnements mit unterschiedlichen Service Principals und entsprechenden Berechtigungen zu überwachen.

Überwachung von Ressourcengruppen

  • Überwachen Sie alle Ressourcen eines bestimmten Typs innerhalb einer Ressourcengruppe und schließen Sie automatisch neue Ressourcen ein, sobald diese erstellt werden.

Überwachung mehrerer Ressourcentypen

  • Kombinieren Sie die Überwachung verschiedener Azure-Ressourcentypen (VMs, Datenbanken, Speicher und Netzwerke) in einer einzigen Telegraf-Konfiguration und erhalten Sie so eine zentrale Übersicht.

Kostengünstige Überwachung

  • Reduzieren Sie Azure-API-Kosten, indem Sie Erfassungsintervalle steuern und nur die benötigten Metriken auswählen. Die Azure Monitor API hat ein Leselimit von 12.000 Anforderungen pro Stunde.

Zusammenfassung

Telegraf bietet eine native Integration mit Azure Monitor zur Erfassung von Metriken aus jedem Azure-Ressourcentyp. Das Plugin unterstützt drei Erfassungsmethoden: Ressourcenziel, Ressourcengruppenziel und Abonnementziel. Daten werden zur zentralen Überwachung und Alarmierung an NetCrunch Telemetry Nodes weitergeleitet.

Dieser Ansatz ermöglicht eine umfassende Cloud-Überwachung, ohne dass VPN-Verbindungen oder direkter Netzwerkzugriff von NetCrunch auf Azure erforderlich sind. Das Plugin kann Compute-Ressourcen, Storage Accounts, Datenbanken, Netzwerkdienste und andere Azure-Ressourcen über eine einheitliche Konfiguration überwachen.

Wichtige Funktionen: - Native Integration mit der Azure Monitor API - Unterstützung aller Azure-Ressourcentypen mit bereitgestellten Metriken - Drei Erfassungsmethoden: Ressourcen-, Ressourcengruppen- und Abonnementebene - Konfigurierbare Erfassungsintervalle zur Verwaltung von API-Ratenbegrenzungen - Zentrale Überwachung durch NetCrunch Telemetry Nodes

azureazure monitorcloud infrastructurecloud metricshybrid cloudresource groupservice principaltelegraftelemetryvm monitoring