в debian, monitoring, scripts, ubuntu

Пишем свой плагин для munin — http_response_median

pages response time
Мы уже знаем как узнать время отклика сайта из командной строки Linux, но для наглядности нужно эти данные визуализировать.

Наиболее простой способ — написание плагина для munin (назовем его http_response_median). Давайте разберемся, как писать этот плагин!

Последовательность действий следующая:

  • переходим в каталог /etc/munin/plugin-conf.d/:
cd /etc/munin/plugin-conf.d/
  • открываем на редактирование конфиг munin-node:
nano munin-node
  • добавляем в него следующие строки:
...
[http_response_median]
env.domain letsclearitup.com.ua
env.url1 /
env.url2 /about
env.url3 /category/asterisk
  • далее переходим в каталог /etc/munin/plugins:
cd /etc/munin/plugins
  • создаем файл http_response_median:
touch http_response_median

содержимое плагина munin должно быть следующим:

#!/usr/bin/perl
use strict;

my $domain = $ENV{'domain'} || "letsclearitup.com.ua";
my @urls;
my $i = 1;

while (defined ($ENV{"url$i"})) {
    push(@urls, $ENV{"url$i"});
    $i++;
}
if (! @urls) {
    die "No urls defined\n";
}

if (exists $ARGV[0] and $ARGV[0] eq "config") {
    print "graph_title $domain Page response times by curl\n";
    print "graph_category apache\n";
    print "graph_vlabel request time (ms)\n";
    print "graph_info Response times of $domain.\n";

    foreach my $url (@urls) {
  my $label = $url; 
  $label =~ s@[\/-]@_@g;
  print "$label.label $url\n";
  print "$label.type GAUGE\n";
    }
    exit 0;
}

sub get_url {
    my $cur_url = $_[0];
    my $content = `/usr/bin/curl -s -w %{time_total}\\n -o /dev/null "$cur_url"`;
}

foreach (@urls){
    my $value = $_;
    my $summary = 0;
    my $url = "http://".$domain.$value;
    my @time;
    for ($i=0; $i<5;$i++){
  $time[$i] = get_url($url);
  my $counter = 1000 * $time[$i];
  $summary += $counter;
    }
    $value =~ s@[\/-]@_@g;
    print $value.".value ".($summary/5)."\n";
};

exit 0;

Примечание. Для получения более объективного значения времени отклика сайта делаем 5 замеров и выводим среднее значение.

  • делаем файл http_response_median исполняемым:
chmod +x http_response_median
  • и перезапускаем munin-node:
/etc/init.d/munin-node restart

На этом написание плагина для munin закончено, и через некоторое время можно будет увидеть результаты в виде графика:

http_response_median

График с примером работы плагина http_response_median

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

12 Комментария

  1. >>Вы готовы платить?
    Нет. но могу написать вам ансибл плейбук на установку munina (вижу у вас нет данной статьи). Либо установку данного модуля на удалённые хосты)

    • скорее уж так:
      [http_response_median_1]
      env.domain domen2.com
      env.url1 /

      [http_response_median_2]
      env.domain domen123.com
      env.url1 /

      [http_response_median_3]
      env.domain dodsdmen123.com
      env.url1 /

      и сам плагин скопировать трижды и назвать http_response_median_1, http_response_median_2, http_response_median_3

      но это примитивный вариант, я бы так делать не советовал

    • ну, если вы хотите собирать данные со своего домена, — да.

      Но лучше менять настройки в конфигурационном файле munin-node:

      [http_response_median]
      env.domain letsclearitup.com.ua
      env.url1 /
      env.url2 /about
      env.url3 /category/asterisk

        • Вариант 1, быстрый: скопировать плагин http_response_median столько раз, сколько у вас доменов (назвать например http_response_median_1/2/3/4/5/n) и для каждого из них создать свои настройки в файле munin-node
          Вариант 2, правильный: взять и переписать плагин — добавить поддержку нескольких доменов

          • Перепишите плагин для нескольких доменов?:)

            покопировал, как сказали, но, увы, для половины доменов работает, для другой половины — нет

          • В смысле «Перепишите плагин для нескольких доменов?:)»?
            Я же вам не благотворительная организация, мое время дорого стоит. Вы готовы платить?