Resources

Journald Receiver - Data Input and System Documentation

July 17, 2024 by OpenObserve Team
Journald Receiver

Introduction to Journald Receiver

Introduction to Journald Receiver

Your Linux system hums with activity, constantly generating a wealth of data about its inner workings. But how do you tap into this valuable stream of information? Enter journald receivers, powerful tools that allow you to capture and process system messages in real-time.

Overview of Journald Receiver

The Journald Receiver is a component of the OpenTelemetry Collector Contrib that parses Journald events from the systemd journal. It is currently in the alpha stage for logs, indicating that it is an early release and may have some limitations or breaking changes in future releases.

Compatibility of Journald Receiver

The Journald Receiver is compatible with the following log distributions:

  • OpenObserve
  • contrib
  • observiq
  • splunk
  • sumo

This means that the receiver can be used with these distributions to collect and process logs from the systemd journal.

Role of Journald Receiver in Centralized Log Management

The Journald Receiver plays a role in centralized log management by allowing you to collect logs from the systemd journal and send them to a centralized location for analysis and storage. By using the receiver, you can:

  • Collect logs from multiple systems running systemd
  • Filter logs based on various criteria such as unit and priority
  • Store collected logs in a centralized location for long-term retention and analysis
  • Integrate with other log management tools and platforms

This maintains a centralized view of all logs generated by systems running systemd, making it easier to analyze system behavior.

Get started for FREE with OpenObserve

In the next section, you will learn about the Journald Receiver Requirements.

Journald Receiver Requirements

To use the Journald Receiver effectively, you need to understand the requirements for its proper functioning.

Journalctl Binary Presence in the Agent's $PATH

The Journald Receiver relies on the journalctl binary to parse Journald events from the systemd journal. Therefore, the journalctl binary must be present in the agent's $PATH. This ensures that the receiver can correctly execute the journalctl command to retrieve the journal entries.

Collector's User Permissions for Accessing the Journal

The Journald Receiver requires the collector's user to have the necessary permissions to access the journal. This includes the ability to read the journal files and execute the journalctl command. The collector's user must have the necessary permissions to access the journal, which can be achieved by running the collector as a user with sufficient privileges.

By understanding these requirements, you can effectively use the Journald Receiver to collect and process logs from the systemd journal.

In the next section you will learn how to configure journald receiver.

Configuring Journald Receiver

To use the Journald Receiver effectively, you have to configure it correctly. This section provide a details on configuring the Journald Receiver.

Outline of Configuration Fields

The Journald Receiver configuration file is a JSON file that contains various fields that control the behavior of the receiver. The following are the key fields in the configuration file:

  • Directory and File Settings
    • journal_path: The path to the journal files.
    • journalctl_path: The path to the journalctl binary.
  • Selecting Start Point
    • start_point: The start point for log reading.
    • start_point_type: The type of start point (e.g., boot, now, latest).
  • Configuring Units and Identifiers
    • units: The units to include in the log entries.
    • identifiers: The identifiers to include in the log entries.
  • Use of Matches and Priority
    • matches: The matches to include in the log entries.
    • priority: The priority for filtering output.
  • Applying Grep with Dmesg
    • grep: The grep command to use for entry filtering.
    • dmesg: The dmesg command to use for managing kernel messages.
  • Setting Storage Options
    • storage: The storage options for cursor management.
  • Retry for Handling
    • retry: The retry policies for handling log reading and transmission failures.
Configuring the Journald Receiver requires careful consideration of various fields and options. By understanding the configuration fields you can effectively use the Journald Receiver to collect and process logs from the systemd journal.

In the next section, you will learn about the function of operators in Journald Receiver.

Get started for FREE with OpenObserve

Operators in Journald Receiver

One of the key features of the Journald Receiver is its ability to use operators to process and transform logs. In this section, we will explore the operators used to process logs and how they can be chained together to transform log formats.

Operators Used to Process Logs

The Journald Receiver uses a variety of operators to process logs, including:

  • filter: Used to filter logs based on specific criteria.
  • map: Used to transform logs by applying a function to each log entry.
  • reduce: Used to aggregate logs by applying a function to each log entry.
  • sort: Used to sort logs based on specific criteria.
  • limit: Used to limit the number of logs returned.
  • offset: Used to specify the starting point for log processing.

Log Formats through Chaining Operators

The Journald Receiver allows you to chain operators together to transform log formats.

Here is an example of how you can chain operators together to transform log formats:

json
{
  "operators": [
    {
      "type": "filter",
      "criteria": {
        "level": "INFO"
      }
    },
    {
      "type": "map",
      "function": "log_transform"
    },
    {
      "type": "reduce",
      "function": "log_aggregate"
    }
  ]
}

In this example, the filter operator is used to filter logs based on the level field, and then the map operator is used to transform the filtered logs using the log_transform function. Finally, the reduce operator is used to aggregate the transformed logs using the log_aggregate function.

Whether you need to filter logs based on specific criteria, transform logs using a custom function, or aggregate logs using a specific aggregation function, the Journald Receiver has the operators you need to get the job done.

In the next section, you will explore a few more examples of configuration is Journald Receiver.

Example Configurations

Journald receivers offer granular control over the messages they capture through filtering options. Here are a few examples showing different filtering techniques:

Filtering by Units:

This example demonstrates capturing logs only from the sshd service and the kernel unit:

receivers:
  my-receiver:
    type: journald
    units:
      - sshd.service
      - kernel

In this configuration, my-receiver will receive messages originating from the SSH daemon (sshd.service) and the kernel (kernel). Any messages from other system components will be excluded.

Filtering by Priority

This example captures only messages with a priority level of warning (warn) or higher:

receivers:
  my-receiver:
    type: journald
    priority: warn

Here, my-receiver will only receive messages classified as warnings (warn), errors (err), or emergencies (emerg) by journald. Informational or debugging messages will be filtered out.

Get started for FREE with OpenObserve

Combining Filtering Options with Matches:

This example gets even more specific, capturing messages from the apt service with a priority of info or higher, containing the keyword "package":

receivers:
  my-receiver:
    type: journald
    units:
      - apt.service
    priority: info
    matches:
      - _SYSTEMD_UNIT=apt.service AND _MESSAGE LIKE '%package%'

This configuration combines unit filtering (apt.service) with priority filtering (info) and a message content filter using the matches option. The matches option allows for complex filtering expressions using logical operators (AND, OR, NOT) and wildcards (*). In this case, my-receiver will only receive messages from apt.service with an info level or higher that include the word "package".

Filtering by Message Identifier (PID):

This example captures logs only from a specific process identified by its process ID (PID) of 1234:

receivers:
  my-receiver:
    type: journald
    matches:
      - _PID=1234

Here, my-receiver will solely capture messages associated with the process with PID 1234, regardless of the unit or message priority.

Excluding Specific Units:

This example excludes messages from the auditd service while capturing everything else:

receivers:
  my-receiver:
    type: journald
    exclude-units:
      - auditd.service

In this configuration, my-receiver will receive messages from all units except auditd.service.

By understanding and combining these filtering techniques, you can tailor journald receivers to capture the specific system messages most relevant to your needs.

In the next section you will learn about matches and their conversion to journalctl arguments.

Get started for FREE with OpenObserve

Understanding Matches

Journald receivers offer a powerful matches option for filtering messages based on various criteria. This section explains the concept of matches and how it translates to journalctl arguments for querying the journal.

Deciphering Matches Syntax

The matches option allows you to define filter expressions using key-value pairs and logical operators (AND, OR, NOT). Here's a breakdown of the syntax:

  • Key-Value Pairs: These define the filtering criteria. Each key represents a specific journald message field, and the value specifies the condition to match. Common keys include:
    • _PID: Process ID of the message source.
    • _SYSTEMD_UNIT: Name of the unit that generated the message.
    • MESSAGE: Content of the message itself (supports wildcards like *).
    • PRIORITY: Priority level of the message (e.g., emerg, err, warn, info, debug).
  • Logical Operators: You can combine key-value pairs using AND (&&), OR (||), and NOT (!) operators to create complex filtering expressions.

Translating Matches to Journalctl Arguments:

While journald receivers provide a convenient way to define filters within systemd configuration, you can also achieve similar filtering using the journalctl command-line tool. Here's how to convert matches expressions into equivalent journalctl arguments:

  • Direct Mapping: For simple key-value pairs, the key directly translates to a journalctl argument with a colon (:) followed by the value.
    • Example: matches: {_PID=1234} translates to journalctl _PID=1234
  • Wildcards: Wildcards in the matches value are preserved when translating to journalctl.
    • Example: matches: {MESSAGE LIKE '%package%'} translates to journalctl MESSAGE LIKE '%package%'
  • Logical Operators: The conversion for logical operators requires using brackets and the appropriate operator symbol in journalctl.
    • AND (&&) translates to (...) && (...) (enclose each sub-expression in brackets)
    • OR (||) translates to (...) || (...)
    • NOT (!) translates to ! followed by the sub-expression in brackets
Example Conversion:

Let's revisit the example from the previous section:

matches:

  - _SYSTEMD_UNIT=apt.service AND _MESSAGE LIKE '%package%'

This translates to the following journalctl command:

journalctl ( _SYSTEMD_UNIT=apt.service ) && ( MESSAGE LIKE '%package%' )

In short, the matches option in journald receivers offers a user-friendly way to define filtering expressions, while journalctl arguments provide a more granular approach for querying the journal with similar filtering capabilities.

In the next section, you will learn the details of setting up and deploying Journald Receiver in diverse environments.

Get started for FREE with OpenObserve

Setup and Deployment

Here are some key guidelines for setting up and deploying the Journald Receiver in diverse environments:

Permissions and Setup

  • The Journald Receiver requires read access to the /run/systemd/journal/socket and /run/systemd/journal/dev-log files.
  • Ensure the user running the Journald Receiver has the necessary permissions to access these files.
  • On Linux systems, the systemd-journal group typically has read access to the journal files. Add the Journald Receiver user to this group.

Docker Deployment

  1. Create a Dockerfile that installs the Journald Receiver package and sets the necessary permissions:
    dockerfile
    FROM alpine:latest
    
    RUN apk add --no-cache journald-collector
    RUN addgroup -S journald && adduser -S -G journald journald
    RUN chown -R journald:journald /var/lib/journald-collector
    
    USER journald
    CMD ["journald-collector"]
  2. Build the Docker image:
    docker build -t journald-receiver .
  3. Run the Docker container, mapping the journal socket and log device:
    docker run -d \
      --name journald-receiver \
      --read-only \
      --mount type=bind,source=/run/systemd/journal/socket,target=/run/systemd/journal/socket \
      --mount type=bind,source=/run/systemd/journal/dev-log,target=/run/systemd/journal/dev-log \
      journald-receiver

Linux Deployment

  1. Install the Journald Receiver package using your Linux distribution's package manager.
  2. Add the Journald Receiver user to the systemd-journal group:
    usermod -a -G systemd-journal journald
  3. Start the Journald Receiver service:
    systemctl start journald-collector

Kubernetes Deployment

  1. Create a Kubernetes deployment manifest with the necessary volumes and permissions:
    yaml
    apiVersion: apps/v1
    kind: Deployment
    metadata:
      name: journald-receiver
    spec:
      replicas: 1
      selector:
        matchLabels:
          app: journald-receiver
      template:
        metadata:
          labels:
            app: journald-receiver
        spec:
          containers:
          - name: journald-receiver
            image: journald-receiver:latest
            volumeMounts:
            - name: journal-socket
              mountPath: /run/systemd/journal/socket
            - name: journal-log
              mountPath: /run/systemd/journal/dev-log
          volumes:
          - name: journal-socket
            hostPath:
              path: /run/systemd/journal/socket
          - name: journal-log
            hostPath:
              path: /run/systemd/journal/dev-log
          securityContext:
            runAsUser: 1000
            runAsGroup: 1000
            fsGroup: 1000
  2. Deploy the Journald Receiver to Kubernetes:
    kubectl apply -f journald-receiver-deployment.yaml

These examples demonstrate how to set up the Journald Receiver in Docker, Linux, and Kubernetes environments. The key aspects are ensuring the necessary permissions, mapping the journal socket and log device, and running the Journald Receiver with the appropriate user and group.

In the next section, you will learn all you need to know about the system and data input documentation.

Get started for FREE with OpenObserve

System and Data Input Documentation

Here are some key details on documenting system and data input for the Journald Receiver:

Documenting Setup and Configuration Procedures

  • Record the steps to install the Journald Receiver package on the target Linux distribution.
  • Document the necessary permissions and user setup, such as adding the Journald Receiver user to the systemd-journal group.
  • Provide instructions for configuring the Journald Receiver to read from the journal socket and log device.
  • Include any additional configuration options, such as setting up filtering rules or specifying output destinations.

Maintaining Details of Operational Environments

  • Document the hardware and software specifications of the systems running the Journald Receiver.
  • Record the Linux distribution, kernel version, and any relevant system libraries or dependencies.
  • Maintain a list of the Journald Receiver versions deployed across different environments.
  • Document any unique configuration settings or environment-specific customizations.

Recording Changes and Updates to Journald Receiver Configurations

  • Establish a versioning system to track changes to the Journald Receiver configuration files.
  • Document the date, time, and author of each configuration change.
  • Describe the reason for each change, such as bug fixes, feature additions, or performance optimizations.
  • Record the impact of the changes, including any potential side effects or compatibility issues.
  • Maintain a changelog that summarizes the major configuration updates over time.

By following these guidelines, you can create comprehensive documentation that covers the setup, configuration, and maintenance of the Journald Receiver in your operational environments.

This documentation will serve as a valuable reference for troubleshooting, auditing, and managing the Journald Receiver deployments.

In the last section, you will see how OpenObserve can help with Journald Receiver.

How OpenObserve helps with Journald Receiver!

OpenObserve helps with the Journald Receiver by providing a cloud-native observability platform that supports the collection and processing of journal logs. Here are some key ways OpenObserve assists with the Journald Receiver:

  • Data Storage: OpenObserve supports various data storage options such as S3, MinIO, GCS, and Azure Blob, which can be used to store the journal logs collected by the Journald Receiver.
  • Query Language: OpenObserve has a SQL-based query language that allows users to query and analyze the collected logs, providing a powerful tool for log analysis and filtering.
  • GUI and Performance: OpenObserve's advanced GUI and Rust-based architecture ensure high performance and ease of use, making it a suitable choice for managing and analyzing large volumes of journal logs.
  • Integration with Other Tools: OpenObserve is compatible with log forwarders like Fluentbit, Fluentd, and Vector, which can be used to forward logs to OpenObserve for processing and analysis.
  • Cost-Effective: OpenObserve is designed to provide significantly lower storage costs compared to Elasticsearch, making it a cost-effective solution for managing and analyzing journal logs.

By leveraging OpenObserve's features, users can efficiently collect, store, and analyze journal logs, providing valuable insights into system performance and behavior.

Here are the relevant links to explore the OpenObserve platform:

Get started for FREE with OpenObserve

Conclusion

Journald receivers act as gateways to capture and process system messages, providing valuable insights into system behavior. This comprehensive guide equips you with the knowledge to configure and deploy Journald receivers effectively, along with best practices for documentation.

Furthermore, leverage OpenObserve, a cloud-native observability platform, to streamline your Journald receiver management. OpenObserve offers features like data storage, a powerful query language, a user-friendly GUI, and cost-effective log management. By combining Journald receivers with OpenObserve's capabilities, you can achieve proactive monitoring and troubleshooting for a well-functioning system.

Resources for Further Learning

Get data with the Journald input

Journald

Logging w/ journald: Why use it

Add journald receiver

Custom Journald logs | Documentation

Author:

authorImage

The OpenObserve Team comprises dedicated professionals committed to revolutionizing system observability through their innovative platform, OpenObserve. Dedicated to streamlining data observation and system monitoring, offering high performance and cost-effective solutions for diverse use cases.

OpenObserve Inc. © 2024