wiki/HowtoGoAccess.md

190 lines
4.8 KiB
Markdown
Raw Normal View History

2017-01-24 15:31:35 +01:00
---
categories: web sysadmin system
title: Howto GoAccess
...
2017-01-24 16:45:02 +01:00
* Documentation: <https://goaccess.io/man>
2023-07-28 17:11:54 +02:00
* Statut de cette page : test / bookworm
2017-01-24 15:14:00 +01:00
2017-01-24 16:45:02 +01:00
[GoAccess](https://goaccess.io) est un outil pour analyser facilement des logs Apache ou Nginx (et d'autres formats) : générer rapidement une page de rapport HTML, stats ncurses et même surveillance temps réel.
2017-01-24 15:14:00 +01:00
2023-06-02 10:40:20 +02:00
2023-07-28 17:11:54 +02:00
## Installation
2023-06-02 10:40:20 +02:00
2017-01-24 15:15:00 +01:00
~~~
# apt install goaccess geoip-database
2023-07-28 17:11:54 +02:00
goaccess -V
GoAccess - 1.7.
For more details visit: https://goaccess.io/
Copyright (C) 2009-2022 by Gerardo Orellana
Build configure arguments:
--enable-utf8
--enable-geoip=mmdb
--with-openssl
2017-01-24 15:15:00 +01:00
~~~
2017-01-24 15:14:00 +01:00
2017-01-24 16:45:23 +01:00
Si besoin d'une version plus récente, l'upstream distribue des paquets Debian avec une version plus récente.
2017-01-24 15:14:00 +01:00
2017-01-24 15:15:00 +01:00
~~~
# echo "deb https://deb.goaccess.io $(lsb_release -cs) main" >> /etc/apt/sources.list.d/goaccess.list
2021-05-28 10:25:57 +02:00
# wget -O /etc/apt/trusted.gpg.d/goaccess.asc https://deb.goaccess.io/gnugpg.key
# dos2unix /etc/apt/trusted.gpg.d/goaccess.asc
# chmod 644 /etc/apt/trusted.gpg.d/goaccess.asc
2021-05-28 11:06:08 +02:00
# apt update && apt install goaccess geoip-database
2017-01-24 15:15:00 +01:00
~~~
2017-01-24 15:14:00 +01:00
2023-07-28 17:11:54 +02:00
## Configuration
2017-01-24 15:31:35 +01:00
Il faut ensuite éditer `/etc/goaccess.conf`, en choisissant le format de log, par exemple :
2017-01-24 15:14:00 +01:00
2017-01-24 15:15:00 +01:00
~~~
2017-01-24 15:31:35 +01:00
time-format %H:%M:%S
date-format %d/%b/%Y
log-format %h %^[%d:%t %^] "%r" %s %b "%R" "%u"
2017-01-24 15:15:00 +01:00
~~~
2017-01-24 15:14:00 +01:00
2023-08-18 10:51:43 +02:00
Pour HAProxy, selon les versions, on peut tester les `log-format` suivants :
2019-02-13 11:15:06 +01:00
~~~
2019-03-06 15:19:32 +01:00
log-format %^ %^ %^ %^ %^ %^ %h:%^ [%d:%t.%^] %^ %^ %^/%^/%^/%L/%^ %s %b %^ %^ %^ %^ %^ {%v|%u} "%m %U %H"
2023-08-18 10:51:43 +02:00
log-format %^ %~%^ %^ %^ %^ %h:%^ [%d:%t.%^] %^ %^ %^/%^/%^/%L/%^ %s %b %^ %^ %^ %^ %^ {%v|"%u"} "%r"
2019-02-13 11:15:06 +01:00
~~~
2023-08-18 11:02:24 +02:00
Pour aller plus loin, voir la documentation de `log-format` : <https://goaccess.io/man#custom-log>
2023-06-02 10:40:20 +02:00
2023-07-28 17:11:54 +02:00
## Utilisation
2023-06-02 10:40:20 +02:00
Raccourcis de base pour naviguer dans l'interface NCurse :
2023-06-07 17:03:32 +02:00
* Naviguer entre les modules : Tab / Shift+Tab (ou le numéro du module 1-10, mais ne permet pas d'aller au-delà de 10)
* Naviguer dans la page principale : ArrowUp / ArrowDown
* Dérouler le contenu d'un module : Enter
2023-06-07 17:03:32 +02:00
* Naviguer dans un module : PgUp / PgDown
2023-06-02 10:40:20 +02:00
~~~
# goaccess /var/log/apache2/access.log
~~~
2023-06-07 16:38:04 +02:00
Si vous utilisez le format de logs `combined` :
~~~
2023-07-04 15:11:05 +02:00
# goaccess /var/log/apache2/access.log --log-format=COMBINED # ou VCOMBINED s'il y a des vhosts
2023-06-07 16:38:04 +02:00
~~~
2023-06-02 10:40:20 +02:00
Si on veut cibler un fenêtre temporelle particulière ou accélérer le traitement, on filtrera avec grep dans un fichier temporaire :
~~~
# grep "<PATTERN>" /var/log/apache2/access.log > goaccess.tmp
2023-06-02 11:12:39 +02:00
# goaccess goaccess.tmp
2023-06-02 10:40:20 +02:00
~~~
2017-01-24 15:14:00 +01:00
Pour générer un rapport HTML (un seul fichier, les styles sont inline) :
2017-11-27 15:43:45 +01:00
avec GoAccess 0.8.3 :
2017-03-23 16:49:16 +01:00
2017-01-24 15:15:00 +01:00
~~~
2017-03-23 16:49:16 +01:00
# goaccess -f access.log -a -o html
2017-01-24 15:15:00 +01:00
~~~
2017-11-27 15:43:45 +01:00
avec GoAccess 1.2 :
~~~
# goaccess access.log -a -o /var/www/rapport.html
~~~
2017-01-24 15:14:00 +01:00
Pour suivre un access.log en temps réel :
2017-01-24 15:15:00 +01:00
~~~
2017-01-24 15:14:00 +01:00
# goaccess -f access.log
2017-01-24 15:15:00 +01:00
~~~
2017-01-24 15:14:00 +01:00
2017-03-14 16:09:36 +01:00
Pour avoir un access de 12h à 16h du 1er Fevrier :
~~~
# grep "1/Fev/2017:1[2-6]" /var/log/apache2/access.log > goacces.tmp
2017-03-23 16:49:31 +01:00
# goaccess -f goaccess.tmp -a -o html
2017-03-14 16:09:36 +01:00
~~~
2023-06-02 10:40:20 +02:00
2023-07-28 17:11:54 +02:00
## Interface web GoAccess via WebSocket
2023-06-02 10:40:20 +02:00
2021-01-11 16:58:02 +01:00
Pour avoir le suivi en temps réel dans un navigateur, il faut servir le fichier HTML généré par Goaccess ainsi que l'exécuter en tant que démon pour recevoir les données en temps réel via sa WebSocket.
2019-02-13 15:54:49 +01:00
2023-06-02 10:40:20 +02:00
2023-07-28 17:11:54 +02:00
On peut créer une unité [systemd](HowtoSystemd) qui lancera GoAccess et sa WebSocket.
2019-02-13 15:54:49 +01:00
2021-01-11 16:58:02 +01:00
`/etc/systemd/system/goaccess.service` :
2019-02-13 15:54:49 +01:00
~~~
[Unit]
Description=GoAccess real time web stats.
After=network.target
[Service]
2021-05-03 10:43:13 +02:00
ExecStart=/usr/bin/goaccess -p /etc/goaccess/goaccess.conf /var/log/haproxy.log -o /var/www/goaccess.html --real-time-html
Type=simple
2019-02-13 15:54:49 +01:00
User=goaccess
[Install]
WantedBy=default.target
~~~
~~~
# systemctl daemon-reload
# systemctl enable goaccess
# systemctl start goaccess
~~~
2023-07-28 17:11:54 +02:00
On sert ensuite `/var/www/goaccess.html` via [Apache](HowtoApache) et on « proxifie » par la WebSocket :
2021-01-11 16:58:02 +01:00
~~~
<VirtualHost *:443>
ServerName example.org
Include /etc/apache2/ssl/example.conf
DocumentRoot /var/www/
# Goaccess
<Location "/goaccess.ws/">
ProxyPass "ws://localhost:7890/"
</Location>
</VirtualHost>
~~~
2023-07-28 17:11:54 +02:00
Notez qu'ainsi Apache fait la terminaison SSL sans que Goaccess accède aux certificats.
2021-01-11 16:58:02 +01:00
2023-07-28 17:11:54 +02:00
Enfin, nous pouvons indiquer au client Goaccess (dans le navigateur) d'accéder au WebSocket via l'URL proxifié par Apache. Il est important d'utiliser un nom de domaine et non une adresse IP autrement Apache dirigera la requête vers le Vhost par défaut, ici example.com.
2021-01-11 16:58:02 +01:00
`/etc/goaccess/goaccess.conf` :
~~~
2023-07-28 17:11:54 +02:00
ws-url wss://example.com:443/goaccess.ws/
2021-01-11 16:58:02 +01:00
~~~
2023-07-28 17:11:54 +02:00
## FAQ
2023-07-28 17:11:54 +02:00
### `Fatal error has occurred`
2017-01-24 15:14:00 +01:00
2017-01-24 15:31:35 +01:00
~~~
2017-01-24 15:14:00 +01:00
Fatal error has occurred
Error occured at: src/parser.c - parse_log - xxxx
No log format was found on your conf file.
2017-01-24 15:31:35 +01:00
~~~
2017-01-24 15:14:00 +01:00
2023-07-28 17:11:54 +02:00
Si cette erreur survient, il faut modifier le fichier de conf `/etc/goaccess.conf` pour décommenter les valeurs `logformat` correspondantes.
2023-07-28 17:11:54 +02:00
### Géolocalisation manquante
Installer le paquet `geoip-database` :
~~~
# apt install geoip-database
~~~