135 lines
3.9 KiB
Markdown
135 lines
3.9 KiB
Markdown
# Урок 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
|
|
```
|