Skip to content

NimTechnology

Trình bày các công nghệ CLOUD một cách dễ hiểu.

  • Kubernetes & Container
    • Docker
    • Kubernetes
      • Ingress
      • Pod
    • Helm Chart
    • OAuth2 Proxy
    • Isito-EnvoyFilter
    • Apache Kafka
      • Kafka
      • Kafka Connect
      • Lenses
    • Vault
    • Longhorn – Storage
    • VictoriaMetrics
    • MetalLB
    • Kong Gateway
  • CI/CD
    • ArgoCD
    • ArgoWorkflows
    • Argo Events
    • Spinnaker
    • Jenkins
    • Harbor
    • TeamCity
    • Git
      • Bitbucket
  • Coding
    • DevSecOps
    • Terraform
      • GCP – Google Cloud
      • AWS – Amazon Web Service
      • Azure Cloud
    • Golang
    • Laravel
    • Python
    • Jquery & JavaScript
    • Selenium
  • Log, Monitor & Tracing
    • DataDog
    • Prometheus
    • Grafana
    • ELK
      • Kibana
      • Logstash
  • BareMetal
    • NextCloud
  • Toggle search form

How to join labels of 2 different metrics on PromQL

Posted on September 8, 2023 By nim No Comments on How to join labels of 2 different metrics on PromQL

Contents

Toggle
  • Look into the situation
    • Look into kube_pod_container_info metrics.
    • Look into windows_container_cpu_usage_seconds_kernelmode

Look into the situation

Đầu tiên chúng ta có 2 metric labels như sau:

Metrics and Labels:

  • windows_container_cpu_usage_seconds_kernelmode: This metric likely represents the total CPU time (in seconds) that a Windows container has spent in kernel mode.
  • kube_pod_container_info: This metric provides information about Kubernetes pods and their containers.

Look into kube_pod_container_info metrics.

With kube_pod_container_info

  1. container_id: A unique ID for the container.
  2. container: The name of the container.
  3. image: The image used by the container.
  4. image_id: A unique ID for the image used by the container.
  5. namespace: The namespace in which the pod resides.
  6. pod: The name of the pod.
  7. container_restart_count: The number of times this container has been restarted.
  8. container_state: The state of the container, e.g., “running”, “waiting”, “terminated”.
  9. node: The node where the pod is running.
  10. pod_ip: The IP address of the pod.
  11. pod_uid: The unique ID of the pod.

Look into windows_container_cpu_usage_seconds_kernelmode

windows_container_cpu_usage_seconds_kernelmode thì có container_id, nhưng lại không có namespace, pod, container
==> Bằng mắt: thì chúng ta không thể nào nhận biết được CPU usage này của container nào.

Từ đây chúng ta lấy namespace, pod, container của kube_pod_container_info sang windows_container_cpu_usage_seconds_kernelmode

Query sẽ là:

windows_container_cpu_usage_seconds_kernelmode * on(container_id) group_left(namespace, pod, container) kube_pod_container_info{container_id!=""}

on(container_id) => This is a join operation. It joins the windows_container_cpu_usage_seconds_kernelmode metric with the kube_pod_container_info metric based on the container_id label.

group_left(namespace, pod, container) ensures that the resulting metric retains the namespace, pod, and container labels from the kube_pod_container_info metric.

kube_pod_container_info được cung cấp bới kube-state-metrics component.

mà trong cluster mình cài 2 kube-state-metrics components:
– kubecost-nimtechnology-staging
– prometheus-nimtechnology-staging
Và khi query mình bị lỗi bên dưới.

The error message you’re seeing is due to a group_left join in a Prometheus query that results in duplicate time series on the right side. This is common when you’re trying to join two metrics on a specific label (in this case, container_id), and the right metric (kube_pod_container_info in your query) has multiple entries with the same container_id.

mình đã sửa bằng cách: extra the Query: app_kubernetes_io_instance=”prometheus-nimtechnology-staging”

windows_container_cpu_usage_seconds_kernelmode * on(container_id) group_left(namespace, pod, container) kube_pod_container_info{app_kubernetes_io_instance="prometheus-nimtechnology-staging",container_id!=""}

Giờ chart trên grafana:
https://github.com/prometheus-community/windows_exporter/blob/master/docs/collector.container.md

windows_container_cpu_usage_seconds_total có type là counter

chart nó cứ tăng dần
windows_container_cpu_usage_seconds_kernelmode * on(container_id) group_left(namespace, pod, container) kube_pod_container_info{app_kubernetes_io_instance="prometheus-nimtechnology-staging",container_id!=""}

Tiếp theo mình sẽ sử dụng rate để vẻ bảng chart.

rate(windows_container_cpu_usage_seconds_kernelmode * on(container_id) group_left(namespace, pod, container) kube_pod_container_info{app_kubernetes_io_instance="prometheus-nimtechnology-staging",container_id!=""}[1m])
chart khi có rate(…[1m]) thì nó lại bị spike

https://stackoverflow.com/questions/34923788/prometheus-convert-cpu-user-seconds-to-cpu-usage
mình giảm 1m -> 30s

rate(windows_container_cpu_usage_seconds_kernelmode * on(container_id) group_left(namespace, pod, container) kube_pod_container_info{app_kubernetes_io_instance="prometheus-nimtechnology-staging",container_id!=""}[30])
So nice

Ngoài ra bạn có thể coi video bên dưới để có nhiều query monitor container.

Prometheus

Post navigation

Previous Post: [Python] Look into FastAPI to contribute backend by Python
Next Post: [DevSecOps] Mutation testing

More Related Articles

[Prometheus] Prometheus to use monitoring k8s Prometheus
[Monitoring] How to monitor EBS on AWS via Prometheus AWS - Amazon Web Service
[DataDog] How does DataDog collect metrics from the Prometheus exporter endpoint DataDog
[VictoriaMetrics/Grafana/Prometheus/Kiali] VictoriaMetrics is a fast, cost-effective and scalable time series database Grafana
[Kubernetes] Monitor Persistent Volume usage in Kubernetes using Prometheus Prometheus
[Grafana] Draw table visualization in Grafana Prometheus

Leave a Reply Cancel reply

Your email address will not be published. Required fields are marked *

Tham Gia Group DevOps nhé!
Để Nim có nhiều động lực ra nhiều bài viết.
Để nhận được những thông báo mới nhất.

Recent Posts

  • [Laravel] Laravel Helpful June 26, 2025
  • [VScode] Hướng dẫn điều chỉnh font cho terminal June 20, 2025
  • [WordPress] Hướng dấn gửi mail trên WordPress thông qua gmail. June 15, 2025
  • [Bitbucket] Git Clone/Pull/Push with Bitbucket through API Token. June 12, 2025
  • [Teamcity] How to transfer the value from pipeline A to pipeline B June 9, 2025

Archives

  • June 2025
  • May 2025
  • April 2025
  • March 2025
  • February 2025
  • January 2025
  • December 2024
  • November 2024
  • October 2024
  • September 2024
  • August 2024
  • July 2024
  • June 2024
  • May 2024
  • April 2024
  • March 2024
  • February 2024
  • January 2024
  • December 2023
  • November 2023
  • October 2023
  • September 2023
  • August 2023
  • July 2023
  • June 2023
  • May 2023
  • April 2023
  • March 2023
  • February 2023
  • January 2023
  • December 2022
  • November 2022
  • October 2022
  • September 2022
  • August 2022
  • July 2022
  • June 2022
  • May 2022
  • April 2022
  • March 2022
  • February 2022
  • January 2022
  • December 2021
  • November 2021
  • October 2021
  • September 2021
  • August 2021
  • July 2021
  • June 2021

Categories

  • BareMetal
    • NextCloud
  • CI/CD
    • Argo Events
    • ArgoCD
    • ArgoWorkflows
    • Git
      • Bitbucket
    • Harbor
    • Jenkins
    • Spinnaker
    • TeamCity
  • Coding
    • DevSecOps
    • Golang
    • Jquery & JavaScript
    • Laravel
    • NextJS 14 & ReactJS & Type Script
    • Python
    • Selenium
    • Terraform
      • AWS – Amazon Web Service
      • Azure Cloud
      • GCP – Google Cloud
  • Kubernetes & Container
    • Apache Kafka
      • Kafka
      • Kafka Connect
      • Lenses
    • Docker
    • Helm Chart
    • Isito-EnvoyFilter
    • Kong Gateway
    • Kubernetes
      • Ingress
      • Pod
    • Longhorn – Storage
    • MetalLB
    • OAuth2 Proxy
    • Vault
    • VictoriaMetrics
  • Log, Monitor & Tracing
    • DataDog
    • ELK
      • Kibana
      • Logstash
    • Fluent
    • Grafana
    • Prometheus
  • Uncategorized
  • Admin

Copyright © 2025 NimTechnology.