Comment fonctionne weighted() ?

Chaque requête de métriques possède un ordre d’évaluation standard (consultez la section Anatomie d’une requête pour un bref aperçu). Par exemple, la requête suivante est calculée comme suit : sum:kubernetes.cpu.requests{*} by {kube_container_name}.rollup(avg, 10)

  1. Agrégation temporelle – Additionner les valeurs de chaque série temporelle (définie par une combinaison unique de valeurs de tags) dans le temps pour chaque intervalle de cumul de 10 secondes. Le nombre de combinaisons uniques de valeurs de tags est déterminé par le tag doté de la granularité la plus volatile/élevée, disons container_id, sur ce métrique.
  2. Ensuite, par kube_container_name (agrégation d’espace), prenez la somme de toutes les valeurs moyennes comme valeur représentative unique. Les valeurs additionnées pour chaque kube_container_name dépendent du nombre de container_iduniques qu’il y a pour chaque intervalle de cumul.

La fonction weighted() tient compte de la courte durée de vie des valeurs du tag container_id lorsqu’il est additionné par kube_container_name pour cette métrique de type gauge.

Exemple

Considérons cette requête avec les hypothèses suivantes :
sum:kubernetes_state.pod.uptime{*} by {version}.rollup(avg, 10)

  • L’intervalle dʼenvoi de la métrique de type gauge est défini sur 10 secondes.
  • Un point de données est représenté toutes les 60 secondes.
  • Il existe à tout moment un pod Kubernetes avec 2 versions. Chaque version est étiquetée avec une application et il n’y a toujours qu’une seule version par application.

Les données brutes sur 60 secondes pourraient ressembler à ce qui suit :

Time0s10 s20 s30s40s50s
app:a, version:112NANNANNANNANNAN
app:b, version:1NAN121212NANNAN
app:c, version:1NANNANNANNAN1212
app:d, version:212NANNANNANNANNAN
app:e, version:2NAN161616NANNAN
app:f, version:2NANNANNANNAN1818
  1. Agrégation temporelle - Cumul de données Avec l’agrégation temporelle, nous cumulons les données avec avg (sans pondération), ou avec la moyenne weighted proposée :

    Agrégation temporelle.rollup(avg)Avec .weighted()
    app:a, version:1122.0
    app:b, version:1126.0
    app:c, version:1124.0
    app:d, version:2122.0
    app:e, version:2168.0
    app:f, version:2186.0
  2. Agrégation spatiale Enfin, la métrique est agrégée par version pour obtenir les valeurs finales ci-dessous :

    Agrégation spatiale par version.rollup(avg)Avec .weighted()
    version:13612
    version:24616

La fonction weighted() remédie à tout comportement incohérent avec les tags éphémères en pondérant les valeurs par rapport à leur débit dʼenvoi

Pour aller plus loin

Documentation, liens et articles supplémentaires utiles: