====== Stocker les logs Nginx en base de données ====== * [[https://serverfault.com/questions/448140/syslog-ng-and-nginx-logs-to-mysql]] * [[https://phelepjeremy.wordpress.com/2017/06/20/configuration-dun-serveur-syslog-ng/]] * [[https://www.koorka.com/wiki/How_to_configure_syslog-ng_as_nginx_access_log_server]] * [[https://stackoverflow.com/questions/21135719/full-record-url-in-nginx-log]] Installer ''syslog-ng'' et ''libdbd-mysql''. Créer un utilisateur MySQL et une base de données. Y créer la table suivante: CREATE TABLE access_log ( id int unsigned auto_increment primary key, unixtime int unsigned, year year(4), month int, day int, fulldate timestamp, remote_addr varchar(50), remote_user varchar(100), host varchar(100), request_method varchar(20), request_uri varchar(2048), status varchar(10), body_bytes_send int unsigned, request_time float, http_referrer varchar(2048), http_user_agent varchar(500), http_x_forwareded_for varchar(50), INDEX index_access_log_unixtime(unixtime), INDEX index_access_log_month(month), INDEX index_access_log_day(day) ); Spécifier le format des logs dans ''/etc/nginx/nginx.cong'': http { log_format main '$remote_addr $remote_user [$time_local] "$host" $request_method "$request_uri" ' '$status $body_bytes_sent $request_time "$http_referer" ' '"$http_user_agent" "$http_x_forwarded_for"'; } Il faut ensuite que toutes les directives ''access_log'' soient du format: access_log /path/log main; Redémarrer Nginx. Créer le fichier ''/etc/syslog-ng/conf.d/nginx.conf'': source s_nginx { # il est possible de spécifier plusieurs fichiers, juste dupliquer la ligne suivante: file("/var/log/nginx/access.log" flags(no-parse)); }; parser p_nginx { csv-parser( columns("REMOTE_ADDR", "REMOTE_USER", "TIME_LOCAL", "$HTTP_HOST", "REQUEST_METHOD", "REQUEST_URI", "STATUS", "BODY_BYTES_SEND", "REQUEST_TIME", "HTTP_REFERER","HTTP_USER_AGENT", "HTTP_X_FORWARDED_FOR") flags(escape-double-char,strip-whitespace) delimiters(" ") quote-pairs('""[]') ); }; destination d_sql { sql( type(mysql) host("localhost") port(3306) username("nginx") password("yourpassword") database("nginx_logs") table("access_log") columns("id int unsigned auto_increment primary key", "unixtime int unsigned", "year year(4)", "month int", "day int", "fulldate timestamp", "remote_addr varchar(50)", "remote_user varchar(100)", "host varchar(100)", "request_method varchar(20)", "request_uri varchar(2048)", "status varchar(10)", "body_bytes_send int unsigned", "request_time float", "http_referrer varchar(2048)", "http_user_agent varchar(500)", "http_x_forwareded_for varchar(50)") values(default,"${UNIXTIME}", "${YEAR}", "${MONTH}", "${DAY}", "${YEAR}-${MONTH}-${DAY} ${HOUR}-${MIN}-${SEC}", "${REMOTE_ADDR}","${REMOTE_USER}","${HTTP_HOST}","${REQUEST_METHOD}","${REQUEST_URI}", "${STATUS}","${BODY_BYTES_SEND}","${REQUEST_TIME}", "${HTTP_REFERER}","${HTTP_USER_AGENT}","${HTTP_X_FORWARDED_FOR}") indexes("unixtime") indexes("month") indexes("day") null("-") ); }; log { source(s_nginx); parser(p_nginx); destination(d_sql); }; Arrêter ''syslog-ng''. Tester que tout va bien avec la commande suivante: syslog-ng -Fvde Redémarrer ''syslog-ng''.