Service Mesh (ASM) は、ログ、メトリック、トレーシングのための可観測性設定を提供します。ASM コンソールを使用して、これらの設定をグローバル、名前空間、またはワークロード固有のレベルでカスタマイズできます。例えば、ログの出力フォーマットの定義、メトリックディメンションの追加、特定のメトリックの有効化/無効化、トレーシングのサンプリング率の設定が可能です。このトピックでは、可観測性設定の使用方法について説明します。
前提条件
バージョン 1.17.2.35 以降の ASM インスタンスが必要です。詳細については、「ASM インスタンスの作成」または「ASM インスタンスのアップグレード」をご参照ください。
範囲
|
タイプ |
説明 |
|
グローバル |
グローバル構成は、ログ、メトリック、トレーシングの設定をサポートします。グローバル構成は 1 つしか存在せず、削除することはできません。トレーシング設定は、グローバルスコープでのみサポートされます。 |
|
名前空間 |
名前空間に専用の可観測性構成を作成できます。各名前空間は、名前空間レベルの可観測性構成を 1 つしか持つことができません。 |
|
カスタム |
カスタム構成では、ラベルセレクターを使用してその範囲を定義します。各ワークロードは、最大で 1 つのカスタム構成によって選択できます。 |
操作手順
グローバル
-
ASM コンソールにログインします。左側のナビゲーションウィンドウで、を選択します。
-
[メッシュ管理] ページで ASM インスタンスの名前をクリックし、左側のナビゲーションウィンドウで を選択します。
-
Observability Settings ページで、Global タブをクリックし、必要に応じてログ、メトリック、トレースを設定して、Submission をクリックします。
各設定の詳細な説明については、次の表のリンクをクリックしてください。
設定セクション
説明
名前空間
-
ASM コンソールにログインします。左側のナビゲーションウィンドウで、 を選択します。
-
[メッシュ管理] ページで、ASM インスタンスの名前をクリックします。 左側のナビゲーションウィンドウで、 を選択します。
-
Observability Settings ページで、Namespace タブをクリックし、Create をクリックします。対象の Namespace を選択し、必要に応じてログとメトリックを設定してから、Create をクリックします。
各設定の詳細な説明については、次の表のリンクをクリックしてください。
設定セクション
説明
カスタム
-
[ASM コンソール] にログインします。左側のナビゲーションウィンドウで、 を選択します。
-
[メッシュ管理] ページで、ASM インスタンスの名前をクリックします。左側のナビゲーションウィンドウで、 を選択します。
-
Observability Settings ページで Custom タブをクリックし、ターゲットの Namespace を選択して Create をクリックします。Name と Label selector を入力し、必要に応じてログとメトリックを設定してから、Create をクリックします。
各設定の詳細な説明については、次の表のリンクをクリックしてください。
設定セクション
説明
ログ設定
ログ設定には、アクセスログ出力の有効化/無効化、ログ出力フォーマットの設定、ログフォーマットのカスタマイズ、ログのフィルタリングが含まれます。
アクセスログ出力
-
Log Settings セクションで、必要に応じて Enable Log Output スイッチをオンまたはオフに切り替えます。
-
このオプションを有効にすると、データプレーン上のサイドカーまたはゲートウェイは、コンテナの標準出力 (stdout) にアクセスログを出力します。
-
このオプションを無効にすると、データプレーン上のサイドカーまたはゲートウェイは、コンテナの stdout へのログ出力を停止します。
-
-
データプレーンのサイドカーコンテナの stdout でログを表示します。
以下の例は、kubectl を使用してアクセスログを表示する方法を示しています。
-
次のコマンドを実行して、サイドカーのログを表示します。
kubectl logs httpbin-5c5944c58c-w**** -c istio-proxy --tail 1 -
次のコマンドを実行して、イングレスゲートウェイのログを表示します。
kubectl -n istio-system logs istio-ingressgateway-6cff9b6b58-r**** --tail 1
-
-
(オプション) Container Service for Kubernetes コンソールでアクセスログを表示します。
Alibaba Cloud Container Service for Kubernetes (ACK) クラスターを使用している場合は、ACK コンソールでアクセスログを表示することもできます。
ACK コンソールにログインします。左側のナビゲーションウィンドウで、クラスターリスト をクリックします。
クラスターリスト ページで、クラスターの名前をクリックします。左側のナビゲーションウィンドウで、 をクリックします。
-
ポッド ページで、目的の Pod の名前をクリックし、次にページの下部にある ログ タブをクリックしてアクセスログを表示します。
ログ出力フォーマット
この機能には、バージョン 1.20.6.36 以降の ASM インスタンスが必要です。インスタンスのアップグレード方法の詳細については、「ASM インスタンスのアップグレード」をご参照ください。
Log Settings セクションで、必要に応じて Log Output Format を JSON または TEXT に設定します。
-
[JSON] を選択すると、アクセスログは JSON 文字列としてコンテナの stdout に出力されます。
-
[TEXT] を選択すると、アクセスログはプレーンテキスト文字列としてコンテナの stdout に出力されます。
カスタムログフォーマット
-
Log Settings セクションで、フィールドを選択するか、カスタムフィールド情報を変更するか、またはログフィールドリストの下部にある
アイコンをクリックして新しいログフィールドを追加します。[ログ出力を有効にする] スイッチがオンの場合にのみ、ログフォーマットをカスタマイズできます。Log Format セクションでは、デフォルトで選択されているログフィールドは必須であり、選択解除できません。ログフィールド値は、リクエストヘッダー、レスポンスヘッダー、または Envoy の組み込み値から取得できます。
例えば、
accept-encodingリクエストヘッダーをログに記録するには、accessLogFormat key を accept-encoding に、Type を Request Properties に、accessLogFormat value を Accept-Encoding に設定します。リクエストヘッダーのフォーマットテンプレートは%REQ(HEADER_NAME)%(例:%REQ(:AUTHORITY)%)、レスポンスヘッダーの場合は%RESP(HEADER_NAME)%(例:%RESP(X-ENVOY-UPSTREAM-SERVICE-TIME)%)、Envoy の組み込み属性の場合は%ATTRIBUTE_NAME%(例:%REQUEST_DURATION%) です。 -
次のコマンドを実行して、サービスメッシュ内のデータプレーンコンポーネントのログを表示します。
kubectl logs httpbin-5c5944c58c-w**** -c istio-proxy --tail 1|grep accept-encoding --color=autoアクセスログには、ステップ 1 で追加した Accept-Encoding ヘッダーの値が表示されます。
ログフィルタリング
Log Settings セクションで、Enable Log Filter を選択してログフィルタリングを有効にし、テキストボックスにフィルタリング式を入力します。アクセスログは、式に一致するリクエストに対してのみ生成されます。
たとえば、レスポンス HTTP ステータス >= 400 という条件を満たすリクエストのみをログに記録するには、式 response.code >= 400 を使用します。詳細については、「CEL 式および一般的なフィールド」をご参照ください。
CEL 式と共通フィールド
ログフィルタリング式は、標準の Common Expression Language (CEL) 式です。次の表に、CEL 式の共通フィールドを示します。詳細については、公式の CEL および Envoy のドキュメントをご参照ください。
|
属性 |
タイプ |
説明 |
|
request.path |
string |
リクエストパス。 |
|
request.url_path |
string |
クエリ文字列を含まないリクエストパス。 |
|
request.host |
string |
URL のホスト部分。 |
|
request.method |
string |
リクエストメソッド。 |
|
request.headers |
map<string, string> |
すべてのリクエストヘッダー。小文字の名前でインデックスされます。 |
|
request.useragent |
string |
User-Agent ヘッダーの値。 |
|
request.time |
timestamp |
リクエストの最初のバイトが受信された時刻。 |
|
request.id |
string |
リクエスト ID。 |
|
request.protocol |
string |
リクエストプロトコル。有効な値: |
|
request.query |
string |
リクエスト URL のクエリ文字列。 |
|
response.code |
int |
レスポンスの HTTP ステータスコード。 |
|
response.code_details |
string |
レスポンスコードの詳細。 |
|
response.grpc_status |
int |
レスポンス内の gRPC ステータスコード。 |
|
response.headers |
map<string, string> |
すべてのレスポンスヘッダー。小文字の名前でインデックスされます。 |
|
response.size |
int |
レスポンスボディのサイズ (バイト単位)。 |
|
response.total_size |
int |
レスポンスメッセージの合計サイズ (バイト単位)。ボディとヘッダーを含みます。 |
メトリック設定
メトリック設定には、メトリック生成の有効化/無効化とメトリックディメンションの設定が含まれます。
メトリック生成
メトリックは、クライアント側メトリックとサーバー側メトリックに分類されます。
-
クライアント側メトリック:サイドカーがクライアントとしてリクエストを開始する際に生成されるメトリック。ゲートウェイメトリックもクライアント側メトリックに分類されます。
-
サーバー側メトリック:サイドカーがサーバーとしてリクエストを受信する際に生成されるメトリック。
-
Metric Settings セクションの、Client-Side Metrics 列または Server-Side Metrics 列で、必要に応じてメトリックの Enabled チェックボックスを選択または選択解除します。
-
メトリックが有効な場合、データプレーン サイドカーまたはゲートウェイは、ポート 15020 の
/stats/prometheusパスを介してこのメトリックを公開します。 -
メトリックが無効な場合、指定されたポートとパスでは公開されません。
-
-
次のコマンドを実行して、サイドカーまたはゲートウェイによって公開されるメトリックを表示します。
kubectl を使用して、サイドカーまたはゲートウェイコンテナ内で curl コマンドを実行し、ローカルポート 15020 の
/stats/prometheusパスにアクセスして、エクスポートされたメトリックを表示できます。kubectl exec httpbin-5c5944c58c-w**** -c istio-proxy -- curl 127.0.0.1:15020/stats/prometheus|head -n 10出力例:
# TYPE istio_agent_cert_expiry_seconds gauge istio_agent_cert_expiry_seconds{resource_name="default"} 46725.287654548 # HELP istio_agent_endpoint_no_pod Endpoints without an associated pod. # TYPE istio_agent_endpoint_no_pod gauge istio_agent_endpoint_no_pod 0 # HELP istio_agent_go_gc_duration_seconds A summary of the pause duration of garbage collection cycles. # TYPE istio_agent_go_gc_duration_seconds summary istio_agent_go_gc_duration_seconds{quantile="0"} 5.0149e-05 istio_agent_go_gc_duration_seconds{quantile="0.25"} 9.8807e-05 ......
メトリックディメンション
メトリックディメンションは、豊富なコンテキスト情報を提供します。これらのディメンションを使用して、Prometheus でターゲットメトリックをフィルタリングできます。例えば、source_app ディメンションを使用して、特定のクライアントアプリケーションからのリクエストのメトリックをフィルタリングできます。
デフォルトディメンションの編集
デフォルトディメンションを編集するには、次の手順を実行します。
-
Metric Settings セクションの Client-Side Metrics または Server-Side Metrics 列で、有効なメトリックの Edit dimension をクリックします。
-
Customize CLIENT dimension configuration または Customize SERVER dimension configuration ダイアログボックスで、エクスポートするディメンションのチェックボックスを選択または選択解除し、Confirm をクリックします。
例えば、無効化されているディメンションがない場合、サイドカーまたはゲートウェイコンテナ内で curl コマンドを実行して、ローカルポート 15020 の /stats/prometheus パスにアクセスし、エクスポートされたメトリックを表示できます。
kubectl exec httpbin-5c5944c58c-w**** -c istio-proxy -- curl 127.0.0.1:15020/stats/prometheus
istio_request_bytes_sum メトリック (コンソールの REQUEST_SIZE メトリックに対応) を例にとると、デフォルトですべてのディメンションが含まれていることがわかります。
istio_request_bytes_sum{reporter="destination",source_workload="istio-ingressgateway",source_canonical_service="unknown",source_canonical_revision="latest",source_workload_namespace="istio-system",source_principal="spiffe://cluster.local/ns/istio-system/sa/istio-ingressgateway",source_app="istio-ingressgateway",source_version="unknown",source_cluster="c479fc4abd2734bfaaa54e9e36fb26c01",destination_workload="httpbin",destination_workload_namespace="default",destination_principal="spiffe://cluster.local/ns/default/sa/httpbin",destination_app="httpbin",destination_version="v1",destination_service="httpbin.default.svc.cluster.local",destination_canonical_service="httpbin",destination_canonical_revision="v1",destination_service_name="httpbin",destination_service_namespace="default",destination_cluster="c479fc4abd2734bfaaa54e9e36fb26c01",request_protocol="http",response_code="200",grpc_response_status="",response_flags="-",connection_security_policy="mutual_tls"} 18000
デフォルトの サーバー側 REQUEST_SIZE メトリックを、response_code ディメンションのみを保持するように変更して /stats/prometheus パスにアクセスすると、メトリックには response_code ディメンションのみが含まれるようになります。
istio_request_bytes_sum{response_code="200"} 16550
カスタムディメンションの追加
カスタムディメンションを追加するには、次の手順を実行します。
-
Metric Settings セクションの Client-Side Metrics または Server-Side Metrics 列で、有効なメトリックの Edit dimension をクリックします。
-
Customize CLIENT dimension configuration または Customize SERVER dimension configuration ダイアログボックスの Custom Dimensions オプションで、ディメンション名と値を編集し、Confirm をクリックします。
例えば、サーバー側の REQUEST_SIZE メトリックを編集し、名前が request_path、値が request.path のカスタムディメンションを追加した場合、/stats/prometheus パスにアクセスすると、エクスポートされたメトリックにはカスタムの request_path ディメンションが含まれます。
istio_request_bytes_sum{response_code="200",request_path="/spec.json"} 5800
不要なデフォルトのディメンションを削除することで、Envoy と Prometheus のメモリ消費量を削減できます。しかし、ほとんどのディメンションは通常有用であるため、Metric Settings セクションには、明示的に削除したディメンションのみが表示されます。
トレーシング設定
トレーシング設定には、サンプリング率とカスタムタグが含まれます。完全なコールチェーンを構築するには、トレーシングはすべてのサービスで一貫したレポート構成を必要とします。レポートエンドポイントやサンプリング率が一致しないと、不完全なトレースにつながる可能性があります。このため、1.24.6.83 より前のバージョンの ASM では、名前空間レベルまたはワークロードレベルのトレーシング構成は許可されていません。バージョン 1.24.6.83 以降、ASM は Kubernetes API を使用して Telemetry リソースを変更し、名前空間レベルおよびワークロードレベルのトレーシング構成を有効にすることをサポートしています。Telemetry リソースの構成の詳細については、「Telemetry CRD」をご参照ください。
サンプリング率
トレーシングのサンプリング率をカスタマイズできます。これは、トレースが生成されるリクエストの割合を決定します。値 0 はトレーシングを無効にします。
カスタムタグ
レポートされたトレーシングスパンにアタッチされたタグをカスタマイズできます。Tracing Analysis Settings セクションで、Add Custom Tags をクリックし、Name、Type、Value を設定します。
有効なタイプには、固定値、リクエストヘッダー、環境変数があります。次の表に、各タイプの説明と設定例を示します。
|
タイプ |
説明 |
設定例 |
|
Fixed Value |
タグ値は、指定した文字列に固定されます。 |
|
|
Request Header |
タグは、指定されたリクエストヘッダーの値を使用します。リクエストにヘッダーが存在しない場合は、デフォルト値が使用されます。 例えば、 |
|
|
Environment Variable |
タグは、ワークロードから指定された環境変数の値を使用します。ワークロードに環境変数が存在しない場合は、デフォルト値が使用されます。 例えば、 |
|