# Hướng dẫn Observability Stack

Tài liệu này hướng dẫn cách sử dụng stack observability (Grafana, Prometheus, Loki, Promtail) được tích hợp trong dự án.

## Tổng quan Kiến trúc

Hệ thống bao gồm các thành phần sau:

-   **Prometheus**: Thu thập metrics từ các services.
-   **Loki**: Thu thập logs.
-   **Promtail**: Quét logs từ các Docker container và gửi về Loki.
-   **Grafana**: Bảng điều khiển (dashboard) để trực quan hóa metrics (từ Prometheus) và logs (từ Loki).

## Bắt đầu

### Yêu cầu tiên quyết

-   Đã cài đặt Docker và Docker Compose.
-   Đã có network `microservices-network` (thường được tạo bởi stack chính của ứng dụng hoặc tạo thủ công).

### Khởi chạy Stack

Bạn có thể khởi chạy dễ dàng bằng script có sẵn:

```bash
./scripts/observability/start.sh
```

Hoặc chạy thủ công:

```bash
# Đảm bảo network đã tồn tại
docker network create microservices-network || true

cd infra/observability
docker-compose -f docker-compose.observability.yml up -d
```

Kiểm tra xem các container đã chạy chưa:

```bash
docker ps
```

Bạn sẽ thấy các container `grafana`, `prometheus`, `loki`, và `promtail`.

## Truy cập Dịch vụ

| Dịch vụ | URL | Tài khoản (nếu có) | Mô tả |
| :--- | :--- | :--- | :--- |
| **Grafana** | [http://localhost:3001](http://localhost:3001) | `admin` / `admin` | Dashboard chính để theo dõi. |
| **Prometheus** | [http://localhost:9090](http://localhost:9090) | N/A | Xem metrics thô và trạng thái target. |
| **Loki** | [http://localhost:3100](http://localhost:3100) | N/A | API tổng hợp log (không có giao diện web). |

## Sử dụng Grafana

1.  **Đăng nhập**: Truy cập [http://localhost:3001](http://localhost:3001) và đăng nhập với `admin`/`admin`.
2.  **Khám phá dữ liệu (Explore)**:
    -   Chọn biểu tượng **Explore** (hình la bàn) ở thanh bên trái.
    -   Chọn **Loki** từ menu datasource để tìm kiếm logs.
    -   Chọn **Prometheus** từ menu datasource để truy vấn metrics.

### Xem Logs (Loki)

Trong giao diện **Explore** với **Loki** đã chọn:

1.  Nhấn nút **Label browser**.
2.  Chọn một label, ví dụ: `container`.
3.  Chọn tên container cụ thể (ví dụ: `iam-service` hoặc `traefik`).
4.  Nhấn **Show logs**.

Bạn cũng có thể viết truy vấn LogQL thủ công, ví dụ:

```logql
{container="iam-service"}
```

### Xem Metrics (Prometheus)

Trong giao diện **Explore** với **Prometheus** đã chọn:

1.  Nhập tên metric vào ô truy vấn (ví dụ: `up`, `container_memory_usage_bytes`).
2.  Nhấn **Run query**.

## Cấu hình

-   **Prometheus**: Các rules và targets được cấu hình tại `infra/observability/prometheus/prometheus.yml`.
-   **Promtail**: Rules để quét log được cấu hình tại `infra/observability/promtail/promtail-config.yml`.
-   **Grafana**: Cấu hình datasources và dashboards provisioning nằm trong `infra/observability/grafana/`.
