Выводим время отклика сайта с помощью Prometheus и Grafana
Oct 3, 2016 22:37 · 367 words · 2 minute read
Мы уже рассматривали как узнать время отклика сайта из командной строки Linux и с помощью написанного плагина для munin визуализировали полученные данные.
Давайте разберемся как отобразить время отклика сайта с помощью Prometheus и Grafana!
Для решения задачи нам потребуется минимум — установленный Prometheus и node-exporter
(установка и базовая настройка), а также установленная Grafana с настроенным источником данных (Data source).
Убедитесь, что в node-exporter
включен коллектор textfile
и проверьте значение параметра -collector.textfile.directory
(обычно это /var/lib/node_exporter/textfile_collector
). Коллектор будет брать данные из всех файлов с расширением *.prom
в этой директории, содержимое файлов должно соответствовать определенному формату.
В каталоге /usr/local/sbin
создаем файл http_response_time_ms
и делаем его исполняемым:
touch http_response_time_ms
chmod +x http_response_time_ms
Скрипт http_response_time_ms
, выполняющий замеры данных и записывающий их в нужном формате в файл, выглядит так:
#!/usr/bin/perl
use strict;
my @domains = ("web1.example.com","web2.example.com","web3.example.com");
my @urls = ("/","/jobs/348443/","/resumes/329829/","/about-us/");
my $filename = "/var/lib/node_exporter/textfile_collector/http_response_time_ms.prom";
sub get_url {
my $cur_url = $_[0];
my $content = `/usr/bin/curl -s -w %{time_total}\\n -o /dev/null "$cur_url"`;
}
open(my $fh, '>', $filename);
print $fh "# HELP http_response_time_ms The HTTPS response time single page in miliseconds\n# TYPE http_response_time_ms gauge\n";
foreach (@domains){
my $domain = $_;
foreach (@urls){
my $value = $_;
my $url = "https://".$domain.$value;
my @time;
for (my $i=0; $i<3;$i++){
$time[$i] = get_url($url);
}
my @sorted = sort { $a <=> $b } @time;
my $counter = 1000 * $sorted[1];
print $fh 'http_response_time_ms{domain="'.$domain.'",url="'.$value.'"} '.$counter."\n";
};
};
close $fh;
exit 0;
В результате выполнения скрипта сформируется файл /var/lib/node_exporter/textfile_collector/http_response_time_ms.prom
с таким содержимым:
# HELP http_response_time_ms The HTTPS response time single page in miliseconds
# TYPE http_response_time_ms gauge
http_response_time_ms{domain="web1.example.com",url="/"} 54
http_response_time_ms{domain="web1.example.com",url="/jobs/348443/"} 124
http_response_time_ms{domain="web1.example.com",url="/resumes/329829/"} 116
http_response_time_ms{domain="web1.example.com",url="/about-us/"} 46
http_response_time_ms{domain="web2.example.com",url="/"} 53
http_response_time_ms{domain="web2.example.com",url="/jobs/348443/"} 129
http_response_time_ms{domain="web2.example.com",url="/resumes/329829/"} 122
http_response_time_ms{domain="web2.example.com",url="/about-us/"} 53
http_response_time_ms{domain="web3.example.com",url="/"} 55
http_response_time_ms{domain="web3.example.com",url="/jobs/348443/"} 127
http_response_time_ms{domain="web3.example.com",url="/resumes/329829/"} 105
http_response_time_ms{domain="web3.example.com",url="/about-us/"} 50
Проверим наличие метрик — в браузере переходим по адресу http://[IP-адрес сервера]:9100/metrics, новые метрики должны появиться через несколько секунд после выполнения скрипта.
Переходим в Grafana и создаем новый дашборд для графиков. В данном примере будем использовать шаблоны для имен хостов (ранее мы уже использовали шаблоны для интервалов времени).
Добавляем новый график, в поле Query вводим интересующую нас метрику — http_response_time_ms{domain="$host"}
, а в поле Legend format вводим {{ domain }}{{ url }}
. По сути, этого уже достаточно для отображения графика, для более тонкой настройки можно воспользоваться меню, которое расположено прямо под графиком.