
Včasih morate hitro uvesti spremljanje nove storitve, vendar nimate potrebne infrastrukture ali strokovnega znanja. V tem priročniku bomo v pol ure implementirali orodje za spremljanje katere koli spletne storitve, pri čemer bomo uporabili le vgrajena orodja. ubuntu: bash, cron in curl. Za pošiljanje obvestil bomo uporabili Telegram.
»Češnja na torti« bo čustvena vključenost uporabnikov. Preizkušeno na ljudeh - deluje.
Ko smo v telemedicinski storitvi Doctor Nearby ustvarili chatbota za ugotavljanje stopnje stresa uporabnikov, smo potrebovali spremljanje. V nekaj urah je nastal mini projekt, ki ne samo da odlično deluje, ampak s svojimi sporočili dodaja tudi pozitivnost.
Najprej dobimo repozitorij s skripti:
git clone https://github.com/rshekhovtsov/msms.gitPojdite v mapo msms in nato delajte v njej.
Če je telegram blokiran, uporabite proxy. Najenostavnejša in najbolj zanesljiva možnost so trupi:
sudo apt install tor
sudo apt install torsocksZa primer nastavimo spremljanje začetne strani google.com v treh korakih.
KORAK 1. Ustvarite bota v telegramu in pridobite ID uporabnika
- V iskalni vrstici za stike v telegramu iščemo :

- Zaženemo ga z gumbom Start, vnesemo ukaz /newbot in odgovorimo na vprašanja. Upoštevati morate, da je ime ime bota, ki bo prikazano uporabnikom, uporabniško ime pa je edinstveno in se mora končati z "bot":

Med drugim bo bot izdal skrivni žeton za HTTP API, ki ga je treba kopirati in shraniti v datoteko telegram-api-key.txt v mapi msms. - V iskalno vrstico telegrama vtipkamo ime našega bota in ga zaženemo.
- Za zaključek se dodamo na seznam prejemnikov nadzornih opozoril:
sudo chmod +x ./recipients-setup.sh torsocks ./recipients-setup.shSkript bo prikazal seznam nedavnih klicev botu; v telegramu mora biti ena vrstica z našim ID-jem in imenom. Ta ID vzamemo in ga shranimo v datoteko services/google-recipients.txt. Format datoteke: vsaka vrstica je en ID. primer:
123456789 987654321
Če želite dodati novega prejemnika, ga morate prositi, da zažene bota v telegramu, zažene recipients-setup.sh in doda ID v datoteko.
KORAK 2. Nastavite spremljanje
Storitev je opisana tako, da ustvarite ini datoteko v mapi storitev. Nastaviti morate pet parametrov:
- MSMS_SERVICE_NAME: ime storitve - uporabljeno bo v opozorilih in dnevniku spremljanja.
- MSMS_SERVICE_ENDPOINT: končna točka storitve, s katero bomo vzpostavili stik s curlom.
- MSMS_CURL_PARAMS: dodatne možnosti kodrov, glejte spodnji primer.
- MSMS_EXPECTED: pričakovan odziv servisa. Uporablja se, če je odgovor kratek.
- MSMS_EXPECTED_FILE: ime datoteke s pričakovanim odgovorom storitve. Če je navedeno, prepiše MSMS_EXPECTED.
- MSMS_RECIPIENTS: datoteka s seznamom prejemnikov obvestil.
Zahteva za google.com vrne fiksni html s preusmeritvijo, uporabili ga bomo kot pričakovan odgovor strežnika:
curl google.com > services/google-response.htmlUstvarimo datoteko 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 nastavite lahko vse, kar zmore curl, vključno z:
- Onemogočite curl sporočila, da preprečite nered na konzoli in dnevniku:
-s - Nastavite časovno omejitev povezave s storitvijo, ki se preverja (v sekundah):
--connect-timeout 3 - Nastavite časovno omejitev odziva:
-m 7 - Onemogočite preverjanje potrdila za SSL (na primer, če uporabljate samopodpisano potrdilo):
--insecure - Določite vrsto zahteve http:
-X POST - Določite naslove:
-H "Content-Type: application/json" - Podajte telo zahteve kot niz ali datoteko. Primer za datoteko:
-d @request.json
Onemogočili smo obvestila in nastavili časovne omejitve na 3 sekunde. za povezavo in 7 sek. da prejmete servisni odgovor.
Pozornost: Določite vrednosti parametrov v enojnih narekovajih, kot v primeru. Na žalost je bash v tem smislu precej krhek in naključni metulj z napačnim narekovajem lahko privede do smrti vesolja s težko diagnosticiranimi napakami.
Vzpostavili smo monitoring. Preverimo, ali je vse v redu:
sudo chmod +x ./monitoring.sh
torsocks ./monitoring.shSkript bi moral prikazati sporočilo, kot je:
2020-01-10 12:14:31
health-check "google front page": OKKORAK 3. Nastavitev urnika
Nastavimo urnik spremljanja v cron:
sudo crontab -eDodajmo vrstico za preverjanje google.com vsako minuto:
*/1 * * * * torsocks <ПУТЬ К ПАПКЕ РЕПОЗИТОРИЯ>/monitoring.sh >> <ПУТЬ К ПАПКЕ РЕПОЗИТОРИЯ>/monitoring.log 2>&1Vsak dan ob 11.00 bomo dodali opozorilo, ki bo potrdilo funkcionalnost samega spremljanja. Da bi to naredili, bomo skriptu posredovali parameter DAILY:
0 11 * * * torsocks <ПУТЬ К ПАПКЕ РЕПОЗИТОРИЯ>/monitoring.sh DAILY >> <ПУТЬ К ПАПКЕ РЕПОЗИТОРИЯ>/monitoring.log 2>&1
2>&1 - standardna tehnika, ki preusmerja napake v glavni izhodni tok. Posledično bodo končali tudi v dnevniku spremljanja.
Shranimo spremembe in jih poberemo z ukazom:
sudo service cron reloadVeč o nastavitvi cron lahko na primer preberete .
Tako se bo vsako minuto zagnal nadzorni skript, ki bo povezal google.com preko curla. Če se prejeti odgovor razlikuje od pričakovanega, bo skript poslal obvestilo telegram na seznam prejemnikov. Revizijski dnevnik se hrani v datoteki monitoring.log
Če moramo dodati še eno storitev, preprosto ustvarimo novo ini datoteko zanjo v mapi storitev in po potrebi ustvarimo ločen seznam prejemnikov. Vse ostalo bo delovalo samodejno.
Če storitev, ki se preverja, ni več na voljo, bo vsako minuto poslano opozorilo. Če storitve ne morete hitro obnoviti, lahko začasno onemogočite obvestila v lastnostih telegrama bota.
Zdaj pa si podrobneje oglejmo dodatne funkcije in izvedbo skriptov.
Vzorci sporočil in čustvena angažiranost
Da bi bila komunikacija z botom bolj živahna, smo ga poimenovali Manechka, dodali ustrezno sliko avatarja in najeli profesionalne PR strokovnjake za ustvarjanje besedil sporočil. Lahko uporabite naše izkušnje ali pa jih spremenite po svojem okusu.
Na primer takole:

ali celo takole:

Zakaj ne?
Ime bota in avatar sta nastavljena prek .
Predloge sporočil so v mapi predloge:
- curl-fail.txt: sporočilo, poslano, ko curl vrne kodo napake, ki ni nič. Običajno govori o nezmožnosti doseganja storitve.
- daily.txt: dnevno sporočilo, ki potrjuje, da nadzor storitev deluje.
- service-fail.txt: Sporočilo, poslano, ko je odziv storitve drugačen od pričakovanega.
Oglejmo si možnosti prilagajanja na primeru vgrajenih predlog sporočil.
Predloge uporabljajo emoji. Na žalost jih habr ne prikaže.
Če želite izbrati emoji, je priročno uporabiti iskanje na :

Preprosto kopirate in prilepite ustrezen simbol v besedilo predloge (to je običajni unicode).
- curl-fail.txt:
Котёнок, помоги мне... Не могу достучаться до сервиса "$MSMS_SERVICE_NAME" `CURL EXIT CODE: $EXIT_CODE`Uporabili smo ime storitve, ki smo ga določili (spremenljivka
MSMS_SERVICE_NAME) in interno skriptno spremenljivko z izhodno kodo curl (EXIT_CODE). Sporočilo smo tudi oblikovali z oznako : znaki "`" obkrožajo besedilo s fiksno širino. Ker so narekovaji in apostrofi bash simboli, jim ubežimo z "". Pred imeni spremenljivk je znak "$".Rezultat:

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

Tukaj uporabljamo drugo spremenljivko skripta:RESPONSE. Vsebuje odgovor storitve. - daily.txt:
Малыш, привет! У меня всё хорошо, cлежу за сервисом: "$MSMS_SERVICE_NAME" каждую минутку... А как у тебя дела?Rezultat:

Preidimo na izvajanje skriptov.
Skript za spremljanje
spremljanje.sh naredi preprosto samodejno odkrivanje - vzame vse datoteke ini iz mape storitev in za vsako izvede glavni skript z logiko za preverjanje in pošiljanje opozoril:
#!/bin/bash
cd $(dirname "$0")/services
for service_ini in $(ls *.ini); do
bash ../msms.sh "$1" "$service_ini"
doneČe želite ustvariti dnevno sporočilo o statusu spremljanja, lahko skriptu posredujete parameter DAILY.
Upoštevajte, da se ob zagonu skripta trenutna mapa spremeni v storitve. To vam omogoča, da določite poti datotek glede na storitve v datotekah ini.
Skripta za preverjanje in pošiljanje obvestil
msms.sh vsebuje glavno logiko za preverjanje storitve in pošiljanje opozoril.
Delo s telegramom:
# 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
}
Ustvarimo URL za dostop do API-ja REST telegrama s pomočjo tajnega ključa, shranjenega v datoteki.
Funkcija send_message uporablja curl za pošiljanje sporočil temu API-ju REST, pri čemer vzame ID-je prejemnikov iz datoteke, ki smo jo podali v ini. V podatkih, ki jih pošljemo, navedemo, da uporabljamo označevanje sporočil: parse_mode="Markdown".
Prikažimo trenutni datum in čas ter naložimo datoteko ini.
echo $(date '+%Y-%m-%d %H:%M:%S')
# load variables from .ini file:
. $2
Čarobna vrvica . $2 izvede datoteko ini, ki je bila posredovana vhodu kot drugi parameter kot običajni skript, pri čemer v spremenljivke okolja vnese vrednosti, ki so v njej podane.
Naloži pričakovan odgovor iz datoteke, če je parameter podan MSMS_EXPECTED_FILE:
if [ -n "$MSMS_EXPECTED_FILE" ]; then
MSMS_EXPECTED="$(cat "$MSMS_EXPECTED_FILE")"
fi
Storitev bomo preverili in po potrebi poslali opozorila:
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
Najprej priredimo spremenljivki RESPONSE rezultat izvajanja ukaza curl za to storitev.
Izraz EXIT_CODE=$? postavi rezultat zadnjega ukaza v spremenljivko, tj. curl. Če je treba poslati opozorilo, se predloga prebere iz ustrezne datoteke in pošlje prejemnikom z uporabo send_message.
Zadnji blok obdela 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"
fiPošlje sporočilo, ki potrjuje funkcionalnost samega spremljanja.
Pridobivanje seznama ID-jev uporabnikov
recipients-setup.sh pokliče telegram API, da dobi najnovejša sporočila, naslovljena na bot:
curl -s https://api.telegram.org/bot$(cat telegram-api-key.txt)/getUpdates
| python recipients-setup.pyTo uporablja python magic za čudovit prikaz seznama. To ni potrebno, lahko preprosto vzamete želeni ID iz json, ki ga bo ukaz izpisal:
torsocks curl -s https://api.telegram.org/bot$(cat telegram-api-key.txt)/getUpdatesZaključek
Tako lahko uporabite že pripravljene skripte in predloge sporočil, nastavite samo nadzorovane storitve in sezname za opozorila; ustvarite lahko novo »osebnost« za bota; lahko pa se sami odločite glede na predlagano.
Možnosti za nadaljnji razvoj predlagajo konfiguracijo in upravljanje nadzora v samem botu, vendar tukaj ne morete storiti brez pythona. Če ga kdo dobi pred mano, veste, kam oddati zahtevo za vlečenje :)
Vir: www.habr.com



