Агуулгыг алгасах

Ажиглалт ба аудит

Trace, metric, structured log гурвуулаа, дээр нь hash-chain audit бүртгэл.

Trace — OpenTelemetry

Хүсэлт бүрд span нээгддэг. TracingMiddleware нь хамгийн эхэнд ажилладаг тул request-ID лог гарахаас өмнө trace_id тогтоно.

Тохиргоо Утга
OTEL_EXPORTER otlp · stdout · хоосон (унтраалттай)
OTEL_SAMPLE_RATIO Sampling харьцаа

Автомат instrumentation:

  • pgxotelpgx-ээр DB query бүр span болно (удаан query trace дээр харагдана).
  • Redisredisotel.
  • HTTP — chi middleware.

Metric — Prometheus

MetricsMiddleware нь хүсэлтийн тоолуур + latency гистограм цуглуулна.

GET /metrics
Authorization: Bearer <OBSERVABILITY_TOKEN>   ← production дээр заавал

ObservabilityGate middleware нь /metrics ба /swagger/doc.json-ыг production дээр хаана. Token тохируулаагүй бол эдгээр endpoint нээлттэй үлдэх биш, харин хаагдана.

Log — Zap

Бүтэцлэгдсэн JSON лог. Мөр бүрд request_id, trace_id, категори орно.

Категори Юу
server Асаах / унтраах, boot guard
access Нэг мөрийн access log
recovery Panic-аас сэргэсэн тохиолдол

Юу лог-д БИЧИГДЭХГҮЙ вэ?

Хэрэглэгчийн AI асуултын текст, токен, нууц үг, интеграцын credential. AI мэдлэгийн хайлт нь горим, олдсон тоо, шилдэг оноо, slug-ийг л бичнэ — асуултыг өөрийг нь биш.

Access log

AccessLogMiddleware нь хүсэлт бүрд нэг мөр гаргана: метод, зам, статус, үргэлжлэх хугацаа, клиентийн IP (TRUSTED_PROXIES-аар шийдэгдсэн), request ID.

Gateway телеметр

Proxy-лагдсан дуудлагууд gateway_request_logs хүснэгтэд бичигдэнэ:

Endpoint Юу
GET /v1/gateway/overview Хүсэлтийн тоо, алдааны хувь, latency
GET /v1/gateway/logs Дэлгэрэнгүй лог

UI: Admin → Gateway → Overview / Logs.

Audit log

Hash-chain холбоост, зөвхөн-нэмэх бүртгэл. Мөр бүр өмнөх мөрийн hash-ыг агуулдаг тул дунд мөрийг өөрчилвөл гинж таарахаа болино.

мөр N-1:  hash_{N-1} = H(payload_{N-1} ‖ hash_{N-2})
мөр N:    hash_N     = H(payload_N     ‖ hash_{N-1})
Endpoint Эрх Юу
GET /v1/audit/ admin Бүртгэл унших (шүүлттэй)
GET /v1/audit/verify admin Гинжний бүрэн бүтэн байдлыг шалгах

UI: Admin → Audit.

Юу бүртгэгддэг вэ: role / эрхийн өөрчлөлт, хэрэглэгчийн мутаци, super admin-ийн бүх үйлдэл, client secret эргүүлэлт, gateway тохиргооны өөрчлөлт, гарын үсгийн үйлдэл.

Зөвхөн-нэмэх гэдэг нь

Audit хүснэгт дээр UPDATE / DELETE эрх апп-ын role-д олгогдоогүй. RLS policy нь service ба admin-д уншилт олгоно.

Security event

Тусдаа урсгал — сэжигтэй үйлдлийг бүртгэнэ:

Endpoint Эрх Юу
POST /v1/security/events нэвтэрсэн Event бичих (клиентээс ч ирж болно)
GET /v1/security/events admin Унших

UI: Admin → Security. security_events хүснэгт RLS-ээр хамгаалагдсан.

Health check

Зам Юу
/health Liveness — DB / Redis холболтыг шалгана

Compose дээр api ба web хоёулаа healthcheck-тэй; deploy скрипт нь healthy болтол хүлээдэг.

platform-core нь бие даасан healthcheck хоёртой ч агуулна:

go run github.com/gerege-systems/private-gerege-core/cmd/healthcheck

Graceful shutdown

SIGTERM дээр дараах дарааллаар хаагдана: HTTP сервер → rate limiter → pgx pool → Redis → tracer. Идэвхтэй хүсэлтүүд дуусах хүртэл хүлээнэ.

Хаанаас юу харах вэ

Асуулт Хаанаас
«Хүсэлт яагаад удаан вэ?» Trace (span breakdown)
«Хэдэн 5xx гарсан бэ?» /metrics эсвэл Gateway → Overview
«Хэн энэ role-ыг өөрчилсөн бэ?» Admin → Audit
«Нэвтрэх оролдлого хэвийн үү?» Admin → Security
«Аль апп gateway-г их дуудаж байна?» Gateway → Logs