opened image

Телеграм боты арқылы қашықтағы хосттарды мониторинг жасау үшін қалай жасауға болады

Серверлерді немесе желілік құрылғыларды мониторингтеу үшін көптеген бағдарламалық шешімдер бар, олардың көпшілігі сервер ресурстарын орналастыру және конфигурациялау бойынша білімді талап етеді. Бірақ егер сізде бір немесе бірнеше сервер немесе ақ* IP бар маршрутизатор болса, сервердің немесе маршрутизатордың қолжетімділігін тексеру үшін күрделі мониторинг құрылымын орналастырудың қажеті жоқ. Сізге тек тексерілетін IP қолжетімсіз (down) болғанда және қайтадан қолжетімді (up) болғанда сізге телеграмда хабарлама жіберетін қарапайым телеграм боты жасау жеткілікті. Бот 24/7 виртуалды серверде Linux операциялық жүйесінің басқаруымен жұмыс істейді, ресурстарға минималды жүктемемен.
* ақ IP адрес  - бұл интернеттен қолжетімді құрылғыға немесе серверге берілген бірегей IP адрес. Мұндай IP қоғамдық болып табылады.

Не істеу керек:
1. Telegram-да бот және жеке арна жасау, оған ботты қосу. Арнаға мониторингті бақылауға болатын адамдарды шақыра аласыз 
2. Серверде python3 орнату. Бұл мақалада біз ботты Ubuntu 20.04 операциялық жүйесінде виртуалды серверде орналастыруды қарастырамыз (python3 пакетін орнатуға болатын кез келген операциялық жүйеде орналастыруға болады)
3. Скрипт-файл жасау, оған хосттардың (серверлердің немесе маршрутизаторлардың) IP-адрестерін жазу, мониторинг кезеңін орнату және скриптті 24/7 режимінде іске қосу.

Осыны орындауға кірісейік.

1. Жаңа телеграм ботының тіркелуі үшін Telegram қосымшасында @BotFather бот-сервисін тауып, оған жаңа ботты тіркеу командасын жіберу керек
/newbot
Кейін @BotFather біздің ботымызға атау сұрайды. Атауда шектеулер жоқ, мысалы, енгіземіз:
IP мониторинг

Енді Telegram жүйесінде боттың бірегей атын енгізу қажет. Боттың атауы _bot-қа аяқталуы керек. Мысалы, атайық
ip_monitoring_super_bot

Одан кейін, @BotFather бізге ботты басқару үшін TOKEN береді. TOKEN-ды сақтау керек, себебі ол бізге кейінірек қажет болады.

Телеграм боты тіркелді.

Енді біздің жаңа @ip_monitoring_super_bot ботымыз хабарламаларды жіберетін жеке арна жасайық.

Ол үшін Telegram бағдарламасының чат терезесінде жаңа хабарлама жасау белгішесін басып, New chanel - Create chanel - арнаға атау ойлап табамыз (мысалы, IP мониторинг арнасы) - арна түрін Private таңдап, @ip_monitoring_super_bot ботын қосамыз.


Нәтижесінде біз @ip_monitoring_super_bot боты мониторингтегі жабдықтың күйі туралы хабарламаларды жіберетін жеке арна аламыз. Сондай-ақ, бұл арнаға арнайы сілтеме арқылы кез келген телеграм пайдаланушысын шақыруға болады.
Арнадағы IP мониторинг арнасының қасиеттерінде @ip_monitoring_super_bot боты арна әкімшісі ретінде қосылғанын тексеру керек. Арнаның қасиеттеріне өту үшін арнаның атын басу жеткілікті.

Сондай-ақ, бізге chat_id мәні қажет. Ол үшін:
 - @ip_monitoring_super_bot ботының чатына өтіп, /start хабарламасын жіберу керек (бұл ботты іске қосады)
 - IP мониторинг арнасында тесттік хабарлама (кез келген) жіберу керек
 - браузерде https://api.telegram.org/botTOKEN/getUpdates сілтемесіне өту керек
Біздің мысалымызда сілтеме мынадай болады:
https://api.telegram.org/bot5921115541:AAHltzyZpC_MBZzydhrOD_Brn8lnKNf7XXX/getUpdates
Экрандағы нәтиже мынадай болады:
Енді ботты басқару үшін 2 маңызды мәнді есте сақтайық:
token= 5921115541:AAHltzyZpC_MBZzydhrOD_Brn8lnKNf7XXX
chat_id = -100185915XXX

2. Серверге SSH арқылы қосыламыз (бұл қалай жасалады)

python3 орнатылғанын тексереміз:
python3 --version

Егер python3 орнатылмаса (қате: -bash: python3: command not found), оны орнату керек:
- Ubuntu үшін:
apt install python3 -y
- CentOS үшін:
yum install python3 -y
Қосымша requests модулін орнатамыз:
pip3 install requests

Орнатудан кейін тағы да нұсқаны тексеруге болады. Мүмкін, былай болуы мүмкін:

python3-ті орнату туралы толығырақ: Ubuntu 20.04-те Python 3.10-ды қалай орнатуға болады

3. Мониторинг скрипті орналастырылатын папка жасаймыз. Ол үшін команданы орындаймыз:
cd && mkdir pingmonitor && cd pingmonitor

Файлды жасаймыз және ашамыз:
vim main.py

және оған скрипт орналастырамыз:

#----------------------------------------------------
import os
import requests
import time
#-------------------------
hostname = ['8.8.8.8','1.1.1.1']
time_pause = 30
#-------------------------
def SendMsgToTelegramChanel(msg):
    token="TOKEN"
    chat_id = 'CHAT_ID'
    params = {'chat_id': chat_id,'text': msg}
    response = requests.get('https://api.telegram.org/bot'+token+'/sendMessage', params=params)
def IsHostAlive(host):
    ret = os.system('ping -c 2 {} > /dev/null'.format(host))
    if ret == 0:
        return True
    return False
while True:
    for i in range(len(hostname)):
        file_signal = hostname[i] +'_down'
        if IsHostAlive(hostname[i]):
            if os.path.isfile(file_signal):
               os.remove(file_signal)
               SendMsgToTelegramChanel(hostname[i] + ' is up')
               #print(hostname + ' is up!')
        else:
            if not os.path.isfile(file_signal):
                open(file_signal,'tw').close()
                SendMsgToTelegramChanel(hostname[i] + ' is down')
                #print(hostname + ' is down!')
    time.sleep(time_pause)
#------------------------------------------------

- скриптте TOKEN және CHAT_ID-ны бұрын сақталған token және chat_id мәндеріне ауыстыру керек.
- hostname = ['8.8.8.8','1.1.1.1'] жолында 8.8.8.8 және 1.1.1.1 IP-адрестерін (немесе хост атын) мониторингтеуге қажетті сервердің немесе маршрутизатордың IP-адресін көрсету керек*. Құрылғылардың IP-адрестерін біржолғы тырнақшалармен және үтірмен көрсету керек (егер IP-адрестер бірден көп болса)
- time_pause = 30 айнымалысының мәні тексеру кезеңін (секундпен) көрсетеді. 10-15 секундтан аз орнату ұсынылмайды, әсіресе тексерілетін IP тізімі үлкен болса.
- скрипттегі жолдардың шегіністерін жоймаңыз. Бұл синтаксистік қате тудыруы мүмкін.

(*)скрипт icmp пакеттерін (ping) жіберу арқылы тексеру әдісін қолданады, сондықтан мониторингтелетін серверде немесе маршрутизаторда ping-сұраулар блокталмайтынына көз жеткізу керек.

Енді скриптті іске қосуға дайынбыз.
Скрипт 24/7 жұмыс істеуі керек, сондықтан оның жұмысы консольдің негізгі экранында көрсетілмеуі үшін, оны screen утилитасы арқылы бөлек "терезеде" іске қосамыз (егер орнатылмаса, оны орнатыңыз. Толығырақ: screen утилитасымен жұмыс істеу негіздері).
Ол үшін команданы орындаймыз:
screen -S pingmonitor

және скрипт файлы орналасқан папкаға өтеміз:
cd && cd pingmonitor

Скриптті іске қосу командасы:
python3 main.py

Сеанстан шығу және скриптті жұмыс істеп қалдыру үшін Ctrl+a+d пернелерін басыңыз. Енді SSH консольды жабуға болады.
Жұмыс істеп тұрған скриптпен сеансқа қосылу үшін серверге SSH арқылы қосылып, команданы орындаңыз:
screen -r pingmonitor

Егер сервер немесе маршрутизатор қолжетімсіз болса және қайтадан қолжетімді болса, сіз IP мониторинг арнасында хабарлама аласыз.