ログを収集するためのDockerログドライバーとしてfluentdを使用する

序文

dockerのデフォルトのログドライバーはjson-fileであり、各コンテナーは/var/lib/docker/containers/containerID/containerID-json.logをローカルで生成し、ログドライバーは拡張機能をサポートします。この章では主にFluentdドライバーCollectについて説明します。 dockerログ。

Fluentdは、統合ログレイヤーのオープンソースデータコレクターです。Kubernetes、Prometheus、Envoy、CoreDNS、containerdに続く6番目のCNCF卒業プロジェクトです。比較的軽量なエラスティックlogstashと比較されることがよくあります。柔軟性があり、開発は非常に簡単です。現在、コミュニティは非常に活発です。このブログを書いている時点では、githubのスターは8.8k、フォークは1kです。

前提

  1. docker
  2. 流暢な構成を理解する
  3. docker-compose

構成ファイルを準備する

docker-compose.yml

version: '3.7'

x-logging:
  &default-logging
  driver: fluentd
  options:
    fluentd-address: localhost:24224
    fluentd-async-connect: 'true'
    mode: non-blocking
    max-buffer-size: 4m
    tag: "kafeidou.{
   
   {.Name}}"  #配置容器的tag,以kafeidou.为前缀,容器名称为后缀,docker-compose会给容器添加副本后缀,如 fluentd_1

services:

  fluentd:
   image: fluent/fluentd:v1.3.2
   ports:
    - 24224:24224
   volumes:
    - ./:/fluentd/etc
    - /var/log/fluentd:/var/log/fluentd
   environment:
    - FLUENTD_CONF=fluentd.conf

  fluentd-worker:
   image: fluent/fluentd:v1.3.2
   depends_on:
     - fluentd
   logging: *default-logging

fluentd.conf

<source>
  @type forward
  port 24224
  bind 0.0.0.0
</source>

<match kafeidou.*>
  @type              file
  path               /var/log/fluentd/kafeidou/${tag[1]}
  append             true
  <format>
    @type            single_value
    message_key      log
  </format>
  <buffer tag,time>
    @type             file
    timekey           1d
    timekey_wait      10m
    flush_mode        interval
    flush_interval    5s
  </buffer>
</match>

<match **>
  @type              file
  path               /var/log/fluentd/${tag}
  append             true
  <format>
    @type            single_value
    message_key      log
  </format>
  <buffer tag,time>
    @type             file
    timekey           1d
    timekey_wait      10m
    flush_mode        interval
    flush_interval    5s
  </buffer>
</match>

fluentdはディレクトリ構成で書き込み権限を持っている必要があるため、ログディレクトリを保存して権限を与える準備ができている必要があり
ますディレクトリを作成します

mkdir /var/log/fluentd

ここで実験的なデモンストレーションのために許可を与え、777を直接許可します

chmod -R 777 /var/log/fluentd

docker-compose.ymlおよびfluentd.confのディレクトリでコマンドを実行します。docker
- composeup -d

[root@master log]# docker-compose up -d
WARNING: The Docker Engine you're using is running in swarm mode.

Compose does not use swarm mode to deploy services to multiple nodes in a swarm. All containers will be scheduled on the current node.

To deploy your application across the swarm, use `docker stack deploy`.

Creating network "log_default" with the default driver
Creating fluentd ... done
Creating fluentd-worker ... done

ログディレクトリを確認してください。対応するコンテナログファイルがあるはずです。

[root@master log]# ls /var/log/fluentd/kafeidou/
fluentd-worker.20200215.log  ${tag[1]}

これは私の最後の実験の結果です。$(tag [1])ディレクトリが作成されますが、これは奇妙なことであり、このディレクトリには2つのファイルがあります。

[root@master log]# ls /var/log/fluentd/kafeidou/\$\{tag\[1\]\}/
buffer.b59ea0804f0c1f8b6206cf76aacf52fb0.log  buffer.b59ea0804f0c1f8b6206cf76aacf52fb0.log.meta

誰かがこれを理解しているなら、一緒にコミュニケーションすることを歓迎します!

アーキテクチャの概要

dockerの元のログを使用してみませんか?

まず、元のDockerログのアーキテクチャを見てみましょう。

https://res.cloudinary.com/lyp/image/upload/v1581787531/hugo/blog.github.io/fluentd/docker-log-driver-local.jpg

Dockerは、ローカルの/var/lib/docker/containers/containerID/containerID-json.logパスにコンテナーごとにログファイルを生成して、Dockerログを保存します。

上の図には合計7つのコンテナがあります.7つのマイクロサービスと見なすと、ログを表示する必要があるときにすでに非常に不便です。最悪の場合、3台のマシンで各コンテナのログを表示する必要があります。

fluentdを使用した後の違いは何ですか?

fluentdを使用してDockerログを収集した後、コンテナーをまとめることができます。この記事でfluentd構成ファイルを構成した後のアーキテクチャーを見てみましょう。

https://res.cloudinary.com/lyp/image/upload/v1581787531/hugo/blog.github.io/fluentd/docker-log-driver-fluent-local.jpg

fluentdは、fluentdが配置されているマシンのローカルディレクトリに保存されるように構成されているため、他のマシンのコンテナログをfluentdが配置されているマシンのローカルディレクトリに収集する効果があります。

fluentdはコンテナログのみをローカルで収集できますか?

Fluentdは、収集したログを実際に再度転送できます。たとえば、elasticsearchなどのストレージソフトウェアに転送できます。

https://res.cloudinary.com/lyp/image/upload/v1581787532/hugo/blog.github.io/fluentd/docker-log-driver-art.jpg

流暢な柔軟性

fluentdでできることはたくさんあります。Fluentd自体は送信ノードおよび受信ノードとして使用できます。また、特定のログをフィルタリングしたり、特定のコンテンツでログをフォーマットしたり、一致する特定のログを再度送信したりすることもできます。これは簡単なことです。 Dockerコンテナログを収集する効果。

4つのコーヒー豆を起源とし、複製され、出所を宣言してください。

パブリックアカウントをフォロー-> [Four CoffeeBeans]最新のコンテンツを入手

4つのコーヒー豆

おすすめ

転載: blog.csdn.net/lypgcs/article/details/104338717