
Joskus uuden palvelun valvonta on otettava nopeasti käyttöön, mutta sinulla ei ole tarvittavaa infrastruktuuria tai asiantuntemusta käytettävissäsi. Tässä oppaassa toteutamme työkalun minkä tahansa verkkopalvelun valvontaan puolessa tunnissa käyttämällä vain sisäänrakennettuja työkaluja. ubuntu: bash, cron ja curl. Käytämme Telegramia ilmoitusten toimittamiseen.
"Kirsikka kakun päällä" on käyttäjien emotionaalinen osallistuminen. Testattu ihmisillä - se toimii.
Kun me telelääketieteessä Doctor Nearbyssä loimme chatbotin määrittämään käyttäjien stressitasoa, tarvitsimme seurantaa. Parissa tunnissa syntyi miniprojekti, joka ei vain toimi loistavasti, vaan lisää myös positiivisuutta viesteillään.
Ensin hankitaan arkisto skripteillä:
git clone https://github.com/rshekhovtsov/msms.gitMene msms-kansioon ja työskentele siinä.
Jos sähke on estetty, käytä välityspalvelinta. Yksinkertaisin ja luotettavin vaihtoehto on torsukat:
sudo apt install tor
sudo apt install torsocksAsetetaan esimerkiksi google.com-aloitussivun valvonta kolmessa vaiheessa.
VAIHE 1. Luo botti sähkeessä ja hanki käyttäjätunnus
- Etsimme sähkeen yhteystietojen hakupalkista :

- Käynnistämme sen Käynnistä-painikkeella, annamme /newbot-komennon ja vastaamme kysymyksiin. Sinun on pidettävä mielessä, että nimi on käyttäjille näytettävän botin nimi, ja käyttäjätunnus on yksilöllinen ja sen lopussa on oltava "bot":

Botti antaa muun muassa HTTP API:lle salaisen tunnuksen, joka on kopioitava ja tallennettava msms-kansion telegram-api-key.txt-tiedostoon. - Kirjoitamme bottimme nimen sähkehakupalkkiin ja käynnistämme sen.
- Viimeisenä silauksena lisätään itsemme valvontahälytysten vastaanottajien luetteloon:
sudo chmod +x ./recipients-setup.sh torsocks ./recipients-setup.shSkripti näyttää luettelon viimeaikaisista botille soitetuista kutsuista; sähkeessä tulee olla yksi rivi tunnuksellamme ja nimellämme. Otamme tämän tunnuksen ja tallennamme sen tiedostoon services/google-recipients.txt. Tiedostomuoto: jokainen rivi on yksi tunnus. Esimerkki:
123456789 987654321
Jos haluat lisätä uuden vastaanottajan, sinun on pyydettävä häntä käynnistämään botti sähkeessä, suorittamaan recipients-setup.sh ja lisäämään tunnus tiedostoon.
VAIHE 2. Määritä valvonta
Palvelu kuvataan luomalla ini-tiedosto Services-kansioon. Sinun on asetettava viisi parametria:
- MSMS_SERVICE_NAME: palvelun nimi - käytetään hälytyksissä ja valvontalokissa.
- MSMS_SERVICE_ENDPOINT: palvelun päätepiste, johon otamme yhteyttä curlilla.
- MSMS_CURL_PARAMS: lisää kiharavaihtoehtoja, katso esimerkki alla.
- MSMS_EXPECTED: palvelun odotettu vastaus. Käytetään, jos vastaus on lyhyt.
- MSMS_EXPECTED_FILE: tiedoston nimi, joka sisältää odotetun palveluvasteen. Jos määritetty, korvaa MSMS_EXPECTED.
- MSMS_RECIPIENTS: tiedosto, jossa on luettelo ilmoituksen vastaanottajista.
Pyyntö google.comille palauttaa kiinteän html:n uudelleenohjauksella, käytämme sitä odotettuna palvelimen vastauksena:
curl google.com > services/google-response.htmlLuodaan tiedosto 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 voit asettaa kaiken, mitä curl voi tehdä, mukaan lukien:
- Poista curl-viestit käytöstä välttääksesi konsolin ja lokin sotkumisen:
-s - Aseta yhteyden aikakatkaisu tarkistettavan palvelun kanssa (sekunneissa):
--connect-timeout 3 - Aseta vastausaikakatkaisu:
-m 7 - Poista SSL-varmenteen vahvistus käytöstä (jos käytät esimerkiksi itse allekirjoitettua varmennetta):
--insecure - Määritä http-pyynnön tyyppi:
-X POST - Määritä otsikot:
-H "Content-Type: application/json" - Määritä pyynnön runko merkkijonona tai tiedostona. Esimerkki tiedostosta:
-d @request.json
Poistimme ilmoitukset käytöstä ja asetimme aikakatkaisuksi 3 sekuntia. yhteyden muodostamiseen ja 7 sek. saada palveluvastaus.
Huomio: Määritä parametriarvot lainausmerkeissä, kuten esimerkissä. Valitettavasti bash on tässä mielessä varsin hauras, ja vahingossa sattunut perhonen väärällä lainausmerkillä voi johtaa maailmankaikkeuden kuolemaan vaikeasti diagnosoitavilla virheillä.
Olemme perustaneet seurannan. Tarkistetaan, että kaikki on kunnossa:
sudo chmod +x ./monitoring.sh
torsocks ./monitoring.shSkriptin pitäisi näyttää seuraavanlainen viesti:
2020-01-10 12:14:31
health-check "google front page": OKVAIHE 3. Aikataulun määrittäminen
Asetetaan tarkkailuaikataulu cronissa:
sudo crontab -eLisätään rivi tarkistaaksesi google.comin minuutin välein:
*/1 * * * * torsocks <ПУТЬ К ПАПКЕ РЕПОЗИТОРИЯ>/monitoring.sh >> <ПУТЬ К ПАПКЕ РЕПОЗИТОРИЯ>/monitoring.log 2>&1Lisäämme joka päivä kello 11.00:XNUMX varoituksen itse valvonnan toimivuudesta. Tätä varten välitämme DAILY-parametrin skriptille:
0 11 * * * torsocks <ПУТЬ К ПАПКЕ РЕПОЗИТОРИЯ>/monitoring.sh DAILY >> <ПУТЬ К ПАПКЕ РЕПОЗИТОРИЯ>/monitoring.log 2>&1
2>&1 - vakiotekniikka, joka ohjaa virheet päätulostusvirtaan. Tämän seurauksena ne päätyvät myös seurantalokiin.
Tallennetaan muutokset ja nostetaan ne komennolla:
sudo service cron reloadVoit lukea lisää cronin asettamisesta mm. .
Siten joka minuutti käynnistetään valvontaskripti, joka ottaa yhteyttä google.comiin curlin kautta. Jos saatu vastaus poikkeaa odotetusta, skripti lähettää sähkeilmoituksen vastaanottajaluetteloon. Tarkastusloki säilytetään tiedostossa monitoring.log
Jos meidän on lisättävä toinen palvelu, luomme sille vain uuden ini-tiedoston Services-kansioon ja tarvittaessa luomme erillisen vastaanottajaluettelon. Kaikki muu toimii automaattisesti.
Jos tarkistettava palvelu ei ole käytettävissä, lähetetään hälytys minuutin välein. Jos et voi palauttaa palvelua nopeasti, voit tilapäisesti poistaa ilmoitukset käytöstä botin sähkeominaisuuksissa.
Katsotaanpa nyt lähemmin komentosarjojen lisäominaisuuksia ja toteutusta.
Viestimallit ja emotionaalinen sitoutuminen
Jotta kommunikointi botin kanssa olisi vilkkaampaa, annoimme sille nimeksi Manechka, lisäsimme sopivan avatar-kuvan ja palkkasimme ammattimaisia PR-asiantuntijoita luomaan viestitekstejä. Voit käyttää kokemustamme tai muuttaa sitä makusi mukaan.
Esimerkiksi:

tai vaikka näin:

Miksi ei?
Botin nimi ja avatar asetetaan kautta .
Viestimallit ovat kansiossa malleja:
- curl-fail.txt: viesti lähetetään, kun curl palauttaa nollasta poikkeavan virhekoodin. Yleensä se puhuu mahdottomuudesta tavoittaa palvelua.
- daily.txt: Päivittäinen viesti, joka vahvistaa, että palvelun valvonta toimii.
- service-fail.txt: Viesti, joka lähetetään, kun palvelun vastaus poikkeaa odotetusta.
Katsotaanpa mukautusvaihtoehtoja käyttämällä esimerkkinä sisäänrakennettuja viestimalleja.
Malleissa käytetään emojia. Valitettavasti habr ei näytä niitä.
Emojin valitsemiseen on kätevää käyttää hakua :

Kopioi ja liitä sopiva symboli mallitekstiin (tämä on tavallinen unicode).
- curl-fail.txt:
Котёнок, помоги мне... Не могу достучаться до сервиса "$MSMS_SERVICE_NAME" `CURL EXIT CODE: $EXIT_CODE`Käytimme määrittämäämme palvelun nimeä (muuttuja
MSMS_SERVICE_NAME) ja sisäinen komentosarjamuuttuja curl-poistumiskoodilla (EXIT_CODE). Muotoilimme viestin myös merkintöjen avulla : "`" -merkit ympäröivät kiinteäleveää tekstiä. Koska lainausmerkit ja heittomerkit ovat bash-symboleja, vältämme ne "". Muuttujien nimien edessä on "$"-merkki.Результат:

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

Tässä käytämme toista komentosarjamuuttujaa:RESPONSE. Se sisältää palvelun vastauksen. - daily.txt:
Малыш, привет! У меня всё хорошо, cлежу за сервисом: "$MSMS_SERVICE_NAME" каждую минутку... А как у тебя дела?Результат:

Siirrytään skriptien toteuttamiseen.
Valvontaskripti
monitorointi.sh tekee yksinkertaisen automaattisen haun - se ottaa kaikki ini-tiedostot palvelut-kansiosta ja suorittaa jokaiselle pääkomentosarjan hälytysten tarkistamisen ja lähettämisen logiikalla:
#!/bin/bash
cd $(dirname "$0")/services
for service_ini in $(ls *.ini); do
bash ../msms.sh "$1" "$service_ini"
doneVoit luoda päivittäisen viestin valvontatilasta välittämällä DAILY-parametrin komentosarjalle.
Huomaa, että kun komentosarja käynnistyy, nykyinen kansio muuttuu palveluiksi. Tämän avulla voit määrittää tiedostopolut suhteessa palveluihin ini-tiedostoissa.
Skripti ilmoitusten tarkistamiseen ja lähettämiseen
msms.sh sisältää päälogiikan palvelun tarkistamiseen ja hälytysten lähettämiseen.
Työskentely sähkeen kanssa:
# 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
}
Luomme URL-osoitteen päästäksemme telegram REST API -liittymään käyttämällä tiedostoon tallennettua salaista avainta.
Send_message-funktio käyttää curl-toimintoa viestien lähettämiseen tälle REST API:lle ja ottaa vastaanottajan tunnukset tiedostosta, jonka määritimme ini:ssä. Ilmoitamme lähettämissämme tiedoissa, että käytämme viestimerkintää: parse_mode="Markdown".
Näytetään nykyinen päivämäärä ja aika ja ladataan ini-tiedosto.
echo $(date '+%Y-%m-%d %H:%M:%S')
# load variables from .ini file:
. $2
Maaginen merkkijono . $2 suorittaa tuloon toisena parametrina välitetyn ini-tiedoston tavallisena komentosarjana syöttäen siinä määritetyt arvot ympäristömuuttujiin.
Lataa odotettu vastaus tiedostosta, jos parametri on määritetty MSMS_EXPECTED_FILE:
if [ -n "$MSMS_EXPECTED_FILE" ]; then
MSMS_EXPECTED="$(cat "$MSMS_EXPECTED_FILE")"
fi
Tarkistamme palvelun ja lähetämme tarvittaessa hälytyksiä:
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
Ensin määritetään muuttuja RESPONSE tämän palvelun curl-komennon suorittamisen tulos.
ilme EXIT_CODE=$? laittaa viimeisen komennon tuloksen muuttujaan, ts. kiemura. Jos on tarpeen lähettää hälytys, malli luetaan vastaavasta tiedostosta ja lähetetään vastaanottajille käyttämällä send_message.
Viimeinen lohko käsittelee DAILY-parametrin:
if test "$1" = "DAILY"; then
echo health-check "$MSMS_SERVICE_NAME" DAILY
MESSAGE="$(cat ../templates/daily.txt)"
MESSAGE=$(eval echo $MESSAGE)
send_message "$MESSAGE"
fiSe lähettää viestin, joka vahvistaa itse valvonnan toimivuuden.
Haetaan luettelo käyttäjätunnuksista
recipients-setup.sh kutsuu telegram-sovellusliittymää saadakseen viimeisimmät viestit, jotka on osoitettu botille:
curl -s https://api.telegram.org/bot$(cat telegram-api-key.txt)/getUpdates
| python recipients-setup.pyTämä näyttää luettelon kauniisti python-magian avulla. Tämä ei ole välttämätöntä, voit yksinkertaisesti ottaa halutun tunnuksen jsonista, jonka komento tulostaa:
torsocks curl -s https://api.telegram.org/bot$(cat telegram-api-key.txt)/getUpdatesJohtopäätös
Siten voit käyttää valmiita komentosarjoja ja viestipohjia määrittämällä vain valvottuja palveluita ja luetteloita hälytyksille; voit luoda uuden "persoonallisuuden" bottiin; tai voit tehdä oman päätöksen ehdotetun perusteella.
Jatkokehitysvaihtoehdot ehdottavat valvonnan määrittämistä ja hallintaa itse bottiin, mutta täällä et tule toimeen ilman pythonia. Jos joku saa sen ennen minua, tiedät mihin vetopyyntö tulee lähettää :)
Lähde: will.com



