Files
2026-04-08 20:22:14 +07:00

135 lines
3.9 KiB
Markdown
Raw Permalink Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
# Урок 6.1 — Логирование и мониторинг Kyverno
## Файлы
| Файл | Описание |
|------|----------|
| `grafana-dashboard.json` | Готовый Grafana dashboard |
| `../03-reporting/prometheus-alert-rules.yaml` | Alerting правила |
| `../03-reporting/service-monitor.yaml` | ServiceMonitor |
## Настройка уровня логирования
```bash
# Изменить уровень логирования без перезапуска (через 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 (очень детально, только для отладки)
```
## Просмотр логов
```bash
# Логи 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
```bash
# Открыть порт 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
```bash
# Способ 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 запросы
```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
```bash
# 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
```