保守性

サービス・メッシュには、メトリックやロギングなど、さまざまな可観測性機能があります。

メトリック

サービス メッシュをインストールすると、メッシュとアプリケーション全体でテレメトリ データを収集する監視機能を得ることができます。インバウンド・トラフィックとアウトバウンド・トラフィックの両方がサービス・メッシュ・プロキシを経由するようになりました。遅延、失敗、リクエストなどの主要な操作統計が収集されるようになりました。

サービス・メッシュはどのメトリックを生成しますか。

サービス・メッシュは、プロキシ・テクノロジとしてEnvoyを使用します。Envoyは、構成に応じて多くの統計情報を発行します。通常、統計は3つのカテゴリに分類されます。

  • ダウンストリーム:ダウンストリーム統計は、プロキシに入ってくる受信接続/リクエストに関連しています。

  • アップストリーム:アップストリーム統計は、プロキシから作成された送信接続/リクエストに関連しています。

  • サーバー:サーバー統計は、Envoyインスタンスの動作状況を示します。サーバーの稼働時間や割り当てられたメモリーの量などの統計は、ここで分類されます。

サービス・メッシュ・プロキシが生成するメトリックのリストは、次のEnvoy統計ドキュメントを参照してください。

Envoyは、管理/stats/prometheusエンドポイントを通じてメトリックを公開します。このエンドポイントは、ユーザーがEnvoyメトリックをPrometheusインスタンスにスクレイプするためにアクセスできます。Prometheusをscrape構成とともにインストールすると、Grafanaは、これらの重要なメトリックの監視を開始するために必要なすべてです。設定手順については、Add Application Monitoring and Graphing Supportを参照してください。

設定の完了後、Prometheusはサービス・メッシュ・プロキシによって生成されたテレメトリ・データをスクラップします。その後、サービスの外部IPを介してGrafanaにアクセスし、Prometheusで収集された遠隔測定データを問い合せてグラフ化できます。

まず、次のサービス・メッシュ・メトリックの監視を検討してください。

  • envoy_http_ingress_http_downstream_rq_time_sum (Downstream Request Time)
  • envoy_http_ingress_http_downstream_rq_xxx (Downstream Response Code Count)
  • envoy_http_ingress_http_downstream_rq_total (Total downstream requests)
  • envoy_cluster_upstream_rq_total (Total Upstream Requests)
  • envoy_cluster_upstream_rq_completed (Total Upstream Requests completed)
  • envoy_cluster_upstream_rq_xxx (Upstream Response Code Count)
  • envoy_cluster_upstream_rq_time_sum (Upstream Request Time)

サービス・メッシュ・タグ付け

また、サービス・メッシュは、Envoyによって公開されたすべての統計に特定のタグを追加します。この機能を使用すると、メッシュ・リソースに関連付けられた様々なタグでメトリックをフィルタできます。次のタグが含まれます:

  • メッシュOCID
  • VirtualService OCID (リソースで使用可能な場合)
  • VirtualService名前(リソースで使用可能な場合)
  • Envoyクラスタ名(クラスタ統計用)
  • デプロイメント・タイプ(virtual_deploymentまたはingress_deployment)
  • 仮想デプロイメント名(デプロイメント・タイプがvirtual_deploymentの場合)
  • イングレス・デプロイメント名(デプロイメント・タイプがingress_deploymentの場合)
  • デプロイメントOCID

サービス・メッシュ・タグが適用されたメトリックの例

envoy_cluster_upstream_rq_completed{mesh_id="ocid1.mesh.oc1.iad.aaa...",
virtual_service_id="ocid1.meshvirtualservice.oc1.iad.aaa...",
virtual_service_name="pet-rescue/pets",deployment_type="virtual_deployment",virtual_deployment_name="pet-rescue/pets-v1",
deployment_id="ocid1.meshvirtualdeployment.oc1.iad.aaa...",
cluster_name="in|HTTP|9080|ocid1.meshvirtualdeployment.oc1.iad.aaa..."} 568
ノート

この例では、値aaa...は完全なOCID値の略語です。

命名規則

プロキシ構成設定の一部として、サービス・メッシュは次の形式で様々なリソースの名前を内部的に生成します。名前は、統計名の一部として使用されます。たとえば、仮想サービス・デプロイメントでは、次のクラスタ名が生成されます。

{
 "version_info": "5",
 "cluster": {
  "@type": "type.googleapis.com/envoy.config.cluster.v3.Cluster",
  "name": "in|HTTP|9080|ocid1.meshvirtualdeployment.oc1.iad.aaa...",
  "type": "STATIC",
  "connect_timeout": "0.250s",
  "load_assignment": {
   "cluster_name": "in|HTTP|9080|ocid1.meshvirtualdeployment.oc1.iad.aaa...",
   "endpoints": [
    {
     "lb_endpoints": [
      {
       "endpoint": {
        "address": {
         "socket_address": {
          "address": "127.0.0.1",
          "port_value": 9080
         }
        }
       }
      }
     ]
    }
   ]
  }
 },
 "last_updated": "2022-04-25T21:31:24.730Z"
}

このデプロイメントに関連付けられているクラスタ統計は、/stats/prometheusエンドポイントをスクレイピングする場合、次のようになります。cluster_nameはstatのタグとして追加され、stat名から削除されます。

envoy_cluster_external_upstream_rq_2xx{mesh_id="ocid1.mesh.oc1.iad.aaa...",
virtual_service_id="ocid1.meshvirtualservice.oc1.iad.aaa...",
virtual_service_name="pet-rescue/pets",deployment_type="virtual_deployment",virtual_deployment_name="pet-rescue/pets-v1",
deployment_id="ocid1.meshvirtualdeployment.oc1.iad.aaa...",
cluster_name="in|HTTP|9080|ocid1.meshvirtualdeployment.oc1.iad.aaa..."} 568 

仮想ホストなどの非クラスタ統計の場合、統計名は次のようになります。

envoy_vhost_in_HTTP_9080_ocid1_meshvirtualdeployment_oc1_iad_aaa..._vcluster_other_upstream_rq_timeout

次の表に、プロキシ構成のさまざまなタイプの名前形式を示します。

タイプ フォーマット 値の例
クラスタ名 <traffic_direction> | <protocol> | <port> | <virtual_deployment_ocid> | <certificate_ocid>

イングレス:

in|HTTP|9080|ocid1.meshvirtualdeployment.oc1.iad.aaa...

エグレス:

out|HTTP|9080|ocid1.meshvirtualdeployment.oc1.iad.aaa...
out|HTTP|9080|ocid1.meshvirtualdeployment.oc1.iad.aaa...|ocid1.certificate.oc1.iad.aaa...
ルート構成名 <traffic_direction> | <protocol> | <port> | <virtual_deployment_ocid>

イングレス:

in|HTTP|9080|ocid1.meshvirtualdeployment.oc1.iad.aaa...

エグレス:

out|HTTP|9080|ocid1.meshvirtualdeployment.oc1.iad.aaa...
仮想ホスト名 <virtual_service_name> | <port>
product|9080
リスナー名 <traffic_direction> | <port> | <virtual_deployment_ocid>

イングレス:

in|15000|ocid1.meshvirtualdeployment.oc1.iad.aaa...

エグレス:

out|15001|ocid1.meshvirtualdeployment.oc1.iad.aaa...
イングレス・ゲートウェイ・ルート構成名 ig | <port> | <ingress_gateway_ocid> | <hostnames>
ig|8080|ocid1.meshingressgateway.oc1.iad.aaa...|example.com|www.example.com
イングレス・ゲートウェイ仮想ホスト名 ig | <port> | <ingress_gateway_ocid> | <hostnames>
ig|8080|ocid1.meshingressgateway.oc1.iad.aaa...|example.com|www.example.com
イングレス・ゲートウェイ・リスナー名 ig | <port> | <ingress_gateway_ocid>
ig|8080|ocid1.meshingressgateway.oc1.iad.aaa...

ログ

OCIロギングは、メッシュのインストール後に仮想デプロイメントおよびイングレス・ゲートウェイでアクティブ化されます。OCIロギング・サービスは、後で分析するためにログを収集します。サービス・メッシュには、エラー・ログとトラフィック・ログの2つのタイプのログがあります。これらのログは、ログベースの統計を生成したり、404および503の問題をデバッグしたりするために使用できます。

{
    "results": [
        {
            "data": {
                "datetime": "XXXXXXX",
                "logContent": {
                    "data": {
                        "message": "2022-02-11T17:58:54.435653464+00:00 stderr F I0311 17:58:54.752392       1 httplog.go:90] verb=\"GET\" URI=\"/openapi/v2\" latency=15.083521ms resp=304 UserAgent=\"\" srcIP=\"x.x.x.x:xxxx\": ",
                        "tailed_path": "/var/log/containers/packageserver-aaaa.log"
                    },
                    "id": "7acddd...",
                    "oracle": {
                        "compartmentid": "ocid1.compartment.oc1..aaaaaaaa...",
                        "ingestedtime": "2022-02-11T17:59:03.950Z",
                        "instanceid": "ocid1.instance.oc1.iad.aaaaa...",
                        "loggroupid": "ocid1.loggroup.oc1.iad.amaaaaaa...",
                        "logid": "ocid1.log.oc1.iad.amaaaa...",
                        "tenantid": "ocid1.tenancy.oc1..aaaa..."
                    },
                    "source": "oke-cqcs...",
                    "specversion": "1.0",
                    "subject": "/var/log/containers/packageserver-aaaa.log",
                    "time": "2022-02-11T17:58:54.881Z",
                    "type": "com.oraclecloud.logging.custom.inputsource"
                }
            }
        }
    ]
}