Installer avec Codex ou Claude Copiez ce prompt, collez-le dans Codex, Claude ou un autre assistant, puis laissez-le vérifier la page du skill et l'installer pour vous.
Une commande directe contourne le prompt de vérification. Examinez la source avant de l'exécuter.
You are an expert in Prometheus with deep knowledge of metrics collection, PromQL queries, recording rules, alerting rules, service discovery, and production operations. You design and manage comprehensive observability systems following monitoring best practices.
# Instant vector - current value
http_requests_total
# Rate of requests (per second over 5m)
rate(http_requests_total[5m])
# Sum by label
sum(rate(http_requests_total[5m])) by (job, method)
# CPU usage percentage
100 - (avg by (instance) (rate(node_cpu_seconds_total{mode="idle"}[5m])) * 100)
# Memory usage percentage
(node_memory_MemTotal_bytes - node_memory_MemAvailable_bytes) / node_memory_MemTotal_bytes * 100
# Disk usage percentage
(node_filesystem_size_bytes{mountpoint="/"} - node_filesystem_avail_bytes{mountpoint="/"}) / node_filesystem_size_bytes{mountpoint="/"} * 100
Advanced Queries:
# Request latency (95th percentile)
histogram_quantile(0.95,
sum(rate(http_request_duration_seconds_bucket[5m])) by (le, job, method)
)
# Error rate
sum(rate(http_requests_total{status=~"5.."}[5m])) / sum(rate(http_requests_total[5m])) * 100
# Requests per second by status code
sum(rate(http_requests_total[5m])) by (status)
# Top 10 endpoints by request count
topk(10, sum(rate(http_requests_total[1h])) by (endpoint))
# Prediction (linear regression)
predict_linear(node_filesystem_free_bytes{mountpoint="/"}[1h], 4 * 3600)
# Aggregation over time
avg_over_time(http_requests_total[1h])
max_over_time(http_requests_total[1h])
min_over_time(http_requests_total[1h])
# Join metrics
rate(http_requests_total[5m]) * on(instance) group_left(node) node_cpu_seconds_total
Kubernetes-Specific Queries:
# Pod CPU usage
sum(rate(container_cpu_usage_seconds_total{namespace="production"}[5m])) by (pod)
# Pod memory usage
sum(container_memory_working_set_bytes{namespace="production"}) by (pod)
# Pod restart count
kube_pod_container_status_restarts_total{namespace="production"}
# Available replicas
kube_deployment_status_replicas_available{namespace="production"}
# Pending pods
count(kube_pod_status_phase{phase="Pending"}) by (namespace)
# Node resource usage
sum(kube_pod_container_resource_requests{resource="cpu"}) by (node) /
sum(kube_node_status_allocatable{resource="cpu"}) by (node) * 100
Recording Rules
Recording Rules Configuration:
apiVersion:monitoring.coreos.com/v1kind:PrometheusRulemetadata:name:recording-rulesnamespace:monitoringlabels:prometheus:kube-prometheusspec:groups:-name:api_performanceinterval:30srules:# Request rate by endpoint-record:api:http_requests:rate5mexpr:|
sum(rate(http_requests_total[5m])) by (job, endpoint, method)
# Request rate by status-record:api:http_requests:rate5m:statusexpr:|
sum(rate(http_requests_total[5m])) by (job, status)
# Error rate-record:api:http_requests:error_rate5mexpr:|
sum(rate(http_requests_total{status=~"5.."}[5m])) by (job) /
sum(rate(http_requests_total[5m])) by (job)
# Latency percentiles-record:api:http_request_duration:p50expr:|
histogram_quantile(0.50,
sum(rate(http_request_duration_seconds_bucket[5m])) by (le, job)
)
-record:api:http_request_duration:p95expr:|
histogram_quantile(0.95,
sum(rate(http_request_duration_seconds_bucket[5m])) by (le, job)
)
-record:api:http_request_duration:p99expr:|
histogram_quantile(0.99,
sum(rate(http_request_duration_seconds_bucket[5m])) by (le, job)
)
-name:node_resourcesinterval:30srules:# Node CPU usage-record:instance:node_cpu:utilizationexpr:|
100 - (avg by (instance) (rate(node_cpu_seconds_total{mode="idle"}[5m])) * 100)
# Node memory usage-record:instance:node_memory:utilizationexpr:|
100 * (1 - (node_memory_MemAvailable_bytes / node_memory_MemTotal_bytes))
# Node disk usage-record:instance:node_disk:utilizationexpr:|
100 * (1 - (node_filesystem_avail_bytes{mountpoint="/"} / node_filesystem_size_bytes{mountpoint="/"}))
Alerting Rules
Alerting Rules Configuration:
apiVersion:monitoring.coreos.com/v1kind:PrometheusRulemetadata:name:alerting-rulesnamespace:monitoringlabels:prometheus:kube-prometheusspec:groups:-name:application_alertsinterval:30srules:# High error rate-alert:HighErrorRateexpr:|
sum(rate(http_requests_total{status=~"5.."}[5m])) by (job) /
sum(rate(http_requests_total[5m])) by (job) > 0.05
for:5mlabels:severity:warningteam:backendannotations:summary:"High error rate detected"description:"{{ $labels.job }} has error rate of {{ $value | humanizePercentage }}"# High latency-alert:HighLatencyexpr:|
histogram_quantile(0.95,
sum(rate(http_request_duration_seconds_bucket[5m])) by (le, job)
) > 1
for:10mlabels:severity:warningteam:backendannotations:summary:"High latency detected"description:"{{ $labels.job }} 95th percentile latency is {{ $value }}s"# Service down-alert:ServiceDownexpr:up{job="myapp"}==0for:1mlabels:severity:criticalteam:platformannotations:summary:"Service is down"description:"{{ $labels.job }} on {{ $labels.instance }} is down"-name:infrastructure_alertsinterval:30srules:# High CPU usage-alert:HighCPUUsageexpr:|
100 - (avg by (instance) (rate(node_cpu_seconds_total{mode="idle"}[5m])) * 100) > 80
for:10mlabels:severity:warningteam:platformannotations:summary:"High CPU usage"description:"Instance {{ $labels.instance }} CPU usage is {{ $value }}%"# High memory usage-alert:HighMemoryUsageexpr:|
100 * (1 - (node_memory_MemAvailable_bytes / node_memory_MemTotal_bytes)) > 85
for:10mlabels:severity:warningteam:platformannotations:summary:"High memory usage"description:"Instance {{ $labels.instance }} memory usage is {{ $value }}%"# Disk space low-alert:DiskSpaceLowexpr:|
100 * (1 - (node_filesystem_avail_bytes{mountpoint="/"} / node_filesystem_size_bytes{mountpoint="/"})) > 85
for:5mlabels:severity:warningteam:platformannotations:summary:"Disk space low"description:"Instance {{ $labels.instance }} disk usage is {{ $value }}%"-name:kubernetes_alertsinterval:30srules:# Pod not ready-alert:PodNotReadyexpr:kube_pod_status_phase{phase!="Running"}>0for:5mlabels:severity:warningteam:platformannotations:summary:"Pod not ready"description:"Pod {{ $labels.namespace }}/{{ $labels.pod }} is in {{ $labels.phase }} state"# Pod restart loop-alert:PodRestartLoopexpr:rate(kube_pod_container_status_restarts_total[15m])>0for:5mlabels:severity:warningteam:platformannotations:summary:"Pod restarting frequently"description:"Pod {{ $labels.namespace }}/{{ $labels.pod }} is restarting frequently"# Deployment replica mismatch-alert:DeploymentReplicaMismatchexpr:|
kube_deployment_spec_replicas != kube_deployment_status_replicas_available
for:5mlabels:severity:warningteam:platformannotations:summary:"Deployment replica mismatch"description:"Deployment {{ $labels.namespace }}/{{ $labels.deployment }} has {{ $value }} available replicas"
Alertmanager Configuration
Alertmanager Config:
apiVersion:v1kind:ConfigMapmetadata:name:alertmanager-confignamespace:monitoringdata:alertmanager.yml:|
global:
resolve_timeout: 5m
slack_api_url: 'https://hooks.slack.com/services/XXX/YYY/ZZZ'
route:receiver:defaultgroup_by: ['alertname', 'cluster', 'service']
group_wait:10sgroup_interval:10srepeat_interval:12hroutes:# Critical alerts to PagerDuty-match:severity:criticalreceiver:pagerdutycontinue:true# Platform team alerts-match:team:platformreceiver:platform-team# Backend team alerts-match:team:backendreceiver:backend-teamreceivers:-name:defaultslack_configs:-channel:'#alerts'title:'{{ .GroupLabels.alertname }}'text:'{{ range .Alerts }}{{ .Annotations.description }}{{ end }}'-name:pagerdutypagerduty_configs:-service_key:'YOUR_PAGERDUTY_KEY'description:'{{ .GroupLabels.alertname }}'-name:platform-teamslack_configs:-channel:'#platform-alerts'title:'{{ .GroupLabels.alertname }}'text:'{{ range .Alerts }}{{ .Annotations.description }}{{ end }}'-name:backend-teamslack_configs:-channel:'#backend-alerts'title:'{{ .GroupLabels.alertname }}'text:'{{ range .Alerts }}{{ .Annotations.description }}{{ end }}'inhibit_rules:# Inhibit warning if critical is firing-source_match:severity:criticaltarget_match:severity:warningequal: ['alertname', 'instance']