Veebiteenuste monitoorimise bot poole tunni jooksul: telegram + bash + cron

Veebiteenuste monitoorimise bot poole tunni jooksul: telegram + bash + cron

MÔnikord on vaja kiiresti teha uue teenuse jÀlgimine, aga sobivat infrastruktuuri/ekspertteavet pole kÀepÀrast. Selles juhendis loome poole tunni jooksul tööriista veebiteenuste jÀlgimiseks, kasutades ainult Ubuntu sisseehitatud vahendeid: bash, cron ja curl. Teavituste edastamiseks kasutame telegrammi.

Kirsiks tordil on kasutajate emotsionaalne kaasatus. Inimesed on proovinud — see toimib.

Kui me telemeditsiini teenuses Doktor RÀÀdame lÔime kasutajate stressitaseme mÀÀramiseks vestlusroboti, olid meil vajalikud jÀlgimisvahendid. Paari tunni jooksul loodi mini projekt, mis mitte ainult ei töötanud suurepÀraselt, vaid lisas ka positiivsust oma sÔnumitega.

KÔigepealt saame skriptide hoidla:

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

Liigume kausta msms ja töötame seal edasi.

Kui telegramm on blokeeritud, kasutage proksi. Lihtsaim ja usaldusvÀÀrne variant on torsocks:

sudo apt install tor
sudo apt install torsocks

NÀiteks seadistame kolme sammuga google.com esilehe jÀlgimise.

SAMM 1. Loome telegrammis boti ja saame kasutaja ID.

  • Otsingureas otsime telegrammis kontakte. @botfather:

    Veebiteenuste monitoorimise bot poole tunni jooksul: telegram + bash + cron

  • KĂ€ivitame selle Start-nupuga, sisestame kĂ€su /newbot ja vastame kĂŒsimustele. Tuleb meeles pidada, et name on bot'i nimi, mis kuvatakse kasutajatele, ja username on ainulaadne ning peab lĂ”ppema sĂ”naga «bot»:

    Veebiteenuste monitoorimise bot poole tunni jooksul: telegram + bash + cron

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

  • Otsingureas kirjutame telegram meie bot'i nime ja kĂ€ivitame selle.
  • LĂ”petuseks lisame end jĂ€lgimise teavituste saajate nimekirja:
    sudo chmod +x ./recipients-setup.sh
    torsocks ./recipients-setup.sh

    Skript vĂ€ljastab nimekirja viimastest pĂ€ringutest bot'ile, 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Ă€idis:

    123456789
    987654321

Uue saaja lisamiseks tuleb tal paluda bot'i telegramis kÀivitada, kÀivitada recipients-setup.sh ja lisada id faili.

Samm 2. Seame jĂ€lgimise ĂŒles

Teenuse kirjeldamine toimub ini-faili loomise teel kausta serviсes. Tuleb mÀÀrata viis parameetrit:

  1. MSMS_SERVICE_NAME: teenuse nimi — seda kasutatakse teavitustes ja jĂ€lgimislogis.
  2. MSMS_SERVICE_ENDPOINT: teenus, millele me pöördume curl’iga.
  3. MSMS_CURL_PARAMS: tÀiendavad curl parameetrid, vaata allpool olevat nÀidet.
  4. MSMS_EXPECTED: oodatav teenuse vastus. Kasutatakse, kui vastus on lĂŒhike.
  5. MSMS_EXPECTED_FILE: faili nimi oodatava teenuse vastusega. Kui on mÀÀratud, kirjutab MSMS_EXPECTED ĂŒle.
  6. MSMS_RECIPIENTS: fail teavituste saajate nimekirjaga.

PĂ€ring google.com tagastab fikseeritud html koos redirectiga, kasutame seda serveri oodatava vastusena:

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

Loome faili services/google.ini:

MSMS_SERVICE_NAME='google eesmine leht'

# teenuse lÔpppunkt
MSMS_SERVICE_ENDPOINT='google.com'

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

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

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

V MSMS_CURL_PARAMS vÔid mÀÀrata kÔik, mis curliga vÔimalik, sealhulgas:

  1. KĂŒljenda curl sĂ”numeid, et mitte segada konsooli ja logi: -s
  2. MÀÀrata ĂŒhenduse aegumise aeg kontrollitava teenuse jaoks (sekundites): --connect-timeout 3
  3. MÀÀrata vastuse saamise aegumine: -m 7
  4. LĂŒlita SSL sertifikaadi kontroll vĂ€lja (nĂ€iteks, kui kasutatakse enesekirjutatud sertifikaati): --insecure
  5. MÀÀrata http-pĂ€ringu tĂŒĂŒp: -X POST
  6. MÀÀrata pealkirjad: -H "Content-Type: application/json"
  7. MÀÀrata pÀringu keha stringina vÔi failina. NÀide faili kohta: -d @request.json

Oleme vĂ€lja lĂŒlitanud teavitused ja seadnud ĂŒhenduse ajaks 3 sekundit ning teenuse vastuse ajaks 7 sekundit.

TĂ€helepanu: nĂ€idake parameetrite vÀÀrtusi ĂŒhekordsetes jutumĂ€rkides, nagu nĂ€ites. Kahjuks on bash selle poolest ĂŒsna hapras olukorras, ning juhuslikult valesse kohta sattunud jutumĂ€rk vĂ”ib viia universumi kokkuvarisemiseni keeruliselt diagnoositavate vigadeni.

Oleme seadistanud jÀlgimise. Kontrollime, et kÔik oleks OK:

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

Skript peaks vÀljastama sÔnumi kujul:

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

STEP 3. Seadistame ajakava

Seadistame jÀlgimise ajakava cron'is:

sudo crontab -e

Lisa rida, et iga minut kontrollida google.com:

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

Lisame igal pÀeval kell 11:00 teavituse, mis kinnitab jÀlgimise töökindlust. Sel eesmÀrgil edastame skriptile parameetri DAILY:

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

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

Salvestame muudatused ja haakime need meeskonnaga:

 sudo service cron reload

Cron seadistamise kohta vÔib lugeda nÀiteks siit.

Nii kÀivitatakse iga minuti jÀrel jÀlgimisskript, mis teeb curl'i abil pÀringu google.com-le. Kui saadud vastus erineb oodatust, saadab skript teate telegramis saajate nimekirjale. Kontrollide ajalugu registreeritakse failis monitoring.log

Kui on vaja lisada veel ĂŒks teenus, loome lihtsalt uue ini-faili selle jaoks kaustas services ning 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 ajutiselt vĂ€lja lĂŒlitada teavitused boti omadustes telegramis.

NĂŒĂŒd vaatame lĂ€hemalt lisafunktsioone ja skriptide rakendust.

SÔnumite mallid ja emotsionaalne kaasatus

Kuna suhtlemine boti kaudu oleks elavam, nimetasime teda Manetsiks, lisasime sobiva pildi ja kaasasime professionaalsed PR-eksperdid sÔnumite koostamiseks. Saate kasutada meie vÀljatöötatud lahendusi vÔi muuta neid vastavalt oma maitsele.

NĂ€iteks nii:

Veebiteenuste monitoorimise bot poole tunni jooksul: telegram + bash + cron
vÔi isegi nii:

Veebiteenuste monitoorimise bot poole tunni jooksul: telegram + bash + cron
Miks mitte?

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

  • curl-fail.txt: sĂ”num, mis saadetakse juhul, kui curl tagastas mitte-nulliliku veakoodi. See rÀÀgib tavaliselt teenuse kĂ€ttesaamatusest.
  • daily.txt: igapĂ€evane sĂ”num, mis kinnitab, et teenuse jĂ€lgimine töötab.
  • service-fail.txt: sĂ”num, mis saadetakse juhul, kui teenuse vastus erineb oodatust.

Vaadakem kohandamise vÔimalusi sisseehitatud sÔnumite ƥabloonide nÀitel.
Ć abloonides kasutatakse emojide. Kahjuks habr neid ei kuva.
EmodĆŸide valimiseks on mugav kasutada otsingut aadressil emojipedia.org:

Veebiteenuste monitoorimise bot poole tunni jooksul: telegram + bash + cron

Sobiva sĂŒmboli kopeerite lihtsalt ja kleebite ĆĄablooni teksti (see on tavaline unicode).

  1. curl-fail.txt:
    Kassipoeg, aita mind... 
    Ei suuda teenuseni jÔuda "$MSMS_SERVICE_NAME" 
    `CURL EXIT CODE: $EXIT_CODE`

    Kasutame meie mÀÀratud teenuse nime (muutuja MSMS_SERVICE_NAME) ja sisemist muutujat skripti curl vĂ€ljumiskoodi (EXIT_CODE). Samuti vormindame sĂ”numi, kasutades telegram markdown: sĂŒmbolid "`" ĂŒmbritsevad fikseeritud laiusega teksti. Kuna jutumĂ€rgid ja apostroofid on bash'i reserveeritud sĂŒmbolid, siis pĂ”geneme neist sĂŒmboliga "". Muutujate nimed alustame sĂŒmboliga "$".

    Tulemus:

    Veebiteenuste monitoorimise bot poole tunni jooksul: telegram + bash + cron

  2. service-fail.txt:
    Kassipoeg, aita mind...
    Teenuse "$MSMS_SERVICE_NAME" tÔttu olen ma pettunud
    See töötab valesti, siin on, mida see mulle vastab:
    `$RESPONSE`

    Tulemus:

    Veebiteenuste monitoorimise bot poole tunni jooksul: telegram + bash + cron

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

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

    Tulemus:

    Veebiteenuste monitoorimise bot poole tunni jooksul: telegram + bash + cron

Liigume nĂŒĂŒd skriptide rakendamise juurde.

JĂ€lgimisskript

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

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

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

IgapÀevase jÀlgimise oleku sÔnumi koostamiseks saab skripti edastada parameetri DAILY.

Pange tÀhele, et skripti kÀivitamisel muutub praegune kaust services. See vÔimaldab ini-failides faili teede mÀÀratlemist relative services.

Teavitamise kontrollimise ja saatmise skript

msms.sh sisaldab teenuse kontrollimise ja teavitamise saatmise pÔhiloogikat.

Töötamine 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
}

Kasutame REST API-le ligipÀÀsu vormistamiseks URL-i, kasutades failis salvestatud salajast vÔtme.

Funktsioon send_message kasutab curl'i teatiste saatmiseks sellele REST API-le, saades vastuvÔtjate id-d failist, mille oleme ini-s mÀÀranud. Saadetavates andmetes mÀÀratleme, et kasutame sÔnumite vormindust: parse_mode="Markdown".

Kuvame praeguse kuupÀeva ja kellaaja ning laadime ini-faili.

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

# laadige muutujad .ini failist:
. $2

Magiiline rida . $2 tÀidab teise parameetrina antud ini-faili nagu tavalist skripti, sisestades selles mÀÀratletud vÀÀrtused keskkonnamuutujatesse.

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

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

Teostame teenuse kontrollimise ja teavituste saatmise vajadusel:

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

Esmaltame muutuja RESPONSE curl kÀsku sooritamise tulemuseks oleva vÀÀrtuse.

VÀljend EXIT_CODE=$? salvestab viimase kÀsu, s.t. curl, tulemuse muutuja. Kui on vaja teavitust saata, loetakse vastava faili mall ning saadetakse teavitused send_message.

Viimases plokis töödeldakse DAILY parameetrit:

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

See saadetakse sÔnum, mis kinnitab, et monitooring töötab.

Kasutajate id-de nimekirja saamine

recipients-setup.sh pöördub telegram API poole, et saada viimased sÔnumid, mis on saadetud botile:

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

Siin kasutatakse python'i vÔlu loendi kauni kuvamise jaoks. See pole tingimata vajalik, piisab, kui vÔtta soovitud id json'ist, mille annab kÀsk:

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

KokkuvÔte

Nii saate kasutada valmis skripte ja sĂ”numimalle, seadistades vaid jĂ€lgitavad teenused ja teavituste loendid; vĂ”ite luua uue „isiku“ botile; vĂ”i siis teha oma lahenduse pakutud baasil.

Esmaklassiliste arenguvĂ”imalustena vĂ”iks kujuneda konfigureerimine ja jĂ€lgimise haldamine otse botis, kuid selleks on juba vajalik python. Kui kellelgi juhtub varem ikkagi selle kallal töötama, siis teate, kuhu pull request'i laadida 🙂

Allikas: habr.com

Osta usaldusvÀÀrne veebihosting DDoS kaitsega, VPS VDS serverid đŸ”„ Osta usaldusvÀÀrne veebihosting DDoS kaitsega, VPS VDS serverid | ProHoster