შესვლა
    opened image

    სერვერების ან ქსელური მოწყობილობების მონიტორინგისთვის არსებობს მრავალი პროგრამული გადაწყვეტა, რომელთა უმეტესობა მოითხოვს სერვერის რესურსებს განლაგებისთვის და კონფიგურაციის ცოდნას. მაგრამ თუ لديك ერთი ან რამდენიმე სერვერი ან მარშრუტიზატორი თეთრი* IP-ით, მაშინ არ არის საჭირო რთული მონიტორინგის სტრუქტურის განლაგება მხოლოდ იმისთვის, რომ შეამოწმოთ, ხელმისაწვდომია თუ არა სერვერი ან მარშრუტიზატორი. საკმარისია შექმნათ მარტივი ტელეგრამ ბოტი, რომელიც გამოგიგზავნით შეტყობინებას ტელეგრამში, თუ შემოწმებული IP ხელმისაწვდომი არ არის (down) და როდესაც კვლავ ხელმისაწვდომია (up). თავად ბოტი იმუშავებს 24/7 ვირტუალურ სერვერზე Linux ოპერაციული სისტემის მართვის ქვეშ, მინიმალური დატვირთვით რესურსებზე.
    * თეთრი IP მისამართი  - ეს არის უნიკალური IP მისამართი, რომელიც მიენიჭება მოწყობილობას ან სერვერს და ხელმისაწვდომია ინტერნეტიდან. ასეთი IP არის საჯარო.

    რა უნდა გაკეთდეს:
    1. ტელეგრამში შექმენით ბოტი და პირადი არხი, რომელშიც დაამატებთ ბოტს. არხში შეგიძლიათ მოიწვიოთ ისინი, ვინც ასევე შეუძლია მონიტორინგის დაკვირვება 
    2. დააყენეთ სერვერზე python3. ამ სტატიაში განვიხილავთ ბოტის განთავსებას ვირტუალურ სერვერზე Ubuntu 20.04 ოპერაციული სისტემით (შეგიძლიათ განთავსოთ ნებისმიერ ოპერაციულ სისტემაზე, რომელზეც შესაძლებელია python3 პაკეტის დაყენება)
    3. შექმენით სკრიპტ-ფაილი, ჩაწერეთ მასში IP ჰოსტების (სერვერების ან მარშრუტიზატორების) მისამართები, დააყენეთ მონიტორინგის პერიოდი და გაშვეთ სკრიპტი 24/7 რეჟიმში.

    დავიწყოთ შესრულება.

    1. ახალი ტელეგრამ ბოტის რეგისტრაციისთვის, საჭიროა Telegram აპლიკაციაში მოიძიოთ ბოტ-სერვისი @BotFather და გაუგზავნოთ მას ახალი ბოტის რეგისტრაციის ბრძანება
    /newbot
    შემდეგ @BotFather მოითხოვს ჩვენი ბოტის სახელის. სახელზე შეზღუდვები არ არის, შევიტანოთ, მაგალითად:
    IP monitoring

    ახლა საჭიროა შევიტანოთ უნიკალური სახელი ბოტისთვის Telegram სისტემაში. ბოტის სახელი უნდა მთავრდებოდეს _bot-ით. დავარქვათ, მაგალითად
    ip_monitoring_super_bot

    ამის შემდეგ, @BotFather მოგვაწვდებს TOKEN-ს, რომლის საშუალებითაც შეგვიძლია ბოტის მართვა. TOKEN უნდა შევინახოთ, რადგან მოგვიწევს მისი გამოყენება მოგვიანებით.

    ტელეგრამ ბოტი რეგისტრირებულია.

    ახლა შევქმნათ პირადი არხი, რომელშიც ჩვენი ახალი ბოტი სახელით @ip_monitoring_super_bot გაგზავნის შეტყობინებებს.

    ამისთვის Telegram პროგრამის ჩატების ფანჯარაში ვაწვდით ახალ შეტყობინების შექმნის ღილაკს და ვარჩევთ New chanel - Create chanel - ვიგონებთ არხის სახელს (მაგალითად, IP monitoring chanel) - ვარჩევთ არხის ტიპს Private და ვამატებთ ბოტ @ip_monitoring_super_bot.


    შედეგად ჩვენ ვიღებთ პირად არხს, რომელშიც ბოტი @ip_monitoring_super_bot გაგზავნის შეტყობინებებს მონიტორინგის ქვეშ მყოფი მოწყობილობების მდგომარეობის შესახებ. ასევე ამ არხში შეგიძლიათ მოიწვიოთ ნებისმიერი ტელეგრამის მომხმარებელი სპეციალური ბმულით.
    უნდა მიექცეს ყურადღება და შეამოწმოთ არხის IP monitoring chanel-ის თვისებებში, რომ ბოტი @ip_monitoring_super_bot არხის ადმინისტრატორად იყოს დამატებული. არხის თვისებებში გადასასვლელად, საკმარისია დააჭიროთ არხის სახელზე.

    ასევე დაგვჭირდება მნიშვნელობა chat_id. ამისთვის საჭიროა:
     - გადავიდეთ ბოტის ჩატში @ip_monitoring_super_bot და გავუგზავნოთ შეტყობინება /start (ეს დაიწყებს ბოტის მუშაობას)
     - გავაკეთოთ ტესტური შეტყობინება (ნებისმიერი) არხში IP monitoring chanel
     - გავიდეთ ბრაუზერში ბმულზე 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-ის დაყენების შესახებ: როგორ უნდა დავაყენოთ Python 3.10 Ubuntu 20.04-ზე

    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'], IP 8.8.8.8 და 1.1.1.1-ის ნაცვლად მიუთითეთ თქვენი სერვერის ან მარშრუტიზატორის IP (ან hostname), რომელიც უნდა მონიტორინგდეს*. მოწყობილობების 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 monitoring chanel.