в debian, monitoring, prometheus, scripts, ubuntu

Выводим время отклика сайта с помощью Prometheus и Grafana

prometheus
Мы уже рассматривали как узнать время отклика сайта из командной строки 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 }}. По сути, этого уже достаточно для отображения графика, для более тонкой настройки можно воспользоваться меню, которое расположено прямо под графиком. Спустя некоторое время наш график будет выглядеть примерно так:
http_response_time_ms

Добавить комментарий