Troubleshooting§
Logging§
Unit maintains a single general-purpose log for diagnostics and troubleshooting (not to be confused with the access log). To find out its default location in your installation:
$ unitd -h
unit options:
...
--log FILE set log filename
default: "/path/to/unit.log"
The --log option overrides the default value; if Unit is already running, check whether this option is set:
$ ps ax | grep unitd
...
unit: main v1.34.0 [/path/to/unitd ... --log /path/to/unit.log ...]
If Unit isn’t running, see its system startup scripts or configuration files to check if --log is set, and how.
Available log levels:
- [alert]: Non-fatal errors such as app exceptions or misconfigurations.
- [error]: Serious errors such as invalid ports or addresses.
- [warn]: Recoverable issues such as umount2(2) failures.
- [notice]: Self-diagnostic and router events.
- [info]: General-purpose reporting.
- [debug]: Debug events.
Note
Mind that our Docker images forward their log output to the Docker log collector instead of a file.
Router events§
The log_route option in Unit’s settings allows recording routing choices in the general-purpose log:
Event | Log Level | Description |
---|---|---|
HTTP request line | [notice] | Incoming request line. |
URI rewritten | [notice] | The request URI is updated. |
Route step selected | [notice] | The route step is selected to serve the request. |
Fallback taken | [notice] | A fallback action is taken after the step is selected. |
Sample router logging output may look like this:
[notice] 8308#8339 *16 http request line "GET / HTTP/1.1"
[info] 8308#8339 *16 "routes/0" discarded
[info] 8308#8339 *16 "routes/1" discarded
[notice] 8308#8339 *16 "routes/2" selected
[notice] 8308#8339 *16 URI rewritten to "/backend/"
[notice] 8308#8339 *16 "fallback" taken
It lists specific steps and actions (such as routes/2) that can be queried via the control API for details:
# curl --unix-socket /path/to/control.unit.sock http://localhost/config/routes/2
Debug Events§
Unit’s log can be set to record [debug]-level events; the steps to enable this mode vary by install method.
Warning
Debug log is meant for developers; it grows rapidly, so enable it only for detailed reports and inspection.
Our repositories provide a debug version of unitd called unitd-debug within the unit package:
# unitd-debug <command line options>
To enable debug-level logging when using our Docker images:
$ docker run -d unit:1.34.0-minimal unitd-debug --no-daemon \
--control unix:/var/run/control.unit.sock
Another option is adding a new layer in a Dockerfile:
FROM unit:1.34.0-minimal
CMD ["unitd-debug","--no-daemon","--control","unix:/var/run/control.unit.sock"]
The CMD instruction above replaces the default unitd executable with its debug version.
To enable debug-level logging when installing from source, use the --debug option:
$ ./configure --debug <other options>
Then recompile and reinstall Unit and your language modules of choice.
Core Dumps§
Core dumps help us investigate crashes; attach them when reporting an issue. For builds from our repositories, we maintain debug symbols in special packages; they have the original packages’ names with the -dbg suffix appended, such as unit-dbg.
Note
This section assumes you’re running Unit as root (recommended).
To enable saving core dumps while running Unit as a systemd service (for example, with packaged installations), adjust the service settings in /lib/systemd/system/unit.service:
[Service]
...
LimitCORE=infinity
LimitNOFILE=65535
Alternatively, update the global settings in /etc/systemd/system.conf:
[Manager]
...
DefaultLimitCORE=infinity
DefaultLimitNOFILE=65535
Next, reload the service configuration and restart Unit to reproduce the crash condition:
# systemctl daemon-reload
# systemctl restart unit.service
After a crash, locate the core dump file:
# coredumpctl -1 # optional
TIME PID UID GID SIG COREFILE EXE
Mon 2020-07-27 11:05:40 GMT 1157 0 0 11 present /usr/sbin/unitd
# ls -al /var/lib/systemd/coredump/ # default, see also /etc/systemd/coredump.conf and /etc/systemd/coredump.conf.d/*.conf
...
-rw-r----- 1 root root 177662 Jul 27 11:05 core.unitd.0.6135489c850b4fb4a74795ebbc1e382a.1157.1590577472000000.lz4
Check the core dump settings in /etc/security/limits.conf, adjusting them if necessary:
root soft core 0 # disables core dumps by default
root hard core unlimited # enables raising the size limit
Next, raise the core dump size limit with ulimit, then restart Unit to reproduce the crash condition:
# ulimit -c unlimited
# cd /path/to/unit/
# sbin/unitd # or sbin/unitd-debug
After a crash, locate the core dump file:
# ls -al /path/to/unit/working/directory/ # default location, see /proc/sys/kernel/core_pattern
...
-rw-r----- 1 root root 177662 Jul 27 11:05 core.1157
Check the core dump settings in /etc/sysctl.conf, adjusting them if necessary:
kern.coredump=1
# must be set to 1
kern.corefile=/path/to/core/files/%N.core
# must provide a valid pathname
Alternatively, update the settings in runtime:
# sysctl kern.coredump=1
# sysctl kern.corefile=/path/to/core/files/%N.core
Next, restart Unit to reproduce the crash condition. If Unit is installed as a service:
# service unitd restart
If it’s installed manually:
# cd /path/to/unit/
# sbin/unitd
After a crash, locate the core dump file:
# ls -al /path/to/core/files/
...
-rw------- 1 root root 9912320 Jul 27 11:05 unitd.core
Getting Support§
Support Channel | Details |
---|---|
GitHub | Visit our repo to submit issues, suggest features, ask questions, or see the roadmap. |
Mailing lists | To post questions to unit@nginx.org and get notifications, including release news, email unit-subscribe@nginx.org or sign up here. To receive all OSS release announcements from NGINX, join the general mailing list here. |
Security alerts | Please report security issues to security-alert@nginx.org, specifically mentioning NGINX Unit in the subject and following the CVSS v3.1 specification. |
In addition, we offer commercial support.