
Batzuetan zerbitzu berri baten jarraipena azkar egin behar duzu, baina ez dago prest dagoen azpiegitura/esperientziarik eskura. Gida honetan, ordu erdi barru edozein web-zerbitzuen jarraipena egiteko tresna bat ezarriko dugu, ubuntu-ren barneko tresnak soilik erabiliz: bash, cron eta curl. Telegrama erabiliko dugu alertak emateko.
“Pastelaren gerezia” erabiltzaileen inplikazio emozionala izango da. Pertsonetan probatua - funtzionatzen du.
Doctor Nearby telemedikuntza zerbitzuan erabiltzaileen estres maila zehazteko txatbot bat sortu genuenean, monitorizazioa behar genuen. Ordu pare batean, oso ondo funtzionatzen ez ezik, bere mezuekin positibotasuna gehitzen duen miniproiektu bat sortu zen.
Lehenik eta behin, lor dezagun biltegi bat scriptekin:
git clone https://github.com/rshekhovtsov/msms.gitJoan msms karpetara eta gero lan egin bertan.
Telegrama blokeatuta badago, erabili proxy bat. Aukerarik errazena eta fidagarriena enborrak dira:
sudo apt install tor
sudo apt install torsocksAdibide gisa, konfigura dezagun google.com hasierako orriaren jarraipena hiru urratsetan.
1. URRATSA. Sortu bot bat telegram-en eta lortu erabiltzailearen IDa
- Telegram-en kontaktuen bilaketa-barran bilatzen dugu :

- Hasi botoiarekin abiarazten dugu, /newbot komandoa sartu eta galderei erantzuten diegu. Kontuan izan behar duzu izena erabiltzaileei erakutsiko zaien bot-aren izena dela, eta erabiltzaile-izena bakarra dela eta "bot"-arekin amaitu behar dela:

Besteak beste, bot-ak HTTP APIrako token sekretu bat jaulkiko du, kopiatu eta gorde behar dena msms karpetako telegram-api-key.txt fitxategian. - Telegramen bilaketa-barran gure botaren izena idazten dugu eta abiarazten dugu.
- Amaitzeko ukitu gisa, gehi gaitezen monitorizazio alerta-hartzaileen zerrendan:
sudo chmod +x ./recipients-setup.sh torsocks ./recipients-setup.shScriptak bot-ari egindako azken deien zerrenda erakutsiko du; lerro bat egon beharko litzateke gure idarekin eta izenarekin telegraman. Id hau hartu eta services/google-recipients.txt fitxategian gordetzen dugu. Fitxategi-formatua: lerro bakoitza id bat da. Adibidea:
123456789 987654321
Hartzaile berri bat gehitzeko, bot-a telegram-en abiarazteko eskatu behar diozu, recipients-setup.sh exekutatu eta id-a fitxategian gehitzeko.
2. URRATSA. Konfiguratu monitorizazioa
Zerbitzua zerbitzuen karpetan ini fitxategi bat sortuz deskribatzen da. Bost parametro ezarri behar dituzu:
- MSMS_SERVICE_NAME: zerbitzuaren izena - alertak eta jarraipenaren erregistroan erabiliko da.
- MSMS_SERVICE_ENDPOINT: curl-ekin harremanetan jarriko garen zerbitzuaren amaiera.
- MSMS_CURL_PARAMS: kizkurren aukera gehigarriak, ikusi beheko adibidea.
- MSMS_ESPERATU: zerbitzuaren espero den erantzuna. Erantzuna laburra bada erabiltzen da.
- MSMS_EXPECTED_FILE: fitxategiaren izena espero den zerbitzuaren erantzunarekin. Zehazten bada, MSMS_EXPECTED gainidazten du.
- MSMS_RECIPIENTS: jakinarazpen-hartzaileen zerrenda duen fitxategia.
Google.com-i egindako eskaerak html finkoa itzultzen du birbideraketa batekin, espero dugun zerbitzariaren erantzun gisa erabiliko dugu:
curl google.com > services/google-response.htmlSor dezagun services/google.ini fitxategia:
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 Curl-ek egin dezakeen guztia ezar dezakezu, besteak beste:
- Desgaitu kizkur-mezuak kontsola nahasteko eta erregistroa saihesteko:
-s - Ezarri konexioaren denbora-muga egiaztatzen ari den zerbitzuarekin (segundotan):
--connect-timeout 3 - Ezarri erantzun-denbora:
-m 7 - Desgaitu SSLrako ziurtagirien egiaztapena (adibidez, norberak sinatutako ziurtagiria erabiltzen ari bazara):
--insecure - Zehaztu http eskaera mota:
-X POST - Zehaztu goiburuak:
-H "Content-Type: application/json" - Zehaztu eskaeraren gorputza kate edo fitxategi gisa. Fitxategi baten adibidea:
-d @request.json
Jakinarazpenak desgaitu ditugu eta 3 segundoko denbora-muga ezarri dugu. konektatzeko eta 7 seg. zerbitzuaren erantzuna jasotzeko.
Arreta: Zehaztu parametroen balioak komatxo bakarren artean, adibidean bezala. Zoritxarrez, bash nahiko hauskorra da zentzu honetan, eta komatxo oker batekin ustekabeko tximeleta batek unibertsoaren heriotza ekar dezake diagnostikatzeko zailak diren akatsekin.
Jarraipena ezarri dugu. Egiaztatu dezagun dena ondo dagoela:
sudo chmod +x ./monitoring.sh
torsocks ./monitoring.shGidoiak honelako mezu bat erakutsi beharko luke:
2020-01-10 12:14:31
health-check "google front page": OK3. URRATSA. Ordutegi bat konfiguratzea
Konfigura dezagun jarraipen-egutegia cron-en:
sudo crontab -eGehi dezagun lerro bat minuturo google.com egiaztatzeko:
*/1 * * * * torsocks <ПУТЬ К ПАПКЕ РЕПОЗИТОРИЯ>/monitoring.sh >> <ПУТЬ К ПАПКЕ РЕПОЗИТОРИЯ>/monitoring.log 2>&1Goizeko 11.00:XNUMXetan alerta bat gehituko dugu egunero, monitorizazioaren beraren funtzionaltasuna baieztatuz. Horretarako, DAILY parametroa pasatuko diogu scriptari:
0 11 * * * torsocks <ПУТЬ К ПАПКЕ РЕПОЗИТОРИЯ>/monitoring.sh DAILY >> <ПУТЬ К ПАПКЕ РЕПОЗИТОРИЯ>/monitoring.log 2>&1
2>&1 - Akatsak irteerako korronte nagusira birbideratzen dituen teknika estandarra. Ondorioz, jarraipenaren erregistroan ere amaituko dute.
Gorde ditzagun aldaketak eta jaso ditzagun komandoarekin:
sudo service cron reloadCron konfiguratzeari buruzko informazio gehiago irakur dezakezu, adibidez, .
Horrela, minuturo jarraipen script bat abiaraziko da, curl bidez google.com-ekin harremanetan jarriko dena. Jasotako erantzuna espero denaren desberdina bada, scriptak telegrama jakinarazpena bidaliko dio hartzaileen zerrendari. Auditoretza erregistroa monitoring.log fitxategian gordetzen da
Beste zerbitzu bat gehitu behar badugu, ini fitxategi berri bat sortu besterik ez dugu zerbitzuen karpetan eta, behar izanez gero, hartzaileen zerrenda bereizia sortuko dugu. Gainerako guztiak automatikoki funtzionatuko du.
Egiaztatzen ari den zerbitzua erabilgarri geratu ez bada, minuturo alerta bat bidaliko da. Ezin baduzu zerbitzua azkar leheneratu, bot-en telegramen propietateetan jakinarazpenak aldi baterako desgaitu ditzakezu.
Orain ikus ditzagun scripten ezaugarri osagarriak eta inplementazioa.
Mezu-ereduak eta konpromiso emozionala
Botarekin komunikazioa biziagoa izan dadin, Manechka izena jarri genion, avatar irudi egokia gehitu eta PR espezialista profesionalak kontratatu genituen mezuen testuak sortzeko. Gure esperientzia erabil dezakezu edo zure gustura alda dezakezu.
Adibidez, honela:

edo baita honela:

Zergatik ez?
Bot izena eta avatarra bidez ezartzen dira .
Mezuen txantiloiak karpetan daude txantiloiak:
- curl-fail.txt: curl-ek zero ez den errore-kode bat itzultzen duenean bidalitako mezua. Normalean zerbitzura iristeko ezintasunaz hitz egiten da.
- eguneroko.txt: Zerbitzuaren monitorizazioa funtzionatzen ari dela baieztatzen duen eguneroko mezua.
- service-fail.txt: Zerbitzuaren erantzuna espero zenaren desberdina denean bidalitako mezua.
Ikus ditzagun pertsonalizazio aukerak adibide gisa integratutako mezu-txantiloiak erabiliz.
Txantiloiek emojia erabiltzen dute. Zoritxarrez, habr-ek ez ditu bistaratzen.
Emoji hautatzeko, erosoa da bilaketa aktibatuta erabiltzea :

Sinbolo egokia kopiatu eta itsatsi besterik ez duzu txantiloiaren testuan (unicode arrunta da).
- curl-fail.txt:
Котёнок, помоги мне... Не могу достучаться до сервиса "$MSMS_SERVICE_NAME" `CURL EXIT CODE: $EXIT_CODE`Zehaztutako zerbitzuaren izena erabili dugu (aldagaia
MSMS_SERVICE_NAME) eta barneko script aldagai bat kizkur-irteera kodearekin (EXIT_CODE). Mezua markaketa erabiliz ere formateatu dugu : "`" karaktereek zabalera finkoko testua inguratzen dute. Komatxoak eta apostrofoak bash ikurrak direnez, ""-rekin ihes egiten diegu. Aldagaien izenak "$" ikurra dute aurretik.Emaitza:

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

Hemen beste script aldagai bat erabiltzen dugu:RESPONSE. Zerbitzuaren erantzuna jasotzen du. - eguneroko.txt:
Малыш, привет! У меня всё хорошо, cлежу за сервисом: "$MSMS_SERVICE_NAME" каждую минутку... А как у тебя дела?Emaitza:

Goazen scripten ezarpenera.
Jarraipen gidoia
jarraipena.sh auto-aurkikuntza sinple bat egiten du - zerbitzuen karpetako ini fitxategi guztiak hartzen ditu eta bakoitzarentzat script nagusia exekutatzen du alertak egiaztatzeko eta bidaltzeko logikarekin:
#!/bin/bash
cd $(dirname "$0")/services
for service_ini in $(ls *.ini); do
bash ../msms.sh "$1" "$service_ini"
doneJarraipen egoerari buruzko eguneroko mezu bat sortzeko, DAILY parametroa gidoiari pasa diezaiokezu.
Kontuan izan scripta hasten denean uneko karpeta zerbitzuetara aldatzen dela. Honi esker, ini fitxategietan zerbitzuei dagozkien fitxategi-bideak zehazten dituzu.
Jakinarazpenak egiaztatzeko eta bidaltzeko scripta
msms.sh zerbitzua egiaztatzeko eta alertak bidaltzeko logika nagusia dauka.
Telegramekin lan egiten:
# 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
}
Telegram REST APIra sartzeko URL bat sortzen dugu fitxategian gordetako gako sekretua erabiliz.
send_message funtzioak curl erabiltzen du REST API honetara mezuak bidaltzeko, hartzailearen IDak ini-n zehaztu dugun fitxategitik hartuta. Bidaltzen ditugun datuetan, mezuen markaketa erabiltzen dugula adierazten dugu: parse_mode="Markdown".
Bistaratu ditzagun uneko data eta ordua eta kargatu ini fitxategia.
echo $(date '+%Y-%m-%d %H:%M:%S')
# load variables from .ini file:
. $2
Kate magikoa . $2 bigarren parametro gisa sarrerara pasatu den ini fitxategia script arrunt gisa exekutatzen du, bertan zehaztutako balioak ingurune-aldagaietan sartuz.
Kargatu fitxategitik espero den erantzuna parametroa zehaztuta badago MSMS_EXPECTED_FILE:
if [ -n "$MSMS_EXPECTED_FILE" ]; then
MSMS_EXPECTED="$(cat "$MSMS_EXPECTED_FILE")"
fi
Zerbitzua egiaztatuko dugu eta behar izanez gero alertak bidaliko ditugu:
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
Lehenik eta behin aldagaiari esleituko diogu RESPONSE zerbitzu honen curl komandoa exekutatzearen emaitza.
adierazpen EXIT_CODE=$? azken komandoaren emaitza aldagai batean jartzen du, hau da. Kiribil. Alerta bat bidali behar bada, txantiloia dagokion fitxategitik irakurri eta hartzaileei bidaltzen zaie send_message.
Azken blokeak DAILY parametroa prozesatzen du:
if test "$1" = "DAILY"; then
echo health-check "$MSMS_SERVICE_NAME" DAILY
MESSAGE="$(cat ../templates/daily.txt)"
MESSAGE=$(eval echo $MESSAGE)
send_message "$MESSAGE"
fiMonitorizazioaren beraren funtzionaltasuna berresten duen mezu bat bidaltzen du.
Erabiltzaile IDen zerrenda lortzea
hartzaileak-setup.sh telegram APIra deitzen du bot-ari zuzendutako azken mezuak jasotzeko:
curl -s https://api.telegram.org/bot$(cat telegram-api-key.txt)/getUpdates
| python recipients-setup.pyHonek python magia erabiltzen du zerrenda bat ederki errendatzeko. Hau ez da beharrezkoa, json-etik nahi duzun id-a har dezakezu, komandoak aterako duena:
torsocks curl -s https://api.telegram.org/bot$(cat telegram-api-key.txt)/getUpdatesOndorioa
Horrela, prest egindako script-ak eta mezu-txantiloiak erabil ditzakezu, monitorizatutako zerbitzuak eta abisuetarako zerrendak soilik ezarriz; "nortasun" berri bat sor dezakezu botarentzat; edo proposatutakoaren arabera zure erabakia har dezakezu.
Garapen gehiagorako aukerek monitorizazioa bot-ean bertan konfiguratzea eta kudeatzea proposatzen dute, baina hemen ezin duzu python gabe egin. Norbaitek nire aurretik lortzen badu, badakizu tira eskaera non bidali :)
Iturria: www.habr.com



