INT 21h

Hi, I am Vladimir Smagin, sysadmin. Telegram Email GPG

Разбор логов nginx моментально при их поступлении, без парсинга файлов

№ 9038 В разделах: Администрирование Программирование от June 16th, 2018,

Захотел я выцеплять ботов, которые небрежно и наплевав на все разумные robots.txt сканят мой драгоценный няшный говноблог. Штатный живой мониторинг nginx доступен только в платной plus версии, а socket file работает только для syslog. Выход все же есть как завернуть лог через вашу программу разбора и называется он named pipes. Это штатная линуксовая фишка как раз для таких извращенцев как я.

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

import os
import errno

FIFO = '/run/nginx-detect-bots.pipe'

try:
    os.mkfifo(FIFO)
except OSError as oe: 
    if oe.errno != errno.EEXIST:
        raise

while True:
    with open(FIFO) as fifo:
        print("Listening log file")
        while True:
            data = fifo.readline()
            if len(data) == 0:
                # stop cycle if no data
                #break
                pass
            else:
                # here your code
                print(data)

Теперь добавляем дополнительную строку в nginx

        ##
        # Logging Settings
        ##

        access_log /var/log/nginx/access.log;
        access_log /run/nginx-detect-bots.pipe;
        error_log /var/log/nginx/error.log;

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

Мой готовый код для выцепляния IP адресов и их юзер агентов https://bitbucket.org/21h/nginx-detect-bots

Тут вы можете скачать собранные данные в CSV формате за все время, начиная с даты этого поста. Данные обновляются моментально, подходит для запихивания в cron.

Нет комментариев »

Zabbix: nginx stub_status monitoring

№ 9029 В разделе "Администрирование" от June 15th, 2018,

In your server section:

    location / {
        allow 127.0.0.1; #allow only local agent
        deny all;
        stub_status on;
        access_log off;
    }

In zabbix_agentd.d/nginx.conf:

UserParameter=nginx.active[*],wget -O- -q $1 | awk '/^Active/ {print $NF}'
UserParameter=nginx.reading[*],wget -O- -q $1 | awk '/Reading/ {print $$2}'
UserParameter=nginx.writing[*],wget -O- -q $1 | awk '/Writing/ {print $$4}'
UserParameter=nginx.waiting[*],wget -O- -q $1 | awk '/Waiting/ {print $$6}'
UserParameter=nginx.accepted[*],wget -O- -q $1 | awk '/^[ \t]+[0-9]+[ \t]+[0-9]+[ \t]+[0-9]+/ {print $$1}'
UserParameter=nginx.handled[*],wget -O- -q $1 | awk '/^[ \t]+[0-9]+[ \t]+[0-9]+[ \t]+[0-9]+/ {print $$2}'
UserParameter=nginx.requests[*],wget -O- -q $1 | awk '/^[ \t]+[0-9]+[ \t]+[0-9]+[ \t]+[0-9]+/ {print $$3}'

Нет комментариев »

Ну, привет

№ 9026 В разделе "Смехуечки" от June 11th, 2018,

Нет комментариев »

Яндекс.Метрика