π¦ ClawHub
prometheus-query
by @peintune
Query Prometheus metrics, alerts, and cluster status using PromQL with options for direct URL or Kubernetes port-forward access.
TERMINAL
clawhub install prometheus-queryπ About This Skill
name: prometheus description: Query Prometheus monitoring metrics, alerts, and cluster status. Use when user needs to: (1) Query firing/pending alerts, (2) Check cluster/node/pod status, (3) Get nginx request metrics, (4) Query any PromQL metrics from Prometheus, (5) Monitor system health and performance. Accepts parameters like metric_name, query_type, time_range, prom_url.
Prometheus Monitoring Query
Query metrics, alerts, and cluster status from Prometheus.
Two Access Modes
1. Direct URL Access (Recommended)
Use when Prometheus is accessible via network (cloud service, remote server, etc.):
# Using remote Prometheus URL
python scripts/query_prometheus.py \
--prom-url "https://prometheus.example.com" \
--query "up"Query alerts
python scripts/query_prometheus.py \
--prom-url "https://prometheus.example.com" \
--alerts
2. Kubernetes Port-Forward
Use when Prometheus is only accessible via kubectl:
# Terminal 1: Port-forward Prometheus
kubectl port-forward -n prometheus svc/prometheus 9090:9090Terminal 2: Query metrics
python scripts/query_prometheus.py \
--prom-url "http://localhost:9090" \
--query "up"
Query Script
Use scripts/query_prometheus.py to query metrics:
# Query a specific metric (default: http://localhost:9090)
python scripts/query_prometheus.py --query "up"Explicit URL
python scripts/query_prometheus.py \
--prom-url "http://localhost:9090" \
--query "rate(http_requests_total[5m])"Query alerts
python scripts/query_prometheus.py --alerts
Default: If --prom-url is not specified, uses http://localhost:9090.
Common Query Types
Alerts
# All firing alerts
ALERTS{alertstate="firing"}Pending alerts
ALERTS{alertstate="pending"}
Cluster Status
# Node status
kube_node_status_condition{condition="Ready"}Pod status
kube_pod_status_phase{phase="Running"}
kube_pod_status_phase{phase="Failed"}Namespace pod counts
count by (namespace) (kube_pod_info)
Nginx Metrics
# Request rate
rate(nginx_http_requests_total[5m])Connection stats
nginx_connections_active
nginx_connections_reading
nginx_connections_writing
nginx_connections_waitingRequest duration (p99)
histogram_quantile(0.99, rate(nginx_http_request_duration_seconds_bucket[5m]))
Custom Metrics
Replace with your actual metric:
# Current value
Rate over 5 minutes
rate([5m])Average over 1 hour
avg([1h])
Parameters
prom-url: Prometheus URL (default: http://localhost:9090)query: PromQL query stringalerts: Flag to query all alerts with statestime: Evaluation timestamp (ISO 8601)start: Start time for range queryend: End time for range querystep: Query resolution step (for range queries)timeout: Query timeout in seconds (default: 30)Output
Returns formatted metric results. For instant queries, returns current values. For alerts, returns alert name, state (firing/pending), and labels.
Examples
Check cluster health
# All firing alerts
python scripts/query_prometheus.py --alertsNode status
python scripts/query_prometheus.py --query "kube_node_status_condition{condition='Ready'}"
Nginx load
# Request rate
python scripts/query_prometheus.py --query "rate(nginx_http_requests_total[5m])"Active connections
python scripts/query_prometheus.py --query "nginx_connections_active"
Custom metric
python scripts/query_prometheus.py --query "my_custom_metric"
python scripts/query_prometheus.py --query "rate(my_custom_metric[5m])"
π‘ Examples
Check cluster health
# All firing alerts
python scripts/query_prometheus.py --alertsNode status
python scripts/query_prometheus.py --query "kube_node_status_condition{condition='Ready'}"
Nginx load
# Request rate
python scripts/query_prometheus.py --query "rate(nginx_http_requests_total[5m])"Active connections
python scripts/query_prometheus.py --query "nginx_connections_active"
Custom metric
python scripts/query_prometheus.py --query "my_custom_metric"
python scripts/query_prometheus.py --query "rate(my_custom_metric[5m])"