Skip to main content

exiqsumm: Getting to know your (Exim) mail queues

Running exiqsumm a few times a day via cron is an excellent way to get a sense of what is normal for your mail queues and will help you pick up all sorts of problems.

For example:
  • Lots of mail waiting to be delivered to your local domain may indicate a local delivery problem like a broken local delivery agent (perhaps you just did a quick distribution update / upgrade and something important broke?), your mail volume has filled up, or some important, high volume user has filled up his mailbox and now his mail is just sitting on the queue?
  • Lots of mail waiting to be delivered to domain example.com? Perhaps example.com's mail server is down, or a network problem has made them unreachable?
  • Lots of mail waiting to go out to lots of different, perhaps suspiciously named, domains could indicate that your mail server is being used to relay spam.
Here's how you use it:

/usr/local/sbin/exim -bp | /usr/local/sbin/exiqsumm

Exiqsumm will give you a nice tabular summary of what is sitting in your mail queue on a per domain basis.

Count Volume Oldest Newest Domain
----- ------ ------ ------ ------

1 3276 20h 20h 0575.info
1 2048 47h 47h 1st4diaries.com
1 3891 33h 33h able-courier-inc.com
1 3481 41h 41h adelphia.com
1 3481 47h 47h alliance-lawyers.com
1 3993 18h 18h alvar.com
1 2662 37h 37h astound.net
1 2252 26h 26h bcinternet.net
1 4812 16h 16h belmarparkdental.com
5 8192 4d 3h blitzbeat.com
1 2150 47h 47h boardley.com
1 1843 47h 47h bochao.com.cn
1 2355 32h 32h brace-ingenierie.com
1 3379 13h 13h brkoday.com
1 3379 3h 3h broste.com
5 9932 5d 16h centrapoint.com
...
---------------------------------------------------------------
109 637KB 5d 2h TOTAL

Comments

Popular posts from this blog

Sorting a list of IP addresses in Python

As I work a lot with network data, one of my favourite python modules is iplib . It takes care of quite a few of things I want to do with IP addresses but lacks a lot of functionality of perl's Net::Netmask which I relied on extensively when perl was my favourite language. One of the iplib missing features is a method for sorting a list of IP addresses, or at the very least, a method for comparing two addresses. Luckily this is easy enough to implement yourself in python using a customised sort function. See the Sorting Mini-HOW TO for a well written document on sorting in python. Here is my attempt at a custom function for sorting IP addresses. import iplib ips = ["192.168.100.56", "192.168.0.3", "192.0.0.192", "8.0.0.255"] def ip_compare(x, y): """ Compare two IP addresses. """ # Convert IP addresses to decimal for easy comparison dec_x = int(iplib.convert(x, "dec")) dec_y = int(ipl...

Normalizing a MAC address string

Over the last few days, I have been spending some time working on my python - reading the sections of Diving into Python that I have never got around to and refactoring parts of some of my python scripts to make better use of the features of language and, ultimately, to make them more robust (i.e. usable by people other than me). The script I have started with is a simple one for registering hosts for DHCP access. Basically, it takes two command line arguments - a fully qualified hostname and a MAC address - and then does some validation, checks that neither address is already in use, normalizes the output to the correct format, constructs a properly formatted host stanza and appends it to the end of our ISC DHCP servers dhcpd.conf configuration file. I have made improvements to various parts of the code but the changes I am most conflicted about are those I have made to the MAC address normalization function which works reliably and therefore probably isn't a good candidate for...

Recursive Descent Parsers and pyparsing

Yesterday while browsing the table of contents of the May 2008 issue of Python Magazine I came across a reference to the pyparsing module - a python module for writing recursive descent parsers using familiar python grammar. O'Reilly's Python DevCenter has an excellent introduction to using this module entitled Building Recursive Descent Parsers with Python . Well worth a read. It just so happens that I have a number of projects which are stalled because writing code to parse complexly structured data is not my strong point. I enjoy parsing up text line by line as much as the next guy but this recursive stuff I find tedious. The ISC DHCP configuration file is, in my opinion, a good example of parsing complexity. It's configuration directives can contain many optional directives, can be nested, and can be all on a single line or broken up move multiple lines. Writing the parser using pyparsing makes this much simpler. Here is a simple example of using pyparsing to parse...