この記事で書いていること
- アプリケーションログがOCI Loggingで表示されるまでの設定
- これは下記のチュートリアルと同じなので、簡易的に設定内容のみを共有します。
Oracle Container Engine for Kubernetes(OKE)でサンプルマイクロサービスアプリケーションをデプロイしてOCIのオブザバビリティサービスを利用してみよう 3.Logging
- これは下記のチュートリアルと同じなので、簡易的に設定内容のみを共有します。
- OCI Loggingでのログ検索の方法
- パス(/var/log/containers/*)指定でログがOCI Loggingに送られるため、Pod毎のログ検索やmessage内容で検索が絞れるか気になった。
この記事で書かないこと
- OKEのデプロイ方法
- デプロイ方法は不明な方は、以下のチュートリアルを参考にして、OKEを作成してください
Oracle Container Engine for Kubernetes(OKE)をプロビジョニングしよう
Oracle Container Engine for Kubernetes(OKE)でKubernetesを動かしてみよう
- デプロイ方法は不明な方は、以下のチュートリアルを参考にして、OKEを作成してください
参考記事
- 公式ドキュメント
- チュートリアル
今回はこのチュートリアルを実施した上で、検索周りを検証してます。
OCI LoggingがOKEのアプリケーションログを取得する仕組み
頑張って絵で表現しようとしたのですが、絵心がなく言葉で補足します。
- WorkerNodeにはもともとOracle Cloud Agentが入っており、このagentが適宜Loggingにログを飛ばします
- では、そのagentがどこのログを連携するかというと、Loggingのカスタムログでその設定をするのですが、今回はアプリケーションログが吐かれる
/var/log/containers/*
を指定してます - 認証認可に関しては、動的グループとポリシーで実装してます。ざっくり言うと、Loggingとインスタンス(WorlerNode)の連携を許可してます。(AWSのIAMロールを想像するとしっくりくるかもしれません)
- 今回動的グループは、とあるコンパートメントに配置されているすべてのインスタンスにしているため、OKE以外の通常のインスタンスもログ取得の対象になります。
- そのためカスタムログの設定で見にいくパスを指定したり、Logging検索でPodを指定したりしてます。
上記の説明で、物足りない方は参考記事においた、公式ドキュメントをご確認ください。
設定
以下のチュートリアルを実施しているだけなので、この記事では設定した内容だけ簡易的に記載します。
Oracle Container Engine for Kubernetes(OKE)でサンプルマイクロサービスアプリケーションをデプロイしてOCIのオブザバビリティサービスを利用してみよう 3.Logging
1. 動的グループの作成
以下のような動的グループを作成しました。
チュートリアルと違う点としては、instance.compartment.id
をテナンシOCIDではなく、コンパートメントOCID を記載してます。
2. ポリシー設定
以下のようなポリシーをルートコンパートメントに作成しました。
3. カスタムログの設定
3-1. ログ
-
worker-node
というカスタムログを作成 - ロググループは
logging-dynamic-group
を新規作成して指定
- エージェントは
node_agent
を新規作成
3-2. エージェント構成
3-3. 設定後
設定のち、数分するとログの[ログの探索]タブから、アプリケーションログが見えるようになります。
検証
このままだと/var/log/containers/*
にあるすべてのログが表示されているため、ある程度絞って表示するにはどうすればいいか検証してきたいと思います。
OCI Loggingの検索でログを見る方法
先ほどは作成したログから[ログの探索]タブでログを見てましたが、検索画面から改めて今回のログを見たいと思います。
ロギングの[検索]タブを押すと、今いるコンパートメントのログが表示されます。
このままだと、コンパートメント配下のすべてのログが表示されるため、今回作成したログに絞って表示します。
-
ちなみに各ログの
マークをクリックすると、実際のログがJSON形式で確認できます。messageがアプリケーションログにあたり、taild_pathが見に行っているログのパスです。表示が途中で切れてますが、
/var/log/containers/*
のxxxxxxx.log
ファイルを見に行ってます。
Pod毎に表示するログを絞る方法
現在は動的グループで合致するインスタンスの/var/log/containers/*
のログをすべて取ってきているため、Pod単位で表示を絞ります。
-
すると、GUIベースの検索画面ではなく、CUIベースの検索画面がになり、現在の構文が表示されます。ちなみに今はログが488件表示されているので、Podでログを絞って、ログの件数が少なくなることを確認します。
-
問い合わせにWhere句を足して、見に行くログファイルを指定します。すると、検索結果も96件に絞れました。(補足ですが、Pod単位でログファイルが作成され、ログファイル名にPod名が含まれます。)
さらにメッセージ内容で表示するログを絞る方法
考察
もともとはPod単位でログを見るのはどうすればいいかを考えたのがきっかけでした。
最初はPod単位でカスタムログを作成することも考えたのですが、Pod名が変わったり、Pod数の数だけ設定を入れ込まないといけないので、現実的ではないなと。。。
そのため/var/log/containers/*
ひとくくりでログを取得したのちに、検索クエリで工夫して、Pod単位でログが見れるか検証しました。
namespace毎にカスタムログを作成するという案もいただいたので、それはどこかで検証したいと思います。