File
gnmic
supports exporting subscription updates to multiple local files
A file output can be defined using the below format in gnmic
config file under outputs
section:
outputs:
output1:
# required
type: file
# filename to write telemetry data to.
# will be ignored if `file-type` is set
filename: /path/to/filename
# file-type, stdout or stderr.
# overwrites `filename`
file-type: # stdout or stderr
# string, message formatting, json, protojson, prototext, event
format:
# string, one of `overwrite`, `if-not-present`, ``
# This field allows populating/changing the value of Prefix.Target in the received message.
# if set to ``, nothing changes
# if set to `overwrite`, the target value is overwritten using the template configured under `target-template`
# if set to `if-not-present`, the target value is populated only if it is empty, still using the `target-template`
add-target:
# string, a GoTemplate that allow for the customization of the target field in Prefix.Target.
# it applies only if the previous field `add-target` is not empty.
# if left empty, it defaults to:
# {{- if index . "subscription-target" -}}
# {{ index . "subscription-target" }}
# {{- else -}}
# {{ index . "source" | host }}
# {{- end -}}`
# which will set the target to the value configured under `subscription.$subscription-name.target` if any,
# otherwise it will set it to the target name stripped of the port number (if present)
target-template:
# boolean, valid only if format is `event`.
# if true, arrays of events are split and marshaled as JSON objects instead of an array of dicts.
split-events: false
# string, a GoTemplate that is executed using the received gNMI message as input.
# the template execution is the last step before the data is written to the file,
# First the received message is formatted according to the `format` field above, then the `event-processors` are applied if any
# then finally the msg-template is executed.
msg-template:
# boolean, if true the message timestamp is changed to current time
override-timestamps:
# boolean, format the output in indented form with every element on a new line.
multiline:
# string, indent specifies the set of indentation characters to use in a multiline formatted output
indent:
# string, separator is the set of characters to write between messages, defaults to new line
separator:
# integer, specifies the maximum number of allowed concurrent file writes
concurrency-limit: 1000
# boolean, enables the collection and export (via prometheus) of output specific metrics
enable-metrics: false
# list of processors to apply on the message before writing
event-processors:
# file rotation configuration
rotation:
max-size: 100 # size in megabytes
max-age: 30 # max age in days
max-backups: 3 # maximum number of old files to store, not counting the current file
compress: false # whether or not to enable compression
The file output can be used to write to file on the disk, to stdout or to stderr. Also includes support for rotating files to control disk utilization and maximum age using the rotation
configuration section.
For a disk file, a file name is required.
For stdout or stderr, only file-type is required.