Consultas Usadas na Solução Kubernetes

As consultas são usadas para extrair as métricas, eventos, topologia e dados de análise a serem exibidos em vários painéis disponíveis na solução Kubernetes. Algumas das consultas baseadas em log, como as do Kubernetes System, integridade do SO, Eventos, Resumo de Cargas de Trabalho, Resumo do Nó e Resumo do Pod, devem ser executadas no Log Explorer e as outras consultas são baseadas em métricas, que devem ser executadas no Metric Explorer.

Tópicos:

Consultas para os Widgets do Painel Direito na Solução Kubernetes

Sistema Kubernetes

Exibe as métricas gerais de integridade ou desempenho dos componentes críticos do sistema Kubernetes (como kube-apiserver, gerenciador de controladores ou scheduler). Este widget ajuda a garantir que os serviços essenciais do plano de controle operem sem problemas.

Guias: Cluster

Filtros: Nenhum

Escopo: Log Explorer

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

Integridade do sistema operacional

Fornece insights sobre a integridade do sistema operacional nos nós do Kubernetes, geralmente agregando métricas como status de processos de CPU, memória, disco e sistema. Isso garante que o sistema operacional subjacente não se torne um gargalo para cargas de trabalho.

Guias: Cluster,

Filtros: Nenhum

Escopo: Log Explorer

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 da CPU (Usados/Alocáveis)

Este widget exibe a porcentagem de núcleos de CPU atualmente em uso em comparação com o total de núcleos alocáveis em seu ambiente Kubernetes. Ele oferece uma indicação visual rápida da eficiência geral de utilização da CPU em todo o cluster.

Guias: Cluster, Workload, , Pod

Filtros: Namespace, Workload,

Escopo: Explorador de Métricas

Consulta:

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

Para obter um exemplo de consulta com filtros, consulte a consulta de widget Largura de Banda da Rede.

Memória (Usada/Alocável)

Mostra a porcentagem de memória sendo usada em comparação com o total de memória alocável no cluster. Ele ajuda a avaliar a pressão da memória e garantir que as cargas de trabalho tenham recursos de memória suficientes.

Guias: Cluster, Workload, , Pod

Filtros: Namespace, Workload,

Escopo: Explorador de Métricas

Consulta:

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

Para obter um exemplo de consulta com filtros, consulte a consulta de widget Largura de Banda da Rede.

Núcleos da CPU usados

Isso mostra o número absoluto de núcleos de CPU consumidos atualmente pelas cargas de trabalho no seu cluster. O monitoramento ajuda a identificar tendências de consumo de CPU e possíveis pontos de acesso.

Guias: Cluster, Workload, , Pod

Filtros: Namespace, Workload,

Escopo: Explorador de Métricas

Consulta:

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

Memória utilizada

Indica a quantidade total de memória (em unidades KB, MB, GB) atualmente em uso nos recursos do cluster. Isso ajuda a monitorar tendências de memória para planejamento de capacidade e solução de problemas.

Guias: Cluster, Workload, , Pod

Filtros: Namespace, Workload,

Escopo: Explorador de Métricas

Consulta:

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

Rede: recepção de bytes

Exibe a taxa cumulativa ou atual de bytes de rede recebidos pelo cluster ou por um nó/pod específico. Esta métrica ajuda a monitorar o volume de tráfego de rede de entrada. Execute a consulta em relação ao namespace mgmtagent_kubernetes_metrics.

Guias: Cluster, Workload, , Pod

Filtros: Namespace, Workload,

Escopo: Explorador de Métricas

Consulta de Amostra:

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

Rede: transmissão de bytes

Mostra a taxa cumulativa ou atual de bytes de rede transmitidos do cluster ou de um nó/pod específico. Ele ajuda a rastrear o tráfego de saída e possíveis problemas de saída. Execute a consulta em relação ao namespace mgmtagent_kubernetes_metrics.

Guias: Cluster, Workload, , Pod

Filtros: Namespace, Workload,

Escopo: Explorador de Métricas

Consulta de Amostra:

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

Taxa de Presc. do Pacote de Rede

Indica a taxa na qual os pacotes de rede estão sendo recebidos. Isso ajuda a identificar tendências e picos no volume de pacotes de entrada que podem afetar o desempenho da rede. Execute a consulta em relação ao namespace mgmtagent_kubernetes_metrics.

Guias: Cluster, Workload, , Pod

Filtros: Namespace, Workload,

Escopo: Explorador de Métricas

Consulta de Amostra:

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

Rede: Taxa de Transmissão de Pacotes

Mede a taxa de pacotes de rede que estão sendo enviados dos nós ou pods. Ela ajuda a diagnosticar a atividade de rede de saída e a possível saturação. Execute a consulta em relação ao namespace mgmtagent_kubernetes_metrics.

Guias: Cluster, Workload, , Pod

Filtros: Namespace, Workload,

Escopo: Explorador de Métricas

Consulta de Amostra:

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

Rede: Taxa de Queda de Recepção de Pacotes

Mostra a taxa de pacotes de rede de entrada eliminados devido a problemas como congestionamento de rede ou estouro de buffer. Uma alta taxa de queda indica possíveis problemas de rede que exigem atenção. Execute a consulta em relação ao namespace mgmtagent_kubernetes_metrics.

Guias: Cluster, Workload, , Pod

Filtros: Namespace, Workload,

Escopo: Explorador de Métricas

Consulta de Amostra:

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

Rede: Taxa de Eliminação da Transação de Pacotes

Exibe a taxa na qual os pacotes de rede de saída estão sendo eliminados. Valores altos persistentes podem sugerir problemas de buffer de rede, configurações incorretas ou limitações de hardware. Execute a consulta em relação ao namespace mgmtagent_kubernetes_metrics.

Guias: Cluster, Workload, , Pod

Filtros: Namespace, Workload,

Escopo: Explorador de Métricas

Consulta de Amostra:

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

Duração da Solicitação do Servidor da API

Exibe dados estatísticos (média, percentil etc.) sobre quanto tempo as solicitações do servidor de API levam para serem concluídas. Durações maiores podem sinalizar gargalos no servidor de API ou problemas no serviço de backend.

Guias: Cluster, Workload, , Pod

Filtros: Nenhum

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

Duração da Solicitação etcd

Mostra a latência envolvida no processamento de solicitações para o etcd, o armazenamento de chave/valor distribuído que oferece suporte ao Kubernetes. Durações mais altas aqui podem afetar a capacidade de resposta geral do plano de controle.

Guias: Cluster

Filtros: Nenhum

Escopo: 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 Solicitações do Servidor de API

Mostra o número total de solicitações recebidas pelo servidor de API do Kubernetes em um período especificado. Números altos ou pontiagudos podem indicar maior atividade de gerenciamento de cluster ou possíveis problemas, como sobrecargas automatizadas de script.

Guias: Cluster

Filtros: Nenhum

Escopo: Explorador de Métricas

Consulta:

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

Tamanho da Resposta da API

Mede o tamanho das respostas (em bytes) retornadas pelo servidor de API do Kubernetes. Grandes tamanhos de resposta podem afetar a utilização da rede e o desempenho do cliente.

Guias: Cluster

Filtros: Nenhum

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

Duração da Execução da Solicitação de API

Concentra-se no tempo exigido pelo servidor de API para processar e executar solicitações de entrada. O monitoramento ajuda a detectar degradações de desempenho ou servidores de API sobrecarregados.

Guias: Cluster

Filtros: Nenhum

Escopo: 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 da Tabela de Eventos na Solução Kubernetes

Guias: Cluster, Workload, , Pod

Filtros: Namespace

Escopo: Log Explorer

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 da Topologia de Cluster e Tabelas de Detalhes na Solução Kubernetes

Resumo das cargas de trabalho

Guias: Carga de Trabalho

Filtros: Namespace, Workload

Escopo: Log Explorer

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

Resumo de Nó

Guias:

Filtros: Namespace, Workload,

Escopo: Log Explorer

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

Resumo do Pod

Guias: Pod

Filtros: Namespace, Workload,

Escopo: Log Explorer

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