пятница, 9 мая 2014 г.

Munin: Processes memory monitoring plugin

Мне тут потребовалось мониторить память процессов определенных по списку. В Solaris.

Я очень уважаю Munin. Это отличная и настраиваемая штука под большинство систем. Для тех, кто не боится скриптов. Он даже есть в Opencsw.

Однако входящий в состав multips_memory не работает на Solaris. Никак.

Пришлось провести поиски контрибьюторских плагинов. Я нашел много хлама - но ничего рабочего.

Пришлось писать самостоятельно. Попутно выяснилось, что GNU ps и ps большинства юниксов - это две огромные разницы.

В финале каторжных интеллектуальных трудов родился плагин, работающий под большинством *NIX.


#!/bin/bash
#
# (c) 2010, Rodrigo Sieiro
# Based on the 'du_multidirs' plugin, written by Christian Kujau
# Modified for Solaris by Y.Voinov (c) 2014
# Will be work on most *nix, not only Linux.
#
# Note 1: Processes will search by comm column of ps utility.
# So, if you need monitor single process, set it up in config as
# full command line (grep uses).
# Note 2: We use bash. With born script got an error.
#
# Configure it by using the processes env var,and
# mode - set to rss or vsz (for vsize)
#
# [proc_mem]
# env.processes munin-node httpd sbin/squid squidguard unbound
# env.mode vsz
#

. $MUNIN_LIBDIR/plugins/plugin.sh

if [ "$1" = "autoconf" ]; then
echo yes
exit 0
fi

# Defaults if no configuration
processes=${processes:="munin-node"}
mode=${mode:="rss"}


if [ "$1" = "config" ]; then
echo 'graph_title Memory usage by process'
echo 'graph_args --base 1024 -l 0'
echo 'graph_vlabel Bytes'
echo 'graph_category processes'
echo 'graph_info This graph shows the memory usage of several processes'

for proc in $processes; do
echo "$proc.label $proc"
done
exit 0
fi

for proc in $processes; do
echo "$proc.value " `ps -eo $mode,comm | grep $proc | grep -v grep | awk 'BEGIN { sum = 0 } NR >= 1 { sum += $1 }; END { print sum * 1024 }'`
done

Скрипт простейший. Для его работы также пришлось исправить plugins.sh - в нем отсутствовал заголовок !#/bin/bash, кроме того, мне не удалось заставить все это работать на Борне - пришлось оставить шеллом Баш.

Скачать плагин, для не желающих копипастить, можно отсюда: proc_mem.

Для него требуется конфигурация в plugins.conf:

[proc_mem]
env.processes httpd sbin/squid squidGuard squidclamav clamd unbound tor
env.mode vsz


Список процессов (надо задавать уникальное выражение для имени процесса, поскольку для поиска используется grep) и режим мониторинга - rss либо vsz (vsize), по умолчанию используется rss. Для Solaris 10 надо задавать vsize - проверяется посредством процессных утилит системы, размер rss менее точно показывает реальную память процессов. Данный плагин написан максимально универсально и будет работать практически на всех *NIX-системах, в которых установлен Bash.

Вуаля:


Пользуйтесь.