Munin

Материал из Webko Wiki
Перейти к навигации Перейти к поиску

Вводные данные: есть несколько удаленных точек, в каждой точке стоит небольшой комп с Fedora, который выпускает народ в интернет, устанавливает VPN с основным офисом и обеспечивает работу телефонии. Так же есть почтовые, веб и VPN сервера. Вот и хотелось видеть по ним некую информацию — как работают, температуру внутри компа, сетевую нагрузку, время отклика до некоторых узлов ну и т.д... Перечитал много всяких сайтов, и все же решил остановиться на Munin. Но как говорится, на вкус и цвет фломастеры разные, т.е. — каждому свое. Итак, все что буду описывать относится к ОС Fedora (версии от 8 до 17).

GitHub - все для мунин

Стероиды для Munin

Установка

Ставим серверную часть

yum install munin

Клиентская часть

yum install munin-node

Добавляем в автозапуск

chkconfig munin on
chkconfig munin-node on

Добавляем виртуальный хост (/etc/httpd/conf/httpd.conf)

#domain munin.myhost.ru
 ServerName munin.myhost.ru 
 ServerAlias munin.myhost.ru
 ServerAdmin admin@myhost.ru
 DocumentRoot /var/www/html/munin 
 ErrorLog logs/munin.myhost.ru-error_log 
 CustomLog logs/munin.myhost.ru-access_log common

Что бы ограничить доcтуп к статистике munin при установке создался файл munin-htpasswd (лежит в /etc/munin/), в этот файл нужно добавить пользователей с паролями с помощью стандартных команд htpasswd:

htpasswd /etc/munin/munin-htpasswd myuser

Рестартим сервис Apache и проверяем в браузере munin.myhost.ru. При запросе пароля вводим нашего пользователя и должны увидеть начальную страницу Munin.

Mun1-300x180.jpg

Сразу добавим первый сервер для мониторинга — этот же самый сервер, для этого в файле /etc/munin/munin.conf прописываем следующее:

[server1.myhost.ru]
 address 127.0.0.1 
 use_node_name yes 
 hddtemp_smartctl.sda.critical 55 
 hddtemp_smartctl.sdb.critical 55

Не обращайте пока внимания на две последние строчки — о них я напишу чуть позже. Хочу сразу заметить, что в статистике будут созданы группы серверов по доменному окончанию, то есть если у нас будут сервера типа:

server1.myhost.ru
server2.myhost.ru
server3.myhost.ru

... и

server1.myhost.local
server2.myhost.local

... то у нас будет две группы в статистике myhost.ru и myhost.local и внутри этих групп будет уже статистика по серверам. Итак, один объект наблюдения у нас создан, давайте настроим на нем все, что мы хотим о нем знать. На этом сервере есть MySQL, Apache — их статистику мы будем собирать. Также интересен пинг до некоторых узлов в интернете, температура внутри сервера, его загрузка, аптайм и прочие характеристики... После установки в папке /etc/munin/plugins/ уже есть некий набор симлинков на плагины, его нужно проанализировать, убрать лишние и добавить нужные. Что добавил я.

cd /etc/munin/plusins/
ln -s /usr/share/munin/plugins/mysql_bytes 
ln -s /usr/share/munin/plugins/mysql_queries
ln -s /usr/share/munin/plugins/mysql_slowqueries
ln -s /usr/share/munin/plugins/mysql_threads
ln -s /usr/share/munin/plugins/sensors_ /etc/munin/plugins/sensors_temp
ln -s /usr/share/munin/plugins/sensors_ /etc/munin/plugins/sensors_fan 
ln -s /usr/share/munin/plugins/sensors_ /etc/munin/plugins/sensors_volt 
ln -s /usr/share/munin/plugins/multiping 
ln -s /usr/share/munin/plugins/hddtemp_smartctl

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


Нотификации

Помимо пассивного мониторинга, munin может также предупреждать нас о достижении некоторых лимитов по тому или иному ресурсу на сервере. Нотификации настраиваются на головном сервере мониторинга (в нашем случае это server1.example.com).

Откроем /etc/munin/munin.conf и добавим туда следующие строки:

# группы контактов – пока один me
contacts me
# команда на отправку нотификации
contact.me.command |mail -s “Munin-notification for ${var:group} :: ${var:host}” your@email.address.here
# всегда отправлять предупреждения и критические нотификации
contact.me.always_send warning critical

В моем случае пришлось заместо mail нашаманить довольно топорный скриптик-враппер над qmail-inject:

#!/bin/bash
echo “To: $1
From: monitoring@example.com
Subject: $2
$3
—
example.com-monitoring with munin” | /var/qmail/bin/qmail-inject

И команда отправки выглядит так:

contact.me.command | /root/bin/munin.notify
your@email.address.here “Munin-notification for ${var:group}
:: ${var:host}” “[${var:group};${var:host}] -> 
${var:graph_title} -> warnings: ${loop<,>:wfields
${var:label}=${var:value}} criticals: ${loop<,>:cfields 
${var:label}=${var:value}}”

Результат выполнения будет такой:

Subject: Munin-notification for example.com :: server2.example.com

[example.com;server2.example.com] -> CPU usage -> warnings:  user=70.94 criticals:

—
example.com-monitoring with munin


Apache dynamic zoom

yum install munin munin-node

Directory permissions

First thing you have to do is check to make sure the temp directories are allowed for writing:

mkdir /var/lib/munin/cgi-tmp
mkdir /var/lib/munin/cgi-tmp/munin-cgi-graph
chmod 777 /var/lib/munin/cgi-tmp
chmod 775 /var/lib/munin/cgi-tmp/munin-cgi-graph

Configuration

Munin.conf

Next ensure you have the following in your /etc/munin/munin.conf file:

dbdir /var/lib/munin
htmldir /var/www/html/munin
logdir /var/log/munin
rundir  /var/run/munin
# Where to look for the HTML templates
#
tmpldir /etc/munin/templates
# Where to look for the static www files
#
staticdir /etc/munin/static
# temporary cgi files are here. note that it has to be writable by 
# the cgi user (usually nobody or httpd).
#
cgitmpdir /var/lib/munin/cgi-tmp
# (Exactly one) directory to include all files from.
includedir /etc/munin/conf.d
graph_strategy cgi
html_strategy cgi

Apache VirtualHost

Now comes the part where most of my time was wasted away by testing, debugging, then testing again. The Apache VirtualHost configuration for allowing dynamic zoom to work:

<VirtualHost *:80>
       ServerAdmin webmaster@dev.example.com
       DocumentRoot /var/www/html/munin
       ServerName munin.example.com
       ErrorLog logs/munin-error.log
       CustomLog logs/munin-access_log common
       RewriteLog logs/munin-rewrite.log
       RewriteLogLevel 5
       ServerSignature Off
       # Rewrites
       RewriteEngine On
       # Static content in /static
       RewriteRule ^/favicon.ico /etc/munin/static/favicon.ico [L]
       RewriteRule ^/static/(.*) /etc/munin/static/$1          [L]
       # If it has the word static in the path, send to the static dir
       RewriteRule ^/.*/static/(.*) /etc/munin/static/$1          [L]
       # HTML
       RewriteCond %{REQUEST_URI} .html$ [or]
       RewriteCond %{REQUEST_URI} =/
       RewriteRule ^/(.*)          /var/www/cgi-bin/munin-cgi-html/$1 [L]
       # Images
       RewriteRule ^/(.*) /var/www/cgi-bin/munin-cgi-graph/$1 [L]
       # Ensure we can run (fast)cgi scripts
       <Directory "/var/www/cgi-bin">
           Options +ExecCGI
           <IfModule mod_fcgid.c>
               SetHandler fcgid-script
           </IfModule>
           <IfModule !mod_fcgid.c>
               SetHandler cgi-script
           </IfModule>
       </Directory>
   </VirtualHost>
# rpm -qa \*munin\* \*cgi\*
spawn-fcgi-1.6.3-1.el5
munin-node-2.0.12-2.el5
fcgi-2.4.0-12.el5
munin-common-2.0.12-2.el5
munin-2.0.12-2.el5
fcgi-perl-2.4.0-12.el5
mod_fcgid-2.2-11.el5
munin-cgi-2.0.12-2.el5

Nginx dynamic zoom

Настройка hddtemp_smartctl

Займемся настройкой плагинов. Начнем с hddtemp_smartctl. Этот плагин покажет нам температуру жестких дисков, используя технологию S.M.A.R.T

Первым делом выясняем сколько у нас дисков, какие они и включен ли на них S.M.A.R.T.

fdisk -l
Disk /dev/sda: 250.1 GB, 250059350016 bytes 255 heads, 63 sectors/tra

Проверяем S.M.A.R.T. для диска /dev/sda

yum install smartmontools
smartctl -i /dev/sda
smartctl 5.39.1 2010-01-28 r3054 [i386-redhat-... Copyright (C) 2002-10 by Bruce Allen, http://smartmontools.sou... === START OF INFORMATION SECTION === 
Device Model: VB0250EAVER    Serial Number: 9VMHGQJN Firmware Version: HPG0 User Capacity: 250,059,350,016 bytes 
Device is: Not in smartctl database [for details use: ... ATA Version is: 8 ATA Standard is: ATA-8- ACS revision 6 Local Time is: Tue Apr 16 13:03:13 2013 MSK SMART 
support is: Available - device has SMART capability. SMART support is: Enabled

Две последние строчки говорят нам о том, что все у нас получится Теперь можно посмотреть подробную информацию о нашем диске:

smartctl -A /dev/sda

Среди всей информации можно увидеть строчки, содержащие Temperature. Значения этих строк и будет получать плагин. Проверить текущее значение можно так:

env drives="sda1" /etc/munin/plugins/hddtemp_smartctl

Должны увидеть что-то вроде этого:

sda1.value 17

Температура у нас есть, нужно прописать какие диски мы будем мониторить.

cd /etc/munin/plugin-conf.d/

Нам нужен файл hddtemp_smartctl, если он есть — редактируем, если нет — создаем. В итоге у нас должен получиться вот такой файл:

[hddtemp_smartctl] user root env.drives sda

Если у Вас больше дисков, то нужно только добавить их в строчку через пробел — env.drives sda sdb После этих манипуляций у Вас должен появиться график HDD Temperature:

Mun2.png

Так как это плагин сам не может отправлять уведомления о критических температурах — рекомендуется добавить пороги температур в файл munin.conf сервера-сборщика, к примеру 55 градусов — hddtemp_smartctl.sda.critical 55

[server1.myhost.ru] 
address 127.0.0.1 
use_node_name yes 
hddtemp_smartctl.sda.critical 55 
hddtemp_smartctl.sda.warning 50

При достижении температуры 50 градусов — в мониторинге окно с графиком температуры выделится желтым цветом — предупреждение, при достижении температуры 55 градусов — выделится красным — критическая ситуация. Если настроена отправка уведомлений по почте на самом сервере (позже опишу как это делается) — на почту придет уведомление.

Настройка Bind9 Plugin

Bind9 Plugin

bind9 server config

Bind server needs to be configured to log queries. You can do so by adding to /etc/bind/named.conf.options

logging {
        channel b_query {
                file "/var/log/bind9/query.log" versions 2 size 1m;
                print-time yes;
                severity info;
        };
        category queries { b_query; };
};

Now, make the directory and give it the right permission:

# mkdir /var/log/bind9
# chown bind:bind /var/log/bind9
# /etc/init.d/bind9 restart

munin node config

Set up the file correctly:

# ln -s /usr/share/munin/plugins/bind9 /etc/munin/plugins/bind9
# touch /var/lib/munin/plugin-state/bind9.state
# chown munin:munin /var/lib/munin/plugin-state/bind9.state
In /etc/munin/plugin-conf.d/munin-node make sure you have declared bind9 plugin:
[bind9]
user root

and restart munin-node

# /etc/init.d/munin-node restart

Bind9_rndc Plugin

bind9 server config

Your default bind install should already write to /var/cache/bind/named.stats when running the command:

# rndc stats

If not, make sure you have the following directive within options group in /etc/bind/named.conf.options:

       statistics-file "/var/cache/bind/named.stats";

Now, restart bind:

# /etc/init.d/bind9 restart

munin node config

First, link the plugin to Munin plugin folder:

# ln -s /usr/share/munin/plugins/bind9_rndc /etc/munin/plugins/bind9_rndc
In /etc/munin/plugin-conf.d/munin-node make sure you have declared bind9_rndc plugin:
[bind9_rndc]
user root
env.querystats /var/cache/bind/named.stats

and restart munin-node

# /etc/init.d/munin-node restart

Настройка Nginx_memory

Мониторинг памяти занятой Nginxом

vim /usr/share/munin/plugins/nginx_memory

Вставляем туда

#!/usr/bin/perl -w
# -*- mode: cperl; mode: autopair -*-
# Magic markers:
#%# family=auto
#%# capabilities=autoconf
# nginx_memory --- Munin plugin for monitoring Nginx memory
# usage. Based on the nginx_memory.pl plugin
# by AkyRhO <akyrho@gmail.com>.
# Copyright (C) 2010 António P. P. Almeida <appa@perusio.net>
# Author: António P. P. Almeida <appa@perusio.net>
# Permission is hereby granted, free of charge, to any person obtaining a
# copy of this software and associated documentation files (the "Software"),
# to deal in the Software without restriction, including without limitation
# the rights to use, copy, modify, merge, publish, distribute, sublicense,
# and/or sell copies of the Software, and to permit persons to whom the
# Software is furnished to do so, subject to the following conditions:
# The above copyright notice and this permission notice shall be included in
# all copies or substantial portions of the Software.
# Except as contained in this notice, the name(s) of the above copyright
# holders shall not be used in advertising or otherwise to promote the sale,
# use or other dealings in this Software without prior written authorization.
# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
# IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
# FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL
# THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
# LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
# FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
# DEALINGS IN THE SOFTWARE.
=head1 NAME
nginx_memory - Munin plugin to show the RAM used by nginx.
=encoding utf8
=head1 APPLICABLE SYSTEMS
Any nginx host
=head1 MAGIC MARKERS
#%# family=auto
#%# capabilities=autoconf
=head1 VERSION
1.0
=head1 BUGS
None known
=head1 AUTHOR
Based on a script by AkyRhO <akyrho@gmail.com>. Modified by António
Almeida <appa@perusio.net>
=head1 REPOSITORY
Source code at http://github.com/perusio/nginx-munin
=head1 LICENSE
MIT
=cut
## Munin config method.
if (exists $ARGV[0] and $ARGV[0] eq "config") {
print "graph_title nginx RAM usage\n";
print "graph_vlabel RAM\n";
print "graph_category nginx\n";
print "ram.label RAM\n";
print "graph_args --base 1024\n";
exit 0;
} else {
my $m = `ps u -p \$(pidof nginx) | awk 'NR > 1 {nm += \$5} END {print nm*1024}'`;
print "ram.value $m";
}
ln -s /usr/share/munin/plugins/nginx_memory /etc/munin/plugins/nginx_memory

Настройка multiping

C этим плагином все просто — он показывает время ответа на пинги. Для настройки нужно в файл /etc/munin/plugin-conf.d/munin-node добавить хосты, которые будем пинговать:

[multiping]
env.host www.ya.ru www.google.ru www.google.com

После этих манипуляций у Вас должен появиться график Ping times:

Multiping.jpg


Настройка sensors_

У нас есть три плагина:

sensors_temp
sensors_fan
sensors_volt

теперь нужно понять какую информацию мы можем получить с наших датчиков. Сначала устанавливаем пакет lm_sensors:

yum install lm_sensors

После этого запускаем

sensors-detect

в первый проход этой утилиты я соглашаюсь со всем — то есть добавляю все датчики, которые обнаруживаются. На вопрос

Do you want to overwrite /etc/sysconfig/lm_sensors? (YES/no): y

отвечаем yes. Теперь запускаем команду

sensors

Видим примерно следующее: [root@server]#

sensors coretemp-isa-0000 Adapter:
ISA adapter Core 0: +29.0°C (crit = +90.0°C) 
w83627dhg-isa-0a00 Adapter: 
ISA adapter Vcore: +1.10 V (min = +0.00 V, max = +1.74 V)
in1: +1.59 V (min = +0.00 V, max = +1.06 V) ALARM 
AVCC: +3.41 V (min = +2.98 V, max = +3.63 V) +3.3V: +3.41 V (min = +2.98 V, max = +3.63 V) 
in4: +1.88 V (min = +0.29 V, max = +0.15 V) ALARM 
in5: +1.22 V (min = +0.64 V, max = +1.23 V) 
in6: +1.59 V (min = +0.42 V, max = +0.52 V) ALARM 
3VSB: +3.42 V (min = +2.98 V, max = +3.63 V) 
Vbat: +3.38 V (min = +2.70 V, max = +3.30 V) ALARM 
fan1: 0 RPM (min = 337500 RPM, div = 4) ALARM 
fan2: 2083 RPM (min = 0 RPM, div = 8) ALARM 
fan3: 0 RPM (min = 5192 RPM, div = 4) ALARM 
fan4: 0 RPM (min = 675000 RPM, div = 2) ALARM 
fan5: 0 RPM (min = 6553 RPM, div = 2) ALARM 
temp1: +45.0°C (high = -103.0°C, hyst = +22.0°C) ALARM sensor = diode 
temp2: +55.0°C (high = +80.0°C, hyst = +75.0°C) sensor = diode 
temp3: +127.0°C (high = +80.0°C, hyst = +75.0°C) ALARM sensor = thermistor 
cpu0_vid: +2.050 V

Видно, что у нас отрабатывается два модуля — coretemp и w83627ehf (чипсет материнсокй платы). Второй показывает и температуру процессора — поэтому я от первого откажусь, и перезапущу sensors-detect , и добавлю только второй модуль. Уже после этих манипуляций мы получим графики напряжения, оборотов вентиляторов и температуры, но... Как видно некоторые напряжения выдают ALARM — и график напряжений будет выделен красным, как критическая ситуация. Из пяти разъемов вентиляторов я использую только один — fan2, по-хорошему нужно его обозвать CPU Fan и указать ему минимальное количество оборотов, ниже которого мы получим предупреждение. Открываем файл /etc/sensors3.conf и ищем блок нашего чипсета w83627ehf и добавляем строки:

label fan2 "CPU Fan" set fan2_min 2000
label temp2 "CPU Temp"
и температура
set   temp3_over  40
set   temp3_hyst  20

выполняем команду

sensors -s

и видим что нужные нам строчки стали выглядеть так:

CPU Fan: 2057 RPM (min = 2008 RPM, div = 4) 
CPU Temp: +55.0°C (high = +80.0°C, hyst = +75.0°C) sensor = diode

Теперь нужно исключить из мониторинга неиспользуемые датчики и ненужные температуры. Для этого открываем файл /etc/munin/plugin-conf.d/munin-node и добавляем блок:

[sensors_*] 
env.ignore_fan1 yes 
env.ignore_fan3 yes 
env.ignore_fan4 yes 
env.ignore_fan5 yes 
env.ignore_temp1 yes 
env.ignore_temp3 yes

Все, перезапускаем сервис munin-node и смотрим графики. Вот что было до того, как убрали неиспользуемое:

Sens12.png

А вот уже конечный вариант:

Sens22.png

Настройка MongoDB

Munin-configuration-screen-shot-2.png

- mongo_ops : operations/second

- mongo_mem : mapped, virtual and resident memory usage

- mongo_btree : btree access/misses/etc...

- mongo_conn : current connections

- mongo_lock : write lock info

- mongo_docs : number of documents (inserted, updated...)

Requirements

- MongoDB 2.4+

- python/pymongo


Install pymongo:

sudo apt-get install pip
sudo apt-get install build-essential python-dev
sudo pip install pymongo

yum install -y python-pip


Install plugins

git clone https://github.com/comerford/mongo-munin.git /tmp/mongo-munin
sudo cp /tmp/mongo-munin/mongo_* /usr/share/munin/plugins
sudo ln -sf /usr/share/munin/plugins/mongo_btree /etc/munin/plugins/mongo_btree
sudo ln -sf /usr/share/munin/plugins/mongo_conn /etc/munin/plugins/mongo_conn
sudo ln -sf /usr/share/munin/plugins/mongo_lock /etc/munin/plugins/mongo_lock
sudo ln -sf /usr/share/munin/plugins/mongo_mem /etc/munin/plugins/mongo_mem
sudo ln -sf /usr/share/munin/plugins/mongo_ops /etc/munin/plugins/mongo_ops
sudo ln -sf /usr/share/munin/plugins/mongo_docs /etc/munin/plugins/mongo_docs
sudo chmod +x /usr/share/munin/plugins/mongo_*
sudo service munin-node restart

Check if plugins are running:

munin-node-configure | grep "mongo_"

Test plugin output:

munin-run mongo_ops

Настройка fail2ban

Делаем симлинк на файлик плагина

ln -s /usr/share/munin/plugins/fail2ban /etc/munin/plugins/

Редактируем munin-node

vim /etc/munin/plugin-conf.d/munin-node

Добавляя туда

[fail2ban]
env.client /usr/bin/fail2ban-client

Рестартим ноду

/etc/init.d/munin-node restart

Если в логах вылазит ошибка

Error output from fail2ban: Unable to contact server. Is it running?

Отключаем SELinux и вуаля

Be-fail2ban-week.png

Добавление node (клиента для мониторинга)

Мы можем контролировать удаленные хосты на этой программе. Чтобы добавить новый сервер для мониторинга нужно на всех клиентских системах запустить и установить пакет munin-node:

 yum install munin-node -y

Установить то установили, но нужно еще добавить конфигурацию.

 vim /etc/munin/munin-node.conf

Укажите в Munin ваш IP адрес нового сервера:

[...]
host_name your_new_HOST
[...]
allow ^78\.140\.189\.243$
allow ^::1$
[...]

Сохраните и закройте этот файл. Где, your_new_HOST это мой новый клиент — сервер. 78.140.189.243 это мой айпишник на котором висит Munin.

Запустите сервис munin-node в Munin на клиентском сервере:

service munin-node start
chkconfig munin-node on

Затем перейдите к вашему серверу Munin и добавьте имя хоста вашей новой клиент-системы и IP-адрес в конец добавим следующее содержание:

vim /etc/munin/munin.conf

Добавьте следующие строки.

[your_new_HOST]
address your_IP_clients_server
use_node_name yes

Сохраните и закройте. Перезапустите службу Munin. Подождите пару минут (примерно 5 минут) или перезагрузить сервер Munin, чтобы Munin создал необходимые файлы / папки для вашей цели мониторинга.

Автоконфигурация плагинов

munin-node-configure --shell | sh

Munin Bootstrap Template:munin_dynamic_template

github

Munin Bootstrap Template: Munstrap

ОФФ

Selection 203.png

Установка на Red Hat/CentOS

cd /etc/munin 
mv /templates /templates_default 
mv /static /static_default 
git clone https://github.com/jonnymccullagh/munstrap.git 
mv /munstrap/templates 
mv /munstrap/static
cd /var/www/html/munin 
mv static /etc/munin/static_old 
rm -rf /var/www/html/munin/* 
cp -R /etc/munin/static /var/www/html/munin 
chown -R munin:munin /var/www/html/munin/static 
su - munin --shell=/bin/bash 
/usr/bin/munin-cron

Using munin plugins

Installing The default plugin directory is /etc/munin/plugins/.

To install a plugin, place it in the plugin directory, and make it executable.

You can also place the plugin elsewhere, and install a symbolic link in the plugin directory. All the plugins provided with munin are installed in this way.

Configuring The plugin configuration directory is /etc/munin/plugin-conf.d/. The syntax is:

user <username> The user the plugin will run as.

Default: munin

group <groupname> The group the plugin will run as

Default: munin

env.variablename <variable content> Defines and exports an environment variable called “variablename” with the content set to <variable content>.

There is no need to quote the variable content.

Note

When configuring a munin plugin, add the least amount of extra privileges needed to run the plugin. For instance, do not run a plugin with “user root” to read syslogs, when it may be sufficient to set “group adm” instead. Example:

[pluginname]
user             username
group            groupname
env.variablename some content for the variable
env.critical     92
env.warning      95
Plugin configuration is optional.

Testing To test if the plugin works when executed by munin, you can use the munin-run command.

# munin-run myplugin config
# munin-run myplugin


Setting up the mysql_ Plugin in Munin

After spending a few days trying to get the mysql_ plugin working in my munin installation, I’ve decided to write up the process. It include some pointers about troubleshooting and diagnosing problems with the plugin. Once you have munin and mysql working:

# Save this to /etc/munin/plugin-conf.d/mysql_
[mysql_*]
env.mysqlconnection DBI:mysql:mysql;host=127.0.0.1;port=3306
env.mysqluser munin
env.mysqlpassword 5uperS3cr3tPassw0rd


Next, create a new user in mysql:

mysql> CREATE USER munin@127.0.0.1 IDENTIFIED BY '5uperS3cr3tPassw0rd';
mysql> GRANT SUPER,PROCESS ON *.* TO munin@127.0.0.1;
mysql> GRANT SELECT ON mysql.* TO munin@127.0.0.1;
mysql> FLUSH PRIVILEGES;

You may need to install some perl dependencies:

yum install -y perl-Cache-Cache

Now, test that your new user is able to connect to the db thorough munin. You should not see any mysql errors printed here.

munin-node-configure --suggest 2>&1 | grep mysql

Next, install the suggested mysql plugins:

(munin-node-configure --shell 2>&1 | grep mysql | /bin/bash); service munin-node restart

Finally, you can confirm that the plugin is setup and working properly by testing it by running munin-run and telnet:

munin-run mysql_connections
 max_connections.value 151
 Max_used_connections.value 3
 Aborted_clients.value 2
 Aborted_connects.value 1
 Threads_connected.value 3
 Connections.value 36
telnet localhost 4949
Trying 1.2.3.4...
Connected to localhost.
Escape character is '^]'.
# munin node at localhost
 fetch mysql_connections
 max_connections.value 151
 Max_used_connections.value 3
 Aborted_clients.value 2
 Aborted_connects.value 1
 Threads_connected.value 3
 Connections.value 38
 .
 quit
 Connection closed by foreign host.

I was getting errors mentioning “# Bad exit” while using telnet; running munin-run showed the actual error messages.