Мне нужно прочитать файл nginx access_log и отправить данные в HTTP-сервер, когда строка содержит «какое-то выражение». Это часть задачи выставления счетов за скачанные файлы через nginx. access_log
.
Nginx хранит логи в /var/log/nginx/access.log
В формате загрузки:
log_format download '{ "remote_addr": "$remote_addr", "time": "$time_local", "request": "$request", "traffic": $body_bytes_sent, "x_forwarded_for": "$http_x_forwarded_for" }';
Rsyslog смотреть этот файл (/etc/rsyslog.conf
).
module(load="imfile" PollingInterval="10")
input(type="imfile"
File="/var/log/nginx/access.log"
Tag="nginx-access"
Severity="info"
Facility="local3")
Мне нужна помощь с модулем rsyslog omhttp. Как настроить для:
:msg, contains, "expression"
Правильный ответ - использование syslog-ng
вместо того syslog
Часть конфигурации, выполняющей эту работу:
destination d_http {
http(
url("http://127.0.0.1/api/billing")
method("POST")
body("$(format-json message=$MESSAGE)")
);
};
log {
source(s_src);
filter { program("nginx") and message("download\/ogg") };
destination(d_http);
};
В Rails нужен патч обезьяны:
JSON.parse(JSON.parse(request.raw_post)['message'])['request'] => "POST /api/subscriptions/downloads/billing HTTP/1.0"