零からの

ゆるーく綴るブログ

DockerログをFluentdに流す

Fluentd ロギング・ドライバを使ってDockerのアプリログをFluentdに流せるので試してみた。

今回はnginxのログを収集する。

環境

fluent.confは以下のようにする。

<source>
  @type forward
</source>

<match docker.**>
  @type stdout
</match>

docker-compose.ymlは以下のようにする。

Dockerfileは前回のエントリーと同じであるため省略。

version: '3'
services:
  fluentd:
    build:
      context: .
      dockerfile: docker/fluentd/Dockerfile
    environment:
      - TZ=Asia/Tokyo
    ports:
      - 24224:24224
    volumes:
      - ./docker/fluentd/etc:/fluentd/etc

確認

Fluentdを起動する。

stdoutにしているためバックグラウンド起動としていない。

docker-compose up

次にnginxもDockerで起動する。

ターミナルはFluentdとは別で起動する。

docker run -it -p 8080:80 \
       --log-driver=fluentd \
       --log-opt fluentd-address=localhost:24224 \
       --log-opt tag=docker.{{.Name}} \
       nginx:latest

起動したら、http://localhost:8080 にアクセスする。

さきほど起動したFluentd側のログが以下のようになれば、nginxのログが流れていることが確認できる。

fluentd_1  | 2020-07-26 05:52:31.000000000 +0000 docker.loving_lamarr: {"log":"/docker-entrypoint.sh: /docker-entrypoint.d/ is not empty, will attempt to perform configuration\r","container_id":"19df98bb6889da6762b0643e9c827904334500da6b1cc6fc02627189cf0cf775","container_name":"/loving_lamarr","source":"stdout"}
fluentd_1  | 2020-07-26 05:52:31.000000000 +0000 docker.loving_lamarr: {"container_id":"19df98bb6889da6762b0643e9c827904334500da6b1cc6fc02627189cf0cf775","container_name":"/loving_lamarr","source":"stdout","log":"/docker-entrypoint.sh: Looking for shell scripts in /docker-entrypoint.d/\r"}
fluentd_1  | 2020-07-26 05:52:31.000000000 +0000 docker.loving_lamarr: {"container_id":"19df98bb6889da6762b0643e9c827904334500da6b1cc6fc02627189cf0cf775","container_name":"/loving_lamarr","source":"stdout","log":"/docker-entrypoint.sh: Launching /docker-entrypoint.d/10-listen-on-ipv6-by-default.sh\r"}
fluentd_1  | 2020-07-26 05:52:31.000000000 +0000 docker.loving_lamarr: {"container_id":"19df98bb6889da6762b0643e9c827904334500da6b1cc6fc02627189cf0cf775","container_name":"/loving_lamarr","source":"stdout","log":"10-listen-on-ipv6-by-default.sh: Getting the checksum of /etc/nginx/conf.d/default.conf\r"}
fluentd_1  | 2020-07-26 05:52:31.000000000 +0000 docker.loving_lamarr: {"source":"stdout","log":"10-listen-on-ipv6-by-default.sh: Enabled listen on IPv6 in /etc/nginx/conf.d/default.conf\r","container_id":"19df98bb6889da6762b0643e9c827904334500da6b1cc6fc02627189cf0cf775","container_name":"/loving_lamarr"}
fluentd_1  | 2020-07-26 05:52:31.000000000 +0000 docker.loving_lamarr: {"container_id":"19df98bb6889da6762b0643e9c827904334500da6b1cc6fc02627189cf0cf775","container_name":"/loving_lamarr","source":"stdout","log":"/docker-entrypoint.sh: Launching /docker-entrypoint.d/20-envsubst-on-templates.sh\r"}
fluentd_1  | 2020-07-26 05:52:31.000000000 +0000 docker.loving_lamarr: {"container_id":"19df98bb6889da6762b0643e9c827904334500da6b1cc6fc02627189cf0cf775","container_name":"/loving_lamarr","source":"stdout","log":"/docker-entrypoint.sh: Configuration complete; ready for start up\r"}
fluentd_1  | 2020-07-26 05:53:24.000000000 +0000 docker.loving_lamarr: {"container_name":"/loving_lamarr","source":"stdout","log":"172.17.0.1 - - [26/Jul/2020:05:53:24 +0000] \"GET / HTTP/1.1\" 304 0 \"-\" \"Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_6) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/84.0.4147.89 Safari/537.36\" \"-\"\r","container_id":"19df98bb6889da6762b0643e9c827904334500da6b1cc6fc02627189cf0cf775"}
fluentd_1  | 2020-07-26 05:53:27.000000000 +0000 docker.loving_lamarr: {"log":"172.17.0.1 - - [26/Jul/2020:05:53:27 +0000] \"GET / HTTP/1.1\" 304 0 \"-\" \"Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_6) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/84.0.4147.89 Safari/537.36\" \"-\"\r","container_id":"19df98bb6889da6762b0643e9c827904334500da6b1cc6fc02627189cf0cf775","container_name":"/loving_lamarr","source":"stdout"}
fluentd_1  | 2020-07-26 05:53:28.000000000 +0000 docker.loving_lamarr: {"source":"stdout","log":"172.17.0.1 - - [26/Jul/2020:05:53:28 +0000] \"GET / HTTP/1.1\" 304 0 \"-\" \"Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_6) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/84.0.4147.89 Safari/537.36\" \"-\"\r","container_id":"19df98bb6889da6762b0643e9c827904334500da6b1cc6fc02627189cf0cf775","container_name":"/loving_lamarr"}
fluentd_1  | 2020-07-26 05:53:29.000000000 +0000 docker.loving_lamarr: {"log":"172.17.0.1 - - [26/Jul/2020:05:53:29 +0000] \"GET / HTTP/1.1\" 304 0 \"-\" \"Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_6) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/84.0.4147.89 Safari/537.36\" \"-\"\r","container_id":"19df98bb6889da6762b0643e9c827904334500da6b1cc6fc02627189cf0cf775","container_name":"/loving_lamarr","source":"stdout"}
fluentd_1  | 2020-07-26 05:53:30.000000000 +0000 docker.loving_lamarr: {"log":"172.17.0.1 - - [26/Jul/2020:05:53:30 +0000] \"GET / HTTP/1.1\" 304 0 \"-\" \"Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_6) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/84.0.4147.89 Safari/537.36\" \"-\"\r","container_id":"19df98bb6889da6762b0643e9c827904334500da6b1cc6fc02627189cf0cf775","container_name":"/loving_lamarr","source":"stdout"}

最後に

Fluentdのportを公開することでnginxからFluentdへログを転送することが確認できた。

ただ、今回の設定だといろいろなログが混ざっているので、S3へのログアーカイブなどを行うにはfilterなどひと手間加える必要がありそう。

設定周りも今後調査していく。