feat(observability): implement global database error logging, Prometheus error metrics, and max 3-panel Grafana dashboard
This commit is contained in:
@@ -13,15 +13,15 @@
|
||||
"collapsed": false,
|
||||
"gridPos": { "h": 1, "w": 24, "x": 0, "y": 0 },
|
||||
"id": 100,
|
||||
"title": "📌 شاخصهای کلیدی عملکرد و وضعیت صفها (KPIs & Queues)",
|
||||
"title": "📌 شاخصهای کلیدی عملکرد و صفهای سیستم (KPIs & Queues)",
|
||||
"type": "row"
|
||||
},
|
||||
{
|
||||
"collapsed": false,
|
||||
"gridPos": { "h": 4, "w": 6, "x": 0, "y": 1 },
|
||||
"gridPos": { "h": 4, "w": 8, "x": 0, "y": 1 },
|
||||
"id": 1,
|
||||
"title": "📥 کل پستهای دریافتی از مبدا",
|
||||
"description": "تعداد کل پستهای خامی که توسط ربات جمعآوریکننده از کانالهای مبدا دریافت شده است.",
|
||||
"description": "تعداد کل پیامهای دریافت شده توسط ربات از کانالهای مبدا تحت مانیتور.",
|
||||
"type": "stat",
|
||||
"targets": [
|
||||
{
|
||||
@@ -39,10 +39,10 @@
|
||||
},
|
||||
{
|
||||
"collapsed": false,
|
||||
"gridPos": { "h": 4, "w": 6, "x": 6, "y": 1 },
|
||||
"gridPos": { "h": 4, "w": 8, "x": 8, "y": 1 },
|
||||
"id": 2,
|
||||
"title": "⏳ مجموع پستهای در صف ارسال مقصد",
|
||||
"description": "تعداد پستهای تایید شده توسط ادمین که در صف ردیس کانالهای مقصد منتظر رسیدن نوبت ارسال (فاصله زمانی یا پایان ساعت خواب) هستند.",
|
||||
"description": "تعداد پستهای تایید شده که در صف ردیس کانالهای مقصد منتظر رسیدن نوبت ارسال یا پایان ساعت خواب هستند.",
|
||||
"type": "stat",
|
||||
"targets": [
|
||||
{
|
||||
@@ -67,30 +67,10 @@
|
||||
},
|
||||
{
|
||||
"collapsed": false,
|
||||
"gridPos": { "h": 4, "w": 6, "x": 12, "y": 1 },
|
||||
"gridPos": { "h": 4, "w": 8, "x": 16, "y": 1 },
|
||||
"id": 3,
|
||||
"title": "✅ پستهای تایید شده ادمین",
|
||||
"description": "تعداد پستهایی که ادمین بازنویسی آنها را تایید کرده و به صف انتشار فرستاده است.",
|
||||
"type": "stat",
|
||||
"targets": [
|
||||
{
|
||||
"expr": "sum(copykar_admin_actions_total{action=\"approved\"}) or vector(0)",
|
||||
"legendFormat": "تایید شده",
|
||||
"refId": "A"
|
||||
}
|
||||
],
|
||||
"fieldConfig": {
|
||||
"defaults": {
|
||||
"thresholds": { "mode": "absolute", "steps": [{ "color": "green", "value": null }] }
|
||||
}
|
||||
}
|
||||
},
|
||||
{
|
||||
"collapsed": false,
|
||||
"gridPos": { "h": 4, "w": 6, "x": 18, "y": 1 },
|
||||
"id": 4,
|
||||
"title": "🚀 کل پستهای منتشر شده نهایی",
|
||||
"description": "تعداد پستهایی که با موفقیت در کانالهای مقصد ارسال و منتشر شدهاند.",
|
||||
"description": "تعداد پستهایی که با موفقیت در کانالهای مقصد نهایی ارسال و منتشر شدهاند.",
|
||||
"type": "stat",
|
||||
"targets": [
|
||||
{
|
||||
@@ -109,13 +89,88 @@
|
||||
"collapsed": false,
|
||||
"gridPos": { "h": 1, "w": 24, "x": 0, "y": 5 },
|
||||
"id": 101,
|
||||
"title": "📋 تصمیمات ادمین و وضعیت سلامت خطاها (Admin Actions & Error Telemetry)",
|
||||
"type": "row"
|
||||
},
|
||||
{
|
||||
"collapsed": false,
|
||||
"gridPos": { "h": 4, "w": 8, "x": 0, "y": 6 },
|
||||
"id": 4,
|
||||
"title": "✅ پستهای تایید شده ادمین",
|
||||
"description": "تعداد پستهایی که ادمین بازنویسی آنها را تایید کرده و به صف ارسال فرستاده است.",
|
||||
"type": "stat",
|
||||
"targets": [
|
||||
{
|
||||
"expr": "sum(copykar_admin_actions_total{action=\"approved\"}) or vector(0)",
|
||||
"legendFormat": "تایید شده",
|
||||
"refId": "A"
|
||||
}
|
||||
],
|
||||
"fieldConfig": {
|
||||
"defaults": {
|
||||
"thresholds": { "mode": "absolute", "steps": [{ "color": "green", "value": null }] }
|
||||
}
|
||||
}
|
||||
},
|
||||
{
|
||||
"collapsed": false,
|
||||
"gridPos": { "h": 4, "w": 8, "x": 8, "y": 6 },
|
||||
"id": 5,
|
||||
"title": "❌ پستهای رد و بایگانی شده",
|
||||
"description": "تعداد پستهایی که توسط ادمین در کانال بررسی رد شدهاند.",
|
||||
"type": "stat",
|
||||
"targets": [
|
||||
{
|
||||
"expr": "sum(copykar_admin_actions_total{action=\"rejected\"}) or vector(0)",
|
||||
"legendFormat": "رد شده",
|
||||
"refId": "A"
|
||||
}
|
||||
],
|
||||
"fieldConfig": {
|
||||
"defaults": {
|
||||
"thresholds": { "mode": "absolute", "steps": [{ "color": "red", "value": null }] }
|
||||
}
|
||||
}
|
||||
},
|
||||
{
|
||||
"collapsed": false,
|
||||
"gridPos": { "h": 4, "w": 8, "x": 16, "y": 6 },
|
||||
"id": 6,
|
||||
"title": "⚠️ مجموع خطاهای ثبت شده در سیستم",
|
||||
"description": "تعداد کل استثناها و خطاهایی که در دیتابیس PostgreSQL و لاگها ثبت شده است.",
|
||||
"type": "stat",
|
||||
"targets": [
|
||||
{
|
||||
"expr": "sum(copykar_errors_total) or vector(0)",
|
||||
"legendFormat": "خطاها",
|
||||
"refId": "A"
|
||||
}
|
||||
],
|
||||
"fieldConfig": {
|
||||
"defaults": {
|
||||
"color": { "mode": "thresholds" },
|
||||
"thresholds": {
|
||||
"mode": "absolute",
|
||||
"steps": [
|
||||
{ "color": "green", "value": null },
|
||||
{ "color": "yellow", "value": 1 },
|
||||
{ "color": "red", "value": 5 }
|
||||
]
|
||||
}
|
||||
}
|
||||
}
|
||||
},
|
||||
{
|
||||
"collapsed": false,
|
||||
"gridPos": { "h": 1, "w": 24, "x": 0, "y": 10 },
|
||||
"id": 102,
|
||||
"title": "📡 فعالیت به تفکیک کانالهای مبدا و مقصد (Channels Activity Breakdown)",
|
||||
"type": "row"
|
||||
},
|
||||
{
|
||||
"collapsed": false,
|
||||
"gridPos": { "h": 8, "w": 12, "x": 0, "y": 6 },
|
||||
"id": 5,
|
||||
"gridPos": { "h": 8, "w": 12, "x": 0, "y": 11 },
|
||||
"id": 7,
|
||||
"title": "📥 پستهای دریافتی به تفکیک کانال مبدا",
|
||||
"description": "نمودار زمانی و حجم پستهای جمعآوری شده از هر یک از کانالهای مبدا تحت مانیتور.",
|
||||
"type": "timeseries",
|
||||
@@ -129,8 +184,8 @@
|
||||
},
|
||||
{
|
||||
"collapsed": false,
|
||||
"gridPos": { "h": 8, "w": 12, "x": 12, "y": 6 },
|
||||
"id": 6,
|
||||
"gridPos": { "h": 8, "w": 12, "x": 12, "y": 11 },
|
||||
"id": 8,
|
||||
"title": "🚀 پستهای منتشر شده به تفکیک کانال مقصد",
|
||||
"description": "نمودار زمانی تعداد پستهای ارسال شده به هر یک از کانالهای مقصد نهایی.",
|
||||
"type": "timeseries",
|
||||
@@ -144,15 +199,15 @@
|
||||
},
|
||||
{
|
||||
"collapsed": false,
|
||||
"gridPos": { "h": 1, "w": 24, "x": 0, "y": 14 },
|
||||
"id": 102,
|
||||
"title": "🤖 عملیات هوش مصنوعی و عملکرد سیستم (AI Operations & Latency)",
|
||||
"gridPos": { "h": 1, "w": 24, "x": 0, "y": 19 },
|
||||
"id": 103,
|
||||
"title": "🤖 عملیات هوش مصنوعی و تحلیل خطاها (AI Operations & Error Breakdown)",
|
||||
"type": "row"
|
||||
},
|
||||
{
|
||||
"collapsed": false,
|
||||
"gridPos": { "h": 8, "w": 12, "x": 0, "y": 15 },
|
||||
"id": 7,
|
||||
"gridPos": { "h": 8, "w": 12, "x": 0, "y": 20 },
|
||||
"id": 9,
|
||||
"title": "🤖 تعداد و وضعیت درخواستهای هوش مصنوعی",
|
||||
"description": "نرخ بازنویسیهای ارسالی به هوش مصنوعی به تفکیک وضعیت پاسخ و نوع عملیات.",
|
||||
"type": "timeseries",
|
||||
@@ -166,8 +221,60 @@
|
||||
},
|
||||
{
|
||||
"collapsed": false,
|
||||
"gridPos": { "h": 8, "w": 12, "x": 12, "y": 15 },
|
||||
"id": 8,
|
||||
"gridPos": { "h": 8, "w": 12, "x": 12, "y": 20 },
|
||||
"id": 10,
|
||||
"title": "⚠️ خطاهای سیستم به تفکیک سرویس و نوع استثنا",
|
||||
"description": "تحلیل آماری و نموداری خطاهای رخ داده در سیستم و ثبت شده در پایگاه داده.",
|
||||
"type": "timeseries",
|
||||
"targets": [
|
||||
{
|
||||
"expr": "sum by (service, error_type) (copykar_errors_total)",
|
||||
"legendFormat": "{{service}}: {{error_type}}",
|
||||
"refId": "A"
|
||||
}
|
||||
]
|
||||
},
|
||||
{
|
||||
"collapsed": false,
|
||||
"gridPos": { "h": 1, "w": 24, "x": 0, "y": 28 },
|
||||
"id": 104,
|
||||
"title": "⚡ مانیتورینگ منابع سرور و کانتینر (Container Telemetry)",
|
||||
"type": "row"
|
||||
},
|
||||
{
|
||||
"collapsed": false,
|
||||
"gridPos": { "h": 7, "w": 8, "x": 0, "y": 29 },
|
||||
"id": 11,
|
||||
"title": "⚡ درصد مصرف پردازنده (CPU %)",
|
||||
"description": "میزان مصرف پردازنده توسط سرویس کپیکار.",
|
||||
"type": "timeseries",
|
||||
"targets": [
|
||||
{
|
||||
"expr": "rate(process_cpu_seconds_total{job=\"copykar\"}[1m]) * 100",
|
||||
"legendFormat": "مصرف CPU %",
|
||||
"refId": "A"
|
||||
}
|
||||
]
|
||||
},
|
||||
{
|
||||
"collapsed": false,
|
||||
"gridPos": { "h": 7, "w": 8, "x": 8, "y": 29 },
|
||||
"id": 12,
|
||||
"title": "💾 میزان مصرف حافظه رم (RAM MB)",
|
||||
"description": "حافظه رم اشغال شده توسط پردازش برنامه به مگابایت.",
|
||||
"type": "timeseries",
|
||||
"targets": [
|
||||
{
|
||||
"expr": "process_resident_memory_bytes{job=\"copykar\"} / 1024 / 1024",
|
||||
"legendFormat": "حافظه رم (MB)",
|
||||
"refId": "A"
|
||||
}
|
||||
]
|
||||
},
|
||||
{
|
||||
"collapsed": false,
|
||||
"gridPos": { "h": 7, "w": 8, "x": 16, "y": 29 },
|
||||
"id": 13,
|
||||
"title": "⏱ مدت زمان پاسخدهی هوش مصنوعی (ثانیه)",
|
||||
"description": "میانگین زمان و صدک ۹۵ ام برای بازنویسی پستها متناسب با شخصیت هر کانال.",
|
||||
"type": "timeseries",
|
||||
@@ -183,69 +290,12 @@
|
||||
"refId": "B"
|
||||
}
|
||||
]
|
||||
},
|
||||
{
|
||||
"collapsed": false,
|
||||
"gridPos": { "h": 1, "w": 24, "x": 0, "y": 23 },
|
||||
"id": 103,
|
||||
"title": "⚡ مانیتورینگ منابع سرور و کانتینر (Container Telemetry)",
|
||||
"type": "row"
|
||||
},
|
||||
{
|
||||
"collapsed": false,
|
||||
"gridPos": { "h": 7, "w": 8, "x": 0, "y": 24 },
|
||||
"id": 9,
|
||||
"title": "⚡ درصد مصرف پردازنده (CPU %)",
|
||||
"description": "میزان مصرف پردازنده توسط سرویس کپیکار.",
|
||||
"type": "timeseries",
|
||||
"targets": [
|
||||
{
|
||||
"expr": "rate(process_cpu_seconds_total{job=\"copykar\"}[1m]) * 100",
|
||||
"legendFormat": "مصرف CPU %",
|
||||
"refId": "A"
|
||||
}
|
||||
]
|
||||
},
|
||||
{
|
||||
"collapsed": false,
|
||||
"gridPos": { "h": 7, "w": 8, "x": 8, "y": 24 },
|
||||
"id": 10,
|
||||
"title": "💾 میزان مصرف حافظه رم (RAM MB)",
|
||||
"description": "حافظه رم اشغال شده توسط پردازش برنامه به مگابایت.",
|
||||
"type": "timeseries",
|
||||
"targets": [
|
||||
{
|
||||
"expr": "process_resident_memory_bytes{job=\"copykar\"} / 1024 / 1024",
|
||||
"legendFormat": "حافظه رم (MB)",
|
||||
"refId": "A"
|
||||
}
|
||||
]
|
||||
},
|
||||
{
|
||||
"collapsed": false,
|
||||
"gridPos": { "h": 7, "w": 8, "x": 16, "y": 24 },
|
||||
"id": 11,
|
||||
"title": "🧵 تعداد تردهای فعال و فایلهای باز",
|
||||
"description": "تعداد Thread های فعال و File Descriptor های باز پردازش.",
|
||||
"type": "timeseries",
|
||||
"targets": [
|
||||
{
|
||||
"expr": "process_threads_total{job=\"copykar\"}",
|
||||
"legendFormat": "تعداد تردها",
|
||||
"refId": "A"
|
||||
},
|
||||
{
|
||||
"expr": "process_open_fds{job=\"copykar\"}",
|
||||
"legendFormat": "فایل دیسکریپتورها",
|
||||
"refId": "B"
|
||||
}
|
||||
]
|
||||
}
|
||||
],
|
||||
"refresh": "5s",
|
||||
"schemaVersion": 38,
|
||||
"style": "dark",
|
||||
"tags": ["copykar", "telegram", "ai", "telemetry", "persian"],
|
||||
"tags": ["copykar", "telegram", "ai", "telemetry", "persian", "errors"],
|
||||
"time": {
|
||||
"from": "now-1h",
|
||||
"to": "now"
|
||||
@@ -254,5 +304,5 @@
|
||||
"timezone": "browser",
|
||||
"title": "داشبورد مدیریت ناوگان کپیکار (Copykar Executive Dashboard)",
|
||||
"uid": "copykar-executive-dashboard",
|
||||
"version": 5
|
||||
"version": 6
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user