Supervision : Surveillance des logs avec Telegraf

Mise en place de la supervision avancé d’Nginx

source

controler la présence de stub status modules

nginx -V 2>&1 | grep -o with-http_stub_status_module

aller dans la section logging de /etc/nginx/nginx.conf et ajouter :

##
# Logging Settings
##

# Enabling request time and GEO codes
log_format custom '$remote_addr - $remote_user [$time_local] '
                  '"$request" $status $body_bytes_sent '
                  '"$http_referer" "$http_user_agent" '
                  '"$request_time" "$upstream_connect_time" '
                  '"$geoip_city" "$geoip_city_country_code" $geoip_latitude $geoip_longitude '
                  '"$server_name"';

access_log /var/log/nginx/access.log custom;
error_log /var/log/nginx/error.log;

Cette ajout est là pour formaliser la sortie dans l’access.log d’nginx.

Coté nginx, nous allons récupérer des fichiers pour la geoip.

mkdir /etc/nginx/geoip
cd /etc/nginx/geoip

wget https://mirrors-cdn.liferay.com/geolite.maxmind.com/download/geoip/database/GeoIPv6.dat.gz

gunzip GeoIPv6.dat.gz

wget https://mirrors-cdn.liferay.com/geolite.maxmind.com/download/geoip/database/GeoLiteCityv6.dat.gz

gunzip GeoLiteCityv6.dat.gz

dans la conf de telegraf /etc/telegraf/telegraf.conf on ajoute un parser de log pour nginx.

[[inputs.logparser]]   files = ["/var/log/nginx/access.log"]
   from_beginning = true
   name_override = "nginx_access_log"
   watch_method = "poll"
   [inputs.logparser.grok]
     patterns = ["%{CUSTOM_LOG_FORMAT}"]
     custom_patterns = '''
        CUSTOM_LOG_FORMAT %{IP:ip} %{NOTSPACE:ident:string} %{NOTSPACE:auth:string} \[%{HTTPDATE:http_timestamp:ts-httpd}\] "%{NOTSPACE:http_method} %{NOTSPACE:http_request:string} HTTP/%{NUMBER:http_vers}" %{NUMBER:http_code} %{NUMBER:http_byte} (?:%{QS:http_referer}|-) %{QS:agent} %{QS:request_time} %{QS:upstream_connect_time} %{QS:geoip_city:string} %{QS:country_code:string} %{NUMBER:latitude} %{NUMBER:longitude} %{QS:server_name:string}
      '''

dans la section http du nginx.conf

# Add GEO IP support
geoip_country /etc/nginx/geoip/GeoIP.dat; # the country IP data
geoip_city /etc/nginx/geoip/GeoLiteCity.dat; # the city IP data

Mise en place de surveillance de log UFW

[[inputs.logparser]]   files = ["/var/log/ufw.log"]
    from_beginning = true
    name_override = "ufw_log"
    watch_method = "poll"
    [inputs.logparser.grok]
      patterns = ["%{CUSTOM_LOG_FORMAT}"]
      custom_patterns = '''
         CUSTOM_LOG_FORMAT %{SYSLOGTIMESTAMP:ufw_timestamp:ts-syslog} %{SYSLOGHOST:ufw_hostname} %{DATA:ufw_program}(?:\[%{POSINT:ufw_pid}\])?: \[%{DATA}\] \[UFW %{WORD:ufw_action}\] IN=%{DATA:ufw_interface} OUT= (MAC|PHYSIN)=%{DATA:ufw_mac} SRC=%{IP:ufw_src_ip} DST=%{IP:ufw_dest_ip} %{GREEDYDATA:ufw_tcp_opts} PROTO=%{WORD:ufw_protocol} SPT=%{INT:ufw_src_port} DPT=%{INT:ufw_dst_port} %{GREEDYDATA:ufw_tcp_opts}
       '''

J’ai rencontré un soucis avec le logrotate sur le fichier wf.log ce qui m’a fait rajouter l’instruction : watch_method = "poll". Je ne sais pas si ça fonctionne… sinon, il reste la possibilité de modifier le fichier /etc/logrotate.d/ufw en y plaçant un systemctl restart telegraf en postrotate.