Files
workshop/aula-12/queries/useful-queries.md
ArgoCD Setup 4b92838ac3 aula-12: Victoria Metrics + Grafana via GitOps
Stack completo de observabilidade:
- Victoria Metrics (vmsingle, vmagent, vmalert)
- Grafana com dashboards built-in
- Alertas customizados (PVC, pods, nodes, deployments)
- pvc-autoresizer para expansão automática de volumes
- Queries PromQL documentadas

Instalação via ArgoCD seguindo padrão GitOps da aula-11.
2026-01-08 17:11:28 -03:00

6.2 KiB

Queries PromQL Úteis

Queries prontas para uso no Grafana ou diretamente na API do Victoria Metrics.

Como usar

Via Grafana

  1. Acesse Grafana → Explore
  2. Selecione datasource "VictoriaMetrics"
  3. Cole a query no editor

Via API

# Port-forward
kubectl port-forward -n monitoring svc/vmsingle-vm-victoria-metrics-k8s-stack 8429:8429

# Query
curl "http://localhost:8429/api/v1/query?query=up"

Storage / PVC

Uso de PVC em porcentagem

kubelet_volume_stats_used_bytes / kubelet_volume_stats_capacity_bytes * 100

PVCs acima de 80%

(kubelet_volume_stats_used_bytes / kubelet_volume_stats_capacity_bytes) > 0.8

Espaço disponível por PVC (bytes)

kubelet_volume_stats_available_bytes

Espaço disponível por PVC (GB)

kubelet_volume_stats_available_bytes / 1024 / 1024 / 1024

Inodes disponíveis

kubelet_volume_stats_inodes_free / kubelet_volume_stats_inodes * 100

PVCs que vão encher em 24h (previsão)

predict_linear(kubelet_volume_stats_available_bytes[6h], 24 * 3600) < 0

CPU

CPU por pod (cores)

sum(rate(container_cpu_usage_seconds_total{container!=""}[5m])) by (pod, namespace)

CPU por namespace (cores)

sum(rate(container_cpu_usage_seconds_total{container!=""}[5m])) by (namespace)

CPU por node (%)

100 - (avg by(instance) (rate(node_cpu_seconds_total{mode="idle"}[5m])) * 100)

Top 10 pods por CPU

topk(10, sum(rate(container_cpu_usage_seconds_total{container!=""}[5m])) by (pod, namespace))

Uso de CPU vs Request

sum(rate(container_cpu_usage_seconds_total{container!=""}[5m])) by (pod, namespace)
/
sum(kube_pod_container_resource_requests{resource="cpu"}) by (pod, namespace)

Memória

Memória por pod (bytes)

sum(container_memory_working_set_bytes{container!=""}) by (pod, namespace)

Memória por namespace (GB)

sum(container_memory_working_set_bytes{container!=""}) by (namespace) / 1024 / 1024 / 1024

Memória disponível por node (%)

(node_memory_MemAvailable_bytes / node_memory_MemTotal_bytes) * 100

Top 10 pods por memória

topk(10, sum(container_memory_working_set_bytes{container!=""}) by (pod, namespace))

Uso de memória vs Limit

sum(container_memory_working_set_bytes{container!=""}) by (pod, namespace)
/
sum(kube_pod_container_resource_limits{resource="memory"}) by (pod, namespace)

Pods e Containers

Pods restartando na última hora

sum(increase(kube_pod_container_status_restarts_total[1h])) by (pod, namespace) > 0

Pods não Ready

kube_pod_status_ready{condition="false"}

Pods em CrashLoopBackOff

kube_pod_container_status_waiting_reason{reason="CrashLoopBackOff"}

Pods pendentes

kube_pod_status_phase{phase="Pending"}

Containers OOMKilled

kube_pod_container_status_last_terminated_reason{reason="OOMKilled"}

Total de pods por namespace

sum(kube_pod_info) by (namespace)

Pods por node

sum(kube_pod_info) by (node)

Deployments

Deployments com réplicas indisponíveis

kube_deployment_status_replicas_unavailable > 0

Deployments não atualizados

kube_deployment_status_observed_generation != kube_deployment_metadata_generation

Proporção de réplicas disponíveis

kube_deployment_status_replicas_available / kube_deployment_spec_replicas

Network

Bytes recebidos por pod (rate)

sum(rate(container_network_receive_bytes_total[5m])) by (pod, namespace)

Bytes enviados por pod (rate)

sum(rate(container_network_transmit_bytes_total[5m])) by (pod, namespace)

Erros de rede por interface

sum(rate(node_network_receive_errs_total[5m])) by (instance, device)

Conexões TCP por estado

node_netstat_Tcp_CurrEstab

Nodes

Nodes não Ready

kube_node_status_condition{condition="Ready",status="true"} == 0

Pressão de memória

kube_node_status_condition{condition="MemoryPressure",status="true"} == 1

Pressão de disco

kube_node_status_condition{condition="DiskPressure",status="true"} == 1

Disco disponível por node (%)

(node_filesystem_avail_bytes{fstype!~"tmpfs|overlay"} / node_filesystem_size_bytes{fstype!~"tmpfs|overlay"}) * 100

Load average (1 min)

node_load1

Cluster Overview

Total de pods Running

count(kube_pod_status_phase{phase="Running"})

Total de namespaces

count(kube_namespace_created)

Total de deployments

count(kube_deployment_created)

Total de PVCs

count(kube_persistentvolumeclaim_info)

Idade do cluster (dias)

(time() - min(kube_namespace_created{namespace="kube-system"})) / 86400

Victoria Metrics

Métricas sendo coletadas (por job)

count by (job) ({__name__!=""})

Taxa de ingestão

sum(rate(vm_rows_inserted_total[5m]))

Uso de disco do VM

vm_data_size_bytes

Queries por segundo

sum(rate(vm_http_requests_total{path="/api/v1/query"}[5m]))

Dicas

Filtrar por namespace

# Adicione {namespace="meu-namespace"} a qualquer query
sum(container_memory_working_set_bytes{namespace="gitlab"}) by (pod)

Excluir namespaces de sistema

{namespace!~"kube-system|argocd|monitoring|gitlab"}

Agregar por label

sum by (label_app) (kube_pod_info)

Ordenar resultados

sort_desc(sum(container_memory_working_set_bytes) by (namespace))

Top N

topk(5, sum(rate(container_cpu_usage_seconds_total[5m])) by (pod))

Valor no tempo (offset)

# Valor de 1 hora atrás
container_memory_working_set_bytes offset 1h

Referências