概要
本記事では、Oracle Cloud Infrastructure(OCI)のコンテナサービス上で稼働するアプリケーションを対象に、Pod内のサイドカーコンテナとして配置したFluent Bitを活用したログ運用パイプラインの構築手法を解説します
具体的には、PodログソースからSyslogサーバーへデータをインジェストするアウトプット構成の実装アプローチを取り上げます。また、運用システムとの統合を想定し、中継Syslogサーバーにて稼働するOracle Cloudエージェント経由で、OCI Loggingへカスタムログとして安全に統合管理する具体的なアーキテクチャ例と設定例を提示します
背景
OCIにおけるコンテナ運用の選択肢として、マネージドKubernetesである Oracle Container Engine for Kubernetes(OKE)のバーチャル・ノード(Virtual Nodes)や、サーバーレスのコンテナ実行環境であるコンテナ・インスタンス(Container Instances)が挙げられます。これらはインフラ管理のオーバーヘッドを削減できる一方で、ログ運用の観点において以下のような共通の制約が存在します。
-
ホストレイヤーへのアクセス不可
従来のVirtual NodesやContainer Instancesでは、ユーザーがホストレイヤーにアクセスできないため、/var/log配下のログ収集が構造的に不可能です。 -
OCI Loggingとの連携における柔軟性の不足
コンテナ・インスタンスの標準機能でもOCI Loggingへのログ出力は可能ですが、保存容量は少なくまた他サービス連携が困難です
これらの制約を解消し、コンテナの揮発性に影響されない堅牢かつ柔軟なログパイプラインを構築するためには、アプリケーションの実行環境(Pod)の内部にログ収集を行うサイドカー方式の採用が必要となります
構成
-
Fluent Bit
PodのサイドカーとしてFluent Bitを利用します。Fluent Bitのログ転送先(Output)候補としてはSyslog, Opensearch, OCI Log Analyticsが挙げられます。今回はOCI Loggingに保存しOCIサービスで利活用するためSyslogサーバーへログ転送する設計としました -
Syslogサーバー
Fluent Bitから送信されるログを受信します
可用性を高めるためにはNLB+2台のCompute構成としました -
OCI Logging
OCI Agentを使用して/var/log配下のログを定期的にOCI Loggingに転送するようカスタムログを構成します
設定手順
Syslog Server
app containerのログを集約するSyslogサーバー側の設定です。
- rsyslog
/etc/rsyslog.conf の編集:
以下の行のコメントアウト(#)を解除して、UDP受信を有効にします。
module(load="imudp")
input(type="imudp" port="514")
/etc/rsyslog.d/下にconfファイル作成:
Fluent Bitから送られるログを振り分けるルールを作成します
## Replace << >> with the appropriate value
$template virtualnodefmt,"[%timegenerated:::date-rfc3339%] %rawmsg%\n"
if ($fromhost-ip == '<<Fluent Bit or NLB IP>>') then {
action(type="omfile" file="/var/log/containers/virtualnode.log" template="virtualnodefmt")
stop
}
rsyslog サービスの再起動:
sudo systemctl restart rsyslog
logローテーション設定:
必要に応じてローテーション設定を行います。
中継Syslogサーバーとして利用するためログサイズは少量で問題ありません
作成例
/var/log/containers/*.log {
size 10M
rotate 3
compress
missingok
notifempty
copytruncate
}
稼働確認
$ sudo logrotate -d /etc/logrotate.d/containers
- Firewall等設定
OSのファイアウォール(firewalld)および OCI 上のセキュリティ・リスト(またはネットワーク・セキュリティ・グループ)で、UDP 514 ポートを開放します。
OSファイアウォール(firewalld)の設定:
sudo firewall-cmd --permanent --add-port=514/udp
sudo firewall-cmd --reload
OCI ネットワーク設定 (セキュリティ・リスト等):
コンテナが属するサブネットから、Syslogサーバーが属するサブネットへのインバウンド・ルールを追加します。
- Syslog Server冗長化:
冗長化を行う場合はSyslog Serverを2台構成(Active-Standby)として前段にNetwork Load Balancerを設置します
OCI Logging
Syslogサーバーが受信したログファイルを OCI Logging に転送し、クラウド上で集中管理・閲覧できるようにします
以下リンクを参考にカスタムログを設定します
ログ入力ログ・パスは/var/log/*となっていますが、今回は具体的な保存先/var/log/containers/*を指定します
Fluent Bit
Fluent Bitをサイドカーコンテナとして配置し、ConfigMap経由で設定ファイルを注入して、Syslogサーバーへログを自動転送する手順です。
- 構成ファイルの作成
設定を管理する ConfigMap と、実際にアプリケーションを動かす Deployment(または Pod)の2つのマニフェストファイルを作成します。
ConfigMapマニフェスト:
## Replace << >> with the appropriate value
apiVersion: v1
kind: ConfigMap
metadata:
name: fluent-bit-config
namespace: <<namespace>>
data:
fluent-bit.conf: |
[SERVICE]
Flush 1
Daemon Off
Log_Level info
[INPUT]
Name tail
Path /var/log/nginx/access.log
Tag nginx.access
Parser none
[FILTER]
Name modify
Match *
Add pod_name ${MY_POD_NAME}
[OUTPUT]
Name syslog
Match *
Host <<syslog server ip>>
Port 514
Mode udp
syslog_format rfc3164
syslog_message_key log
syslog_facility_preset 1
syslog_severity_preset 6
syslog_hostname_key pod_name
syslog_appname_preset nginx-pod
アプリケーションマニフェスト:
既存のアプリケーション(Deploymentなど)のマニフェストに対し、以下の「Fluent Bitサイドカーの定義」と「ボリュームの定義」をそれぞれ対象の場所に追記します。
# 既存マニフェストの spec.template.spec.containers: 配下に追記
containers:
# (既存のメインアプリケーション定義の下に以下を追加)
# --- Fluent Bit Sidecar (ここを抜粋・追加) ---
- name: fluent-bit
image: fluent/fluent-bit:latest
env:
# この値は ConfigMap(fluent-bit.conf) 内の ${MY_POD_NAME} で参照されます。
- name: MY_POD_NAME
valueFrom:
fieldRef:
fieldPath: metadata.name
volumeMounts:
- name: shared-logs
mountPath: /var/log/nginx
- name: config
mountPath: /fluent-bit/etc/
# 既存マニフェストの spec.template.spec.volumes: 配下に追記
volumes:
- name: shared-logs
emptyDir: {}
- name: config
configMap:
name: fluent-bit-config
マニフェストの適用(Apply):
作成したマニフェストを kubectl コマンドでクラスターに適用します。設定ファイル(ConfigMap)を先に適用する必要があります。
kubectl apply -f ConfigMapsyslogoutput.yaml
kubectl apply -f nginx-fluentbit-deployment.yaml
実行結果
設定完了後、Fluent Bitサイドカーから中継Syslogサーバーに向けて正常にNginxのアクセスログが転送・受信されていることを確認します
$ sudo tail /var/log/containers/virtualnode.log
:
[2026-06-15T09:35:16.283289+09:00] <14>Jun 15 00:35:15 nginx-dep-<<pod-hash>>-hhdcp nginx-pod: <<private-ip>> - - [15/Jun/2026:00:35:15 +0000] "GET /custa/home.html HTTP/1.1" 200 170 "-" "<<User-Agent>>" "<<global-ip>>"
[2026-06-15T09:35:17.475782+09:00] <14>Jun 15 00:35:16 nginx-dep-<<pod-hash>>-jjlbw nginx-pod: <<private-ip>> - - [15/Jun/2026:00:35:16 +0000] "GET /custa/home.html HTTP/1.1" 200 170 "-" "<<User-Agent>>" "<<global-ip>>"
[2026-06-15T09:35:18.282945+09:00] <14>Jun 15 00:35:17 nginx-dep-<<pod-hash>>-hhdcp nginx-pod: <<private-ip>> - - [15/Jun/2026:00:35:17 +0000] "GET /custa/home.html HTTP/1.1" 200 170 "-" "<<User-Agent>>" "<<global-ip>>"
さらにSyslog ServerからOCIカスタムログにもアクセスログが転送・受信されていることを確認します

これにより、Fluent Bit⇒中継Syslogサーバー⇒OCIカスタムログ にログデータが同期・受信されていることが検証できました。
その他参考リンク
Fluent Bit Official Manual - Outputs
https://docs.fluentbit.io/manual/data-pipeline/outputs
OCIロギングとGrafanaを使用したHPC/GPUクラスタのログ監視方法
https://oracle-japan.github.io/ocitutorials/hpc/tech-knowhow/log-monitoring/
