コンテンツにスキップ

Fluentd Dockerの使い方

Dockerを使用してfluentdでログを送信する

Dockerを使用して、Fluentdをインストールせずに分析サーバーにログを送信できます。hive_fluentd.shを実行すると、自動的にDockerイメージが作成され、実行されます。


始める前に

Dockerを使用できる環境を準備し、自動化スクリプトをダウンロードしてください。

Docker環境の設定

Dockerを使用するには、docker enginedocker-composeをインストールする必要があります。詳細については、こちらを参照してください。

自動化スクリプトのダウンロード

ファイルをダウンロードして抽出してください。

wget https://developers.withhive.com/wp-content/uploads/2024/08/hive_fluentd_docker.tar  # Download the file
tar -xvf hive_fluentd_docker.tar # Extract the file


圧縮ファイルを抽出した後、hive.confという設定ファイルとhive_fluentd.shというスクリプトファイルがhive_fluentd_dockerフォルダーに見つかります。

hive.confの設定

言語特有のライブラリ (Java, Python など) を使用するための設定特定のログファイルを送信するための設定 があります。

言語特有のライブラリを使用するための設定

ビルド環境(sandboxまたはlive)のみを設定してください。以下の例を参照してください。

### Hive.conf ###
# Only use either sandbox or live for the build environment. logs are sent to the Hive server corresponding to each environment.
# Do not modify any other text
build:sandbox

### Don't delete this line ####


ライブラリを通じてログを送信する際、Dockerはポート24224を通じてログサーバーにログを送信します。

特定のログファイルを送信するための設定

ファイルパス(絶対パス)とtagを入力してください。ログフォルダが複数ある場合は、pathtagの両方を追加する必要があります。

以下は、ログフォルダーが1つの場合の例です。

### hive.conf ###

build:sandbox # Only use either sandbox or live for the build environment. logs are sent to the Hive server corresponding to each environment.

# Path: folder path where the file to be sent is located (absolute path).
# Text lines added to all files in that path after fluentd is run are sent.
path:/home/user1/docker/shell_test/game

# Tag: tag name to be applied to the file, ha2union.game.log category name
tag:ha2union.game.log.test

### Don't delete this line ####


複数のログフォルダーがある場合の例は次のとおりです。

### hive.conf ###

build:sandbox # Only use either sandbox or live for the build environment. logs are sent to the Hive server corresponding to each environment.

# Path: folder path where the file to be sent is located (absolute path).
# Text lines added to all files in that path after fluentd is run are sent.
path:/home/user1/docker/shell_test/game

# Tag: tag name to be applied to the file, ha2union.game.log category name
tag:ha2union.game.log.test

# To add multiple file paths, follow the method below.
# Path and tag must be added together; otherwise, an error will occur if either is empty.
path:/home/user1/docker/shell_test/game2
tag:ha2union.game.log.test2

path:/home/user1/docker/shell_test/game3
tag:ha2union.game.log.test3

### Don't delete this line ####

設定ファイルの上部と下部のテキストを変更しないでください。

ビルド

これは、ログが送信される分析サーバーのタイプを指します。sandboxまたはliveのいずれかで、分析サンドボックスサーバーまたは分析ライブサーバーを示します。

パス

これは、送信されるログファイルが存在するフォルダパス(絶対パス)です。ログファイルはJSON形式でなければなりません。hive_fluentd.shスクリプトを実行してDockerが正常に起動した後、このパス内のすべてのファイルに追加された行は、その時点からサーバーに送信されます。これは、フォルダ内に既存のログファイルがあっても、Dockerが動作を開始すると、新たに追加された行からログを読み取り送信することを意味します。その後、ログを読み取った位置を記憶するため、Dockerが再起動されても、完了した送信の次の行からログを送信します。

タグ

ログに適用するタグパスに入力してください。タグha2union.game.name_to_be_createdの形式で作成されている必要があります。

自動化スクリプトの実行と確認

設定を完了したら、hive_fluentd.shを実行します。

bash hive_fluentd.sh

スクリプトを実行すると、Dockerイメージの作成からDockerの実行およびログの送信まで自動的にすべてが行われます。実行エラーが発生した場合は、設定が正しく行われているか再度確認してください。以下のメッセージが表示される場合は、成功です。pull access deniedに関連するメッセージは無視してください。

[+] Running 1/1
! fluentd Warning pull access denied for com2usplatform/hive_analytics_fluentd_docker, repository does not exist or may require 'docker login': deni...                  2.8s
[+] Building 2.1s (8/8) FINISHED                                                                                                                                docker:default
=> [fluentd internal] load build definition from Dockerfile                                                                                                              0.0s
=> => transferring dockerfile: 145B                                                                                                                                      0.0s
=> [fluentd internal] load metadata for docker.io/fluent/fluentd:v1.11.4-debian-1.0                                                                                      1.9s
=> [fluentd auth] fluent/fluentd:pull token for registry-1.docker.io                                                                                                     0.0s
=> [fluentd internal] load .dockerignore                                                                                                                                 0.0s
=> => transferring context: 2B                                                                                                                                           0.0s
=> [fluentd 1/2] FROM docker.io/fluent/fluentd:v1.11.4-debian-1.0@sha256:b70acf966c6117751411bb638bdaa5365cb756ad13888cc2ccc0ba479f13aee7                                0.0s
=> CACHED [fluentd 2/2] RUN ["gem", "install", "fluent-plugin-forest"]                                                                                                   0.0s
=> [fluentd] exporting to image                                                                                                                                          0.0s
=> => exporting layers                                                                                                                                                   0.0s
=> => writing image sha256:857dc72492380aeb31bbee36b701f13ae5ae1a933b46945662657246b28964a5                                                                              0.0s
=> => naming to docker.io/com2usplatform/hive_analytics_fluentd_docker:sandbox                                                                                           0.0s
=> [fluentd] resolving provenance for metadata file                                                                                                                      0.0s
[+] Running 2/2
 Network shell_test_default                       Created                                                                                                               0.1s
 Container hive_analytics_fluentd_docker_sandbox  Started                                                                                                               0.5s


実行が正常に完了すると、ログの送信が開始されます。

注意

ここでは、コマンド、ログの確認方法、ファイル構造、およびforestログの確認方法を見つけることができます。

コマンド

以下はコマンドのコレクションです。

再起動

hive.confファイルに基づいて、fluentd.confおよびdocker-composeファイルを再生成し、コンテナを再起動します。再起動しても、以前に作成されたフォルダーやposファイルが存在する場合、以前に送信されたログの後の部分から送信を開始します。

bash hive_fluentd.sh restart

一時停止

Dockerイメージを一時停止します。

bash hive_fluentd.sh stop

一時停止した画像を再開する

一時停止したDockerイメージを再開します。

bash hive_fluentd.sh start

Dockerコンテナを削除する

コンテナを削除します。

bash hive_fluentd.sh down

ログの確認方法

以下のコマンドを使用してログを確認してください。

bash hive_fluentd.sh logs


コマンドが正常に実行されたときのログの例は次のとおりです:

hive_analytics_fluentd_docker_sandbox  | 2024-08-19 07:19:31 +0000 [info]: parsing config file is succeeded path="/fluentd/etc/fluent.conf"
hive_analytics_fluentd_docker_sandbox  | 2024-08-19 07:19:31 +0000 [info]: gem 'fluent-plugin-forest' version '0.3.3'
hive_analytics_fluentd_docker_sandbox  | 2024-08-19 07:19:31 +0000 [info]: gem 'fluentd' version '1.11.4'
hive_analytics_fluentd_docker_sandbox  | 2024-08-19 07:19:31 +0000 [info]: adding forwarding server 'sandbox-analytics-hivelog' host="sandbox-analytics-hivelog.withhive.com" port=24224 weight=60 plugin_id="object:3fcfa2188060"
hive_analytics_fluentd_docker_sandbox  | 2024-08-19 07:19:31 +0000 [info]: using configuration file: 
hive\_analytics\_fluentd\_docker\_sandbox | 
hive\_analytics\_fluentd\_docker\_sandbox | log\_level info
hive\_analytics\_fluentd\_docker\_sandbox | 
hive\_analytics\_fluentd\_docker\_sandbox | 
hive\_analytics\_fluentd\_docker\_sandbox | @type forward
hive\_analytics\_fluentd\_docker\_sandbox | skip\_invalid\_event true
hive\_analytics\_fluentd\_docker\_sandbox | chunk\_size\_limit 10m
hive\_analytics\_fluentd\_docker\_sandbox | chunk\_size\_warn\_limit 9m
hive\_analytics\_fluentd\_docker\_sandbox | port 24224
hive\_analytics\_fluentd\_docker\_sandbox | bind "0.0.0.0"
hive\_analytics\_fluentd\_docker\_sandbox | source\_address\_key "fluentd\_sender\_ip"
hive\_analytics\_fluentd\_docker\_sandbox | 
hive\_analytics\_fluentd\_docker\_sandbox | 
hive\_analytics\_fluentd\_docker\_sandbox | @type copy
hive\_analytics\_fluentd\_docker\_sandbox | 
hive\_analytics\_fluentd\_docker\_sandbox | @type "forest"
hive\_analytics\_fluentd\_docker\_sandbox | subtype "file"
hive\_analytics\_fluentd\_docker\_sandbox | 
hive\_analytics\_fluentd\_docker\_sandbox | time\_slice\_format %Y%m%d%H
hive\_analytics\_fluentd\_docker\_sandbox | time\_slice\_wait 10s
hive\_analytics\_fluentd\_docker\_sandbox | path /fluentd/forest/${tag}/${tag}
hive\_analytics\_fluentd\_docker\_sandbox | compress gz
hive\_analytics\_fluentd\_docker\_sandbox | format json
hive\_analytics\_fluentd\_docker\_sandbox | 
hive\_analytics\_fluentd\_docker\_sandbox | 
hive\_analytics\_fluentd\_docker\_sandbox | 
hive\_analytics\_fluentd\_docker\_sandbox | @type "forward"
hive\_analytics\_fluentd\_docker\_sandbox | 
hive\_analytics\_fluentd\_docker\_sandbox | @type "file"
hive\_analytics\_fluentd\_docker\_sandbox | path "/fluentd/buffer/foward\_buffer/"
hive\_analytics\_fluentd\_docker\_sandbox | chunk\_limit\_size 10m
hive\_analytics\_fluentd\_docker\_sandbox | flush\_interval 3s
hive\_analytics\_fluentd\_docker\_sandbox | total\_limit\_size 16m
hive\_analytics\_fluentd\_docker\_sandbox | flush\_thread\_count 16
hive\_analytics\_fluentd\_docker\_sandbox | queued\_chunks\_limit\_size 16
hive\_analytics\_fluentd\_docker\_sandbox | 
hive\_analytics\_fluentd\_docker\_sandbox | 
hive\_analytics\_fluentd\_docker\_sandbox | name "sandbox-analytics-hivelog"
hive\_analytics\_fluentd\_docker\_sandbox | host "sandbox-analytics-hivelog.withhive.com"
hive\_analytics\_fluentd\_docker\_sandbox | port 24224
hive\_analytics\_fluentd\_docker\_sandbox | 
hive\_analytics\_fluentd\_docker\_sandbox | 
hive\_analytics\_fluentd\_docker\_sandbox | @type "secondary\_file"
hive\_analytics\_fluentd\_docker\_sandbox | directory "/fluentd/failed/log/forward-failed/send-failed-file"
hive\_analytics\_fluentd\_docker\_sandbox | basename "dump.${tag}.${chunk\_id}"
hive\_analytics\_fluentd\_docker\_sandbox | 
hive\_analytics\_fluentd\_docker\_sandbox | 
hive\_analytics\_fluentd\_docker\_sandbox | 
hive\_analytics\_fluentd\_docker\_sandbox | 
hive_analytics_fluentd_docker_sandbox  | 2024-08-19 07:19:31 +0000 [info]: starting fluentd-1.11.4 pid=7 ruby="2.6.6"
hive_analytics_fluentd_docker_sandbox  | 2024-08-19 07:19:31 +0000 [info]: spawn command to main:  cmdline=["/usr/local/bin/ruby", "-Eascii-8bit:ascii-8bit", "/usr/local/bundle/bin/fluentd", "-c", "/fluentd/etc/fluent.conf", "-p", "/fluentd/plugins", "--under-supervisor"]
hive_analytics_fluentd_docker_sandbox  | 2024-08-19 07:19:31 +0000 [info]: adding match pattern="ha2union.**" type="copy"
hive_analytics_fluentd_docker_sandbox  | 2024-08-19 07:19:31 +0000 [info]: #0 adding forwarding server 'sandbox-analytics-hivelog' host="sandbox-analytics-hivelog.withhive.com" port=24224 weight=60 plugin_id="object:3f8185f73f64"
hive_analytics_fluentd_docker_sandbox  | 2024-08-19 07:19:31 +0000 [info]: adding source type="forward"
hive_analytics_fluentd_docker_sandbox  | 2024-08-19 07:19:31 +0000 [info]: #0 starting fluentd worker pid=17 ppid=7 worker=0
hive_analytics_fluentd_docker_sandbox  | 2024-08-19 07:19:31 +0000 [info]: #0 listening port port=24224 bind="0.0.0.0"
hive_analytics_fluentd_docker_sandbox  | 2024-08-19 07:19:31 +0000 [info]: #0 fluentd worker is now running worker=0

ファイル構造

スクリプトが初めて実行されると、以下に示すように必要な設定ファイルとフォルダーが自動的に作成されます。設定ファイルとフォルダーを恣意的に削除しない限り、Dockerコンテナーをシャットダウンまたは削除しても、それらは保持されます。

---- hive_fluentd_docker  # The folder created when the downloaded file is decompressed
├-- hive.conf  # Environment configuration file
├-- hive_fluentd.sh  # Automation script
├-- docker-compose.yaml  # Configuration file for docker image creation and volume mount
├-- buffer
│  ├-- foward_buffer  # Folder where buffer files are temporarily stored
│  │  ├-- {tag1}  # Temporarily stores files to be sent in folders created based on tag names as buffer files
│  │  ├-- {tag2}.....
│  ├-- pos   # Folder where files that remember the location of read files are stored (data loss or duplicate transmission may occur if this folder is deleted, tampered with, etc.)
│  │  ├-- {tag1}  # Stores pos files in folders created based on tag names.
│  │  ├-- {tag2}.....
├-- conf
│  └-- fluentd.conf  # Fluentd configuration file
├-- failed  # Stores logs that failed to be sent as files
└-- forest  # Stores and compresses the successfully sent files on an hourly basis.

のログを確認中

ログファイルをforestフォルダーに送信する際に使用されるtag名でフォルダーが作成されます。それは一定期間一時ファイルとして蓄積され、最終的にgzipファイルとして保存されます。フォルダー内にファイルが作成されているか、ファイルサイズが増加しているかを確認することで、ログが正しく送信されていることを確認できます。

drwxr-xr-x 2 root     root     4096 Aug 23 13:00 ha2union.game.sample.login/
-rw-r--r-- 1 root     root     4515 Aug 23 13:00 ha2union.game.sample.login.2024082303_0.log.gz
-rw-r--r-- 1 root     root     4515 Aug 23 12:00 ha2union.game.sample.login.2024082302_0.log.gz


圧縮ファイルのログを確認するには、次のコマンドを使用してください。

zgrep "text to search for" filename.gz
# Example
zgrep "category" ha2union.game.sample.login.2024080104_0.log.gz