Bot amin'ny fanaraha-maso ny serivisy tranonkala ao anatin'ny antsasak'adiny: telegrama + bash + cron

Bot amin'ny fanaraha-maso ny serivisy tranonkala ao anatin'ny antsasak'adiny: telegrama + bash + cron

Иногда нужно быстро сделать мониторинг для нового сервиса, а готовой инфраструктуры/экспертизы под рукой нет. В этом гайде мы за полчаса реализуем инструмент для мониторинга любых веб-сервисов, используя только встроенные средства ubuntu: bash, cron и curl. Для доставки оповещений будем использовать telegram.

Ny "cherry on the cake" dia ny fandraisana anjara ara-pihetseham-pon'ireo mpampiasa. Notsapaina tamin'ny olona - miasa izany.

Rehefa namorona chatbot izahay tao amin'ny serivisy telemedicine Doctor Nearby hamaritana ny haavon'ny adin-tsain'ny mpampiasa, dia nila fanaraha-maso izahay. Tao anatin'ny adiny roa dia nisy tetikasa mini noforonina izay tsy vitan'ny hoe miasa tsara, fa manampy koa ny fahatsaran'ny hafany.

Voalohany, andao haka tahiry misy scripts:

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

Mandehana any amin'ny lahatahiry msms ary miasa ao.

Raha voasakana ny telegrama dia ampiasao proxy. Ny safidy tsotra sy azo antoka indrindra dia torsocks:

sudo apt install tor
sudo apt install torsocks

Ohatra, andao hametraka fanaraha-maso ny pejy fanombohana google.com amin'ny dingana telo.

DINGANA 1. Mamorona bot amin'ny telegrama ary alao ny ID mpampiasa

  • Ao amin'ny bara fitadiavana fifandraisana amin'ny telegrama no tadiavintsika @botray:

    Bot amin'ny fanaraha-maso ny serivisy tranonkala ao anatin'ny antsasak'adiny: telegrama + bash + cron

  • Atombotsika amin'ny bokotra Start izany, ampidiro ny baiko / newbot ary valio ny fanontaniana. Tokony hotadidinao fa ny anarana dia ny anaran'ny bot izay haseho amin'ny mpampiasa, ary ny solonanarana dia miavaka ary tsy maintsy mifarana amin'ny "bot":

    Bot amin'ny fanaraha-maso ny serivisy tranonkala ao anatin'ny antsasak'adiny: telegrama + bash + cron

    Ankoatra ny zavatra hafa, ny bot dia hamoaka marika miafina ho an'ny HTTP API, izay tsy maintsy adika sy tehirizina amin'ny rakitra telegram-api-key.txt ao amin'ny lahatahiry msms.

  • Manoratra ny anaran'ny bot-nay ao amin'ny bara fitadiavana telegrama izahay ary manomboka izany.
  • Ho famaranana, andao ampidirintsika ao amin'ny lisitr'ireo mpandray fanairana fanaraha-maso:
    sudo chmod +x ./recipients-setup.sh
    torsocks ./recipients-setup.sh

    Ny script dia hampiseho lisitr'ireo antso farany amin'ny bot; tokony hisy andalana iray miaraka amin'ny id sy anaranay amin'ny telegrama. Raisinay ity ID ity ary tehirizinay ao amin'ny rakitra services/google-recipients.txt. Endrika fisie: id iray ny andalana tsirairay. Ohatra:

    123456789
    987654321

Raha te hampiditra mpandray vaovao ianao dia mila mangataka azy hanomboka ny bot amin'ny telegrama, mihazakazaka recipients-setup.sh ary ampio ny id amin'ny rakitra.

DINGANA 2. Apetraho ny fanaraha-maso

Ny serivisy dia voafaritra amin'ny famoronana rakitra ini ao amin'ny lahatahiry serivisy. Mila mametraka parameter dimy ianao:

  1. MSMS_SERVICE_NAME: anaran'ny serivisy - dia hampiasaina amin'ny fampandrenesana sy ny diarin'ny fanaraha-maso.
  2. MSMS_SERVICE_ENDPOINT: teboka faran'ny serivisy izay hifandraisantsika amin'ny curl.
  3. MSMS_CURL_PARAMS: safidy curl fanampiny, jereo ny ohatra etsy ambany.
  4. MSMS_EXPECTED: valiny andrasana avy amin'ny serivisy. Ampiasaina raha fohy ny valiny.
  5. MSMS_EXPECTED_FILE: anaran-drakitra miaraka amin'ny valin'ny serivisy andrasana. Raha voatondro dia overwrite MSMS_EXPECTED.
  6. MSMS_RECIPIENTS: rakitra misy lisitry ny mpandray fampahafantarana.

Ny fangatahana amin'ny google.com dia mamerina html raikitra miaraka amin'ny redirect, hampiasainay ho valin'ny server andrasana:

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

Andao hamorona ny rakitra services/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 azonao atao ny mametraka izay rehetra azon'ny curl atao, ao anatin'izany:

  1. Atsaharo ny hafatra curl mba hisorohana ny fikorontanan'ny console sy ny log: -s
  2. Mametraha fotoana fiatoan'ny fifandraisana miaraka amin'ny serivisy voamarika (ao anatin'ny segondra): --connect-timeout 3
  3. Mametraha fe-potoana famaliana: -m 7
  4. Atsaharo ny fanamarinana fanamarinana ho an'ny SSL (ohatra, raha mampiasa taratasy fanamarinana nosoniavina manokana ianao): --insecure
  5. Lazao ny karazana fangatahana http: -X POST
  6. Lazao ny lohateny: -H "Content-Type: application/json"
  7. Lazao ho tady na rakitra ny vatana fangatahana. Ohatra ho an'ny rakitra: -d @request.json

Nesorinay ny fampandrenesana ary nametra ny fe-potoana ho 3 segondra. hifandray ary 7 seg. mba hahazoana valiny amin'ny serivisy.

Caution: Farito ny sandan'ny parameter amin'ny teny tokana, toy ny amin'ny ohatra. Indrisy anefa, ny bash dia tena marefo amin'io lafiny io, ary lolo tsy nahy miaraka amin'ny marika teny diso dia mety hitarika amin'ny fahafatesan'izao rehetra izao miaraka amin'ny fahadisoana sarotra fantarina.

Nametraka fanaraha-maso izahay. Andeha hojerentsika fa OK ny zava-drehetra:

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

Ny script dia tokony haneho hafatra toy ny:

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

DINGANA 3. Mametraka fandaharam-potoana

Andao hanangana fandaharam-potoana fanaraha-maso ao amin'ny cron:

sudo crontab -e

Andeha isika hanampy andalana hijerena google.com isa-minitra:

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

Hanampy fanairana isan'andro amin'ny 11.00 ora maraina izahay, hanamafy ny fiasan'ny fanaraha-maso. Mba hanaovana izany dia handefa ny parameter DAILY amin'ny script izahay:

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

2>&1 - teknika manara-penitra izay mamindra ny lesoka mankany amin'ny renirano lehibe mivoaka. Vokany, hiafara amin’ny diary fanaraha-maso ihany koa izy ireo.

Andao hotehirizina ireo fanovana ary alaivo miaraka amin'ny baiko:

 sudo service cron reload

Azonao atao ny mamaky bebe kokoa momba ny fametrahana cron, ohatra, eto.

Noho izany, isaky ny minitra dia hisy script fanaraha-maso havoaka, izay hifandray amin'ny google.com amin'ny alàlan'ny curl. Raha tsy mitovy amin'ny andrasana ny valiny voaray, dia handefa fampahafantarana telegrama amin'ny lisitry ny mpandray ny script. Ny diarin'ny fanaraha-maso dia voatahiry ao amin'ny rakitra monitoring.log

Raha mila manampy serivisy hafa isika dia mamorona rakitra ini vaovao ho azy ao amin'ny lahatahiry serivisy ary, raha ilaina, mamorona lisitra misaraka amin'ny mpandray. Ny hafa rehetra dia hiasa ho azy.

Raha toa ka tsy misy ny serivisy hojerena, dia hisy fampandrenesana halefa isa-minitra. Raha tsy afaka mamerina haingana ny serivisy ianao dia azonao atao ny manafoana vetivety ny fampandrenesana ao amin'ny fananan'ny telegrama bot.

Andeha hojerentsika akaiky ny endri-javatra fanampiny sy ny fampiharana ny script.

Fomba Hafatra sy Fifandraisana ara-pihetseham-po

Mba hahatonga ny fifandraisana amin'ny bot ho mavitrika kokoa, nomenay anarana hoe Manechka izy io, nanampy sary avatar mety ary nanakarama manam-pahaizana manokana momba ny PR mba hamorona lahatsoratra. Azonao atao ny mampiasa ny traikefantsika na manova izany amin'ny tsironao.

Ohatra toy izao:

Bot amin'ny fanaraha-maso ny serivisy tranonkala ao anatin'ny antsasak'adiny: telegrama + bash + cron
na toy izao aza:

Bot amin'ny fanaraha-maso ny serivisy tranonkala ao anatin'ny antsasak'adiny: telegrama + bash + cron
Fa nahoana no tsy?

Ny anaran'ny bot sy ny avatar dia napetraka amin'ny @botray.
Ao amin'ny lahatahiry ireo môdelin'ny hafatra môdely:

  • curl-fail.txt: hafatra alefa rehefa miverina ny kaody diso tsy aotra i curl. Matetika izy io dia miresaka momba ny tsy fahampian'ny fidirana amin'ny serivisy.
  • daily.txt: Hafatra isan'andro manamarina fa mandeha ny fanaraha-maso ny serivisy.
  • service-fail.txt: Hafatra alefa rehefa tsy mitovy amin'ny nantenaina ny valin'ny serivisy.

Andeha hojerentsika ny safidy fanamboarana amin'ny fampiasana môdely hafatra ao anatiny ho ohatra.
Mampiasa emoji ny môdely. Indrisy anefa fa tsy mampiseho azy ireo i habr.
Mba hisafidianana emoji dia mety tsara ny mampiasa ny fikarohana emojipedia.org:

Bot amin'ny fanaraha-maso ny serivisy tranonkala ao anatin'ny antsasak'adiny: telegrama + bash + cron

Adikao sy apetaho fotsiny ao amin'ny lahatsoratra môdely ny marika mifanaraka amin'izany (unicode mahazatra izany).

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

    Nampiasa ny anarana nomenay izahay (variable MSMS_SERVICE_NAME) ary fari-pitsipika anatiny misy kaody fivoahana curl (EXIT_CODE). Noforoninay tamin'ny fampiasana marika ihany koa ny hafatra telegrama marika: Ny tarehin-tsoratra "`" dia manodidina ny lahatsoratra mirefy raikitra. Koa satria marika bash ny teny nalaina sy ny apostrophes, dia mandositra azy ireo amin'ny "". Ny anarana miovaova dia ialohavan'ny famantarana "$".

    vokany:

    Bot amin'ny fanaraha-maso ny serivisy tranonkala ao anatin'ny antsasak'adiny: telegrama + bash + cron

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

    vokany:

    Bot amin'ny fanaraha-maso ny serivisy tranonkala ao anatin'ny antsasak'adiny: telegrama + bash + cron

    Eto izahay dia mampiasa variable script hafa: RESPONSE. Ahitana ny valin'ny serivisy.

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

    vokany:

    Bot amin'ny fanaraha-maso ny serivisy tranonkala ao anatin'ny antsasak'adiny: telegrama + bash + cron

Andeha isika hiroso amin'ny fampiharana ny script.

script fanaraha-maso

monitoring.sh manao auto-discovery tsotra - maka ny rakitra ini rehetra ao amin'ny lahatahiry serivisy ary ny tsirairay dia manatanteraka ny script lehibe miaraka amin'ny lojika amin'ny fanamarinana sy fandefasana fanairana:

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

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

Mba hamoronana hafatra isan'andro momba ny sata fanaraha-maso dia azonao atao ny mampita ny mari-pamantarana DAILY amin'ny script.

Mariho fa rehefa manomboka ny script dia miova ho serivisy ny lahatahiry ankehitriny. Izany dia ahafahanao mamaritra ny làlan'ny rakitra mifandraika amin'ny serivisy amin'ny rakitra ini.

Script ho fanamarinana sy fandefasana fampahafantarana

msms.sh misy ny lojika lehibe amin'ny fanamarinana ny serivisy sy ny fandefasana fanairana.

Miasa amin'ny telegrama:

# 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
}

Mamorona URL izahay hidirana amin'ny telegrama REST API amin'ny fampiasana ny fanalahidy miafina voatahiry ao anaty rakitra.

Ny asa send_message dia mampiasa curl handefasana hafatra amin'ity REST API ity, maka ny id mpandray avy amin'ny rakitra nofaritanay tao amin'ny ini. Ao amin'ny angona alefanay dia manondro izahay fa mampiasa marika hafatra: parse_mode="Markdown".

Asehontsika ny daty sy ny ora ankehitriny ary apetaho ny rakitra ini.

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

# load variables from .ini file:
. $2

Tady majika . $2 manatanteraka ny rakitra ini alefa amin'ny fidirana ho paramètre faharoa ho script mahazatra, mampiditra ny soatoavina voatondro ao anaty fari-piainan'ny tontolo iainana.

Ampidiro ny valiny andrasana avy amin'ny rakitra raha voatondro ny parameter MSMS_EXPECTED_FILE:

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

Hanamarina ny serivisy izahay ary handefa fanairana raha ilaina:

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

Voalohany dia manendry ny variable isika RESPONSE vokatry ny fanatanterahana ny baiko curl ho an'ity serivisy ity.

teny EXIT_CODE=$? mametraka ny vokatry ny baiko farany amin'ny fari-piainana, i.e. curl. Raha ilaina ny mandefa fanairana, dia vakiana avy amin'ny rakitra mifanaraka amin'izany ny môdely ary alefa any amin'ny mpandray mampiasa send_message.

Ny sakana farany dia manodina ny parameter 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

Mandefa hafatra manamarina ny fiasan'ny fanaraha-maso ny tenany.

Mahazo lisitry ny ID mpampiasa

recipients-setup.sh miantso ny telegrama API mba hahazoana ny hafatra farany amin'ny bot:

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

Mampiasa majika python izany mba hanomezana lisitra tsara tarehy. Tsy ilaina izany, azonao atao ny maka ny id irina avy amin'ny json, izay havoakan'ny baiko:

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

famaranana

Noho izany, azonao atao ny mampiasa script efa vita sy môdely hafatra, mametraka serivisy fanaraha-maso sy lisitra fotsiny ho an'ny fanairana; afaka mamorona "olona" vaovao ho an'ny bot ianao; na azonao atao ny manapa-kevitra manokana mifototra amin'ny zavatra naroso.

Ny safidy ho an'ny fampandrosoana bebe kokoa dia manoro hevitra ny manamboatra sy mitantana ny fanaraha-maso ao amin'ny bot, fa eto ianao dia tsy afaka manao raha tsy misy python. Raha misy mahazo azy eo anoloako dia fantatrao ny toerana handefasana ny fangatahana fisarihana :)

Source: www.habr.com

Mividiana fampiantranoana azo antoka ho an'ny tranokala misy fiarovana DDoS, mpizara VPS VDS 🔥 Mividiana fampiantranoana tranonkala azo antoka miaraka amin'ny fiarovana DDoS, mpizara VPS VDS | ProHoster