# Grafana, Prometheus и Loki

В test-контуре мониторинг разделён:

| Инструмент | URL | Задача |
|------------|-----|--------|
| **Prometheus** | http://prometheus.sova.local | метрики, targets, PromQL |
| **Grafana** | http://grafana.sova.local | дашборды + **логи через Loki** |
| **Loki** | только через Grafana Explore | агрегация логов pod'ов |

Prometheus **не хранит логи** — для логов используйте Grafana → Explore → datasource **Loki**.

Установка Loki/Promtail: `./scripts/deploy-monitoring-logs.sh`

## Grafana

### Вход

http://grafana.sova.local — **admin** / пароль:

```bash
kubectl -n monitoring get secret kube-prometheus-grafana \
  -o jsonpath='{.data.admin-password}' | base64 -d && echo
```

![Grafana login](../screenshots/12-grafana-login.png)

### Главная

Дашборды kube-prometheus (CPU, memory, pod restarts). Полезно для общего health кластера:

![Grafana home](../screenshots/13-grafana-home.png)

### Loki — логи приложений

**Explore** (иконка компаса) → datasource **Loki** → LogQL:

```logql
{namespace="sova-test"}
```

Уточнение по pod:

```logql
{namespace="sova-test", pod=~"backend.*"} |= "error"
```

![Grafana Explore Loki](../screenshots/14-grafana-loki-explore.png)

::: tip Нет логов?
1. `./scripts/deploy-monitoring-logs.sh`  
2. Проверьте Promtail: `kubectl get pods -n monitoring -l app.kubernetes.io/name=promtail`  
3. В Grafana: Configuration → Data sources → Loki должен быть **green**
:::

### Типовые сценарии

| Задача | Действие |
|--------|----------|
| 500 от API | Loki `{namespace="sova-test", pod=~"backend.*"}` |
| CronJob упал | `{namespace="sova-test"} \|= "backend-sync-doctors"` |
| Ingress 502 | `{namespace="ingress-nginx"}` |

## Prometheus

Отдельный UI без логина (test-контур).

### Graph — PromQL запросы

http://prometheus.sova.local/graph

Примеры:

```promql
up                                    # живые targets
rate(http_requests_total[5m])         # RPS (если есть метрика)
container_memory_working_set_bytes{namespace="sova-test"}
```

![Prometheus Graph](../screenshots/15-prometheus-graph.png)

### Targets — кто отдаёт метрики

http://prometheus.sova.local/targets

**UP** (зелёный) — scrape OK. **DOWN** — проверьте ServiceMonitor / pod.

![Prometheus Targets](../screenshots/16-prometheus-targets.png)

### Быстрая проверка «всё живо»

Запрос `up` за последний час:

![Prometheus up query](../screenshots/17-prometheus-up-query.png)

Значение **1** — target доступен, **0** — проблема.

## Сводка: куда смотреть

```mermaid
flowchart LR
  subgraph metrics["Метрики"]
    prom["Prometheus<br/>prometheus.sova.local"]
    graf_m["Grafana dashboards"]
  end
  subgraph logs["Логи"]
    loki["Loki"]
    graf_l["Grafana Explore"]
    promtail["Promtail"]
  end
  pods["Pod logs"] --> promtail --> loki --> graf_l
  pods --> prom
  prom --> graf_m
```

| Симптом | Куда |
|---------|------|
| Медленный API, restarts | Grafana dashboards / Prometheus `container_*` |
| Ошибка в коде, stack trace | Grafana → Loki |
| ServiceMonitor не работает | Prometheus → Targets |
| Нет datasource Loki | `./scripts/deploy-monitoring-logs.sh` |

Назад: [Gitea CI/CD](./gitea-ci) · [ArgoCD](./argocd)
