Dec 10th, ‘24/9 min read

systemctl logs: A Guide to Managing Logs in Linux

Learn how to manage and view systemctl logs in Linux with this guide, covering essential commands and best practices for troubleshooting.

systemctl logs: A Guide to Managing Logs in Linux

Logs are vital to understanding what’s happening in your Linux system. When troubleshooting or monitoring your server, knowing how to access and interpret these logs becomes essential.

One of the most important tools for this task is systemctl, the system and service manager for Linux.

This guide will walk you through everything you need to know about systemctl logs, from viewing them to best practices for log management.

What are systemctl Logs?

systemctl is a tool used to control the systemd system and service manager. It is an essential utility in modern Linux distributions that use systemd for system initialization, process management, and service handling.

When it comes to logs, systemctl interacts with journald, a system logging service in systemd. This allows you to view, filter, and manage logs for services running on your system.

Crontab Logs: Track, Debug, and Optimize Your Cron Jobs | Last9
Crontab logs help you keep your cron jobs in check. Learn how to track, debug, and optimize your cron jobs with crontab logs.

Why Are systemctl Logs Important?

System logs provide a historical record of your system's activities, helping identify issues, performance bottlenecks, or failed services. systemctl logs offer a detailed view of various system services, enabling system administrators to:

  • Maintain system health.
  • Troubleshoot problems quickly.
  • Analyze service failures or detailed behavior.

From diagnosing failed services to ensuring optimal performance, systemctl logs are a vital part of a Linux admin's toolkit.

Common journalctl Commands

Below are commonly used journalctl commands for managing and viewing logs efficiently:

CommandDescription
journalctlView all system logs in reverse chronological order.
journalctl -u <service-name>View logs for a specific service (e.g., journalctl -u nginx).
journalctl -fView logs in real-time (similar to tail -f).
journalctl --since "YYYY-MM-DD"View logs from a specific date (e.g., journalctl --since "2024-12-01").
journalctl -bView logs from the current boot session.
journalctl -p <priority>Filter logs by priority (e.g., journalctl -p err for errors).
journalctl -n <number>Show the last specified number of logs (e.g., journalctl -n 100 for the last 100 logs).
journalctl --vacuum-time=2weeksClean up logs older than the specified time (e.g., two weeks).
journalctl --vacuum-size=500MClean up logs to keep the system journal size under the specified limit.

These commands give you control over how you view logs and are the foundation of troubleshooting and service management on Linux.

Morgan npm and Its Role in Node.js | Last9
Morgan npm simplifies HTTP request logging in Node.js, making it easier to monitor and debug your applications with customizable formats.

How to View systemctl Logs

To view logs using systemctl, you’ll use the journalctl command, which works directly with the systemd journal.

View All Logs

To view all logs, simply run:

journalctl

This displays the entire system log in reverse chronological order. Filtering is recommended for larger systems.

View Logs for a Specific Service

To view logs for a particular service, use the -u option followed by the service name:

journalctl -u nginx

This shows logs related to the nginx service, including start/stop times and errors.

View Logs in Real-Time

To monitor logs as they are generated (like tail -f), use:

journalctl -u nginx -f

View Logs for a Specific Time Period

To filter logs by time, use the --since and --until options:

journalctl --since "2024-12-01" --until "2024-12-09"

Show Logs for Boot Sessions

To view logs from the current boot session:

journalctl -b

For logs from the previous boot:

journalctl -b -1
Logging Errors in Go with ZeroLog: A Simple Guide | Last9
Learn how to log errors efficiently in Go using ZeroLog with best practices like structured logging, context-rich messages, and error-level filtering.

Filtering Logs for Efficiency

Logs can be overwhelming, especially on busy systems.

Here are filtering options to make log analysis manageable:

Filtering by Priority Level

Logs are categorized by priority levels (0: emergency to 7: debug). To filter critical messages:

journalctl -p err

Filtering by Keywords

Search for specific patterns or keywords using grep:

journalctl -u nginx | grep "connection failed"

Limiting Output

To view a specific number of logs:

journalctl -n 50

Best Practices for Managing systemctl Logs

Log Rotation

Logs can grow rapidly. Configure log rotation by modifying /etc/systemd/journald.conf:

[Journal]
SystemMaxUse=1G

Archiving Logs

For long-term storage, configure systemd to forward logs to an external syslog server or use tools like Fluentd or Logstash.

Regular Log Cleanup

To clear old logs periodically:

journalctl --vacuum-time=2weeks

Or based on disk usage:

journalctl --vacuum-size=500M

Monitoring and Alerting

Set up monitoring tools like Prometheus to scrape logs and trigger alerts based on specific patterns.

Log Anything vs Log Everything | Last9
Explore the logging spectrum from “Log Anything” chaos to “Log Everything” clarity. Learn structured logging best practices in Go with zap!

Troubleshooting with systemctl Logs

When troubleshooting issues with services, systemctl logs are often the first place to check. Here are some scenarios where these logs can be helpful:

  • Service Failures: If a service isn’t starting, systemctl logs often provide error messages that can pinpoint what’s going wrong, whether it’s a misconfiguration or missing dependencies.
  • Performance Issues: High resource usage or slowdowns can sometimes be traced back to issues logged by services. Checking logs can reveal if a service is consuming excessive resources or encountering errors.
  • System Crashes: Logs offer critical details about system crashes or kernel panics, which can help administrators determine whether the issue is hardware-related or caused by a software bug.

Security and Permissions

Understanding Log Access Control

System logs often contain sensitive information. Understanding who can access these logs is crucial for system security. Here's what you need to know:

# View current log access permissions
ls -l /var/log/journal/

# Add user to systemd-journal group
sudo usermod -a -G systemd-journal username

# Verify access
groups username

Administrator access is required for viewing certain system logs. This is important because:

  • Some logs contain sensitive system information
  • Security logs need restricted access
  • Compliance requirements may mandate access control

Performance Impact Analysis

Understanding Log Impact on System Resources

Heavy logging can affect system performance. Here's how to monitor and optimize:

Disk Usage Monitoring

# Check journal disk usage
journalctl --disk-usage

# Monitor real-time disk writes
iotop -o
Using Kubectl Logs: Guide to Viewing Kubernetes Pod Logs | Last9
Learn how to effectively use kubectl logs to view and analyze Kubernetes pod logs. Master advanced techniques, troubleshoot issues, and optimize your K8s deployments.

Memory Impact

# Check journal memory usage
systemctl status systemd-journald

Integration with Other Tools

Grafana Integration

Visualize logs in Grafana by setting up Loki and Promtail.
Setup Loki

# Install Loki
docker pull grafana/loki:latest

# Configure promtail to read journal
sudo nano /etc/promtail/config.yml

Configure Dashboard
Create dashboards for:

  • Service status monitoring
  • Error rate tracking
  • Performance metrics visualization

Container Integration

Modern deployments often involve containers. Here's how to handle logs in containerized environments:

Docker Integration

# View container logs through journalctl
journalctl CONTAINER_NAME=my-container

# Forward container logs to journal
docker run --log-driver=journald my-container

Conclusion

Understanding systemctl logs is an essential skill for anyone managing Linux systems. With tools like journalctl and a few best practices, troubleshooting becomes less of a headache, and keeping your system running smoothly feels much more manageable.

It’s all about staying on top of the details and letting the logs tell the story of what’s happening under the hood.

🤝
If you'd like to continue the conversation, feel free to join our community on Discord. We have a dedicated channel where you can share your specific use case and connect with other developers.

FAQs

What is the systemctl command used for?

The systemctl command is a tool for managing and controlling systemd services on Linux systems. It lets you start, stop, restart, enable, or disable services. Additionally, systemctl is used to view the status of services and check logs generated by systemd. It’s essential for system administrators to ensure that services are running properly and that the system stays healthy.

How do I view logs of a specific service using systemctl?

To view logs for a specific service, you can use the journalctl command with the -u option followed by the service name. For example:

journalctl -u nginx

This command will show all the logs related to the nginx service, including error messages, startup times, and any issues that may arise during its operation.

Can I view logs in real-time using systemctl?

Yes, you can! By using the -f option with journalctl, you can view logs in real-time, just like using tail -f. For example:

journalctl -u nginx -f

This will stream the logs of the nginx service as new entries are added, allowing you to monitor the service live as it runs.

How do I filter systemctl logs by date?

You can filter logs by specific dates using the --since and --until options. For example:

journalctl --since "2024-12-01" --until "2024-12-09"

This command will display logs between December 1st and December 9th, 2024. You can also use relative time filters, such as --since "1 hour ago" or --since "yesterday", for more dynamic queries.

What are the priority levels in systemctl logs?

systemctl logs are categorized by severity levels, ranging from 0 (emergency) to 7 (debug). These priority levels allow you to filter logs based on their importance. You can use the -p option to filter logs by priority. For example:

journalctl -p err

This will display only error messages. Other priority levels include alert, critical, warning, and info. Each level helps you focus on the most urgent logs.

How can I clean up old logs using systemctl?

Logs can accumulate quickly, so it’s essential to clean them up periodically. You can remove old logs using the --vacuum-time or --vacuum-size options. For example:

journalctl --vacuum-time=2weeks

This will delete logs older than two weeks. Alternatively, you can limit the journal size to free up disk space:

journalctl --vacuum-size=500M

This will delete logs until the total journal size is below 500MB.

How do I monitor logs for multiple services at once?

You can monitor logs for multiple services by running separate journalctl commands in parallel using different terminal windows. Alternatively, you can use grep to filter logs from multiple services. For example:

journalctl -u nginx | grep "error"
journalctl -u apache2 | grep "error"

This will allow you to search for errors across different services in real-time, making it easier to monitor multiple services simultaneously.

What is the difference between systemctl and journalctl?

While systemctl is used to manage system services and control their states (such as starting, stopping, or enabling them), journalctl is a command-line tool specifically for viewing and managing logs generated by systemd services. In short, systemctl handles the management of services, while journalctl deals with logging and troubleshooting.

How can I forward systemctl logs to an external server?

To forward systemctl logs to an external server, you can configure systemd to send logs to a syslog server. Modify the journald configuration in /etc/systemd/journald.conf and set the ForwardToSyslog option to yes. For centralized log collection, tools like Fluentd or Logstash can be used to collect and forward logs to external systems. This is helpful for long-term log storage or compliance purposes.

How do I view logs for a specific boot session?

To view logs for the current boot session, use:

journalctl -b

If you want to view logs from the previous boot, use:

journalctl -b -1

This is useful for troubleshooting issues related to a specific system startup.

How do I filter logs by specific keywords or strings?

If you’re looking for specific events in the logs, you can pipe journalctl with grep to search for certain keywords. For example:

journalctl -u nginx | grep "connection failed"

This will only show logs where the phrase "connection failed" appears, making it easier to locate relevant log entries.

How can I monitor disk usage from logs?

Heavy logging can affect system performance. To monitor the disk usage of logs, use:

journalctl --disk-usage

This will show you the current disk usage of system logs. You can also use iotop to monitor real-time disk writes, which helps you understand how logs are affecting your system’s resources.

Contents


Newsletter

Stay updated on the latest from Last9.

Handcrafted Related Posts