
Я не могу заставить работать динамический зум Munin. Я почти уверен, что проблема связана с конфигурацией Nginx. Любая попытка сгенерировать увеличенный график вызывает следующую запись об ошибке в журнале nginx:
2015/02/22 13:26:01 [error] 4782#0: *2580 open() "/data/munin/usr/share/munin/cgi/munin-cgi-graph/bellaria/antergos1.bellaria/diskstats_latency/AntergosVG_AntergosRoot-pinpoint=1421756527,1424607727.png" failed (2: No such file or directory), client: 10.10.10.25, server: munin, request: "GET /usr/share/munin/cgi/munin-cgi-graph/bellaria/antergos1.bellaria/diskstats_latency/AntergosVG_AntergosRoot-pinpoint=1421756527,1424607727.png?&lower_limit=&upper_limit=&size_x=800&size_y=400 HTTP/1.1", host: "munin.bellaria", referrer: "http://munin.bellaria/static/dynazoom.html?cgiurl_graph=/usr/share/munin/cgi/munin-cgi-graph&plugin_name=bellaria/antergos1.bellaria/diskstats_latency/AntergosVG_AntergosRoot&size_x=800&size_y=400&start_epoch=1421756527&stop_epoch=1424607727"
В частности, я подозреваю, что что-то не так с параметрами fastCGI. Может ли добрая дружественная душа взглянуть на мой виртуальный сервер Munin (см. ниже) и объяснить мне, в чем проблема? Это сводит меня с ума - но у меня есть предчувствие, что любой эксперт определит проблему за долю секунды...
# Munin server
server {
listen 80;
server_name munin munin.bellaria;
root /data/munin;
allow all;
access_log logs/munin.access.log;
error_log logs/munin.error.log;
location / {
index index.html index.htm index.php;
}
location ~ \.(php|html|html|cgi)$ {
fastcgi_pass unix:/run/php-fpm/php-fpm.sock;
fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
fastcgi_param AUTH_USER $remote_user;
fastcgi_param REMOTE_USER $remote_user;
fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
fastcgi_index index.php;
include fastcgi.conf;
}
location ^~ /cgi-bin/munin-cgi-graph/ {
access_log off;
fastcgi_split_path_info ^(/cgi-bin/munin-cgi-graph)(.*);
fastcgi_param PATH_INFO $fastcgi_path_info;
fastcgi_pass unix:/var/run/munin/fcgi-graph.sock;
include fastcgi_params;
}
}
решение1
Я нашел это, когда искал решение своей проблемы, и это хорошие новости! Я решил свою проблему. Надеюсь, это поможет вам заставить munin работать и на вашей установке.
Требования:
- Клонируйте или загрузите zip-файл с https://github.com/lighttpd/spawn-fcgi
- Приготовьте это:
автопереконфиг -v -i
- Скомпилируйте и установите:
./configure && make && sudo make install
#! /bin/ш ### НАЧАТЬ ИНИЦИАТИВНУЮ ИНФОРМАЦИЮ # Предоставляет: munin-fastcgi # Требуется-Запуск: $remote_fs $network # Требуется-Остановить: $remote_fs $network # Начало по умолчанию: 2 3 4 5 # По умолчанию-Стоп: 0 1 6 # Краткое описание: запускает munin-fastcgi # Описание: Создание сокетов Munin FCGI для доступа в Интернет ### КОНЕЦ НАЧАЛЬНОЙ ИНФОРМАЦИИ # # munin-fastcgi Скрипт запуска для служб Munin CGI # # chkconfig: - 84 15 # описание: Загрузка служб Munin CGI с помощью spawn-cgi # HTML-файлы и CGI. # # Автор: Райан Норбауэр # Изменено: Джеффри Гросенбах http://topfunky.com # Изменено: Дэвид Крмпотик http://davidhq.com # Изменено: Кунь Си http://kunxi.org # Изменено: http://drumcoder.co.uk/ # Изменено: http://uname.pingveno.net/ # Изменено: the_architecht http://iwbyt.com/ ПУТЬ=/usr/local/bin/:/usr/local/sbin:$ПУТЬ DAEMON=$(который порождает-fcgi) FCGI_GRAPH_SOCK=/var/run/munin/fastcgi-munin-graph.sock FCGI_HTML_SOCK=/var/run/munin/fastcgi-munin-html.sock WWW_USER=www-данные FCGI_USER=www-данные FCGI_GROUP=www-данные FCGI_SPAWN_GRAPH=/usr/lib/munin/cgi/munin-cgi-graph FCGI_SPAWN_HTML=/usr/lib/munin/cgi/munin-cgi-html PIDFILE_GRAPH=/var/run/munin/fastcgi-munin-graph.pid PIDFILE_HTML=/var/run/munin/fastcgi-munin-html.pid DESC="Munin FCGI для графиков и HTML" # Корректный выход, если пакет был удален. тест -x $DAEMON || выход 0 тест -x $FCGI_SPAWN_GRAPH || выход 0 тест -x $FCGI_SPAWN_HTML || выход 0 начинать() { $DAEMON -s $FCGI_GRAPH_SOCK -U $WWW_USER -u $FCGI_USER -g $FCGI_GROUP -P $PIDFILE_GRAPH $FCGI_SPAWN_GRAPH 2> /dev/null || echo "Graph уже запущен" $DAEMON -s $FCGI_HTML_SOCK -U $WWW_USER -u $FCGI_USER -g $FCGI_GROUP -P $PIDFILE_HTML $FCGI_SPAWN_HTML 2> /dev/null || echo "HTML уже запущен" } останавливаться() { kill -QUIT `cat $PIDFILE_GRAPH` || echo "Граф не запущен" kill -QUIT `cat $PIDFILE_HTML` || echo "HTML не запущен" } перезапуск() { kill -HUP `cat $PIDFILE_GRAPH` || echo "Невозможно перезагрузить график" kill -HUP `cat $PIDFILE_HTML` || echo "Невозможно перезагрузить HTML" } случай "$1" в начинать) echo "Начало $DESC: " начинать ;; останавливаться) echo "Остановка $DESC: " останавливаться ;; перезапустить|перезагрузить) echo "Перезапуск $DESC: " останавливаться # Одной секунды может быть недостаточно для остановки демона, # если это произойдет, d_start завершится ошибкой (и dpkg прервется, если # пакет обновляется). При необходимости измените тайм-аут. # быть, или изменить d_stop так, чтобы start-stop-daemon использовал --retry. # Обратите внимание, что использование --retry несколько замедляет процесс завершения работы. сон 1 начинать ;; *) echo "Использование: $SCRIPTNAME {start|stop|restart|reload}" >&2 выход 3 ;; есак выход $?
Установите вышеперечисленное /etc/init.d/munin-fcgi
с разрешениями755
/etc/nginx/conf.d/example.com.conf
, добавьте это в server { }
блок. Вы можете изменить разрешенные блоки IP-адресов в соответствии с вашей настройкой. Я сделал это на локальном сервере и хотел, чтобы графики munin были доступны только локально.
местоположение /munin { # псевдоним /var/cache/munin/www; индекс index.html; # включить /etc/nginx/php.conf; # access_log выключен; разрешить 127.0.0.1; разрешить 192.168.0.0/16; отрицать все; } местоположение ^~ /munin-cgi/munin-cgi-graph/ { # если ($uri ~ /munin-cgi/munin-cgi-graph/([^/]*)) { установить $path $1; } fastcgi_split_path_info ^(/munin-cgi/munin-cgi-graph)(.*); fastcgi_param ПУТЬ_ИНФОРМАЦИЯ $fastcgi_path_info; fastcgi_pass unix:/var/run/munin/fastcgi-munin-graph.sock; включить fastcgi_params; } местоположение ^~ /munin-cgi/munin-cgi-html/ { # если ($uri ~ /munin-cgi/munin-cgi-html/([^/]*)) { установить $path $1; } fastcgi_split_path_info ^(/munin-cgi/munin-cgi-html)(.*); fastcgi_param ПУТЬ_ИНФОРМАЦИЯ $fastcgi_path_info; fastcgi_pass unix:/var/run/munin/fastcgi-munin-html.sock; включить fastcgi_params; }
/etc/init.d/munin-fcgi start
и перезагрузите nginx, после чего все готово.ps Я связал папку html munin с папкой моего vhost: ln -s /var/cache/munin/www/ /var/www/example.com/munin -v
.
решение2
Похоже, проблема в определениях в static/dynazoom.html
. В нашей установке есть
form.cgiurl_graph.value = qs.get("cgiurl_graph", "/munin-cgi/munin-cgi-graph");
Я подозреваю, что у вас есть
form.cgiurl_graph.value = qs.get("cgiurl_graph", "/usr/share/munin/cgi/munin-cgi-graph");
Хотя так и должно быть
form.cgiurl_graph.value = qs.get("cgiurl_graph", "/cgi-bin/munin-cgi-graph");
Я все еще убежден, что проблема примерно в этом. Конфигурация nginx выглядит правильно, пока запросы на увеличенные графики начинаются с /cgi-bin/munin-cgi-graph
. Я не вижу, откуда /data/munin/...
это взялось.
Попробуйте запустить приложение в среде, где вы можете отслеживать запросы, отправляемые браузером (Fiddler, Chrome Dev Tools), и увидеть, что на самом деле отправляется.
Вы уверены, что редактируете нужную копию dynazoom? Попробуйте сделать тривиальное видимое изменение, чтобы просто убедиться в этом.
решение3
У меня была похожая проблема на ubuntu 12.04 с munin 2.0.21.
Проверьте, где dynazoom пытается найти munin-cgi-graph.
Вики Мунина говорит:что вам следует настроить ваш nginx fcgi-graph для
location ^~ /cgi-bin/munin-cgi-graph/
В моем случае, когда я исследовал страницу с помощью инструмента разработчика Chrome (вкладка «Сеть»), я обнаружил, что dynazoom пытается извлечь munin-cgi-graph из/munin-cgi/munin-cgi-граф/не из/cgi-bin/munin-cgi-graph/и вместо графика выдается ошибка 404
Поэтому я просто изменил это местоположение в конфигурации nginx:
location ^~ /munin-cgi/munin-cgi-graph/ {
access_log off;
fastcgi_split_path_info ^(/munin-cgi/munin-cgi-graph)(.*);
fastcgi_param PATH_INFO $fastcgi_path_info;
fastcgi_pass unix:/var/run/munin/fcgi-graph.sock;
include fastcgi_params;
}
Похоже, у вас та же проблема: местоположение munin-cgi-graph указано неверно, поэтому запросы браузера отправляются root /data/munin
именно так, как указано в ошибке.
решение4
Что-то, что я хотел добавить к этому разговору. Информация от the_architecht была довольно бесценной, но это то, чего не хватало, по крайней мере, мне.
Используем CentOS 6.8 здесь:
-
1) Изменены пути к файлам CGI, их можно найти через locate:
/var/www/cgi-bin/munin-cgi-graph
/var/www/cgi-bin/munin-cgi-html
Мне пришлось пройтись по строкам в стартовом скрипте, чтобы сравнить местоположения и разбить строки запуска демона, чтобы увидеть, в чем проблема, что позволило мне отследить различия в путях к файлам.
-
2) Разрешения на логи были установлены для пользователя "munin", что вызвало своего рода тихую ошибку. Чтобы решить эту проблему, я добавил пользователя www-data в группу munin и chmod 664 для файлов журналов:
-rw-rw-r-- 1 munin munin 0 Apr 27 20:35 /var/log/munin/munin-cgi-graph.log
-rw-rw-r-- 1 munin munin 0 Apr 27 20:35 /var/log/munin/munin-cgi-html.log
Раздача разрешений на доступ к файлам включалаМунин викидобавление -n в конец процесса spawn-fcgi start и strace -s1024, что привело к ошибке
write(2, "[Чт Апр 27 21:47:35 2017] munin-cgi-html: Невозможно открыть /var/log/munin/munin-cgi-html.log (отказано в доступе) в /usr/share/perl5/vendor_perl/Log/Log4perl/Appender/File.pm строка 103.\n", 180[Чт Апр 27 21:47:35 2017] munin-cgi-html: Невозможно открыть /var/log/munin/munin-cgi-html.log (отказано в доступе) в /usr/share/perl5/vendor_perl/Log/Log4perl/Appender/File.pm строка 103.
Мой окончательный вариант Nginx и spawn-fcgi с моими изменениями представлен ниже:
server {
listen $IP;
server_name $host.example.com;
access_log /var/log/nginx/domlogs/munin-access.log;
error_log /var/log/nginx/domlogs/munin-error.log;
root /var/www/html/munin/;
index index.html;
location / {
auth_basic "Restricted";
# Create the htpasswd file with the htpasswd tool.
auth_basic_user_file /etc/nginx/htpasswd/munin;
}
location ^~ /munin-cgi/munin-cgi-graph/ {
# if ($uri ~ /munin-cgi/munin-cgi-graph/([^/]*)) { set $path $1; }
fastcgi_split_path_info ^(/munin-cgi/munin-cgi-graph)(.*);
fastcgi_param PATH_INFO $fastcgi_path_info;
fastcgi_pass unix:/var/run/munin/fastcgi-munin-graph.sock;
include fastcgi_params;
}
location ^~ /munin-cgi/munin-cgi-html/ {
# if ($uri ~ /munin-cgi/munin-cgi-html/([^/]*)) { set $path $1; }
fastcgi_split_path_info ^(/munin-cgi/munin-cgi-html)(.*);
fastcgi_param PATH_INFO $fastcgi_path_info;
fastcgi_pass unix:/var/run/munin/fastcgi-munin-html.sock;
include fastcgi_params;
}
}
#! /bin/bash
### BEGIN INIT INFO
# Provides: munin-fastcgi
# Required-Start: $remote_fs $network
# Required-Stop: $remote_fs $network
# Default-Start: 2 3 4 5
# Default-Stop: 0 1 6
# Short-Description: starts munin-fastcgi
# Description: Spawn Munin FCGI sockets for Web access
### END INIT INFO
#
# munin-fastcgi Startup script for Munin CGI services
#
# chkconfig: - 84 15
# description: Loading Munin CGI services using spawn-cgi
# HTML files and CGI.
#
# Author: Ryan Norbauer
# Modified: Geoffrey Grosenbach http://topfunky.com
# Modified: David Krmpotic http://davidhq.com
# Modified: Kun Xi http://kunxi.org
# Modified: http://drumcoder.co.uk/
# Modified: http://uname.pingveno.net/
# Modified: the_architecht http://iwbyt.com/
# Modified: Jame Scott - NeCr0mStR
DESC="Munin FCGI for Graph and HTML"
SCRIPTNAME="$(tput setaf 1)Munin-FastCGI$(tput sgr0)"
PATH=/usr/local/bin/:/usr/local/sbin:$PATH
DAEMON=$(which spawn-fcgi)
FCGI_GRAPH_SOCK=/var/run/munin/fastcgi-munin-graph.sock
FCGI_HTML_SOCK=/var/run/munin/fastcgi-munin-html.sock
WWW_USER=www-data
FCGI_USER=www-data
FCGI_GROUP=www-data
FCGI_SPAWN_GRAPH=/var/www/cgi-bin/munin-cgi-graph
FCGI_SPAWN_HTML=/var/www/cgi-bin/munin-cgi-html
PIDFILE_GRAPH=/var/run/munin/fastcgi-munin-graph.pid
PIDFILE_HTML=/var/run/munin/fastcgi-munin-html.pid
# Gracefully exit if the package has been removed.
test -x $DAEMON || exit 0
test -x $FCGI_SPAWN_GRAPH || exit 0
test -x $FCGI_SPAWN_HTML || exit 0
start_graph() {
if [[ $(/bin/ps ax | awk '/munin-cgi-graph$/ {print $1}') ]];then
local RUNNING_PID_GRAPH=$(/bin/ps ax | awk '/munin-cgi-graph$/ {print $1}')
fi
if [[ -s ${PIDFILE_GRAPH} && ${RUNNING_PID_GRAPH} = $(cat ${PIDFILE_GRAPH}) ]];then
echo -e "\nMunin-Graph already running"
elif [[ -n ${RUNNING_PID_GRAPH} && ${RUNNING_PID_GRAPH} != $(cat ${PIDFILE_GRAPH}) && -S ${FCGI_GRAPH_SOCK} ]];then
echo -e "\nMunin-Graph PID mismatch :: Cleaning up and starting Munin-Graph"
kill -QUIT ${RUNNING_PID_GRAPH}
sleep 1
$DAEMON -s $FCGI_GRAPH_SOCK -U $WWW_USER -u $FCGI_USER -g $FCGI_GROUP -P $PIDFILE_GRAPH $FCGI_SPAWN_GRAPH > /dev/null 2>&1
else
$DAEMON -s $FCGI_GRAPH_SOCK -U $WWW_USER -u $FCGI_USER -g $FCGI_GROUP -P $PIDFILE_GRAPH $FCGI_SPAWN_GRAPH > /dev/null 2>&1
echo -e "Starting Munin-Graph\n"
fi
}
start_html() {
if [[ $(/bin/ps ax | awk '/munin-cgi-html$/ {print $1}') ]];then
local RUNNING_PID_HTML=$(/bin/ps ax | awk '/munin-cgi-html$/ {print $1}')
fi
if [[ -s ${PIDFILE_HTML} && ${RUNNING_PID_HTML} = $(cat ${PIDFILE_HTML}) ]];then
echo -e "\nMunin-HTML already running"
elif [[ -n ${RUNNING_PID_HTML} && ${RUNNING_PID_HTML} != $(cat ${PIDFILE_HTML}) && -S ${FCGI_HTML_SOCK} ]];then
echo -e "\nMunin-HTML PID mismatch :: Cleaning up and starting Munin-HTML"
kill -QUIT ${RUNNING_PID_HTML}
sleep 1
$DAEMON -s $FCGI_HTML_SOCK -U $WWW_USER -u $FCGI_USER -g $FCGI_GROUP -P $PIDFILE_HTML $FCGI_SPAWN_HTML > /dev/null 2>&1
else
$DAEMON -s $FCGI_HTML_SOCK -U $WWW_USER -u $FCGI_USER -g $FCGI_GROUP -P $PIDFILE_HTML $FCGI_SPAWN_HTML > /dev/null 2>&1
echo -e "Starting Munin-HTML\n"
fi
}
stop_graph() {
if [[ $(/bin/ps ax | awk '/munin-cgi-graph$/ {print $1}') ]];then
local RUNNING_PID_GRAPH=$(/bin/ps ax | awk '/munin-cgi-graph$/ {print $1}')
fi
if [[ -s ${PIDFILE_GRAPH} && $(cat ${PIDFILE_GRAPH}) = ${RUNNING_PID_GRAPH} ]];then
kill -QUIT $(cat ${PIDFILE_GRAPH})
echo -e "\nMunin-Graph stopped"
elif [[ -z ${RUNNING_PID_GRAPH} && -s ${PIDFILE_GRAPH} ]];then
echo -e "\nGraph PID not found :: Cleaning up PID file"
rm ${PIDFILE_GRAPH}
elif [[ -s ${PIDFILE_GRAPH} && $(cat ${PIDFILE_GRAPH}) != ${RUNNING_PID_GRAPH} ]];then
kill -QUIT ${RUNNING_PID_GRAPH}
rm ${PIDFILE_GRAPH}
echo -e "\nMunin-Graph stopped :: Cleaning up PID file"
else
echo -e "\nNo Munin-Graph process found"
fi
}
stop_html() {
if [[ $(/bin/ps ax | awk '/munin-cgi-html$/ {print $1}') ]];then
local RUNNING_PID_HTML=$(/bin/ps ax | awk '/munin-cgi-html$/ {print $1}')
fi
if [[ -s ${PIDFILE_HTML} && $(cat ${PIDFILE_HTML}) = ${RUNNING_PID_HTML} ]];then
kill -QUIT $(cat ${PIDFILE_HTML})
echo -e "\nMunin-HTML stopped"
elif [[ -z ${RUNNING_PID_HTML} && -s ${PIDFILE_HTML} ]];then
echo -e "\nHTML PID not found :: Cleaning up PID file"
rm ${PIDFILE_HTML}
elif [[ -s ${PIDFILE_HTML} && $(cat ${PIDFILE_HTML}) != ${RUNNING_PID_HTML} ]];then
kill -QUIT ${RUNNING_PID_HTML}
rm ${PIDFILE_HTML}
echo -e "\nMunin-HTML stopped :: Cleaning up PID file"
else
echo -e "\nNo Munin-HTML process found"
fi
}
case "$1" in
start)
echo "Starting $DESC: "
start_graph
start_html
;;
start_graph)
echo "Starting Munin-Graph"
start_graph
;;
start_html)
echo "Starting Munin-HTML"
start_html
;;
stop_graph)
echo "Stopping Munin_Graph"
stop_graph
;;
stop_html)
echo "Stopping Munin-HTML"
stop_html
;;
stop)
echo "Stopping $DESC: "
stop_graph
stop_html
;;
restart|reload)
echo "Restarting $DESC: "
stop_html
stop_graph
# One second might not be time enough for a daemon to stop,
# if this happens, d_start will fail (and dpkg will break if
# the package is being upgraded). Change the timeout if needed
# be, or change d_stop to have start-stop-daemon use --retry.
# Notice that using --retry slows down the shutdown process somewhat.
sleep 5
start_graph
start_html
;;
*)
echo "$(tput setaf 2)Usage: $SCRIPTNAME $(tput setaf 7)$(tput setab 0){start_graph|start_html|stop_graph|stop_html|start|stop|restart|reload}$(tput sgr0) " >&2
exit 3
;;
esac
exit $?