Logging Support
Introduction
The system produces a wealth of information in log files. Most of the log messages generated in the system are that of general events from the various system components. For some of the more important events that are logged, see Security Related Events.
The following methods for logging are available:
-
Logging of default log files: By default all logs are written to an internal RAM disk. Log files written to the internal RAM disk are not persistent across reboots.
-
Logging of default log files to USB: When enabled it will log the same things that are logged to the internal RAM disk, but it will be done to a connected external USB drive.
-
Logging to console port: It is possible to direct logging messages to the console port. Messages of severity level DEBUG or higher are shown on the console port.
-
Logging to user defined sinks: The logging system supports creation of customized logging sources, destinations and filters. These separate components are combined together to create a logging sink. This is a very flexible way to configure logging in the system. It allows for logging to remote machines, local files, or files on external media (USB or SD Card). The sources can also be configured to receive message from other remote machines. The optional filters can also be used to more precisely control what messages are logged.
Overview
The system continuously generates a wealth of information in the form of log messages. These messages serve as a vital resource for monitoring system performance, troubleshooting issues, and understanding system activities.
By default, all log messages are stored on the internal RAM disk. However, the system also provides flexibility in log management. You can configure it to direct these messages to custom log files located on either internal or external media. Alternatively, you can set up the system to forward these messages to remote log servers for centralized logging.
Before we delve into the specifics of configuring the logging system, it’s crucial to grasp the fundamentals of syslog messages. Understanding what a syslog message is and how it’s structured will provide a solid foundation for the subsequent sections.
The Anatomy of a Syslog Message
Depending on the syslog format that is used, a few different fields can be found in a syslog message, in addition to the actual message itself. Regardless of the format, something referred to as Facility and Severity are always present in a syslog message:
-
Facility: The facility indicates the system component that generated the log message. It is used to categorize the message based on the type of system component that generated it. The facility is represented by a number between 0 and 23, where each number corresponds to a specific system component.
These facilities, and some description of how the systems attempts to conform to them, can be seen in Table 1 below.
# Facility Description 0 kern Kernel log messages 1 user User-level messages 2 mail Unused 3 daemon System daemons 4 auth Security/Authorization messages 5 syslog Unused 6 lpr Unused 7 news Unused 8 uucp Unused 9 cron Unused 10 authpriv Unused 11 ftp Unused 12 ntp NTP 13 security Log audit, for audit trail 14 console Log alert 16 local0 Alarm sub-system 17 local1 Unused 18 local2 PPP 19 local3 Unused 20 local4 OpenVPN, IPsec 21 local5 Reserved, OEM customer specific 22 local6 Unused 23 local7 Unused Note
The facilities
security
andconsole
are displayed asLOGAUDIT
andLOGALERT
in Wireshark, which is the de facto tool to debug all network traffic. -
Severity: The severity indicates the level of urgency or criticality of the message. It is used to classify the message based on its importance. The severity is represented by a number between 0 and 7, where each number corresponds to a specific level of criticality.
These severities, and some description of how the systems attempts to conform to them, can be seen in Table 2 below.
# Severity Description 0 emerg System level service only 1 alert System level service only 2 crit System level service only 3 err Severe error, daemon/service may restart 4 warning Significant problem, e.g. no connection to Radius server 5 notice General log message, e.g. login successful 6 info Informational, less important 7 debug Developer/low-level debug messages
The system allows for selection of what format to use, when configuring custom logging destinations. The different formats will be covered briefly in the following sections.
Log Message Formatting
For the examples below, we will use an example log message generated in the
following manner: Sent from the program proc
with the process ID 123
, and
the message Example Message.
. The message is generated with the following
facility and severity: user
and notice
.
Note
The Facility and Severity values of a syslog message are always
present and combined into a single value known as the Priority. This
Priority is computed by multiplying the Facility value by 8 and then
adding the Severity value. For instance, if the Facility value is 1 and
the Severity value is 5, the Priority would be calculated as 8 * 1 + 5
= 13
.
In binary, the Priority value is represented as an 8-bit number. For the
above example, the Priority value of 13 would be represented as 00001101
.
In raw output, such as a Wireshark capture, the Priority is displayed
within angle brackets, like <13>
.
Note
The names of the fields described below, are somewhat based on how they will be displayed in a Wireshark capture.
The system supports three different syslog formats:
-
BSD: A legacy BSD format. Given our example message, the raw format would look like this:
<13>proc[123]: Example message.
The individual fields are interpreted as follows:
-
Priority: The value within the angle brackets
<13>
is the combined Facility and Severity value. -
Message: The remainder of the text following the colon
:
is the actual log message.
Note
In the BSD format, the program name and process ID are not distinctly separated from the message. They are included as part of the overall message text.
-
-
RFC 3164: This is a standardized syslog format defined in RFC 3164. In this format, our example message would appear as follows:
<13>May 21 10:36:31 example proc[123]: Message.
The individual fields are represented by specific parts of the raw message:
-
Priority: The value
<13>
within the angle brackets represents the Priority, which is a combined value of Facility and Severity. This value is calculated by multiplying the Facility value by 8 and then adding the Severity value. -
Timestamp: The
May 21 10:36:31
part of the message represents the Timestamp, indicating the date and time when the message was generated. The timestamp is formatted according to the local time and date of the machine that generated the message. -
Hostname: The
example
part of the message indicates the Hostname or IP address of the machine that generated the message. The hostname is used to identify the source of the message in a networked environment. -
Process ID: The
proc[123]
part of the message is the Tag, which usually consists of the process nameproc
and process ID123
. The tag is used to identify the specific process that generated the message. -
Message ID: The
Message.
part of the message following the colon is the actual log Message. This message contains the detailed information about the event that triggered the log entry.
Note
When viewed in a Wireshark capture, the PID
123
will be displayed as part of the Message ID filed, before the actual message. -
-
RFC 5424: This is a more modern syslog format defined in RFC 5424. In this format, our example message would appear as follows:
<13>1 2024-05-21T12:18:24+00:00 example proc 123 - [meta sequenceId="4"] Message.
The individual fields are represented by specific parts of the raw message:
-
Priority: The value
<13>
within the angle brackets represents the Priority, which is a combined value of Facility and Severity. This value is calculated by multiplying the Facility value by 8 and then adding the Severity value. -
Version: The
1
following the priority field represents the version of the syslog protocol, as defined in RFC 5424. This version number, ‘1’, signifies that the message conforms to the first revision of the protocol that introduced changes to the header format. -
Timestamp: The
2024-05-21T12:18:24+00:00
part of the message represents the Timestamp, indicating the date and time when the message was generated. The timestamp is formatted according to the ISO 8601 standard. -
Hostname: The
example
part of the message indicates the Hostname or IP address of the machine that generated the message. The hostname is used to identify the source of the message in a networked environment. -
Application Name: The
proc
part of the message is the Application Name, which usually identifies the device or application that originated the message. -
Process Id: The
123
part of the message is the Process ID, which usually identifies the process that generated the message. -
Message ID: The
-
part of the message is the Message ID, which is a unique identifier for the type of message. In this case, no Message ID is provided. -
Structured-Data: The
[meta sequenceId="4"]
part of the message is the Structured-Data, which provides additional information about the message in a structured format. -
Message: The
Message.
part of the message following the Structured-Data is the actual log Message.
-
Default Log Files
As mentioned earlier, the system will always create a number of default log
files. These log files are stored on the internal RAM disk, under the
/var/log/
directly. In Table 3 below, the default log files along with their
associated facilities and severities are listed.
Log File | Facility | Severity | Description |
---|---|---|---|
auth.log | auth, authpriv | * | Logs related to authentication are stored in auth.log. |
kern.log | kern | * | Kernel logs are stored in kern.log. |
alarm | local0 | * | Alarm logs are stored in alarm. |
cli | local1 | * | Command Line Interface logs are stored in cli. |
ppp.log | local2 | * | Point-to-Point Protocol logs are stored in ppp.log. |
ntp.log | local3, ntp | * | Network Time Protocol logs are stored in ntp.log. |
openvpn.log | local4 | * | OpenVPN logs are stored in openvpn.log. |
syslog | All except auth, authpriv | * | Logs from all facilities except ‘auth’, ‘authpriv’ are stored in syslog. |
messages | All except auth, authpriv, cron, kern, mail, news | * | Logs from all facilities except ‘auth’, ‘authpriv’, ‘cron’, ‘kern’, ‘mail’, ‘news’ are stored in messages. |
Note
There may be additional log files created by the system by default, that are not listed in the table above. However, the log files listed in the table should always be present in the system, if a message is generated that should be logged to one of these log files, based on the facility and severity of the message.
Warning
As mentioned earlier, the default log files are stored on the internal RAM disk. This means that any log messages sent to a file on the internal media will be lost upon reboot.
The default log file in the system is the messages log file. This log file contains most of the log messages generated by the system. The auth log file contains log messages related to authentication, such as login attempts and authentication failures. The kern log file contains kernel log messages, providing information about the internal operations of the kernel. The syslog log file is also good to view if we want to see all log messages, including the kernel messages, except those related to authentication.
In order to list all the currently available log files located on the internal
RAM disk, including the default log files, use the dir log
command:
example:/#> dir log example:/#> dir log /log/ MOD. DATE/LINK SIZE MD5 alarm 2024-05-20 14:18 276 appendix.log 2024-05-20 14:18 118 auth.log 2024-05-20 14:18 754 bootsettings.log 2024-05-20 14:18 20 btmp 2024-05-20 14:18 0 kern.log 2024-05-20 14:19 2772 lastlog 2024-05-20 14:18 0 messages 2024-05-20 14:49 7717 mount.log 2024-05-20 14:18 1170 ntp.log 2024-05-20 14:18 134 syslog 2024-05-20 14:49 10489 wtmp 2024-05-20 14:18 2304 Free: 19.10 MiB | Total: 20.1 MiB example:/#>
Note
The individual size for each of the default log files is limited to 100K. Each file will be rotated up to one time, meaning that the system will keep the current log file and the previous log file. As an example, if the messages log file reaches 100K, it will be renamed to messages.0 and a new messages log file will be created.
Each default log file will also allow for two compressed log files to be retained. A log file is compressed when we reach the maximum number of rotations for a given log file. When this happens, the oldest rotated log file will be compressed. The compressed log files will be named messages.1.gz and messages.2.gz. The system will keep the most recent compressed log file and delete the oldest compressed log file when a new compressed log file is created.
As an example, if we say that we have an average message size of 100-200 bytes, we can allow for around 500-1000 messages in each log file. This is a rough estimate, and the actual number of messages that can be stored in a log file will depend on the actual size of the messages.
To view the contents of a specific log file, the show log
command can be used.
As mentioned earlier, the messages log file is the main log file in the
system, and it will be displayed if nothing else is specified:
example:/#> show log [...] May 20 14:53:46 example finit[1]: Starting lldpd:, PID: 1058 May 20 14:53:47 example lldpcli[1059]: lldpd should resume operations ______________________________________________________________________________ log://messages Mon May 20 14:53:47 2024 example:/#>
In order to view a specific log file, the show log://FILE
command can be
used. For instance, to view the auth.log log file:
example:/#> show log://auth.log [...] May 20 14:18:15 example login[811]: Authentication successful for user 'admin' May 20 14:18:15 example login[811]: pam_unix(login:session): session opened for user admin(uid=0) by LOGIN(uid=0) May 20 14:18:15 example login[912]: root login on 'console' ______________________________________________________________________________ log://auth.log Mon May 20 14:18:15 2024 example:/#>
Remember the short-keys to the show
command when listing long files:
R
: show the rest of the fileq
: Quit viewer
Tip
Also, the follow
command is very useful when monitoring log files. It
continuously lists new lines as they are appended to a file. Use
Ctrl-C
to stop and return to the command prompt.
example:/#> follow log Press Ctrl-C to abort May 20 14:53:46 S1 dnsmasq[1047]: read /etc/hosts - 3 names May 20 14:53:46 S1 finit[1]: Starting lldpd:, PID: 1058 May 20 14:53:47 S1 lldpcli[1059]: lldpd should resume operations
Security Related Events
The system produces a lot of different log messages, but there are a few that are considered a bit more important in terms of security. As such they are listen below, in Table 4.
Event | Facility | Severity | Example |
---|---|---|---|
Login successful | auth | notice | Authentication successful for user ‘admin’ from 10.0.0.1 |
Login failed | auth | warning | Authentication failed for user ‘admin’ from 10.0.0.1 |
Audit trail | security | notice | User ‘admin’ changed the configuration |
System startup | console | notice | \\/ Westermo WeOS v5.7, entering runlevel 3 |
System shutdown | console | notice | \\/ Westermo WeOS v5.7, entering runlevel 6 |
System update | console | notice | \\/ Westermo WeOS v5.7, entering runlevel 9 |
Enter Maintenance mode | user | notice | Entering maintenance mode for upgrade to WeOS-5.7.x.pkg … |
Exit Maintenance mode | user | notice | Exiting maintenance mode for upgrade |
Service start | console | notice | Starting mdnsd:1, PID: 1203 |
Service stop | console | notice | Stopping mdnsd:1, PID: 1203, sending SIGTERM… |
Service restarting | console | notice | Restarting mdnsd:1, PID: 1203, sending SIGHUP… |
Service Died | console | warning | Service mdnsd:1 died, restarting (1/10) |
Service FAIL | console | warning | Service mdnsd:1 keeps crashing, not restarting |
Link up | console | notice | Link up on eth1 |
Link down | console | notice | Link down on eth1 |
DHCP Unknown host ID | console | warning | DHCPDISCOVER(11:22:33:44:55:66) vlan1 no address available |
NTP reply not synced | ntp | info | reply from 10.0.0.1: not synced (alarm), next query 64s |
NTP synced | ntp | info | clock is now synced |
NTP peer valid | ntp | info | peer 10.0.0.1 now valid |
NTP update FAIL | ntp | err | no reply received in time, skipping initial time setting |
TTDP stack ready | daemon | notice | Bypass relays in normal position (upon startup; IEC 61375) |
ECSC comm. established | daemon | notice | ECSP_CTRL traffic heard from ECSC (upon startup; IEC 61375) |
The messages that are generated for these events should mostly conform to the examples given in Table 4. However, it is possible that the messages are slightly different. They are indicative of the type of messages that are generated for these events.
Logging Sink Overview
The system provides a highly customizable logging system that allows for the configuration of custom logging sources, destinations, and filters. These components are combined to create what is called a sink. A sink is a combination of the mentioned components and allows for the creation of customized logging setups.
In Figure 1 below, we show an example of the relationship between the different logging components and how they can be combined to create a logging sink. This simple example includes two sources, two destinations, and two filters. There are two sinks that combine the components in the following way:
- Sink-1: Utilizes
Source-1
,Source-2
andDestination-1
. - Sink-2: Utilizes
Source-2
,Destination-2
,Filter-1
, andFilter-2
.
As we can see, source-2
is used in both sinks, and filter-1
and filter-2
are only used in sink-2
because they are optional components.
┌─Sources─────────────────────────┐ ┌─Destinations────────────────────┐ ┌─Filters─────────────────────────┐
│ │ │ │ │ │
│ ┌─────────────┐ ┌─────────────┐ │ │ ┌─────────────┐ ┌─────────────┐ │ │ ┌─────────────┐ ┌─────────────┐ │
│ │ Source-1 │ │ Source-2 │ │ │ │Destination-1│ │Destination-2│ │ │ │ Filter-1 │ │ Filter-2 │ │
│ └┬────────────┘ └┬────────────┘ │ │ └┬────────────┘ └┬────────────┘ │ │ └┬────────────┘ └┬────────────┘ │
│ │ │ │ │ │ │ │ │ │ │ │
│ ▼ ▼ │ │ ▼ ▼ │ │ ▼ ▼ │
└─────────────────────────────────┘ └─────────────────────────────────┘ └─────────────────────────────────┘
│ │ │ │ │ │
│ ┌─────────────┴─────────────────┐ │ ┌─────────────┘ │ │
│ │ │ │ │ │ │
│ │ ┌───────────────────────────────┘ │ ┌───────────────────────────────┘ │
│ │ │ │ │ │ │
│ │ │ │ │ │ ┌─────────────────────────────────────────────┘
│ │ │ │ │ │ │
▼ ▼ ▼ ▼ ▼ ▼ ▼
┌─────────────┐ ┌─────────────┐
│ Sink-1 │ │ Sink-2 │
└─────────────┘ └─────────────┘
Configuration of these logging sinks is what allows for specialized logging setups, such as logging to remote machines, local files, or files on external media (USB or SD Card).
Note
No log messages will be received from any source or sent to any destination unless a sink is configured to utilize them.
The way in which these components can be defined and combined allows for a very flexible and powerful logging system. The following sections will describe each of these components in more detail.
Supported Transport Protocols
Both logging sources and destinations can use the following transport protocols to send and receive log messages from remote machines:
-
UDP: UDP (User Datagram Protocol) is a connectionless protocol that allows for fast and lightweight communication. It is commonly used for log message transmission due to its simplicity and low overhead. Log messages sent over UDP are not guaranteed to arrive at the destination, but they are typically sent in a fire-and-forget manner.
Warning
Messages will be sent in clear text, i.e. the messages will be readable by anyone who can intercept the messages.
-
TCP: TCP (Transmission Control Protocol) is a reliable and connection-oriented protocol that ensures the delivery of log messages. It provides features such as error checking, flow control, and retransmission of lost packets. Log messages sent over TCP are guaranteed to arrive at the destination, but they may introduce additional latency compared to UDP.
Warning
Messages will be sent in clear text, i.e. the messages will be readable by anyone who can intercept the messages.
-
TLS: TLS (Transport Layer Security) is a cryptographic protocol that provides secure communication over a network. It is used to encrypt log messages sent to remote destinations, ensuring the confidentiality and integrity of the data. TLS adds an extra layer of security to log message transmission, protecting against eavesdropping and tampering.
Note
TLS will use TCP as the underlying protocol.
Tip
Messages will be encrypted, i.e. the messages will not be readable by anyone who can intercept the messages.
For more information on how certificates are used in the system, see the Certificate Management section.
In conclusion, the choice of transport protocol for log message transmission depends on the specific requirements of your system. UDP offers speed and simplicity, making it suitable for situations where high throughput is more important than guaranteed delivery. TCP, on the other hand, ensures that every log message reaches its destination, at the cost of additional latency. For secure communication, TLS is the go-to choice as it encrypts log messages, protecting them from eavesdropping and tampering. Remember, each protocol has its strengths and trade-offs, and the best choice depends on the balance between speed, reliability, and security in your specific use case.
Sources
A logging source is a component that specifies where the log messages originate from. There are different types of sources available:
-
Local: Log messages generated by the system itself. Local log messages can be divided into two categories:
-
Userspace: Log messages generated by the system itself, including system services, applications, and other non-kernel related sources. These messages provide information about the behavior and status of various processes running on the system. Userspace log messages are typically used for troubleshooting and monitoring purposes.
-
Kernel: Log messages generated by the kernel itself, which is the core component of the operating system. Kernel log messages provide information about internal operations of the kernel, such as hardware events, driver activity, and system errors. These messages are crucial for diagnosing and debugging issues at the system level.
Both userspace and kernel log messages are important for understanding the overall health and performance of a system. By analyzing these log messages, administrators and developers can identify issues, track system behavior, and make informed decisions for system optimization and troubleshooting.
-
-
Remote: Log messages received from remote machines. When a remote source is defined, the system listens for incoming log messages on the specified port. The following transport protocols are supported: UDP, TCP, and TLS.
Configuring a remote source allows the system to receive log messages from external sources, enabling centralized logging and monitoring of multiple systems.
However, since our devices are typically not used as log servers, a more common approach would be to use them as log-server relays, forwarding log messages to a dedicated log server. One advantage of this solution is that log messages sent over UDP to the relay can be forwarded to the log server over a more reliable TCP connection or a secure TLS connection.
Destinations
A logging destination is a component that specifies where the log messages are sent to. There are different types of destinations available:
-
File: Used to send log messages to a local file on the device or to a connected external media device (e.g., USB or SD-Card). When the file destination is specified, a media type and a path relative to that media must be provided.
Note
For the internal media, the path is relative to the
/log/
folder on the device.Warning
Keep in mind that the internal media for logging, where the
/log/
folder is located, is stored on the internal RAM disk. This means that any log messages sent to a file on the internal media will be lost upon reboot. To retain log messages after a reboot, ensure to log them to a file on an external media device, or alternatively forward them to a remote destination.The media definitions are the same as those used in other parts of the system. For more information on how to configure media definitions, see the Media Settings part of the Boot Configuration.
When logging to a file, you can specify a log rotation policy by setting the maximum size of each log file, the number of log files to retain, and the number of compressed log files to retain.
-
Remote: Used to send log messages to a remote machine. The following transport protocols are supported: UDP, TCP, and TLS.
Configuring a remote destination allows the system to send log messages to an external log server, enabling centralized logging and monitoring of multiple systems. Remote destinations are commonly used to forward log messages to a dedicated log server for storage, analysis, and monitoring.
-
Console: Used to display log messages directly on the attached console Log messages sent to the console are displayed in real-time, allowing administrators to monitor system activity and diagnose issues directly from the console.
Warning
Keep in mind that when sending log messages to the console, it may be more difficult to operate the device using the CLI, as the log messages will be interspersed with the command output. It will not overwrite any written commands, but it will be displayed in between the command output, making it harder to read.
Each individual destination has a buffer that stores log messages until they are sent to the destination. For instance, if the device cannot reach the remote destination, the log messages will be stored in the buffer until the connection is reestablished.
This buffering mechanism applies not only to logging to remote destinations but also to logging to files on the device. However, it is particularly relevant when logging to local files stored on a connected external media device, rather than when logging to files on the internal RAM disk. This is because the IO operation to the external media device might be slower than the rate at which log messages are generated, especially in situations where a larger burst of log messages occurs. In such cases, the buffer stores the log messages until they can be written to the external media device.
Note
The buffer size is limited. If it becomes full, any new log messages will be dropped until there is space in the buffer again.
Note
To prevent the log buffer from using too much memory, the maximum number of log messages that can be buffered for each destination is divided among all the destinations in use. This means that if you have multiple destinations, the buffer size for each destination will be smaller than if you only have one destination.
Filters
A logging filter is an optional component that can be used to either include or exclude log messages based on specific criteria. Filters are used to define what type of messages are sent to the logging destination. There are a number of different filter types that can be utilized:
-
Facility: Filter messages based on the facility of the log message. The facility indicates the type of system component that generated the log message, mentioned in an earlier section.
-
Severity: Filter messages based on the severity of the log message. The severity indicates the level of criticality of the log message, mentioned in an earlier section.
-
Hostname: Filter messages based on the hostname of the device that generated the log message. This is done by matching on the HOST field in the syslog message.
Tip
Supports regular expressions for more advanced matching.
-
Message: Filter messages based on the content of the log message.
Tip
Supports regular expressions for more advanced matching.
-
Program: Filter messages based on the program name that generated the log message. This is done by matching on the PROGRAM field in the syslog message.
Tip
Supports regular expressions for more advanced matching.
-
Network: Filter messages based on a provided IP subnet. If the sender of the log message is within the specified subnet, it will be a match.
-
Rate-limit: Filter messages if they exceed a certain provided rate of log messages per second. This is useful for preventing log flooding attacks.
It is also possible to perform the rate limit per a specific type of content that is part of the log message:
- Host: The rate limit is performed per host that is sending log messages.
- Source IP: The rate limit is performed per source IP address that is sending log messages.
- Facility: The rate limit is performed per facility that is sending log messages.
- Severity: The rate limit is performed per severity level that is sending log messages.
Tip
It is possible to invert a filter by using the setting it to invert
.
Meaning that the filter will allow all messages that do not match the filter
criteria. As an example, if we have a filter that specify severity debug
and we set it to inverted
, it will allow all messages that are not of
severity debug
.
Each individual filter can combine multiple of these filter types for the same
filter definition. However, if we want to combine multiple filters that, for
instance, use the same filter type, we need to create multiple filter
definitions and combine them using the and
or or
operators, when we assign
them to a sink.
Sinks
When all the other components have been defined, a sink object can be created. Configuration of a sink is very straightforward, it is simply specifying the source(s) and destination(s) to use, and optionally the filter(s) to use.
However, when specifying multiple filters, their relation to each other must be
taken into account. The filters can be combined using the and
or or
operators. Each subsequent filter will be combined with the previous filter
using the specified operator. As an example if we have four filters, filter-1
,
filter-2
, filter-3
, and filter-4
, and we combine them in the following
way:
example:/config/logging/sink-1/#> filter filter-1 and filter-2 or filter-3 and filter-4
This means that the sink will allow messages that match filter-1
and
filter-2
or messages that match filter-3
and filter-4
.
When the sink has been finalized and its configuration activated, it will start to send log messages from the source(s) to the destination(s) based on the filter(s) specified.
Configuration
The logging in the system can be configured from the top-level configuration context in the CLI:
example:/#> configure example:/config/#> logging example:/config/logging/#>
We will separate these sections into the following sub-sections:
- General Logging Configuration
- Source Configuration
- Destination Configuration
- Filter Configuration
- Sink Configuration
General Logging Configuration
The general logging settings are configured directly under the logging
context:
example:/config/logging/#>
[no] console
-
Use to enable or disable logging directly on the console.
Default: Disabled
Example example:/config/logging/#> console example:/config/logging/#> no console
no
- Disable logging to the console.
[no] external-logging [SIZE [COUNT]]
-
Enable or disable logging of default log files external media, e.g. USB/SD-Card.
When enabled the same log files that are logged to the local RAM disk will also be logged to the specified external media.
A folder called /log/ will be created on the external media if it does not exist, this is where the log files will be created.
All log files are automatically compressed from generation .1
Note
Sinks can be configured to log to a file on external media, regardless if this setting is enabled or not. This setting only handles logging of the systems default log files to the specified external media.
Default: Disabled
Example Enable external logging and Keep 10 log files, each 10MiB (uncompressed):
example:/config/logging/#> external-logging 10M 10
no
- Disable logging of default log files to usb.
SIZE
- Max size of each log file, in uncompressed form. Takes an optional k/M size modifier.
COUNT
- Number of log files to keep, in total.
[no] external-logging-media [MEDIA]
-
Specify the target external media (USB/SD-Card) for the logging.
The selectable medias are based on the configured medias in the boot configuration context. Any media name can be configured, but a warning will be displayed if it is not also configured in the boot configuration.
Tip
Refer to this page for help on how to correctly set up access to external media devices.
Default: external
Example example:/config/logging/#> external-logging-media my-other-media
no
- Reset the option to default, the default
external
media. MEDIA
-
Dynamically created using the
media
command in the boot configuration context. Use thedo show media
command in the current context to list all existing media definitions. All usable media definitions will be listed under Active. In addition, two default media definitions exist if no changes have been made to medias in the boot context:W-
internal:
The representation of the built-in flash. This cannot be changed or removed. -
external:
The default media definition for any connected external media device (e.g. USB, SD-Card). It is configured to always match the first partition on said external media device. This definition is not static or locked, it can be freely adjusted by the user, even removed.
-
[no] secure-mode
-
Enable or disable secure mode. This setting determines whether the unit reject or accept any logging messages from remote machines. By default secure mode is enabled, meaning the unit operates in a secure way and do not accept any messages from remote machines.
Default: Enabled
Example example:/config/logging/#> secure-mode example:/config/logging/#> no secure-mode
no
- Disable secure mode.
Source Configuration
Each source configuration has its sub-context under the logging
context:
example:/config/logging/#> source example example:/config/logging/source-example/#>
[no] name NAME
-
Change the name of the source. The name is a free form string that identifies the source. The name is used to select the source when configuring a sink.
Note
If the name is changed it will also be changed in all sinks that uses this source, so it is not necessary to update all sinks that uses this source.
Example example:/config/logging/source-example/#> name my-source
no
- Does nothing for this command, the source must have a name.
NAME
- The free form name of the source. It can be up to 15 characters
long. It allows for the following characters:
a-z
,A-Z
,0-9
,-
, and_
.
[no] type local|remote
-
Specify the type of the source.
A source can be either local, i.e the device itself, or some other remote device capable of sending syslog messages.
Note
If the source is remote it is important to also ensure that the ‘secure-mode’ option, under the global logging configuration context, is set to disable. While ‘secure-mode’ is enabled the device will not allow any remote log messages to be received by the device (This option is by default enabled).
Example example:/config/logging/source-example/#> type local example:/config/logging/source-example/#> type remote
no
- Does nothing for this command, the source must have a type.
local
-
The source is the device itself.
Note
When this type is selected, additional settings will be available to configure the source. These settings are specific to the local source type. See the Source Local Specific.
remote
-
The source is a remote device.
Note
When this type is selected, additional settings will be available to configure the source. These settings are specific to the remote source type. See the Source Remote Specific.
Source Local Specific
When the source type is set to local
, additional settings are available to
configure the source. These settings are specific to the local source type.
example:/config/logging/source-example/#> type local
[no] userspace
-
Enable or disable local userspace log messages.
When enabled, the source will collect log messages from userspace processes on the local machine. This includes messages from system daemons, user applications, and other non-kernel processes. When disabled, these messages will not be collected.
Default: Enabled
Example example:/config/logging/source-example/#> userspace example:/config/logging/source-example/#> no userspace
no
- Disable logging of userspace log messages.
[no] kernel
-
Enable or disable local kernel log messages.
When enabled, the source will collect log messages from the local machine’s kernel. This includes messages related to the operation of the kernel, hardware drivers, and system services. When disabled, these messages will not be collected.
Default: Enabled
Example example:/config/logging/source-example/#> kernel example:/config/logging/source-example/#> no kernel
no
- Disable logging of kernel log messages.
Source Remote Specific
When the source type is set to remote
, additional settings are available to
configure the source. These settings are specific to the remote source type.
example:/config/logging/source-example/#> type remote
[no] format rfc3164|rfc5424
-
Set the syslog formatting to expect from remote clients.
Default: rfc5424
Example example:/config/logging/source-example/#> format rfc3164 example:/config/logging/source-example/#> format rfc5424
no
- Does nothing for this command, the source must have a format.
rfc3164
-
Use the RFC 3164 syslog format. This the traditional syslog format that includes a timestamp, hostname, process name, process ID, and the message.
Example of a message in RFC 3164 format:
Nov 18 09:36:42 hostname proc[123] message rfc5424
Use the RFC 5424 syslog format. This is a newer syslog format that includes structured data and additional fields.
Example of a message in RFC 5424 format:
1 2019-11-18T09:36:42.000321+01:00 hostname proc 123 - - message [no] transport udp|tcp|tls
Specify the transport protocol to be used for the source.
This option allows for specification of the transport protocol to be used for the source. Any client that wants to send messages to the device must use the same transport protocol.
Default: TLS
Example example:/config/logging/source-example/#> transport udp example:/config/logging/source-example/#> transport tcp example:/config/logging/source-example/#> transport tls
no
- Does nothing for this command, the source must have a transport.
udp
- Use the User Datagram Protocol. This is a connectionless protocol that does not guarantee delivery of packets.
tcp
- Use the Transmission Control Protocol. This is a connection oriented protocol that guarantees delivery of packets.
tls
-
Use the Transport Layer Security protocol. This is a secure protocol that provides encryption and authentication.
Note
When this type is selected, additional settings will be available to configure the source. These settings are specific to the TLS transport protocol. See the Source Remote TLS Specific.
[no] ip-protocol ipv4|ipv6
Specify the IP protocol to be used for the source.
This option allows for specification of the IP protocol to be used for the source. Any client that wants to send messages to the device must use the same IP protocol.
Default: IPv4
Example example:/config/logging/source-example/#> ip-protocol ipv4 example:/config/logging/source-example/#> ip-protocol ipv6
no
- Does nothing for this command, the source must have an IP protocol.
ipv4
- Expect messages to be sent using the IPv4 protocol.
ipv6
- Expect messages to be sent using the IPv6 protocol.
[no] listen [IFNAME]
Specify a specific interface, with static address, to listen on.
This option allows for providing a specific IP address to listen on. By default every available interface will be listened on, i.e. we bind to the address 0.0.0.0.
If a specific interface should be listened on, provide the interface name as the argument to this option.
Note
The interface must have a static IP address configured, otherwise the device will not be able to bind to the address. If the interface has more than one address, only the first address will be used.
Tip
If you want to receive only messages from a specific remote host, based on its IP address, configure a filter for to handle that instead.
Default: Listen on all available interfaces.
Example example:/config/logging/source-example/#> listen vlan1 example:/config/logging/source-example/#> no listen
no
- Listen on all available interfaces.
IFNAME
- The name of the interface to listen on. Only one specific interface can be provided.
[no] port [PORT]
Specify another port to use, other than the default.
This configuration option allows for specification of a non-default source port for the remotely received messages.
Default: Depends on the transport protocol. UDP: 514, TCP: 601, TLS: 6514,
Example example:/config/logging/source-example/#> port 5514
no
- Reset the port to the default value.
PORT
- The port number to use for the source. The port number must be in the range 1-65535.
[no] keep-hostname
Enable or disable hostname rewriting.
If this setting is enabled, the hostname specified in the HOST field of the incoming log messages for the source will be preserved.
For instance, this can be useful if the original sender’s hostname should be preserved when acting as a syslog relay.
If disabled, the HOST field of the message will be rewritten to indicate that it was sent from this device, if the log source is used when sending to another remote destination.
Note
If the received log message contains no hostname, a hostname will be added to the message. For a message that has been received from a remote source, the hostname will be the address of the sender.
Default: Disabled
Example example:/config/logging/source-example/#> keep-hostname example:/config/logging/source-example/#> no keep-hostname
no
- Disable hostname rewriting.
[no] use-dns [local-only]
Enable or disable DNS usage for hostname resolving.
Handling of syslog messages will block on DNS queries. Therefore, if this setting is enabled, a DoS scenario could potentially occur. To prevent this, or reduce the risk, ensure that relevant firewall rules are configured. Furthermore, it’s important to ensure that any host that may send messages and can reach this source is resolvable.
If the
local-only
option is specified, hostname resolution attempts will be performed locally only for statically configured hosts. These can be configured under the ‘dns’ context using the ‘host’ command.Note
This setting has no effect if the keep-hostname setting is enabled, and an incoming message contains a hostname in its HOST field.
Default: Enabled
Example example:/config/logging/source-example/#> use-dns example:/config/logging/source-example/#> use-dns local-only example:/config/logging/source-example/#> no use-dns
no
- Disable DNS usage for hostname resolving.
local-only
-
Only use locally configured DNS entries for hostname resolving.
See the DNS Configuration section for more information on how to configure DNS entries.
Source Remote TLS Specific
When the source type is set to
remote
and the transport protocol is set totls
, additional settings are available to configure the source. These settings are specific to the remote source type and the TLS transport protocol.example:/config/logging/source-example/#> type remote example:/config/logging/source-example/#> transport tls
[no] peer-verify [untrusted|trusted]
-
Select the verification method to be used during TLS handshake.
The peer-verify option can be used to specify the level of verification that should be performed during the TLS handshake.
The value is a combination of two properties:
-
First we specify whether the peer is required to provide a certificate or if it is optional:
- Required: When
peer-verify
is specified. - Optional: When
no peer-verify
is specified.
- Required: When
-
Second we specify whether the certificate provided needs to be valid (Trusted) or not (Untrusted):
- Trusted: When the
trusted
option is specified. - Untrusted: When
untrusted
option is specified.
- Trusted: When the
Based on the combination of these two properties, the following combinations are possible:
-
Optional Untrusted: The peer is not required to provide a certificate, but if it does, it does not need to be verified.
-
Optional Trusted: The peer is not required to provide a certificate, but if it does, it needs to be verified.
-
Required Untrusted: The peer is required to provide a certificate, but it does not need to be verified.
-
Required Trusted: The peer is required to provide a certificate, and it needs to be verified.
For all the scenarios where
Trusted
is specified, a CA certificate needs to be provided as well, in order to verify the certificate provided by the peer.Note
If only
peer-verify
is specified, it defaults to usingtrusted
.If only
no peer-verify
is specified, it defaults to usinguntrusted
.These two commands are just shorthand commands for the most strict and least strict verification methods.
Default: Required Trusted, i.e.
peer-verify trusted
.Example example:/config/logging/source-example/#> peer-verify untrusted example:/config/logging/source-example/#> peer-verify trusted example:/config/logging/source-example/#> peer-verify example:/config/logging/source-example/#> no peer-verify untrusted example:/config/logging/source-example/#> no peer-verify trusted example:/config/logging/source-example/#> no peer-verify
no
- Make the peer verification optional during the TLS handshake, i.e. the peer is not required to provide a certificate.
untrusted
- If a certificate is provided, it does not need to be verified.
trusted
- If a certificate is provided, it needs to be verified.
-
[no] certificate [NAME]
-
Specify the Certificate to use.
The selected certificate will be used for authenticating the source against any client that connects to it.
Note
The certificate must be imported into the system before it can be used. For more information on how to import certificates, see the Certificate Management section.
Default: None
Example example:/config/logging/source-example/#> certificate my-cert
no
- Remove the certificate from the source.
NAME
- The name of the certificate to use.
[no] ca-certificate [NAME]
-
Specify the CA Certificate to use.
The selected CA certificate will be used for verifying any certificate that is provided by clients that connect to the source.
Note
The CA certificate must be imported into the system before it can be used. For more information on how to import certificates, see the Certificate Management section.
Note
If the
peer-verify
option is set totrusted
, a CA certificate must be provided.Default: None
Example example:/config/logging/source-example/#> ca-certificate my-ca-cert
no
- Remove the CA certificate from the source.
NAME
- The name of the CA certificate to use.
Destination Configuration
Each destination configuration has its sub-context under the
logging
context:example:/config/logging/#> destination example example:/config/logging/destination-example/#>
[no] name NAME
-
Change the name of the destination. The name is a free form string that identifies the destination. The name is used to select the destination when configuring a sink.
Note
If the name is changed it will also be changed in all sinks that uses this destination, so it is not necessary to update all sinks that uses this destination.
Example example:/config/logging/destination-example/#> name my-destination
no
- Does nothing for this command, the destination must have a name.
NAME
- The free form name of the destination. It can be up to 15 characters
long. It allows for the following characters:
a-z
,A-Z
,0-9
,-
, and_
.
[no] type file|remote|console
-
Specify the type of the destination.
A destination can be either a file, a remote server, or the console.
Example example:/config/logging/destination-example/#> type file example:/config/logging/destination-example/#> type remote example:/config/logging/destination-example/#> type console
no
- Does nothing for this command, the destination must have a type.
file
-
The destination is a file on the device or external media.
Note
When this type is selected, additional settings will be available to configure the destination. These settings are specific to the file destination type. See the Destination File Specific.
remote
-
The destination is a remote server.
Note
When this type is selected, additional settings will be available to configure the destination. These settings are specific to the remote destination type. See the Destination Remote Specific.
console
-
The destination is the console.
Note
When this type is selected, no additional settings are available to configure the destination.
Warning
Keep in mind that when sending log messages to the console, it may be more difficult to operate the device using the CLI, as the log messages will be interspersed with the command output. It will not overwrite any written commands, but it will be displayed in between the command output, making it harder to read.
Destination File Specific
When the destination type is set to
file
, additional settings are available to configure the destination. These settings are specific to the file destination type.example:/config/logging/destination-example/#> type file
[no] media [internal|MEDIA]
-
Specifies the target media where the log file will be stored.
The file name/path, set with the
file-name
command, will be relative to the root of the specified media.Tip
Refer to this page for help on how to correctly set up access to external media devices.
Tip
Tab completion is available for the
MEDIA
argument, to list all existing media definitions.Default: None
Example example:/config/logging/destination-example/#> media internal example:/config/logging/destination-example/#> media external example:/config/logging/destination-example/#> media my-other-media
no
- Removes the configured media from the destination. However, if another media is not specified, the destination configuration will be invalid.
internal
-
Sets the destination to the internal memory of the device. This is a special media definition that will always exist. When used in the context of a logging media, it refers to the /log/ directory on the internal RAM disk. Therefore, specified
file-name
will be relative to this directory.Warning
As mentioned above, the internal log directory is located on the internal RAM disk. This means that the log files will be lost upon reboot or power loss, because the RAM disk is not persistent.
MEDIA
-
Specifies the name of the external media to use. Any log file, set with the
file-name
command, will be relative to the root of the specified media, e.g. /media/external/.The media must be defined in the boot configuration context, see Boot Configuration for more information. The reason for this is to give the user full control over which media devices should be made available on the system in general.
Note
By default, the media definition external is available for use. This definition is configured to always match the first partition on any connected external media device (e.g. USB, SD-Card).
This definition is not static or locked, it can be freely adjusted by the user, even removed.
Tip
Use the
do show media
command in the current context to list all existing media definitions. All usable media definitions will be listed under Active.
[no] file-name [PATH]
-
Specify the name or the path of the log file to be used.
The provided
PATH
will be relative to the root of the specified media, set with themedia
command.Warning
If a path is specified, ensure that all directories in the path exist. Failure to do so will result in the log file not being created.
Default: None
Example example:/config/logging/destination-example/#> file-name my-log-file.log example:/config/logging/destination-example/#> file-name /my-folder/my-log-file.log
no
- Removes the configured file name from the destination. However, if another file name is not specified, the destination configuration will be invalid.
PATH
-
The name or path of the log file to use. The file name/path can be up to 127 characters long.
The file name part of the
PATH
can include any character, except for the null character\0
and the slash/
. The slash is used as a directory separator. In addition, the file name should not include special characters such as?
,*
,|
,<
,>
,&
,;
,(
,)
, or newline.The path can include multiple directories, which are separated by slashes
/
. Each directory in the path must already exist; otherwise, the log file will not be created. The path is relative to the root of the specified media, set with themedia
command.
[no] rotate [0-100]
-
Specify the maximum number of log files to keep.
When the file is rotated, a new log file will be created with the same name, but with a sequence number appended to it. The sequence number will start at 0 and increase for each new log file created. The oldest log file will have the highest sequence number. As an example, if we allow for 5 rotated log files, the files will be named as follows:
my-log-file.log – The current log file my-log-file.log.0 – The fifth rotated log file my-log-file.log.1 – The fourth rotated log file my-log-file.log.2 – The third rotated log file my-log-file.log.3 – The second rotated log file my-log-file.log.4 – The first rotated log file
When the maximum number of log files is reached, the oldest log file will be deleted to make room for the new log file. If
compress
is enabled, the oldest compressed log file will be deleted instead and the oldest log file will be compressed.Each file is rotated when it reaches a certain size, specified with the
size
command.Warning
If log file rotation is disabled, the log file will grow indefinitely. This can lead to the log file consuming all available space on the media. Therefore, if it is disabled, ensure that the log file does not grow too large.
Default: 1 file.
Example example:/config/logging/destination-example/#> rotate 5 example:/config/logging/destination-example/#> no rotate
no
- Use to disable log file rotation.
0-100
-
The maximum number of log files to keep. The value must be in the range 0-100.
Setting the rotate value to 0 will disable log file rotation. This is the same as using the
no rotate
command.
[no] size 1-1000[k|K|M|G|KB|MB|GB]
-
Specify the size that triggers log file rotation when reached.
When the log file reaches the specified size, it will be rotated. The number of rotations is specified with the
rotate
command.Default: 100KB
Example example:/config/logging/destination-example/#> size 100KB example:/config/logging/destination-example/#> size 10MB example:/config/logging/destination-example/#> size 1GB
no
- This option has no effect for this command. If
rotate
is enabled, the size must be set. Ifrotate
is disabled, the specified size will not be used. 1-1000[k|K|M|G|KB|MB|GB]
-
Specifies the size in bytes, which must be in the range of 1-1000. The size is specified with a size modifier, such as
KB
,MB
, orGB
, to indicate kilobytes, megabytes, or gigabytes, which results in the following sizes:KB
ork
: Kilobytes (1024 bytes).MB
orM
: Megabytes (1,048,576 bytes).GB
orG
: Gigabytes (1,073,741,824 bytes).
[no] compress [0-100]
-
Specify the maximum number of compressed log files to keep.
When the number of rotated log files reaches the maximum number of rotations, as specified with the
rotate
command, the oldest log file will be compressed, if this option is enabled. This command specifies the maximum number of such compressed log files to keep. When the maximum number of compressed log files is reached, the oldest compressed log file will be deleted to make room for the new compressed log file.The compressed log file will have the same name as the original log file, with the sequence number appended to it, starting from the sequence number of the last rotated log file. In addition, the compressed log file will have the
.gz
extension. The highest sequence number will be the oldest.As an example, if we allow for 3 rotated files and 3 compressed files, the files will be named as follows:
my-log-file.log – The current log file my-log-file.log.0 – The third rotated log file my-log-file.log.1 – The second rotated log file my-log-file.log.2 – The first rotated log file my-log-file.log.3.gz – The third compressed log file my-log-file.log.4.gz – The second compressed log file my-log-file.log.5.gz – The first compressed log file
Default: 2 compressed files.
Example example:/config/logging/destination-example/#> compress 3 example:/config/logging/destination-example/#> no compress
no
- Disables log file compression.
0-100
- The maximum number of compressed log files to keep. The value must be
in the range 0-100. If the value is set to 0, log file compression will
be disabled, which is the same as using the
no compress
command.
Destination Remote Specific
When the destination type is set to
remote
, additional settings are available to configure the destination. These settings are specific to the remote destination type.example:/config/logging/destination-example/#> type remote
[no] format bsd|rfc3164|rfc5424
-
Set the syslog formatting to use when sending messages to the remote server.
Default: rfc5424
Example example:/config/logging/destination-example/#> format bsd example:/config/logging/destination-example/#> format rfc3164 example:/config/logging/destination-example/#> format rfc5424
no
- Does nothing for this command, the destination must have a format.
bsd
-
Use the legacy BSD format. This simple format includes a the process name, process ID, and the message.
Example of a message in BSD format:
proc[123]: message.
rfc3164
-
Use the RFC 3164 syslog format. This the traditional syslog format that includes a timestamp, hostname, process name, process ID, and the message.
Example of a message in RFC 3164 format:
Nov 18 09:36:42 hostname proc[123] message rfc5424
-
Use the RFC 5424 syslog format. This is the newest syslog format that includes structured data and additional fields.
Example of a message in RFC 5424 format:
1 2019-11-18T09:36:42.000321+01:00 hostname proc 123 - - message
[no] transport [udp|tcp|tls]
-
Specify the transport protocol to be used for the destination.
This option allows for specification of the transport protocol to be used for the destination. Any server that wants to receive messages from the device must be configured to use the same transport protocol.
Default: TLS
Example example:/config/logging/destination-example/#> transport udp example:/config/logging/destination-example/#> transport tcp example:/config/logging/destination-example/#> transport tls
no
- Does nothing for this command, the destination must have a transport.
udp
- Use the User Datagram Protocol. This is a connectionless protocol that does not guarantee delivery of packets.
tcp
- Use the Transmission Control Protocol. This is a connection oriented protocol that guarantees delivery of packets.
tls
-
Use the Transport Layer Security protocol. This is a secure protocol that provides encryption and authentication.
Note
When this type is selected, additional settings will be available to configure the destination. These settings are specific to the TLS transport protocol. See the Destination Remote TLS Specific.
[no] ip-protocol ipv4|ipv6
-
Specify the IP protocol to be used for the destination.
This option allows for specification of the IP protocol to be used for the destination. Any server that wants to receive messages from the device must use the same IP protocol.
Default: IPv4
Example example:/config/logging/destination-example/#> ip-protocol ipv4 example:/config/logging/destination-example/#> ip-protocol ipv6
no
- Does nothing for this command, the destination must have an IP protocol.
ipv4
- Transmit messages using the IPv4 protocol.
ipv6
- Transmit messages using the IPv6 protocol.
[no] port [PORT]
-
Specify a port to use, different from the default one.
This configuration option allows you to specify a non-default destination port for messages sent remotely.
Default: Depends on the transport protocol. UDP: 514, TCP: 601, TLS: 6514,
Example example:/config/logging/destination-example/#> port 5514
no
- This option resets the port to its default value based on the transport protocol.
PORT
- Specifies the port number to use for the destination. The port number must be within the range of 1-65535.
[no] host [ [address IPADDR] | [name HOSTNAME|FQDN] | [dhcp IFNAME] ]
-
Defines the location of the host for the remote destination.
The host location can be specified in one of the following ways:
-
By providing an IPv4 or IPv6 address using the
address
keyword followed by theIPADDR
. The expected address type is dependent on the IP protocol set for the destination, see theip-protocol
command. -
By providing a hostname or a Fully Qualified Domain Name (FQDN) using the
name
keyword followed by theHOSTNAME
orFQDN
. -
By obtaining the destination address over DHCP using the
dhcp
keyword followed by theIFNAME
. If a lease received on the specified interface contains option 7, it will be used as the destination address.
Default: None
Example example:/config/logging/destination-example/#> host address 192.168.1.1 example:/config/logging/destination-example/#> host address 2001:db8::1 example:/config/logging/destination-example/#> host name example.com example:/config/logging/destination-example/#> host name mydevice example:/config/logging/destination-example/#> host dhcp vlan1
no
- Removes any configured host from the destination. However, if another host is not specified, the destination configuration will be invalid.
address IPADDR
- Specifies the IPv4 or IPv6 address of the host.
name HOSTNAME|FQDN
- Specifies the hostname or FQDN of the host.
dhcp IFNAME
-
Specifies the interface name to obtain the destination address over DHCP. If a lease received on the specified interface contains option 7, it will be used as the destination address.
Note
It’s crucial to ensure that the specified interface has DHCP enabled and can successfully receive a lease from a DHCP server.
For detailed instructions on how to configure DHCP on an interface, please refer to the Interface Configuration section.
Note
Each destination instance can apply up to two IP addresses, provided by option 7 in the DHCP lease.
-
[no] throttle [VALUE]
-
Specify a throttle value to rate limit the number of messages sent per second
By setting a throttle value, you can limit the number of messages sent per second to the configured destination. This is particularly useful when the destination has a maximum message handling capacity.
Note
It’s important to understand how messages are managed when the transmission rate is exceeded.
If the rate of incoming messages surpasses the configured limit, the system doesn’t instantly discard the excess messages. Instead, these messages are buffered and transmitted as soon as the rate limit allows.
However, bear in mind that the buffer has a limited capacity. If the buffer reaches its maximum capacity due to a continuous influx of messages exceeding the rate limit, any incoming messages will be discarded until there is available space in the buffer.
Tip
If you prefer to drop messages when the rate limit is exceeded, you can use a
filter
of typerate-limit
. This filter will instantly discard any messages that surpass the specified rate limit.For more information on how to configure a rate-limit filter, see the Filter Configuration section.
Default:
no throttle
, i.e. no rate limiting.Example example:/config/logging/destination-example/#> throttle 100
no
- This option disables throttling, allowing messages to be sent at the maximum possible rate.
VALUE
- This option allows you to specify the maximum number of messages that can be sent per second to the destination. The value must be a non-negative integer.
Destination Remote TLS Specific
When the destination type is set to
remote
and the transport protocol is set totls
, additional settings are available to configure the destination. These settings are specific to the remote destination type and the TLS transport protocol.example:/config/logging/destination-example/#> type remote example:/config/logging/destination-example/#> transport tls
[no] peer-verify [untrusted|trusted]
-
Select the verification method to be used during TLS handshake.
The peer-verify option can be used to specify the level of verification that should be performed during the TLS handshake.
The value is a combination of two properties:
-
First we specify whether the peer is required to provide a certificate or if it is optional:
- Required: When
peer-verify
is specified. - Optional: When
no peer-verify
is specified.
- Required: When
-
Second we specify whether the certificate provided needs to be valid (Trusted) or not (Untrusted):
- Trusted: When the
trusted
option is specified. - Untrusted: When
untrusted
option is specified.
- Trusted: When the
Based on the combination of these two properties, the following combinations are possible:
-
Optional Untrusted: The peer is not required to provide a certificate, but if it does, it does not need to be verified.
-
Optional Trusted: The peer is not required to provide a certificate, but if it does, it needs to be verified.
-
Required Untrusted: The peer is required to provide a certificate, but it does not need to be verified.
-
Required Trusted: The peer is required to provide a certificate, and it needs to be verified.
For all the scenarios where
Trusted
is specified, a CA certificate needs to be provided as well, in order to verify the certificate provided by the peer.Note
If only
peer-verify
is specified, it defaults to usingtrusted
.If only
no peer-verify
is specified, it defaults to usinguntrusted
.These two commands are just shorthand commands for the most strict and least strict verification methods.
Default: Required Trusted, i.e.
peer-verify trusted
.Example example:/config/logging/destination-example/#> peer-verify untrusted example:/config/logging/destination-example/#> peer-verify trusted example:/config/logging/destination-example/#> peer-verify example:/config/logging/destination-example/#> no peer-verify untrusted example:/config/logging/destination-example/#> no peer-verify trusted example:/config/logging/destination-example/#> no peer-verify
no
- Make the peer verification optional during the TLS handshake, i.e. the peer is not required to provide a certificate.
untrusted
- If a certificate is provided, it does not need to be verified.
trusted
- If a certificate is provided, it needs to be verified.
-
[no] certificate [NAME]
-
Specify the Certificate to use.
The selected certificate will be used for authenticating the destination against the remote server that it connects to.
Note
The certificate must be imported into the system before it can be used. For more information on how to import certificates, see the Certificate Management section.
Default: None
Example example:/config/logging/destination-example/#> certificate my-cert
no
- Remove the certificate from the destination.
NAME
- The name of the certificate to use.
[no] ca-certificate [NAME]
-
Specify the CA Certificate to use.
The selected CA certificate will be used for verifying the certificate that is provided by the remote server that the destination connects to.
Note
The CA certificate must be imported into the system before it can be used. For more information on how to import certificates, see the Certificate Management section.
Note
If the
peer-verify
option is set totrusted
, a CA certificate must be provided.Default: None
Example example:/config/logging/destination-example/#> ca-certificate my-ca-cert
no
- Remove the CA certificate from the destination.
NAME
- The name of the CA certificate to use.
Filter Configuration
Each filter configuration has its sub-context under the
logging
context:example:/config/logging/#> filter example example:/config/logging/filter-example/#>
[no] name NAME
-
Change the name of the filter. The name is a free form string that identifies the filter. The name is used to select the filter when configuring a sink.
Note
If the name is changed it will also be changed in all sinks that uses this filter, so it is not necessary to update all sinks that uses this filter.
Example example:/config/logging/filter-example/#> name my-filter
no
- Does nothing for this command, the filter must have a name.
NAME
- The free form name of the filter. It can be up to 15 characters
long. It allows for the following characters:
a-z
,A-Z
,0-9
,-
, and_
.
[no] invert
-
Enable if the entire filter logic should be inverted.
Normally the configured filter will match messages that conform directly to the specified filter, e.g. if we filter on facility auth any message not matching that facility will be filtered out. However, if we would enable invert, any message matching the filter would be filtered out instead.
For instance, by inverting filters we can more easily filter out messages when we may want to include more messages than we exclude.
Default: Disabled, i.e.
no invert
.Example example:/config/logging/filter-example/#> invert
no
- Disables the invert option.
[no] facility FACILITY[ FACILITY ...|,FACILITY ...]
-
Filter messages based on their facility.
By specifying one or more facilities, only messages that match the specified facilities will be allowed through the filter.
Default: None
Example example:/config/logging/filter-example/#> facility auth example:/config/logging/filter-example/#> facility auth authpriv example:/config/logging/filter-example/#> facility auth,authpriv
Tip
Both comma and space can be used as separators between facilities.
Individual facilities can be added or removed to the active list, i.e. each call to the command does not replace the existing list of facilities.
example:/config/logging/filter-example/#> facility auth example:/config/logging/filter-example/#> facility authpriv example:/config/logging/filter-example/#> facility security example:/config/logging/filter-example/#> show facility auth,authpriv,security example:/config/logging/filter-example/#> no facility auth example:/config/logging/filter-example/#> show facility authpriv,security
In order to remove all of the configured facilities, use the
no facility
, with no specified facilities.example:/config/logging/filter-example/#> no facility
no
- Removes all configured facilities from the filter.
FACILITY[,FACILITY ...]
-
The facility or facilities to filter on. Refer to the Facility section for a list of available facilities.
Tip
Tab completion is available for the
FACILITY
argument, to list all existing facilities.
[no] level LEVEL[ LEVEL ...|,LEVEL, ...|..LEVEL|..]
-
Filter messages based on the severity level of the message.
By specifying one or more severity levels, only messages that match any of the specified severity levels will be allowed through the filter.
Default: None
Example example:/config/logging/filter-example/#> level warning example:/config/logging/filter-example/#> level warning error example:/config/logging/filter-example/#> level warning,error
Tip
Both comma and space can be used as separators between severities.
Also levels can be specified as ranges, e.g.
info..warning
will match all severity levels frominfo
towarning
.example:/config/logging/filter-example/#> level info..warning
Further, all levels from a certain level and up can be specified, e.g.
notice..
will match all severity levels fromnotice
and up.example:/config/logging/filter-example/#> level notice..
Individual severity levels can be added or removed to the active list, i.e. each call to the command does not replace the existing list of severity levels.
example:/config/logging/filter-example/#> level warning example:/config/logging/filter-example/#> level error example:/config/logging/filter-example/#> level crit example:/config/logging/filter-example/#> show level warning,error,crit example:/config/logging/filter-example/#> no level warning example:/config/logging/filter-example/#> show level error,crit
In order to remove all of the configured severity levels, use the
no level
, with no specified severities.example:/config/logging/filter-example/#> no level
no
- Removes all configured severity levels from the filter.
LEVEL
-
The level of the severity or severities to filter on. Refer to the Severity section for a list of available severities.
Tip
Tab completion is available for the
LEVEL
argument, to list all existing severities.
[no] hostname "NAME"
-
Filter messages based on the hostname field of the message.
It is important to note that this filter will only be performed on the actual hostname field of the the specific log message. This means that this filter will not match on the IP address of a given host, even if the IP address and the host field refers to the same actual host.
Note
Make sure to use double quotes around the hostname to match, e.g.
"my-example-host"
.Tip
Supports the use of regular expressions.
Tip
For filtering based on the IP address use the ‘network’ filter instead.
Default: None
Example Match on a specific hostname:
example:/config/logging/filter-example/#> hostname “my-example-host”
Use regular expressions to match on multiple hostnames, e.g. all hosts starting with
my-example-host
followed by a digit:example:/config/logging/filter-example/#> hostname “my-example-host[0-9]”
no
- Removes the hostname filter from the filter.
"NAME"
- The name of the hostname to filter on, or a regular expression to match on.
[no] message "MESSAGE"
-
Filter messages based on the text content of the message.
This filter will match on the actual text content of the message, and will only allow messages through that matches the specified text.
Note
This filtering will only be performed on the text content of the message and not on the message headers.
Note
Make sure to use double quotes around the message to match, e.g.
"my example message"
.Tip
Supports the use of regular expressions.
Default: None
Example Match on a specific message:
example:/config/logging/filter-example/#> message “my example message”
Use regular expressions to match on specific patterns in the message content. For example, to filter all messages containing the word “error” (in any case):
example:/config/logging/filter-example/#> message “^.*[Ee]rror.*$”
In this example, the regular expression “^.[Ee]rror.$” is used. Here’s what each part of the expression means:
^
: This symbol represents the start of a line..*
: This matches any character (except for a newline) 0 or more times.[Ee]rror
: This matches the word “error” in any case (i.e., “Error” or “error”)..*
: This again matches any character (except for a newline) 0 or more times.$
: This symbol represents the end of a line.
So, this regular expression will match any line that contains the word “error” in any case, regardless of what comes before or after “error” in the line.
no
- Removes the message filter from the filter.
"MESSAGE"
- The message content to filter on, or a regular expression to match on.
[no] program "NAME"
-
Filter messages based on the name of the program that generated it.
This will filter the messages against the program field for the log messages. It will match on the application name that generated the message, not the process ID or any other field.
Note
Make sure to use double quotes around the message to match, e.g.
"my example message"
.Tip
Supports the use of regular expressions.
Default: None
Example Use the
program
command to match on a specific program name:example:/config/logging/filter-example/#> program “my-example-program”
In this example, the
program
command is used to filter log messages from a specific program named “my-example-program”.You can also use regular expressions to match on specific patterns in the program name:
example:/config/logging/filter-example/#> program “^udhcpc\s*:vlan\d$”
In this second example, the regular expression “^udhcpc\s*:vlan\d$” is used. Here’s what each part of the expression means:
^
: This symbol represents the start of a line.udhcpc
: This matches the exact string “udhcpc”.\s*
: This matches any whitespace character 0 or more times.:vlan
: This matches the exact string “:vlan”.\d
: This matches any digit.$
: This symbol represents the end of a line.
So, this regular expression will match any line that starts with “udhcpc”, followed by any number of whitespace characters, followed by “:vlan”, and ends with a digit.
no
- Removes the program filter from the filter.
"NAME"
- The name of the program to filter on, or a regular expression to match on.
[no] network ADDR/LEN
-
Filter messages based on the provided IP subnet.
If the IP address of a sender belongs to the subnet provided the message will be considered a match. Hence, it is possible to match on specific addresses (using a /32 length) or a range of addresses.
Note
The filter will match against the address of the last-hop sender of the message, i.e. if the message have been relayed it will be the IP address of the relay and not the original sender of the message.
Default: None
Example Filter log messages originating from any IP address within the 192.168.1.0/24 network:
example:/config/logging/filter-example/#> network 192.168.1.0/24
Filter log messages originating from a specific IP address, 192.168.2.2. The /32 subnet mask indicates a single IP address.
example:/config/logging/filter-example/#> network 192.168.2.2/32
no
- Removes the network filter from the filter.
ADDR/LEN
- The IP address and subnet length to filter on. The subnet length specifies the number of bits in the subnet mask. The subnet length must be in the range of 1-32.
[no] rate-limit [per host|source-ip|facility|level] RATE
-
Filter out messages if they exceed the provided message rate.
When this configuration option is used messages will be filtered out, i.e. dropped, if the messages per second exceed the set rate value.
It is also possible to optionally perform the rate limit per a specific type of content that is part of the message. The following options can be selected from, but only one at a time per filter:
host
: The host specified in the message.source-ip
: The source IP address of the sender, if the message has been relayed this is the address of the relay.facility
: The facility of the message.level
: The severity level of the message.
If the
rate-limit
is configured for a specific type it means that the imposed rate is applied for each individual type when a message is handled. As an example, if we have configured arate-limit
of 100 per host, and we have two hosts transmitting messages, a total of 200 messages will be allowed, 100 for each of the transmitting hosts.If no specific type is provided the rate will be applied for every message, regardless of their content.
Note
The rate provided will always be in number of messages per second.
Default: No rate limiting, i.e.
no rate-limit
.Example Filter out messages if they exceed 100 messages per second:
example:/config/logging/filter-example/#> rate-limit 100
Filter out messages if they exceed 100 messages per second per host:
example:/config/logging/filter-example/#> rate-limit per host 100
no
- Disables the rate limiting.
per host
- Perform the rate limiting per host.
source-ip
- Perform the rate limiting per source IP address.
facility
- Perform the rate limiting per facility.
level
- Perform the rate limiting per severity level.
RATE
- The maximum number of messages that can be sent per second. The value must be a non-negative integer.
Sink Configuration
Each sink configuration has its sub-context under the
logging
context:example:/config/logging/#> sink example example:/config/logging/sink-example/#>
[no] name NAME
-
Change the name of the sink. The name is a free form string that identifies the sink.
Example example:/config/logging/sink-example/#> name my-sink
no
- Does nothing for this command, the sink must have a name.
NAME
- The free form name of the sink. It can be up to 15 characters
long. It allows for the following characters:
a-z
,A-Z
,0-9
,-
, and_
.
[no] source SOURCE[ SOURCE ...|,SOURCE ...]
-
Define the source(s) from which the log messages should be sent.
By specifying one or more sources, you direct the log messages from the designated sources to the sink.
Note
For the sink to be valid, at least one source must be specified.
Default: None
Example example:/config/logging/sink-example/#> source example-1
To specify multiple sources simultaneously:
example:/config/logging/sink-example/#> source example-1 example-2 example:/config/logging/sink-example/#> source example-1,example-2
no
- This command removes all configured sources from the sink.
SOURCE
-
This argument represents the name of the source to be associated with the sink. For more information on configuring sources, refer to the Source Configuration section.
Tip
Tab completion is available for the
SOURCE
argument, providing a list of all existing sources.
[no] destination DESTINATION[ DESTINATION ...|,DESTINATION ...]
-
Define the destination(s) to which the log messages should be sent.
By specifying one or more destinations, you direct the log messages to the designated destinations.
Note
For the sink to be valid, at least one destination must be specified.
Default: None
Example example:/config/logging/sink-example/#> destination example-1
To specify multiple destinations simultaneously:
example:/config/logging/sink-example/#> destination example-1 example-2 example:/config/logging/sink-example/#> destination example-1,example-2
no
- This command removes all configured destinations from the sink.
DESTINATION
-
This argument represents the name of the destination to be associated with the sink. For more information on configuring destinations, refer to the Destination Configuration section.
Tip
Tab completion is available for the
DESTINATION
argument, providing a list of all existing destinations.
[no] filter [and|or] FILTER [ [and|or] FILTER ...]
-
Define optional filter(s) to include or exclude specific log messages.
By default, filters are combined using the AND operator. However, you can also use the OR operator to combine filters. The operator should be specified before the filter.
The order of the filters and the combination operator are crucial. The AND operator takes precedence over the OR operator.
Note
When using multiple filters, the AND operator evaluates first, followed by the OR operator. This order of operations can affect the outcome of the filter combination.
Default: None
Example Specify a single filter:
example:/config/logging/sink-example/#> filter filter-1
Specify multiple filters using the
and
operator:example:/config/logging/sink-example/#> filter filter-1 and filter-2
If you list multiple filters without specifying an operator, the
and
operator is assumed. Therefore, the following command is equivalent to the previous command:example:/config/logging/sink-example/#> filter filter-1 filter-2
Specify multiple filters using the
or
operator:example:/config/logging/sink-example/#> filter filter-1 or filter-2
Example: Advanced Filter Combination Combine filters using both
and
andor
operators. Remember, theand
operator takes precedence over theor
operator:example:/config/logging/sink-example/#> filter filter-1 and filter-2 or filter-3 and filter-4
This command works as follows:
-
filter-1
and
filter-2: This part of the command will match log messages that meet both the conditions of filter-1 and filter-2. -
or
: This operator combines the results of the two surrounding expressions. -
filter-3
and
filter-4: This part of the command will match log messages that meet both the conditions of filter-3 and filter-4.
So, the entire command will match log messages that either meet both the conditions of filter-1 and filter-2, or meet both the conditions of filter-3 and filter-4.
Remember, the
and
operator takes precedence over theor
operator. So, theand
operations are evaluated first, followed by theor
operation.no
- This command removes all configured filters from the sink.
and
-
This operator is used to combine multiple filters. When the
and
operator is used, a log message must meet all the specified filter conditions to be matched.Note
This is the default operator when combining multiple filters, when no operator is specified.
or
- This operator is also used to combine multiple filters. However,
when the
or
operator is used, a log message can meet any one of the specified filter conditions to be matched. FILTER
-
This argument represents the name of the filter to be associated with the sink. For more information on configuring filters, refer to the Filter Configuration section.
Tip
Tab completion is available for the
FILTER
argument, providing a list of all existing filters.
-
Status
In the exec context, it is possible to view the current status of the logging setup. We can use the
show logging
command to obtain a summary of the current setup:example:/#> show logging ╒ Source Summary ══════════════════════════════════════════════════════════════╕ │SOURCE PROCESSED │ │local-userspace 329 │ │sink-remote 879 │ │local-kernel 1 │ └──────────────────────────────────────────────────────────────────────────────┘ ╒ Destination Summary ═════════════════════════════════════════════════════════╕ │DESTINATION PROCESSED │ │auth 3 │ │ppp 0 │ │cli 0 │ │sink-file 879 │ │syslog 327 │ │kern 1 │ │openvpn 0 │ │alarm 1 │ │messages 326 │ │ntp 2 │ │sink-relay 879 │ └──────────────────────────────────────────────────────────────────────────────┘ ╒ Filters ═════════════════════════════════════════════════════════════════════╕ │FILTER MATCHED NOT_MATCHED │ │ntp 2 328 │ │auth 3 327 │ │ppp 0 330 │ │cli 0 330 │ │syslog 327 3 │ │kern 1 329 │ │openvpn 0 330 │ │alarm 1 329 │ │messages 326 4 │ └──────────────────────────────────────────────────────────────────────────────┘ example:/#>
Note
The logging status information will display information on all the logging configured on the system, this includes any of the default logging as well.
Anything that comes from a custom logging sink configuration should be prefixed with
sink-
when they are referred to in the status output.This is also a context that can be entered, with additional commands to view the status of specific aspects of the logging setup:
example:/#> logging example:/config/logging/#>
show source [connection|facility|program|severity|summary|verbose]
-
Show source related status information.
A number of options are available to show different levels of detail for the source status. If no option is provided, a summary of the source status will be shown.
Example example:/config/logging/#> show source ╒ Sources ═════════════════════════════════════════════════════════════════════╕ │TYPE NAME DESCRIPTION PROCESSED │ │remote sink-remote 192.168.1.1 892 │ │unix-dgram local-userspace /dev/log 318 │ │file local-kernel /dev/kmsg 1 │ └──────────────────────────────────────────────────────────────────────────────┘ client1:/logging/#>
connection
-
Show status information for remote connections over TCP.
Example example:/config/logging/#> show source connection […]
facility
-
Show a status summary on the number of messages that have been generated per facility.
Example example:/config/logging/#> show source facility […]
program
-
Show a status summary on the number of messages that have been generated by each application/program.
Example example:/config/logging/#> show source program […]
severity
-
Show a status summary on the number of messages per severity level.
Example example:/config/logging/#> show source severity […]
summary
-
Show a summary of the source status.
Example example:/config/logging/#> show source summary […]
verbose
-
Show more detailed status information for the source.
Warning
This command includes some verbose information and may occupy additional width in the terminal, more so than usual.
Example example:/config/logging/#> show source verbose […]
show destination [file|remote|summary|verbose]
-
Show destination related status information.
A number of options are available to show different levels of detail for the destination status. If no option is provided, a summary of the destination status will be shown.
Example example:/config/logging/#> show destination ╒ Destinations ═════════════════════════════════════════════════════════════════════════════════╕ │TYPE NAME DESCRIPTION PROCESSED DROPPED WRITTEN QUEUED MEMORY_USAGE │ │remote sink-relay tls,server1:6514 735 0 735 0 0 │ │remote sink-relay tls,Syslog-Server:6514 285 0 0 0 0 │ │file alarm /var/log/alarm 1 0 1 0 0 │ │file sink-file /log//from-hosts 888 0 888 0 0 │ │file syslog /var/log/syslog 330 0 330 0 0 │ │file ntp /var/log/ntp.log 2 0 2 0 0 │ │file messages /var/log/messages 329 0 329 0 0 │ │file auth /var/log/auth.log 3 0 3 0 0 │ │file kern /var/log/kern.log 1 0 1 0 0 │ └───────────────────────────────────────────────────────────────────────────────────────────────┘
file
-
Show status information for file destinations.
Example example:/config/logging/#> show destination file […]
remote
-
Show status information for remote destinations.
Example example:/config/logging/#> show destination remote […]
summary
-
Show a summary of the destination status.
Example example:/config/logging/#> show destination summary […]
verbose
-
Show more detailed status information for the destination.
Warning
This command includes some verbose information and may occupy additional width in the terminal, more so than usual.
Example example:/config/logging/#> show destination verbose […]
show filter
-
Show filter related status information.
Example example:/config/logging/#> show filter ╒ Filters ═════════════════════════════════════════════════════════════════════╕ │FILTER MATCHED NOT_MATCHED │ │ntp 2 331 │ │auth 3 330 │ │ppp 0 333 │ │cli 0 333 │ │syslog 330 3 │ │kern 1 332 │ │openvpn 0 333 │ │alarm 1 332 │ │messages 329 4 │ └──────────────────────────────────────────────────────────────────────────────┘ client1:/logging/#>
show all
-
Show all logging status information.
Warning
This command includes some verbose information and may occupy additional width in the terminal, more so than usual.
Example example:/config/logging/#> show all […]
show
-
Show a summary of the logging status.
Example example:/config/logging/#> show […]
Example
This section is intended to provide a simple example of how to configure a logging sink, and the associated components. For additional in-depth configuration examples, refer to the separate How-To guides.
Logging to Custom File on Internal RAM Disk
In this example we want to create a simple setup where we log all messages of severity
notice
or higher to a file on the internal RAM disk. This file will be rotated when it reaches a size of 1MB, and a maximum of 5 rotated files will be kept.We start by configuring the source:
example:/#> configure example:/config/#> logging example:/config/logging/#> source local example:/config/logging/source-local/#> userspace example:/config/logging/source-local/#> kernel example:/config/logging/source-local/#> end example:/config/logging/#>
Note
A source named
local
exists by default from the factory configuration. But for this example we explicitly configure it to show how it is done.Next we configure the destination:
example:/config/logging/#> destination file-1 example:/config/logging/destination-file-1/#> type file example:/config/logging/destination-file-1/#> file-name my-file-1 example:/config/logging/destination-file-1/#> media internal example:/config/logging/destination-file-1/#> size 1M example:/config/logging/destination-file-1/#> rotate 5 example:/config/logging/destination-file-1/#> end example:/config/logging/#>
Now we configure the filter:
example:/config/logging/#> filter filter-1 example:/config/logging/filter-filter-1/#> level notice.. example:/config/logging/filter-filter-1/#> end example:/config/logging/#>
Now that we have all the components we can configure the sink:
example:/config/logging/#> sink example example:/config/logging/sink-example/#> source local example:/config/logging/sink-example/#> destination file-1 example:/config/logging/sink-example/#> filter filter-1 example:/config/logging/sink-example/#> end example:/config/logging/#>
The configuration overview should now look like this:
example:/config/logging/#> show Console syslog : Disabled External logging : Disabled Secure mode : Enabled ╒ Sources ═══════════════════════════════════════════════════════════════════╕ │NAME │ │Type: local USERSPACE KERNEL │ │local Yes Yes │ └────────────────────────────────────────────────────────────────────────────┘ ╒ Destinations ══════════════════════════════════════════════════════════════╕ │NAME │ │Type: file MEDIA PATH │ │file-1 internal my-file-1 │ └────────────────────────────────────────────────────────────────────────────┘ ╒ Filters ═══════════════════════════════════════════════════════════════════╕ │NAME INVERT TYPE FILTER │ │filter-1 No Level notice,warning,err,crit,alert,emerg │ └────────────────────────────────────────────────────────────────────────────┘ ╒ Sinks ═════════════════════════════════════════════════════════════════════╕ │NAME SOURCES DESTINATIONS OP FILTERS │ │example local file-1 filter-1 │ └────────────────────────────────────────────────────────────────────────────┘ example:/config/logging/#>
Now we can leave the configuration context and apply the changes:
example:/config/logging/#> leave example:/#>
At this point the logging from the local device to the file
my-file-1
should be active. It should be possible to view the log messages in the file now:example:/#> show log://my-file-1 [...] May 20 12:53:05 example clish[906]: User 'admin' entering domain shell. May 20 12:53:16 example clish[906]: User 'admin' leaving domain shell. ______________________________________________________________________________ log://my-file-1 Mon May 20 12:53:16 2024
Troubleshooting
If you are experiencing issues with your logging configuration, this section provides some general troubleshooting steps to help you identify and resolve the problem.
The status commands, covered in the Status section, can be used to provide an overview of the current logging setup. This can be useful to identify if there are any basic issues with the configuration.
Advanced Troubleshooting
In this section, we provide some advanced troubleshooting steps to help you identify and resolve issues with your logging configuration. For these steps, we will access the system shell to perform additional checks and diagnostics.
Note
In order to access the system shell, you need to access the device with an administrative account that has the necessary permissions to access the shell.
example:/#> shell Domain shell started. root@example:~ #
The following are some advanced troubleshooting steps you can perform.
Verify the Syslog Configuration
Check that the syslog configuration can be parsed correctly by the application:
root@example:~ # syslog-ng -s -f /etc/syslog-ng-writer.conf root@example:~ # syslog-ng -s -f /etc/syslog-ng-reader.conf
If there is no additional output, the configuration is correct.
Warning
The system should not produce any invalid configurations for the syslog application. If you suspect that the configuration that has been generated is invalid, please contact technical support.
Check the Syslog Application
Check that the syslog applications are correctly running:
root@example:~ # initctl status syslog-ng:reader Status : running Identity : syslog-ng:reader Description : System log reader daemon Origin : /etc/finit.d/syslog-ng.conf Condition(s): <+pid/syslog-ng:writer> Command : /sbin/syslog-ng -c /var/run/syslog-ng/reader.ctl -R /var/run/syslog-ng/reader.persist -p /var/run/syslog-ng-reader.pid -F --cfgfile /etc/syslog-ng-reader.conf PID file : /run/syslog-ng-reader.pid PID : 614 User : root Group : admin Uptime : 1 min 47 sec Restarts : 0 (0/10) Runlevels : [S-123456789] Memory : --.-- CGroup : /system/syslog-ng cpu 0 [100, ] mem [, ] ├─ 610 syslog-ng -c /var/run/syslog-ng/writer.ctl -R /var/run/syslog-ng/writer.persist -p /var/run/syslog-ng-writer.pid - └─ 614 syslog-ng -c /var/run/syslog-ng/reader.ctl -R /var/run/syslog-ng/reader.persist -p /var/run/syslog-ng-reader.pid - root@zero-12-34-50:~ #
root@zero-12-34-50:~ # initctl status syslog-ng:writer Status : running Identity : syslog-ng:writer Description : System log writer daemon Origin : /etc/finit.d/syslog-ng.conf Command : /sbin/syslog-ng -c /var/run/syslog-ng/writer.ctl -R /var/run/syslog-ng/writer.persist -p /var/run/syslog-ng-writer.pid -F --cfgfile /etc/syslog-ng-writer.conf PID file : /run/syslog-ng-writer.pid PID : 610 User : root Group : admin Uptime : 5 min 49 sec Restarts : 0 (0/10) Runlevels : [S-123456789] Memory : --.-- CGroup : /system/syslog-ng cpu 0 [100, ] mem [, ] ├─ 610 syslog-ng -c /var/run/syslog-ng/writer.ctl -R /var/run/syslog-ng/writer.persist -p /var/run/syslog-ng-writer.pid - └─ 614 syslog-ng -c /var/run/syslog-ng/reader.ctl -R /var/run/syslog-ng/reader.persist -p /var/run/syslog-ng-reader.pid - root@zero-12-34-50:~ #
If the applications are running correctly, the output should look similar to the above.
Warning
If any of the syslog applications are not running, or any of them reports its status as crashed, stopped, or similar, a system bug may have been encountered. Please contact technical support.
Generate a Test Log Message
Generate a log message using the
logger
command to test the logging functionality. For example:root@example:~ # logger -t test "This is a test log message"
It is also possible to generate messages with a specific facility and severity:
root@example:~ # logger -t test -p local0.info "This is a test log message"
Then check the relevant log file to see if the message was logged correctly.