# Onoxsoft Panel — Prometheus & Grafana Monitoring Kurulum Kılavuzu

## 1. Prometheus Scrape Yapılandırması

`prometheus.yml` dosyanıza aşağıdaki bloğu ekleyin:

```yaml
scrape_configs:
  - job_name: 'onox-panel'
    scrape_interval: 15s
    metrics_path: /metrics
    scheme: https
    static_configs:
      - targets: ['panel.example.com']
    # Token tanımlıysa:
    bearer_token: 'YOUR_METRICS_TOKEN'
    # ya da dosyadan oku:
    # bearer_token_file: /etc/prometheus/onox_token.txt
    tls_config:
      insecure_skip_verify: false   # Üretimde false bırakın
```

Token yoksa (`METRICS_TOKEN` env set edilmemişse) `bearer_token` satırını kaldırın.

---

## 2. Token Yapılandırması

Panel `.env` dosyasında:

```env
METRICS_TOKEN=rastgele_guclu_bir_token_buraya
```

Prometheus, her istekte şu header'lardan birini göndermelidir:
- `Authorization: Bearer <token>`
- `X-Prometheus-Token: <token>`

Admin panelinden (Admin > Monitoring) token yenilenebilir veya kopyalanabilir.

---

## 3. Grafana Dashboard İçe Aktarma

1. Grafana'da **Dashboards > Import** sayfasına gidin.
2. **Upload JSON file** veya **Import via panel JSON** seçeneğini kullanın.
3. `docs/grafana/` klasöründeki JSON dosyalarından birini yükleyin:

| Dosya | İçerik |
|-------|--------|
| `onox-overview.json` | Genel bakış — hesaplar, disk, kuyruk, SSL, audit |
| `onox-cluster.json` | Cluster — node sayısı, iş akışı, sysapi |
| `onox-customer-experience.json` | Müşteri — kaynak ihlalleri, SSL, yedek, webhook |

4. **Prometheus** datasource'unu `DS_PROMETHEUS` değişkenine atayın.
5. **Import** düğmesine tıklayın.

Admin panelinden (Admin > Monitoring > Grafana Dashboards) JSON dosyalarını doğrudan indirebilirsiniz.

---

## 4. Alertmanager Yapılandırması

`docs/prometheus/alerts.yml` dosyasını Prometheus rule dizinine kopyalayın:

```bash
cp docs/prometheus/alerts.yml /etc/prometheus/rules/onox-alerts.yml
```

`prometheus.yml`'a kural dosyasını ekleyin:

```yaml
rule_files:
  - /etc/prometheus/rules/onox-alerts.yml
```

Ardından Alertmanager'ı yapılandırın (Slack, e-posta, PagerDuty vs.):

```yaml
# alertmanager.yml (örnek — Slack)
route:
  group_by: ['alertname']
  group_wait: 30s
  group_interval: 5m
  repeat_interval: 1h
  receiver: 'slack-onox'

receivers:
  - name: 'slack-onox'
    slack_configs:
      - api_url: 'https://hooks.slack.com/services/XXXXX'
        channel: '#onox-alerts'
        title: 'Onoxsoft Alert: {{ .CommonLabels.alertname }}'
        text: '{{ range .Alerts }}{{ .Annotations.description }}{{ end }}'
```

---

## 5. Tanımlanan Metrikler

| Metrik | Tür | Açıklama |
|--------|-----|---------|
| `onox_accounts_total{status}` | gauge | Hesap sayısı (durum etiketli) |
| `onox_domains_total` | gauge | Toplam domain sayısı |
| `onox_ssl_certs_total{status}` | gauge | SSL sertifikaları (renewal_status etiketli) |
| `onox_disk_usage_bytes` | gauge | Toplam disk kullanımı |
| `onox_quota_bytes_total` | gauge | Toplam ayrılan kota |
| `onox_queue_pending` | gauge | Bekleyen Laravel job sayısı |
| `onox_failed_jobs_total` | gauge | Başarısız job sayısı |
| `onox_audit_events_5m` | gauge | Son 5 dakikadaki denetim olayları |
| `onox_sysapi_calls_5m` | gauge | Son 5 dakikadaki sysapi çağrıları |
| `onox_cluster_nodes_total{status}` | gauge | Cluster node sayısı |
| `onox_webhook_failures_1h` | gauge | Son 1 saatteki webhook hataları |
| `onox_resource_faults_1h{type}` | gauge | Son 1 saatteki kaynak ihlalleri |
| `onox_bandwidth_bytes_24h` | gauge | Son 24 saatlik toplam bant genişliği |
| `onox_backup_failures_24h` | gauge | Son 24 saatteki yedek hataları |
| `onox_panel_uptime_seconds` | counter | Panel process uptime |

---

## 6. Güvenlik Notları

- **Üretimde METRICS_TOKEN kullanın.** Token olmadan `/metrics` uç noktası altyapı bilgilerini herkese açar.
- Prometheus sunucusunu panelden ağ düzeyinde izole edin (firewall).
- TLS/HTTPS zorunlu tutun; Prometheus `scheme: https` ile yapılandırılmalıdır.
- Token yönetimi için Admin > Monitoring > "Token Yenile" kullanın.
