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

в 10:49, , рубрики: Cisco, huawei, IP, juniper, python, python3, wget, визуализация данных, мониторинг сайта, Сетевые технологии

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
Автоматизация IP-сети. Часть2 – Мониторинг скорости открытия Веб страниц - 2
2. Console -> Data Templates
Автоматизация IP-сети. Часть2 – Мониторинг скорости открытия Веб страниц - 3
3. Console -> Graph Templates
Автоматизация IP-сети. Часть2 – Мониторинг скорости открытия Веб страниц - 4
4. Console -> Devices
Автоматизация IP-сети. Часть2 – Мониторинг скорости открытия Веб страниц - 5
5. Console -> Create New Graphs
Автоматизация IP-сети. Часть2 – Мониторинг скорости открытия Веб страниц - 6
Автоматизация IP-сети. Часть2 – Мониторинг скорости открытия Веб страниц - 7

Если все сделано правильно, в итоге должны получиться подобные графики:
Автоматизация IP-сети. Часть2 – Мониторинг скорости открытия Веб страниц - 8
Тонкая линия — это измеренные данные, имеют пилообразный вид т.к. измерение в данном случае происходит одномоментно и отображается на графике, в то время как при загрузке например сетевых интерфейсов мы видим усредненное значение скорости за измеряемый период (обычно по умолчанию 5 минут). Толстая линия — это линия тренда, которая помогает аппроксимировать визуализацию. На представленном графике, реально измеренные значения для одного из Веб сайтов. Просадка по центру, подтвержденные администратором сайта технические неполадки и далее частичное восстановление.
     Если Вы нашли для себя эту статью полезной, то возможно в этом разделе Вам также будут интересны следующие возможности нестандартного мониторинга:
— Мониторинг TCP retransmission при измерении скорости загрузки сайта.
— Мониторинг ICMP RTD с любого маршрутизатора Вашей Интернет сети (Juniper, Huawei, Cisco) до Веб ресурсов.
— Мониторинг RTD задержки до сайтов, с закрытым протоколом ICMP.
     Пишите в комментариях если нужно продолжение.
     Спасибо за потраченное время.

Автор: Lost63

Источник

* - обязательные к заполнению поля


https://ajax.googleapis.com/ajax/libs/jquery/3.4.1/jquery.min.js