如何在 syslog-ng 中使用 patterndb

Posted

技术标签:

【中文标题】如何在 syslog-ng 中使用 patterndb【英文标题】:How to use patterndb in syslog-ng 【发布时间】:2017-03-21 10:36:34 【问题描述】:
syslog-ng.conf

https://www.balabit.com/network-security/syslog-ng/opensource-logging-system/features/pattern-db

@define logfileName "/apps/syslog-ng/etc/testing.log"
@define Pattern1 ".*Exception.*"

source s_app1.conf  file("`logfileName`" flags(no-parse)  follow-freq(1)); ;

#Edit here below vars
#InstanceName in each template  ( need to start with $HOST.)
#EventName (as numbered ) in each template line. 
#change <first section> as required for severity.
#186 -> Critical (critical)
#187 -> Major    (error)
#188 -> Minor    (warning)

parser pattern_db 
            db_parser(
                file("/apps/syslog-ng/etc/syslog-ng-patterndb-master/applications/openssh/example.xml")
            );
            ;

            parser t_app1.conf_1 
            db_parser(
                file("/apps/syslog-ng/etc/syslog-ng-patterndb-master/applications/openssh/example.xml")
            );
            ;

template t_app1.conf_1

    template ("<186><$ISODATE>[HostName=$HOST][ClassName=Application][InstanceName=$HOST/BoB/app2-l1][EventName=`Pattern1`][LogFileName=`logfileName`][$MSG] $SSH_USERNAME; $SSH_CLIENT_ADDRESS \n");
    template_escape(no);
;
destination d_app1.conf_1  syslog("10.54.20.98" transport("udp") port(514)  template(t_app1.conf_1)); ;



filter f_app1.conf_1  message("`Pattern1`" flags("utf8" "ignore-case") ); ;



log  source(s_app1.conf); filter(f_app1.conf_1); destination(d_app1.conf_1); flags(final); ;

我的模式数据库 xml

example.xml

<?xml version='1.0' encoding='UTF-8'?>
<patterndb version="3" pub_date="2010-04-15">
    <ruleset name='ssh' id='123456678'>
        <pattern>ssh</pattern>
            <rules>
                <rule provider='me' id='182437592347598' class='system'>
                    <patterns>
                        <pattern>Accepted @ESTRING:SSH.AUTH_METHOD: @for @ESTRING:SSH_USERNAME: @from @ESTRING:SSH_CLIENT_ADDRESS: @port @NUMBER:SSH_PORT_NUMBER:@ ssh2</pattern>
                    </patterns>
                    <examples>
                        <example>
                            <test_message program="ssh">Accepted password for sampleuser from 10.50.0.247 port 42156 ssh2</test_message>
                            <test_values>
                                <test_value name="SSH.AUTH_METHOD">password</test_value>
                                <test_value name="SSH_USERNAME">sampleuser</test_value>
                                <test_value name="SSH_CLIENT_ADDRESS">10.50.0.247</test_value>
                                <test_value name="SSH_PORT_NUMBER">42156</test_value>
                            </test_values>
                       </example>
                    </examples>
                </rule>
            </rules>
    </ruleset>
</patterndb>

我正在尝试通过他们的官方博客将 patterndb 与 syslog-ng 一起使用,我能够安装和使用 syslog 但不能使用 patterndb,因为没有描述如何使用 patterndb 的安装指南。如果有人使用过 patterndb linux系统上的syslog请指导我。

【问题讨论】:

【参考方案1】:

您可以在official documentation of syslog-ng patterndb 中找到信息。

基本上,你想create a patterndb file(你可以找到sample patterndb files on github,也可以在这个blogpost)和use it in your syslog-ng configuration to parse the log messages。

然后,根据您解析的方式或内容,您可以在目标模板中使用结果,或用于过滤或许多其他用途。

你能描述一下你想解析什么以及为什么要解析吗?

【讨论】:

考虑我想解析这个常见消息“从 10.50.0.247 端口 42156 ssh2 接受 sampleuser 的密码”,所以为此我只需要一个包含 patterndb xml 的 xml 文件? 在patterndb中,xml文件包含解析消息的规则。对于要解析的每条消息,您都需要一个匹配规则(一个规则可以匹配多条不同的消息,具体取决于消息)。要解析上述 SSH 登录消息,您只需要该消息的规则。您可以在此处找到 SSH 的示例规则:github.com/balabit/syslog-ng-patterndb/blob/master/applications/… 嗨罗伯特,你能检查一下conf文件是否正确吗? 您好,您已经在配置中定义了模式数据库,但您实际上并没有在日志路径中使用它。尝试这样的事情): log source(s_app1.conf);解析器(t_app1.conf_1);过滤器(f_app1.conf_1);目的地(d_app1.conf_1);标志(最终); ; 嗨罗伯特,你能帮我的朋友解决这个问题吗***.com/questions/43319887/…

以上是关于如何在 syslog-ng 中使用 patterndb的主要内容,如果未能解决你的问题,请参考以下文章

如何 syslog-ng 到远程设施

如何使 Syslog-ng 服务器在从客户端接收到的日志中显示设施、优先级?

如何删除转发时间戳? OSE 版本 Syslog-NG

Syslog-ng配置ElasticSearch

我可以使用更高级的模板在 syslog-ng 中提取 $PROGRAM 吗?

在 syslog-ng 中抑制重复消息到 SQL 目标