The Logger can be configured by sending a PUT API Request to the /logger
path.
A minimal logger configuration example is the following:
# Create the required named pipes.
mkfifo logs.fifo
mkfifo metrics.fifo
# Configure the Logger.
curl --unix-socket /tmp/firecracker.socket -i \
-X PUT "http://localhost/logger" \
-H "accept: application/json" \
-H "Content-Type: application/json" \
-d "{
\"log_fifo\": \"logs.fifo\",
\"metrics_fifo\": \"metrics.fifo\"
}"Details about the required and optional fields can be found in the swagger definition.
The logs.fifo file stores the human readable logs (i.e errors,
warnings etc) while the metrics.fifo file stores the metrics
in JSON format. The metrics get flushed in two ways:
- without user intervention every 60 seconds
- upon user demand by issuing a FlushMetrics request.
When the LogDirtyPages option is specified in the options field, every 60
seconds a metric with the guest dirty pages count is emitted.
The dirty_pages number represents the number of pages in the guest memory
that have been dirtied since the last call to KVM_GET_DIRTY_LOG.
See the KVM documentation for details.
# Create the required named pipes.
mkfifo logs.fifo
mkfifo metrics.fifo
# Configure the Logger.
curl --unix-socket /tmp/firecracker.socket -i \
-X PUT "http://localhost/logger" \
-H "accept: application/json" \
-H "Content-Type: application/json" \
-d "{
\"log_fifo\": \"logs.fifo\",
\"metrics_fifo\": \"metrics.fifo\",
\"options\": [\"LogDirtyPages\"]
}"With each flush of the metrics (either automatically each 60 seconds or
by user demand), the dirty_pages metric is going to be updated.
To check the count of dirty pages in the guest, grep after dirty_pages in the
metrics.fifo named pipe.
$ grep -Eo "\"dirty_pages\":[[:digit:]]+" metrics.fifo
"dirty_pages":0
"dirty_pages":49319
"dirty_pages":1126