ELK stack权威指南
上QQ阅读APP看书,第一时间看更新

3.3 Postfix日志

Postfix是Linux平台上最常用的邮件服务器软件。邮件服务的运维复杂度一向较高,在此提供一个针对Postfix日志的解析处理方案。方案出自:https://github.com/whyscream/postfix-grok-patterns。

因为Postfix默认通过syslog方式输出日志,所以可以选择通过rsyslog直接转发给Logstash,也可以由Logstash读取rsyslog记录的文件。

Postfix会根据实际日志的不同,主动设置好不同的syslogtag,有anvil、bounce、cleanup、dnsblog、local、master、pickup、pipe、postdrop、postscreen、qmgr、scache、sendmail、smtp、lmtp、smtpd、tlsmgr、tlsproxy、trivial-rewrite和discard等20个不同的后缀,而在Logstash中,syslogtag通常被解析为program字段。本节以第一种anvil日志的处理配置作为示例:

input {
    syslog { }
}
filter {
    if [program] =~ /^postfix.*\/anvil$/ {
        grok {
            patterns_dir   =>“/etc/logstash/patterns.d”
            match          => [ “message”, “%{POSTFIX_ANVIL}” ]
            tag_on_failure => [ “_grok_postfix_anvil_nomatch” ]
            add_tag        => [ “_grok_postfix_success” ]
        }
    }
    mutate {
        convert => [
        “postfix_anvil_cache_size”, “integer”,
        “postfix_anvil_conn_count”, “integer”,
        “postfix_anvil_conn_rate”, “integer”,
        ]
    }
}

配置中使用了一个叫POSTFIX_ANVIL的自定义grok正则,该正则及其相关正则内容如下所示。将这段grok正则保存成文本文件,放入/etc/logstash/patterns.d/目录即可使用。

POSTFIX_TIME_UNIT %{NUMBER}[smhd]
POSTFIX_ANVIL_CONN_RATE statistics: max connection rate %{NUMBER:postfix_anvil_conn_
    rate}/%{POSTFIX_TIME_UNIT:postfix_anvil_conn_period} for \(%{DATA:postfix_
    service}:%{IP:postfix_client_ip}\) at %{SYSLOGTIMESTAMP:postfix_anvil_
    timestamp}
POSTFIX_ANVIL_CONN_CACHE statistics: max cache size %{NUMBER:postfix_anvil_
    cache_size} at %{SYSLOGTIMESTAMP:postfix_anvil_timestamp}
POSTFIX_ANVIL_CONN_COUNT statistics: max connection count %{NUMBER:postfix_
    anvil_conn_count} for \(%{DATA:postfix_service}:%{IP:postfix_client_ip}\) at
    %{SYSLOGTIMESTAMP:postfix_anvil_timestamp}
POSTFIX_ANVIL %{POSTFIX_ANVIL_CONN_RATE}|%{POSTFIX_ANVIL_CONN_CACHE}|%{POSTFIX_
    ANVIL_CONN_COUNT}

其余19种Postfix日志的完整grok正则和Logstash过滤配置,读者可以通过https://github.com/whyscream/postfix-grok-patterns获取。