0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

OCIコンテナ環境におけるサイドカー Fluent Bitを用いたログ集約基盤の設計と実装

0
Last updated at Posted at 2026-06-15

概要

本記事では、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サーバーとして利用するためログサイズは少量で問題ありません

/etc/logrotate.d/containers
作成例
/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マニフェスト:

ConfigMapsyslogoutput.yaml
## 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サイドカーの定義」と「ボリュームの定義」をそれぞれ対象の場所に追記します。

nginx-fluentbit-deployment.yaml
# 既存マニフェストの 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/

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?