1 votes

rsyslog : analyse le journal d'accès de nginx et l'envoie via omhttp au backend

J'ai besoin de lire le fichier access_log de nginx et d'envoyer des données au backend http lorsque la ligne contient 'une expression'. C'est une partie de la tâche de facturation des fichiers téléchargés via nginx. access_log .


Nginx stocke le journal dans /var/log/nginx/access.log En format de téléchargement :

log_format download '{ "remote_addr": "$remote_addr", "time": "$time_local", "request": "$request", "traffic": $body_bytes_sent, "x_forwarded_for": "$http_x_forwarded_for" }';

Rsyslog surveille ce fichier ( /etc/rsyslog.conf ).

module(load="imfile" PollingInterval="10") 
input(type="imfile"
      File="/var/log/nginx/access.log"
      Tag="nginx-access"
      Severity="info"
      Facility="local3")

J'ai besoin d'aide avec le module rsyslog omhttp. Comment le configurer pour :

  • envoyer uniquement les nouvelles lignes lorsque :msg, contains, "expression"
  • envoyer la nouvelle ligne du journal d'accès à : POST http://localhost/rsyslog_backend

0 votes

J'utilise omhttp pour envoyer des données via HTTp depuis rsyslog, mais je ne sais pas comment le configurer.

0voto

zach99zulu Points 21

La bonne réponse est d'utiliser syslog-ng au lieu de syslog

Partie d'une configuration qui fait ce travail :

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);
};

Dans un Rails, un patch de singe est nécessaire :

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

SistemesEz.com

SystemesEZ est une communauté de sysadmins où vous pouvez résoudre vos problèmes et vos doutes. Vous pouvez consulter les questions des autres sysadmins, poser vos propres questions ou résoudre celles des autres.

Powered by:

X