こんにちは。k.takeiです。
Oracle Cloud Infrastructure Advent Calendar 2023のDay24の記事です。
本記事ではOKEのログ取得方法について紹介いたします。
主な内容としては管理対象ノードと仮想ノードでログの取得方法が異なるので、各ワーカー・ノードのタイプにあったログの取得方法について書かせていただきます。
OKEのワーカー・ノードのタイプについて
OKEのワーカー・ノードは管理対象ノードと仮想ノードの2種類があります。
下記は公式ドキュメントから抜粋した内容です。
仮想ノード:仮想ノードはOracleによって完全に管理されます。仮想ノードおよび仮想ノード・プールを参照してください。
管理対象ノード:管理対象ノードは、テナンシのコンピュート・インスタンス(ベア・メタルまたは仮想マシン)で実行され、少なくとも部分的に管理されます。管理対象ノードおよび管理対象ノード・プールを参照してください。
引用元:管理対象ノードとの仮想ノードの比較
管理対象ノードのログ取得方法
管理対象ノードのログ取得方法を紹介します。
ここで紹介する内容以外にもログを取得する方法はありますので、あくまで1例として参考にしていただければと思います。
今回はOCIの機能であるカスタムログを使用した方法を紹介します。
まずはカスタムログを使用するためにOCIコンソールのロギング > ログに遷移します。
カスタム・ログの作成をクリックします。
必要な情報を入力し、カスタムログを作成します。
カスタム・ログ名 : ログの名称を入力します。
コンパートメント : 作成するコンパートメントを選択します。
ログ・グループ : 作成するログのログ・グループを選択します。
ログの保持期間(追加オプション) : ログの保持期間を選択します。
カスタムログの作成が終わるとエージェント構成の作成に変わるので、エージェント構成にも必要な情報を入力します。
構成名 : エージェント構成の名称を入力します。
説明 : 任意の文章を入力します。
コンパートメント : 作成するコンパートメントを選択します。
ホスト・グループ
グループ・タイプ : 動的グループかユーザグループを選択します。(今回は動的グループです。)
グループ : エージェント構成に必要な権限が付与してある対象のグループを選択します。
エージェント構成
ログ入力の構成
入力タイプ : Windowsイベント・ログかログ・パスを選択します。(今回はログ・パスです。)
名前の入力 : 任意の名称を入力します。
ファイル・パス : ログが格納されているファイルパスを入力します。
ログの保存先の選択
コンパートメント : 先ほど作成したカスタム・ログのコンパートメントを選択します。
ログ・グループ : 先ほど作成したカスタム・ログのログ・グループを選択します。
ログ名 : 先ほど作成したカスタム・ログを指定します。
今回のログ・パスは「/var/log/containers/*」としました。
これでOKEのノードにあるログをロギングで確認できるようになります。
下記はカスタム・ログの画面です。
こちらはOKEのノードにssh接続した画像です。
カスタム・ログのファイル・パスに「/var/log/containers/*」を指定しているので、ここ配下にあるログを表示しています。
仮想ノードのログ取得方法
仮想ノードのログ取得方法は管理対象ノードと違い、そのままカスタム・ログを使用することが出来ません。
ログを取得する方法は下記の方法が公式ドキュメントに記載されています。
kubectl logs
コマンドを使用して、アプリケーション・コンテナからのstdoutおよびstderrログを表示する方法- 表示するためにアプリケーション・ログを永続ログ・サーバーに送信する方法
まずはkubectl logsコマンドを使用した方法を紹介します。
こちらは比較的簡単で、kubectl get podでpod名を取得後にkubectl logs <pod名>を入力するとログが確認できます。
続いて、アプリケーション・ログを永続ログ・サーバに送信する方法を紹介します。
今回はFluent Bitを使用してログを取得し、OpenSearchにログを送信していきたいと思います。
公式ドキュメントを見てマニフェストファイルを作成していきます。
まずはConfigMapの作成です。
apiVersion: v1
kind: ConfigMap
metadata:
name: fluentbit-config
data:
fluent-bit.conf: |
[SERVICE]
flush 1
daemon Off
[INPUT]
Name tail
Path /mnt/log/*
[OUTPUT]
name opensearch
match *
host <ip-address>
port <port-number>
tls On
HTTP_User <username>
HTTP_Passwd <password>
Index fluent-bit
Suppress_Type_Name On
続いてポッドの作成をしていきます。
apiVersion: v1
kind: Pod
metadata:
name: date-logging
spec:
containers:
- name: date
image: busybox
resources:
requests:
cpu: 500m
memory: 200Mi
command: ["sh", "-c"]
args:
- while [ 1 ]; do
echo "Writing the date in /mnt/log/date.log";
date >> /mnt/log/date.log;
sleep 10;
done
volumeMounts:
- name: logs
mountPath: /mnt/log
- name: logging
image:
resources:
requests:
cpu: 100m
memory: 50Mi
volumeMounts:
- name: logs
mountPath: /mnt/log
- name: fluentbit-config
mountPath: /fluent-bit/etc
volumes:
- name: logs
emptyDir: {}
- name: fluentbit-config
configMap:
name: fluentbit-config
これをOKEで動作させようとしたのですが、なぜかエラーになってしまい、動きません。。。
Fluent BitのサイドカーがErrorになってしまいます。
こちらは再度チャレンジして結果を追記しますので、更新をお待ちいただければと思います。。。
まとめ
今回はOKEのログ取得方法を紹介しました。
注意すべき点は仮想ノードを使用するとカスタム・ログが取得できなくなる点です。
OKEを使用する際のノードタイプはその点も含めて設計する必要があります。
最後まで読んでいただき、ありがとうございました。