
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.gitLiigume 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 torsocksNÀiteks seadistame kolme sammuga google.com esilehe jÀlgimise.
SAMM 1. Loome telegrammis boti ja saame kasutaja ID.
- Otsingureas otsime telegrammis kontakte. :

- 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»:

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.shSkript 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:
- MSMS_SERVICE_NAME: teenuse nimi â seda kasutatakse teavitustes ja jĂ€lgimislogis.
- MSMS_SERVICE_ENDPOINT: teenus, millele me pöördume curlâiga.
- MSMS_CURL_PARAMS: tÀiendavad curl parameetrid, vaata allpool olevat nÀidet.
- MSMS_EXPECTED: oodatav teenuse vastus. Kasutatakse, kui vastus on lĂŒhike.
- MSMS_EXPECTED_FILE: faili nimi oodatava teenuse vastusega. Kui on mÀÀratud, kirjutab MSMS_EXPECTED ĂŒle.
- 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.htmlLoome 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:
- KĂŒljenda curl sĂ”numeid, et mitte segada konsooli ja logi:
-s - MÀÀrata ĂŒhenduse aegumise aeg kontrollitava teenuse jaoks (sekundites):
--connect-timeout 3 - MÀÀrata vastuse saamise aegumine:
-m 7 - LĂŒlita SSL sertifikaadi kontroll vĂ€lja (nĂ€iteks, kui kasutatakse enesekirjutatud sertifikaati):
--insecure - MÀÀrata http-pĂ€ringu tĂŒĂŒp:
-X POST - MÀÀrata pealkirjad:
-H "Content-Type: application/json" - 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.shSkript peaks vÀljastama sÔnumi kujul:
2020-01-10 12:14:31
health-check "google front page": OKSTEP 3. Seadistame ajakava
Seadistame jÀlgimise ajakava cron'is:
sudo crontab -eLisa rida, et iga minut kontrollida google.com:
*/1 * * * * torsocks /monitoring.sh >> /monitoring.log 2>&1Lisame 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 reloadCron seadistamise kohta vÔib lugeda nÀiteks .
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:

vÔi isegi nii:

Miks mitte?
Boti nimi ja avatar mÀÀratakse lÀbi .
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 :

Sobiva sĂŒmboli kopeerite lihtsalt ja kleebite ĆĄablooni teksti (see on tavaline unicode).
- 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 : 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:

- 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:

Siin kasutame veel ĂŒhte skripti muutujat:RESPONSE. See sisaldab teenuse vastust. - daily.txt:
Tere, beebi! Minuga on kÔik hÀsti, jÀlgin teenust: "$MSMS_SERVICE_NAME" iga minuti tagant... Kuidas sul lÀheb?Tulemus:

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"
doneIgapÀ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"
fiSee 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.pySiin 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)/getUpdatesKokkuvÔ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



