Назад | Перейти на главную страницу

Сбор статистики веб-страницы в скрипте Bash

Мне нужно собрать статистику о том, сколько времени требуется для получения веб-страницы каждые пару секунд.

Я могу сделать

time wget --spider http://www.google.com/index.html

(паук не загрузит страницу, просто проверьте, что они есть)

с помощью этой команды я могу увидеть, сколько времени потребовалось для выполнения команды и статус страницы (200 ОК, 404 НЕ НАЙДЕН и т. д.)

Проблема, с которой я столкнулся, заключается в том, что мне нужно отслеживать статистику. Поэтому, если я захожу на веб-страницу каждые пару секунд и время от времени получаю 404, мне нужно увидеть эту статистику.

Что Вы думаете об этом?

curl --write-out %{time_total} --head google.ca/ >> ~/stats.txt

Это даст вам следующий результат:

HTTP/1.1 301 Moved Permanently
Location: http://www.google.ca/
Content-Type: text/html; charset=UTF-8
Date: Wed, 25 May 2011 21:24:45 GMT
Expires: Fri, 24 Jun 2011 21:24:45 GMT
Cache-Control: public, max-age=2592000
Server: gws
Content-Length: 218
X-XSS-Protection: 1; mode=block

0.076

Которые затем можно разобрать в электронную таблицу. По общему признанию, это может быть не самое элегантное решение. Вы можете очистить его с помощью цепочки grep (например, grep -v Location: | grep -v Content-Type: | grep -v Date и т.д.) или что-то более элегантное. Мне любопытно посмотреть, что придумают другие!

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

Вы можете попробовать что-то вроде этого, чтобы начать

#!/bin/bash
URL="http://serverfault.com/"
Result=$((time wget --spider "$URL") 2>&1  | egrep  'real|response')
NumFields=$(echo $Result | awk '{print NF}')

#16 Fields if there was a 302 redirect and the result is in $13
#9 fields for 200,404 the result in in $6

if [ $NumFields -eq 16 ]
then
   Stats=$(echo $Result | awk 'BEGIN {OFS=",";} {print $13,$NF}')
else
   Stats=$(echo $Result | awk 'BEGIN {OFS=",";} {print $6,$NF}')
fi
# Outputs YYYYMMDDHHMMSS,URL,Response,Time Taken
# 20110526180254,http://www.google.oom/,302,0m1.000s
# 20110526180928,http://serverfault.com/,200,0m0.225s
# 20110526181041,http://www.google.com/fred/,404,0m0.089

echo $(date +"%Y%m%d%H%M%S"),"$URL","$Stats"

Если вы используете >> чтобы перенаправить вывод в файл, вы можете либо вывести его в электронную таблицу, либо использовать grep и т. д., чтобы извлечь из него информацию.