Назад | Перейти на главную страницу

Странная расширенная информация о веб-интерфейсе Nagios

Ниже приведены снимки экрана, когда я нажимаю на любую расширенную информацию о службе / хосте:

Странная информация вверху:

Содержание строки начинается с __gmon_start_libc.so...:

__gmon_start__libc.so.6fflushstrcpy__rawmemchrgmtime_rexitreaddirfopenstrrchr__strdupclosedirstrncpyputsputcharreallocstdinstrpbrklocaltime_rgmtimestrtokmmapfgetscallocstrlenmemsetstrstr__errno_locationstdoutmemcpyfcloserand__strtol_internalmallocstrcatstrcasecmpasprintfopendirgetenvsscanfsystemmunmapstrncasecmp__fxstatstrncatfreadlocaltimestrchrmktimeqsort__strtod_internal__ctype_toupper_loc__ctype_tolower_loc__xstatstrcmpstrerror__libc_start_mainsnprintf__strtoul_internalfreeGLIBC_2.3GLIBC_2.2.5

и меню с плохим форматированием внизу:

Щелкните любую служебную команду, она ответит "ошибка 400, неверный запрос" ошибка.

Конфигурация в Apache:

<VirtualHost *:80>
    ScriptAlias /nagios/cgi-bin "/usr/local/nagios/sbin"
    ServerName      xx
    ErrorLog    logs/nagios.error_log
    <Directory "/usr/local/nagios/sbin">
       Options ExecCGI
       AllowOverride None
       Order allow,deny
       Allow from all
    </Directory>

    Alias /nagios "/usr/local/nagios/share"

    <Directory "/usr/local/nagios/share">
       Options None
       AllowOverride None
       Order allow,deny
       Allow from all
    </Directory>
</VirtualHost>

В журнале ошибок Apache нет ничего, связанного с этим.

Я обновился до последней версии 3.3.1:

nagios -v

Nagios Core 3.3.1
Copyright (c) 2009-2011 Nagios Core Development Team and Community Contributors
Copyright (c) 1999-2009 Ethan Galstad
Last Modified: 07-25-2011
License: GPL

но остается.

Разрешение extinfo.cgi:

-rwxrwxr-x 1 nagios nagios 285528 Sep 15 17:52 extinfo.cgi

На что мне следует обратить внимание в первую очередь, чтобы отладить этот случай?


ОБНОВИТЬ

Я добавил ScriptLog директива для виртуального хоста nagios:

ScriptLog logs/cgi_log

Этот файл создан и chmod вручную:

-rw-r--r-- 1 apache apache 0 Sep 20 11:46 /var/log/httpd/cgi_log

Перейдите в браузер, чтобы воспроизвести эту ошибку, но журнал пуст. Есть у кого-нибудь еще идея?


ОБНОВЛЕНИЕ 2

Вот это выход при запуске extinfo.cgi из командной строки как apache пользователь:

# REQUEST_METHOD=GET QUERY_STRING="?type=2&host=149&service=Disk_Free" REMOTE_USER="quanta" ./extinfo.cgi

ОБНОВЛЕНИЕ 3

Вы упомянули другие работающие CGI, они тоже называются .cgi?

Конечно. Все остальные скрипты .cgi в /usr/local/nagios/sbin/ работают нормально. Например status.cgi:

Как вы настроили ScriptLog, вы должны печатать информацию.

Но этого не произошло. Этот файл журнала пуст.

-rw-r--r-- 1 apache apache 0 Sep 20 11:46 /var/log/httpd/cgi_log

Похоже, у вас отключен AllowOverride для этого каталога, но, возможно, конфигурация apache позволяет использовать его для других каталогов выше? В этом случае убедитесь, что вы не отключили ExecCGI или у вас есть файлы .htaccess в любом каталоге выше sbin nginx.

Здесь нет .htaccess файл в /usr/local/nagios. Я также сравнил эту конфигурацию с другим работающим файлом, существенной разницы нет:

ScriptAlias /nagios/cgi-bin "/usr/lib64/nagios/cgi"

<Directory "/usr/lib64/nagios/cgi">
   Options ExecCGI
   AllowOverride None
   Order allow,deny
   Allow from all
   AuthName "Nagios Access"
   AuthType Basic
   AuthUserFile /etc/nagios/htpasswd.users
   Require valid-user
</Directory>

Alias /nagios "/usr/share/nagios"

<Directory "/usr/share/nagios">
   Options None
   AllowOverride None
   Order allow,deny
   Allow from all
   AuthName "Nagios Access"
   AuthType Basic
   AuthUserFile /etc/nagios/htpasswd.users
   Require valid-user
</Directory>

Если это не сработает, я бы увеличил уровень журнала apache:

Я сделал это, но в журнале ошибок нет ничего, связанного с cgi:

proxy_util.c(1873): proxy: worker proxy:reverse already initialized
proxy_util.c(1967): proxy: initialized single connection worker 0 in child 3586 for (*)
proxy_util.c(1854): proxy: grabbed scoreboard slot 0 in child 3587 for worker proxy:revers

proxy_util.c(1873): proxy: worker proxy:reverse already initialized
proxy_util.c(1967): proxy: initialized single connection worker 0 in child 3587 for (*)

Если ничто из этого не указывает на проблему, я бы, вероятно, столкнулся с apache после того, как настроил его на запуск только одного дочернего элемента и просмотр выходных данных рабочего CGI по сравнению с неработающим CGI, чтобы увидеть, в чем проблема.

Хорошая точка зрения. Я приложил сюда файлы strace.

Отслеживать только открытые файлы:

strace -e trace=open -o /tmp/*.strace /usr/sbin/httpd -X

Трассировка полная:

strace -o /tmp/*.strace /usr/sbin/httpd -X

Посмотрите, сможете ли вы помочь.

Если вы переименуете extinfo.cgi, он будет работать под другим именем? Если сценарий будет выполнен после переименования, скорее всего, некоторые части вашей конфигурации Apache обрабатывают extinfo.cgi имя каким-то непреднамеренным образом. Например, в /etc/httpd/conf.d/satisfy.conf у тебя есть:

<LocationMatch "/info(1|2).php">

Этот раздел будет фактически применяться ко всем запросам, которые содержат совпадающую часть везде в URL-адресе (поскольку шаблон регулярного выражения не привязан). Например, это применимо к /info1.php, /some/dir/info2.php, /dir/info1_php_anything/and/more (обратите внимание, что точка в регулярном выражении соответствует любому символу, вам нужно написать \. чтобы соответствовать буквальной точке). Также, Location и LocationMatch разделы всегда применяются на последнем шаге и отменяют все остальное (.htaccess, Directory, Files) и разделы вне VirtualHost определение применяется ко всем виртуальным хостам.

Если ваши файлы конфигурации содержат другие похожие небрежные LocationMatch шаблоны, возможно, некоторые из них совпадают /nagios/cgi-bin/extinfo.cgi и прервать обработку CGI только для этого конкретного имени скрипта.

В ScriptAlias директива предоставляется mod_alias, но файлы в каталогах, отмеченных этой директивой, обрабатываются mod_cgi.

Проверьте, если ваш mod_cgi правильно загружен.

Я почти уверен, что это проблема конфигурации, вероятно, связанная с AddHandler. Вывод, который вы предоставили как @Vladimir Blaskov, также указывает на то, что apache не думает, что это cgi. Вы упомянули другие работающие CGI, они тоже называются .cgi? Или они просто находятся в каталоге, который разрешает ExecCGI без суффикса? Также из документов:

http://httpd.apache.org/docs/current/mod/mod_cgi.html

http://httpd.apache.org/docs/2.0/howto/cgi.html#configuring

Как вы настроили ScriptLog, вы должны печатать информацию. Если бы я был в вашей ситуации, я бы проверил пару вещей:

Убедитесь, что у вас есть действующий AddHandler:

http://httpd.apache.org/docs/current/mod/mod_mime.html#addhandler

для .cgi или проверьте, что другие .cgi работают в том же каталоге, что и extinfo.cgi.

Похоже, что у вас отключен AllowOverride для этого каталога, но, возможно, конфигурация apache позволяет это для других каталогов выше? В этом случае убедитесь, что вы не отключили ExecCGI или у вас есть файлы .htaccess в любом каталоге выше sbin nginx.

Если это не сработает, я бы увеличил уровень журнала apache:

http://httpd.apache.org/docs/2.0/mod/core.html#loglevel

LogLevel debug

затем посмотрите, печатает ли это что-нибудь, связанное с тем, почему этот файл или каталог не обрабатывается как CGI.

Если ничто из этого не указывает на проблему, я бы, вероятно, столкнулся с apache после того, как настроил его на запуск только одного дочернего элемента и просмотр выходных данных рабочего CGI по сравнению с неработающим CGI, чтобы увидеть, в чем проблема. Этот вид теста может выявить, если, возможно, есть проблема конфигурации с журналированием, так что apache не может записывать полезные сообщения в журнал CGI, рассказывающие нам, почему он отказывается играть в мяч. Надеюсь, вы не дойдете до этой части, прежде чем исправите ее, если вы это сделаете, мне будет действительно любопытно, что показала диагностика.