throttling, abuse-protection & logging/monitoring pass

This commit is contained in:
2026-08-23 23:44:00 +03:30
parent cb18c93a3e
commit 80298b47b1
33 changed files with 4202 additions and 23 deletions

56
docker/alloy/config.alloy Normal file
View File

@@ -0,0 +1,56 @@
// پیکربندیِ حداقلیِ Grafana Alloy — جایگزینِ Promtail (که EOL شده،
// مارچ ۲۰۲۶). دقیقاً همون کاری که promtail-config.yml قبلی می‌کرد:
// فایلِ لاگِ JSON اپِ Django رو tail می‌کنه، level/logger رو به‌عنوانِ
// لیبل استخراج می‌کنه، و به Loki push می‌کنه. هیچ لاگِ جدیدی تولید
// نمی‌کنه و پیامِ لاگ‌ها دست‌نخورده می‌مونه.
// مرحله‌ی ۱: پیدا کردنِ فایل‌های لاگ روی ولومِ مشترک (django_logs)
local.file_match "django_logs" {
path_targets = [{
__path__ = "/var/log/django/*.log",
job = "django",
app = "tadrisino",
}]
}
// مرحله‌ی ۲: خوندنِ همون فایل‌ها
loki.source.file "django_logs" {
targets = local.file_match.django_logs.targets
forward_to = [loki.process.django_logs.receiver]
}
// مرحله‌ی ۳: پردازش — استخراجِ level/logger/timestamp از JSONِ هر خط
// (فرمتِ config.log_formatters.JSONLogFormatter) و ست‌کردنِ اونا به‌عنوانِ
// لیبل، دقیقاً هم‌ارزِ stage.json + stage.labels + stage.timestamp در
// promtail-config.yml قبلی.
loki.process "django_logs" {
stage.json {
expressions = {
level = "",
logger = "",
timestamp = "",
}
}
stage.labels {
values = {
level = "",
logger = "",
}
}
// استفاده از timestampِ خودِ لاگ (نه زمانِ رسیدنِ خط به Alloy)
stage.timestamp {
source = "timestamp"
format = "RFC3339"
}
forward_to = [loki.write.local.receiver]
}
// مرحله‌ی ۴: ارسال به Loki
loki.write "local" {
endpoint {
url = "http://loki:3100/loki/api/v1/push"
}
}