# How to setup goaccess to get nice stats with OpenBSD httpd
2021-10-18T21:07:51Z

Since I have the pleasure to host the OpenBSD Webzine, the main author (Solène, that's you ;)) asked for some data about number of visits.

First, I dont want matomo : MariaDB, PHP, user tracking... Hum, not for me.

Then, I thought about webalizer, a log analyzer to generate charts. I like it, but as Solène notices, charts are image and not so easy to read.

Finally, I gave goaccess a new try and set it to generate html reports periodically for the webzine and my own website.

This is how I set up webalizer for multiple domains.

## httpd setup

I like my logs to combined format. In server configuration "/etc/httpd.conf" : 

```
server "athome.tld" {
    root "/htdocs/athome.tld"
    log style combined
    log access "athome.tld.log"
    ...
```

As you can see, logs are stored in "/var/www/logs/athome.tld.log"

## Goaccess setup

First, let's install goaccess. Easy

```
# pkg_add goaccess
```

Then, edit "/etc/goaccess/goaccess.conf" for global configuration.

```
# httpd logs combined
date-format %d/%b/%Y
time-format %T %z
log-format %v %h %^ %^ [%d:%t] "%r" %s %b "%R" "%u"
# keep visitors identity safe
anonymize-ip true
# keep old stats
persist true
restore true
```

Other options will be set at command line.

## Stats

I find more convenient to use a script for each server and store goaccess history in a dedicated directory. We will assume the server files belongs to user "foo".

```
# mkdir -p /var/db/goaccess/athome.tld
# chown foo /var/db/goaccess/athome.tld
```

Now, create a script to call goaccess with approriation flags.

```
#!/bin/sh
# generate goaccess stats

out=/var/www/htdocs/athome.tld/stats.html
db=/var/db/goaccess/athome.tld
log=/var/www/logs/athome.tld.log
title="My website stats"
u=foo

/usr/local/bin/goaccess $log \
  -o $out \
  --db-path=$db \
  --user-name=$u \
  --html-report-title="$title"
```

Notice the use of "--user-name".

## Automatic updates

Set up a crontab to start above script

```
6,10,19,21 * * * * /usr/local/bin/goaccess-athome.tld.sh > /dev/null 2>&1
```

Here, stats are generated at 6am, 10am, 7pm and 9pm. You might use "@hourly" as well.

## Report generation before log rotate

Edit /etc/newsyslog.conf to call goacces before logs archiving : 


```
/var/www/logs/athome.tld.log               644  7     250  $W0   Z  "/usr/local/bin/goaccess-athome.tld.sh && pkill -USR1 -u root -U root -x httpd"
```

## Real time

Yeah, goaccess can listen to a port for automatic updates (with real-time and daemonize flags). It requires to load ssl certificates, but those keys belongs to root only on OpenBSD. You can copy and change permissions on them, or start goaccess realtime as root. I think it's a bad idea to start a process as root.

## Links

=> https://webzine.puffy.cafe/ OpenBSD Webzine
=> https://dataswamp.org/~solene/ Solène
=> https://www.patrickfrei.ch/webalizer/ webalizer
=> https://goaccess.io/ goaccess

## Something to say ?

=> mailto:bla@bla.si3t.ch?subject=goaccess-setup Send your comment by mail.