यह मॉड्यूल क्या करता है #
एक इंस्टेंस के पास बताने को बहुत कुछ होता है: 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» का आउटपुट भेजें और हम आपको जल्दी जवाब देंगे।