Продолжаем серию статей по доступной автоматизации в 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.
Скрипт будет выглядеть следующим образом:
#!/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, также можно воспользоваться подсказкой ниже.
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.
Пишите в комментариях если нужно продолжение.
Спасибо за потраченное время.
Автор: Lost63