23/07/2026

K8s – Promql

Introduction

PromQL de 4 tip veri vardir.

  • String – bildigimiz string ancak kullanilmaz.
  • Scalar – floating point value –> 4.25
  • Instant Vector:
    • Bunu anlamak icin önce ön kavramlari anlamak gerekiyor.
      • Metric : sorguladigimz sey node_cpu_seconds_total, uptime….
      • Label : ayrimi saglayan veri. Hangi node hangi cpu..
      • Metric+Label = Time Series
      • value sorguda dönen deger.
      • TimeStamp
    • Instant vector da zamanda bir andaki veri geliyor.


  • Range Vector:
    • Ayni Instant vector gibi ancak her bir TimeSeries icin biden cok deger getirir.Asagida ki örnekte cpu sorgusu icin 3 dakika boyunca veri toplanir

Selectors & matchers

bir metric ile ilgili sadece tekbir subset grei döndürmek istedigimizde bir cesit filtre olarak kullandigimiz seydir matchers.

  • Label matchers :
    • = –> Label degerine tam örtüsme
    • != –> Label degerinden olmayan
    • =~ –> regex ile uyusan time series
    • !~ –> regex ile uyusmayan time series

Mesela sadece instance1 e ait o metric e ait tüm verileri istedigimiz zaman.

node_cpu_seconds_total{instance="node1"} 

deriz ancak o zaman hem cpu1 hem cpu2 hepsi gelir.

node_cpu_seconds_total{instance="node1", cpu="1",vm="1"}
node_cpu_seconds_total{instance="node1", cpu="2",vm="1"}
node_cpu_seconds_total{instance="node1", cpu="3",vm="1"}
node_cpu_seconds_total{instance="node1", cpu="1",vm="3"}
node_cpu_seconds_total{instance="node1", cpu="1",vm="2"}
node_cpu_seconds_total{instance="node1", cpu="1",vm="1"}
node_cpu_seconds_total{instance="node1", cpu="1",vm="4"}
node_cpu_seconds_total{instance="node1", cpu="1",vm="5"} 

diyelim ki sadece node1 istiyoruz ama cpu1 istemiyoruz o zaman.

node_cpu_seconds_total{instance="node1", cpu!="1"} 

node_cpu_seconds_total{instance="node1", cpu="2",vm="1"}
node_cpu_seconds_total{instance="node1", cpu="3",vm="1"}

yada node ile baslayan ve cpu 1 olmayan herseyi istiyoruz

node_cpu_seconds_total{instance=~"node.*", cpu!="1"} 

node_cpu_seconds_total{instance="node1", cpu="2",vm="1"}
node_cpu_seconds_total{instance="node1", cpu="3",vm="1"}
node_cpu_seconds_total{instance="node2", cpu="2",vm="1"}
node_cpu_seconds_total{instance="node2", cpu="3",vm="1"}
node_cpu_seconds_total{instance="node3", cpu="2",vm="1"}
node_cpu_seconds_total{instance="node3", cpu="3",vm="1"}

eger zaman ile sinirlandirmak istersek

node_cpu_seconds_total{instance="node1"}[2m]

Modifiers

Ancak bazen(hatta cogu zaman) gecmis veriye bakmamiz gerekiyor. Bu durumda offset kullaniyoruz

code_cpu_seconds_total{instance="node1"} offset 2d
code_cpu_seconds_total{instance="node1"} offset 3w
code_cpu_seconds_total{instance="node1"} offset 1h30m

2 gün önceki yada 3 hafta yada 1.5 saat önceki deger gibi.

Ancak bu cok specific degil yani 2 hafta önce ne zaman. Ancak istersek tam istedigimiz ana da götürebiliriz. Bunun icin “@” kullaniyoruz.

code_cpu_seconds_total{instance=”node1″} @1663254524 –> burada ki rakam Unix Timestamp

code_cpu_seconds_total{instance="node1"} @1663254524 offset 5m
code_cpu_seconds_total{instance="node1"} offset 5m @1663254524

Su anda git ondan da 5 dk one git. Iki