Три способа передачи логов nginx на Graylog

Моя цель - предложение широкого ассортимента товаров и услуг на постоянно высоком качестве обслуживания по самым выгодным ценам.

Итак, я предполагаю, что graylog у Вас уже есть. Если нет, здесь на Хабре есть годное описание. Только внимательно следите за версиями компонентов Graylog, ElasticSearch, MongoDB и нужной версией Java.

Способ 1. Graylog Sidecar и Filebeat. Описание установки на Хабре. Только учтите, nginx новых версий может выдавать логи в json сам. В статье много полезного и красивого, рекомендую. Плюсом sidecar является то, что он может управлять разными агентами, а не только Filebeats. Конечно, Filebeats может сам проводить предварительную обработку. Но тут уж зависит от стратегии. Или обработать, потом слать на Graylog, или все слать, потом обрабатывать.

Способ 2. В отличие от предыдущего, он не требует агента. Это content pack Graylog https://marketplace.graylog.org/addons/572ff823-62cc-468e-af17-300bcfd9932d, этот помечен как "deprecated", рекомендован https://github.com/ronlut/graylog-content-pack-nginx-docker. Собственно, это *.json файлы, которые грузятся через меню веб-интерфейса System/Content Pack. Подробнее. Суть в том, что вы задаете формат лога, а затем место назначения: Пример nginx.conf (или в другом *conf)

Спойлер

log_format graylog2_json escape=json '{ "timestamp": "$msec", ' '"remote_addr": "$remote_addr", ' '"body_bytes_sent": $body_bytes_sent, ' '"request_time": $request_time, ''"response_status": $status, ''"request": "$request",'

'"request_method": "$request_method",'

'"host": "$host",''"upstream_cache_status": "$upstream_cache_status",'

'"upstream_addr": "$upstream_addr",' '"http_x_forwarded_for": "$http_x_forwarded_for",' '"http_referrer": "$http_referer", ' '"http_user_agent": "$http_user_agent", ' '"http_version": "$server_protocol", ' '"nginx_access": true }';

access_log /var/log/nginx/access.log graylog2_json;

error_log /var/log/nginx/error.log warn;

Способ 3. Тоже безагентский. Перенаправление в syslog. Собственно, вообще ничего добавлять не надо. В nginx.cong

error_log syslog:server=unix:/dev/log,facility=local7,tag=vhost1_err,severity=error;

access_log syslog:server=unix:/dev/log,facility=local7,tag=vhost1,nohostname,severity=info combined;

Обратите внимание передача идет в local7, tag=vhost1. "Tag" в Graylog будет отражаться в "application name".

rsyslog.conf

#replace glsrv with actual central log server

local7.* @@glsrv:10514;RSYSLOG_SyslogProtocol23Format

$ sudo systemctl restart rsyslog

Почему @@ - TCP, а не @ - UDP - немного позже. Порт 10514, хотя для TCP обычно 5044. Это все равно. Да, /var/log/syslog (/var/log/messages) будет разукрашен сообщениями веб-сервера. Подключаем как обычный SystogTCP.

Если установлен TCP, то можно включить TLS. И rsyslog и Graylog его понимают. Чтобы не дублировать инструкцию здесь, вот ссылка на GitHub. Там есть русская инструкция(README.RUS.md). Набор скриптов позволит автоматизировать генерацию сертификатов и конфигов для ускорения установки TLS.

Источник: https://habr.com/ru/post/588236/


Интересные статьи

Интересные статьи

Решения для больших компаний обычно должны выдерживать высокие нагрузки. Когда в штате много десятков тысяч человек, и значительная доля из них ежедневно пользуются ...
Минфин России совместно с Федеральной Налоговой службой подготовили разъяснения по поводу налогового маневра в IT отрасли. Содержание 6-страничного документа сведено в т...
Journalctl — отличный инструмент для анализа логов, обычно один из первых с которым знакомятся начинающие администраторы linux систем. Встроенные возможности ротации, богатые возможно...
Но если для интернет-магазина, разработанного 3–4 года назад «современные» ошибки вполне простительны потому что перед разработчиками «в те далекие времена» не стояло таких задач, то в магазинах, сдел...
Автор: Андрей Пинчук | Certified Senior AEM Developer Представьте ситуацию: вы спокойно спите и видите свой третий сон, как вдруг раздается телефонный звонок — недовольный клиент жалуется, чт...