Syslogは、デバイスログの記録に使用できる業界標準のプロトコルです。 syslog は、ネットワーク管理ツール、セキュリティ管理システム、ログ監査システムで一般的に使用されています。 このトピックでは、Simple Log Serviceのドメイン固有言語 (DSL) のGrok関数を使用して、さまざまな形式のSyslogメッセージを解析する方法について説明します。
概要
syslog は、UNIXライクなオペレーティングシステムでのメッセージロギングに広く使用されています。 Syslogメッセージは、ローカルファイルに記録するか、インターネット経由でSyslogサーバーに送信できます。 各サーバーは、複数のデバイスのSyslogメッセージを保存および解析できます。
背景情報
従来のSyslogメッセージは、Syslog標準がないため、ランダムな形式です。 Syslogメッセージは文字列としか見なされないため、解析に失敗する場合があります。 したがって、Syslogメッセージをさまざまな形式で解析する場合は、正確性が最優先です。
Syslogプロトコル
業界では、2009で発行されたRFC 5424と2001で発行されたRFC 3164の2つのSyslogプロトコルが一般的に使用されます。 このセクションでは、Grok関数を使用してSyslogメッセージを解析するのに役立つ2つのプロトコルの違いについて説明します。
RFC 5424
RFC 5424プロトコルを使用するSyslogメッセージには、次のフィールドが含まれます。 詳細については、「 RFC 5424 - syslog プロトコル」をご参照ください。
PRI VERSION SP TIMESTAMP SP HOSTNAME SP APP-NAME SP PROCID SP MSGID
次の例では、これらのフィールドについて説明します。
""" Example1: <34>1 2019-07-11T22:14:15.003Z aliyun.example.com ali - ID47 - BOM'su user' failed for lonvick on /dev/pts/8 """ PRI -- 34 VERSION -- 1 TIMESTAMP -- 2019-07-11T22:14:15.003Z HOSTNAME -- aliyun.example.com APP-NAME -- ali PROCID -- None MSGID -- ID47 MESSAGE -- 'su user' failed for lonvick on /dev/pts/8 """ Example2: <165>1 2019-07-11T22:14:15.000003-07:00 192.0.2.1 myproc 8710 - - %% It's time to make the do-nuts. """ PRI -- 165 VERSION -- 1 TIMESTAMP -- 2019-07-11T05:14:15.000003-07:00 HOSTNAME -- 192.0.2.1 APP-NAME -- myproc PROCID -- 8710 STRUCTURED-DATA -- "-" MSGID -- "-" MESSAGE -- "%% It's time to make the do-nuts." """ Example3: - with STRUCTURED-DATA <165>1 2019-07-11T22:14:15.003Z aliyun.example.com evntslog - ID47 [exampleSDID@32473 iut="3" eventSource= "Application" eventID="1011"] BOMAn application event log entry... """ PRI -- 165 VERSION -- 1 TIMESTAMP -- 2019-07-11T22:14:15.003Z HOSTNAME -- aliyun.example.com APP-NAME -- evntslog PROCID -- "-" MSGID -- ID47 STRUCTURED-DATA -- [exampleSDID@32473 iut="3" eventSource="Application" eventID="1011"] MESSAGE -- An application event log entry...
RFC 3164
RFC 3164プロトコルを使用するSyslogメッセージには、次のフィールドが含まれます。 詳細については、「 RFC 3164 - BSD syslog プロトコル」をご参照ください。
PRI HEADER[TIME HOSTNAME] MSG
次の例では、これらのフィールドについて説明します。
""" <30>Oct 9 22:33:20 hlfedora auditd[1787]: The audit daemon is exiting. """ PRI -- 30 HEADER - TIME -- Oct 9 22:33:20 - HOSTNAME -- hlfedora MSG - TAG -- auditd[1787] - Content --The audit daemon is exiting.
Grok関数を使用してSyslogメッセージを一般的な形式で解析する
このセクションでは、Grok関数を使用してSyslogメッセージを一般的な形式で解析する方法について説明します。 Grokルールの詳細については、「Grokパターン」をご参照ください。
TraditionalFormat
生のログエントリ
receive_time: 1558663265 __topic__: content: May 5 10:20:57 iZbp1a65x3r1vhpe94fi2qZ systemd: Started System Logging Service.
DSL オーケストレーション
e_regex('content', grok('%{SYSLOGBASE} %{GREEDYDATA:message}'))
結果
receive_time: 1558663265 __topic__: content: May 5 10:20:57 iZbp1a65x3r1vhpe94fi2qZ systemd: Started System Logging Service. timestamp: May 5 10:20:57 logsource: iZbp1a65x3r1vhpe94fi2qZ program: systemd message: Started System Logging Service.
FileFormat
生のログエントリ
receive_time: 1558663265 __topic__: content: 2019-05-06T09:26:07.874593+08:00 iZbp1a65x3r1vhpe94fi2qZ user: 834753
DSL オーケストレーション
e_regex('content',grok('%{TIMESTAMP_ISO8601:timestamp} %{SYSLOGHOST:hostname} %{SYSLOGPROG} %{GREEDYDATA:message}'))
結果
receive_time: 1558663265 __topic__: content: 2019-05-06T09:26:07.874593+08:00 iZbp1a65x3r1vhpe94fi2qZ user: 834753 timestamp: 2019-05-06T09:26:07.874593+08:00 hostname: iZbp1a65x3r1vhpe94fi2qZ program: user message: 834753
RSYSLOG_SyslogProtocol23Format
生のログエントリ
receive_time: 1558663265 __topic__: content: <13>1 2019-05-06T11:50:16.015554+08:00 iZbp1a65x3r1vhpe94fi2qZ user - - - twish
DSL オーケストレーション
e_regex('content',grok('%{POSINT:priority}>%{NUMBER:version} %{TIMESTAMP_ISO8601:timestamp} %{SYSLOGHOST:hostname} %{PROG:program} - - - %{GREEDYDATA:message}'))
結果
receive_time: 1558663265 __topic__: content: <13>1 2019-05-06T11:50:16.015554+08:00 iZbp1a65x3r1vhpe94fi2qZ user - - - twish priority: 13 version: 1 timestamp: 2019-05-06T11:50:16.015554+08:00 hostname: iZbp1a65x3r1vhpe94fi2qZ program: user message: twish
RSYSLOG_DebugFormat
ログ内容
receive_time: 1558663265 __topic__: content: 2019-05-06T14:29:37.558854+08:00 iZbp1a65x3r1vhpe94fi2qZ user: environment
DSL オーケストレーション
e_regex('content',grok('%{TIMESTAMP_ISO8601:timestamp} %{SYSLOGHOST:hostname} %{SYSLOGPROG} %{GREEDYDATA:message}'))
結果
receive_time: 1558663265 __topic__: content: 2019-05-06T14:29:37.558854+08:00 iZbp1a65x3r1vhpe94fi2qZ user: environment timestamp: 2019-05-06T14:29:37.558854+08:00 hostname: iZbp1a65x3r1vhpe94fi2qZ program: user message: environment
Grok関数を使用してSyslogメッセージを珍しい形式で解析する
このセクションでは、Grok関数を使用して、FluentRFC5424とFluentRFC316の2つの珍しい形式でSyslogメッセージを解析する方法について説明します。 これらのメッセージはFluentソフトウェアを使用して収集されます。
FluentRFC5424
ログ内容
receive_time: 1558663265 __topic__: content: <16>1 2019-02-28T12:00:00.003Z 192.168.0.1 aliyun 11111 ID24224 [exampleSDID@20224 iut='3' eventSource='Application' eventID='11211] Hi, from Fluentd!
DSL オーケストレーション
e_regex('content',grok('%{POSINT:priority}>%{NUMBER:version} %{TIMESTAMP_ISO8601:timestamp} %{SYSLOGHOST:hostname} %{WORD:ident} %{USER:pid} %{USERNAME:msgid} (? P<extradata>(\[(. *)\]|[^ ])) %{GREEDYDATA:message}'))
結果
receive_time: 1558663265 __topic__: content: <16>1 2019-02-28T12:00:00.003Z 192.168.0.1 aliyun 11111 ID24224 [exampleSDID@20224 iut='3' eventSource='Application' eventID='11211] Hi, from aliyun! priority: 16 version: 1 timestamp: 2019-02-28T12:00:00.003Z hostname: 192.168.0.1 ident: aliyun pid: 11111 msgid: ID24224 extradata: [exampleSDID@20224 iut='3' eventSource='Application' eventID='11211] message: Hi, from aliyun!
FluentRFC3164
ログ内容
receive_time: 1558663265 __topic__: content: <6>Feb 28 12:00:00 192.168.0.1 aliyun[11111]: [error] Syslog test
DSL オーケストレーション
e_regex('content', grok('%{POSINT:priority}>%{SYSLOGTIMESTAMP:timestamp} %{SYSLOGHOST:hostname} %{WORD:ident}(? P<pid>(\[[a-zA-Z0-9. _-]+\]|[^:])): (? P<level>(\[(\w+)\]|[^ ])) %{GREEDYDATA:message}'))
結果
receive_time: 1558663265 __topic__: content: <6>Feb 28 12:00:00 192.168.0.1 aliyun[11111]: [error] Syslog test priority: 6 timestamp: Feb 28 12:00:00 hostname: 192.168.0.1 ident: aliyun pid: [11111] level: [error] message: Syslog test
ログエントリの優先順位フィールドを解析する
FluentRFC5424およびFluentRFC3164形式でSyslogメッセージを解析した後、さらに優先度フィールドを解析して、機能と重大度に関する情報を取得できます。 RFC5424の使用方法の詳細については、「e_syslogrfc」をご参照ください。 例:
生のログエントリ
receive_time: 1558663265 __topic__: content: <13>1 2019-05-06T11:50:16.015554+08:00 iZbp1a65x3r1vhpe94fi2qZ user - - - twish priority: 13 version: 1 timestamp: 2019-05-06T11:50:16.015554+08:00 hostname: iZbp1a65x3r1vhpe94fi2qZ program: user message: twish
DSL オーケストレーション
e_syslogrfc("priority","SYSLOGRFC5424")
結果
receive_time: 1558663265 __topic__: content: <13>1 2019-05-06T11:50:16.015554+08:00 iZbp1a65x3r1vhpe94fi2qZ user - - - twish priority: 13 version: 1 timestamp: 2019-05-06T11:50:16.015554+08:00 hostname: iZbp1a65x3r1vhpe94fi2qZ program: user message: twish _facility_: 1 _severity_: 5 _severitylabel_: Notice: normal but significant condition _facilitylabel_: user-level messages