# Урок 2.3 — Обработка ошибок и отчётность ## Файлы | Файл | Описание | |------|----------| | `prometheus-alert-rules.yaml` | PrometheusRule с алертами | | `service-monitor.yaml` | ServiceMonitor для Prometheus Operator | ## Работа с PolicyReport ```bash # Посмотреть все отчёты kubectl get policyreports -A kubectl get clusterpolicyreports # Детальный отчёт по namespace kubectl describe policyreport -n production # Все нарушения в кластере (форматированный вывод) kubectl get policyreports -A -o json | \ jq -r '.items[] | .metadata.namespace as $ns | .results[] | select(.result == "fail") | "\($ns)/\(.resources[0].name)\t\(.policy)/\(.rule)\t\(.message)"' | \ column -t -s $'\t' # Топ-10 политик по нарушениям kubectl get policyreports -A -o json | \ jq -r '[.items[].results[] | select(.result == "fail") | .policy] | group_by(.) | map({policy: .[0], count: length}) | sort_by(-.count)[:10][] | "\(.count)\t\(.policy)"' # Нарушения по конкретной политике POLICY="require-resource-limits" kubectl get policyreports -A -o json | \ jq --arg p "$POLICY" \ -r '.items[] | .metadata.namespace as $ns | .results[] | select(.policy == $p and .result == "fail") | "\($ns)/\(.resources[0].name): \(.message)"' # Compliance rate по namespace kubectl get policyreports -A -o json | \ jq -r '.items[] | .metadata.namespace as $ns | {ns: $ns, pass: [.results[] | select(.result=="pass")] | length, fail: [.results[] | select(.result=="fail")] | length} | "\(.ns): pass=\(.pass) fail=\(.fail)"' ``` ## Prometheus метрики ```bash # Проверить доступность метрик (port-forward если нет Ingress) kubectl port-forward -n kyverno svc/kyverno-svc-metrics 8000:8000 & # Посмотреть все метрики curl -s http://localhost:8000/metrics | grep kyverno_ # Ключевые метрики curl -s http://localhost:8000/metrics | grep kyverno_policy_results_total curl -s http://localhost:8000/metrics | grep kyverno_admission_review_duration ``` ## Полезные PromQL запросы (для Grafana) ```promql # Compliance rate (цель: 1.0 = 100%) sum(rate(kyverno_policy_results_total{rule_result="pass"}[5m])) / sum(rate(kyverno_policy_results_total[5m])) # Нарушений в час по политикам topk(10, sum by(policy_name)( increase(kyverno_policy_results_total{rule_result="fail"}[1h]) )) # p95 латентность admission histogram_quantile(0.95, sum(rate(kyverno_admission_review_duration_seconds_bucket[5m])) by (le) ) # Нарушения по namespace за сутки sum by(resource_namespace)( increase(kyverno_policy_results_total{rule_result="fail"}[24h]) ) ``` ## Применение мониторинга ```bash # Применить ServiceMonitor (требует Prometheus Operator) kubectl apply -f service-monitor.yaml # Применить правила алертов kubectl apply -f prometheus-alert-rules.yaml # Проверить что правила подхватились kubectl get prometheusrule -n kyverno ``` ## Режим Audit для существующего кластера ```bash # Применить политику в Audit режиме kubectl apply -f - <