Skip to content

PLGT Stack Query Reference

Last Updated: 2026-01-05


metric_name{label="value"}
OperatorDescriptionExample
=Equal{job="prometheus"}
!=Not equal{job!="test"}
=~Regex match{job=~"prom.*"}
!~Regex not match{job!~"test.*"}

FunctionDescription
sum()Sum all values
avg()Calculate average
min()Find minimum
max()Find maximum
count()Count series
topk(k, ...)Top K values
bottomk(k, ...)Bottom K values

FunctionUse Case
rate()Per-second rate over time range
irate()Instant rate (last two points)
increase()Total increase over range
delta()Difference for gauges

# CPU usage percentage
100 - (avg by(instance) (irate(node_cpu_seconds_total{mode="idle"}[5m])) * 100)
# CPU by mode
sum by(mode) (irate(node_cpu_seconds_total[5m])) * 100
# Load averages
node_load1
node_load5
node_load15

# Container CPU usage (%)
sum(rate(container_cpu_usage_seconds_total{name!=""}[5m])) by (name) * 100
# Container memory usage
container_memory_usage_bytes{name!=""}
# Container memory percentage
(container_memory_usage_bytes{name!=""} / container_spec_memory_limit_bytes{name!=""}) * 100
# Container network receive
rate(container_network_receive_bytes_total{name!=""}[5m])
# Container restart count
increase(container_restart_count{name!=""}[1h])
# Running containers
count(container_last_seen{name!=""})

# High CPU (>80% for 5 minutes)
100 - (avg by(instance) (irate(node_cpu_seconds_total{mode="idle"}[5m])) * 100) > 80
# Low disk space (<20% free)
(node_filesystem_avail_bytes / node_filesystem_size_bytes) * 100 < 20
# High memory (>90%)
(1 - (node_memory_MemAvailable_bytes / node_memory_MemTotal_bytes)) * 100 > 90
# Predict disk full in 24h
predict_linear(node_filesystem_avail_bytes[6h], 24*3600) < 0
# Service down
up == 0

{label="value"} |= "search term"
OperatorDescriptionExample
=Equal{job="nginx"}
!=Not equal{job!="test"}
=~Regex match{job=~"nginx.*"}
!~Regex not match{job!~".*test.*"}

OperatorDescriptionExample
|=Contains{job="syslog"} |= "error"
!=Not contains{job="syslog"} != "debug"
|~Regex match{job="syslog"} |~ "fail(ed|ure)"
!~Regex not match{job="syslog"} !~ "health"

# All logs from a job
{job="containerlogs"}
# Logs containing "error"
{job="syslog"} |= "error"
# Exclude pattern
{job="nginx"} != "health"
# Multiple conditions
{job="syslog"} |= "error" != "expected"
# Case insensitive
{job="syslog"} |~ "(?i)error"

# Count log lines per minute
count_over_time({job="syslog"}[1m])
# Count errors per minute
count_over_time({job="syslog"} |= "error" [1m])
# Rate of errors per second
rate({job="syslog"} |= "error" [5m])
# Bytes per minute
sum(bytes_over_time({job="nginx"}[1m]))
# Top 5 error sources
topk(5, sum by(source) (count_over_time({job="syslog"} |= "error" [1h])))
# Aggregation by label
sum by(level) (count_over_time({job="app"} | json [1h]))

# Probe success (1 = up, 0 = down)
probe_success{job="blackbox-http"}
# All sites that are DOWN
probe_success{job="blackbox-http"} == 0
# Response time (seconds)
probe_http_duration_seconds{job="blackbox-http"}
# HTTP status code
probe_http_status_code{job="blackbox-http"}
# Days until SSL expiry
(probe_ssl_earliest_cert_expiry - time()) / 86400
# Certificates expiring within 30 days
(probe_ssl_earliest_cert_expiry - time()) / 86400 < 30
# SSL certificate issuer
probe_ssl_last_chain_info{job="blackbox-http"}
# DNS lookup time
probe_dns_lookup_time_seconds
# TCP connection time
probe_connect_duration_seconds
# TLS handshake time
probe_tls_handshake_seconds
# Total request duration
probe_http_duration_seconds

{ <attribute> <operator> <value> }
OperatorDescriptionExample
=Equal{ resource.service.name = "api" }
!=Not equal{ status != ok }
=~Regex match{ name =~ "HTTP.*" }
>Greater than{ duration > 1s }
<Less than{ duration < 100ms }

# Find all traces from a service
{ resource.service.name = "my-api" }
# Multiple services
{ resource.service.name =~ "api|frontend" }
# Slow POST requests with errors
{ span.http.method = "POST" && duration > 1s && status = error }
# Database queries taking too long
{ span.db.system = "mysql" && duration > 500ms }
# Traces from specific client
{ resource.client.name = "umdoni-municipality" }

# All Umdoni activity
{job="umdoni-activity"}
# Failed logins
{job="umdoni-activity"} | json | action="Login Failed"
# Successful logins
{job="umdoni-activity"} | json | action="Login"
# Activity by user
{job="umdoni-activity"} | json | username="admin"
# Count failed logins per hour
sum(count_over_time({job="umdoni-activity"} | json | action="Login Failed" [1h]))

metric_name # Basic metric
metric_name{label="value"} # With label filter
rate(metric_name[5m]) # Rate for counters
sum by(label) (metric_name) # Aggregation
metric_name > 80 # Comparison
{job="name"} # Stream selector
{job="name"} |= "search" # Contains filter
{job="name"} | json # Parse JSON
{job="name"} | json | level="error" # Filter parsed
count_over_time({job="name"}[5m]) # Count logs
{ resource.service.name = "api" } # By service
{ duration > 1s } # By duration
{ status = error } # By status
{ span.http.method = "POST" } # By HTTP method
probe_success # Site up/down
probe_http_duration_seconds # Response time
(probe_ssl_earliest_cert_expiry - time()) / 86400 # SSL days left

100 - (avg(irate(node_cpu_seconds_total{mode="idle"}[5m])) * 100)
node_memory_MemTotal_bytes - node_memory_MemAvailable_bytes
sum(rate({job=~".+"} |= "error" [1m]))
count by (name) (container_last_seen{name!=""})

Previous: Troubleshooting Guide