このページでは、Google Distributed Cloud(GDC)エアギャップ アプライアンスに MonitoringRule カスタム リソースをデプロイして、既存の指標から新しい指標を生成する方法について説明します。
記録ルールを使用すると、頻繁に使用される式や計算コストの高い式を事前に計算できるため、ダッシュボードとアラートのパフォーマンスが向上します。MonitoringRule カスタム リソース内で定義されたこれらのルールは、既存の指標から新しい時系列指標を生成し、データのオブザーバビリティを高めます。
事前計算された結果を保存することで、記録ルールは式が必要になるたびに冗長な計算を排除します。このメソッドを使用すると、特に同じ式を繰り返し評価する必要がある複雑なダッシュボードやアラートで、クエリ時間が大幅に短縮されます。基本的に、MonitoringRule リソースを使用すると、必要な計算を記録ルール内で指定することで、既存の指標から新しい指標を導出できます。
始める前に
MonitoringRule カスタム リソースを管理するために必要な権限を取得するには、関連する MonitoringRule ロールのいずれかを付与するよう組織 IAM 管理者またはプロジェクト IAM 管理者に依頼してください。
必要なアクセスレベルと権限に応じて、組織またはプロジェクトでこのリソースの作成者、編集者、閲覧者のロールを取得できます。詳細については、IAM 権限を準備するをご覧ください。
録画ルールを作成する
記録ルールを作成するには、記録された指標の名前と、数値を生成する有効な式を定義します。この式は、評価されると新しい指標を生成します。プロジェクトの Namespace の Management API サーバーにカスタム リソースをデプロイして、記録ルールを作成します。
記録ルールの詳細については、https://grafana.com/docs/loki/latest/rules/ をご覧ください。
次の手順で、プロジェクト Namespace に記録ルールを作成します。
- レコーディング ルールを作成する GDC プロジェクトを特定します。
MonitoringRuleカスタム リソースを定義する YAML ファイルを作成します。完全な
MonitoringRule仕様には、指標ベースの記録ルールの例が示されています。詳細については、API リファレンス ドキュメントをご覧ください。必要に応じて、YAML ファイル内の次の値を置き換えます。
フィールド名 説明 namespaceプロジェクトの Namespace。 nameルール構成の名前。 intervalルール評価間隔の期間(秒単位)。 limit省略可。アラートの最大数。アラートを無制限にする場合は 0に設定します。recordRules新しい指標を計算するための定義。 recordRules.record新しい指標のレコード名。値は、結果が保存される時系列を定義する有効な指標名にする必要があります。 recordRules.expr指標ルールの PromQL 式。数値に評価される必要があります。 recordRules.labels省略可。新しい指標に追加または上書きするラベルの Key-Value ペア。 YAML ファイルを保存します。
MonitoringRule構成を、記録ルールと同じ Namespace 内の Management API サーバーに適用します。kubectl --kubeconfig KUBECONFIG_PATH apply -f MONITORING_RULE_NAME.yaml次のように置き換えます。
KUBECONFIG_PATH: Management API サーバーの kubeconfig ファイルへのパス。MONITORING_RULE_NAME:MonitoringRule定義ファイルの名前。
MonitoringRule の仕様を完了
MonitoringRule カスタム リソースには、オブザーバビリティのために既存の指標に基づいて新しい指標を作成する条件を記述する記録ルールが含まれています。
次の YAML ファイルは、MonitoringRule カスタム リソースのテンプレートを示しています。詳細については、API リファレンス ドキュメントをご覧ください。
# Configures either an alert or a target record for precomputation.
apiVersion: monitoring.gdc.goog/v1
kind: MonitoringRule
metadata:
# Choose a namespace that matches the project namespace.
# The alert or record is produced in the same namespace.
namespace: PROJECT_NAMESPACE
name: MONITORING_RULE_NAME
spec:
# Rule evaluation interval.
interval: 60s
# Configure the limit for the number of alerts.
# A value of '0' means no limit.
# Optional.
# Default value: '0'
limit: 0
# Configure recording rules to generate new metrics based on existing metrics.
# Recording rules precompute expressions that are frequently needed or computationally expensive.
# Results are saved as a new set of time series.
recordRules:
# Define the time series where you want to write the recording rule.
# The value must be a valid metric name.
- record: MyMetricsName
# Define the PromQL expression to evaluate for this rule.
expr: rate({service_name="bob-service"} [1m])
# Define labels to add or overwrite.
# Map of key-value pairs.
# Optional.
labels:
verb: read
次のように置き換えます。
PROJECT_NAMESPACE: プロジェクトの Namespace。MONITORING_RULE_NAME:MonitoringRule定義ファイルの名前。
LoggingRule 個のレコードルール
LoggingRule CR には、既存のログに基づいて新しい指標を計算する条件を記述したレコードルールが含まれています。
次の YAML ファイルは、LoggingRule CR の recordRules フィールドのテンプレートを示しています。
# Configures either an alert or a target record for precomputation
apiVersion: logging.gdc.goog/v1alpha1
kind: LoggingRule
metadata:
# Choose namespace that matches the project's namespace
# Note: The alert or record will be produced in the same namespace
namespace: g-fleetns-a
name: alerting-config
spec:
# Choose which log source to base alerts on (Operational/Audit/Security Logs)
# Optional, Default: Operational
source: <string>
# Rule evaluation interval
interval: <duration>
# Configure limit for number of alerts (0: no limit)
# Optional, Default: 0 (no limit)
limit: <int>
# Configure record rules to generate new metrics based on pre-existing logs.
# Record rules generate metrics based on logs.
# Use record rules for complex alerts, which query the same expression repeatedly every time they are evaluated.
recordRules:
# Define which timeseries to write to (must be a valid metric name)
- record: <string>
# Define LogQL expression to evaluate for this rule
# https://grafana.com/docs/loki/latest/rules/
expr: <string>
# Define labels to add or overwrite
# Optional, Map of {key, value} pairs
labels:
<labelname>: <labelvalue>
...