یہ ماڈیول کیا کرتا ہے #
ایک انسٹنس کے پاس بتانے کو بہت کچھ ہوتا ہے: fail2ban نے کوئی IP بلاک کیا، aide نے سسٹم کی کوئی فائل بدلتی دیکھی، رات کا بیک اپ ناکام رہا، روٹ ڈسک 95 % پر پہنچ گیا۔ اگر ہر ماڈیول اپنے اپنے انداز میں بتائے —یہاں ایک ای میل، وہاں لاگ کی ایک سطر— تو کسی کو کچھ پتا نہیں چلتا، اور دس انسٹنس ہوں تو مسئلہ دس گنا ہو جاتا ہے۔
global-alerts ماڈیول imaxe کی مرکزی الرٹ بس ہے: ایک ہی کمانڈ جس سے یہ ساری اطلاعات گزرتی ہیں اور ایک ہی منزل جہاں وہ پہنچتی ہیں — آپ کے پورے فلیٹ میں مشترک ایک Amazon SNS ٹاپک۔ وہاں سے SNS جیسے چاہیں تقسیم کرتا ہے: ای میل، SMS، کوئی Lambda فنکشن، کوئی SQS قطار، آپ کا آن کال نظام۔ اشاعت انسٹنس کے IAM رول سے ہوتی ہے (sns:Publish اجازت)، اس لیے کوئی کریڈنشل محفوظ نہیں کرنا پڑتا۔ اور بھیجنے سے پہلے شور چھانٹ دیتا ہے: شدت کی حد اُس سب کو ہٹا دیتی ہے جو آپ کی دلچسپی کے درجے تک نہیں پہنچتا، اور ڈی ڈپلیکیشن ونڈو ایک ہی الرٹ کو چالیس بار آپ کو جگانے سے روکتی ہے۔
اگر SNS دستیاب نہ ہو —نیٹ ورک بند، رول کے پاس ابھی اجازت نہیں، ریجن تک رسائی نہیں— تو الرٹ ضائع نہیں ہوتا: وہ ڈسک پر قطار میں لگ جاتا ہے اور systemd کا ایک ٹائمر ہر 5 منٹ بعد دوبارہ کوشش کرتا ہے۔
آپ کو ایک SNS ٹاپک کا ARN چاہیے (arn:aws:sns:ریجن:اکاؤنٹ:ٹاپک) اور یہ کہ انسٹنس اُس پر شائع کر سکے۔ اگر آپ نے AMI لانچر سے چلائی ہے تو CloudFormation ٹیمپلیٹ پہلے ہی ٹاپک بناتا ہے، آپ کا ای میل سبسکرائب کرتا ہے، sns:Publish والا IAM رول بناتا ہے اور ARN بطور ٹیگ انسٹنس کو دیتا ہے: ماڈیول خود ترتیب پا جاتا ہے اور یہاں کچھ کرنے کو نہیں رہتا۔
عام کام #
منتخب کریں کہ آپ کیا کرنا چاہتے ہیں۔ ہر نسخے میں کمانڈ پہلے سے لکھی ہے — ARN اور متن اپنا ڈالیں، اور کاپی دبائیں۔
1
SNS ٹاپک مقرر کرنا
انسٹنس کو بتائیں کہ اسے اپنی اطلاعات کہاں شائع کرنی ہیں۔
ubuntu صارف کے ساتھ SSH سے اپنے سرور پر جڑیں۔
ماڈیول کو اپنے ٹاپک کے ARN کی طرف موڑیں۔ ریجن خود ARN سے نکل آتا ہے، اس لیے عام طور پر اسے بتانے کی ضرورت نہیں:
$ sudo imaxe global-alerts configure \
--topic-arn arn:aws:sns:eu-west-1:123456789012:imaxe-alertsکئی انسٹنس ایک ہی ٹاپک پر شائع کر رہے ہیں؟ --source سے ہر ایک کو پہچانا جانے والا ماخذ لیبل دیں (بطور ڈیفالٹ hostname استعمال ہوتا ہے):
$ sudo imaxe global-alerts configure --source web-prod-1/etc/imaxe/global-alerts.yml میں رہتی ہے اور بھیجنا فعال ہو جاتا ہے۔ اب آزمائشی الرٹ بھیجنا والے نسخے پر جائیں۔2
آزمائشی الرٹ بھیجنا
چینل پر بھروسا کرنے سے پہلے دیکھ لیں کہ IAM رول واقعی شائع کرتا ہے۔
مقرر کردہ ٹاپک پر ایک آزمائشی الرٹ شائع کریں:
$ sudo imaxe global-alerts testآزمائش حد اور ڈی ڈپلیکیشن کو نظرانداز کر دیتی ہے —وہ ہمیشہ نکلتی ہے— اور اگر کچھ ناکام ہو تو خاموشی سے قطار میں ڈالنے کے بجائے آپ کو AWS کی اصل خرابی واپس دیتی ہے۔ ٹاپک سے سبسکرائب پتے کا ان باکس دیکھیں (اور اسپیم فولڈر بھی)۔
MessageId نظر آئے اور اطلاع پہنچ جائے تو چینل کام کر رہا ہے۔ اگر AuthorizationError آئے تو انسٹنس کے پاس اُس ٹاپک پر sns:Publish اجازت نہیں۔3
اسکرپٹ سے الرٹ بھیجنا
وہی چینل جو ماڈیولز استعمال کرتے ہیں، آپ کے اپنے کاموں کے لیے بھی۔
اپنی شدت اور اپنے ماخذ کے ساتھ ایک الرٹ:
$ sudo imaxe global-alerts send --severity critical \
--source backup --subject "بیک اپ ناکام" \
"ڈیٹابیس کا رات والا بیک اپ خرابی کے ساتھ ختم ہوا"اگر متن کوئی اور کمانڈ بناتی ہے تو پیغام کی جگہ - دے کر اسے stdin سے بھیجیں:
$ df -h / | sudo imaxe global-alerts send --severity warning -جو چیز ہر چند منٹ بعد چلتی ہے، اسے ایک مستحکم ڈی ڈپلیکیشن کلید دیں: مقرر کردہ ونڈو کے اندر صرف پہلی ہی نکلے گی:
$ sudo imaxe global-alerts send --severity warning \
--dedup-key root-disk-full "روٹ ڈسک 95% پر"--dedup-key کے بغیر ماڈیول ماخذ + شدت + موضوع سے ایک کلید بنا لیتا ہے۔4
بس کی حالت دیکھنا
ٹاپک، ریجن، AWS کا CLI اور زیرِ التوا الرٹس — ایک نظر میں۔
موجودہ حالت کا خلاصہ:
$ sudo imaxe global-alerts statusیہ جانچنے کے لیے کہ اصل میں کون سی ترتیب چل رہی ہے —بشمول وہ جو انسٹنس کے ٹیگز سے آتی ہے اور فائل پر بھاری پڑتی ہے—:
$ sudo imaxe global-alerts show
$ sudo imaxe global-alerts status --json--json کے ساتھ یہ کسی پینل یا اسکرپٹ کے لیے تیار ہے۔5
شور کم کرنا
شدت کی حد بڑھائیں اور ڈی ڈپلیکیشن ونڈو کشادہ کریں۔
اگر آپ صرف اہم باتیں جاننا چاہتے ہیں تو warning سے نیچے کی ہر چیز ہٹا دیں:
$ sudo imaxe global-alerts configure --min-severity warningڈی ڈپلیکیشن ونڈو کا کوئی فلیگ نہیں: وہ کنفیگریشن فائل میں طے ہوتی ہے۔ اگر ایک ہی الرٹ بار بار آئے تو اسے بڑھا دیں:
dedup_window: 1h # 30s، 5m، 1h… (ڈیفالٹ 5m)test پھر بھی ہمیشہ شائع کرتا ہے، اس لیے چینل جانچنے کا طریقہ آپ کے پاس رہتا ہے۔6
قطار دیکھنا اور دوبارہ بھیجنا
جب SNS نے جواب نہ دیا تو کیا باقی رہ گیا، اور بھیجنے پر کیسے مجبور کریں۔
دیکھیں کیا زیرِ التوا ہے اور حال ہی میں بھیجی گئی کلیدیں کون سی ہیں:
$ sudo imaxe global-alerts historyدوبارہ کوشش تو systemd کا ٹائمر ہر 5 منٹ بعد کرتا ہی ہے، مگر اجازت یا نیٹ ورک ٹھیک کرنے کے بعد آپ اسے زبردستی بھی چلا سکتے ہیں:
$ sudo imaxe global-alerts flush
$ systemctl status imaxe-global-alerts-flush.timer7
ماڈیول خاموش کرنا
ترتیب کھوئے بغیر شائع کرنا بند کریں۔
الرٹ بھیجنا غیر فعال کریں اور دوبارہ کوشش کا ٹائمر ہٹا دیں:
$ sudo imaxe global-alerts removeٹاپک، ریجن اور باقی ترتیبات فائل میں محفوظ رہتی ہیں: دوبارہ چالو کرنے کے لیے ایک configure کافی ہے، وہی ماڈیول کو پھر فعال کر دیتا ہے۔
send ناکام نہیں ہوتے: وہ stderr پر بتا دیتے ہیں کہ ماڈیول غیر فعال ہے اور کوڈ 0 کے ساتھ ختم ہوتے ہیں۔ماڈیول انسٹنس کے رول کی کریڈنشلز سے شائع کرتا ہے، محفوظ کی گئی کلیدوں سے نہیں۔ اگر رول اُس ٹاپک پر sns:Publish کی اجازت نہ دے تو الرٹ ایک کے بعد ایک قطار میں جمع ہوتے رہیں گے اور کبھی نہیں پہنچیں گے۔ ایک imaxe global-alerts test یہ فوراً بتا دیتا ہے، اور خرابی بعینہٖ دکھاتا ہے جیسے AWS واپس کرتا ہے۔
خلاصہ #
imaxe global-alerts <ذیلی-کمانڈ> [--topic-arn ARN] [--severity درجہ] [فلیگز]تمام ذیلی کمانڈز کو root اختیارات درکار ہیں (sudo لگائیں)، کیونکہ وہ /etc/imaxe/ میں لکھتی ہیں، حالت /var/lib/imaxe/ میں رکھتی ہیں اور systemd کی ایک یونٹ سنبھالتی ہیں۔ سنبھالنے کو کوئی راز نہیں: اشاعت انسٹنس کے IAM رول سے ہوتی ہے۔ مشین کے پڑھنے لائق آؤٹ پٹ کے لیے status، show، history یا flush کے ساتھ --json جوڑیں۔
ذیلی کمانڈز #
| ذیلی کمانڈ | کیا کرتی ہے | متعلقہ فلیگز |
|---|---|---|
| status | حالت: مقرر کردہ ٹاپک، مؤثر ریجن، AWS کا CLI دستیاب ہے یا نہیں، اور قطار میں الرٹس۔ | --json |
| configure | SNS ٹاپک اور بھیجنے کے اختیارات طے کرتی ہے۔ ماڈیول غیر فعال ہو تو دوبارہ فعال کر دیتی ہے۔ | --topic-arn, --region, --source, --min-severity |
| send | ایک الرٹ شائع کرتی ہے۔ یہی وہ چینل ہے جو آپریٹر اور باقی ماڈیولز استعمال کرتے ہیں۔ | --severity, --source, --subject, --dedup-key |
| test | حد اور ڈی ڈپلیکیشن کو نظرانداز کر کے آزمائشی الرٹ شائع کرتی ہے، اور ناکامی پر اصل خرابی بتاتی ہے۔ | --severity |
| show | مؤثر ترتیب دکھاتی ہے (فائل + پہلے سے لاگو انسٹنس ٹیگز)۔ | --json |
| history | قطار میں زیرِ التوا الرٹس اور حال ہی میں بھیجی گئی ڈی ڈپلیکیشن کلیدیں۔ | --json |
| flush | قطار میں پڑے الرٹ دوبارہ بھیجتی ہے۔ systemd کا ٹائمر بھی یہی چلاتا ہے۔ | --json |
| remove | بھیجنا غیر فعال کرتی ہے اور ٹائمر ہٹاتی ہے۔ ترتیب محفوظ رکھتی ہے۔ | — |
آرگیومنٹس اور فلیگز #
| فلیگ | قسم | ڈیفالٹ | تفصیل |
|---|---|---|---|
| --topic-arn لازمی | string | — | ہدف SNS ٹاپک کا ARN (arn:aws:sns:ریجن:اکاؤنٹ:ٹاپک)۔ اس کے بغیر ماڈیول شائع نہیں کر سکتا۔ |
| --region | string | ARN سے | AWS ریجن۔ نہ دیا جائے تو ٹاپک کے ARN سے نکلتا ہے؛ وہاں بھی نہ ملے تو IMDS یا AWS_REGION سے۔ |
| --source | string | hostname | ماخذ لیبل۔ configure میں انسٹنس کا؛ send میں اُسی الرٹ کا (مثلاً وہ ماڈیول جو اسے بھیج رہا ہے)۔ |
| --min-severity | string | info | حد: اس درجے سے نیچے کے الرٹ ہٹا دیتی ہے۔ اقدار: info، warning، critical۔ |
| --severity | string | info | send/test میں: اس الرٹ کا درجہ۔ مختصر صورتیں warn اور crit بھی قبول ہیں۔ |
| --subject | string | پیغام سے | مختصر موضوع۔ نہ دیا جائے تو خود پیغام سے نکال لیا جاتا ہے۔ |
| --dedup-key | string | خودکار | ڈی ڈپلیکیشن کلید: dedup_window کے اندر تکرار دبا دیتی ہے۔ بطور ڈیفالٹ ماخذ + شدت + موضوع سے شمار ہوتی ہے۔ |
| <پیغام> لازمی | پوزیشنل | — | send میں: الرٹ کا متن، یا stdin سے پڑھنے کے لیے -۔ |
| --json | bool | false | status، show، history اور flush میں نتیجہ JSON کے طور پر stdout پر دیتی ہے۔ |
جب کوئی الرٹ ہٹایا جاتا ہے —ماڈیول غیر فعال، شدت حد سے نیچے، یا ونڈو کے اندر تکرار— تو send اسے stderr پر واضح کرتا ہے اور کوڈ 0 کے ساتھ ختم ہوتا ہے۔ یوں جس اسکرپٹ نے اسے بھیجا تھا، وہ آپ ہی کے لگائے فلٹر کی وجہ سے نہیں ٹوٹتی۔
انسٹنس ٹیگز سے ترتیب #
ہر تعیناتی کو اپنے ٹاپک کی طرف اشارہ کرنا ہوتا ہے، اور اس کے لیے AMI دوبارہ بنانا بے معنی ہوگا۔ اسی لیے ماڈیول فائل کے علاوہ imaxe.global-alerts. سابقے والے انسٹنس ٹیگز IMDSv2 سے پڑھتا ہے: اگر وہ موجود ہوں تو YAML پر بھاری پڑتے ہیں۔ لانچر کا CloudFormation ٹیمپلیٹ یہی کرتا ہے، اور وہ مزید MetadataOptions.InstanceMetadataTags: enabled بھی مانگتا ہے تاکہ انہیں پڑھا جا سکے۔
| ٹیگ | کس کے برابر | اقدار |
|---|---|---|
| imaxe.global-alerts.topic_arn | topic_arn | ہدف SNS ٹاپک کا ARN۔ |
| imaxe.global-alerts.region | region | AWS ریجن؛ خالی = ARN یا IMDS سے نکالا جاتا ہے۔ |
| imaxe.global-alerts.source | source | ماخذ لیبل؛ خالی = hostname۔ |
| imaxe.global-alerts.min_severity | min_severity | info · warning · critical |
| imaxe.global-alerts.dedup_window | dedup_window | دورانیہ: 30s، 5m، 1h… |
| imaxe.global-alerts.enabled | enabled | true/false (نیز 1/0، yes/no، on/off)۔ |
AWS سے باہر، یا IMDS بند ہو تو یہ پڑھائی ملی سیکنڈوں میں ناکام ہو جاتی ہے اور ماڈیول فائل میں لکھی بات پر چلتا رہتا ہے۔ اصل میں کیا فعال ہوا، یہ دیکھنے کے لیے imaxe global-alerts show۔
فائلیں اور راستے #
| راستہ | مواد |
|---|---|
| /etc/imaxe/global-alerts.yml | ماڈیول کی ترتیب: ٹاپک، ریجن، ماخذ، حد اور ڈی ڈپلیکیشن ونڈو۔ |
| /var/lib/imaxe/state/global-alerts/spool/ | زیرِ التوا الرٹس کی قطار، ہر ایک الگ .json فائل میں، وقت کی ترتیب سے۔ |
| /var/lib/imaxe/state/global-alerts/sent.json | ڈی ڈپلیکیشن کلیدوں کا ریکارڈ، آخری بار بھیجے جانے کے وقت کے ساتھ۔ |
| /etc/systemd/system/imaxe-global-alerts-flush.timer | دوبارہ کوشش کا ٹائمر: بوٹ کے 2 منٹ بعد شروع ہوتا ہے اور ہر 5 منٹ پر دہراتا ہے۔ |
global-alerts.yml کی مثال:
enabled: true
topic_arn: arn:aws:sns:eu-west-1:123456789012:imaxe-alerts
region: "" # خالی = ARN یا IMDS سے نکالا جاتا ہے
source: "" # خالی = انسٹنس کا hostname
min_severity: info
dedup_window: 5mحالت (قطار اور ڈی ڈپلیکیشن ریکارڈ) جان بوجھ کر /var/lib/imaxe/ میں رہتی ہے، /etc/ میں نہیں: یہ حالت ہے، ترتیب نہیں۔ دونوں راستے ماحول کے متغیرات IMAXE_CONFIG_DIR اور IMAXE_STATE_DIR سے بدلے جا سکتے ہیں۔
الرٹ کی ساخت #
SNS پیغام کا متن ورژن والا JSON ہے (schema: 1)، تاکہ سبسکرائبر اسے ای میل سے پڑھنے کے علاوہ کسی Lambda یا قطار سے بھی سنبھال سکے:
{
"schema": 1,
"severity": "critical",
"source": "backup",
"subject": "بیک اپ ناکام",
"message": "ڈیٹابیس کا رات والا بیک اپ خرابی کے ساتھ ختم ہوا",
"host": "web-prod-1",
"instance_id": "i-0abc123def4567890",
"region": "eu-west-1",
"ts": "2026-07-25T03:14:07Z",
"dedup_key": "9f2c1b7e44a0d513"
}SNS پیغام کا موضوع [imaxe][شدت] host: موضوع کی طرح بنتا ہے، قابلِ طباعت ASCII میں صاف کیا جاتا ہے اور 100 حروف پر کاٹ دیا جاتا ہے، جو SNS کی حد ہے۔
ایگزٹ کوڈز اور لاگز #
ہر بار چلنے پر ایک کوڈ واپس آتا ہے جسے آپ echo $? سے دیکھ سکتے ہیں — اسکرپٹ میں سلسلہ بنانے کے لیے مفید:
ماڈیول imaxe کی صحت جانچ کا بھی جواب دیتا ہے: اگر وہ فعال ہو مگر ٹاپک نہ ہو تو health ناکام ہو جاتا ہے، یوں پہلا الرٹ درکار ہونے سے پہلے ہی ایک imaxe health اسے پکڑ لیتا ہے۔
$ sudo imaxe global-alerts test; echo "ایگزٹ: $?"
$ journalctl -u imaxe-global-alerts-flush.service -n 50مسائل کا حل #
| علامت | ممکنہ سبب | حل |
|---|---|---|
| NO TOPIC آتا ہے (کوڈ 64) | نہ فائل میں ٹاپک کا ARN ہے نہ ٹیگز میں۔ | configure --topic-arn … چلائیں، یا دیکھیں کہ انسٹنس پر imaxe.global-alerts.topic_arn ٹیگ ہے اور میٹا ڈیٹا میں ٹیگز فعال ہیں۔ |
| بار بار «SNS دستیاب نہیں؛ الرٹ قطار میں» | انسٹنس کے رول کو اُس ٹاپک پر sns:Publish حاصل نہیں، یا ARN کسی اور اکاؤنٹ/ریجن کا ہے۔ | AWS کی درست خرابی دیکھنے کے لیے test چلائیں، رول کی پالیسی درست کریں اور پھر flush۔ |
| status میں «aws CLI دستیاب: false» | انسٹنس پر AWS کا CLI نصب نہیں؛ ماڈیول اسی کے ذریعے شائع کرتا ہے۔ | AWS کا CLI نصب کریں۔ imaxe کی AMIs میں وہ پہلے سے آتا ہے؛ اپنے ہوسٹ پر اسے شامل کرنا پڑتا ہے۔ |
| آپ کچھ ترتیب دیتے ہیں اور show پھر بھی دوسری قدر دکھاتا ہے | کوئی imaxe.global-alerts.* ٹیگ فائل پر حاوی ہے: ڈیزائن کے مطابق اسی کو ترجیح ہے۔ | YAML کے بجائے انسٹنس کا ٹیگ (یا CloudFormation اسٹیک کا پیرامیٹر) بدلیں۔ |
| کئی ایک جیسے الرٹس میں سے صرف پہلا پہنچتا ہے | ڈی ڈپلیکیشن ونڈو انہیں دبا رہی ہے۔ | یہی متوقع ہے۔ dedup_window گھٹائیں، یا اگر وہ واقعی مختلف واقعات ہیں تو الگ الگ --dedup-key استعمال کریں۔ |
| کچھ نہیں آتا اور کوئی خرابی بھی نہیں | ماڈیول غیر فعال ہے، یا شدت min_severity سے نیچے ہے۔ | show آپ کو enabled اور حد دکھاتا ہے؛ configure بھیجنا دوبارہ فعال کر دیتا ہے۔ |
| الرٹ شائع ہوتے ہیں مگر ای میل سے نہیں پہنچتے | SNS ٹاپک کی سبسکرپشن تصدیق شدہ نہیں۔ | AWS کی تصدیقی ای میل تلاش کریں (اسپیم دیکھیں) اور SNS کنسول میں سبسکرپشن قبول کریں۔ |
کیا الرٹس ماڈیول کے ساتھ اٹک گئے ہیں؟
«imaxe <module> status --json» کے آؤٹ پٹ کے ساتھ ہمیں لکھیں اور ہم فوراً جواب دیں گے۔