Инсталиране и конфигуриране на система за мониторинг Munin

- Секция Компютри

     Преди инсталиране и конфигуриране на "Munin" е необходимо да се знае какво е "Munin" и какви възможности предоставя. "Munin" е модерна система за мониторинг. Чрез "Munin" се предоставя възможност за реализиране на мониторинг на :MySQL,Apache,Postfix и други процеси.

1.) Инсталиране на Debian 4.0
apt-get install munin munin-node

2.) След инсталиране на munin е необходимо да бъде конфигуриран
vim /etc/munin/munin-node.conf

Промяна от host *  '''към''' host 127.0.0.1

3.) За да влязат промените в действие е необходимо Munin да бъде рестартиран

/etc/init.d/munin-node restart

4.) Свързване на munin и apache 2.2
# Munin автоматично създава директория "/var/www/munin" и прави cronjob които на всеки 5 мин генерира нова графика.
# Редактиране на "/etc/apache2/sites-enabled/munin.conf"

vim /etc/apache2/sites-enabled/000-default

# Сложете следните редове във конфигурационния файл
>
Alias /munin "/var/www/munin"
ScriptAlias /cgi-bin/ /usr/lib/cgi-bin/
<Directory /usr/lib/cgi-bin/>
   AllowOverride AuthConfig
   Options FollowSymLinks ExecCGI
</Directory>

#Рестартиране на Apache 2.2 за активиране на новите промени
>
/etc/init.d/apache2 restart
<

5). На долният адрес ще бъде извеждана статистиката
<
http://www.your-domain.tld/munin
<

6.) Конфигуриране на >htaccess за защита на данните

6.1) Генериране парола за потребител "amri"
htpasswd /var/www/munin/.htpasswd amri

6.2) Създаване на .htaccess
>
vim /var/www/munin/.htaccess
<

6.3) Съдържание на .htaccess
>
AuthType Basic
AuthName "Munin Graphs"
AuthUserFile /var/www/munin/.htpasswd
require user amri
<

7.) Важни директории за munin които е добре да се знаят.
# Munin директория за данни
dbdir /var/lib/munin

# Munin директория за генерираните графики
htmldir /var/www/munin

# Munin логове
logdir /var/log/munin

# Временни run файлове (pid файл и др.)
rundir /var/run/munin

# HTML темплейт за Munin layout
tmpldir /etc/munin/templates

#Munin Plugin директория
/usr/share/munin/plugins


8.) Инсталиране на допълнителни плъгини

8.1) Инсталиране на plugin за мониторинг на виртуалните хостове на Apache 2. Този plugin създава графика за всеки vhost по отделно.

Този Plugin трябва да бъде компилиран на машината. За компилирането е необходимо Apache2 Dev-Packages

apt-get install apache2-dev libcrypt-ssleay-perl libwww-perl

или това за prefork

apt-get install apache2-prefork-dev libcrypt-ssleay-perl libwww-perl

След това трябва да бъдат добавени няколко Apache модули

a2enmod info
a2enmod status
/etc/init.d/apache2 force-reload

#Изтегляне на mod_watch за Apache 2.2

wget 'http://forums.cacti.net/download.php?id=8888' -O "mod_watch-4.3_apache22_mod.tar.gz"
Име на файл: "mod_watch-4.3_apache22_mod.tar.gz"

tar -xvzf mod_watch-4.3_apache22_mod.tar.gz;
cd mod_watch-4.3_apache22_mod;

# Редактиране на Makefile.dso за Apache 2
# vim Makefile.dso

#APXS=/usr/bin/apxs2

APACHECTL=apache2ctl

SCRIPTDIR=/usr/local/sbin
STATEDIR=/usr/lib/apache2/modules/

# Това е коментирано
#BIG=-DUSE_OCTET_COUNTER_64

DEF=$(BIG) -DSTATEDIR='"$(STATEDIR)"'
INC=
LIB=
}}}

#Тук компилираме модула

make -f Makefile.dso build;
make -f Makefile.dso install;


#Създаване на файл: /etc/apache2/mods-available/watch.load със съдържание:
LoadModule watch_module /usr/lib/apache2/modules/mod_watch.so

#Зареждане на модула mod watch
ln -s /etc/apache2/mods-available/watch.load /etc/apache2/mods-enabled/watch.load

#Във края на фала /etc/apache2/apache2.conf се добавят следните редове:
>>>

<IfModule mod_status.c>
    #
    # Allow server status reports generated by mod_status,
    # with the URL of http://servername/server-status
    # Change the ".example.com" to match your domain to enable.
    #
    ExtendedStatus On
    <Location /server-status>
        SetHandler server-status
        Order deny,allow
        Deny from all
        Allow from 127.0.0.1
    </Location>
</IfModule>

<IfModule mod_info.c>

     #Allow remote server configuration reports, with the URL of
     # http://servername/server-info (requires that mod_info.c be loaded).
     #Change the ".example.com" to match your domain to enable.

    <Location /server-info>
        SetHandler server-info
        Order deny,allow
        Deny from all
        Allow from 127.0.0.1
    </Location>
</IfModule>


<IfModule mod_watch.c>
    # Allows the URL used to query virtual host data:
    #
    # http://www.snert.com/watch-info
    #
    <Location /watch-info>
    SetHandler watch-info
    Order allow,deny
    Allow from 127.0.0.1
    </Location>


    # Intended for debugging and analysis of shared memory
    # hash table and weenie files:
    #
    #http://127.0.0.1/watch-table
    #

    <Location /watch-table>
    SetHandler watch-table
    Order allow,deny
    Allow from 127.0.0.1
    </Location>

    <Location /watch-list>
    SetHandler watch-list
    Order allow,deny
    Allow from 127.0.0.1
    </Location>
</IfModule>
<<<

#Статистиките могат да бъдат наблюдавани след рестартиране на Apache 2.2 на следните адреси:
1. links http://127.0.0.1/server-info
2. links http://127.0.0.1/info
3. links http://127.0.0.1/watch-tablе
4. links http://127.0.0.1/watch-list

#Сега копираме модула в /usr/share/munin/plugins/

cd /tmp/mod_watch-4.3_apache22_mod;
cp mod_watch.c /usr/share/munin/plugins/;
chmod 755 /usr/share/munin/plugins/mod_watch.c;
/etc/init.d/apache2 force-reload

#Създаване на файла apache_watch_ "/usr/share/munin/plugins/apache_watch_". Съдържанието на файла е следното:

>>>>>>>>>>>
#!/usr/bin/perl
#
# Parameters supported:
#
#     config
#     autoconf
#
# Configurable variables
#
#     url      - Override default status-url
#
# Must be symlinked to what the graph should monitor. Run with --suggest
# to see valid targets - or just run munin-node-configure --shell
#
# Written by Bj�rn Ruberg 2006-2007
#
# Magic markers:
#%# family=auto
#%# capabilities=autoconf suggest

my $ret = undef;
if (!eval "require LWP::UserAgent;") {
  $ret = "LWP::UserAgent not found";
}

# watch-list exists on localhost
# watch-info does not

my %plugs = (
         'bytes'     => 'Input/output (bytes)',
         'requests'  => 'Requests',
         'documents' => 'Documents served',
            );

my $URL = exists $ENV{'url'} ? $ENV{'url'} : "http://127.0.0.1:%d/watch-list";
my @PORTS = exists $ENV{'ports'} ? split(' ', $ENV{'ports'}) : (80);
my $type = "throughput";

if (exists $ARGV[0] and $ARGV[0] eq "autoconf") {
  if ($ret) {
    print "no ($ret)n";
    exit 1;
  }
  my $ua = LWP::UserAgent->new (timeout => 30);
  my @badports;
   
  foreach my $port (@PORTS) {
    my $url = sprintf $URL, $port;
    my $response = $ua->request (HTTP::Request->new('GET', $url));
    push @badports, $port unless $response->is_success;
  }
   
  if (@badports) {
    print "no (no mod_watch exists on ports @badports)n";
    exit 1;
  } else {
    print "yesn";
    exit 0;
  }
}

if (exists $ARGV[0] and $ARGV[0] eq "suggest") {
  while (my ($key, undef) = each %plugs) {
    print "$keyn";
  }
  exit 0;
}

my @servers = ();
my @data;
foreach my $port (@PORTS) {
  my $ua = LWP::UserAgent->new (timeout => 30);
  my $url = sprintf $URL, $port;
  my $response = $ua->request (HTTP::Request->new ('GET', $url));
  foreach my $string (split (/n/, $response->content)) {
    my ($server, undef, $ifInOctets, $ifOutOctets, $ifRequests,
        $ifDocuments) = split (/s/, $string, 6);
    push @servers, $server unless $server eq "SERVER";
    push @data, "$server $ifInOctets $ifOutOctets $ifRequests $ifDocuments"
      unless $server eq "SERVER";
  }
}

# From here and out, the plugin must be run with a symlinked service.
my $check = join ("|", keys %plugs);
die ("Plugin must be symlinked to aspect to be monitored")
  unless $0 =~ /_($check)$/;

my $action = $1;

if (exists $ARGV[0] and $ARGV[0] eq "config") {
  print "graph_title Apache $plugs{$action}n";
  print "graph_args --base 1000 -l 0n";
  print "graph_category apachen";
  print "graph_vlabel activityn";
  my $i = 0;
  foreach my $server (sort (@servers)) {
    (my $txtserver = $server) =~ s/(-|.)/_/g;
    my $draw = ($i==0) ? 'AREA' : 'STACK';
    if ($action eq "bytes") {
      print "${txtserver}.label $servern";
      print "${txtserver}.draw $drawn";
      print "${txtserver}.type COUNTERn";
    } else {
      print "${txtserver}.label $servern";
      print "${txtserver}.draw $drawn";
      print "${txtserver}.type COUNTERn";
    }
    $i++;
  }
  exit 0;
}

foreach my $string (sort (@data)) {
  my ($server, $ifInOctets, $ifOutOctets, $ifRequests, $ifDocuments) =
    split (/s/, $string);
  (my $txtserver = $server) =~ s/(-|.)/_/g;
  if ($action eq "documents") {
    print "${txtserver}.value $ifDocumentsn";
  } elsif ($action eq "requests") {
    print "${txtserver}.value $ifRequestsn";
  } elsif ($action eq "bytes") {
    print "${txtserver}.value " . ($ifInOctets + $ifOutOctets) . "n";
  }
}

<<<<<<

# Промяна на привилегиите на някои файлове и създаване на symlinks:
>>>>>>
chmod 755 /usr/share/munin/plugins/apache_watch_
ln -s /usr/share/munin/plugins/apache_watch_ /etc/munin/plugins/apache_watch_bytes;
ln -s /usr/share/munin/plugins/apache_watch_ /etc/munin/plugins/apache_watch_documents;
ln -s /usr/share/munin/plugins/apache_watch_ /etc/munin/plugins/apache_watch_requests;
cd /usr/share/munin/plugins/;
./apache_watch_ autoconf
/etc/init.d/apache2 restart
/etc/init.d/munin-node restart

<<<<<<
Сега е момента да се тества новия plugin
>>>>>>

perl /usr/local/sbin/mod_watch.pl -f ifRequests,ifDocuments http://127.0.0.1/watch-list/
#Резултатите ще са нещо подобно:
6078
1138
9.48
SERVER
<<<<<<

# Конфигуриране на виртуалните хостове
>>>>>>
cd /usr/share/munin/plugins/;
munin-run apache_watch_bytes config
munin-run apache_watch_documents config
munin-run apache_watch_requests config
<<<<<<
#Сега ще се видят графиките за всеки виртуален хост в "Munin"

Въпроси и отговори:

Въпрос 1:. При стартиране на Apache 2.2 извежда следното съобщение :
Cannot load mod_watch.so undefined symbol: APR_STATUS_IS_SUCCESS

Отговор 1: Причинате е, че сте компилирали несъвместим модул със Apache 2.2 например: mod_watch403.tgz.
Необходимо да бъде компилиран mod_watch 4.0.3 за Apache 2.2 описан в точка 8.1

Въпрос 2: При стартиране на "perl /usr/share/munin/plugins/apache_watch_ autoconf" се получава следната грешка:
"no (no mod_watch exists on ports 80)".
Отговор 2: Във файл "/usr/share/munin/plugins/apache_watch_ autoconf" коригирате линия:
"my $URL = exists $ENV{'url'} ? $ENV{'url'} : "http://localhost:%d/watch-list";"
със
"my $URL = exists $ENV{'url'} ? $ENV{'url'} : "http://127.0.0.1:%d/watch-list";"
Това е един от методите за избягване на тази грешка също е възможно и да се направи от /etc/apache2/apache2.conf






Коментирай свободно: