banshee est en développement actif : les collecteurs vont encore changer, et une version que vous publiez demandera sans doute des ajustements. Pour un usage stable, attendez la version 1.0.0.

Services

banshee/services-collection/services/postfix/ssh/

queue

The messages queued by a Postfix server, by queue, and the age of the oldest deferred message, by SSH and postqueue -j.

  • services
  • postfix
  • mail
  • smtp
  • queue
  • deferred
  • postqueue
  • ssh

par banshee1 installation1 version

v1Dernière

Publiée le 27 octobre 2026. First version.

Keen 1.0.0 · 53 lignes
// The mail queue of a Postfix server, by SSH and postqueue -j: the messages queued, by queue (deferred, active,
// held, incoming), and the age of the oldest deferred message. postqueue lists the queue to any local account
// by default (authorized_mailq_users): no sudo.
need('protocol:ssh');

output('queued', 'number', array('label' => 'Messages queued'));
output('deferred', 'number', array('label' => 'Messages deferred'));
output('active', 'number', array('label' => 'Messages being delivered'));
output('hold', 'number', array('label' => 'Messages held'));
output('incoming', 'number', array('label' => 'Messages arriving'));
output('oldest-deferred', 'number', array('label' => 'Oldest deferred message', 'unit' => 'h'));

watch.above('queued', 'Queue too long', 'queued', array('warning' => 500, 'critical' => 2000));
watch.above('deferred', 'Many messages deferred', 'deferred', array('warning' => 50, 'critical' => 200, 'for' => '3 runs'));
watch.above('oldest-deferred', 'Deferred message too old', 'oldest-deferred', array('warning' => 4, 'critical' => 24));
watch.above('hold', 'Messages held', 'hold', array('warning' => 0, 'enabled' => false));

// One JSON object per message, one per line (Postfix 3.1 and later):
// {"queue_name": "deferred", "queue_id": "4BPm4N2tVLz1x", "arrival_time": 1793062803, "message_size": 2048,
//  "sender": "app@www.example", "recipients": [{"address": "user@mail.example", "delay_reason": "..."}]}
// With the mail system stopped, postqueue says "mail system is down".
$read = ssh.run('postqueue -j');
if ($read['exit'] != 0) {
    if (text.contains($read['errors'], 'mail system is down')) {
        fail('critical', 'Postfix is not running', $read['errors']);
    }
    fail('misconfigured', 'postqueue failed', $read['errors']);
}

$count = array('deferred' => 0, 'active' => 0, 'hold' => 0, 'incoming' => 0, 'maildrop' => 0);
$queued = 0;
$oldest = '';
foreach (text.lines($read['output']) as $line) {
    $message = json.read($line);
    $queue = list.get($message, 'queue_name', '');
    $queued = $queued + 1;
    $count[$queue] = list.get($count, $queue, 0) + 1;
    if ($queue == 'deferred' && ($oldest == '' || $message['arrival_time'] < $oldest)) {
        $oldest = $message['arrival_time'];
    }
}

value('queued', $queued);
value('deferred', $count['deferred']);
value('active', $count['active']);
value('hold', $count['hold']);
// maildrop holds what is posted locally and not yet picked up: it arrives, as incoming does.
value('incoming', $count['incoming'] + $count['maildrop']);
$age = 0;
if ($oldest != '') {
    $age = number.round((time.now() - $oldest) / 3600, 1);
}
value('oldest-deferred', $age);