আমরা যখন "প্রায় খালি" থাকি তখন আমাদের জানাতে ইলাস্টিক সার্চ সতর্কতা ব্যবহার করে
অবজেক্ট রকেট-এ, আমরা আমাদের অফিসে ঠাণ্ডা ব্রু কফি দিয়ে জ্বালানি। আগস্ট মাসে অস্টিন, TX-এ এখানে গরম। আমাদের ক্যাফেইন ঠান্ডা দরকার৷
যেহেতু আমরা একবারে শুধুমাত্র একটি পিপা রাখি, ফুরিয়ে না গিয়ে আমাদের অর্ডারের সময়সূচী করা কঠিন হতে পারে, তাই অবজেক্ট রকেট অফিসে কেউ যখন উল্লেখ করেছিল যে তারা "আমাদের কোল্ড ব্রু ব্যবহার সম্পর্কে আরও ভাল ডেটা পেতে চায়" তখন আমি সব শেষ হয়ে গিয়েছিলাম। ইলাস্টিক স্ট্যাক কী করতে পারে তা দেখানোর জন্য আমি সর্বদা কিছু নতুন উপায় খুঁজছি, তাই আমি একটি আধা-স্বায়ত্তশাসিত পর্যবেক্ষণ এবং সতর্কতা ব্যবস্থা তৈরি করার জন্য প্রস্তুত হয়েছি যাতে আমাদের আর কখনই ঠান্ডা পানীয় শেষ না হয়।
আমরা যা শেষ করেছি তা হল একটি রাস্পবেরি পাই, ইলাস্টিকসার্চ, কিবানা এবং সেন্টিনল/ইলাস্টঅ্যালার্টের সংমিশ্রণ যাতে পিপাতে গুরুত্বপূর্ণ কিছু ঘটলে স্ল্যাককে সতর্ক করে দেয়। সেন্টিনল এবং ইলাস্ট অ্যালার্ট এই অনুষ্ঠানের তারকা ছিলেন তাই আমরা পরে সেগুলি নিয়ে আলোচনা করব৷
এই দুই-অংশের সিরিজের প্রথমটিতে, আমরা আমাদের কেজেরেটর সলিউশন থেকে ক্যাপচার করা ডেটা দিয়ে কীভাবে একটি সতর্কতা সিস্টেম তৈরি করেছি তা আমরা অন্বেষণ করব। আমার আশা হল আপনি ইলাস্টিকসার্চের জন্য ওপেন সোর্স সতর্কতা বিকল্পগুলি সম্পর্কে কিছু ধারণা এবং কিছু জ্ঞান নিয়ে চলে যাবেন। পরবর্তী পোস্টের জন্য আমি কীভাবে শারীরিকভাবে সিস্টেমটি তৈরি করেছি তার বিশদ বিবরণ সংরক্ষণ করব।
কেগ থেকে ডেটা (শুধু ঠান্ডা চোলাই নয়)
যেমনটি আমি উল্লেখ করেছি, আমরা পরের ব্লগে kegerator বিল্ড-আউট নিয়ে আলোচনা করব এবং কেন আমরা একটি প্রবাহ হার মনিটরিং সিস্টেম তৈরি করার পরিবর্তে একটি স্কেল-কেগ-ওয়েট সমাধান ব্যবহার করা বেছে নিয়েছি।
এই ব্লগের জন্য আপনার যা জানা দরকার তা হল আমি একটি রাস্পবেরি পাই-চালিত স্কেল সেট আপ করেছি যা নীচের মত বিন্যাসে ইলাস্টিকসার্চে নথির একটি নিয়মিত প্রবাহ পাঠায়৷
{
"_index": "filebeat-6.2.4-2018.05.15",
"_type": "doc",
"_source": {
"@timestamp": "2018-05-15T16:50:49.000Z",
"beat": {
"hostname": "raspberrypi",
"name": "raspberrypi",
"version": "6.2.4"
},
"weight": 58.4,
"message": "2018-05-15T16:50:49+0000 - -0.4"
}
}
ফাইলবিট ডেটা দখল করে এবং দুটি প্রধান ক্ষেত্র অন্তর্ভুক্ত করে যা আমরা আগ্রহী:
- প্রতিটি ওজন পড়ার “@timestamp”
- সেই টাইমস্ট্যাম্পে প্রকৃত "ওজন" পড়া
সতর্ক করার বিকল্পগুলি
প্রথম জিনিসগুলি প্রথমে:পিপা সঙ্গে কিছু আছে যখন পদক্ষেপ নিতে, আমার গুরুত্বপূর্ণ ব্যক্তিদের বিজ্ঞপ্তি পাঠানোর একটি উপায় প্রয়োজন. এখানেই একটি সতর্কতামূলক প্যাকেজ কার্যকর হয়৷
৷সৌভাগ্যবশত একটি ইলাস্টিকসার্চ ক্লাস্টারে সতর্কতা যোগ করার জন্য সেখানে অনেকগুলি Apache 2.0 লাইসেন্সকৃত বিকল্প রয়েছে:ElastAlert এবং Sentinl৷
ইলাস্ট অ্যালার্ট
ElastAlert হল ইলাস্টিক সার্চের জন্য একটি নমনীয় সতর্কতা কাঠামো যা ইলেপ দ্বারা তৈরি করা হয় যা ইলাস্টিকসার্চ থেকে আলাদাভাবে চলে এবং প্রধানত মৌলিক কনফিগার ফাইলগুলির মাধ্যমে কনফিগার করা হয়। ব্যবহারকারীরা সমস্ত সতর্কতা জুড়ে গ্লোবাল প্যারামিটার সহ একটি প্রধান কনফিগার ফাইল তৈরি করতে পারে, তারপরে নিয়ম এবং ফলস্বরূপ সতর্কতাগুলি কনফিগার করতে ElastAlert-নির্দিষ্ট YAML ধারণ করে প্রতিটি নিয়মের জন্য নিয়ম ফাইল তৈরি করতে পারে। প্রতিটি "নিয়ম" এর মধ্যে রয়েছে:
- নিয়মগুলির একটি আদর্শ তালিকার উপর ভিত্তি করে নিয়ম কনফিগারেশন (যেমন "ফ্ল্যাটলাইন", "স্পাইক", এবং "মেট্রিক অ্যাগ্রিগেশন")
- প্রতিটি নিয়ম ব্যবহার করে ক্যোয়ারী হিট সীমিত করতে ইলাস্টিক সার্চ ফিল্টার
- যখন নিয়মের অংশটি ইতিবাচক হয় (যেমন ইমেল, জিরা, স্ল্যাক, ইত্যাদি) তখন ফায়ার করার একটি সতর্কতা
সেন্টিনল
Sentinl ElastAlert এর থেকে একটু নতুন। অবজেক্ট রকেট সেন্টিনল জুড়ে হোঁচট খেয়েছে — সাইরেন সলিউশন দ্বারা তৈরি — যখন অবজেক্ট রকেট পরিষেবাতে গ্রাহকদের জন্য নতুন সতর্কতার বিকল্পগুলি খুঁজছেন৷ সেন্টিনল হল একটি কিবানা প্লাগইন যা ইলাস্টিকসার্চের জন্য সতর্কতা ছাড়াও রিপোর্টিং অফার করে। এটি প্রতিটি কাজকে "পর্যবেক্ষক" বলে (একই নামের পুরানো প্লাগইনের সাথে বিভ্রান্ত হবেন না) সহ:
- একটি সময়সূচী (কত ঘন ঘন এবং কখন পরীক্ষা করতে হবে)
- একটি ইনপুট ক্যোয়ারী (আপনি যে ডেটা পরীক্ষা করতে চান তার জন্য একটি ইলাস্টিক সার্চ ক্যোয়ারী)
- একটি শর্ত (যুক্তি যা নির্ধারণ করে ডেটাতে সতর্ক করা হবে কিনা)
- একটি রূপান্তর (সতর্ক করার আগে ডেটা পরিবর্তন করার কোড)
- ক্রিয়া (আপনি যখন স্ল্যাক, ইমেল বা ওয়েবহুকের মতো সতর্ক করেন তখন কী করবেন)
কোন সতর্কতা বিকল্পটি আপনার জন্য সঠিক?
উভয়ই সত্যিই দুর্দান্ত, তাই এটি নির্ভর করে আপনি কোন ধরণের সতর্কতা খুঁজছেন তার উপর। এখানে আমার ফলাফল আছে:
ElastAlert | সেন্টিনল | |
সুবিধা |
|
|
অপরাধ |
|
|
সতর্কতা তৈরি করা
এখন আমাকে কী ধরণের সতর্কতা তৈরি করতে হবে তা নির্ধারণ করতে হবে। আমি শেষ পর্যন্ত যা জানতে চাই তা হল কখন আমাদের আরও ঠান্ডা-ব্রু অর্ডার করা উচিত। আমাকে সতর্কতা তৈরি করতে হবে যা আমাদের বলেছে:
পিপা খালি / প্রায় খালি
বেশ সহজ:ওজন একটি নির্দিষ্ট থ্রেশহোল্ডের নিচে নেমে গেলে রিপোর্ট করুন।
পিপা প্রতিস্থাপন করা হয়েছে
আহা, তাজা কফি আছে:কখন ওজন বেড়ে যায় তা শনাক্ত করে।
মনিটরিং ভেঙে গেছে৷
কোনও ডেটা নেই, কোনও সতর্কতা নেই:স্কেল কখন ডেটা পাঠানো বন্ধ করেছে তা আমাদের জানতে হবে
পিপা খালি / প্রায় খালি
এই পরিস্থিতিতে, ওজন "খালি" হিসাবে বিবেচিত মনোনীত থ্রেশহোল্ডের নীচে হলে আমি একটি সতর্কতা সেট করি এবং ওজন যদি ইঙ্গিত করে যে প্রায় 20% কেগ অবশিষ্ট আছে তবে আমাদের সতর্ক করি৷
ইলাস্ট অ্যালার্ট
ElastAlert মেট্রিক একত্রীকরণ নিয়মের প্রকারের সাথে এটিকে বেশ সহজ করে তোলে:একটি মেট্রিক থেকে একটি সমষ্টি তৈরি করুন এবং তারপর এটি একটি নির্দিষ্ট থ্রেশহোল্ডের উপরে বা নীচে তা নির্ধারণ করুন৷
# (Required)
# Rule name, must be unique
name: Empty Alarm
# (Required)
# Type of alert.
type: metric_aggregation
# (Required)
# Index to search, wildcard supported
index: filebeat-*
# How much data should we use
buffer_time:
hours: 1
# How often can we send this alert?
realert:
hours: 24
# Type of elasticsearch document to use
doc_type: doc
metric_agg_key: weight
metric_agg_type: max
min_threshold: 41
# (Required)
# The alert is use when a match is found
alert:
- "slack"
alert_subject: The cold brew keg is empty
alert_text_type: alert_text_only
alert_text: "The cold brew keg is empty. Panic."
slack:
slack_webhook_url: "https://hooks.slack.com/services/foo/bar"
slack_msg_color: danger
slack_emoji_override: ":torch-and-pitchfork:"
আমি এটি সেট আপ করেছি বিগত ঘন্টা (বাফার_টাইম) 41 এর নিচে সর্বাধিক ওজনের জন্য (একটি খালি কেগ) এবং প্রতি 24 ঘন্টায় একবার সতর্কতা পাঠাতে চাই। তারপর, আমি স্ল্যাকের সতর্কতা কনফিগার করতে পারি, সতর্কতায় পাঠানোর জন্য ডেটার ধরন এবং এমনকি ব্যবহৃত রঙ এবং ইমোজি সম্পর্কেও নির্দিষ্ট করে দিতে পারি।
এটা সতর্কতা সতর্কতা একটু trickier পায়. আমি শুধুমাত্র জানতে চাই যখন এটি একটি সতর্কতা থ্রেশহোল্ডের মধ্যে থাকে:41-এর উপরে (খালি) কিন্তু 65-এর নিচে (25% চিহ্ন সতর্কতা শুরু করার জন্য যে আমরা প্রায় ঠান্ডা মদ্যপান শেষ করে ফেলেছি)। যেহেতু ElastAlert শুধুমাত্র একটি থ্রেশহোল্ড দেয়, তাই আমি এটি ঠিক করতে তাদের ফিল্টার ব্যবহার করি।
metric_agg_key: weight
metric_agg_type: avg
min_threshold: 65
filter:
- range:
weight:
gte: 41
আমি 41 এর চেয়ে বড় বা সমান ওজন মূল্যায়ন করতে ফিল্টার করি কারণ যদি সমস্ত ওজন 41 এর নিচে হয়, আমি চাই না যে এই সতর্কতাটি ট্রিগার হোক (যেহেতু "খালি" সতর্কতা হবে)। যাইহোক, কিছু ওজন 41 বা তার বেশি হলে "খালি" সতর্কতা ট্রিগার হবে না এবং আমি নির্ধারণ করতে পারি যে গড় আমাদের 65-এর কম প্রয়োজনীয়তা পূরণ করে কিনা।
সেন্টিনল
সেন্টিনল প্রহরী কনফিগার করার জন্য একটি সহজে ব্যবহারযোগ্য GUI প্রদান করে।
প্রথম স্ক্রিনে, শুধু আপনার প্রহরীর নাম দিন এবং সময়সূচী সেট করুন।
ইনপুট হল একটি ইলাস্টিকসার্চ ক্যোয়ারী যা আপনি চান এমন ডেটা ধরতে:যেকোন নথি যা ওজন অন্তর্ভুক্ত করে এবং ওজন ক্ষেত্রে গড় একত্রীকরণ তৈরি করে।
কন্ডিশন স্ক্রিনে, কোন সতর্কতা ট্রিগার করে তা নির্ধারণ করুন:অন্তত কিছু হিট অবশ্যই ফেরত দিতে হবে এবং গড় ওজন অবশ্যই 41-এর নিচে হতে হবে।
এখানে একটি কনসোল সতর্কতা (যা একটি বিশেষ সূচকে একটি নথি সংরক্ষণ করে) যা শর্তটি সত্য হলে একটি বার্তা বন্ধ করে দেয়৷
Sentinl একটি UI এর সাথে আসে, তবে আপনাকে (সামান্য) আরও প্রশ্ন লিখতে হবে। যাইহোক, এগুলি বেশিরভাগই ইলাস্টিকসার্চ কোয়েরি, তাই সম্ভবত আপনি তাদের সাথে স্বাচ্ছন্দ্য বোধ করছেন।
পিপা রিফিল করা হয়েছে
এখন আমার অফিসে একটি সাধারণ ঘোষণা পাঠানোর একটি উপায় দরকার যে কেগটি পুনরায় পূরণ করা হয়েছে। যেহেতু আমরা মাঝে মাঝে বিভিন্ন আকারের কেগ পাই, শুধুমাত্র একটি নির্দিষ্ট থ্রেশহোল্ডের উপরে একটি স্তর খোঁজার পরিবর্তে, আমি ওজনে তীব্র বৃদ্ধি দেখতে চেয়েছিলাম।
ইলাস্ট অ্যালার্ট
ইলাস্ট অ্যালার্টে কেগ ওজনের ঊর্ধ্বমুখী বৃদ্ধি নির্ধারণ করতে "স্পাইক" নামে একটি অন্তর্নির্মিত অন্তর্ভুক্ত রয়েছে:
name: Refill Detector
type: spike
index: filebeat-*
field_value: weight
spike_height: 2
spike_type: 'up'
timeframe:
minutes: 10
threshold_ref: 100
threshold_cur: 100
realert:
hours: 6
এই নিয়মটি ওজন ক্ষেত্রের মানগুলি দেখে এবং সেগুলিকে 10-মিনিটের উইন্ডোতে বালতি করে। যদি কোনো উইন্ডোর ওজনের গড় পূর্ববর্তী 10-মিনিটের উইন্ডোর তুলনায় 2x (স্পাইক_উচ্চতা) বেশি হয়, আমি একটি সতর্কতা প্রকাশ করতে চাই। এছাড়াও, নোট করুন যে 10-মিনিটের একটি উইন্ডো "বৈধ" হওয়ার জন্য এটিতে কমপক্ষে 100টি নমুনা থাকতে হবে (থ্রেশহোল্ড_রেফ এবং থ্রেশহোল্ড_কিউর সেটিংস) এবং সতর্কতাটি প্রতি 6 ঘন্টার বেশি প্রায়ই ফায়ার করতে পারে না।
সেন্টিনল
সেন্টিনল দিক থেকে, এটি একটু বেশি জটিল, কিন্তু আমরা পূর্ববর্তী বালতিগুলির তুলনায় একটি বিশাল বৃদ্ধি অন্তর্ভুক্ত করে এমন কোনো বালতি দেখতে পাচ্ছি কিনা তা নির্ধারণ করতে আমরা সিরিয়াল ডিফারেন্স অ্যাগ্রিগেশন ব্যবহার করেছি:
{
"input": {
"search": {
"request": {
"index": [
"filebeat-*"
],
"body": {
"query": {
"bool": {
"filter": [
{
"range": {
"@timestamp": {
"gt": "now-5m/m"
}
}
}
]
}
},
"aggs": {
"30s_buckets": {
"date_histogram": {
"field": "@timestamp",
"interval": "30s"
},
"aggs": {
"weight_avg": {
"avg": {
"field": "weight"
}
},
"weight_diff": {
"serial_diff": {
"buckets_path": "weight_avg",
"lag": 3
}
}
}
},
"max_weight_diff": {
"max_bucket": {
"buckets_path": "30s_buckets>weight_diff"
}
}
}
}
}
}
},
"condition": {
"script": {
"script": "payload.hits.total > 20"
},
"compare": {
"payload.aggregations.max_weight_diff.value": {
"gte": 40
}
}
}
}
এই "পর্যবেক্ষক" শেষ 5 মিনিটের মধ্যে স্ক্যান করে, 30s বালতিতে আলাদা করে, তারপরে দেখা যায় যে 3টি বালতি জুড়ে পার্থক্য কমপক্ষে 40 বেড়েছে কিনা। আবারও, এটি ElastAlert সমতুল্য থেকে একটু বেশি জটিল, কিন্তু এটি কাজ করে বেশ ভালো।
আমি তৃতীয় সতর্কতাটি দেখাইনি, যা এখানে একটি ভাঙা ডেটা ফিডের সন্ধান করে, তবে উভয় ক্ষেত্রেই এটি একটি খুব সাধারণ সতর্কতা। ElastAlert এর ফ্ল্যাটলাইন এটিকে সুন্দরভাবে পরিচালনা করে এবং Sentinl একটি উইন্ডোতে সমস্ত ওজন রিডিং দখল করা এবং হিটগুলি গণনা করার মতোই সহজ। যদি কেউ কোডটি দেখতে চান, আমাদের জানান।
সতর্কতা ডেটা ব্যবহার করা
উভয় সতর্কতা ব্যবস্থার একটি বোনাস হল যে তারা প্রকৃত সতর্কতাগুলি অনুসন্ধান করার ক্ষমতা রাখে, যেহেতু সতর্কতার একটি লগ ইলাস্টিকসার্চে সংরক্ষণ করা হয়, আপনাকে সতর্কতার উপর ভিত্তি করে ভিজ্যুয়ালাইজেশন তৈরি করতে দেয়৷
রিফিল
যখন আমরা আমাদের কিবানা ড্যাশবোর্ডে একটি রিফিল দেখেছি তখন আমি প্লট আউট করার জন্য রিফিল সতর্কতা ব্যবহার করি। শেষ রিফিল সময়ের একটি ভিজ্যুয়ালাইজেশন তৈরি করতে ওজন ডেটা দেখার পরিবর্তে, আমি আমার ভিজ্যুয়ালাইজেশনের জন্য শেষ রিফিল সতর্কতাটি দেখতে পারি। সেন্টিনল, উদাহরণস্বরূপ, তারিখের উপর ভিত্তি করে স্থানীয় সূচীতে সমস্ত সতর্কতা সঞ্চয় করে যাকে বলা হয় “watcher_alerts-*”।
শেষ রিফিলে একটি ভিজ্যুয়ালাইজেশন তৈরি করতে, "প্রহরী" ফিল্ড দ্বারা ইভেন্টগুলি ফিল্টার করুন, যাতে আপনি শুধুমাত্র রিফিল ইভেন্টগুলি পান, তারপর সর্বাধিক তারিখ নির্বাচন করুন৷
দৈনিক রিপোর্টিং
আরেকটি দুর্দান্ত বিকল্প হল যে আপনি একটি রোল-আপের মতো আচরণ তৈরি করতে একটি নিয়মিত সতর্কতা ব্যবহার করতে পারেন যা আপনি পরে রিপোর্ট করতে পারেন৷
উদাহরণস্বরূপ:আমি যদি দৈনিক খরচের পরিমাণ দেখতে চাই, আমি প্রতিদিন ওজন হ্রাসের দিকে লক্ষ্য করি, বড় স্পাইকগুলি ফিল্টার করি (রিফিল বা অন্যান্য ইভেন্টের কারণে), এবং তারপর ওজনকে আউন্সে রূপান্তর করি।
এটি একটি একক কিবানা ভিজ্যুয়ালাইজেশনের সাথে একটু জটিল হতে পারে। (তবে, ভেগা প্রতিশ্রুতিশীল দেখাচ্ছে।)
তাই পরিবর্তে, আমি একটি দৈনিক সতর্কতা তৈরি করেছি যা প্রতি রাতে মধ্যরাতের আগে চলে এবং সেই দিনের জন্য খরচের যোগফল তৈরি করে। তারপর আমি একটি সাধারণ ভিজ্যুয়ালাইজেশন তৈরি করি যা "পরীক্ষক_সতর্কতা" সূচী থেকে দৈনিক যোগফল পড়ে।
চূড়ান্ত ফলাফল
আমি ইনস্টলেশন সম্পন্ন করার পরে, স্ল্যাক এখন আমাদের বলে যে কখন আরও ঠান্ডা ব্রু কেগ অর্ডার করতে হবে। এবং এটি শুধুমাত্র আইটি বা প্রশাসক বা অন্য কিছু নির্বাচিত কয়েকজন ব্যক্তিকে পাঠানো হয় না। পুরো অফিস এখন জানে নতুন পিপা কখন আসে।
এখানে ঠান্ডা পানীয়ের জন্য আর ঠান্ডা ঘামের প্রয়োজন নেই:কর্মীদের সুখ এবং উত্পাদনশীলতা সর্বকালের সর্বোচ্চ।
Elasticsearch + Sentinl/ElastAlert সতর্কতা FTW!