RuleTimingRedis is a plugin for spamassassin which gathers and stores performance data of processed spamassassin rules in a redis server.
To load the plugin put an loadplugin line into init.pre:
loadplugin Mail::SpamAssassin::Plugin::RuleTimingRedis
If the RuleTimingRedis.pm is not in perls @INC you need to specify the path:
loadplugin Mail::SpamAssassin::Plugin::RuleTimingRedis <path-to>/RuleTimingRedis.pm
If your redis server is not listening on 127.0.0.1:6379 configure the address in local.cf:
timing_redis_server 192.168.0.10:6379
Then restart amavisd.
After the first mail was processed the keys for the processed rules should appear in redis:
$ redis-cli
redis 127.0.0.1:6379> KEYS 'sa-timing.*'
1) "sa-timing.__DRUGS_SLEEP3.count"
2) "sa-timing.__MAIL_LINK.count"
3) "sa-timing.__CGATE_RCVD.count"
...
The plugin has the following configuration options:
- timing_redis_server (default: '127.0.0.1:6379')
-
Address and port of the redis server.
- timing_redis_password (default: no password)
-
Set if you redis server requires a password.
- timing_redis_exclude_re (default: '^__')
-
Regex to exclude rules from timing statistics.
The current SpamAssassin ruleset is about ~2k rules. The default will exclude all sub-rules that start with '__' (two underscores).
Set to empty string if you really want to measure all rules.
- timing_redis_prefix (default: 'sa-timing.')
-
Prefix to used for the keys in redis.
- timing_redis_database (default: 0)
-
Will call SELECT to switch database after connect if set to a non-zero value.
Database 0 is the default in redis.
- timing_redis_precision (default: 1000000)
-
Since redis uses integers the floating point value is multiplied by this factor before storing in redis.
- timing_redis_bulk_update (default: 50)
-
Will queue redis updates up to the configured value and execute them in bulks via a server-side script.
Requires a redis server >= 2.6.0 and Redis perl module >= 1.954.
Set to 0 to disable bulk.
- timing_redis_debug (default: 0)
-
Turn on/off debug on the Redis connection.
- timing_redis_hits_enabled (default: 0)
-
If enabled for each test that matched an counter will be incremented in the redis database.
127.0.0.1:6379> keys *.hits 1) "sa-timing.MISSING_SUBJECT.hits" 2) "sa-timing.MISSING_MID.hits" 3) "sa-timing.NO_RELAYS.hits" 127.0.0.1:6379> GET "sa-timing.MISSING_SUBJECT.hits" "3"