Troubleshooting
Logging
ManageIQ has extensive logging to assist in troubleshooting issues or just seeing what is being worked on.
Appliance Logging
On appliances logging is managed using the built-in systemd-journal system. Journald uses database-like binary files to store log lines along with extensive metadata.
There is a journalctl
command-line utility which can be used to query the journal. Documentation for journalctl can be found at https://man7.org/linux/man-pages/man1/journalctl.1.html
If you want to tail the main evm
logs then you can use journalctl -f -t evm
. Other logs (e.g.: automation
or api
) can be viewed by using their syslog_identifier e.g. journalctl -f -t automation
. You can also view multiple logs by using journalctl -f -t evm -t automation -t api
.
journalctl
allows you to do much more like view logs for a specific unit (aka worker), for a time range, and for a group of workers (e.g. every generic worker).
Here are some helpful examples:
Viewing:
- View all logs:
journalctl
- View all logs, most recent first:
journalctl -r
- View all logs since the last boot:
journalctl -b
- View all logs from the previous boot:
journalctl -b -1
- View all logs from a time range:
journalctl --since "1 hour ago"
- View all logs with extra metadata:
journalctl --output verbose
- Tail all logs:
journalctl -f
Filtering:
- Filter warnings:
journalctl -f -p warning
- Filter errors:
journalctl -f -p err
- Filter warnings and errors:
journalctl -f -p err -p warning
- Logs for a specific unit:
journalctl -f -u manageiq-generic@51113329-8942-4a4c-98d6-1e532656c569.service
- Logs for a group of workers:
journalctl -f -u manageiq-generic.slice
- Logs matching a pattern:
journalctl -g '(Started|Stopping) EVM server''
(accepts perl compatible regular expressions) - Logs for a specific identifier:
journalctl -f -t evm
Other:
- Export to a file:
journalctl --output export > export.log
- Rotate the current journal to an archive:
journalctl --rotate
- Clear out all archived journals:
journalctl --vacuum-time=1s
- Clear out journal archives over a day old:
journalctl --vacuum-time=1d
Almost all of these can be combined together where they don’t conflict (e.g. -f
can’t be used with -r
)
Podified Logging
When running in podified all logs are output to the container’s stdout which is picked up by Kubernetes/OpenShift and made available via kubectl logs
/oc logs
.
The log output format is in JSON and includes extra metadata like the log-level, timestamp:
{
"@timestamp":"2020-01-01T12:34:56.789012",
"pid":12345,
"tid":"6789abcdef01",
"level":"info",
"message":"MIQ(Class#method) Example message"
}
You can also pass a label selector to oc logs
with -l
so for example to tail all generic pods: oc logs -f -l name=1-generic
If you prefer to view the container JSON logs in the standard MIQ format you can use the unjson_logs
utility. This utility is in /var/www/miq/vmdb/tools/unjson_logs
oc logs -l name=1-ui | tools/unjson_logs
[----] I, [2022-06-16T15:40:21.095098 #7:b4e4c] INFO -- production: Started GET "/ems_infra/56?display=vms" for 127.0.0.1 at 2022-06-16 15:40:21 +0000
[----] I, [2022-06-16T15:40:21.100999 #7:b4e4c] INFO -- production: Processing by EmsInfraController#show as HTML
[----] I, [2022-06-16T15:40:21.101242 #7:b4e4c] INFO -- production: Parameters: {"display"=>"vms", "id"=>"56"}