序文
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です。
前提
- docker
- 流暢な構成を理解する
- 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ログのアーキテクチャを見てみましょう。
Dockerは、ローカルの/var/lib/docker/containers/containerID/containerID-json.logパスにコンテナーごとにログファイルを生成して、Dockerログを保存します。
上の図には合計7つのコンテナがあります.7つのマイクロサービスと見なすと、ログを表示する必要があるときにすでに非常に不便です。最悪の場合、3台のマシンで各コンテナのログを表示する必要があります。
fluentdを使用した後の違いは何ですか?
fluentdを使用してDockerログを収集した後、コンテナーをまとめることができます。この記事でfluentd構成ファイルを構成した後のアーキテクチャーを見てみましょう。
fluentdは、fluentdが配置されているマシンのローカルディレクトリに保存されるように構成されているため、他のマシンのコンテナログをfluentdが配置されているマシンのローカルディレクトリに収集する効果があります。
fluentdはコンテナログのみをローカルで収集できますか?
Fluentdは、収集したログを実際に再度転送できます。たとえば、elasticsearchなどのストレージソフトウェアに転送できます。
流暢な柔軟性
fluentdでできることはたくさんあります。Fluentd自体は送信ノードおよび受信ノードとして使用できます。また、特定のログをフィルタリングしたり、特定のコンテンツでログをフォーマットしたり、一致する特定のログを再度送信したりすることもできます。これは簡単なことです。 Dockerコンテナログを収集する効果。
4つのコーヒー豆を起源とし、複製され、出所を宣言してください。
パブリックアカウントをフォロー-> [Four CoffeeBeans]最新のコンテンツを入手