Service Mesh (ASM) を使用すると、ServiceLevelObjective カスタムリソース定義 (CRD) を通じて、サービスレベル目的 (SLO) およびアラートルールを宣言的に定義できます。
以下のフィールド リファレンスは、階層によって整理されています:metadata > spec > slos[] > sli または alerting。
YAML の例
以下のマニフェストでは、default 名前空間の httpbin サービスに対する可用性 SLO を定義します。目標は 99.9% で、この SLO は 30 日間の期間にわたって適用され、ページレベルとチケットレベルの両方のアラートが設定されています。
apiVersion: istio.alibabacloud.com/v1beta1
kind: ServiceLevelObjective
metadata:
name: asm-slo-default-httpbin # Format: asm-slo-{namespace}-{service}
namespace: default # Must match the target service namespace
spec:
service: httpbin # Target service name
period: 30d # Period of time during which the SLO takes effect: 30d, 28d, 14d, or 7d
labels:
owner: "finance-team" # Global label, propagated to all generated recording rules
slos:
- name: asm-slo2 # Unique SLO name within this CRD
objective: "99.9" # Target percentage as a string
labels:
description: "service availability description"
sli:
plugin:
id: availability # Plugin type: availability or latency
options: # Plugin-specific options
filter: request_protocol="http" # PromQL label filter
alerting:
name: asm-alert # Alert rule name
labels:
category: "availability"
annotations:
summary: "High error rate on requests"
pageAlert: # High-severity, page-level alert
labels:
severity: "10"
ticketAlert: # Low-severity, ticket-level alert
labels:
channel: "channel - call"
以下の表は、主要なフィールドをまとめたものです。フィールドの詳細については、「CRD フィールドリファレンス」をご参照ください。
| フィールド | 説明 |
|---|
namespace | カスタムリソースの名前空間。ターゲットサービスの名前空間と一致する必要があります。 |
service | ターゲットサービス名。 |
period | SLO が有効になる期間。有効な値: 30d、28d、14d、または 7d。 |
objective | 文字列としての目標パーセンテージ。有効範囲: (0, 100]。 |
plugin | SLI タイプとオプションを定義します。id を availability または latency に設定し、対応するオプションを構成します。「プラグインフィールド」をご参照ください。 |
CRD フィールドリファレンス
metadata フィールド
| フィールド | タイプ | 必須 | 説明 | 例 |
|---|
name | String | はい | カスタムリソース名。形式:asm-slo-{namespace}-{service}。 | asm-slo-default-httpbin |
namespace | String | はい | カスタムリソースの名前空間。ターゲットサービスの名前空間と一致する必要があります。 | default |
labels | Object | いいえ | バックエンドによって自動入力されます。手動で設定しないでください。システムは 2 つのラベルを追加します。asm-target-namespace (サービスの名前空間) と asm-target-service (サービス名。spec.service と同じ) です。 | labels:
asm-target-namespace: default
asm-target-service: httpbin
|
spec フィールド
| フィールド | タイプ | 必須 | 説明 | 例 |
|---|
service | String | はい | ターゲットサービス名。 | httpbin |
period | String | はい | SLO が有効になる期間。有効な値: 30d (30 日)、28d、14d、7d。 | 30d |
labels | Object | いいえ | グローバルラベル。この CRD 内の SLO によって生成されるすべての記録ルールの labels フィールドに伝播されます。 | labels:
global: "some-label"
|
slos | Array | はい | 1 つ以上の SLO 定義。少なくとも 1 つのエントリが必要です。 | - |
slos[] フィールド
slos 配列の各エントリは、その目標、SLI 構成、およびアラート機能ルールを持つ単一の SLO を定義します。
| フィールド | タイプ | 必須 | 説明 | 例 |
|---|
name | String | はい | SLO 名。 | asm-slo |
objective | String | はい | 浮動小数点数として解析可能な文字列としての目標パーセンテージ。有効範囲: (0, 100]。 | "99.9" |
labels | Object | いいえ | SLO レベルのラベル。この SLO によって生成されるすべての記録ルールの labels フィールドに伝播されます。 | labels:
recordlabel: aaa
|
sli | Object | はい | サービスレベル指標 (SLI) 構成。「sli フィールド」をご参照ください。 | - |
alerting | Object | はい | アラートルール構成。「alerting フィールド」をご参照ください。 | - |
sli フィールド
sli オブジェクトには、単一のフィールド plugin が含まれます。
| フィールド | タイプ | 必須 | 説明 | 例 |
|---|
plugin | Object | はい | SLI がどのように測定されるかを定義するプラグイン構成。「プラグインフィールド」をご参照ください。 | - |
プラグインフィールド
プラグインは SLI 測定タイプを決定します。プラグインを選択するには id を設定し、対応する options を構成します。
| フィールド | タイプ | 必須 | 説明 | 例 |
|---|
id | String | はい | プラグインタイプ。有効な値: availability (サービス可用性)、latency (サービスレイテンシー)。 | latency |
options | Map | 条件付き | プラグインオプション。選択したプラグインに必須フィールドがある場合に必要です。たとえば、latency には bucket が必要です。以下のオプションテーブルをご参照ください。 | options:
bucket: "300"
|
availability のオプション
id が availability に設定されている場合、以下のオプションが利用可能です。
| フィールド | タイプ | 必須 | 説明 | 例 |
|---|
filter | String | いいえ | PromQL ラベルフィルター。Prometheus は、このフィルターに一致するリクエストに対してのみメトリックを計算します。 | request_protocol="http" |
latency のオプション
id が latency に設定されている場合、以下のオプションが利用可能です。
| フィールド | タイプ | 必須 | 説明 | 例 |
|---|
bucket | String | はい | 整数として解析可能な文字列としてのレイテンシー目標。 | "300" |
filter | String | いいえ | PromQL ラベルフィルター。Prometheus は、このフィルターに一致するリクエストに対してのみメトリックを計算します。 | request_protocol="http" |
exclude_errors | Boolean | いいえ | レイテンシー計算からエラーリクエストを除外するかどうか。デフォルト:false。true の場合、5XX 応答コードを持つリクエストは除外されます。false の場合、すべてのリクエストが含まれます。 | false |
alerting フィールド
| フィールド | タイプ | 必須 | 説明 | 例 |
|---|
name | String | はい | アラートルール名。 | asm-alert |
labels | Map | いいえ | アラートルールにアタッチされたラベル。 | labels:
alertlabel: bbb
|
annotations | Map | いいえ | アラートルールにアタッチされたアノテーション。 | annotations:
alertanno: ccc
|
pageAlert | Object | いいえ | ページレベルの高重大度アラート構成。「pageAlert フィールド」をご参照ください。 | - |
ticketAlert | Object | いいえ | チケットレベルの低重大度アラート構成。「ticketAlert フィールド」をご参照ください。 | - |
pageAlert フィールド
| フィールド | タイプ | 必須 | 説明 | 例 |
|---|
disable | Boolean | いいえ | このアラートを有効にするかどうか。デフォルト:true (有効)。無効にするには false に設定します。 | false |
labels | Map | いいえ | このアラートにアタッチされたラベル。 | labels:
pagelabel: ddd
|
annotations | Map | いいえ | このアラートにアタッチされたアノテーション。 | annotations:
pageanno: eee
|
ticketAlert フィールド
| フィールド | タイプ | 必須 | 説明 | 例 |
|---|
disable | Boolean | いいえ | このアラートを有効にするかどうか。デフォルト:true (有効)。無効にするには false に設定します。 | false |
labels | Map | いいえ | このアラートにアタッチされたラベル。 | labels:
pagelabel: ddd
|
annotations | Map | いいえ | このアラートにアタッチされたアノテーション。 | annotations:
pageanno: eee
|