Мониторинг логов nginx через munin?

12
D
На сайте с 28.06.2008
Offline
1104
1030

Хотелось бы иметь график кол-ва запросов в единицу времени в указанных мной логах Nginx.

Сам такое не напишу, пожет есть у кого подобное творение?

НЕоднократно бывало видишь через тот же мунин что на сервер пошел аномальный траф, а куда именно (на какой сайт) нужно время чтобы понять, а так бы глянул на график и все понятно.

Поделитесь плиз, если есть у кого подобные наработки.

---------- Добавлено 24.12.2019 в 21:15 ----------

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

baas
На сайте с 17.09.2012
Offline
168
#1

Что значить в единицу времени?

За секунду что ле?

Настройка BSD систем. (https://www.fryaha.ru) Знание сила, незнание Рабочая сила!
D
На сайте с 28.06.2008
Offline
1104
#2

Не ну мунин же по дефолту обновляет графики раз в 5 минут? ВОт и было бы прикольно смотреть сколько запросов поступило на разные сайты за эти 5 минут.

baas
На сайте с 17.09.2012
Offline
168
#3
Dram:
Не ну мунин же по дефолту обновляет графики раз в 5 минут? ВОт и было бы прикольно смотреть сколько запросов поступило на разные сайты за эти 5 минут.

Он показывает средний показатель за 5 минут.

Для таких целей попробуйте какти или заббикс.

D
На сайте с 28.06.2008
Offline
1104
#4

Зачем ставить что-то лишнее, если можно и мунин научить показывать то что нужно.

baas
На сайте с 17.09.2012
Offline
168
#5
Dram:
Зачем ставить что-то лишнее, если можно и мунин научить показывать то что нужно.

Хмм, будет интересно увидеть решение на мунин, так как тоже им пользуюсь.

N
На сайте с 06.05.2007
Offline
419
#6
baas:
Он показывает средний показатель за 5 минут.

А там несколько типов графиков.

Нужно определить значение, например, в bash так:

echo 'normal.info normal'

echo 'normal.type ABSOLUTE'

echo 'normal.label normal req/sec'

чтобы потом подсчитывать , например, вызывая программу logtail2 :

echo -n "normal.value "

logtail2 -f /var/log/nginx/error.log -o /tmp/munin-debug | grep nowait | wc -l

Используя ключ -t в программе logtail2, можно в одном плагине несколько раз пройтись по куску лога и посчитать разные события.

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

Этой информации должно хватить.

Кнопка вызова админа ()
D
На сайте с 28.06.2008
Offline
1104
#7

написал 3 скрипта, выводящий кол-во ответов разного типа 200, 503 и 404

#!/bin/bash
export LC_ALL=en_US.UTF-8
export LC_NUMERIC=C
if [ -z "$1" ]
then
MNT="5"
else
MNT="$1"
fi
CNT="10"
TMS="$(date +%s)"
STR=""
STX=""
let "SEK = MNT * 60"
let "EXP = TMS - SEK"
while :
do
STR="$STR$STX$(date -d @$EXP +'%d/%h/%Y:%H:%M')"
let "EXP = EXP + 60"
STX="|"
if [ "$EXP" == "$TMS" ]
then
break
fi
done
echo "$(cat /var/log/nginx/access.1.1.log | grep -E $STR | awk '{if ($9=="404") {print sort}}' | sort -n | uniq -c | sort -nr | head -n$CNT)"

Далее написал плагин Мунина

#!/bin/bash
if [ "$1" = "config" ]; then
echo 'graph_title M-log 1.1'
echo 'graph_vlabel Nxinx_log'
echo 'graph_category nginx'
echo 'graph_period minute'
echo 'graph_info This graph shows server response codes.'
echo 'graph_scale no'
exit 0
fi
echo "200" $(/usr/share/munin/plugins/muninlog/m1.1.200.sh)
echo "503" $(/usr/share/munin/plugins/muninlog/m1.1.404.sh)
echo "404" $(/usr/share/munin/plugins/muninlog/m1.1.503.sh)

В конфиг мунин-нод прописал

[m_log_1]
user root

Сделал символьную ссылку, переопределил права на скрипты и плагин, перезагрузил ноду. График появился, но данных на нем нет.

Проверю работу плагина

sudo munin-run m_log_1

получаю


200 140
503 3
404 14

плагин вроде работает, так почему данные на график не рисуются? ГДе ошибся?

в логе

3 lines had errors while 0 lines were correct (100.00%) in data from
D
На сайте с 28.06.2008
Offline
1104
#8

Убрал скрипты, все собрал в одном файле плагина

#!/bin/bash

if [ "$1" = "config" ]; then
echo 'graph_title M-log 1.1'
echo 'graph_vlabel Nxinx_log'
echo 'graph_category nginx'
echo 'graph_period minute'
echo 'graph_info This graph shows server response codes.'
echo 'graph_scale no'
exit 0
fi

export LC_ALL=en_US.UTF-8
export LC_NUMERIC=C
if [ -z "$1" ]
then
MNT="5"
else
MNT="$1"
fi
CNT="10"
TMS="$(date +%s)"
STR=""
STX=""
let "SEK = MNT * 60"
let "EXP = TMS - SEK"
while :
do
STR="$STR$STX$(date -d @$EXP +'%d/%h/%Y:%H:%M')"
let "EXP = EXP + 60"
STX="|"
if [ "$EXP" == "$TMS" ]
then
break
fi
done
cat /var/log/nginx/access.1.1.log | grep -E $STR | awk '{if ($9=="503") {print ""}}'| uniq -c$CNT

Но в логе по прежнему ошибка

[WARNING] 1 lines had errors while 0 lines were correct (100.00%) in data from

Не нравится ему последняя строка плагина, хотя через консоль он работает.

N
На сайте с 06.05.2007
Offline
419
#9

Dram, ну что такое? там разве примеров плагинов мало или лога нет?

Прежде чем обрабатывать строчки значений, он еще обработает вывод от первого запуска config. Наверное, там тоже ошибки.

попробуй имя значения другое выбрать. "200" - выглядит не так как обычно называют идентификаторы. в моем примере значение называлось normal.

Я бы попробовал "code_200".


cat /var/log/nginx/access.1.1.log | grep -E $STR | awk '{if ($9=="503") {print ""}}'| uniq -c$CNT

очень неэффективно. Каждый раз сначала файл читать?

Программа logtail2 отлично решает задачу постепенной обработки логов и я привел пример скрипта, который использует logtail2.

Вот я нагуглил готовый плагин:

https://github.com/GerritDamen/munin-apache-status-codes/blob/master/apache_status_codes

D
На сайте с 28.06.2008
Offline
1104
#10

netwind, спасибо, этот плагин заработал, буду адаптировать его под себя!

12

Авторизуйтесь или зарегистрируйтесь, чтобы оставить комментарий