लॉन्चर उत्पाद Bitnami दस्तावेज़imaxe CLI ब्लॉग संपर्क
imaxe global-alerts अलर्ट v1.0.0

अपने पूरे फ़्लीट को सुनने की एक ही जगह

इंस्टेंस की महत्वपूर्ण सूचनाएँ —घुसपैठ, भरा हुआ डिस्क, बंद पड़ी सेवा— एक साझा SNS टॉपिक पर प्रकाशित करता है। ऑपरेटर और बाकी मॉड्यूल इसे एकमात्र चैनल की तरह इस्तेमाल करते हैं: गंभीरता की सीमा, डीडुप्लिकेशन, और SNS के जवाब न देने पर पुनःप्रयास कतार।

$ imaxe global-alerts send --severity critical "रूट डिस्क 95% पर"
संस्करण
v1.0.0
उपआदेश
8
कॉन्फ़िग
/etc/imaxe/global-alerts.yml
root आवश्यक
हाँ
ट्रांसपोर्ट
Amazon SNS · IAM रोल

यह मॉड्यूल क्या करता है #

एक इंस्टेंस के पास बताने को बहुत कुछ होता है: 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% पर"
अलर्ट JSON के रूप में टॉपिक तक जाता है, जिसमें इंस्टेंस, क्षेत्र और समय-चिह्न पहले से शामिल होते हैं। --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

डीडुप्लिकेशन विंडो का कोई फ़्लैग नहीं है: वह कॉन्फ़िगरेशन फ़ाइल में तय होती है। अगर एक ही अलर्ट बार-बार आता है तो उसे बढ़ा दीजिए:

/etc/imaxe/global-alerts.yml
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.timer
आपको दिखेगा कि कितने निकले और कितने अब भी इंतज़ार में हैं। अगर पहला फिर विफल हो जाए, तो यह चक्कर वहीं रुक जाता है और बाकी अगली कोशिश के लिए छोड़ देता है: कुछ भी फेंका नहीं जाता।
7

मॉड्यूल चुप कराना

कॉन्फ़िगरेशन खोए बिना प्रकाशित करना बंद कीजिए।

अलर्ट भेजना बंद कीजिए और पुनःप्रयास टाइमर हटाइए:

टर्मिनल
$ sudo imaxe global-alerts remove

टॉपिक, क्षेत्र और बाकी सेटिंग्स फ़ाइल में बनी रहती हैं: दोबारा चालू करने के लिए एक configure काफ़ी है, वही मॉड्यूल को फिर सक्षम कर देता है।

इंस्टेंस प्रकाशित करना बंद कर देता है। इसके बाद के send विफल नहीं होते: वे stderr पर बता देते हैं कि मॉड्यूल निष्क्रिय है और कोड 0 के साथ समाप्त होते हैं।
IAM रोल के बिना अलर्ट नहीं

मॉड्यूल इंस्टेंस के रोल की क्रेडेंशियल से प्रकाशित करता है, सहेजी हुई कुंजियों से नहीं। अगर रोल उस टॉपिक पर sns:Publish की अनुमति नहीं देता, तो अलर्ट एक के बाद एक कतार में जमा होते रहेंगे और कभी पहुँचेंगे नहीं। एक imaxe global-alerts test यह तुरंत बता देता है, और वह त्रुटि जस की तस दिखाता है जैसी AWS लौटाता है।

CLI संदर्भआदेश, फ़्लैग और फ़ाइलें

सारांश #

उपयोग
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
configureSNS टॉपिक और भेजने के विकल्प तय करता है। मॉड्यूल निष्क्रिय था तो फिर सक्षम कर देता है।--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:क्षेत्र:खाता:टॉपिक)। इसके बिना मॉड्यूल प्रकाशित नहीं कर सकता।
--regionstringARN सेAWS क्षेत्र। न दिया जाए तो टॉपिक के ARN से निकलता है; वहाँ भी न मिले तो IMDS या AWS_REGION से।
--sourcestringhostnameस्रोत लेबल। configure में इंस्टेंस का; send में उसी अलर्ट का (जैसे वह मॉड्यूल जो उसे भेज रहा है)।
--min-severitystringinfoसीमा: इस स्तर से नीचे के अलर्ट हटा देती है। मान: info, warning, critical
--severitystringinfosend/test में: इस अलर्ट का स्तर। छोटे रूप warn और crit भी चलते हैं।
--subjectstringसंदेश सेछोटा विषय। न दिया जाए तो संदेश से ही निकाल लिया जाता है।
--dedup-keystringस्वतःडीडुप्लिकेशन कुंजी: dedup_window के भीतर पुनरावृत्तियाँ दबा देती है। डिफ़ॉल्ट रूप से स्रोत + गंभीरता + विषय से बनती है।
<संदेश> अनि.स्थानिकsend में: अलर्ट का पाठ, या stdin से पढ़ने के लिए -
--jsonboolfalsestatus, show, history और flush में परिणाम JSON के रूप में stdout पर देता है।
हटाया जाना विफल होना नहीं है

जब कोई अलर्ट हटाया जाता है —मॉड्यूल निष्क्रिय, गंभीरता सीमा से नीचे, या विंडो के भीतर दोहराव— तो send इसे stderr पर समझाता है और कोड 0 के साथ समाप्त होता है। इस तरह जिस स्क्रिप्ट ने उसे भेजा था, वह आपकी ही लगाई फ़िल्टर की वजह से नहीं टूटती।

इंस्टेंस टैग से कॉन्फ़िगरेशन #

हर तैनाती को अपने टॉपिक की ओर इशारा करना होता है, और उसके लिए AMI दोबारा बनाना बेमानी होगा। इसीलिए मॉड्यूल फ़ाइल के अलावा imaxe.global-alerts. उपसर्ग वाले इंस्टेंस टैग IMDSv2 से पढ़ता है: अगर वे मौजूद हों तो YAML पर भारी पड़ते हैं। लॉन्चर का CloudFormation टेम्पलेट यही करता है, और वह साथ में MetadataOptions.InstanceMetadataTags: enabled भी माँगता है ताकि वे पढ़े जा सकें।

टैगकिसके बराबरमान
imaxe.global-alerts.topic_arntopic_arnगंतव्य SNS टॉपिक का ARN।
imaxe.global-alerts.regionregionAWS क्षेत्र; खाली = ARN या IMDS से निकाला जाता है।
imaxe.global-alerts.sourcesourceस्रोत लेबल; खाली = hostname
imaxe.global-alerts.min_severitymin_severityinfo · warning · critical
imaxe.global-alerts.dedup_windowdedup_windowअवधि: 30s, 5m, 1h
imaxe.global-alerts.enabledenabledtrue/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 का उदाहरण:

/etc/imaxe/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 $? से देख सकते हैं — स्क्रिप्ट में शृंखला बनाने के लिए उपयोगी:

0OKकाम पूरा हुआ। तब भी, जब अलर्ट जान-बूझकर हटाया या कतार में डाला गया हो।
1ERRसामान्य त्रुटि: परीक्षण प्रकाशित नहीं हो सका, या उसे प्रकाशित किया जा सका कतार में डाला जा सका।
2USAGEअमान्य आर्गुमेंट: अनजान फ़्लैग, संदेश गायब, या गंभीरता अमान्य।
64NO TOPICकोई SNS टॉपिक कॉन्फ़िगर नहीं है, न फ़ाइल से न टैग से।

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

सहायता से संपर्क करें