New Relic を使用すると、アプリケーションに対して サービスレベル を実装し、 計画セッションやインシデント対応の際に UI から簡単に 結果を消費し、目的を望ましいユーザーエクスペリエンスに調整するために構成を段階的に反復することができます。
UI以外にも、 NerdGraph API Explorer を使用して、SLIとそのSLOの作成・編集を行うことができます。また、 Terraform Service Level resource を使用して、この設定を自動化することもできます。
重要
サービス レベルを作成するには、ユーザーは イベント対メトリクス ルールを変更および削除する権限が必要です。
SLOでSLIを作る
SLI が関連付けられているエンティティなど、SLI および SLO 設定の基本的な概念については、 「SLI および SLO の作成と編集」を参照してください。 また、そのドキュメントを参照して、 サービスとアプリケーションの最も一般的なインジケーターの例を見つけることもできます。
以下は、 serviceLevelCreate
ミューテーションクエリを使用してSLIを作成するNerdGraph呼び出しの例です。
mutation { serviceLevelCreate( entityGuid: "entityGuid" indicator: { name: "Latency below 0.25 seconds" description: "The proportion of valid requests that were served faster than 0.25s, which is considered to correspond to a good experience." events: { validEvents: { from: "Transaction", where: "entityGuid = 'entityGuid'" } goodEvents: { from: "Transaction" where: "entityGuid = 'entityGuid' and duration < 0.25" } accountId: accountId } objectives: { target: 99.5 timeWindow: { rolling: { count: 7, unit: DAY } } } } ) { id description }}
これらのフィールドを含んでいます。
entityGuid
: この SLI を関連付けるテンプレート (たとえば、 サービス、browser アプリケーション など ) の GUID。UI では、この GUID はエンティティ ページのSee metadata and manage tagsの下にあります。description
: 良いイベントを決定する選択された閾値を含む詳細な説明を使用します。- 例えば、可用性のSLIの場合、"The proportion of valid requests that were served without errors "のような内容を含める。
- また、レイテンシーSLIの場合は、「良い体験に相当すると考えられる0.25秒よりも速く提供された有効なリクエストの割合」などの説明を記載します。
accountId
: サービスまたはbrowserアプリケーションが属するアカウントの ID。これには、SLI/SLO 計算用の NRDB データが含まれます。badEvents.from
,badEvents.where
- 不正なイベント
SELECT count(*) FROM badEvents.from WHERE badEvents.where
を定義するNRQLクエリには、これらのFROM
}句とWHERE
句が必要です。 - 有効なイベントと不良なイベントからSLIを定義した場合は、
goodEvents
オブジェクトを空のままにします。
- 不正なイベント
goodEvents.from
,goodEvents.where
- 適切なイベント
SELECT count(*) FROM goodEvents.from WHERE goodEvents.where
を定義するNRQLクエリには、これらのFROM
}句とWHERE
句が必要です。 - 有効で適切なイベントからSLIを定義した場合は、
badEvents
オブジェクトを空のままにします。
- 適切なイベント
validEvents.from
,validEvents.where
- これらは、有効なイベントを定義するNRQLクエリの
FROM
およびWHERE
句であり、結果はSELECT count(*) FROM validEvents.from WHERE validEvents.where
になります。
- これらは、有効なイベントを定義するNRQLクエリの
name
: サービスレベルの概要を理解するのに役立つ、SLI の短いカテゴリ名。 SLI 定義に関係する特定のオプションとフィルターを含めることをお勧めします。 例:- 入手方法
- 4秒以下のレイテンシー
- 0.1以下のデスクトップ用CLS
objectives
: SLI の目標 (SLO) の配列。target
:SLOの目標、最大100.00。このフィールドは、最大5桁の小数点以下をサポートします。- ユーザーが現在のエクスペリエンスに満足している場合は、SLOのパーセンテージを現在のベースラインに合わせて設定してください。例えば、SLIの良い出来事を判断するために使われるパーセンタイルです。
timeWindow.rolling.count
:SLOを計算するために考慮される期間の長さ。サポートされている値は、1
、7
、14
、28
、および30
です。timeWindow.rolling.unit
:DAY
はサポートされている値です。
使用 SELECT
オプションの SELECT
属性があり、デフォルトで count(*)
に設定されます。より複雑なシナリオの場合は、 select
を使用して、クエリするメトリックまたはイベント プロパティを明示的に指定できます。 SELECT
では、 SUM
関数とワイルドカード (%
) もサポートされています。より複雑な SELECT
構成の例を見てみましょう。
mutation { serviceLevelCreate( entityGuid: "entityGuid" indicator: { name: "Success request" description: "The proportion of success requests count is 99% that the total count" events: { validEvents: { select: { function: SUM, attribute: "http.request.status.%.count" } from: "Metric" } goodEvents: { select: { function: SUM, attribute: "http.request.status.2%.count" } from: "Metric" } accountId: accountId } objectives: { target: 99.5 timeWindow: { rolling: { count: 7, unit: DAY } } } } ) { id description }}
events
のプロパティ validEvents
と goodEvents
に select
含まれていることに注目してください。選択では、機能を設定できます。
COUNT
: デフォルトの関数。結果の数をカウントします。SUM
: 選択したイベント/メトリックのすべての値を合計します。
この例のもう 1 つの重要な違いは、同じ形式ですべてのメトリクスの値をクエリするためにワイルドカード (%
) を使用していることです。アプリケーションがステータス別のリクエスト数 (たとえば、 http.request.status.200.count
、 http.request.status.201.count
、 http.request.status.400.count
など) をレポートしていると想像してください。クエリは、ワイルドカードを使用して一致するすべてのメトリクス名を合計します。
APMサービスのSLIの構成を取得する
このクエリを使用して、 id
を含むSLIの構成を取得します。
{ actor { entity(guid: "entityGuid") { guid name serviceLevel { indicators { createdAt createdBy { email } description entityGuid id name objectives { target timeWindow { rolling { count unit } } } } } } }}
SLIのSLOの更新
serviceLevelUpdate
ミューテーションを使用して、SLIごとに1つ以上のSLOを定義します。SLIのid
を取得するには、上記のクエリを使用します。
mutation { serviceLevelUpdate( id: "indicators.id" indicator: { objectives: { target: 99.00 timeWindow: { rolling: { count: 7, unit: DAY } } } } ) { id }}