Files
kyverno-2026-example/06-monitoring/01-logging/README.md
2026-04-08 20:22:14 +07:00

3.9 KiB
Raw Blame History

Урок 6.1 — Логирование и мониторинг Kyverno

Файлы

Файл Описание
grafana-dashboard.json Готовый Grafana dashboard
../03-reporting/prometheus-alert-rules.yaml Alerting правила
../03-reporting/service-monitor.yaml ServiceMonitor

Настройка уровня логирования

# Изменить уровень логирования без перезапуска (через Helm upgrade)
helm upgrade kyverno kyverno/kyverno \
  --namespace kyverno \
  --reuse-values \
  --set admissionController.extraArgs="{--v=4\,--loggingFormat=json}"

# Уровни:
# --v=1  production (warnings + important events)
# --v=2  informational (policy apply/deny events)
# --v=4  debug (full AdmissionReview)
# --v=6  trace (очень детально, только для отладки)

Просмотр логов

# Логи admission controller
kubectl logs -n kyverno \
  -l app.kubernetes.io/component=admission-controller \
  --tail=100 -f

# Логи background controller (для generate политик)
kubectl logs -n kyverno \
  -l app.kubernetes.io/component=background-controller \
  --tail=50

# Фильтрация — только нарушения
kubectl logs -n kyverno \
  -l app.kubernetes.io/component=admission-controller \
  --tail=200 | grep '"result":"fail"'

# Фильтрация — конкретная политика
kubectl logs -n kyverno \
  -l app.kubernetes.io/component=admission-controller \
  --tail=200 | grep '"policy":"require-resource-limits"'

Метрики через port-forward

# Открыть порт metrics
kubectl port-forward -n kyverno \
  svc/kyverno-svc-metrics 8000:8000 &

# Все метрики
curl -s http://localhost:8000/metrics | grep kyverno_ | head -40

# Конкретная метрика
curl -s http://localhost:8000/metrics | \
  grep kyverno_policy_results_total

# Топ метрик по нарушениям
curl -s http://localhost:8000/metrics | \
  grep 'kyverno_policy_results_total.*rule_result="fail"'

# Остановить port-forward
kill %1

Импорт Grafana Dashboard

# Способ 1: через UI
# Grafana → Dashboards → Import → Upload JSON file → grafana-dashboard.json

# Способ 2: через ConfigMap (если используете Grafana Operator)
kubectl create configmap kyverno-dashboard \
  --from-file=grafana-dashboard.json \
  --namespace=monitoring

kubectl label configmap kyverno-dashboard \
  -n monitoring \
  grafana_dashboard=1

Ключевые PromQL запросы

# Compliance rate (цель: 100%)
sum(rate(kyverno_policy_results_total{rule_result="pass"}[5m])) /
sum(rate(kyverno_policy_results_total[5m])) * 100

# p95 латентность в миллисекундах
histogram_quantile(0.95,
  sum(rate(kyverno_admission_review_duration_seconds_bucket[5m])) by (le)
) * 1000

# Нарушений за сутки по политикам
topk(10, sum by(policy_name)(
  increase(kyverno_policy_results_total{rule_result="fail"}[24h])
))

# Нарушений за сутки по namespace
sum by(resource_namespace)(
  increase(kyverno_policy_results_total{rule_result="fail"}[24h])
)

# Процент ошибок обработки
rate(kyverno_admission_requests_total{admission_request_type="error"}[5m]) /
rate(kyverno_admission_requests_total[5m]) * 100

# CPU throttling Kyverno
rate(container_cpu_cfs_throttled_seconds_total{
  namespace="kyverno",
  container=~"kyverno.*"
}[5m])

События Kubernetes

# PolicyViolation события
kubectl get events -A \
  --field-selector reason=PolicyViolation \
  --sort-by='.lastTimestamp'

# События от Kyverno
kubectl get events -A \
  --field-selector source.component=kyverno-admission \
  --sort-by='.lastTimestamp' | tail -20