Man Page
Here is the main doc. All the details about GoAccess…
Here is the main doc. All the details about GoAccess…
goaccess — Fast web log analyzer and interactive viewer.
goaccess is an open source, real-time web log analyzer and interactive viewer that runs in a terminal on *nix systems or directly in your browser. Designed with system administrators, DevOps engineers, and security professionals in mind, it delivers fast, actionable HTTP statistics and visual server reports on the fly. GoAccess parses your web server logs in real time and presents the data directly in the terminal or via a live HTML dashboard, making it easy to monitor traffic, detect anomalies, and troubleshoot issues instantly.
Features include the following panels:
--date-spec=hr (e.g., 05/Jun/2016:16) or minute level (05/Jun/2016:16:59).JPG, CSS, SWF, JS, GIF, and PNG. Additional static files can be added to the configuration file.-a is enabled, a list of user agents can be displayed by selecting the desired IP and pressing ENTER.--hour-spec=min.%v is used in the log-format string.--ignore-panel in your configuration file to enable it.--ignore-panel to enable.%e is given within the log-format variable.MISS, BYPASS, EXPIRED, STALE, UPDATING, REVALIDATED, or HIT. Not enabled unless %C is in log-format.%M is in log-format. See IANA MIME types.%K is in log-format.In-memory storage provides better performance at the cost of limiting the dataset size to the amount of available physical memory. GoAccess uses in-memory hash tables with very good memory usage and performance. This storage has support for on-disk persistence.
In-memory storage provides better performance at the cost of limiting the dataset size to the amount of available physical memory. GoAccess uses in-memory hash tables. It has very good memory usage and pretty good performance. This storage has support for on-disk persistence.
Multiple options can be used to configure GoAccess. For a complete up-to-date list of configure options, run ./configure --help.
--enable-debug--enable-asan--enable-utf8--enable-geoip=<legacy|mmdb>legacy uses the original GeoIP databases; mmdb uses the enhanced GeoIP2 databases.--with-getline--with-openssl--with-zlibThe following options can be supplied via the command line or through the configuration file as long options.
Specifies the log format time containing any combination of regular characters and special format specifiers beginning with %. See man strftime. e.g., %T or %H:%M:%S.
%f must be used as time-format. For milliseconds, use %*.
Specifies the log format date containing any combination of regular characters and special format specifiers beginning with %. See man strftime.
12/Jan/2021 but your locale is not English, set your LC_TIME:
%f; for millisecond timestamps use %*.
Combines date and time into a single option, with the ability to get the timezone from a request and convert it. e.g., %d/%b/%Y:%H:%M:%S %z.
--datetime-format is used, %x must be passed in the log-format variable.
--datetime-format is used, ensure --date-format and --time-format are NOT used.
Specifies the log format string. Followed by a space or \t for tab-delimited. In addition to raw formats, the following predefined names are available:
Prompt log/date configuration window on program start.
Color highlight active panel.
Enable mouse support on main dashboard.
Specify custom colors for the terminal output. Syntax: DEFINITION space/tab colorFG#:colorBG# [attributes,PANEL] where FG/BG values range from -1 (default term color) to 255.
Optional attributes (comma-separated): bold, underline, normal, reverse, blink.
Custom colors can be applied per panel. Available color definitions:
COLOR_MTRC_HITSCOLOR_MTRC_VISITORSCOLOR_MTRC_DATACOLOR_MTRC_BWCOLOR_MTRC_AVGTSCOLOR_MTRC_CUMTSCOLOR_MTRC_MAXTSCOLOR_MTRC_PROTCOLOR_MTRC_MTHDCOLOR_MTRC_HITS_PERCCOLOR_MTRC_HITS_PERC_MAXCOLOR_MTRC_VISITORS_PERCCOLOR_MTRC_VISITORS_PERC_MAXCOLOR_PANEL_COLSCOLOR_BARSCOLOR_SUBBARSCOLOR_CHART_AXISCOLOR_CHART_VALUESCOLOR_ERRORCOLOR_SELECTEDCOLOR_PANEL_ACTIVECOLOR_PANEL_HEADERCOLOR_PANEL_DESCCOLOR_OVERALL_LBLSCOLOR_OVERALL_VALSCOLOR_OVERALL_PATHCOLOR_ACTIVE_LABELCOLOR_BGCOLOR_DEFAULTCOLOR_PROGRESSSee the configuration file for a sample color scheme.
Choose among terminal color schemes. 1 = monochrome, 2 = green, 3 = Monokai (requires 256-color terminal).
Parse and display only crawlers/bots.
Specifies a custom CSS file path to load in the HTML report.
Specifies a custom JS file path to load in the HTML report.
Set HTML report page title and header.
Refresh the HTML report every X seconds (1–60). Default: 1 second.
Set HTML report default preferences as a one-line JSON string. Example:
Format JSON output using tabs and newlines.
Maximum number of items to display per panel (1 to n). Only static HTML, CSV, and JSON output allow more than the default of 366 items (or 50 in real-time HTML).
Turn off colored output. Default on terminals that don't support colors.
Disable summary metrics on the CSV output.
Disable progress metrics [total requests/requests per second] when parsing a log.
Disable scrolling through panels when TAB is pressed or when a panel is selected using a numeric key.
Do not show the last updated field in the generated HTML report.
Do not show the progress metrics and parsing spinner.
Output report date/time data in the given canonical timezone name, e.g., Europe/Berlin, America/Chicago, Africa/Cairo. Invalid names default to GMT. See --datetime-format to properly specify a timezone in the date/time format.
Specify IP address to bind the server to. Default: 0.0.0.0.
Run GoAccess as a daemon (only if --real-time-html is enabled).
Run GoAccess as the specified user.
Ensure clients send the specified origin header upon WebSocket handshake. e.g., --origin=http://goaccess.io
Write the daemon PID to a file when used with --daemonize.
Specify the WebSocket server port. Default: 7890. Ensure this port is open.
Enable real-time HTML output.
Specify UNIX-domain socket address to bind the server to.
Enable WebSocket authentication using a JSON Web Token (JWT). Two formats are supported:
When using jwt[:secret], GoAccess generates a JWT locally. If only jwt is given, the secret is read from the GOACCESS_WSAUTH_SECRET environment variable. A secret can be provided directly or as a file path.
When using jwt:verify:secret, GoAccess verifies an externally fetched JWT (e.g., via --ws-auth-url). The secret can be a direct key, file path, or environment variable name.
When this option is used, the HTML report will only display if authentication succeeds.
--with-openssl.
Set JWT expiry time. Default: 8 hours (28800 seconds). Supported formats:
URL where GoAccess fetches the initial JWT via a GET request. The JSON response must contain status, access_token, refresh_token, and expires_in fields. Uses credentials: 'include' for secure token retrieval based on the user's existing session.
URL where GoAccess fetches a new JWT when the current one is about to expire. GoAccess proactively refreshes 60 seconds before expiration via a POST with the refresh_token. Defaults to --ws-auth-url if not set.
GoAccess supports both stateless and stateful authentication approaches. The stateful approach issues JWTs along with a csrf_token stored in the session; refresh requests then perform a CSRF check via the X-CSRF-TOKEN header.
Initial auth response format:
On failure:
After refreshing, GoAccess confirms the updated JWT's validity by sending {"action": "validate_token", "token": "current-jwt"} to the WebSocket server.
--ws-auth=jwt:verify:<secret> where <secret> can be a file path, environment variable, or HS256 secret string.
URL to which the WebSocket server responds. Optionally specify the scheme (ws:// or wss://). e.g., wss://goaccess.io or goaccess.io:9999 to connect behind a proxy on a custom port.
Enable WebSocket ping with specified interval in seconds, to prevent idle connections from being disconnected.
Creates a named pipe (FIFO) that reads from the given path/file.
Creates a named pipe (FIFO) that writes to the given path/file.
Path to TLS/SSL certificate. Both --ssl-cert and --ssl-key are required to enable TLS/SSL support. Only available if configured with --with-openssl.
Path to TLS/SSL private key. Both --ssl-cert and --ssl-key are required. Only available if configured with --with-openssl.
Read the log file from stdin.
Specify the path to the input log file. If set in the config file, it will take priority over -f from the command line.
Send all debug messages to the specified file. Requires --enable-debug at compile time.
Specify a custom configuration file to use. Takes priority over the global configuration file.
Log invalid requests to the specified file.
Output HTML assets to external JS/CSS files (goaccess.js and goaccess.css) in the same directory as your report. Great for Content Security Policy (CSP) setups.
Log unknown browsers and OSes to the specified file.
Do not load the global configuration file (normally under /etc/, /usr/etc/, or /usr/local/etc/).
Enable a list of user-agents by host. Disable for faster parsing.
Enable IP resolver on the HTML or JSON output.
Exclude an IPv4 or IPv6 from being counted. Ranges supported with a dash between IPs (start-end). e.g.:
exclude-ip 127.0.0.1exclude-ip 192.168.0.1-192.168.0.100exclude-ip ::1exclude-ip 0:0:0:0:0:ffff:808:804-0:0:0:0:0:ffff:808:808Number of parallel processing threads. Defaults to 1. Set based on available CPU cores. See --chunk-size.
Set/unset HTTP request protocol. Creates a request key containing the request protocol + the actual request.
Set/unset HTTP request method. Creates a request key containing the request method + the actual request.
Write output to stdout given one of the following extensions: .csv, .json, or .html. Multiple outputs can be generated in a single run, e.g., --output /path/to/report.html --output /path/to/report.json.
Ignore request's query string. e.g., www.google.com/page.htm?query → www.google.com/page.htm. Can greatly decrease memory consumption on timestamped requests.
Disable IP resolver on terminal output.
Treat non-standard status code 444 as 404.
Add 4xx client errors to the unique visitors count.
Anonymize the client IP address. Sets the last octet of IPv4 and last 80 bits of IPv6 to zeros:
Anonymization levels: 1 = default, 2 = strong, 3 = pedantic.
Number of lines forming a chunk for parallel processing. Influences the efficiency of multi-threaded parsing.
Include static files that contain a query string.
Include an additional tab-delimited list of browsers/crawlers/feeds. See config/browsers.list. Note: the larger the list, the longer parsing will take.
Set date specificity: date (default), hr to append hours (e.g., 18/Dec/2010:19), or min to append minutes (e.g., 18/Dec/2010:19:59).
Decode double-encoded values including user-agent, request, and referrer.
Enable parsing/displaying the given panel.
VISITORSREQUESTSREQUESTS_STATICNOT_FOUNDHOSTSOSBROWSERSVISIT_TIMESVIRTUAL_HOSTSREFERRERSREFERRING_SITESKEYPHRASESSTATUS_CODESREMOTE_USERCACHE_STATUSGEO_LOCATIONMIME_TYPETLS_TYPEUse log filename(s) as virtual host(s). POSIX regex extracts the vhost from the filename. e.g., --fname-as-vhost='[a-z]*.[a-z]*' extracts awesome.com from awesome.com.log.
Hide a referrer but still count it. Wildcards are allowed (e.g., *.bing.com).
Set time specificity to hour (default) or min to display the tenth of an hour. Used in the time distribution panel.
Ignore crawlers.
Classify unknown OS and browsers as crawlers for more accurate non-human detection.
Ignore parsing/displaying the given panel. Same panel names as --enable-panel.
Ignore referrers from being counted. Wildcards allowed. e.g., *.domain.com, ww?.domain.*
Ignore static file requests. req = only ignore from valid requests count; panel = ignore from panels. Note: they are still counted towards the total number of requests.
Ignore parsing and displaying one or multiple status codes. Use this option multiple times for multiple codes.
Keep the last specified number of days in storage, recycling older data. e.g., --keep-last=7 shows only the last 7 days.
Disable client IP validation. Useful when IP addresses have been obfuscated before logging. The log still needs a placeholder for %h.
Disable HTTP status code validation. Some servers record - if a connection was not fully established.
Number of lines to test against the log/date/time format. Default: 10. Set to 0 to skip testing and parse the entire log without validation strictness.
Parse log and exit without outputting data. Useful for adding data to the on-disk database only.
Display real OS names, e.g., Windows XP, Snow Leopard.
Sort panel on initial load. Format: PANEL,METRIC,ORDER.
Metrics:
BY_HITSBY_VISITORSBY_DATABY_BWBY_AVGTSBY_CUMTSBY_MAXTSBY_PROTBY_MTHDOrders: ASC, DESC
Add a static file extension. e.g., .mp3. Extensions are case-sensitive.
Legacy GeoIP has been discontinued. Make sure to download the .dat files. Distributed with Creative Commons Attribution-ShareAlike 4.0.
Standard GeoIP database for less memory usage.
For GeoIP2 databases, use DB-IP Lite (licensed Creative Commons Attribution 4.0) or MaxMind (GeoLite2).
Specify path to GeoIP database file. --geoip-city-data is an alias. Can be specified multiple times for multiple databases:
Display help and exit.
Display version information and exit.
Display current storage method (e.g., B+ Tree, Hash).
Display the path of the default config file when -p is not used.
Persist parsed data to disk. Existing database files will be overwritten. Should be set for the first dataset. See examples below.
Load previously stored data from disk. Database files must exist. See --persist and examples below.
Path where on-disk database files are stored. Default: /tmp.
GoAccess can parse virtually any web log format. Predefined options include Common Log Format (CLF), Combined Log Format (XLF/ELF), W3C (IIS), and Amazon CloudFront. Custom format strings are also fully supported.
Run GoAccess with -c to prompt a configuration window, or specify the format permanently in the configuration file at %sysconfdir%/goaccess.conf or ~/.goaccessrc (where %sysconfdir% is /etc/, /usr/etc/, or /usr/local/etc/).
time-format — specifies the log-format time. See man strftime. e.g., %T or %H:%M:%S. Use %f for microseconds, %* for milliseconds.
date-format — specifies the log-format date. See man strftime. Use %f for microseconds, %* for milliseconds.
log-format — the log format string, followed by a space or \t for tab-delimited.
%x Date and time field matching time-format and date-format. Used when a combined timestamp is given.%t Time field matching the time-format variable.%d Date field matching the date-format variable.%v The server name according to the canonical name setting (Server Blocks or Virtual Host).%e Userid of the person requesting the document as determined by HTTP authentication.%C The cache status of the object the server served.%h Host — the client IP address (IPv4 or IPv6).%r The full request line from the client. Requires delimiters (quotes, etc.) to be parsable. Use either %r or the combination of %m, %U, %q, and %H — not both.%m The request method.%U The URL path requested. If the query string is in %U, %q is not needed.%q The query string.%H The request protocol.%s The status code the server sends back to the client.%b The size of the object returned to the client.%R The "Referer" HTTP request header.%u The user-agent HTTP request header.%K TLS protocol used. (Apache: %{SSL_PROTOCOL}x)%k TLS cipher suite. (Apache: %{SSL_CIPHER}x)%M MIME-type of the requested resource. (Apache: %{Content-Type}o)%D Time taken to serve the request, in microseconds.%T Time taken to serve the request, in seconds with millisecond resolution.%L Time taken to serve the request, in milliseconds as a decimal number.%n Time taken to serve the request, in nanoseconds as a decimal number.%^ Ignore this field.%~ Move forward through the log string until a non-space character is found.~h The client IP address in an X-Forwarded-For (XFF) field."~h{, }" parses "11.25.11.53, 17.68.33.17".
$request_time; in Apache use %D.
GoAccess requires the following fields: a valid IPv4/6 %h, a valid date %d, and the request %r.
1-9, 0 Jump to panel by position (1st–10th)TAB Forward moduleSHIFT+TAB Backward moduleg Move to the top/beginning of screenG Move to the bottom/end of screenj Scroll down within expanded modulek Scroll up within expanded module^f Page down inside expanded module^b Page up inside expanded moduleENTER Expand moduleo/O Expand selected module+ Expand selected item children- Collapse selected item childrens Sort options for current modulep Reorder panels/ Search across all modules (regex allowed)n Find next occurrencem/M Cycle through chart metrics (forward/backward)l/L Toggle logarithmic scale for current panelr/R Toggle reverse chronological order in chartsc Set/change color schemeq Quit (or collapse if inside module)? Open helpInteractive terminal report:
Generate an HTML report:
Generate a JSON report:
Generate a CSV file:
Monitor logs in real-time from stdin:
Filter by pattern while keeping the pipe open:
Parse from the beginning while filtering:
Convert log date timezone to Europe/Berlin:
Parse from a pipe while also reading regular files (append - for stdin):
process all compressed log files plus the current log:
--with-zlib, it can parse
.gz files directly without external decompression, e.g.:
zcat (or gunzip -c on macos)
to decompress logs before piping them into goaccess.
specify the websocket url explicitly:
custom port:
bind websocket to a specific address:
--ssl-cert=<cert.crt> and --ssl-key=<priv.key>.--ws-url=goaccess.io:8080/ws.
all requests from a specific date to end of file:
using a relative date (one week ago):
parse a specific date range:
keep only the last 5 days of data:
Use --concat-vhost-req to prepend the virtual host or server block (%v) to the request field.
Append virtual host to the request field manually:
Exclude a list of virtual hosts:
parse only specific page types:
parse page views without extensions:
Filter by status code (e.g., 500):
Multiple status codes:
Estimated bot traffic:
Run at lower CPU priority:
Pipe from a remote server:
-n so GoAccess can read from stdin. Use SSH keys for authentication.
GoAccess can process logs incrementally by persisting data to disk, then restoring it and appending new data. GoAccess tracks inodes, the last line parsed, and the last timestamp per file.
Persist last month's log:
Append this month's log and preserve:
Read persisted data only:
Each active panel displays up to 366 items (or 50 in the real-time HTML report). This is customizable with --max-items, though only static HTML, CSV, and JSON output support values greater than 366.
A hit is a request (one line in the access log). HTTP requests with the same IP, date, and user agent are considered a unique visit.
For dual-stack support, use --addr=:: instead of the default --addr=0.0.0.0.
The generated report will attempt to reconnect to the WebSocket server after 1 second with exponential backoff, up to 20 attempts.
If you think you have found a bug, please send an email to .
Gerardo Orellana. For more details or new releases, visit goaccess.io.