Troubleshooting Delivery Issues

Understanding and Utilizing Mail Logs in Your Linux Server

Published · Updated 4 min read
Knowledge base article
Contents (9 sections)

Introduction

Email servers are the backbone of business communication, ensuring seamless and secure information exchange. Monitoring mail logs is critical to maintaining your server's health and identifying potential issues. This guide will teach you how to use tools like grep and zgrep to analyze mail logs on Linux servers, with a focus on Exim, a popular mail transfer agent (MTA).


Why Monitor Mail Logs

Monitoring mail logs helps you:

  • Detect delivery issues: Quickly troubleshoot failed emails.
  • Enhance security: Monitor unauthorized access or spam attempts.
  • Ensure compliance: Adhere to business and legal policies.

Accessing Mail Logs

On servers using Exim, the main log file is typically located at:
/var/log/exim_mainlog

This file logs every transaction Exim handles, offering a detailed view of email activity. For older logs, compressed files may exist (e.g., /var/log/exim_mainlog-YYYYMMDD.gz).


Using grep to Search Mail Logs

The grep command is an essential tool for searching and analyzing mail log data effectively. Here's how you can utilize it for various purposes:

Quickly locate specific patterns, such as email addresses, message IDs, or error codes, using this command:

code
grep "search_pattern" /var/log/exim_mainlog

Example: To find all occurrences of the email address [email protected]:

code
grep "[email protected]" /var/log/exim_mainlog

Perform searches without worrying about case sensitivity by adding the -i option:

code
grep -i "search_pattern" /var/log/exim_mainlog

Example: To search for auth failed in a case-insensitive manner:

code
grep -i "auth failed" /var/log/exim_mainlog

Count Matching Lines

Find out how many times a specific pattern appears in the log file using the -c option:

code
grep -c "search_pattern" /var/log/exim_mainlog

Example: To count the number of login failures:

code
grep -c "login failed" /var/log/exim_mainlog

Display Line Numbers

To display the line numbers alongside the matching results for easy reference:

code
grep -n "search_pattern" /var/log/exim_mainlog

Example: To locate all lines containing SMTP error with line numbers:

code
grep -n "SMTP error" /var/log/exim_mainlog

Search in Multiple Files

To search across multiple log files at once, use wildcards:

code
grep "search_pattern" /var/log/exim_mainlog*

Example: To find all occurrences of bounce in rotated and current log files:

code
grep "bounce" /var/log/exim_mainlog*

Combine with tail for Real-Time Analysis

Monitor logs in real-time for specific patterns by combining grep with tail:

code
tail -f /var/log/exim_mainlog | grep "search_pattern"

Example: To watch for live login failures:

code
tail -f /var/log/exim_mainlog | grep "login failed"

Using these techniques, you can efficiently navigate and analyze your mail logs to ensure your email systems are running smoothly and securely.


Using zgrep to Search Compressed Logs

Compressed logs, typically with the .gz extension, are used to save disk space. These logs can still be easily accessed and analyzed using the zgrep command, which functions similarly to grep but is designed for compressed files.

Example: Searching a Compressed Log File

To search for a specific pattern in a compressed log file, use the following syntax:

zgrep "search_pattern" /var/log/exim_mainlog-YYYYMMDD.gz

Replace search_pattern with the text you want to search for, and YYYYMMDD with the date of the specific log file.

Advanced Usage Examples

  • Case-Insensitive Search: To perform a case-insensitive search, add the -i flag: zgrep -i "search_pattern" /var/log/exim_mainlog-YYYYMMDD.gz

  • Count Matches: To count the number of times a pattern appears in a compressed log: zgrep -c "search_pattern" /var/log/exim_mainlog-YYYYMMDD.gz

  • Search with Context: To view lines before and after the matched text, use the -C option followed by the number of lines for context: zgrep -C 3 "search_pattern" /var/log/exim_mainlog-YYYYMMDD.gz

  • Search Multiple Files: To search across multiple compressed log files in the same directory: zgrep "search_pattern" /var/log/exim_mainlog-*.gz

Combining with Other Commands

To further process the output of zgrep, you can pipe it to other commands. For example, to sort and display unique results: zgrep "search_pattern" /var/log/exim_mainlog-*.gz | sort | uniq

By leveraging zgrep, you can efficiently analyze historical log data stored in compressed formats without the need for manual extraction.


Example: Finding Failed Delivery Attempts

To locate failed email delivery attempts (status code N):
grep " N " /var/log/exim_mainlog

This will return entries indicating emails that weren't successfully delivered.


Enhanced Features for Advanced Monitoring

  • View Logs in Real-Time
    Use tail to monitor logs as they update:
    tail -f /var/log/exim_mainlog

  • Domain-Specific Logs
    Focus on a specific domain's activities:
    grep "example.com" /var/log/exim_mainlog

  • Outgoing Mail Failures
    To find rejected outgoing emails:
    grep "rejected outgoing" /var/log/exim_mainlog

  • Authentication Failures
    Identify unauthorized login attempts:
    grep "auth failed" /var/log/exim_mainlog


For an in-depth guide on mail log analysis, formats, and troubleshooting techniques, explore our article: The Ultimate Comprehensive Guide to Mastering Mail Log Analysis.


Conclusion

Mail log analysis is a vital skill for server administrators. By mastering tools like grep and zgrep, you can ensure smooth email operations, enhance server security, and troubleshoot effectively. Stay proactive and keep your email infrastructure reliable with these techniques!

Was this article helpful?

Your answer helps us decide what to improve next.

Still need help? Open a support ticket and our team will reply.

Prefer an app? Add this site to your home screen.Get the app
Understanding and Utilizing Mail Logs in Your Linux Server - Knowledge Base