Veebiteenuste jÀlgimise bot poole tunni jooksul: telegram + bash + cron

Veebiteenuste jÀlgimise bot poole tunni jooksul: telegram + bash + cron

MÔnikord on vaja kiiresti teha uue teenuse jÀlgimist, kuid valmis infrastruktuuri/ekspertiisi pole kÀepÀrast. Selles juhendis loome poole tunni jooksul tööriista mis tahes veebiteenuste jÀlgimiseks, kasutades ainult Ubuntu sisseehitatud tööriistu: bash, cron ja curl. Teavituste edastamiseks kasutame Telegrami.

«Kirsiks tordil» on kasutajate emotsionaalne kaasamine. Kontrollitud inimestel – toimib.

Kui me telemeditsiiniteenus Doktor RÔÔm lÔime kasutajate stressi taseme mÀÀramiseks chati-boti, vajasime jÀlgimist. Paari tunni jooksul loodi mini-projekt, mis mitte ainult ei tööta suurepÀraselt, vaid toob ka positiivsust oma sÔnumitega.

Alustuseks saame skriptide reposti:

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

Liigume msms kausta ja töötlus toimub seal.

Kui Telegram on blokeeritud, kasutage proksi. KÔige lihtsam ja usaldusvÀÀrsem variant on torsocks:

sudo apt install tor
sudo apt install torsocks

NÀitena seadistame kolme sammu jooksul google.com esilehe jÀlgimise.

SAMM 1. Loome boti Telegramis ja saame kasutaja ID.

  • Otsinguribal Telegramis otsime @botfather:

    Veebiteenuste jÀlgimise bot poole tunni jooksul: telegram + bash + cron

  • KĂ€ivitage see nupuga Start, sisestage kĂ€sk /newbot ja vastake kĂŒsimustele. Peate meeles pidama, et name – see on boti nimi, mis kuvatakse kasutajatele, ja username – on ainulaadne ja peab lĂ”ppema sĂ”naga «bot»:

    Veebiteenuste jÀlgimise bot poole tunni jooksul: telegram + bash + cron

    Muuhulgas annab bot HTTP API jaoks salajase tokeni, mille tuleb kopeerida ja salvestada failisse telegram-api-key.txt kausta msms.

  • Otsime Telegramis meie boti nime ja kĂ€ivitame selle.
  • Viimase lihvina lisame end jĂ€lgimise teavituste saajate loendisse:
    sudo chmod +x ./recipients-setup.sh
    torsocks ./recipients-setup.sh

    Skript vĂ€ljastab nimekirja viimastest pöördumistest botile, seal peaks olema ĂŒks rida meie ID ja nimega Telegramis. VĂ”tame selle ID ja salvestame faili services/google-recipients.txt. Faili formaat: iga rida – ĂŒks ID. NĂ€ide:

    123456789
    987654321

Uue saaja lisamiseks peab ta kÀivitama Telegramis boti, kÀivitama recipients-setup.sh ja lisama ID faili.

SAMM 2. Seame jĂ€lgimise ĂŒles.

Teenuse kirjeldamine toimub ini-faili loomise kaudu kaustas services. Peame mÀÀrama viis parameetrit:

  1. MSMS_SERVICE_NAME: teenuse nimetus – seda kasutatakse teavitustes ja jĂ€lgimislogs.
  2. MSMS_SERVICE_ENDPOINT: teenuse endpoint, mille poole me pöördume curl'iga.
  3. MSMS_CURL_PARAMS: tÀiendavad curl parameetrid, vt allolevat nÀidet.
  4. MSMS_EXPECTED: teenuse oodatud vastus. Kasutatakse, kui vastus on lĂŒhike.
  5. MSMS_EXPECTED_FILE: faili nimi, mis sisaldab teenuse oodatud vastust. Kui on mÀÀratud, kirjutab MSMS_EXPECTED ĂŒle.
  6. MSMS_RECIPIENTS: fail, mis sisaldab teavituste saajate loendit.

PĂ€ring google.com tagastab fikseeritud html koos ĂŒmbersuunamisega, kasutame seda kui serveri oodatud vastust:

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

Loome faili services/google.ini:

MSMS_SERVICE_NAME='google esileht'

# teenuse lÔpp-punkt
MSMS_SERVICE_ENDPOINT='google.com'

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

# oodatud teenuse vastus
MSMS_EXPECTED_FILE='google-response.html'

# saajate loendi fail
MSMS_RECIPIENTS='google-recipients.txt'

Uues MSMS_CURL_PARAMS vÔib mÀÀrata kÔik, mida curl toetab, sealhulgas:

  1. Keelata curl sÔnumid, et mitte ummistada konsooli ja logi: -s
  2. MÀÀrata ĂŒhenduse aegumine kontrollitava teenusega (sekundites): --connect-timeout 3
  3. MÀÀrata vastuse saamise aegumine: -m 7
  4. Keelata SSL sertifikaadi kontroll (nÀiteks kui kasutatakse iseallkirjastatud sertifikaati): --insecure
  5. MÀÀrata http-pĂ€ringu tĂŒĂŒp: -X POST
  6. MÀÀrata pÀised: -H "Content-Type: application/json"
  7. MÀÀrata pÀringu sisu stringina vÔi failina. NÀitena failile: -d @request.json

Keelame teavitused ja mÀÀrame 3 sekundi ĂŒhenduse ning 7 sekundi vastuse aegumised.

EttevaatusabinĂ”ud: mÀÀrake parameetrite vÀÀrtused ĂŒhekordsetes jutumĂ€rkides, nagu nĂ€ites. Kahjuks on bash selles osas ĂŒsna habras ning vale asetatud jutumĂ€rk vĂ”ib pĂ”hjustada keerulisi, raskesti diagnoositavaid vigu.

Oleme seadnud jÀlgimise. Kontrollime, et kÔik on korras:

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

KÀsklus peaks vÀljuma sÔnumiga:

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

SAMM 3. Seadistame ajakava

Seadistame jÀlgimise ajakava cronis:

sudo crontab -e

Lisame rea iga minuti kontrollimiseks google.com:

*/1 * * * * torsocks  /monitoring.sh >>  /monitoring.log 2>&1

Lisame igal pÀeval kell 11.00 teavituse, mis kinnitab jÀlgimise toimimise. Selleks edastame skriptile parameetri DAILY:

0 11 * * * torsocks  /monitoring.sh DAILY >>  /monitoring.log 2>&1

2>&1 — standardne meetod, mis suunab vead pĂ”hivĂ€ljundvoogu. Seega jĂ”uavad need ka jĂ€lgimislogisse.

Salvestame muudatused ja laadime need sisse kÀsuga:

 sudo service cron reload

Rohkem teavet cron seadistamise kohta saab lugeda nÀiteks siin.

Nii hakkab iga minuti jÀrel kÀivituma jÀlgimise skript, mis teeb curl'i kaudu pöördumise google.com-i poole. Kui saadud vastus erineb oodatud vastusest, saadab skript hoiatused saajate nimekirjale telegramis. Kontrollide ajalugu hoitakse failis monitoring.log

Kui on vaja lisada veel ĂŒks teenus, loome lihtsalt selle jaoks uue ini-faili kausta services ja vajadusel koostame eraldi saajate nimekirja. KĂ”ik muu töötab automaatselt.

Kui kontrollitav teenus muutub kĂ€ttesaamatuks, saadetakse teavitus iga minuti jĂ€rel. Kui teenust ei Ă”nnestu kiiresti taastada, saab telegrami botis teavitused ajutiselt vĂ€lja lĂŒlitada.

NĂŒĂŒd vaatame lĂ€hemalt lisavĂ”imalusi ja skriptide rakendust.

SÔnumite mallid ja emotsionaalne kaasatus

Selleks, et suhtlemine botiga oleks elavam, nimetasime ta Manjaks, lisasime vastava pildi avatariks ja kaasasime professionaalsed suhtekorraldajad sÔnumite tekstide loomiseks. Saate kasutada meie arengut vÔi muuta vastavalt oma maitsele.

NĂ€iteks nii:

Veebiteenuste jÀlgimise bot poole tunni jooksul: telegram + bash + cron
vÔi isegi nii:

Veebiteenuste jÀlgimise bot poole tunni jooksul: telegram + bash + cron
Miks mitte?

Boti nimi ja avatar mÀÀratakse lÀbi @botfather.
SÔnumite mallid asuvad kaustas templates:

  • curl-fail.txt: sĂ”num, mis saadetakse, kui curl tagastab nullist erineva veakoodi. See tĂ€hendab tavaliselt, et teenusele ei saanud ligi.
  • daily.txt: igapĂ€evane sĂ”num, mis kinnitab, et teenuse jĂ€lgimine töötab.
  • service-fail.txt: sĂ”num, mis saadetakse, kui teenuse vastus erineb oodatud vastusest.

Vaatame kohandamise vÔimalusi sisseehitatud sÔnumite mallide nÀitel.
Mallides kasutatakse emojisi. Kahjuks habr neid ei kuva.
Emojide otsimiseks on mugav kasutada otsingut emojipedia.org:

Veebiteenuste jÀlgimise bot poole tunni jooksul: telegram + bash + cron

Sobiva sĂŒmboli kopeerite lihtsalt ja kleepite sĂ”numite malli tekstis (see on tavaline unicode).

  1. curl-fail.txt:
    Kassipoeg, aita mind... 
    Ei saa teenusele "$MSMS_SERVICE_NAME" ligi 
    `CURL EXIT CODE: $EXIT_CODE`

    Kasutame meie mÀÀratud teenuse nime (muutuja MSMS_SERVICE_NAME) ja skripti sisemiselt mÀÀratud muutuja curl'i vĂ€ljalaskekoodiga (EXIT_CODE). Samuti vormindasime sĂ”numi, kasutades vormindust telegram markdown: sĂŒmbolid "`" ĂŒmbritsevad fikseeritud laiusega teksti. Kuna jutumĂ€rgid ja apostroofilised sĂŒmbolid on bashis erisĂŒmbolid, peame need sĂŒmboliga "" varjama. Muutujate nimed algavad sĂŒmboliga "$".

    Tulemus:

    Veebiteenuste jÀlgimise bot poole tunni jooksul: telegram + bash + cron

  2. service-fail.txt:
    Kallis, aita mind... 
    Teenuse "$MSMS_SERVICE_NAME" tÔttu olen ma kurb
    See ei toimi korralikult, siin on, mida see mulle vastab:
    `$RESPONSE`

    Tulemus:

    Veebiteenuste jÀlgimise bot poole tunni jooksul: telegram + bash + cron

    Siin kasutame veel ĂŒhte skripti muutujat: RESPONSE. See sisaldab teenuse vastust.

  3. daily.txt:
    Tere, kallis!
    Mul on kÔik hÀsti, jÀlgin teenust:
    "$MSMS_SERVICE_NAME" iga minuti tagant...
    Aga kuidas sul lÀheb?
    

    Tulemus:

    Veebiteenuste jÀlgimise bot poole tunni jooksul: telegram + bash + cron

Liigume skriptide rakendamise juurde.

JĂ€lgimisskript

monitoring.sh teeb lihtsa automaatse avastuse — vĂ”tab kĂ”ik ini-failid kaustast services ja kĂ€ivitab igaĂŒhe jaoks pĂ”hiskripti kontrollimise loogikaga ja teavituste saatmisega:

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

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

Kdaily mess sÔnumi moodustamiseks skriipti saab edastada parameeter DAILY.

Pange tÀhele, et skripti kÀivitamisel vahetatakse praegune kaust services'iks. See vÔimaldab ini-failides mÀÀrata failide teed suhtelisegi services.

Kontrollimise ja teavituste saatmise skript

msms.sh sisaldab teenuse kontrollimise ja teavituste saatmise peamist loogikat.

Töö telegramiga:

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

Me moodustame URL-i REST API telegramile juurdepÀÀsuks, kasutades failis salvestatud salajast vÔtit.

Funktsioon send_message kasutab curl'i sÔnumite saatmiseks sellele REST API-le, saades saajate id-d failist, mille me oleme mÀÀranud ini-s. Saatmise andmetes mÀÀrame, et kasutame sÔnumite vormindamist: parse_mode="Markdown".

VÀljastame praeguse kuupÀeva-kellaaja ja laadime ini-faili.

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

# laadige muutujad .ini failist:
. $2

Maagiline rida . $2 tÀidab sisendiks antud teise parameetriga ini-faili nagu tavalise skripti, kandes mÀÀratud vÀÀrtused keskkonnamuutujatesse.

Laadime oodatud vastuse failist, kui on mÀÀratud parameeter MSMS_EXPECTED_FILE:

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

Teeme teenuse kontrollimise koos teavituste saatmisega, kui on vaja:

RESPONSE="$(eval curl $MSMS_CURL_PARAMS "$MSMS_SERVICE_ENDPOINT")"
EXIT_CODE=$?
if [[ $EXIT_CODE != 0 ]]; then
    echo health-check "$MSMS_SERVICE_NAME" EBAKASS: 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" EBAKASS: "$RESPONSE"
    MESSAGE="$(cat ..\/templates\/service-fail.txt)"
    MESSAGE=$(eval echo $MESSAGE)
    send_message "$MESSAGE"
else
    echo health-check "$MSMS_SERVICE_NAME": OK
fi

KÔigepealt mÀÀrame muutujale RESPONSE curl'i kÀsu tÀitmise tulemuse sellele teenusele.

MÀrkuse EXIT_CODE=$? salvestab muutuja viimase kÀsu, s.t. curl, tÀitmise tulemuse. Kui on vajalik teate saatmine, loetakse vastav mall vastavast failist ja saadetakse adressaatidele kaudu send_message.

Viimane plokk töötleb parameetrit 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

Saadetakse teade, mis kinnitab, et jÀlgimine on endiselt toimiv.

Kasutajate id-de nimekiri

recipients-setup.sh kutsutakse API telegram ĂŒles, et saada botile adresseeritud viimased sĂ”numid:

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

Siin kasutatakse python'i maagiat, et vÀlja anda nimekirja kena vÀljanÀgemisega. See ei ole kohustuslik, vÔid lihtsalt vÔtta vajaliku id json-ist, mille kÀsk vÀlja annab:

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

KokkuvÔte

Nii saate kasutada valmis skripte ja sĂ”numi malle, seadistades ainult jĂ€lgimist soovitavaid teenuseid ja teavitamise nimekirju; vĂ”ite luua uue „isiksuse“ botile; vĂ”i vĂ”ite teha oma lahenduse pakutud alusel.

Jatkusuutlikuks arendamiseks tundub olevat vajalik jĂ€lgimise konfigureerimine ja haldamine botis endas, kuid siinkohal ei saa piirduda ilma python'ita. Kui keegi jĂ”uab varem minna, teate, kuhu pull request esitada 🙂

Allikas: habr.com

Osta usaldusvÀÀrne hostimine veebilehtede jaoks DDoS-i kaitsega, VPS VDS serverid đŸ”„ Osta usaldusvÀÀrne hostimine veebilehtede jaoks DDoS-i kaitsega, VPS VDS serverid | ProHoster