本記事は「TUNA-JP Advent Calendar 2021」8日目のエントリとして、
Tanzu OSS の1つである Fluent Bit を対象に、基本的な構築手順や他ソフトウェアとの連携についてご紹介します。
#はじめに
はじめまして、@yama-s です。8日目を担当します!
本日は、TCE (Tanzu Community Edition) を利用し、ログ関連のコンポーネント構築を行ってみた記録をご紹介します。
ベーシックな内容が中心となりますが、何か少しでも参考にしていただける箇所があれば嬉しいです。
- 目次
- はじめに
- Fluent Bit とは?
- 構築
- 前提条件
- Fluent Bit 構築
- Splunk 構築
- 連携設定
- 結果
- さいごに
#Fluent Bit とは?
Fluent Bit は、ログプロセッサおよびフォワーダー機能を提供するオープンソースのソフトウェアです。
高速かつ軽量なことが特徴で、さまざまなソースからメトリックやログなどのデータを収集し、それらを統一して複数の宛先に送信することが可能です。
[参考] What is Fluent Bit ?
https://docs.fluentbit.io/manual/about/what-is-fluent-bit
#構築
それではさっそく構築に入っていきます!
まずは前提条件の確認から。
##前提条件
3つの前提条件を満たすように環境を準備します。
[参考] Implement Log Forwarding with Fluent Bit
-
1つ目:Bootstrap マシンに次のものがインストールされていること
- Tanzu CLI, Tanzu CLI plugins, and kubectl, as described in Install the Tanzu CLI and Other Tools.
- Carvel tools, as described in Install the Carvel Tools.(ytt, kbld, kapp, imgpkg)
- yq をインストール(v4.5 or later)
-
2つ目:management cluster および workload cluster がサポート対象のプラットフォームで稼働していること
→ 今回は vSphere 7.0 環境で実施。 -
3つ目:同一環境内に他のログ関連コンポーネントが展開されている場合には、注意点があるため Fluent Bit のドキュメントを確認すること
→ 今回は該当しないので省略。
##Fluent Bit 構築
前提条件が確認できたら、事前準備を進めていきましょう。
###事前準備
対象のコンテキストに切り替えます。
tanzu cluster kubeconfig get CLUSTER_NAME --admin
kubectl config use-context CLUSTER_NAME-admin@CLUSTER_NAME
###デプロイ前の確認
利用可能なリポジトリを表示し、tce-repo
がない場合には追加します。
続いて利用可能なパッケージおよび、Fluent Bit に関する情報を表示します。
# 利用可能なリポジトリを表示、"tce-repo" を追加
tanzu package repository list -A
tanzu package repository add tce-repo --url projects.registry.vmware.com/tce/main:0.9.1 -n tanzu-package-repo-global
# 利用可能なパッケージ、Fluent Bit に関する情報を表示
tanzu package available list -A
tanzu package available list fluent-bit.community.tanzu.vmware.com -A
※ ここではリポジトリ追加先として、tanzu-package-repo-global
namespace を指定しています。
# 実行結果
tanzu package available list fluent-bit.community.tanzu.vmware.com -A
- Retrieving package versions for fluent-bit.community.tanzu.vmware.com...
NAME VERSION RELEASED-AT NAMESPACE
fluent-bit.community.tanzu.vmware.com 1.7.5 2021-05-13T18:00:00Z tanzu-package-repo-global
###設定ファイルの準備
サンプルをベースに、Fluent Bit の設定ファイルを作成します。
サンプルは以下を参考にしました。
・Fluent Bit package configuration file for Tanzu Kubernetes Grid v1.4
対象ファイル
・fluent-bit-data-values.yaml
namespace: "tanzu-system-logging"
fluent_bit:
config:
#! https://docs.fluentbit.io/manual/administration/configuring-fluent-bit/variables
service: |
[Service]
Flush 1
Log_Level info
Daemon off
Parsers_File parsers.conf
HTTP_Server On
HTTP_Listen 0.0.0.0
HTTP_Port 2020
outputs: |
# # References
# ## ElasticSearch
# [OUTPUT]
(…中略…)
inputs: |
[INPUT]
Name tail
Tag kube.*
Path /var/log/containers/*.log
Parser cri
DB /var/log/flb_kube.db
Mem_Buf_Limit 5MB
Skip_Long_Lines On
Refresh_Interval 10
[INPUT]
Name systemd
Tag kube_systemd.*
Path /var/log/journal
DB /var/log/flb_kube_systemd.db
Systemd_Filter _SYSTEMD_UNIT=kubelet.service
Systemd_Filter _SYSTEMD_UNIT=containerd.service
Read_From_Tail On
Strip_Underscores On
(…中略…)
filters: |
[FILTER]
Name kubernetes
Match kube.*
Kube_URL https://kubernetes.default.svc:443
Kube_CA_File /var/run/secrets/kubernetes.io/serviceaccount/ca.crt
Kube_Token_File /var/run/secrets/kubernetes.io/serviceaccount/token
Kube_Tag_Prefix kube.var.log.containers.
Merge_Log On
Merge_Log_Key log_processed
K8S-Logging.Parser On
K8S-Logging.Exclude On
(…中略…)
#! optional configuration for the daemonset
daemonset:
resources: { }
#! limits:
#! cpu: 100m
#! memory: 128Mi
#! requests:
#! cpu: 100m
#! memory: 128Mi
podAnnotations: { }
podLabels: { }
サンプルファイルを配置し、[Output] 項目の Splunk フィールドをアンコメントします。
# Splunk
[OUTPUT]
Name splunk
Match *
Host $SPLUNK_HOST
Port $SPLUNK_PORT
Splunk_Token $SPLUNK_TOKEN
TLS On
TLS.Verify Off
その他、必要な設定をアンコメント後、ファイル中のすべてのコメント行を削除します。(Optional)
yq -i eval '... comments=""' fluent-bit-data-values.yaml
###デプロイ
ターゲットのクラスタ上に対象の namespace を作成(もしくは既存の namespace を指定)し、以下実行します。
tanzu package install fluent-bit \
--package-name fluent-bit.tanzu.vmware.com \
--version AVAILABLE-PACKAGE-VERSION \
--values-file fluent-bit-data-values.yaml \
--namespace TARGET-NAMESPACE \
--create-namespace
TARGET-NAMESPACE
には、パッケージのインストール先の namespace を入力します。
(例:my-packages)
AVAILABLE-PACKAGE-VERSION
には、事前に確認したパッケージバージョンを入力します。
(例:1.7.5)
# コマンド実行例
tanzu package install fluent-bit --package-name fluent-bit.community.tanzu.vmware.com --version 1.7.5 --values-file fluent-bit-data-values.yaml --namespace my-packages
/ Installing package 'fluent-bit.community.tanzu.vmware.com'
| Getting namespace 'my-packages'
| Getting package metadata for 'fluent-bit.community.tanzu.vmware.com'
| Creating service account 'fluent-bit-my-packages-sa'
| Creating cluster admin role 'fluent-bit-my-packages-cluster-role'
| Creating cluster role binding 'fluent-bit-my-packages-cluster-rolebinding'
| Creating secret 'fluent-bit-my-packages-values'
- Creating package resource
- Package install status: Reconciling
Added installed package 'fluent-bit' in namespace 'my-packages'
###デプロイ後の確認
デプロイ後、以下3点を確認をします。
-
fluent-bit package がインストールされていること
# コマンド実行例 tanzu package installed list -A / Retrieving installed packages... NAME PACKAGE-NAME PACKAGE-VERSION STATUS NAMESPACE fluent-bit fluent-bit.community.tanzu.vmware.com 1.7.5 Reconcile succeeded my-packages antrea antrea.tanzu.vmware.com Reconcile succeeded tkg-system [...]
-
fluent-bit app が 指定した namespace に存在すること
# コマンド実行例 kubectl get apps -A NAMESPACE NAME DESCRIPTION SINCE-DEPLOY AGE my-packages fluent-bit Reconcile succeeded 28s 10m tkg-system antrea Reconcile succeeded 3m52s 21h [...]
※ここで、もしステータスが
Reconcile succeeded
ではない場合には、以下で yaml ファイルを出力して内容確認kubectl get app fluent-bit --namespace AVAILABLE-PACKAGE-NAMESPACE -o yaml
-
クラスタ内で新しく作成されたサービスが実行されていること
# コマンド実行例 kubectl get pod -A NAMESPACE NAME READY STATUS RESTARTS AGE [...] tanzu-system-logging fluent-bit-2clmt 1/1 Running 0 12m tanzu-system-logging fluent-bit-btzjp 1/1 Running 0 12m [...]
無事 Fluent Bit の Pod が稼働していることを確認できました!
##Splunk 構築
お次は Splunk です。同一の vSphere 環境上に2台目の CentOS8.3 を用意しました。こちらに構築していきます。
ちなみに現在の用途は以下です。
・1台目の CentOS8.3 … Bootstrap として使用中
・2台目の CentOS8.3 … Splunk 構築用として用意
###媒体入手
こちらから Splunk のインストール媒体を入手します。
https://www.splunk.com/ja_jp
・まずは、Splunk アカウントを登録しログイン
https://www.splunk.com/ja_jp/download/splunk-enterprise.html
・「インストールパッケージを選択」より、Linux 版の .tgz ファイルをダウンロード
https://download.splunk.com/products/splunk/releases/8.2.3/linux/splunk-8.2.3-cd0848707637-Linux-x86_64.tgz?_ga=2.217990358.1384987425.1638196020-1013376100.1637755103
対象ファイル
・splunk-8.2.3-cd0848707637-Linux-x86_64.tgz
###インストール
以下ドキュメントを参照しながらインストールします。
・[参考] インストールマニュアル
https://docs.splunk.com/Documentation/Splunk/latest/Installation/Whatsinthismanual?_ga=2.214724567.1384987425.1638196020-1013376100.1637755103
・[参考] クイック リファレンスガイド
https://www.splunk.com/pdfs/solution-guides/splunk-quick-reference-guide.pdf
■システム要件の確認
・Supported Operating Systems
https://docs.splunk.com/Documentation/Splunk/8.2.3/Installation/SystemRequirements
今回はカーネルバージョン 4.18.0 のため該当箇所を探すと、まさかの「X」・・・?と思いきや、
「X」は利用可能という意味でした。よかったです。
■インストール
以下を参照し、Splunk をインストールします。
・Install on Linux
https://docs.splunk.com/Documentation/Splunk/8.2.3/Installation/InstallonLinux
パッケージを CentOS83-02 上に配置し、tgzファイルを展開
tar xvzf splunk_package_name.tgz
■起動
以下を参照し、Splunk を起動します。
・Start Splunk Enterprise on Linux
https://docs.splunk.com/Documentation/Splunk/8.2.3/SearchTutorial/StartSplunk
展開後に bin
ディレクトリへ移動し、./splunk start
を実行
cd <Splunk_Enterprise_Installation_Directory>/bin
./splunk start
初回起動時は以下を行います。
・使用許諾に承諾
・ユーザ名入力(デフォルト:admin )
・パスワード設定
###インストール後の確認
http://SplunkのFQDN:8000
にアクセスします。
##連携設定
###Splunk の設定
Splunk 側では、以下を設定します。
ここでは例として、journal
と kube
を対象にしています。
-
インデックス作成
-
トークン生成
-
ポート番号確認
###Fluent Bit の設定
Fluent Bit 側では、以下を設定します。
- 設定ファイルに必要情報を入力し、設定反映
# Splunk
[OUTPUT]
Name splunk
Match *
Host $SPLUNK_HOST
Port $SPLUNK_PORT
Splunk_Token $SPLUNK_TOKEN
TLS On
TLS.Verify Off
Match
項目 … 前項で作成したインデックスを指定 ※表記例は「journal.*」や「kube.*」
$SPLUNK_HOST
… splunk のIPアドレス/FQDN を指定
$SPLUNK_PORT
… 前項で確認したポート番号(8088)を指定
$SPLUNK_TOKEN
… 前項で生成したトークンを指定
※今回は構築順序を「Fluent Bit → Splunk」で行いましたが、Fluent Bit の設定ファイルに Splunk の情報を予め記載できた方がスムーズなため、「Splunk → Fluent Bit」の順番が正しかったなと思いました。
#結果
連携結果を見ていきましょう。
###サーチ実行
Splunk GUI より、対象ログを検索します。
新規サーチより、index="kube"
にて結果が確認できました!
#さいごに
今回、実際に手を動かして構築してみることで、自身の理解度を無の状態から少し深めることができました。
Advent Calendar を通じて記事化の機会をくださった @hirosat さん、TUNA-JP のみなさん、ありがとうございました!
おうちクラウドを活用して、また別製品にもトライしたいです。
だんだんと寒くなってきましたが…まだまだ前半戦ですね。明日もお楽しみに。
みなさま良い12月を!
[参考] 主な参照ドキュメント
-
Getting Started with Tanzu Community Edition
https://tanzucommunityedition.io/docs/latest/getting-started/ -
Fluent Bit
https://tanzucommunityedition.io/docs/latest/package-readme-fluent-bit-1.7.5/ -
Send logs to Splunk HTTP Event Collector
https://docs.fluentbit.io/manual/pipeline/outputs/splunk