Requêtes utilisées dans la solution Kubernetes

Les requêtes sont utilisées pour extraire les mesures, les événements, la topologie et les données d'analyse à afficher dans divers panneaux disponibles dans la solution Kubernetes. Certaines requêtes basées sur les journaux, telles que celles relatives au système Kube, à l'état du système d'exploitation, aux événements, au récapitulatif des charges globales, au récapitulatif des noeuds et au récapitulatif des pods, doivent être exécutées dans l'explorateur de journaux, et les autres requêtes sont basées sur des mesures, qui doivent être exécutées dans l'explorateur de mesures.

Rubriques :

Requêtes pour les widgets du panneau de droite

  • Titre du widget : Système Kube

    Onglets : Cluster

    Filtres : Aucun

    Portée : Explorateur de journaux

    Requête :

    '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
  • Titre du widget : Etat du système d'exploitation

    Onglets : Cluster, Noeud

    Filtres : Aucun

    Portée : Explorateur de journaux

    Requête :

    '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
  • Titre du widget : Coeurs de CPU (Utilisés/Allouables)

    Onglets : Cluster, Charge globale, Noeud, Pod

    Filtres : Espace de noms, Charge globale, Noeud

    Portée : Explorateur de mesures

    Requête :

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

    Pour obtenir un exemple de requête avec filtres, reportez-vous à la requête de widget Bande passante réseau.

  • Titre du widget : Mémoire (utilisée/allouable)

    Onglets : Cluster, Charge globale, Noeud, Pod

    Filtres : Espace de noms, Charge globale, Noeud

    Portée : Explorateur de mesures

    Requête :

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

    Pour obtenir un exemple de requête avec filtres, reportez-vous à la requête de widget Bande passante réseau.

  • Titre du widget : Coeurs de CPU utilisés

    Onglets : Cluster, Charge globale, Noeud, Pod

    Filtres : Espace de noms, Charge globale, Noeud

    Portée : Explorateur de mesures

    Requête :

    podCpuUsage[1m]{clusterName = "oke-cw22-ll", namespace = "kube-system", nodeName = "192.0.2.1", podName =~"coredns*"}.mean().grouping().sum()
  • Titre du widget : Bande passante réseau

    Onglets : Cluster, Charge globale, Noeud, Pod

    Filtres : Espace de noms, Charge globale, Noeud

    Portée : Explorateur de mesures

    Requête :

    container_network_receive_bytes_total[5m]{clusterName = "oke-cw22-ll", namespace=~"*", nodeName=~"*", pod=~"kube-proxy*" }.groupBy(interface).rate().filter(x=>x>=0)
    container_network_transmit_bytes_total[5m]{clusterName = "oke-cw22-ll", namespace=~"*", nodeName=~"*", pod=~"kube-proxy*" }.groupBy(interface).rate().filter(x=>x>=0)
  • Titre du widget : Durée de demande de serveur d'API

    Onglets : Cluster, Charge globale, Noeud, Pod

    Filtres : Aucun

    Portée : Explorateur de mesures

    Requête :

    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()
  • Titre du widget : Durée de la demande etcd

    Onglets : Cluster

    Filtres : Aucun

    Portée : Explorateur de mesures

    Requête :

    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()
  • Titre du widget : Demandes du serveur API

    Onglets : Cluster

    Filtres : Aucun

    Portée : Explorateur de mesures

    Requête :

    apiserver_request_total[5m]{clusterName = "oke-cw22-ll"}.groupBy(code).rate().filter(x=>x>=0)
  • Titre du widget : Taille de réponse d'API

    Onglets : Cluster

    Filtres : Aucun

    Portée : Explorateur de mesures

    Requête :

    apiserver_response_sizes_sum[5m]{clusterName = "oke-cw22-ll"}.groupBy(verb).sum() / apiserver_response_sizes_count[5m]{clusterName= "oke-cw22-ll"}.groupBy(verb).sum()
  • Titre du widget : Durée d'exécution de demande d'API

    Onglets : Cluster

    Filtres : Aucun

    Portée : Explorateur de mesures

    Requête :

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

Requêtes pour la table Events

Onglets : Cluster, Charge globale, Noeud, Pod

Filtres : Espace de noms

Portée : Explorateur de journaux

Requête :

'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

Requêtes pour les tables de topologie et de détails de cluster

  • Visualisation : Récapitulatif des charges globales

    Onglets : Charge globale

    Filtres : Espace de noms, Charge globale

    Portée : Explorateur de journaux

    Requête :

    '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
  • Visualisation : Récapitulatif des noeuds

    Onglets : Noeud

    Filtres : Espace de noms, Charge globale, Noeud

    Portée : Explorateur de journaux

    Requête :

    '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)'
  • Visualisation : Récapitulatif de pod

    Onglets : Pod

    Filtres : Espace de noms, Charge globale, Noeud

    Portée : Explorateur de journaux

    Requête :

    '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