LoginSignup
2
0

More than 1 year has passed since last update.

OCI LoggingとOCI Logging Analyticsを利用したIstioのログ分析

Last updated at Posted at 2022-04-29
  • OCI LoggingによるIstioのアプリケーションログの集約
  • サービス・コネクタを利用したOCI Logging Analyticsとの連携
  • OCI Application Performance Monitoringと連携した障害解析

はじめに

Oracle Cloud Infrastructure Logging (OCI Logging) は、様々なログを収集し、保管・検索を実行可能なログの一元管理を実現するマネージド・サービスです。Oracle Container Engine for Kubernetes (OKE) ワーカー・ノードで稼働するアプリケーション・コンテナのログを、カスタム・ログとしてOCI Loggingに集約することができます。また、OCIではクラスタ分析など機械学習を活用した高度なログ分析サービスであるOCI Logging Analyticsも提供されています。

本記事では、IstioのアクセスログをOCI Loggingで収集し、サービス・コネクタで連携したOCI Logging Analyticsで分析出来る環境を構築しました。また、IstioのFault Injectionを行い、前回の記事で構築したOCI APMのエラー検知やOCI Logging Analyticsを利用したログのクラスタ分析を試してみたいと思います。

検証環境

  • Kubernetes: 1.22.5
  • Istio: 1.13.3

OKEへのIstioのインストールは前々回の記事を参照してください。OCI APMの設定は前回の記事を参照してください。
なお、本記事の検証は管理者ユーザー (Administrators Groupに属したユーザー) で実施しています。Administrators Groupに属したユーザーで実施する場合は、下記のドキュメントに従って必要なポリシーを設定する必要があります。

Logging ログおよびログ・グループの作業に必要な権限

Oracle Logging Analytics ログ・アナリティクスとそのリソースへのアクセスの有効化

Envoyアクセスログの有効化

IstioのEnvoyアクセスログを有効化する設定を行います。下記のコマンドを実行します。
なお、この後の操作は全てistio-1.13.3ディレクイトリ下で実施しています。

$ istioctl install \
> --set meshConfig.accessLogFile=/dev/stdout \
> --set meshConfig.accessLogEncoding=TEXT
This will install the Istio 1.13.3 default profile with ["Istio core" "Istiod" "Ingress gateways"] components into the cluster. Proceed? (y/N) y
✔ Istio core installed                                                                                                                                                                                                    
✔ Istiod installed                                                                                                                                                                                                        
✔ Ingress gateways installed                                                                                                                                                                                              
✔ Installation complete                                                                                                                                                                                                   
Making this installation the default for injection and validation.

Thank you for installing Istio 1.13.  Please take a few minutes to tell us about your install/upgrade experience!  https://forms.gle/pzWZpAvMVBecaQ9h9

bookinfoアプリにアクセスした後に、下記のコマンドを実行することで生成されたアクセスログを確認することが出来ます。

$ kubectl logs -l app=productpage -c istio-proxy 

[2022-04-27T03:22:27.547Z] "GET /reviews/0 HTTP/1.1" 200 - via_upstream - "-" 0 295 4 4 "-" "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/100.0.4896.127 Safari/537.36" "1a37ab7a-9e7d-43f7-a30a-0914d743191c" "reviews:9080" "10.244.0.11:9080" outbound|9080||reviews.default.svc.cluster.local 10.244.0.12:49226 10.96.188.147:9080 10.244.0.12:38134 - default
[2022-04-27T03:22:27.538Z] "GET /productpage HTTP/1.1" 200 - via_upstream - "-" 0 4123 15 14 "10.244.0.1" "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/100.0.4896.127 Safari/537.36" "1a37ab7a-9e7d-43f7-a30a-0914d743191c" "132.226.11.70" "10.244.0.12:9080" inbound|9080|| 127.0.0.6:56503 10.244.0.12:9080 10.244.0.1:0 outbound_.9080_._.productpage.default.svc.cluster.local default
[2022-04-27T03:22:27.786Z] "GET /details/0 HTTP/1.1" 200 - via_upstream - "-" 0 178 1 1 "-" "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/100.0.4896.127 Safari/537.36" "6c1d1d28-8d7a-468f-90d0-dfea459bc75d" "details:9080" "10.244.0.8:9080" outbound|9080||details.default.svc.cluster.local 10.244.0.12:39002 10.96.28.253:9080 10.244.0.12:51258 - default

OCI LoggingとOCI Logging Analyticsの設定

動的グループとポリシーの設定

OCIサービスコンソールの左上のメニューアイデンティティとセキュリティより、アイデンティティのコンパートメントを選択し、OCI Loggingでログ収集の対象となるリソースが存在するコンパートメントのOCIDを確認し、メモしておきます。

Fig50.png
Fig51.png

OCIサービスコンソールの左上のメニューアイデンティティとセキュリティより、アイデンティティの動的グループを選択し、動的グループを作成します。

Fig52.png
Fig53.png

下記の様に各項目を入力し 作成ボタンを押します。


  • 名前: 任意の名前 logging-dynamic-group
  • 説明: 任意 logging-dynamic-group
  • 一致ルール: instance.compartment.id = 'ログ収集の対象となるリソースが存在するコンパートメントのOCID'

Fig54.png

次に作成した動的グループに対してポリシーを作成します。OCIサービスコンソールの左上のメニューアイデンティティとセキュリティより、アイデンティティのポリシーを選択し、ポリシーを作成します。

Fig55.png

下記の様に各項目を入力し 作成ボタンを押します。


  • 名前: 任意の名前 logging
  • 説明: 任意 logging
  • コンパートメントの選択: 任意のコンパートメント名  dev
  • ポリシー・ビルダー(手動エディタで入力): allow dynamic-group logging-dynamic-group to use log-content in compartment dev

Fig56.png

OCI Loggingを利用したEnvoyアクセスログの収集

OKE上で稼働するbookinfoアプリケーションのEnvoyアクセスログを収集するようにOCI Loggingの設定を行っていきます。
OCIサービスコンソールの左上のメニュー監視および管理より、ロギングのログ・グループを選択し、収集されたログの保存先となるログ・グループを作成します。OCI Loggingのログ・グループ管理画面でコンパートメントを選択し、ログ・グループの作成ボタンを押します。

Fig57.png
Fig58.png

下記の様に各項目を入力し作成ボタンを押します。


  • 名前: 任意の名前 Istio_OKE
  • 説明: 任意 Istio_OKE

Fig59.png

作成したログ・グループ左下のメニューよりログを選択し、カスタム・ログの作成ボタンを押し収集するカスタム・ログの設定を行います。
下記の様に入力し、カスタム・ログの作成ボタンを押します。


  • 名前: 任意の名前 OKE_Logs
  • コンパートメント: 任意のコンパートメント名  dev
  • ロググループ: 先に作成しておいたログ・グループ名 Istio_OKE

Fig60.png
Fig61.png

続いてエージェント構成の作成ウィザードに遷移するので、新規構成の作成を選択し、下記の様に各項目を入力します。
全て入力したらカスタム・ログの作成ボタンを押します。


  • 名前: 任意の名前 worker_node
  • 説明: 任意の説明 worker_node
  • コンパートメント: 任意のコンパートメント名  dev
  • ホスト・グループ グループタイプ: 動的グループ
  • ホスト・グループ グループ:: 先に作成しておいた動的グループ名 logging_dynamic-group
  • エージェント構成 入力タイプ: ログ・パス
  • エージェント構成 名前の入力: 任意の名前 Istio_OKE
  • ファイル・パス: /var/log/containers/*

Fig62.png

カスタム・ログが追加され、アクティブになってから暫く時間がたつとログ・グループの探索の画面よりログが収集されてくる様子を観察することが出来るようになります。

Fig63.png
Fig64.png

また、OCI Loggingの検索画面よりログの検索やログの詳細について確認することが出来ます。

Fig65.png

サービス・コネクタを利用したOCI LoggingとOCI Logging Analyticsの連携

OCI Loggingが収集してきたログをOCI Logging Analyticsに連携して分析できるようにサービス・コネクタの設定を行います。
はじめに連携先となるOCI Logging Analyticsのログ・グループを作成します。OCIサービスコンソールの左上のメニュー監視および管理より、ログ・アナリティックスの管理を選択し、管理画面よりログ・グループを作成するコンパートメントを選択し、ログ・グループの作成を選択します。

Fig67.png
Fig68.png

下記の様に各項目を入力し、作成ボタンを押します。


  • 名前: 任意の名前 Istio_OKE_Logs

Fig69.png

OCI Logging Analyticsのログ・グループが作成されました。

Fig70.png

続いて、OCI Loggingのサービス・コネクタを作成します。
OCIサービスコンソールの左上のメニュー監視および管理より、ロギングのサービス・コネクタを選択し、管理画面よりサービス・コネクタを作成するコンパートメントを選択し、サービス・コネクタの作成を選択します。

Fig71.png
Fig72.png

サービス・コネクタの作成ウィザードに遷移するので、下記の様に各項目を入力します。


  • コネクタ名: 任意の名前 Istio_OKE_Connector
  • 説明: 任意の説明 Istio_OKE_Connector
  • リソース・コンパートメント: 任意のコンパートメント名  dev
  • サービス・コネクタの構成 ソース: ロギング
  • サービス・コネクタの構成 ターゲット: ログ・アナリティクス
  • ソースの構成 コンパートメント名: OCI Loggingのログ・グループのコンパートメント dev
  • ソースの構成 ログ・グループ: 事前に構成済のOCI Loggingのログ・グループ名 Istio_OKE
  • ソースの構成 ログ: 事前に構成済のOCI Loggingのカスタム・ログ名 OKE_Logs
  • ソースの構成 コンパートメント名: OCI Log Analyticsのログ・グループのコンパートメント dev
  • ソースの構成 ログ・グループ: 事前に構成済のOCI Log Analyticsのログ・グループ名 Istio_OKE_Logs

Fig73.png
Fig74.png
Fig75.png

ウィザード画面下部にポリシー作成のメッセージが表示されるので作成を押します。最後にウィザード左下の作成を押してサービス・コネクタの構成は完了です。

Fig76.png

Fig77.png

OCI Log Analyticsのログ・グループにログが転送されているか確認してみたいと思います。OCIサービスコンソールの左上のメニュー監視および管理より、ログ・アナリティックスのログ・エクスプローラーを選択します。

Fig78.png
Fig79.png

606レコードのログがOCI Log Analyticsから確認できます。ログを時系列で確認したりより見やすくするにはビジュアライゼーションから表示形式を変更できます。例えば、下記を選択すると時系列のヒストグラムとログの詳細を確認することが出来ます。

Fig80.png
Fig81.png

他にも分析のクラスタを選択すると、クラスタリングされて大量のログデータを類似するグループに自動的に分割することができます。こうすることで大量のログに埋もれてしまったメッセージを確認することが容易になります。

Fig82.png
Fig83.png

IstioのFault Injection

Istioでは、リクエストタイムアウト、Fault Injection、サーキット・ブレーカを構成することができ、アプリケーションのコードを変更することなく様々な障害をシミュレートしたテストを実施することが出来ます。本記事ではサンプルとして用意されているユーザーjasonからのトラフィックを遅延させFault Injectionルールを適用して、障害の様子をOCI APMやOCI Logging Analyticsで確認したいと思います。適用するFault Injectionは下記で、ユーザーjasonのratingサービスの間のトラフィックに7秒の遅延を発生させます。

virtual-service-ratings-test-delay.yaml
apiVersion: networking.istio.io/v1alpha3
kind: VirtualService
metadata:
  name: ratings
spec:
  hosts:
  - ratings
  http:
  - match:
    - headers:
        end-user:
          exact: jason
    fault:
      delay:
        percentage:
          value: 100.0
        fixedDelay: 7s
    route:
    - destination:
        host: ratings
        subset: v1
  - route:
    - destination:
        host: ratings
        subset: v1

istio-1.13.3ディレクイトリ下で下記のコマンドを実行することでFault Injectionが適用されます。

$ kubectl apply -f samples/bookinfo/networking/virtual-service-ratings-test-delay.yaml

virtualservice.networking.istio.io/ratings created

bookinfoアプリケーションにアクセスするとRating機能が使えなくなっています。

Fig86.png

OCI APMのトレースでエラーの発生箇所が、スパンの詳細で503エラーが発生していることが確認できます。

Fig87.png
Fig88.png

さらに、OCI Log Analyticsのクラスタ分析機能を活用して障害に該当するコンテナのエラーログを特定することが出来ました。

Fig90.png
Fig91.png

最後に

IstioのEnvoyアクセスログを取得し、OCI Loggingで収集、OCI Logging Analyticsで分析することが出来ました。特にOCI Logging Analyticsは大量のログを自動分類してくれるクラスタ分析機能と、グループ分けされたログを時系列のヒストグラムで表示させることが容易にできることがとても便利でした。今回試すことが出来ませんでしたが他のログを集約して一度に分析することで問題箇所の切分けに活用できそうです。

参考情報

Oracle Cloud Infrastructureドキュメント 例: OKEへのIstioサービス メッシュのインストール

Oracle Cloud Infrastructureドキュメント Logging

Oracle Cloud Infrastructureドキュメント Oracle Cloud Logging Analytics

OCIチュートリアル Oracle Container Engine for Kubernetes(OKE)でサンプルマイクロサービスアプリケーションをデプロイしてオブザバビリティツールを利用してみよう

Cloud Native Developers JP - ハンズオンチュートリアル Kubernetesにおけるログの収集

2
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
2
0