
Иногда нужно быстро сделать мониторинг для нового сервиса, а готовой инфраструктуры/экспертизы под рукой нет. В этом гайде мы за полчаса реализуем инструмент для мониторинга любых веб-сервисов, используя только встроенные средства ubuntu: bash, cron и curl. Для доставки оповещений будем использовать telegram.
"కేక్ మీద చెర్రీ" అనేది వినియోగదారుల యొక్క భావోద్వేగ ప్రమేయం. వ్యక్తులపై పరీక్షించబడింది - ఇది పనిచేస్తుంది.
మేము టెలిమెడిసిన్ సర్వీస్ డాక్టర్ సమీపంలోని వినియోగదారుల ఒత్తిడి స్థాయిని గుర్తించడానికి చాట్బాట్ను సృష్టించినప్పుడు, మాకు పర్యవేక్షణ అవసరం. కొన్ని గంటల్లో, ఒక చిన్న-ప్రాజెక్ట్ సృష్టించబడింది, ఇది గొప్పగా పని చేయడమే కాకుండా, దాని సందేశాలతో సానుకూలతను కూడా జోడిస్తుంది.
ముందుగా, స్క్రిప్ట్లతో రిపోజిటరీని పొందండి:
git clone https://github.com/rshekhovtsov/msms.gitmsms ఫోల్డర్కి వెళ్లి, అందులో పని చేయండి.
టెలిగ్రామ్ బ్లాక్ చేయబడితే, ప్రాక్సీని ఉపయోగించండి. సరళమైన మరియు అత్యంత నమ్మదగిన ఎంపిక టోర్సాక్స్:
sudo apt install tor
sudo apt install torsocksఉదాహరణగా, google.com ప్రారంభ పేజీ యొక్క పర్యవేక్షణను మూడు దశల్లో సెటప్ చేద్దాం.
దశ 1. టెలిగ్రామ్లో బాట్ను సృష్టించండి మరియు వినియోగదారు ఐడిని పొందండి
- టెలిగ్రామ్లోని పరిచయాల కోసం శోధన పట్టీలో మేము వెతుకుతున్నాము :

- మేము దీన్ని ప్రారంభ బటన్తో ప్రారంభించాము, / newbot ఆదేశాన్ని నమోదు చేసి ప్రశ్నలకు సమాధానం ఇవ్వండి. వినియోగదారులకు ప్రదర్శించబడే బాట్ పేరు పేరు అని మీరు గుర్తుంచుకోవాలి మరియు వినియోగదారు పేరు ప్రత్యేకంగా ఉంటుంది మరియు తప్పనిసరిగా "bot"తో ముగుస్తుంది:

ఇతర విషయాలతోపాటు, బాట్ HTTP API కోసం రహస్య టోకెన్ను జారీ చేస్తుంది, ఇది తప్పనిసరిగా msms ఫోల్డర్లోని telegram-api-key.txt ఫైల్కి కాపీ చేయబడి సేవ్ చేయబడుతుంది. - మేము టెలిగ్రామ్ సెర్చ్ బార్లో మా బోట్ పేరును టైప్ చేసి దానిని ప్రారంభించాము.
- పూర్తి టచ్గా, మానిటరింగ్ హెచ్చరిక గ్రహీతల జాబితాకు మనల్ని మనం చేర్చుకుందాం:
sudo chmod +x ./recipients-setup.sh torsocks ./recipients-setup.shస్క్రిప్ట్ బోట్కి ఇటీవలి కాల్ల జాబితాను ప్రదర్శిస్తుంది; టెలిగ్రామ్లో మా ఐడి మరియు పేరుతో ఒక లైన్ ఉండాలి. మేము ఈ ఐడిని తీసుకొని, ఫైల్ సేవలు/google-recipients.txtలో సేవ్ చేస్తాము. ఫైల్ ఫార్మాట్: ప్రతి పంక్తి ఒక ఐడి. ఉదాహరణ:
123456789 987654321
కొత్త గ్రహీతను జోడించడానికి, మీరు టెలిగ్రామ్లో బోట్ను ప్రారంభించమని, recipients-setup.shని అమలు చేయమని మరియు ఫైల్కి idని జోడించమని మీరు అతనిని అడగాలి.
STEP 2. పర్యవేక్షణను సెటప్ చేయండి
సేవల ఫోల్డర్లో ini ఫైల్ను సృష్టించడం ద్వారా సేవ వివరించబడింది. మీరు ఐదు పారామితులను సెట్ చేయాలి:
- MSMS_SERVICE_NAME: సేవ పేరు - హెచ్చరికలు మరియు పర్యవేక్షణ లాగ్లో ఉపయోగించబడుతుంది.
- MSMS_SERVICE_ENDPOINT: మేము కర్ల్తో సంప్రదించే సేవ యొక్క ముగింపు స్థానం.
- MSMS_CURL_PARAMS: అదనపు కర్ల్ ఎంపికలు, దిగువ ఉదాహరణను చూడండి.
- MSMS_EXPECTED: సేవ నుండి ఆశించిన ప్రతిస్పందన. సమాధానం చిన్నగా ఉంటే ఉపయోగించబడుతుంది.
- MSMS_EXPECTED_FILE: ఆశించిన సేవా ప్రతిస్పందనతో ఫైల్ పేరు. పేర్కొన్నట్లయితే, MSMS_EXPECTEDని ఓవర్రైట్ చేస్తుంది.
- MSMS_RECIPIENTS: నోటిఫికేషన్ గ్రహీతల జాబితాతో ఫైల్.
google.comకి చేసిన అభ్యర్థన దారిమార్పుతో స్థిర htmlని అందిస్తుంది, మేము దీనిని ఆశించిన సర్వర్ ప్రతిస్పందనగా ఉపయోగిస్తాము:
curl google.com > services/google-response.htmlసేవలు/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 మీరు కర్ల్ చేయగలిగిన ప్రతిదాన్ని సెట్ చేయవచ్చు, వీటితో సహా:
- కన్సోల్ మరియు లాగ్ను చిందరవందర చేయడాన్ని నివారించడానికి కర్ల్ సందేశాలను నిలిపివేయండి:
-s - తనిఖీ చేయబడిన సేవతో కనెక్షన్ గడువును సెట్ చేయండి (సెకన్లలో):
--connect-timeout 3 - ప్రతిస్పందన గడువును సెట్ చేయండి:
-m 7 - SSL కోసం సర్టిఫికేట్ ధృవీకరణను నిలిపివేయండి (ఉదాహరణకు, మీరు స్వీయ సంతకం చేసిన ప్రమాణపత్రాన్ని ఉపయోగిస్తుంటే):
--insecure - http అభ్యర్థన రకాన్ని పేర్కొనండి:
-X POST - శీర్షికలను పేర్కొనండి:
-H "Content-Type: application/json" - అభ్యర్థన బాడీని స్ట్రింగ్ లేదా ఫైల్గా పేర్కొనండి. ఫైల్ కోసం ఉదాహరణ:
-d @request.json
మేము నోటిఫికేషన్లను నిలిపివేసాము మరియు గడువులను 3 సెకన్లకు సెట్ చేసాము. కనెక్ట్ చేయడానికి మరియు 7 సె. సేవా ప్రతిస్పందనను స్వీకరించడానికి.
హెచ్చరిక: ఉదాహరణలో వలె ఒకే కోట్లలో పారామీటర్ విలువలను పేర్కొనండి. దురదృష్టవశాత్తూ, ఈ కోణంలో బాష్ చాలా పెళుసుగా ఉంటుంది మరియు తప్పు కొటేషన్ గుర్తుతో ప్రమాదవశాత్తు సీతాకోకచిలుక రోగనిర్ధారణ కష్టతరమైన లోపాలతో విశ్వం యొక్క మరణానికి దారి తీస్తుంది.
పర్యవేక్షణ ఏర్పాటు చేశాం. ప్రతిదీ సరిగ్గా ఉందో లేదో తనిఖీ చేద్దాం:
sudo chmod +x ./monitoring.sh
torsocks ./monitoring.shస్క్రిప్ట్ ఇలాంటి సందేశాన్ని ప్రదర్శించాలి:
2020-01-10 12:14:31
health-check "google front page": OKSTEP 3. షెడ్యూల్ని సెటప్ చేయడం
క్రాన్లో మానిటరింగ్ షెడ్యూల్ని సెటప్ చేద్దాం:
sudo crontab -eప్రతి నిమిషం google.comని తనిఖీ చేయడానికి ఒక పంక్తిని జోడిద్దాం:
*/1 * * * * torsocks <ПУТЬ К ПАПКЕ РЕПОЗИТОРИЯ>/monitoring.sh >> <ПУТЬ К ПАПКЕ РЕПОЗИТОРИЯ>/monitoring.log 2>&1మేము ప్రతిరోజూ ఉదయం 11.00:XNUMX గంటలకు పర్యవేక్షణ యొక్క కార్యాచరణను నిర్ధారిస్తూ హెచ్చరికను జోడిస్తాము. దీన్ని చేయడానికి, మేము స్క్రిప్ట్కు రోజువారీ పరామితిని పాస్ చేస్తాము:
0 11 * * * torsocks <ПУТЬ К ПАПКЕ РЕПОЗИТОРИЯ>/monitoring.sh DAILY >> <ПУТЬ К ПАПКЕ РЕПОЗИТОРИЯ>/monitoring.log 2>&1
2>&1 - ప్రధాన అవుట్పుట్ స్ట్రీమ్కు లోపాలను దారి మళ్లించే ప్రామాణిక సాంకేతికత. ఫలితంగా, అవి పర్యవేక్షణ లాగ్లో కూడా ముగుస్తాయి.
మార్పులను సేవ్ చేద్దాం మరియు కమాండ్తో వాటిని ఎంచుకుందాం:
sudo service cron reloadమీరు క్రాన్ సెటప్ చేయడం గురించి మరింత చదువుకోవచ్చు, ఉదాహరణకు, .
అందువలన, ప్రతి నిమిషం ఒక పర్యవేక్షణ స్క్రిప్ట్ ప్రారంభించబడుతుంది, ఇది కర్ల్ ద్వారా google.comని సంప్రదిస్తుంది. స్వీకరించిన ప్రతిస్పందన ఊహించిన దాని నుండి భిన్నంగా ఉంటే, స్క్రిప్ట్ గ్రహీతల జాబితాకు టెలిగ్రామ్ నోటిఫికేషన్ను పంపుతుంది. ఆడిట్ లాగ్ ఫైల్ monitoring.logలో ఉంచబడుతుంది
మేము మరొక సేవను జోడించాల్సిన అవసరం ఉన్నట్లయితే, మేము సేవల ఫోల్డర్లో దాని కోసం కొత్త ini ఫైల్ను సృష్టిస్తాము మరియు అవసరమైతే, గ్రహీతల యొక్క ప్రత్యేక జాబితాను సృష్టించండి. మిగతావన్నీ స్వయంచాలకంగా పని చేస్తాయి.
తనిఖీ చేయబడిన సేవ అందుబాటులో లేకుంటే, ప్రతి నిమిషం హెచ్చరిక పంపబడుతుంది. మీరు సేవను త్వరగా పునరుద్ధరించలేకపోతే, మీరు బోట్ యొక్క టెలిగ్రామ్ లక్షణాలలో నోటిఫికేషన్లను తాత్కాలికంగా నిలిపివేయవచ్చు.
ఇప్పుడు అదనపు ఫీచర్లు మరియు స్క్రిప్ట్ల అమలును నిశితంగా పరిశీలిద్దాం.
సందేశ నమూనాలు మరియు భావోద్వేగ నిశ్చితార్థం
బాట్తో కమ్యూనికేషన్ను మరింత చురుగ్గా చేయడానికి, మేము దానికి Manechka అని పేరు పెట్టాము, తగిన అవతార్ చిత్రాన్ని జోడించాము మరియు సందేశ వచనాలను రూపొందించడానికి ప్రొఫెషనల్ PR నిపుణులను నియమించాము. మీరు మా అనుభవాన్ని ఉపయోగించుకోవచ్చు లేదా మీ అభిరుచికి అనుగుణంగా మార్చుకోవచ్చు.
ఉదాహరణకు ఇలా:

లేదా ఇలా కూడా:

ఎందుకు కాదు?
బోట్ పేరు మరియు అవతార్ దీని ద్వారా సెట్ చేయబడ్డాయి .
సందేశ టెంప్లేట్లు ఫోల్డర్లో ఉన్నాయి టెంప్లేట్లు:
- curl-fail.txt: కర్ల్ సున్నా కాని ఎర్రర్ కోడ్ని అందించినప్పుడు సందేశం పంపబడుతుంది. సాధారణంగా ఇది సేవను చేరుకోవడం అసంభవం గురించి మాట్లాడుతుంది.
- daily.txt: సేవా పర్యవేక్షణ పనిచేస్తోందని నిర్ధారిస్తూ రోజువారీ సందేశం.
- service-fail.txt: సేవా ప్రతిస్పందన ఊహించిన దానికి భిన్నంగా ఉన్నప్పుడు పంపిన సందేశం.
ఉదాహరణగా అంతర్నిర్మిత సందేశ టెంప్లేట్లను ఉపయోగించి అనుకూలీకరణ ఎంపికలను చూద్దాం.
టెంప్లేట్లు ఎమోజీని ఉపయోగిస్తాయి. దురదృష్టవశాత్తు, habr వాటిని ప్రదర్శించదు.
ఎమోజీని ఎంచుకోవడానికి, శోధనను ఉపయోగించడం సౌకర్యంగా ఉంటుంది :

మీరు టెంప్లేట్ టెక్స్ట్లో తగిన చిహ్నాన్ని కాపీ చేసి అతికించండి (ఇది సాధారణ యూనికోడ్).
- curl-fail.txt:
Котёнок, помоги мне... Не могу достучаться до сервиса "$MSMS_SERVICE_NAME" `CURL EXIT CODE: $EXIT_CODE`మేము పేర్కొన్న సేవ పేరును ఉపయోగించాము (వేరియబుల్
MSMS_SERVICE_NAME) మరియు కర్ల్ ఎగ్జిట్ కోడ్తో అంతర్గత స్క్రిప్ట్ వేరియబుల్ (EXIT_CODE) మేము మార్కప్ ఉపయోగించి సందేశాన్ని కూడా ఫార్మాట్ చేసాము : "`" అక్షరాలు స్థిర-వెడల్పు వచనాన్ని చుట్టుముట్టాయి. కోట్లు మరియు అపాస్ట్రోఫీలు బాష్ చిహ్నాలు కాబట్టి, మేము వాటిని ""తో తప్పించుకుంటాము. వేరియబుల్ పేర్లకు ముందు "$" గుర్తు ఉంటుంది.ఫలితంగా:

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

ఇక్కడ మనం మరొక స్క్రిప్ట్ వేరియబుల్ ఉపయోగిస్తాము:RESPONSE. ఇది సేవా ప్రతిస్పందనను కలిగి ఉంటుంది. - daily.txt:
Малыш, привет! У меня всё хорошо, cлежу за сервисом: "$MSMS_SERVICE_NAME" каждую минутку... А как у тебя дела?ఫలితంగా:

స్క్రిప్ట్ల అమలుకు వెళ్దాం.
మానిటరింగ్ స్క్రిప్ట్
పర్యవేక్షణ.sh ఒక సాధారణ స్వీయ-ఆవిష్కరణ చేస్తుంది - ఇది సేవల ఫోల్డర్ నుండి అన్ని ini ఫైల్లను తీసుకుంటుంది మరియు ప్రతి దాని కోసం హెచ్చరికలను తనిఖీ చేయడానికి మరియు పంపడానికి లాజిక్తో ప్రధాన స్క్రిప్ట్ను అమలు చేస్తుంది:
#!/bin/bash
cd $(dirname "$0")/services
for service_ini in $(ls *.ini); do
bash ../msms.sh "$1" "$service_ini"
doneపర్యవేక్షణ స్థితి గురించి రోజువారీ సందేశాన్ని రూపొందించడానికి, మీరు స్క్రిప్ట్కి DAILY పరామితిని పంపవచ్చు.
స్క్రిప్ట్ ప్రారంభమైనప్పుడు, ప్రస్తుత ఫోల్డర్ సేవలకు మారుతుందని దయచేసి గమనించండి. ini ఫైల్లలో సేవలకు సంబంధించి ఫైల్ పాత్లను పేర్కొనడానికి ఇది మిమ్మల్ని అనుమతిస్తుంది.
నోటిఫికేషన్లను తనిఖీ చేయడం మరియు పంపడం కోసం స్క్రిప్ట్
msms.sh సేవను తనిఖీ చేయడానికి మరియు హెచ్చరికలను పంపడానికి ప్రధాన తర్కాన్ని కలిగి ఉంటుంది.
టెలిగ్రామ్తో పని చేయడం:
# 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
}
మేము ఫైల్లో సేవ్ చేసిన రహస్య కీని ఉపయోగించి టెలిగ్రామ్ REST APIని యాక్సెస్ చేయడానికి URLని రూపొందిస్తాము.
send_message ఫంక్షన్ ఈ REST APIకి సందేశాలను పంపడానికి కర్ల్ని ఉపయోగిస్తుంది, మేము iniలో పేర్కొన్న ఫైల్ నుండి స్వీకర్త idలను తీసుకుంటుంది. మేము పంపే డేటాలో, మేము సందేశ మార్కప్ని ఉపయోగిస్తామని సూచిస్తాము: parse_mode="Markdown".
ప్రస్తుత తేదీ మరియు సమయాన్ని ప్రదర్శించి, ini ఫైల్ను లోడ్ చేద్దాం.
echo $(date '+%Y-%m-%d %H:%M:%S')
# load variables from .ini file:
. $2
మేజిక్ స్ట్రింగ్ . $2 ఇన్పుట్కి పంపబడిన ini ఫైల్ను రెండవ పారామీటర్గా సాధారణ స్క్రిప్ట్గా అమలు చేస్తుంది, దానిలో పేర్కొన్న విలువలను ఎన్విరాన్మెంట్ వేరియబుల్స్లో నమోదు చేస్తుంది.
పరామితి పేర్కొనబడితే ఫైల్ నుండి ఆశించిన ప్రతిస్పందనను లోడ్ చేయండి MSMS_EXPECTED_FILE:
if [ -n "$MSMS_EXPECTED_FILE" ]; then
MSMS_EXPECTED="$(cat "$MSMS_EXPECTED_FILE")"
fi
మేము సేవను తనిఖీ చేస్తాము మరియు అవసరమైతే హెచ్చరికలను పంపుతాము:
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
మొదట మనం వేరియబుల్కు కేటాయిస్తాము RESPONSE ఈ సేవ కోసం కర్ల్ కమాండ్ని అమలు చేయడం వల్ల ఫలితం.
వ్యక్తీకరణ EXIT_CODE=$? చివరి ఆదేశం యొక్క ఫలితాన్ని వేరియబుల్లో ఉంచుతుంది, అనగా. కర్ల్. హెచ్చరికను పంపాల్సిన అవసరం ఉన్నట్లయితే, టెంప్లేట్ సంబంధిత ఫైల్ నుండి చదవబడుతుంది మరియు ఉపయోగించి గ్రహీతలకు పంపబడుతుంది send_message.
చివరి బ్లాక్ రోజువారీ పరామితిని ప్రాసెస్ చేస్తుంది:
if test "$1" = "DAILY"; then
echo health-check "$MSMS_SERVICE_NAME" DAILY
MESSAGE="$(cat ../templates/daily.txt)"
MESSAGE=$(eval echo $MESSAGE)
send_message "$MESSAGE"
fiఇది పర్యవేక్షణ యొక్క కార్యాచరణను నిర్ధారిస్తూ సందేశాన్ని పంపుతుంది.
వినియోగదారు IDల జాబితాను పొందడం
గ్రహీతలు-setup.sh బోట్కు సంబంధించిన తాజా సందేశాలను పొందడానికి టెలిగ్రామ్ APIకి కాల్ చేస్తుంది:
curl -s https://api.telegram.org/bot$(cat telegram-api-key.txt)/getUpdates
| python recipients-setup.pyఇది జాబితాను అందంగా ప్రదర్శించడానికి పైథాన్ మాయాజాలాన్ని ఉపయోగిస్తుంది. ఇది అవసరం లేదు, మీరు json నుండి కావలసిన ఐడిని తీసుకోవచ్చు, ఇది కమాండ్ అవుట్పుట్ చేస్తుంది:
torsocks curl -s https://api.telegram.org/bot$(cat telegram-api-key.txt)/getUpdatesతీర్మానం
అందువలన, మీరు రెడీమేడ్ స్క్రిప్ట్లు మరియు సందేశ టెంప్లేట్లను ఉపయోగించవచ్చు, మానిటర్ చేయబడిన సేవలు మరియు హెచ్చరికల కోసం జాబితాలను మాత్రమే సెటప్ చేయవచ్చు; మీరు బాట్ కోసం కొత్త "వ్యక్తిత్వం"ని సృష్టించవచ్చు; లేదా ప్రతిపాదించిన దాని ఆధారంగా మీరు మీ స్వంత నిర్ణయం తీసుకోవచ్చు.
తదుపరి అభివృద్ధి కోసం ఎంపికలు బోట్లోనే పర్యవేక్షణను కాన్ఫిగర్ చేయడం మరియు నిర్వహించడం వంటివి సూచిస్తున్నాయి, అయితే ఇక్కడ మీరు పైథాన్ లేకుండా చేయలేరు. నా ముందు ఎవరైనా దాన్ని పొందినట్లయితే, పుల్ అభ్యర్థనను ఎక్కడ సమర్పించాలో మీకు తెలుసు :)
మూలం: www.habr.com



