логи nginx для redis в logstash

Я хочу отправить файлы журнала nginx (на одном сервере) в redis (на 2-м сервере), чтобы позже обработать его с помощью logstash (на 3-м сервере), но я как бы потерялся

Я использую redis в качестве буфера, чтобы не потерять данные в случае, если сервер logstash отключится для обслуживания или по любой другой причине.


person Mahmoud Adel Farid    schedule 11.10.2016    source источник
comment
Можете ли вы добавить свой код / ​​конфигурацию?   -  person Athafoud    schedule 11.10.2016


Ответы (4)


Вот как я решил это, я заставил nginx регистрироваться на сервере системного журнала и из syslog-ng в redis вот моя конфигурация в директиве nginx http

log_format xxx_log_format '$remote_addr - $remote_user [$time_local] '
                       '"$request" $status $bytes_sent '
                       '"$http_referer" "$http_user_agent" "$gzip_ratio"';

в директиве nginx server

access_log syslog:server=127.0.0.1:601 xxx_log_format;

в конфигурации syslog-ng

source s_syslog {
    udp(
        port(601)
    );
};

destination d_redis {
    redis(
        host("REDIS-IP")
        port(6379)
        command("LPUSH", "access_logs", "${MESSAGE}")
    );
};

log {
    source(s_syslog);
    destination(d_redis);
};
person Mahmoud Adel Farid    schedule 18.09.2017

Взгляните на документацию, там есть пример управления пиками с очередью сообщений:

https://www.elastic.co/guide/en/logstash/current/deploying-and-scaling.html#deploying-message-queueing.

Плагины ввода и вывода Logstash должны помочь.

person Janusz    schedule 11.10.2016

Я использую небольшой экземпляр logstash для получения событий и записи их в redis, а затем второй для чтения из redis, выполнения всей магической обработки и записи в elasticsearch.

Я отправляю только те события, которые обычно могут быть потеряны, первому экземпляру - syslog, snmptrap и т. Д. (Где отправитель просто слепо отправляет события). Я отправляю трафик filebeat непосредственно второму экземпляру logstash, так как filebeat перестанет отправлять, если он не работает. (Пока logstash не отключается во время ротации файла журнала на стороне клиента, все будет в порядке).

person Alain Collins    schedule 11.10.2016

если вы хотите регистрировать redis в реальном времени, вы можете использовать модуль redis для nginx - https://www.nginx.com/resources/wiki/modules/redis2/

если вы хотите просто отложить вызов redis в фоновом режиме, чтобы сохранить быстрое время отклика - используйте невыполненную директиву nginx под названием post_action - погуглите.

Это на тот случай, если вы не доверяете logstash и хотите решить эту проблему с помощью redis.

Я могу предложить альтернативы, на которые вы можете взглянуть:

  1. Плагин вывода fluentd Redis и любой другой плагин, который вам нужен, например, эластичный (аналогично logstash)
  2. вы можете сделать ротацию журнала nginx примерно через час или около того и сравнить его с выводом, скопированным из выходного плагина fluentd или logstash куда угодно (например, s3), и каким-то образом сделать разницу (на основе часов в файле журнала, используя sort и comm linux commannds или emr или athena), тогда вы можете зарегистрировать разницу, отправленную обратно на любую нужную цель, например logtash, fluentd или elk.
person naviram    schedule 16.09.2017