In der Kubernetes-Lösung verwendete Abfragen

Mit den Abfragen werden die Metriken, Ereignisse, Topologie und Analysedaten extrahiert, die in verschiedenen in der Kubernetes-Lösung verfügbaren Bereichen angezeigt werden. Einige logbasierte Abfragen, wie die für Kubernetes-System, BS-Zustand, Ereignisse, Workloads-Übersicht, Knotenübersicht und Podübersicht, müssen im Log Explorer ausgeführt werden. Die anderen Abfragen sind Metriken, die im Metrik-Explorer ausgeführt werden müssen.

Themen:

Abfragen für die richtigen Panel-Widgets in der Kubernetes-Lösung

Kubernetes-System

Zeigt die Gesamtzustands- oder Performancemetriken kritischer Kubernetes-Systemkomponenten an (wie kube-apiserver, Controller Manager oder Scheduler). Dieses Widget trägt dazu bei, dass wesentliche Control-Plane-Dienste reibungslos funktionieren.

Registerkarten: Cluster

Filter: Keine

Geltungsbereich: Log Explorer

Abfrage:

'Component Type' in ('Kubernetes System', 'Kubernetes Control Plane') and Component != null
 | link Time, Component, cluster()
 | rename 'Cluster Sample' as 'Error Sample'
 | eval Error = if(length('Error Sample') > 50, substr('Error Sample', 0, 50) || ' ...', substr('Error Sample', 0, 50))
 | classify correlate = -*, Error Component as Trend
 | timestats name = 'All Issues' sum(Count) as 'Issue Trend'
 | timestats name = 'Potential Issues' sum(Count) as Issues by Component, Error
 | fields -'Potential Issue', -Error

BS-Zustand

Bietet Einblicke in den Zustand des Betriebssystems auf Kubernetes-Knoten und aggregiert häufig Metriken wie CPU-, Speicher-, Datenträger- und Systemprozessstatus. Dadurch wird sichergestellt, dass das zugrunde liegende Betriebssystem nicht zu einem Engpass für Workloads wird.

Registerkarten: Cluster, Knoten

Filter: Keine

Geltungsbereich: Log Explorer

Abfrage:

'Component Type' = 'Linux System' and Component != null and (Label = null or (Label != null and 'Problem Priority' != null))
 | link includenulls = true Time, Node, Component, Label, cluster()
 | stats max('Problem Priority') as 'Problem Priority'
 | where 'Problem Priority' != null or 'Potential Issue' = '1'
 | eval Error = if(length('Cluster Sample') > 30, substr('Cluster Sample', 0, 30) || ' ...', substr('Cluster Sample', 0, 30))
 | classify correlate = -*, Error, Label Component as Trend
 | timestats name = 'All Issues' sum(Count) as 'Issue Trend'
 | timestats name = 'Issues Trend' sum(Count) as Issues by Component, Error, Label, Node
 | fields -'Potential Issue', -Error

CPU-Cores (verwendet/Zuweisbar)

Dieses Widget zeigt den Prozentsatz der derzeit verwendeten CPU-Cores im Vergleich zu den insgesamt zuweisbaren Cores in Ihrer Kubernetes-Umgebung an. Es bietet eine schnelle visuelle Anzeige der gesamten CPU-Auslastungseffizienz in Ihrem Cluster.

Registerkarten: Cluster, Workload, Knoten, Pod

Filter: Namespace, Workload, Knoten

Geltungsbereich: Metrik-Explorer

Abfrage:

clusterCPUUtilization[1m]{clusterName = "k8s_solution_development"}.mean()

Eine Beispielabfrage mit Filtern finden Sie unter Netzwerkbandbreite.

Arbeitsspeicher (verwendet/zuordnungsfähig)

Zeigt den Prozentsatz des belegten Speichers im Vergleich zum gesamten zuweisbaren Speicher im Cluster an. Es hilft dabei, den Speicherdruck zu bewerten und sicherzustellen, dass Workloads über ausreichende Speicherressourcen verfügen.

Registerkarten: Cluster, Workload, Knoten, Pod

Filter: Namespace, Workload, Knoten

Geltungsbereich: Metrik-Explorer

Abfrage:

clusterMemoryUtilization[1m]{clusterName = "k8s_solution_development"}.mean()

Eine Beispielabfrage mit Filtern finden Sie unter Netzwerkbandbreite.

Verwendete CPU-Cores

Hier wird die absolute Anzahl der CPU-Cores angezeigt, die derzeit von Workloads in Ihrem Cluster belegt werden. Durch diese Überwachung können Sie CPU-Auslastungstrends und potenzielle Hotspots identifizieren.

Registerkarten: Cluster, Workload, Knoten, Pod

Filter: Namespace, Workload, Knoten

Geltungsbereich: Metrik-Explorer

Abfrage:

podCpuUsage[1m]{clusterName = "oke-cw22-ll", namespace = "kube-system", nodeName = "192.0.2.1", podName =~"coredns*"}.mean().grouping().sum()

Belegter Arbeitsspeicher

Gibt die Gesamtmenge an Arbeitsspeicher (in Einheiten KB, MB, GB) an, die derzeit in den Clusterressourcen verwendet wird. Auf diese Weise können Sie Speichertrends für die Kapazitätsplanung und Fehlerbehebung überwachen.

Registerkarten: Cluster, Workload, Knoten, Pod

Filter: Namespace, Workload, Knoten

Geltungsbereich: Metrik-Explorer

Abfrage:

podMemoryUsage[1m]{clusterName = "oke-cw22-ll", namespace = "kube-system", nodeName = "192.0.2.1", podName =~"coredns*"}.mean().grouping().sum()

Netzwerk: Empfang in Byte

Zeigt die kumulative oder aktuelle Rate der vom Cluster oder einem bestimmten Knoten/Pod empfangenen Netzwerkbytes an. Mit dieser Metrik wird das Volumen des eingehenden Netzwerktraffics überwacht. Führen Sie die Abfrage für den Namespace mgmtagent_kubernetes_metrics aus.

Registerkarten: Cluster, Workload, Knoten, Pod

Filter: Namespace, Workload, Knoten

Geltungsbereich: Metrik-Explorer

Beispielabfrage:

container_network_receive_bytes_total[1m]{clusterName=“oke-cw22-ll“}.groupBy(interface).rate().filter(x=>x>=0)

Netzwerk: Übertragung in Byte

Zeigt die kumulative oder aktuelle Rate der vom Cluster oder einem bestimmten Knoten/Pod übertragenen Netzwerkbytes an. Es hilft, ausgehenden Traffic und potenzielle Egress-Probleme zu verfolgen. Führen Sie die Abfrage für den Namespace mgmtagent_kubernetes_metrics aus.

Registerkarten: Cluster, Workload, Knoten, Pod

Filter: Namespace, Workload, Knoten

Geltungsbereich: Metrik-Explorer

Beispielabfrage:

container_network_transmit_bytes_total[1m]{clusterName=“oke-cw22-ll“}.groupBy(interface).rate().filter(x=>x>=0)

Netzwerkpaket: Paketempfangsrate

Gibt die Rate an, mit der Netzwerkpakete empfangen werden. Auf diese Weise können Trends und Spitzen im eingehenden Paket-Volume identifiziert werden, die sich auf die Netzwerkperformance auswirken können. Führen Sie die Abfrage für den Namespace mgmtagent_kubernetes_metrics aus.

Registerkarten: Cluster, Workload, Knoten, Pod

Filter: Namespace, Workload, Knoten

Geltungsbereich: Metrik-Explorer

Beispielabfrage:

container_network_receive_packets_total[1m]{clusterName=“oke-cw22-ll“}.groupBy(interface).rate().filter(x=>x>=0)

Netzwerk: Paketübertragungsrate

Misst die Rate der Netzwerkpakete, die von den Knoten oder Pods gesendet werden. Es hilft bei der Diagnose ausgehender Netzwerkaktivitäten und möglicher Sättigung. Führen Sie die Abfrage für den Namespace mgmtagent_kubernetes_metrics aus.

Registerkarten: Cluster, Workload, Knoten, Pod

Filter: Namespace, Workload, Knoten

Geltungsbereich: Metrik-Explorer

Beispielabfrage:

container_network_receive_packets_dropped_total[1m]{clusterName=“oke-cw22-ll“}.groupBy(interface).rate().filter(x=>x>=0)

Netzwerk: Löschrate für Paketempfang

Zeigt die Rate der eingehenden Netzwerkpakete an, die aufgrund von Problemen wie Netzwerküberlastung oder Pufferüberlauf gelöscht wurden. Eine hohe Drop-Rate weist auf potenzielle Netzwerkprobleme hin, die Aufmerksamkeit erfordern. Führen Sie die Abfrage für den Namespace mgmtagent_kubernetes_metrics aus.

Registerkarten: Cluster, Workload, Knoten, Pod

Filter: Namespace, Workload, Knoten

Geltungsbereich: Metrik-Explorer

Beispielabfrage:

“container_network_transmit_packets_total[1m]{clusterName=“oke-cw22-ll“}.groupBy(interface).rate().filter(x=>x>=0)

Netzwerk: Löschrate für Paketübertragung

Zeigt die Rate an, mit der abgehende Netzwerkpakete gelöscht werden. Persistente hohe Werte können Probleme mit dem Netzwerkpuffer, falsche Konfigurationen oder Hardwarebeschränkungen aufzeigen. Führen Sie die Abfrage für den Namespace mgmtagent_kubernetes_metrics aus.

Registerkarten: Cluster, Workload, Knoten, Pod

Filter: Namespace, Workload, Knoten

Geltungsbereich: Metrik-Explorer

Beispielabfrage:

container_network_transmit_packets_dropped_total[1m]{clusterName=“oke-cw22-ll“}.groupBy(interface).rate().filter(x=>x>=0)

API-Serveranforderungsdauer

Zeigt statistische Daten (Durchschnitt, Perzentil usw.) an, wie lange API-Serveranforderungen abgeschlossen werden müssen. Längere Dauer kann API-Serverengpässe oder Backend-Serviceprobleme signalisieren.

Registerkarten: Cluster, Workload, Knoten, Pod

Filter: Keine

Geltungsbereich: Metrik-Explorer

Abfrage:

apiserver_request_duration_seconds_sum[5m]{clusterName = "oke-cw22-ll",verb=~"LIST|GET|PUT|POST|PATCH|DELETE|APPLY"}.groupBy(verb).sum() / apiserver_request_duration_seconds_count[5m]{clusterName = "oke-cw22-ll",verb=~"LIST|GET|PUT|POST|PATCH|DELETE|APPLY"}.groupBy(verb).sum()

etcd-Anforderungsdauer

Zeigt die Latenz bei der Verarbeitung von Anforderungen an etcd an, den verteilten Schlüssel/Wert-Speicher, der Kubernetes unterstützt. Höhere Laufzeiten können die Reaktionsfähigkeit der gesamten Kontrollebene beeinflussen.

Registerkarten: Cluster

Filter: Keine

Geltungsbereich: Metrik-Explorer

Abfrage:

etcd_request_duration_seconds_sum[5m]{clusterName = "oke-cw22-ll"}.groupBy(le).sum()/etcd_request_duration_seconds_count[5m]{clusterName = "oke-cw22-ll"}.groupBy(le).sum()

API-Serveranforderungen gesamt

Zeigt die Gesamtanzahl der Anforderungen an, die der Kubernetes-API-Server über einen bestimmten Zeitraum empfangen hat. Hohe oder stachelige Zahlen können auf eine erhöhte Cluster-Management-Aktivität oder potenzielle Probleme wie automatisierte Skriptüberlastungen hinweisen.

Registerkarten: Cluster

Filter: Keine

Geltungsbereich: Metrik-Explorer

Abfrage:

apiserver_request_total[5m]{clusterName = "oke-cw22-ll"}.groupBy(code).rate().filter(x=>x>=0)

API-Antwortgröße

Misst die Größe der Antworten (in Byte), die vom Kubernetes-API-Server zurückgegeben werden. Große Antwortgrößen können sich auf die Netzwerkauslastung und die Clientperformance auswirken.

Registerkarten: Cluster

Filter: Keine

Geltungsbereich: Metrik-Explorer

Abfrage:

apiserver_response_sizes_sum[5m]{clusterName = "oke-cw22-ll"}.groupBy(verb).sum() / apiserver_response_sizes_count[5m]{clusterName= "oke-cw22-ll"}.groupBy(verb).sum()

API-Anforderungsausführungsdauer

Konzentriert sich auf die Zeit, die der API-Server für die Verarbeitung und Ausführung eingehender Anforderungen benötigt. Durch diese Überwachung können Sie Leistungseinbußen oder überlastete API-Server erkennen.

Registerkarten: Cluster

Filter: Keine

Geltungsbereich: Metrik-Explorer

Abfrage:

apiserver_request_duration_seconds_sum[5m]{clusterName = "oke-cw22-ll", verb=~"LIST|GET|PUT|POST|PATCH|DELETE|APPLY"}.groupBy(verb).sum() / apiserver_request_duration_seconds_count[5m]{clusterName = "oke-cw22-ll", verb=~"LIST|GET|PUT|POST|PATCH|DELETE|APPLY"}.groupBy(verb).sum()

Abfragen für die Ereignistabelle in der Kubernetes-Lösung

Registerkarten: Cluster, Workload, Knoten, Pod

Filter: Namespace

Geltungsbereich: Log Explorer

Abfrage:

'Log Source' = 'Kubernetes Event Object Logs' and 'Kubernetes Event Action' != deleted
 | eval Object = 'Involved Object Kind' || ' - ' || 'Involved Object Name'
 | link includenulls = true Object, 'Event Source Component', Event
 | rename 'Event Source Component' as Component
 | stats latest('Kubernetes Event Action') as Status, unique(Namespace) as Namespace, latest(Reason) as Reason, latest('Event Description') as Message, unique('Event Type') as Type, earliest('First Event Time') as 'First Event Time', latest('Last Event Time') as 'Last Event Time', latest('Event Count') as 'Event Count'
 | eventstats count(Namespace) as Records by Namespace
 | eval Age = 'Last Event Time' - 'First Event Time'
 | createtable name = 'Namespace Summary' select Namespace, Records
 | createtable name = 'Namespace Details' select Namespace, Type, Reason, 'Last Event Time', Age, Message, Object, Component
 | sort Namespace, -'Last Event Time'
 | fields -Event, -'Start Time', -'End Time', -'First Event Time', -Count

Abfragen für die Clustertopologie- und Detailtabellen in Kubernetes-Lösung

Workloads - Übersicht

Registerkarten: Workload

Filter: Namespace, Workload

Geltungsbereich: Log Explorer

Abfrage:

'Log Source' in ('Kubernetes DaemonSet Object Logs', 'Kubernetes Deployment Object Logs', 'Kubernetes CronJob Object Logs', 'Kubernetes Job Object Logs', 'Kubernetes StatefulSet Object Logs')
 | eval Name = if('Log Source' = 'Kubernetes Deployment Object Logs', Deployment, 'Log Source' = 'Kubernetes DaemonSet Object Logs', DaemonSet, 'Log Source' = 'Kubernetes CronJob Object Logs', CronJob, 'Log Source' = 'Kubernetes Job Object Logs', Job, 'Log Source' = 'Kubernetes StatefulSet Object Logs', StatefulSet, null)
 | link Namespace, 'Log Source', Name
 | eval Type = if('Log Source' = 'Kubernetes Deployment Object Logs', literal(Deployment), 'Log Source' = 'Kubernetes DaemonSet Object Logs', literal(DaemonSet), 'Log Source' = 'Kubernetes CronJob Object Logs', literal(CronJob), 'Log Source' = 'Kubernetes Job Object Logs', literal(Job), 'Log Source' = 'Kubernetes StatefulSet Object Logs', literal(StatefulSet), null)
 | addfields [ 'Log Source' = 'Kubernetes Deployment Object Logs'
 | eventstats latest('Available Status') as 'DP Available', latest(Replicas) as 'DP Desired', latest('Ready Replicas') as 'DP Ready', latest('Updated Replicas') as 'DP Updated', latest('Available Replicas') as 'DP Available R', latest('Object Creation Time') as 'DP OCR' by Namespace, Name ], [ 'Log Source' = 'Kubernetes DaemonSet Object Logs'
 | eventstats latest('Desired Number Scheduled') as 'DM Desired', latest('Ready Count') as 'DM Ready', latest('Updated Replicas') as 'DM Updated', latest('Current Scheduled') as 'DM Scheduled', latest('Object Creation Time') as 'DM OCR' by Namespace, Name ], [ 'Log Source' = 'Kubernetes CronJob Object Logs'
 | eventstats latest(Schedule) as 'CR Schedule', latest(Suspend) as 'CR Suspended', latest('Last Schedule Time') as 'CR Last Schedule', latest('Object Creation Time') as 'CR OCR' by Namespace, Name ], [ 'Log Source' = 'Kubernetes Job Object Logs'
 | eventstats latest(Completions) as 'JB Completions', latest(Status) as 'JB Status', latest('Object Creation Time') as 'JB OCR' by Namespace, Name ], [ 'Log Source' = 'Kubernetes StatefulSet Object Logs'
 | eventstats latest(Replicas) as 'SS Replicas', latest('Current Replicas') as 'SS Current Replicas', latest('Desired Replicas') as 'SS Desired Replicas', latest('Ready Replicas') as 'SS Ready Replicas', latest('Object Creation Time') as 'SS OCR' by Namespace, Name ]
 | eval OCR = if('Log Source' = 'Kubernetes Deployment Object Logs', 'DP OCR', 'Log Source' = 'Kubernetes DaemonSet Object Logs', 'DM OCR', 'Log Source' = 'Kubernetes CronJob Object Logs', 'CR OCR', 'Log Source' = 'Kubernetes Job Object Logs', 'JB OCR', 'Log Source' = 'Kubernetes StatefulSet Object Logs', 'SS OCR', null)
 | eval Age = unit('End Time' - OCR, ms) | eval Status = if('Log Source' = 'Kubernetes Deployment Object Logs' and 'DP Available' = true, Available, 'Log Source' = 'Kubernetes DaemonSet Object Logs' and 'DM Desired' = 'DM Ready', Available, 'Log Source' = 'Kubernetes CronJob Object Logs' and 'CR Suspended' = true, Suspended || ' (Last Scheduled: ' || formatDate('CR Last Schedule') || ')', 'Log Source' = 'Kubernetes CronJob Object Logs' and 'CR Suspended' = false, ' Last Scheduled: ' || formatDate('CR Last Schedule'), 'Log Source' = 'Kubernetes Job Object Logs' and 'JB Status' = complete, Complete, 'Log Source' = 'Kubernetes Job Object Logs' and 'JB Status' = failed, Failed, 'Log Source' = 'Kubernetes Job Object Logs', 'JB Status', 'Log Source' = 'Kubernetes StatefulSet Object Logs' and ('SS Desired Replicas' = 'SS Replicas' and 'SS Desired Replicas' = 'SS Ready Replicas'), Available, 'Not Available')
 | createtable name = Workloads select Namespace, Type, Name, Status, Age
 | fields -'DP *', -'DM *', -'JB *', -'SS *', -OCR

Knotenzusammenfassung

Registerkarten: Knoten

Filter: Namespace, Workload, Knoten

Geltungsbereich: Log Explorer

Abfrage:

'Log Source' = 'Kubernetes Node Object Logs'
 | link Node
 | stats latest('Ready Status') as 'Ready Status', latest('Ready Reason') as 'Ready Reason', latest('Disk Pressure Status') as 'Disk Pressure', latest('Memory Pressure Status') as 'Memory Pressure', latest('PID Pressure Status') as 'PID Pressure', latest(Architecture) as Arch, latest('Operating System Image') as 'OS Image', latest('Kernel Version') as Kernel, latest('Container Runtime Version') as 'Container Runtime', latest('Kubelet Version') as Kubelet, latest('KubeProxy Version') as KubeProxy, latest('CPU Allocatable') as 'CPU A', latest('CPU Capacity') as 'CPU C', latest('Memory Allocatable') as 'Memory A', latest('Memory Capacity') as 'Memory C'
 | eval Status = if('Ready Status' = true, Ready, 'Not Ready')
 | eval Issues = if('Disk Pressure' != true and 'Memory Pressure' != true and 'PID Pressure' != true and Status = Ready, 'No Issues', 'Disk Pressure' = true and 'Memory Pressure' = true and 'PID Pressure' = true, 'Low on Disk, Memory and PID', 'Disk Pressure' = true and 'Memory Pressure' = true and 'PID Pressure' != true, 'Low on Disk and Memory', 'Disk Pressure' = true and 'Memory Pressure' != true and 'PID Pressure' = true, 'Low on Disk and PID', 'Disk Pressure' = true and 'Memory Pressure' != true and 'PID Pressure' != true, 'Low on Disk', 'Disk Pressure' != true and 'Memory Pressure' = true and 'PID Pressure' = true, 'Low on Memory and PID', 'Disk Pressure' != true and 'Memory Pressure' = true and 'PID Pressure' != true, 'Low on Memory', 'Disk Pressure' != true and 'Memory Pressure' != true and 'PID Pressure' = true, 'Low on PID', Status = 'Not Ready' and 'Ready Reason' != null, 'Ready Reason', Unknown)
 | eval CPU = 'CPU C' || ' /  ' || 'CPU A' | eval 'Memory (Capacity)' = unit('Memory C', byte)
 | eval 'Memory (Allocatable)' = unit('Memory A', byte)
 | eval Age = unit('Query End Time' - 'End Time', ms)
 | eval 'Kubelet / KubeProxy Versions' = Kubelet || ' / ' || KubeProxy
 | eval OS = 'OS Image' || ' (' || Arch || ') ' || Kernel
 | createtable name = 'Node Summary' select Node as Name, Status, Issues, Age, OS, 'Container Runtime', 'Kubelet / KubeProxy Versions', CPU, 'Memory (Capacity)', 'Memory (Allocatable)'

Podübersicht

Registerkarten: Pod

Filter: Namespace, Workload, Knoten

Geltungsbereich: Log Explorer

Abfrage:

'Log Source' = 'Kubernetes Pod Object Logs'
 | link Pod
 | stats latest('Pod Phase') as Status, latest(Node) as Node, latest(Namespace) as Namespace, latest('Pod IP Address') as 'Pod IP', latest(Controller) as Controller, latest('Controller Kind') as 'Controller Kind', latest('Scheduler Name') as Scheduler
 | createtable name = 'Pod Summary' select Pod as Name, Status, Node, Namespace, 'Pod IP', Controller, 'Controller Kind', Scheduler
 | fields 'End Time' as 'Last Reported', -Count