Consultas utilizadas en la solución de Kubernetes

Las consultas se utilizan para extraer los datos de métricas, eventos, topología y análisis para mostrarlos en varios paneles disponibles en la solución de Kubernetes. Algunas de las consultas basadas en logs, como las del sistema de Kubernetes, el estado del sistema operativo, los eventos, el resumen de cargas de trabajo, el resumen de nodos y el resumen de pod, se deben ejecutar en el Explorador de logs y las otras consultas son métricas basadas que se deben ejecutar en el Explorador de métricas.

Temas:

Consultas para los widgets del panel derecho en la solución de Kubernetes

Sistema de Kubernetes

Muestra las métricas generales de estado o rendimiento de los componentes críticos del sistema Kubernetes (como kube-apiserver, gestor de controladores o programador). Este widget ayuda a garantizar que los servicios esenciales del plano de control funcionen sin problemas.

Separadores: Cluster

Filtros: Ninguno

Ámbito: explorador de logs

Consulta:

'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

Estado del SO

Proporciona estadísticas sobre el estado del sistema operativo en los nodos de Kubernetes, a menudo agregando métricas como los estados de CPU, memoria, disco y proceso del sistema. Esto garantiza que el sistema operativo subyacente no se convierta en un cuello de botella para las cargas de trabajo.

Separadores: Cluster, Nodo

Filtros: Ninguno

Ámbito: explorador de logs

Consulta:

'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

núcleos de CPU (utilizados/asignables)

Este widget muestra el porcentaje de núcleos de CPU actualmente en uso en comparación con el total de núcleos asignables en el entorno de Kubernetes. Ofrece una indicación visual rápida de la eficiencia general de utilización de la CPU en todo el cluster.

Separadores: Cluster, Carga de trabajo, Nodo, Pod

Filtros: Espacio de nombres, Carga de trabajo, Nodo

Ámbito: explorador de métricas

Consulta:

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

Para ver un ejemplo de consulta con filtros, consulte la consulta del widget Ancho de banda de red.

Memoria (utilizada/asignable)

Muestra el porcentaje de memoria que se está utilizando en comparación con el total de memoria asignable en el cluster. Ayuda a evaluar la presión de memoria y a garantizar que las cargas de trabajo tengan suficientes recursos de memoria.

Separadores: Cluster, Carga de trabajo, Nodo, Pod

Filtros: Espacio de nombres, Carga de trabajo, Nodo

Ámbito: explorador de métricas

Consulta:

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

Para ver un ejemplo de consulta con filtros, consulte la consulta del widget Ancho de banda de red.

núcleos de CPU usados

Muestra el número absoluto de núcleos de CPU que consumen actualmente las cargas de trabajo del cluster. La supervisión ayuda a identificar las tendencias de consumo de CPU y los posibles puntos críticos.

Separadores: Cluster, Carga de trabajo, Nodo, Pod

Filtros: Espacio de nombres, Carga de trabajo, Nodo

Ámbito: explorador de métricas

Consulta:

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

Memoria utilizada

Indica la cantidad total de memoria (en unidades KB, MB, GB) que se está utilizando actualmente en los recursos del cluster. Esto le ayuda a supervisar las tendencias de memoria para la planificación de la capacidad y la resolución de problemas.

Separadores: Cluster, Carga de trabajo, Nodo, Pod

Filtros: Espacio de nombres, Carga de trabajo, Nodo

Ámbito: explorador de métricas

Consulta:

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

Red: recepción de bytes

Muestra el ratio acumulativo o actual de bytes de red recibidos por el cluster o un nodo/pod específico. Esta métrica ayuda a supervisar el volumen de tráfico de red entrante. Ejecute la consulta en el espacio de nombres mgmtagent_kubernetes_metrics.

Separadores: Cluster, Carga de trabajo, Nodo, Pod

Filtros: Espacio de nombres, Carga de trabajo, Nodo

Ámbito: explorador de métricas

Consulta de ejemplo:

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

Red: transmisión de bytes

Muestra el ratio acumulativo o actual de bytes de red transmitidos desde el cluster o un nodo/pod específico. Ayuda a rastrear el tráfico saliente y los posibles problemas de salida. Ejecute la consulta en el espacio de nombres mgmtagent_kubernetes_metrics.

Separadores: Cluster, Carga de trabajo, Nodo, Pod

Filtros: Espacio de nombres, Carga de trabajo, Nodo

Ámbito: explorador de métricas

Consulta de ejemplo:

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

Velocidad de recepción de paquetes de red

Indica la velocidad a la que se reciben los paquetes de red. Esto ayuda a identificar tendencias y picos en el volumen de paquetes entrantes que pueden afectar el rendimiento de la red. Ejecute la consulta en el espacio de nombres mgmtagent_kubernetes_metrics.

Separadores: Cluster, Carga de trabajo, Nodo, Pod

Filtros: Espacio de nombres, Carga de trabajo, Nodo

Ámbito: explorador de métricas

Consulta de ejemplo:

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

Red: frecuencia de transmisión de paquetes

Mide el ratio de paquetes de red que se envían desde los nodos o pods. Ayuda a diagnosticar la actividad de la red saliente y la posible saturación. Ejecute la consulta en el espacio de nombres mgmtagent_kubernetes_metrics.

Separadores: Cluster, Carga de trabajo, Nodo, Pod

Filtros: Espacio de nombres, Carga de trabajo, Nodo

Ámbito: explorador de métricas

Consulta de ejemplo:

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

Red: frecuencia borrada de recepción de paquetes

Muestra el ratio de paquetes de red entrantes borrados debido a problemas como congestión de red o desbordamiento de buffer. Una alta tasa de caída indica posibles problemas de red que requieren atención. Ejecute la consulta en el espacio de nombres mgmtagent_kubernetes_metrics.

Separadores: Cluster, Carga de trabajo, Nodo, Pod

Filtros: Espacio de nombres, Carga de trabajo, Nodo

Ámbito: explorador de métricas

Consulta de ejemplo:

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

Red: frecuencia borrada de transacción de paquetes

Muestra la velocidad a la que se están descartando los paquetes de red salientes. Los valores altos persistentes pueden sugerir problemas de memoria intermedia de red, configuraciones erróneas o limitaciones de hardware. Ejecute la consulta en el espacio de nombres mgmtagent_kubernetes_metrics.

Separadores: Cluster, Carga de trabajo, Nodo, Pod

Filtros: Espacio de nombres, Carga de trabajo, Nodo

Ámbito: explorador de métricas

Consulta de ejemplo:

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

Duración de solicitud de servidor de API

Muestra datos estadísticos (promedio, percentil, etc.) sobre el tiempo que tardan en completarse las solicitudes del servidor de API. Las duraciones más largas pueden indicar cuellos de botella en el servidor de API o problemas de servicio de backend.

Separadores: Cluster, Carga de trabajo, Nodo, Pod

Filtros: Ninguno

Ámbito: explorador de métricas

Consulta:

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

Duración de solicitud etcd

Muestra la latencia implicada en el procesamiento de solicitudes a etcd, el almacén de clave-valor distribuido que respalda a Kubernetes. Las duraciones más altas aquí pueden afectar la capacidad de respuesta general del plano de control.

Separadores: Cluster

Filtros: Ninguno

Ámbito: explorador de métricas

Consulta:

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

Total de solicitudes de servidor de API

Muestra el número total de solicitudes recibidas por el servidor de API de Kubernetes durante un período especificado. Los números altos o puntiagudos podrían indicar un aumento de la actividad de gestión del cluster o posibles problemas como sobrecargas de scripts automatizadas.

Separadores: Cluster

Filtros: Ninguno

Ámbito: explorador de métricas

Consulta:

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

Tamaño de respuesta de API

Mide el tamaño de las respuestas (en bytes) devueltas por el servidor de API de Kubernetes. Los grandes tamaños de respuesta pueden afectar el uso de la red y el rendimiento del cliente.

Separadores: Cluster

Filtros: Ninguno

Ámbito: explorador de métricas

Consulta:

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

Duración de ejecución de solicitud de API

Se centra en el tiempo que necesita el servidor de API para procesar y ejecutar las solicitudes entrantes. La supervisión ayuda a detectar la degradación del rendimiento o los servidores de API sobrecargados.

Separadores: Cluster

Filtros: Ninguno

Ámbito: explorador de métricas

Consulta:

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

Consultas para la tabla Events de la solución de Kubernetes

Separadores: Cluster, Carga de trabajo, Nodo, Pod

Filtros: Espacio de nombres

Ámbito: explorador de logs

Consulta:

'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

Consultas para las tablas de detalles y topología de cluster en la solución Kubernetes

Resumen Cargas Trabajo

Separadores: Workload

Filtros: Espacio de nombres, Carga de trabajo

Ámbito: explorador de logs

Consulta:

'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

Resumen de Nodos

Separadores: Nodo

Filtros: Espacio de nombres, Carga de trabajo, Nodo

Ámbito: explorador de logs

Consulta:

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

Resumen de pod

Separadores: Pod

Filtros: Espacio de nombres, Carga de trabajo, Nodo

Ámbito: explorador de logs

Consulta:

'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