1
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 3 years have passed since last update.

FluentdとDockerとKinesis Firehose その2(fluent.conf作成編)

Last updated at Posted at 2020-02-18

はじめに

前回の続きです。
fluent.confを書いてローカルからkinesis data firehoseに流し込むところまでです

前回からのDockerfileの修正点

公式をみていたら

"3. Customize Dockerfile to install plugins (optional)"の節を見落としていました。
fluent.confの場所をCOPYする場所が最後の方だったので、修正しました。

修正後はこんな感じになっています。(ほとんど公式通り)

FROM fluent/fluentd:v1.9-1

USER root

# install plugin
RUN apk add --update-cache --virtual .build-deps sudo build-base ruby-dev \
    && gem install fluent-plugin-kinesis -v 3.0.0 --no-document \
    && gem sources --clear-all \
    && apk del .build-deps \
    && rm -rf /var/cache/apk/* \
    /home/fluent/.gem/ruby/*/cache/*.gem

# set timezone (Alpine)
RUN apk --update-cache add tzdata && \
    cp /usr/share/zoneinfo/Asia/Tokyo /etc/localtime && \
    apk del tzdata && \
    rm -rf /var/cache/apk/*

COPY ./kinesis.conf /fluentd/etc/fluent.conf

USER fluent

つづいて、fluent.confですが下記の感じにしてみました

kinesis.conf
<source>
  @type  forward
  @id    input1
  @label @mainstream
  port   24224
</source>

<filter **>
  @type stdout
</filter>

<label @mainstream>
  <match kinesis.**>
    @type kinesis_firehose
    @id  output_docker1
    region ap-northeast-1
    aws_key_id your_aws_access_key_id
    aws_sec_key your_aws_secret_key
    delivery_stream_name test-kinesis-firehose-fluentd
    <buffer tag,time>
      @type file
      path /fluentd/log/kinesis
      timekey 30
      timekey_wait 30
      timekey_use_utc true
    </buffer>
    <format>
      @type json
    </format>
  </match>
  <match **>
    @type file
    @id   output1
    path         /fluentd/log/data.*.log
    symlink_path /fluentd/log/data.log
    append       true
    time_slice_format %Y%m%d
    time_slice_wait   10m
    time_format       %Y%m%dT%H%M%S%z
    <format>
      @type json
    </format>
  </match>
</label>

fluent.confの定義から抜粋すると

指定方法 説明
source インプットを定義する所
match アウトプットを定義する所
label 内部ルーティング用のアウトプットとフィルターのグループに関する定義
@include 他のファイルを含める命令
filter イベント処理のパイプラインを決定する命令

となっているので、読み方としては

入力

  • foward: tcp経由で来たイベントを取得する(内部でfluent-catを使用するfluent-loggerというライブラリなどで送信)
  • label: @mainstreamというlabelで定義されたoutputに紐づくことをさす
  • port: 24224で受け付けます
  • ip: 指定していないとデフォルト "0.0.0.0"

フィルター

  • stdout: 標準出力

2020-02-14T10:48:53+09:00 docker.test {"key":"value"}

こんな感じで処理される

出力

  • match kinesis.**: "kiensis.hoge"というイベントで出力しますよという定義
  • aws_key_id, aws_sec_key: kinesisにアクセスできる権限を持ったcredentialを定義(ECS等の場合はRole)
  • type: kinesis_firehose
  • delivery_stream_name: kinesis data firehoseのdelivery_stream_name
  • buffer: 出力ファイルを分割する定義. * path*を定義しないとkinesis_firehoseに飛ばしてくれない
  • timekey: 30秒たったらbufferとしてpath以下に吐き出す設定

は公式のまんまです。debug用としてデータが吐き出されるかみてるだけです。

ハマったのはbufferは設定したもののpathを設定してなかったので、ファイルが吐き出されずに、吸い取られる(flush)されることなく永遠にkinesis data firehoseに送り込まなかったことでした。

あと、confがイケてるかチェックするには
fluentd --dry-run -c confの場所
でできます。

/fluentd/log/kinesis $ echo '{"I say":"hello"}' | fluent-cat kinesis.test
/fluentd/log/kinesis $ echo '{"I say":"hello"}' | fluent-cat kinesis.test
/fluentd/log/kinesis $ echo '{"I say":"hello"}' | fluent-cat kinesis.test
/fluentd/log/kinesis $ echo '{"I say":"hello"}' | fluent-cat kinesis.test
/fluentd/log/kinesis $ pwd
/fluentd/log/kinesis
/fluentd/log/kinesis $ ls -la
total 16
drwxr-xr-x    6 fluent   nogroup        192 Feb 18 11:56 .
drwxr-xr-x   14 fluent   nogroup        448 Feb 18 11:51 ..
-rw-r--r--    1 fluent   nogroup         21 Feb 18 11:56 buffer.b59ed0d18a89e7ab3ccaa887b7ccfb789.log
-rw-r--r--    1 fluent   nogroup         86 Feb 18 11:56 buffer.b59ed0d18a89e7ab3ccaa887b7ccfb789.log.meta
-rw-r--r--    1 fluent   nogroup        126 Feb 18 11:56 buffer.b59ed0d197a62770a411b37f39a5d3f3a.log
-rw-r--r--    1 fluent   nogroup         86 Feb 18 11:56 buffer.b59ed0d197a62770a411b37f39a5d3f3a.log.meta
/fluentd/log/kinesis $ cat buffer.b59ed0d197a62770a411b37f39a5d3f3a.log
��{"I say":"hello"}
��{"I say":"hello"}
��{"I say":"hello"}
��{"I say":"hello"}
��{"I say":"hello"}
��{"I say":"hello"}

こんな感じでbufferが吐き出されて、30秒ほどまつと吸い取られます。

kinesisのモニタリングをみると

スクリーンショット 2020-02-18 13.10.56.png

s3をみると

スクリーンショット 2020-02-18 13.10.25.png

できてました。
次回はECSにのっけます。

1
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?