はじめに
IBM Cloudでは、今までログ監視ツールとしてLog Analysis、監査ログツールとしてActivity Trackerサービスを多くの皆様にご利用頂いてまいりました。この度、これらのサービスの後継として、新サービスIBM Logsを2024年6月よりEU地域で提供を開始しました。2024年8月には日本国内のリージョンでもリリース予定となっております。
今回は、これらIBM Cloud Logsにログ情報を転送するIBM Logs Routingの設定とLinux Agentの設定についてご紹介したいと思います。
本稿で利用する環境
- IBM Cloud Logs:ログ送出ターゲット先となるログ管理ツール
- IBM Cloud Logs Routing:プラットフォーム及びエージェントログを転送するルーティングサービス
- IBM Cloud Logs Agent :ターゲットにログを送出するLinux用エージェント
- RHEL サーバ:IBM Cloud Logs Agent をインストールするLinuxサーバ
IBM Cloud Logsのデプロイメント
Qiita記事「IBM Cloud Logsを使ってみた」を参考に以下関連するインスタンスを作成します。
- IBM Cloud Logs
- IBM Cloud Object Storage(ログ保存用)
IBM Cloud Logs Routingの設定
ログソースからのログを転送するRouting サービスをデプロイメントします。Routingサービスは、リージョン毎にアカウント個別のサービスとなり、各リージョンは独立しており、データを共有しません。
IBM Logs Routing用アカウントは以下2つのAPIを提供します。
- 管理用API:IBM Cloud Routingの管理を行うエンドポイントとなります。パブリックエンドポイントとIBM Cloud プライベートネットワーク内からアクセスできるプライベートエンドポイントを提供します。
- 受信用(取込み用)API:ログ情報を受信して、ターゲットに送信します。受信用のAPIに関しては、プライベートエンドポイントのみのサポートの為、パブリックなインターネット環境からの受信は不可となります。以下2つのタイプエンドポイントを提供します。
Logs Routingテナントの作成/編集
Observabilityメニュー内のLogs Routingを開きます。Logs Routingをデプロイするリージョンの<Set target>を選択して、ターゲットとなるIBM Logsの設定を行います。Choose typeとして<Cloud Logs>を選択し、Createボタンを押下して新規のIBM Cloud Logsを作成するか、既に作成済みのIBM Logsターゲットを選択ののち、保存して作成します。
受信用(取込み用) エンドポイントの設定
Logs Routerの取込み用エンドポイントの設定
今回は、Logs Routerへのログ取込み用のエンドポイントとして、Virtual Private Endpoint (VPE) を利用します。これにより、VPC内に存在するRHELサーバからVPC内に存在するIBM Cloud Logs Routingの仮想IPアドレスにVPC内通信にて接続する事が可能となります。詳細は、IBM Doc「VPCの仮想プライベート・エンドポイントを使用してIBM Cloud Logs Routing へのプライベート接続を行う方法」を参照して適切に設定してください。
Logs Routerへのログ取込み用の権限設定
ログをIBM Cloud Logs Routingサービスを通して送信するようにエージェントを構成する場合、APIキーまたはTrusted Profileは、IBM Cloud Logs Routingサービスの Writer
ロールを持つ必要があります。Logs Routerにエージェントからのログ取込み用の権限設定は、IBM Doc「IBM Cloud Logs Routingを使用して取り込みの許可を設定」を参照ください。今回の場合、Trusted Profile名「Logs_Profile」なので、IBM Cloud shellにログイン後、以下のコマンドでLogs RouterにTrusted ProfileによるWriter
権限を付与します。
Masaharu_Esaki@cloudshell:~$ ibmcloud iam tp-policy-create logs_profile --roles Writer --service-name logs-router
Creating policy under account XXXXXXXXXXXXXXXXXXXXXXXX for trusted profile logs_profile as Masaharu.Esaki@ibm.com...
OK
Trusted profile policy is successfully created
GUIでTrusted profilesのAccess policiesを設定しようとしてもIBM Cloud Logs Routingサービスは出てきません。CLIでのみ実施となります。
設定後、以下のようにCLIで設定した内容がAccess policiesには表示されます。
なお、Logs Routerを介さずエージェントから直接IBM Logsにログを送信する事も可能です。その際は、Trusted ProfileがIBM Cloud Logsサービスの<Sender>ロールを持つ必要があります。権限設定の詳細はIBM Doc「直接送信による取り込みのための権限設定」を参照ください。
エージェントによるログ採取
IBM Cloud Log Routingでは、以下2つのソースからログを受信できます。
- プラットフォームログを生成するサービスからの受信
- Kubernetes Service / Red Hat OpenShift on IBM Cloudクラスター及びLinux上のIBM Cloud Logs Routing Agentからの受信
IBM Cloud Logs Routing Agentは、オープンソースであるFluent Bitを採用しており、インフラストラクチャログとアプリケーションログを収集してIBM Logs Routingサービスを介して、IBM Logs等のターゲットに送信します。
今回は、LinuxサーバにデプロイしたIBM Cloud Logs Routing Agentからの受信設定についてご紹介したいと思います。
エージェントをデプロイするLinuxサーバの注文
今回は、Red Hat Linux環境をエージェントを導入します。
Qiita記事「IBM Cloud: Trusted Profileを使ったVSI for VPCからの安全なAPI/CLI呼び出し方法」を参考にTrusted Profile付きの新規RHELサーバを注文します。
エージェントのデプロイ
IBM Doc「Linux 用の IBM® Cloud Logs Routing エージェントの管理」を参考にRHELサーバにエージェントをデプロイします。エージェントの認証方法として、今回は前項のRHELサーバ払出しの際に付与したTrusted Profileを採用します。
RHELサーバにログイン後、必要なPRMパッケージをダウンロードします。ダウンロードするパッケージバージョン情報についてはエージェントのリリースノートを参照ください。
以下のコマンドでエージェントをインストールします。今回は、IBM Cloud Logs Routing Agent-Version 1.2.3を利用します。
rpm -ivh <rpm_filename>
エージェントの構成スクリプトファイルをダウンロードします。
https://logs-router-agent-config.s3.us.cloud-object-storage.appdomain.cloud/post-config.sh
構成スクリプトファイルを実行します。今回は、以下のパラメータを指定します。
TARGET_HOST=ingester.private.jp-tok.logs-router.cloud.ibm.com
TARGET_PORT=443
TARGET_PATH=/v1/logs/ws
AUTH_MODE=VSITrustedProfile
TRUSTED_PROFILE_ID=Profile-e94d0bf4-7afd-XXXXXXXXXXXXXXXXXXXXXX
./post-config.sh -h $TARGET_HOST -p $TARGET_PORT -t $TARGET_PATH -a $AUTH_MODE -d $TRUSTED_PROFILE_ID
なお、Logs Routingを介さずに、エージェントから直接IBM Cloud Logsにログを送出する場合は、構成スクリプト実行時に--send-directly-to-icl
オプションを指定します。
エージェントの構成ファイルの設定
エージェントの構成スクリプトにより作成された構成ファイルを以下のように編集します。
[root@lxagent ~]# cat /etc/fluent-bit/fluent-bit.conf
[SERVICE]
Flush 1
Log_Level info
Daemon off
Parsers_File parsers.conf
Plugins_File plugins.conf
HTTP_Server On
HTTP_Listen 0.0.0.0
HTTP_Port 8081
Health_Check On
HC_Errors_Count 1
HC_Retry_Failure_Count 1
HC_Period 30
[INPUT]
# Comment
Name tail
Path /var/log/*.log
# Path /var/log/secure
log_level info
# Name dummy
# Dummy {"message": "Hello World"}
@INCLUDE output-logs-router-agent.conf
[root@lxagent ~]# cat /etc/fluent-bit/output-logs-router-agent.conf
[OUTPUT]
# fluentbit config
Name logger-agent-plugin
Id logs-router-agent-plugin
Match *
Retry_Limit 8
# Connection
Target_Host ingester.private.jp-tok.logs-router.cloud.ibm.com
Target_Port 443
Target_Path /v1/logs/ws
# Authentication
Authentication_Mode VSITrustedProfile
IAM_Environment Production
Trusted_Profile_ID Profile-e94d0bf4-XXXXXXXXXXXXXXXXXXXXXX
# Logging
Logging_Level info
構成ファイルには、[Service]
[Input]
[Filter]
および[Output]
の4つのセクションがあります。今回は、以下3つのセクションを利用します。
[SERVICE]
セクションを構成して、サービスのグローバル・プロパティーを定義できます。今回は、log_level
に示しているように、グローバルレベルでデフォルト値のinfo
を採用してますので、info
以上のログが採取されます。
[INPUT]
セクションを構成して、Fluent Bitがデータを収集できるソースを定義できます。必須Name
キーとして、tail
を採用してますのでShell コマンドとしてtail -f
と同等の振る舞いをします。他の[input]
のプラグインについては、Fluent Bit Official ManualのInputsを参照ください。
[OUTPUT]
セクションを構成して、タグが一致した後に Fluent Bitがデータを送信する宛先を定義できます。ここには、先ほど構成スクリプトを実行した際に指定したパラメータが反映されております。権限付与等で指定したTrusted Profileが正しく反映している事を確認ください。
なお、エージェントの動作確認の為、[input]
セクションのName
キーにdummy
を以下のように設定する事により、IBM Logs上にHello World
ログが出てきますので、実際のログが生成されなくても、エージェント/Logs Routing/IBM Logsの設定の確認が行えます。
[INPUT]
# Comment
Name dummy
Dummy {"message": "Hello World"}
その他、エージェント構成ファイルのセクション設定等の詳細については、IBM Doc「エージェント構成ファイルについて」を参照ください。
エージェントからのログ送出確認
エージェントの構成ファイルを修正した後は、以下のコマンドでエージェントを再起動してログを送出します。
systemctl restart fluent-bit
万一、正常のIBM Cloud Logs等でログの表示がされない際は、以下のコマンドでエラー等の発生をご確認ください。
[root@lxagent ~]# /opt/fluent-bit/bin/fluent-bit -c /etc/fluent-bit/fluent-bit.conf
Fluent Bit v3.0.4-ibm
* Copyright (C) 2015-2024 The Fluent Bit Authors
* Fluent Bit is a CNCF sub-project under the umbrella of Fluentd
* https://fluentbit.io
___________.__ __ __________.__ __ ________
\_ _____/| | __ __ ____ _____/ |_ \______ \__|/ |_ ___ _\_____ \
| __) | | | | \_/ __ \ / \ __\ | | _/ \ __\ \ \/ / _(__ <
| \ | |_| | /\ ___/| | \ | | | \ || | \ / / \
\___ / |____/____/ \___ >___| /__| |______ /__||__| \_/ /______ /
\/ \/ \/ \/ \/
Registering the logger-agent-plugin CommitSHA: d1afb3e29f6fccebef021a07c61c9ff1c30a6c07
Registering the logger-icl-output-plugin with commitSHA: 5bae65e8d7ce704c8dcfbe1231d4736957edb6ee
[2024/08/08 15:26:08] [ info] [fluent bit] version=3.0.4-ibm, commit=, pid=111751
[2024/08/08 15:26:08] [ info] [storage] ver=1.5.2, type=memory, sync=normal, checksum=off, max_chunks_up=128
[2024/08/08 15:26:08] [ info] [cmetrics] version=0.9.0
[2024/08/08 15:26:08] [ info] [ctraces ] version=0.5.1
[2024/08/08 15:26:08] [ info] [input:tail:tail.0] initializing
[2024/08/08 15:26:08] [ info] [input:tail:tail.0] storage_strategy='memory' (memory only)
{"level":"info","ts":"2024-08-08T15:26:08.442664524Z","logger":"logs-router-agent-plugin","caller":"internal/logger-agent-plugin-impl.go:97","msg":"Initializing the plugin","ID":"logs-router-agent-plugin"}
{"level":"info","ts":"2024-08-08T15:26:08.442782791Z","logger":"logs-router-agent-plugin","caller":"internal/logger-agent-plugin-impl.go:131","msg":"Connecting to ingester","URL":"wss://ingester.private.jp-tok.logs-router.cloud.ibm.com:443/v1/logs/ws"}
以下のようにIBM Logs上にRHELエージェントからのログを表示する事ができました。
まとめ
Linuxサーバ上のIBM Cloud Logs Routing Agentから、IBM Cloud Logs Routingを介して、IBM Cloud Logsにログを送出する際の設定についてご紹介しました。IBM Cloud Logs自体のデプロイは非常に簡単ですが、Routingやエージェントの権限設定や各種構成ファイルの設定が非常に重要になります。エージェントの構成ファイルセクション設定を編集し、最適な環境にてご利用ください。
参考サイト
- IBM Cloud Logsを使ってみた
- VPCの仮想プライベート・エンドポイントを使用してIBM Cloud Logs Routing へのプライベート接続を行う方法
- IBM Cloud Logs Routingを使用して取り込みの許可を設定
- 直接送信による取り込みのための権限設定
- IBM Cloud: Trusted Profileを使ったVSI for VPCからの安全なAPI/CLI呼び出し方法
- Linux 用の IBM® Cloud Logs Routing エージェントの管理
- エージェントのリリースノート
- Fluent Bit Official ManualのInputs
- エージェント構成ファイルについて