
Heiansdo musst Dir séier eng Iwwerwaachung fir en neie Service implementéieren, awer Dir hutt net déi néideg Infrastruktur oder Expertise zur Verfügung. An dësem Guide implementéiere mir en Tool fir all Webservice an enger hallwer Stonn ze iwwerwaachen, andeems mir nëmmen agebaute Tools benotzen. ubuntubash, cron, a curl. Mir benotzen Telegram fir Notifikatiounen ze verschécken.
D'"Kiischt op de Kuch" wäert den emotionalen Engagement vun de Benotzer sinn. Getest op Leit - et funktionnéiert.
Wa mir am Telemedizin Service Doctor Nearby en Chatbot erstallt hunn fir de Stressniveau vun de Benotzer ze bestëmmen, brauche mir Iwwerwaachung. An e puer Stonnen ass e Mini-Projet geschaf ginn, deen net nëmmen super funktionnéiert, mee och Positivitéit mat senge Messagen bäidréit.
Als éischt, loosst eis e Repository mat Skripte kréien:
git clone https://github.com/rshekhovtsov/msms.gitGitt an den msms Dossier a schafft dann an et.
Wann Telegramm blockéiert ass, benotzt e Proxy. Déi einfachst an zouverlässeg Optioun ass Torsocks:
sudo apt install tor
sudo apt install torsocksAls Beispill, loosst eis d'Iwwerwaachung vun der google.com Startsäit an dräi Schrëtt opstellen.
SCHRËTT 1. Erstellt e Bot am Telegramm a kritt d'Benotzer ID
- An der Sichbar fir Kontakter am Telegram sichen mir no :

- Mir starten et mam Start Knäppchen, gitt de / newbot Kommando an beäntwert d'Froen. Dir musst am Kapp behalen datt den Numm den Numm vum Bot ass deen de Benotzer ugewise gëtt, an de Benotzernumm ass eenzegaarteg a muss mat "Bot" ophalen:

Ënnert anerem gëtt de Bot e geheime Token fir den HTTP API erausginn, dee muss kopéiert a gespäichert ginn an d'Telegram-api-key.txt Datei am msms-Ordner. - Mir tippen den Numm vun eisem Bot an der Telegram Sichbar a starten et.
- Als Schlussfolgerung, loosst eis eis op d'Lëscht vun den Iwwerwaachungsalarmempfänger addéieren:
sudo chmod +x ./recipients-setup.sh torsocks ./recipients-setup.shDe Skript wäert eng Lëscht vun de rezenten Uruff un de Bot weisen, et soll eng Zeil mat eisem ID an dem Numm am Telegramm sinn. Mir huelen dës ID a späicheren se an de Dateiservicer/google-recipients.txt. Dateiformat: all Zeil ass eng ID. Beispill:
123456789 987654321
Fir en neien Empfänger ze addéieren, musst Dir him froen de Bot am Telegramm ze starten, recipients-setup.sh auszeféieren an d'ID an d'Datei ze addéieren.
SCHRËTT 2. Ariichten Iwwerwachung
De Service gëtt beschriwwen andeems Dir eng Ini Datei am Service Dossier erstellt. Dir musst fënnef Parameter setzen:
- MSMS_SERVICE_NAME: Servicenumm - gëtt an Alarmer an Iwwerwaachungsprotokoll benotzt.
- MSMS_SERVICE_ENDPOINT: Endpunkt vum Service, op deen mir mat Curl kontaktéieren.
- MSMS_CURL_PARAMS: zousätzlech Curl Optiounen, gesinn Beispill ënnert.
- MSMS_EXPECTED: erwaart Äntwert vum Service. Benotzt wann d'Äntwert kuerz ass.
- MSMS_EXPECTED_FILE: Dateinumm mat der erwaarter ServiceÄntwert. Wann uginn, iwwerschreift MSMS_EXPECTED.
- MSMS_RECIPIENTS: Datei mat enger Lëscht vun Notifikatiounsempfänger.
Eng Ufro un google.com gëtt fixen HTML mat engem Viruleedung zréck, mir benotze se als erwaart Server Äntwert:
curl google.com > services/google-response.htmlLoosst eis d'Servicer/google.ini Datei erstellen:
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 Dir kënnt alles setzen wat Curl maache kann, inklusiv:
- Curl Messagen auszeschalten fir d'Konsole ze vermeiden a loggt:
-s - Setzt d'Verbindungstimeout mam Service deen iwwerpréift gëtt (a Sekonnen):
--connect-timeout 3 - Set Äntwert Timeout:
-m 7 - Zertifizéierungsverifizéierung fir SSL auszeschalten (zum Beispill wann Dir e selbst ënnerschriwwenen Zertifika benotzt):
--insecure - Gitt den http Ufro Typ un:
-X POST - Spezifizéieren Rubriken:
-H "Content-Type: application/json" - Gitt den Ufrokierper als String oder Datei un. Beispill fir e Fichier:
-d @request.json
Mir hunn Notifikatiounen deaktivéiert an d'Timeouts op 3 Sekonnen gesat. ze konnektéieren an 7 sec. eng Service Äntwert ze kréien.
Opgepasst: Spezifizéiert Parameterwäerter an eenzel Zitater, wéi am Beispill. Leider ass Bash zimmlech fragil an dësem Sënn, an en zoufälleg Päiperléck mat engem falschen Zitatzeechen kann zum Doud vum Universum mat schwéier diagnostizéierende Feeler féieren.
Mir hunn d'Iwwerwaachung opgestallt. Loosst eis kucken ob alles OK ass:
sudo chmod +x ./monitoring.sh
torsocks ./monitoring.shDe Skript soll e Message weisen wéi:
2020-01-10 12:14:31
health-check "google front page": OKSCHRËTT 3. Ariichten engem Zäitplang
Loosst eis en Iwwerwaachungsplang a cron opstellen:
sudo crontab -eLoosst eis eng Zeil derbäi fir google.com all Minutt ze kontrolléieren:
*/1 * * * * torsocks <ПУТЬ К ПАПКЕ РЕПОЗИТОРИЯ>/monitoring.sh >> <ПУТЬ К ПАПКЕ РЕПОЗИТОРИЯ>/monitoring.log 2>&1Mir addéieren all Dag um 11.00:XNUMX Auer eng Alarm, déi d'Funktionalitéit vun der Iwwerwaachung selwer bestätegt. Fir dëst ze maachen, wäerte mir den DAILY Parameter un de Skript passéieren:
0 11 * * * torsocks <ПУТЬ К ПАПКЕ РЕПОЗИТОРИЯ>/monitoring.sh DAILY >> <ПУТЬ К ПАПКЕ РЕПОЗИТОРИЯ>/monitoring.log 2>&1
2>&1 - eng Standardtechnik déi Feeler an den Haaptausgangsstroum viruleet. Als Resultat wäerte se och am Iwwerwaachungsprotokoll ophalen.
Loosst eis d'Ännerungen späicheren a se mam Kommando ophuelen:
sudo service cron reloadDir kënnt méi iwwer d'Astellung vun Cron liesen, zum Beispill, .
Also gëtt all Minutt en Iwwerwaachungsskript lancéiert, deen google.com iwwer Curl kontaktéiert. Wann d'Äntwert kritt vun der erwaart ënnerscheet, schéckt de Skript eng Telegramm Notifikatioun un d'Lëscht vun den Empfänger. Den Auditprotokoll gëtt an der Datei monitoring.log gehaalen
Wa mir en anere Service musse addéieren, erstellen mir einfach eng nei Ini-Datei dofir am Dossier Servicer an, wann néideg, eng separat Lëscht vun Empfänger erstellen. Alles anescht funktionnéiert automatesch.
Wann de Service deen iwwerpréift gëtt net verfügbar ass, gëtt all Minutt eng Notifikatioun geschéckt. Wann Dir de Service net séier restauréiere kënnt, kënnt Dir temporär Notifikatiounen an den Telegrammeigenschaften vum Bot ausschalten.
Loosst eis elo déi zousätzlech Funktiounen an d'Ëmsetzung vu Skripte méi no kucken.
Message Muster an emotional Engagement
Fir d'Kommunikatioun mam Bot méi lieweg ze maachen, hu mir et Manechka genannt, e passende Avatarbild bäigefüügt a berufflech PR Spezialisten agestallt fir Messagen Texter ze kreéieren. Dir kënnt eis Erfahrung benotzen oder se op Äre Goût änneren.
Zum Beispill wéi dëst:

oder souguer esou:

Firwat net?
De Bot Numm an Avatar ginn via .
Message Schablounen sinn am Dossier Skeletter:
- curl-fail.txt: Message geschéckt wann Curl engem Net-Null Feeler Code zréck. Normalerweis schwätzt et iwwer d'Onméiglechkeet de Service z'erreechen.
- daily.txt: Deeglech Message confirméiert datt Service Iwwerwachung funktionnéiert.
- service-fail.txt: E Message geschéckt wann de Service Äntwert anescht ass wéi erwaart.
Loosst eis d'Personaliséierungsoptioune kucken mat agebaute Message Templates als Beispill.
D'Schabloune benotzen Emoji. Leider weist habr se net.
Fir Emoji ze wielen, ass et bequem d'Sich op ze benotzen :

Dir kopéiert a paste einfach dat entspriechend Symbol an den Templatetext (dëst ass regelméisseg Unicode).
- curl-fail.txt:
Котёнок, помоги мне... Не могу достучаться до сервиса "$MSMS_SERVICE_NAME" `CURL EXIT CODE: $EXIT_CODE`Mir hunn de Servicenumm benotzt, dee mir uginn hunn (Variabel
MSMS_SERVICE_NAME) an eng intern Skript Variabel mat Curl Exit Code (EXIT_CODE). Mir hunn och de Message mat Markup formatéiert : "`" Zeechen ëmginn Text mat fixer Breet. Well Zitater an Apostrophe Bash Symboler sinn, flüchten mir hinnen mat "". Variabel Nimm gi virun engem "$" Zeechen.Resultat:

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

Hei benotze mir eng aner Skriptvariabel:RESPONSE. Et enthält de Service Äntwert. - daily.txt:
Малыш, привет! У меня всё хорошо, cлежу за сервисом: "$MSMS_SERVICE_NAME" каждую минутку... А как у тебя дела?Resultat:

Loosst eis op d'Ëmsetzung vu Skripte weidergoen.
Iwwerwachung Skript
monitoring.sh mécht eng einfach Auto-Entdeckung - et hëlt all d'Ini Dateien aus dem Servicer Dossier a fir jidderee féiert den Haaptskript mat der Logik fir d'Iwwerwaachung an d'Alarm ze schécken:
#!/bin/bash
cd $(dirname "$0")/services
for service_ini in $(ls *.ini); do
bash ../msms.sh "$1" "$service_ini"
doneFir en deegleche Message iwwer den Iwwerwaachungsstatus ze generéieren, kënnt Dir den DAILY Parameter un de Skript weiderginn.
Maacht weg datt wann de Skript ufänkt, ännert den aktuellen Dossier op Servicer. Dëst erlaabt Iech Dateiweeër relativ zu Servicer an ini Dateien ze spezifizéieren.
Skript fir Notifikatiounen ze kontrolléieren an ze schécken
msms.sch enthält d'Haaptlogik fir de Service ze kontrolléieren an Alarmer ze schécken.
Schafft mat Telegramm:
# 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
}
Mir generéieren eng URL fir Zougang zum Telegram REST API mat dem geheime Schlëssel deen an der Datei gespäichert ass.
D'Send_message Funktioun benotzt Curl fir Messagen op dës REST API ze schécken, andeems d'Empfänger IDen aus der Datei huelen, déi mir am Ini spezifizéiert hunn. An den Donnéeën déi mir schécken, weisen mir datt mir Message Markup benotzen: parse_mode="Markdown".
Loosst eis den aktuellen Datum an Zäit weisen an d'Ini Datei lueden.
echo $(date '+%Y-%m-%d %H:%M:%S')
# load variables from .ini file:
. $2
Magesch String . $2 fiert d'Ini-Datei aus, déi un den Input als zweete Parameter als e reguläre Skript weidergeleet gëtt, a gitt d'Wäerter an d'Ëmfeldvariablen an.
Luet déi erwaart Äntwert aus der Datei wann de Parameter uginn ass MSMS_EXPECTED_FILE:
if [ -n "$MSMS_EXPECTED_FILE" ]; then
MSMS_EXPECTED="$(cat "$MSMS_EXPECTED_FILE")"
fi
Mir iwwerpréiwen de Service a schécken Alarmer wann néideg:
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
Als éischt ginn mir d'Variabel zou RESPONSE d'Resultat vun der Ausféierung vum Curl Kommando fir dëse Service.
Ausdrock EXIT_CODE=$? setzt d'Resultat vum leschte Kommando an eng Variabel, d.h. krullen. Wann et néideg ass eng Alarm ze schécken, gëtt d'Schabloun aus der entspriechender Datei gelies an un d'Empfänger geschéckt send_message.
De leschte Block veraarbecht den DAILY Parameter:
if test "$1" = "DAILY"; then
echo health-check "$MSMS_SERVICE_NAME" DAILY
MESSAGE="$(cat ../templates/daily.txt)"
MESSAGE=$(eval echo $MESSAGE)
send_message "$MESSAGE"
fiEt schéckt e Message deen d'Funktionalitéit vun der Iwwerwaachung selwer bestätegt.
Kréien eng Lëscht vun Benotzer IDen
Empfänger-setup.sh rifft den Telegram API fir déi lescht Messagen un de Bot adresséiert ze kréien:
curl -s https://api.telegram.org/bot$(cat telegram-api-key.txt)/getUpdates
| python recipients-setup.pyDëst benotzt Python Magie fir eng Lëscht schéin ze maachen. Dëst ass net néideg, Dir kënnt einfach déi gewënscht ID vum json huelen, deen de Kommando ausgitt:
torsocks curl -s https://api.telegram.org/bot$(cat telegram-api-key.txt)/getUpdatesKonklusioun
Sou kënnt Dir fäerdeg Scripte a Message Template benotzen, nëmmen iwwerwaachte Servicer a Lëschte fir Alarm astellen; Dir kënnt eng nei "Perséinlechkeet" fir de Bot schafen; oder Dir kënnt Är eegen Entscheedung baséieren op wat proposéiert gouf.
Optiounen fir weider Entwécklung proposéieren d'Konfiguratioun an d'Gestioun vun der Iwwerwaachung am Bot selwer, awer hei kënnt Dir net ouni Python maachen. Wann een et virun mir kritt, wësst Dir wou Dir d'Pull-Demande ofginn:)
Source: will.com



