Автоматизация IP-сети. Часть2 – Мониторинг скорости открытия Веб страниц

    image alt Продолжаем серию статей по доступной автоматизации в IP-сети. У каждого из инженеров, работающих с сетью Интернет, так или иначе периодически возникает потребность измерения скорости загрузки Веб странницы. Для этого существует множество инструментов, один из них это утилита wget. Например, для измерения скорости загрузки можно из консоли (Unix/Linux) воспользоваться такой командой:

    [root@localhost ~]# wget -E -H -p -Q300K --user-agent=Mozilla --no-cache --no-cookies --delete-after --timeout=15 --tries=2 habrahabr.ru 2>&1 | grep Downloaded
    Downloaded: 7 files, 411K in 0.3s (1.22 MB/s)

    Следует отметить, что ограничение Q300K достаточное чтобы понять скорость загрузки, особенно если сетевая задержка до сайта более 10мс. При этом результаты скорости будут не очевидны если количество скаченной информации меньше 100K.

    Но что, если есть потребность отслеживать скорость загрузки ресурса на постоянной основе? Вопрос можно попробовать решить при помощи небольшого скрипта, системы мониторинга (умеющей запускать скрипты) и гидроизоляционного скотча.

    Для написания скрипта возьмем Python3, в качестве системы для примера возьмем Cacti 0.8.8h.
    Скрипт будет выглядеть следующим образом:

    Код Python
    #!/usr/bin/env python
    # -*- coding: utf-8 -*-
    import datetime
    import re
    import os
    import subprocess
    import argparse
    
    parser = argparse.ArgumentParser()
    parser.add_argument("-h_page", "--hostname_page", dest = "hostname_page")
    args = parser.parse_args()
    
    curent_time=str(datetime.datetime.now().strftime("%Y-%m-%d_%H:%M:%S_"))
    pid=os.getpid()
    
    fweb=open('/usr/TEST_Script/TMP_FILES/web_temp'+curent_time+str(pid)+'.txt', 'w')
    web=subprocess.call(["timeout 120 wget -E -H -p -Q300K --user-agent=Mozilla --no-cache --no-cookies --delete-after --timeout=15 --tries=2 "+args.hostname_page+" 2>&1 | grep '\([0-9.]\+ [KM]B/s\)'"], bufsize=0, shell=True, stdout=(fweb))
    fweb.close()
    fweb=open('/usr/TEST_Script/TMP_FILES/web_temp'+curent_time+str(pid)+'.txt', 'r')
    data=fweb.read()
    os.remove('/usr/TEST_Script/TMP_FILES/web_temp'+curent_time+str(pid)+'.txt')
    speed_temp=re.findall(r's \((.*?)B/s', str(data))
    speed_temp_si=re.findall(r's \((.*?) [KM]B/s', str(data))
    try:
            if re.findall(r'M', str(speed_temp))==[] and re.findall(r'K', str(speed_temp))==[]:
                    speed_="{0:.3f}".format(float(speed_temp_si[0])*0.001*8)
            elif re.findall(r'M', str(speed_temp))!=[]:
                    speed_="{0:.3f}".format(float(speed_temp_si[0])*1000*8)
            elif re.findall(r'K', str(speed_temp))!=[]:
                    speed_="{0:.3f}".format(float(speed_temp_si[0])*1*8)
    except:
            speed_='no_data'
    print ('web_speed_test:'+speed_)
    


    Для проверки работоспособности, его можно запустить с консоли:

    [root@localhost ~]# python3.3 /usr/TEST_Script/web_open.py -h_page habrahabr.ru
    web_speed_test:10160.000

    Теперь необходимо выполнить стандартные манипуляции в Cacti для запуска скриптов, они хорошо задокументированы на сайте Cacti, также можно воспользоваться подсказкой ниже.

    Комиксы Cacti
    1. Console -> Data Input Methods

    2. Console -> Data Templates

    3. Console -> Graph Templates

    4. Console -> Devices

    5. Console -> Create New Graphs



    Если все сделано правильно, в итоге должны получиться подобные графики:



    Тонкая линия — это измеренные данные, имеют пилообразный вид т.к. измерение в данном случае происходит одномоментно и отображается на графике, в то время как при загрузке например сетевых интерфейсов мы видим усредненное значение скорости за измеряемый период (обычно по умолчанию 5 минут). Толстая линия — это линия тренда, которая помогает аппроксимировать визуализацию. На представленном графике, реально измеренные значения для одного из Веб сайтов. Просадка по центру, подтвержденные администратором сайта технические неполадки и далее частичное восстановление.

    Вы нашли для себя эту статью полезной, то возможно в этом разделе Вам также будут интересны следующие возможности нестандартного мониторинга:

    — Мониторинг TCP retransmission при измерении скорости загрузки сайта.
    — Мониторинг ICMP RTD с любого маршрутизатора Вашей Интернет сети (Juniper, Huawei, Cisco) до Веб ресурсов.
    — Мониторинг RTD задержки до сайтов, с закрытым протоколом ICMP.

    Пишите в комментариях если нужно продолжение. Спасибо за потраченное время.
    • +10
    • 8,6k
    • 4
    Поделиться публикацией
    AdBlock похитил этот баннер, но баннеры не зубы — отрастут

    Подробнее
    Реклама

    Комментарии 4

      0
      а почему бы Zabbix не использовать?
        0
        да, есть альтернативные варианты.
        0

        Не ясно только зачем тут python с subprocess использовать, вызывая wget еще и так с pipe…
        Ну делал бы тогда уже на bash

          0
          Добрый день.
          Спасибо за статью
          Весьма интересен будет такой мониоринг
          Мониторинг TCP retransmission при измерении скорости загрузки и выгрузки по FTP (TCP).

          Только полноправные пользователи могут оставлять комментарии. Войдите, пожалуйста.

          Самое читаемое