Query utilizzate nella soluzione Kubernetes

Le query vengono utilizzate per estrarre i dati di metriche, eventi, topologia e analisi da visualizzare in vari pannelli disponibili nella soluzione Kubernetes. Alcune query basate su log, ad esempio quelle per il sistema Kubernetes, lo stato del sistema operativo, gli eventi, il riepilogo dei carichi di lavoro, il riepilogo dei nodi e il riepilogo dei pod, devono essere eseguite in Log Explorer e le altre query sono metriche basate che devono essere eseguite in Metric Explorer.

Argomenti:

Query per i widget di pannello giusti nella soluzione Kubernetes

Sistema Kubernetes

Visualizza le metriche generali dello stato o delle prestazioni dei componenti critici del sistema Kubernetes (ad esempio, kube-apiserver, controller manager o scheduler). Questo widget aiuta a garantire che i servizi essenziali del piano di controllo funzionino senza problemi.

Schede: Cluster

Filtri: nessuno

Ambito: Log Explorer

Query:

'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

Stato del sistema operativo

Fornisce approfondimenti sullo stato del sistema operativo sui nodi Kubernetes, spesso aggregando metriche come CPU, memoria, disco e stati dei processi di sistema. Ciò garantisce che il sistema operativo di base non diventi un punto critico per i carichi di lavoro.

Schede: Cluster, Nodo

Filtri: nessuno

Ambito: Log Explorer

Query:

'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

Memorie centrali CPU (utilizzate/allocabili)

Questo widget visualizza la percentuale di memorie centrali CPU attualmente in uso rispetto alle memorie centrali allocabili totali nell'ambiente Kubernetes. Offre una rapida indicazione visiva dell'efficienza complessiva dell'utilizzo della CPU in tutto il cluster.

Schede: Cluster, Carico di lavoro, Nodo, Pod

Filtri: Spazio di nomi, Carico di lavoro, Nodo

Ambito: Explorer metriche

Query:

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

Per una query di esempio con filtri, vedere la query del widget Larghezza di banda di rete.

Memoria (utilizzata/allocabile)

Mostra la percentuale di memoria utilizzata rispetto alla memoria allocabile totale nel cluster. Consente di valutare la pressione della memoria e garantire che i carichi di lavoro dispongano di risorse di memoria sufficienti.

Schede: Cluster, Carico di lavoro, Nodo, Pod

Filtri: Spazio di nomi, Carico di lavoro, Nodo

Ambito: Explorer metriche

Query:

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

Per una query di esempio con filtri, vedere la query del widget Larghezza di banda di rete.

Memorie centrali CPU usate

Mostra il numero assoluto di memorie centrali CPU attualmente utilizzate dai carichi di lavoro all'interno del cluster. Il monitoraggio aiuta a identificare le tendenze del consumo della CPU e i potenziali hotspot.

Schede: Cluster, Carico di lavoro, Nodo, Pod

Filtri: Spazio di nomi, Carico di lavoro, Nodo

Ambito: Explorer metriche

Query:

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

Memoria usata

Indica la quantità totale di memoria (in unità KB, MB, GB) attualmente in uso nelle risorse del cluster. In questo modo è possibile monitorare gli andamenti della memoria per la pianificazione della capacità e la risoluzione dei problemi.

Schede: Cluster, Carico di lavoro, Nodo, Pod

Filtri: Spazio di nomi, Carico di lavoro, Nodo

Ambito: Explorer metriche

Query:

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

Rete: rx byte

Visualizza la frequenza cumulativa o corrente dei byte di rete ricevuti dal cluster o un nodo/pod specifico. Questa metrica consente di monitorare il volume del traffico di rete in entrata. Eseguire la query sullo spazio di nomi mgmtagent_kubernetes_metrics.

Schede: Cluster, Carico di lavoro, Nodo, Pod

Filtri: Spazio di nomi, Carico di lavoro, Nodo

Ambito: Explorer metriche

Query di esempio:

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

Rete: tx byte

Mostra la frequenza cumulativa o corrente dei byte di rete trasmessi dal cluster o da un nodo/pod specifico. Consente di tenere traccia del traffico in uscita e dei potenziali problemi di uscita. Eseguire la query sullo spazio di nomi mgmtagent_kubernetes_metrics.

Schede: Cluster, Carico di lavoro, Nodo, Pod

Filtri: Spazio di nomi, Carico di lavoro, Nodo

Ambito: Explorer metriche

Query di esempio:

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

Tasso Rx pacchetti di rete

Indica la frequenza di ricezione dei pacchetti di rete. Ciò consente di identificare le tendenze e i picchi nel volume di pacchetti in entrata che possono influire sulle prestazioni della rete. Eseguire la query sullo spazio di nomi mgmtagent_kubernetes_metrics.

Schede: Cluster, Carico di lavoro, Nodo, Pod

Filtri: Spazio di nomi, Carico di lavoro, Nodo

Ambito: Explorer metriche

Query di esempio:

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

Rete: tasso Tx pacchetti

Misura la velocità dei pacchetti di rete inviati dai nodi o dai pod. Aiuta a diagnosticare l'attività di rete in uscita e la possibile saturazione. Eseguire la query sullo spazio di nomi mgmtagent_kubernetes_metrics.

Schede: Cluster, Carico di lavoro, Nodo, Pod

Filtri: Spazio di nomi, Carico di lavoro, Nodo

Ambito: Explorer metriche

Query di esempio:

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

Rete: tasso Rx pacchetti scartati

Mostra la frequenza di eliminazione dei pacchetti di rete in entrata a causa di problemi quali la congestione della rete o l'overflow del buffer. Un tasso di calo elevato indica potenziali problemi di rete che richiedono attenzione. Eseguire la query sullo spazio di nomi mgmtagent_kubernetes_metrics.

Schede: Cluster, Carico di lavoro, Nodo, Pod

Filtri: Spazio di nomi, Carico di lavoro, Nodo

Ambito: Explorer metriche

Query di esempio:

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

Rete: tasso Tx pacchetti di rete scartati

Visualizza la velocità di eliminazione dei pacchetti di rete in uscita. Valori elevati persistenti possono suggerire problemi del buffer di rete, configurazioni errate o limitazioni hardware. Eseguire la query sullo spazio di nomi mgmtagent_kubernetes_metrics.

Schede: Cluster, Carico di lavoro, Nodo, Pod

Filtri: Spazio di nomi, Carico di lavoro, Nodo

Ambito: Explorer metriche

Query di esempio:

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

Durata richiesta API Server

Visualizza i dati statistici (media, percentile e così via) sulla durata del completamento delle richieste del server API. Le durate più lunghe possono segnalare i colli di bottiglia del server API o i problemi del servizio backend.

Schede: Cluster, Carico di lavoro, Nodo, Pod

Filtri: nessuno

Ambito: Explorer metriche

Query:

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()

durata richiesta e così via

Mostra la latenza necessaria per l'elaborazione delle richieste a etcd, l'area di memorizzazione chiave-valore distribuita che esegue il backup di Kubernetes. Le durate più elevate qui possono influenzare la reattività complessiva del piano di controllo.

Schede: Cluster

Filtri: nessuno

Ambito: Explorer metriche

Query:

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()

Totale richieste server API

Mostra il numero totale di richieste ricevute dal server API Kubernetes in un periodo specificato. Numeri elevati o elevati potrebbero indicare un aumento dell'attività di gestione del cluster o potenziali problemi come i sovraccarichi di script automatizzati.

Schede: Cluster

Filtri: nessuno

Ambito: Explorer metriche

Query:

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

Dimensione della risposta API

Misura la dimensione delle risposte (in byte) restituite dal server API Kubernetes. Le risposte di grandi dimensioni possono influire sull'utilizzo della rete e sulle prestazioni del client.

Schede: Cluster

Filtri: nessuno

Ambito: Explorer metriche

Query:

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

Durata esecuzione richiesta API

Si concentra sul tempo richiesto dal server API per elaborare ed eseguire le richieste in entrata. Il monitoraggio consente di rilevare il degrado delle prestazioni o il sovraccarico dei server API.

Schede: Cluster

Filtri: nessuno

Ambito: Explorer metriche

Query:

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()

Query per la tabella Eventi nella soluzione Kubernetes

Schede: Cluster, Carico di lavoro, Nodo, Pod

Filtri: Spazio di nomi

Ambito: Log Explorer

Query:

'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

Query per le tabelle di topologia e dettagli cluster nella soluzione Kubernetes

Riepilogo carichi di lavoro

Schede: Carico di lavoro

Filtri: Spazio di nomi, Carico di lavoro

Ambito: Log Explorer

Query:

'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

Riepilogo nodi

Schede: Nodo

Filtri: Spazio di nomi, Carico di lavoro, Nodo

Ambito: Log Explorer

Query:

'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)'

Riepilogo pod

Schede: Pod

Filtri: Spazio di nomi, Carico di lavoro, Nodo

Ambito: Log Explorer

Query:

'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