په نیم ساعت کې د ویب خدماتو نظارت لپاره بوټ: ټیلیګرام + باش + کرون

په نیم ساعت کې د ویب خدماتو نظارت لپاره بوټ: ټیلیګرام + باش + کرون

ځینې ​​وختونه تاسو اړتیا لرئ چې د نوي خدمت لپاره په چټکۍ سره څارنه پلي کړئ، مګر تاسو اړین زیربنا یا تخصص په لاس کې نلرئ. پدې لارښود کې، موږ به د نیم ساعت په اوږدو کې د هر ویب خدمت د څارنې لپاره یوه وسیله پلي کړو، یوازې د جوړ شوي وسیلو په کارولو سره. ubuntu: bash, cron и curl. Для доставки оповещений будем использовать telegram.

"چیری په کیک" به د کاروونکو احساساتي ښکیلتیا وي. په خلکو ازمول شوي - دا کار کوي.

کله چې موږ د ټیلی میډیسن خدمت ډاکټر نږدې کې د کاروونکو د فشار کچه معلومولو لپاره چیټ بوټ رامینځته کړ ، موږ څارنې ته اړتیا درلوده. په څو ساعتونو کې، یوه کوچنۍ پروژه جوړه شوه چې نه یوازې ښه کار کوي، بلکې د خپلو پیغامونو سره مثبتیت هم زیاتوي.

لومړی، راځئ چې د سکریپټونو سره ذخیره ترلاسه کړو:

git clone https://github.com/rshekhovtsov/msms.git

د msms فولډر ته لاړ شئ او بیا په هغې کې کار وکړئ.

که ټیلیګرام بند شوی وي، پراکسي وکاروئ. ترټولو ساده او خورا معتبر انتخاب تورساک دی:

sudo apt install tor
sudo apt install torsocks

د مثال په توګه، راځئ چې په دریو مرحلو کې د google.com د پیل پاڼې څارنه جوړه کړو.

ګام 1. په ټیلیګرام کې یو بوټ جوړ کړئ او د کارونکي id ترلاسه کړئ

  • په ټیلیګرام کې د اړیکو لپاره د لټون بار کې موږ ګورو @botfather:

    په نیم ساعت کې د ویب خدماتو نظارت لپاره بوټ: ټیلیګرام + باش + کرون

  • موږ دا د Start تڼۍ سره پیل کوو، د /newbot کمانډ دننه کړئ او پوښتنو ته ځواب ووایاست. تاسو اړتیا لرئ په یاد ولرئ چې نوم د بوټ نوم دی چې کاروونکو ته به ښودل کیږي، او کارن نوم ځانګړی دی او باید د "بوټ" سره پای ته ورسیږي:

    په نیم ساعت کې د ویب خدماتو نظارت لپاره بوټ: ټیلیګرام + باش + کرون

    د نورو شیانو په مینځ کې، بوټ به د HTTP API لپاره یو پټ نښه خپره کړي، کوم چې باید د msms فولډر کې د telegram-api-key.txt فایل ته کاپي او خوندي شي.

  • موږ د ټیلیګرام لټون بار کې زموږ د بوټ نوم ټایپ کوو او لانچ یې کوو.
  • د پای ټکي په توګه، راځئ چې خپل ځان د څارنې خبرتیا ترلاسه کونکو لیست کې اضافه کړو:
    sudo chmod +x ./recipients-setup.sh
    torsocks ./recipients-setup.sh

    سکریپټ به بوټ ته د وروستیو تلیفونونو لیست ښکاره کړي؛ په ټیلیګرام کې زموږ د ID او نوم سره باید یوه کرښه وي. موږ دا ID اخلو او په فایل سروسز/google-recipients.txt کې یې خوندي کوو. د فایل بڼه: هره کرښه یو id ده. بېلګه:

    123456789
    987654321

د نوي ترلاسه کونکي اضافه کولو لپاره ، تاسو اړتیا لرئ له هغه څخه وغواړئ چې په ټیلیګرام کې بوټ پیل کړي ، ترلاسه کونکي-setup.sh چلوي او فایل ته ID اضافه کړي.

مرحله 2. څارنه تنظیم کړئ

خدمت د خدماتو فولډر کې د ini فایل رامینځته کولو سره تشریح شوی. تاسو اړتیا لرئ پنځه پیرامیټونه تنظیم کړئ:

  1. MSMS_SERVICE_NAME: د خدمت نوم - به په خبرتیاو او څارنې لاګ کې وکارول شي.
  2. MSMS_SERVICE_ENDPOINT: د خدمت پای ټکی چې موږ به د curl سره اړیکه ونیسو.
  3. MSMS_CURL_PARAMS: اضافي curl اختیارونه، لاندې مثال وګورئ.
  4. MSMS_EXPECTED: د خدمت څخه متوقع ځواب. کارول کیږي که ځواب لنډ وي.
  5. MSMS_EXPECTED_FILE: د متوقع خدمت ځواب سره د فایل نوم. که مشخص شوی وي، MSMS_EXPECTED بیا لیکل کیږي.
  6. MSMS_RECIPIENTS: د خبرتیا ترلاسه کونکو لیست سره فایل.

google.com ته یوه غوښتنه د ریډیریټ سره ثابت html بیرته راګرځوي، موږ به دا د متوقع سرور ځواب په توګه وکاروو:

curl google.com > services/google-response.html

راځئ چې خدمات/google.ini فایل جوړ کړو:

MSMS_SERVICE_NAME='google front page'

# service endpoint
MSMS_SERVICE_ENDPOINT='google.com'

# curl parameters
MSMS_CURL_PARAMS='-s --connect-timeout 3 -m 7'

# expected service response
MSMS_EXPECTED_FILE='google-response.html'

# recipients list file
MSMS_RECIPIENTS='google-recipients.txt'

В MSMS_CURL_PARAMS تاسو کولی شئ هرڅه تنظیم کړئ چې curl یې کولی شي ، په شمول:

  1. د کنسول او لاګ د ګډوډۍ مخنیوي لپاره د curl پیغامونه غیر فعال کړئ: -s
  2. د اتصال وخت پای ته د خدمت چک کولو سره تنظیم کړئ (په ثانیو کې): --connect-timeout 3
  3. د غبرګون وخت ټاکل: -m 7
  4. د SSL لپاره د سند تصدیق غیر فعال کړئ (د مثال په توګه ، که تاسو پخپله لاسلیک شوی سند کاروئ): --insecure
  5. د http غوښتنې ډول مشخص کړئ: -X POST
  6. سرلیکونه مشخص کړئ: -H "Content-Type: application/json"
  7. د غوښتنې بدن د تار یا فایل په توګه مشخص کړئ. د فایل لپاره بیلګه: -d @request.json

موږ خبرتیاوې غیر فعال کړې او وخت یې 3 ثانیو ته ټاکلی. نښلول او 7 ثانیې. د خدمت ځواب ترلاسه کولو لپاره.

احتیاط: په واحد نرخونو کې د پیرامیټر ارزښتونه مشخص کړئ، لکه څنګه چې په مثال کې. له بده مرغه، باش په دې معنی کې خورا نازک دی، او یو ناڅاپي تیتلی د غلط نرخ نښه سره کولی شي د ستونزمن تشخیص غلطیتونو سره د کائنات د مړینې لامل شي.

موږ نظارت ترتیب کړی دی. راځئ وګورو چې هرڅه سم دي:

sudo chmod +x ./monitoring.sh
torsocks ./monitoring.sh

سکریپټ باید یو پیغام ښکاره کړي لکه:

2020-01-10 12:14:31
health-check "google front page": OK

3 ګام. د مهال ویش ترتیب کول

راځئ چې په کرون کې د څارنې مهال ویش ترتیب کړو:

sudo crontab -e

راځئ چې هره دقیقه د google.com چک کولو لپاره یوه کرښه اضافه کړو:

*/1 * * * * torsocks <ПУТЬ К ПАПКЕ РЕПОЗИТОРИЯ>/monitoring.sh >> <ПУТЬ К ПАПКЕ РЕПОЗИТОРИЯ>/monitoring.log 2>&1

موږ به هره ورځ د سهار په 11.00:XNUMX بجو یو خبرتیا اضافه کړو، د څارنې فعالیت پخپله تاییدوي. د دې کولو لپاره، موږ به د DAILY پیرامیټر سکریپټ ته انتقال کړو:

0 11 * * * torsocks <ПУТЬ К ПАПКЕ РЕПОЗИТОРИЯ>/monitoring.sh DAILY >> <ПУТЬ К ПАПКЕ РЕПОЗИТОРИЯ>/monitoring.log 2>&1

2>&1 - یو معیاري تخنیک چې د اصلي محصول جریان ته غلطۍ لیږل کیږي. د پایلې په توګه، دوی به د څارنې لاګ کې هم پای ته ورسیږي.

راځئ چې بدلونونه خوندي کړو او د کمانډ سره یې پورته کړو:

 sudo service cron reload

تاسو کولی شئ د کرون تنظیم کولو په اړه نور ولولئ، د بیلګې په توګه، دلته.

په دې توګه، په هره دقیقه کې به د څارنې سکریپټ پیل شي، کوم چې به د curl له لارې google.com سره اړیکه ونیسي. که چیرې ترلاسه شوي ځواب د تمه شوي څخه توپیر ولري، سکریپټ به د ترلاسه کونکو لیست ته د ټیلیګرام خبرتیا واستوي. د پلټنې لاګ په فایل monitoring.log کې ساتل کیږي

که موږ بل خدمت اضافه کولو ته اړتیا ولرو، موږ په ساده ډول د خدماتو فولډر کې د دې لپاره یو نوی ini فایل جوړوو او که اړتیا وي، د ترلاسه کونکو جلا لیست جوړ کړو. نور هرڅه به په اوتومات ډول کار وکړي.

که چیرې چک شوی خدمت شتون ونلري، نو هره دقیقه به یو خبرتیا لیږل کیږي. که تاسو نشئ کولی خدمت ژر تر ژره بحال کړئ ، تاسو کولی شئ په لنډمهاله توګه د بوټ ټیلیګرام ملکیتونو کې خبرتیاوې غیر فعال کړئ.

اوس راځئ چې د سکریپټونو اضافي ځانګړتیاوو او پلي کولو ته نږدې کتنه وکړو.

د پیغام نمونې او احساساتي ښکیلتیا

د بوټو سره د اړیکو د لا ژوندی کولو لپاره، موږ ورته مانیچکا نوم ورکړ، د اوتار مناسب عکس یې اضافه کړ او د متن پیغامونو رامینځته کولو لپاره یې د PR مسلکي متخصصین استخدام کړل. تاسو کولی شئ زموږ تجربه وکاروئ یا خپل خوند ته یې بدل کړئ.

د مثال په توګه:

په نیم ساعت کې د ویب خدماتو نظارت لپاره بوټ: ټیلیګرام + باش + کرون
یا حتی د دې په څیر:

په نیم ساعت کې د ویب خدماتو نظارت لپاره بوټ: ټیلیګرام + باش + کرون
ولې نه؟

د بوټ نوم او اوتار له لارې ټاکل شوي @botfather.
د پیغام ټیمپلیټونه په فولډر کې دي کينډۍ:

  • curl-fail.txt: پیغام لیږل کیږي کله چې curl د صفر غیر صفر غلط کوډ بیرته راولي. معمولا دا خدمت ته د رسیدو د ناممکنیت په اړه خبرې کوي.
  • daily.txt: ورځني پیغام تاییدوي چې د خدماتو څارنه کار کوي.
  • service-fail.txt: یو پیغام لیږل شوی کله چې د خدماتو ځواب د هغه څه څخه توپیر ولري چې تمه کیده.

راځئ چې د مثال په توګه د جوړ شوي پیغام ټیمپلیټونو په کارولو سره د اصلاح کولو اختیارونه وګورو.
ټیمپلیټونه ایموجي کاروي. له بده مرغه، habr دوی نه ښکاره کوي.
د ایموجي غوره کولو لپاره ، دا د لټون آن کارولو لپاره مناسب دی emojipedia.org:

په نیم ساعت کې د ویب خدماتو نظارت لپاره بوټ: ټیلیګرام + باش + کرون

تاسو په ساده ډول د ټیمپلیټ متن کې مناسب سمبول کاپي او پیسټ کړئ (دا منظم یونیکوډ دی).

  1. curl-fail.txt:
    Котёнок,  помоги мне... 
    Не могу достучаться до сервиса "$MSMS_SERVICE_NAME" 
    `CURL EXIT CODE: $EXIT_CODE`

    موږ د خدمت نوم کارولی چې موږ یې مشخص کړی (متغیر MSMS_SERVICE_NAME) او یو داخلي سکریپټ متغیر د curl وتلو کوډ سره (EXIT_CODE). موږ د مارک اپ په کارولو سره پیغام هم فارمیټ کړی د ټیلیګرام نښه کول: "`" توري د ټاکلي پلن متن شاوخوا ګرځي. څرنګه چې اقتباسونه او apostrophes د باش سمبولونه دي، موږ یې د "" سره وتښتو. متغیر نومونه د "$" نښه څخه مخکې دي.

    پایلې:

    په نیم ساعت کې د ویب خدماتو نظارت لپاره بوټ: ټیلیګرام + باش + کرون

  2. service-fail.txt:
    Котёнок, помоги мне... 
    Сервис "$MSMS_SERVICE_NAME" меня расстроил
    Он работает неправильно, вот что он мне отвечает:
    `$RESPONSE`

    پایلې:

    په نیم ساعت کې د ویب خدماتو نظارت لپاره بوټ: ټیلیګرام + باش + کرون

    دلته موږ یو بل سکریپټ متغیر کاروو: RESPONSE. دا د خدماتو ځواب لري.

  3. daily.txt:
    Малыш, привет!
    У меня всё хорошо, cлежу за сервисом:
    "$MSMS_SERVICE_NAME" каждую минутку...
    А как у тебя дела?
    

    پایلې:

    په نیم ساعت کې د ویب خدماتو نظارت لپاره بوټ: ټیلیګرام + باش + کرون

راځئ چې د سکریپټونو پلي کولو ته لاړ شو.

د څارنې سکریپټ

څارنه یو ساده اتومات کشف کوي - دا د خدماتو فولډر څخه ټولې ini فایلونه اخلي او د هر یو لپاره اصلي سکریپټ د خبرتیا چیک کولو او لیږلو لپاره منطق سره اجرا کوي:

#!/bin/bash
cd $(dirname "$0")/services

for service_ini  in $(ls *.ini); do
    bash ../msms.sh "$1" "$service_ini"
done

د څارنې وضعیت په اړه د ورځني پیغام رامینځته کولو لپاره، تاسو کولی شئ د ډیلي پیرامیټر سکریپټ ته انتقال کړئ.

مهرباني وکړئ په یاد ولرئ کله چې سکریپټ پیل شي، اوسنی فولډر خدماتو ته بدلیږي. دا تاسو ته اجازه درکوي په ini فایلونو کې د خدماتو پورې اړوند د فایل لارې مشخص کړئ.

د چک کولو او خبرتیاو لیږلو سکریپټ

msms.sh د خدماتو چک کولو او خبرتیاو لیږلو لپاره اصلي منطق لري.

د ټیلیګرام سره کار کول:

# telegram endpoint
TG_API_URL="https://api.telegram.org/bot$(cat ../telegram-api-key.txt)/sendMessage"

#################################################################
# send message to telegram
# parameter: message text
#################################################################
function send_message {
    for chat_id  in $(cat ../$MSMS_RECIPIENTS); do
	curl -s -X POST --connect-timeout 10 $TG_API_URL -d chat_id=$chat_id -d parse_mode="Markdown" -d text="$1"
	echo
    done
}

موږ په فایل کې خوندي شوي پټ کیلي په کارولو سره د ټیلیګرام REST API ته د لاسرسي لپاره یو URL رامینځته کوو.

د send_message فنکشن د دې REST API ته د پیغامونو لیږلو لپاره curl کاروي، د هغه فایل څخه د ترلاسه کونکي IDs اخلي چې موږ په ini کې مشخص کړي. په هغه معلوماتو کې چې موږ یې لیږو، موږ دا په ګوته کوو چې موږ د پیغام مارک اپ کاروو: parse_mode="Markdown".

راځئ چې اوسنی نیټه او وخت وښیو او د ini فایل پورته کړو.

echo $(date '+%Y-%m-%d %H:%M:%S')

# load variables from .ini file:
. $2

جادو تار . $2 د ini فایل د دویم پیرامیټر په توګه د منظم سکریپټ په توګه ان پټ ته لیږدول شوی، د چاپیریال متغیرونو کې مشخص شوي ارزښتونه داخلوي.

د فایل څخه متوقع ځواب پورته کړئ که چیرې پیرامیټر مشخص شوی وي MSMS_EXPECTED_FILE:

if [ -n "$MSMS_EXPECTED_FILE" ]; then
 MSMS_EXPECTED="$(cat "$MSMS_EXPECTED_FILE")"
fi

موږ به خدمت وګورو او د اړتیا په صورت کې به خبرتیاوې واستوو:

RESPONSE="$(eval curl $MSMS_CURL_PARAMS "$MSMS_SERVICE_ENDPOINT")"
EXIT_CODE=$?
if [[ $EXIT_CODE != 0 ]]; then
    echo health-check "$MSMS_SERVICE_NAME" FAILED: CURL EXIT WITH $EXIT_CODE
    MESSAGE="$(cat ../templates/curl-fail.txt)"
    MESSAGE=$(eval echo $MESSAGE)
    send_message "$MESSAGE"
elif [[ "$RESPONSE" != "$MSMS_EXPECTED" ]]; then
    echo health-check "$MSMS_SERVICE_NAME" FAILED: "$RESPONSE"
    MESSAGE="$(cat ../templates/service-fail.txt)"
    MESSAGE=$(eval echo $MESSAGE)
    send_message "$MESSAGE"
else
    echo health-check "$MSMS_SERVICE_NAME": OK
fi

لومړی موږ متغیر ته وټاکو RESPONSE د دې خدمت لپاره د curl کمانډ اجرا کولو پایله.

څرګندونه EXIT_CODE=$? د وروستي کمانډ پایله په متغیر کې اچوي، د بیلګې په توګه. curl که چیرې د خبرتیا لیږل اړین وي، ټیمپلیټ د اړونده فایل څخه لوستل کیږي او ترلاسه کونکو ته لیږل کیږي send_message.

وروستی بلاک د DAILY پیرامیټر پروسس کوي:

if test "$1" = "DAILY"; then
    echo health-check "$MSMS_SERVICE_NAME" DAILY
    MESSAGE="$(cat ../templates/daily.txt)"
    MESSAGE=$(eval echo $MESSAGE)
    send_message "$MESSAGE"
fi

دا یو پیغام لیږي چې پخپله د څارنې فعالیت تاییدوي.

د کارن ids لیست ترلاسه کول

ترلاسه کوونکي-setup.sh د ټیلیګرام API ته زنګ وهي ترڅو وروستي پیغامونه بوټ ته په ګوته کړي:

curl -s https://api.telegram.org/bot$(cat telegram-api-key.txt)/getUpdates 
| python recipients-setup.py

دا د ښکلي لیست ښودلو لپاره د پیتون جادو کاروي. دا اړینه نده، تاسو کولی شئ په ساده ډول د json څخه مطلوب ID واخلئ، کوم چې کمانډ به تولید کړي:

torsocks curl -s https://api.telegram.org/bot$(cat telegram-api-key.txt)/getUpdates

پایلې

پدې توګه ، تاسو کولی شئ چمتو شوي سکریپټونه او د پیغام ټیمپلیټونه وکاروئ ، یوازې څارل شوي خدمات او د خبرتیاو لپاره لیست تنظیم کړئ؛ تاسو کولی شئ د بوټ لپاره نوی "شخصیت" جوړ کړئ؛ یا تاسو کولی شئ د هغه څه پراساس خپله پریکړه وکړئ چې وړاندیز شوی و.

د لا پراختیا لپاره اختیارونه پخپله بوټ کې د نظارت تنظیم او اداره کولو وړاندیز کوي ، مګر دلته تاسو د python پرته نشئ کولی. که څوک دا زما څخه مخکې ترلاسه کړي، تاسو پوهیږئ چیرته چې د پلولو غوښتنه وسپاري :)

سرچینه: www.habr.com

د DDoS محافظت ، VPS VDS سرورونو سره د سایټونو لپاره معتبر کوربه توب واخلئ 🔥 د DDoS محافظت، VPS VDS سرورونو سره د باور وړ ویب پاڼې کوربه توب واخلئ | ProHoster