カスタムの複数行ログ パーサーをセットアップして、読み取り可能なフィールドを使用して Stackdriver にログを取得しようとしています。現在、次のようになっています。
<source>
type tail
read_from_head true
path /root/ansible.log
pos_file /var/lib/google-fluentd/pos/ansible.pos
time_format "%a %b %e %T %Z %Y"
format multiline
format_firstline /Started ansible run at/
format1 /Started ansible run at (?<timestart>[^\n]+)\n(?<body>.*)/
format2 /PLAY RECAP.*/
format3 /ok=(?<ok>\d+)\s+changed=(?<changed>\d+)\s+unreachable=(?<unreachable>\d+)\s+failed=(?<failed>\d+).*/
format4 /Finished ansible run at (?<timeend>[^\n]+)/
tag ansible
</source>
これはhttp://docs.fluentd.org/v0.12/articles/parser_multilineの仕様に従って行われており、動作します。しかし、それは適切なタイムスタンプなしで機能します -timestart
そしてtimeend
、json の単純なフィールドです。したがって、この現在の状態では、正規表現の中に変数time_format
がないため、設定は役に立ちません。time
これにより、必要なすべての変数が集約され、fluend サービスを実行するとログが Stackdriver に表示され、すべてがほぼ満足しています。
ただし、これらの時間変数の名前の 1 つを に変更するtime
と、実際に Stackdriver のタイムスタンプをエントリに割り当てようとしても機能しません。マシンの fluentd ログには、ワーカーが開始してすべてを解析したことが示されていますが、ログは Stackdriver コンソールにまったく表示されません。
timestart
それらの線に沿って、または何かのようにtimeend
見えます。Fri Jun 2 20:39:58 UTC 2017
時刻形式の仕様はhttp://ruby-doc.org/stdlib-2.4.1/libdoc/time/rdoc/Time.html#method-c-strptimeにあり、何度もチェックして再確認しましたが、何が間違っているのかわかりません。
編集: 別の詳細: 変数を解析しようとするとtime
、Stackdriver コンソールにログが表示されず、適切なタグ (この場合ansible
は ) がタグのリストに表示されます。結果が空であるというだけです。