rsyslog:解析 nginx 访问日志并通过 omhttp 发送到后端

rsyslog:解析 nginx 访问日志并通过 omhttp 发送到后端

我需要读取 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 模块的帮助。如何配置它:

答案1

正确答案是使用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 中需要一些 monkey patch:

JSON.parse(JSON.parse(request.raw_post)['message'])['request'] => "POST /api/subscriptions/downloads/billing HTTP/1.0"

相关内容