メインコンテンツまでスキップ

通報前ワークフロー

1. 通報前ワークフローとは

通報前ワークフローはシステムにおけるインシデントや障害が発生した際に、自動的にシステムの状況を判定して AMC による通報の有無を決定することができる機能です。
この機能により、パターンマッチ後に事前に設定したワークフローを実行し、システムの対処が必要な場合のみ通報を行うことができるようになります。

2. 通報前ワークフローの設定方法

パターン管理の通報前ワークフロー設定からワークフローの登録、編集、削除を行うことができます。
通報前ワークフロー設定のワークフロー選択ボタンを押下するとワークフロー設定画面が開きます。

caution

通報前ワークフローはパターンタイプが単発、集約、件数指定の場合のみご利用いただけます。

2-1-1. ワークフロー一覧画面

プロジェクトにて作成済みのワークフローが一覧として表示されます。
パターンの通報前ワークフローとして指定する場合は、ワークフロー一覧テーブルの選択ボタンを押下してください。

新しいワークフローを作成する場合は、ワークフロー一覧テーブルの右上にある+ボタンを押下すると登録画面に移動します。
作成済みのワークフローの編集を行う場合は、ワークフローの名前を押下して編集画面に移動します。

2-1-2. ワークフロー登録、編集画面

ワークフロー登録、編集画面は「基本情報」、「YAML」、「ワークフロー」の3つのタブで構成されます。

2-1-2-1. 基本情報

基本情報タブではワークフローの以下の情報を設定します。

項目名説明補足
名前ワークフローの名前を入力します。後から変更することが可能です。

2-1-2-2. YAML

YAMLタブではワークフローの定義をYAML形式のテキストで入力することができます。 ここで入力した内容はワークフロータブと連動します。

info

ワークフローの定義内容にエラーがある場合、他のタブへ切り替えることはできません。

2-1-2-3. ワークフロー

ワークフローの定義をGUI編集する画面です。 ここで定義した内容はYAMLタブと連動します。
フローの設定方法についてフローの登録方法を参照してください。

info

ワークフローの定義内容にエラーがある場合、他のタブへ切り替えることはできません。

3. 通報前ワークフローの実行結果の確認方法

エスカレーション履歴詳細の通報前ワークフローでワークフローの実行結果を確認できます。
ワークフロー実行後にAMCからの通報を停止する方法はワークフローの実行結果に応じて通報停止する方法を参照してください。

3.1. ワークフロー実行結果詳細

ワークフロー実行結果詳細は「ワークフロー」タブと「詳細情報」タブから構成されます。

「ワークフロー」タブではワークフロー図として実行結果を表示します。ワークフローに分岐が存在する場合、どの分岐で処理が実行されたかを確認することができます。 処理が正常終了したノードは緑、エラーが発生したノードは赤、実行されていないノードはグレーの線で表示されます。

「詳細情報」タブではワークフローへのインプットパラメータや出力を参照することができます。

info

実行結果のサイズが大きい場合、詳細情報タブに実行結果が表示されず「実行結果をダウンロード」ボタンが表示されます。
ボタンを押下すると、実行結果をJSON形式のファイルとしてダウンロードできます。

4. ワークフローの実行結果に応じて通報停止する方法

通報前ワークフローの終了ノードに通報停止メッセージを設定することでパターンに設定しているすべての通報を停止させることができます。
ワークフローによりシステムが正常に稼働していることが確認できた場合に不要な通報を行わないように制御できます。

ワークフローの終了ノードについてこちらを参照してください。

4-1. 通報停止メッセージ

ワークフローの終了ノードに下記のメッセージを設定することで通報を停止することができます。

{
"amc_do_report": false
}

4-2. 通報停止時のエスカレーション履歴詳細の表示

ワークフローによって通報停止が行われた場合は、エスカレーション履歴詳細の通報前ワークフロー結果に「成功(通報停止)」と表示されます。

4-3. 通報停止を行うワークフローのサンプル

通報前にシステムの稼働状態をチェックし、システムが正常に稼働できていない場合に通報を行うサンプルは下記です。

ワークフロー表示

HTTPステータスチェック部品を利用して、通報前にシステムの稼働状態をチェックします。

ステータスチェックが成功の場合の終了ノードに通報停止メッセージを設定します。

YAML表示

version: 1
tasks:
start:
action: core.pass
next: status_check
execute:
action: core.end
output:
result: error
status_check:
action: core.http_status_check
url: https://doc.amc.masterscope.jp/manual/
on_success: skip
on_failure: execute
skip:
action: core.end
output:
amc_do_report: false

5. フローの登録方法

5-1. フロー登録画面のレイアウト

項番項目名説明
(1)ワークフロー図ワークフローを描画するエリアです。余白領域をマウスドラッグするとスクロール、マウスホイールでズームイン・ズームアウトが行えます。
(2)ノードメニューワークフロー図に配置可能な部品の一覧です。部品をワークフロー図側へドラッグ&ドロップすることでノードとして配置できます。
(3)コントロールパネル各種操作を行うためのパネルです。ワークフロー図の拡大・縮小、表示領域の自動調整、編集ロック、ノードの自動配置を行うことができます。
(4)ノードワークフロー中で実行するタスクに対応する部品を矩形で表現したものです。部品の種類に応じて表示が異なります。
(5)接続ラインノード間の接続です。タスクの実行順序や分岐を表現します。

5-2. ノードの編集方法

項番項目名説明
(1)アイコン部品の種別を表すアイコンです。
(2)ノード名ノードの名前です。クリックすると編集することができます。
(3)設定ボタンクリックするとノードの設定画面を表示します。パス部品のように設定項目の存在しないノードの場合は表示されません。

ノードをワークフロー図に配置した際に Node_1, Node_2 のような名前が自動的に設定されますが、処理内容が把握しやすいように任意の名前を設定してください。 また、部品種別ごとに設定する項目があるので、設定ボタンをクリックして設定を行ってください。部品種別ごとの設定項目については各部品の説明を参照してください。

info
  • ノード名はフロー全体で一意となる名前を設定してください
  • ノード名の長さは 1 文字以上 64 文字以下で指定してください
  • ノード名として利用可能な文字は以下の通りとなります
    • 半角英数字
    • - および _

5-3. 接続ラインの編集方法

各ノードにはノード間を接続するためのハンドルが存在します。ハンドルは丸印で表現されます。また、ハンドルは入力用と出力用に分かれており、ノード上部に配置されているハンドルが入力用、下部に配置されているハンドルが出力用です。出力ハンドル同士や入力ハンドル同士での接続はできません。 出力/入力ハンドルをドラッグして接続先の入力/出力ハンドル上でドロップすることでノード間の接続ラインが作成されます。

すでに接続されているラインについてはラインの端から接続先ハンドルへドラッグ&ドロップを行うことで接続ラインを付け替えることができます。

特定の接続ラインを削除したい場合は、接続ラインをクリックして選択した後にDeleteキーまたはBackspaceキーを押下してください。

info
  • ひとつのハンドルに接続可能なラインの数は部品ごとに決まっています。分岐部品のBranchハンドル以外では1つのラインのみ接続可能です。
  • フローの先頭である開始ノードは入力ハンドルを持ちません。
  • フローの終端である終了部品のノードは出力ハンドルを持ちません。

6. JSONPath式

ワークフローの各ノードの設定項目ではJSONPath式を利用することができます。
JSONPath式は以下のような形式の文字列として記述します。

  • $.input
  • $.results.<ノード名>.status
  • $.output(<ノード名>)

ワークフロー実行時のインプットパラメータを参照する場合は $.input.<入力パラメータ名> の形式で、
先行ノードの実行結果(HTTPステータスコード)を参照する場合は$.results.<ノード名>.status 、実行結果(HTTPレスポンスボディ)を参照する場合は $.output(<ノード名>).<出力パラメータ名> の形式で記述します。

参照可能な値はワークフローの実行状況によって変わります。以下の図はワークフロー中で参照可能な値がどのように更新されるかを示しています。 初期状態では input 以外は何もありませんが、ワークフローの実行状態に応じて参照可能な値が results 配下に追加されていきます。

info

実行されていないノードについては results に値が格納されませんので、ワークフローに分岐を作成した場合はJSONPath式で存在しない値を参照しないように注意してください。

caution

通報前ワークフロー機能ではワークフロー実行時にインプットパラメータを指定することはできません。

6-1. JSONPath式の記述方法

JSONPath式には以下の2つの記述方法があります。

単体での使用

JSONPath式を単体で使用する場合は、そのまま記述します。

$.results.health_check.status
$.output(api_call).items[0].id

この形式は、値全体をJSONPath式の評価結果で置き換える場合に使用します。

文字列への埋め込み

JSONPath式を文字列の一部として埋め込む場合は、{{}} で囲んで記述します。

https://example.com/api/{{$.output(Node_1).user_id}}/profile
"User: {{$.output(api_call).name}}, Age: {{$.output(api_call).age}}"

この形式は、固定文字列とJSONPath式の評価結果を組み合わせる場合に使用します。複数のJSONPath式を1つの文字列内に埋め込むこともできます。

Key,Value形式でのJSONPath式の使用

Key,Value形式のJSON設定項目でJSONPath式を使用する場合は、Keyに .$ サフィックスを付与する必要があります。

{
"status.$": "$.results.health_check.status",
"first_item.$": "$.output(api_call).items[0]"
}

この形式は、終了部品の出力やリクエストヘッダなど、Key,Value形式で値を設定する項目で使用します。

6-2. 部品別 JSONPath式対応表

各部品の設定項目で使用できるJSONPath式は以下の通りです。

HTTPリクエスト部品

設定項目JSONPath式の使用使用可能な形式備考
メソッドGET/POST/PUT/DELETE
$.input.*
固定値またはJSONPath式で指定可能
URLhttp(s)://~ 形式
$.input.*
$.output(<ノード名>).<キー>
固定値またはJSONPath式で指定可能
リクエストヘッダKey,Value形式
$.input.*
$.output(<ノード名>).<キー>
Key:
英数字、-_、参照形式(.$)のみ利用可能

Value:
固定値またはJSONPath式を指定可能
リクエストクエリKey,Value形式
$.input.*
$.output(<ノード名>).<キー>
Key:
英数字、-_、参照形式(.$)のみ利用可能

Value:
固定値またはJSONPath式を指定可能
リクエストボディJSON形式:
Key,Value形式
$.input.*
$.output(<ノード名>).<キー>

x-www-form-urlencoded形式:
key=value形式
$.input.*
$.output(<ノード名>).<キー>
JSON形式:
Key:
英数字、-_、参照形式(.$)が利用可能
Value:
固定値またはJSONPath式を指定可能

x-www-form-urlencoded形式:
固定値またはJSONPath式を指定可能

<キー> 部分には以下を指定可能:

  • ドット(.)と英数字、ハイフン(-)、アンダースコア(_)の組み合わせ
  • または上記と[数値](配列インデックス)の組み合わせ

例: $.output(Node_1).response.items[0].id, $.output(api_call).data.users[5].name

HTTPステータスチェック部品

設定項目JSONPath式の使用使用可能な形式備考
URLhttp(s)://~ 形式
$.input.*
$.output(<ノード名>).<キー>
固定値またはJSONPath式で指定可能
リクエストヘッダKey,Value形式
$.input.*
$.output(<ノード名>).<キー>
Key:
英数字、-_、参照形式(.$)のみ利用可能

Value:
固定値またはJSONPath式を指定可能
リクエストクエリKey,Value形式
$.input.*
$.output(<ノード名>).<キー>
Key:
英数字、-_、参照形式(.$)のみ利用可能

Value:
固定値またはJSONPath式を指定可能

<キー> 部分には以下を指定可能:

  • ドット(.)と英数字、ハイフン(-)、アンダースコア(_)の組み合わせ
  • または上記と[数値](配列インデックス)の組み合わせ

例: $.output(Node_1).response.items[0].url, $.output(api_call).data.endpoints[2].path

HTTPポーリング部品

設定項目JSONPath式の使用使用可能な形式備考
メソッドGET/POST/PUT/DELETE
$.input.*
固定値またはJSONPath式で指定可能
URLhttp(s)://~ 形式
$.input.*
$.output(<ノード名>).<キー>
固定値またはJSONPath式で指定可能
リクエストヘッダKey,Value形式
$.input.*
$.output(<ノード名>).<キー>
Key:
英数字、-_、参照形式(.$)のみ利用可能

Value:
固定値またはJSONPath式を指定可能
リクエストクエリKey,Value形式
$.input.*
$.output(<ノード名>).<キー>
Key:
英数字、-_、参照形式(.$)のみ利用可能

Value:
固定値またはJSONPath式を指定可能
リクエストボディJSON形式:
Key,Value形式
$.input.*
$.output(<ノード名>).<キー>

x-www-form-urlencoded形式:
key=value形式
$.input.*
$.output(<ノード名>).<キー>
JSON形式:
Key:
英数字、-_、参照形式(.$)が利用可能
Value:
固定値またはJSONPath式を指定可能

x-www-form-urlencoded形式:
固定値またはJSONPath式を指定可能
ポーリング終了条件(変数名)$.self.body.<キー>
$.self.status
$.input.*
$.results.<ノード名>.status
$.output(<ノード名>).<キー>
ポーリング専用の$.self.*が使用可能

<キー> 部分には以下を指定可能:

  • ドット(.)と英数字、ハイフン(-)、アンダースコア(_)の組み合わせ
  • または上記と[数値](配列インデックス)の組み合わせ

例: $.self.body.response.items[0].status, $.output(Node_1).data.user_name

info

ポーリング終了条件の変数名について

HTTPポーリング部品の終了条件では、通常のJSONPath式に加えて以下の特殊な変数が使用できます:

  • $.self.body.<キー> - 現在のレスポンスボディの特定の値を参照
  • $.self.status - 現在のレスポンスのHTTPステータスコードを参照

分岐部品

設定項目JSONPath式の使用使用可能な形式備考
分岐条件(変数名)$.input.*
$.results.<ノード名>.status
$.output(<ノード名>).<キー>
条件評価に使用する変数を指定

<キー> 部分には以下を指定可能:

  • ドット(.)と英数字、ハイフン(-)、アンダースコア(_)の組み合わせ
  • または上記と[数値](配列インデックス)の組み合わせ

例: $.output(Node_1).response.data[0].value, $.output(api_check).result.error_code

終了部品

設定項目JSONPath式の使用使用可能な形式備考
出力Key,Value形式Key:
英数字、-_、参照形式(.$)が利用可能

Value:
固定値またはJSONPath式を指定可能
info

終了部品の出力について

JSONPath式で値を取り込む場合、Keyに .$ サフィックスを付与する必要があります。

例:

{
"status.$": "$.results.health_check.status",
"first_item.$": "$.output(api_call).items[0]"
}

パス部品

JSONPath式は使用しません(設定項目なし)。

7. ワークフロー部品

7-1. HTTPリクエスト

任意のURLに対してHTTPリクエストを実施し結果を取得します。

アクセス先のURL等はパラメータとして設定が必要です。

info

各設定項目でのJSONPath式の使用可否については、部品別 JSONPath式対応表を参照してください。

項目名説明補足
メソッドGET/POST/PUT/DELETEのいずれかを指定します。JSONPathによる指定も可能
URLアクセス先のURLを http(s)://~ 形式で指定します。JSONPathによる指定も可能
リクエストヘッダリクエストヘッダをJSONのKey,Value形式で指定します。JSONPathによる指定も可能
リクエストクエリクエリパラメータをJSONのKey,Value形式で指定します。JSONPathによる指定も可能
リクエストボディリクエストボディを指定します。JSONPathによる指定も可能
info

HTTPリクエスト部品は出力ハンドルをひとつしか持たないため、レスポンスに応じて処理を分岐したい場合は分岐部品と合わせて利用する必要があります。 GETリクエストのステータスコードに応じて分岐したい場合はHTTPステータスチェック部品を、レスポンスが特定の条件を満たすまで繰り返しリクエストを実行したい場合はHTTPポーリング部品を利用できます。

この部品は以下の出力を持ちます。

項目名説明
$.results.<ノード名>.statusHTTPステータスコード
$.output(<ノード名>)レスポンスボディ

7-2. HTTPステータスチェック

任意のURLに対してHTTP GETリクエストを実施し、レスポンスのステータスコードに応じて処理を分岐します。

アクセス先のURL等はパラメータとして設定が必要です。

info

各設定項目でのJSONPath式の使用可否については、部品別 JSONPath式対応表を参照してください。

項目名説明補足
URLアクセス先のURLを http(s)://~ 形式で指定します。JSONPathによる指定も可能
リクエストヘッダリクエストヘッダをJSONのKey,Value形式で指定します。JSONPathによる指定も可能
リクエストクエリクエリパラメータをJSONのKey,Value形式で指定します。JSONPathによる指定も可能

ステータスコードが200番台の場合はSuccessブランチへ、それ以外の場合はFailureブランチへ分岐します。

info

HTTPステータスチェック部品は1回のリクエストでステータスコードを確認します。繰り返しリクエストを実行して条件を満たすまで待機したい場合は、HTTPポーリング部品を利用してください。

この部品は以下の出力を持ちます。

項目名説明
$.results.<ノード名>.statusHTTPステータスコード
$.output(<ノード名>)レスポンスボディ

7-3. HTTPポーリング

任意のURLに対してHTTPリクエストを一定間隔で繰り返し実施し、レスポンスが指定した条件を満たすまでポーリングを継続します。

アクセス先のURL等はパラメータとして設定が必要です。

info

各設定項目でのJSONPath式の使用可否については、部品別 JSONPath式対応表を参照してください。

項目名説明補足
メソッドGET/POST/PUT/DELETEのいずれかを指定します。JSONPathによる指定も可能
URLアクセス先のURLを http(s)://~ 形式で指定します。JSONPathによる指定も可能
リクエストヘッダリクエストヘッダをJSONのKey,Value形式で指定します。JSONPathによる指定も可能
リクエストクエリクエリパラメータをJSONのKey,Value形式で指定します。JSONPathによる指定も可能
リクエストボディリクエストボディを指定します。JSONPathによる指定も可能
ポーリング終了条件ポーリングを終了する条件を設定します。下記の説明を参照
ポーリング回数ポーリングを実行する最大回数を指定します(1〜100)。
ポーリング間隔時間(分)ポーリング間隔を分単位で指定します(1〜300)。ポーリング回数×ポーリング間隔時間の上限は1440分(1日)

ポーリング終了条件

ポーリング終了条件はSimple条件、AND条件、OR条件を組み合わせて表現します。

Simple条件では、レスポンスの特定の値と比較値を評価する条件を設定できます。

評価方法として以下の演算子が利用可能です。

  • 存在する - 指定した変数が存在するかを評価
  • = (文字列) - 指定した変数と指定した値が文字列で一致するかを評価
  • = (数値) - 指定した変数と指定した値が数値で一致するかを評価
  • > (数値) - 指定した変数の値が指定した値より大きいかを評価
  • ≥ (数値) - 指定した変数の値が指定した値以上かを評価
  • < (数値) - 指定した変数の値が指定した値より小さいかを評価
  • ≤ (数値) - 指定した変数の値が指定した値以下かを評価

AND条件、OR条件は複数の条件を組み合わせて評価します。また、NOT条件を設定することで条件を反転させることもできます。

ポーリング終了条件を満たした場合はSuccessブランチへ、最大ポーリング回数に達しても条件を満たさなかった場合はFailureブランチへ分岐します。

info

ポーリング終了条件で指定できる変数については、JSONPath式のHTTPポーリング部品を参照してください。

この部品は以下の出力を持ちます。

項目名説明
$.results.<ノード名>.statusHTTPステータスコード
$.output(<ノード名>)レスポンスボディ

7-4. 分岐

ワークフローへの入力または先行部品の出力を参照して処理を分岐します。

info

分岐条件で使用できるJSONPath式については、部品別 JSONPath式対応表を参照してください。

分岐部品はDefaultハンドルとBranchハンドルの2つの出力ハンドルを持ちます。

Branchハンドルは複数のノードと接続することができ、接続したノードの数だけ分岐が追加されます。 Branchハンドルと接続しているノードが存在する場合、ノードの設定ボタンから分岐条件を設定することができます。 Defaultハンドルと接続したノードは分岐条件のいずれにも該当しない場合の分岐先となります。

分岐条件の設定画面は以下のような構成となります。

項番項目名説明
(1)分岐先ノード名分岐先ノードの名前が表示されます。
(2)分岐条件(1)に表示されたノードへ分岐する条件を設定するエリアです。

(1)と(2)のセットがBranchハンドルへ接続されたノードの数だけ表示されます。表示順はBranchハンドルへ接続した順番となります。 また、分岐条件は上から順番に評価されるため、複数の分岐条件が満たされた場合はその中で最も上に記述されているノードへ分岐します。

分岐条件の記述方法

分岐条件はSimple条件、AND条件、OR条件を組み合わせて表現します。

Simple条件では、変数の特定の値と比較値を評価する条件を設定できます。

評価方法として以下の演算子が利用可能です。

  • 存在する - 指定した変数が存在するかを評価
  • = (文字列) - 指定した変数と指定した値が文字列で一致するかを評価
  • = (数値) - 指定した変数と指定した値が数値で一致するかを評価
  • > (数値) - 指定した変数の値が指定した値より大きいかを評価
  • ≥ (数値) - 指定した変数の値が指定した値以上かを評価
  • < (数値) - 指定した変数の値が指定した値より小さいかを評価
  • ≤ (数値) - 指定した変数の値が指定した値以下かを評価

AND条件、OR条件は複数の条件を組み合わせて評価します。また、NOT条件を設定することで条件を反転させることもできます。

7-5. パス

何も処理を行わない部品です。

info

パス部品はワークフローの開始ノードとしての利用を想定しており、それ以外の用途はありません。

7-6. 終了

フローの終了を表す部品です。フローの終端には必ず終了部品を配置する必要があります。

終了部品ではワークフローの出力を設定できます。

info

出力でのJSONPath式の使用方法については、部品別 JSONPath式対応表を参照してください。

項目名説明補足
出力ワークフローの出力をKey,Value形式のJSONフォーマットで指定します。下記の説明を参照

出力に指定した値はワークフローの実行結果として参照可能な値となります。

ValueとしてJSONPath式を記述することで先行ノードの実行結果を取り込むことができます。 ただし、ValueにJSONPath式を記述する場合はKeyにはサフィックスとして .$ を付与する必要があります。

例えば、ノード名が health_check であるHTTPステータスチェック部品の出力項目 status を取り込む場合は以下のように記述します。

{
"status.$": "$.results.health_check.status"
}
info

JSONPath式で指定しているノード名が存在しない場合や存在しない出力項目を参照しようとした場合、ワークフロー実行時にエラーとなります。

8. 注意事項

  • パターンの通報前ワークフローに表示されるワークフロー名は、設定時点のワークフロー名です。設定後、ワークフロー名を変更された場合でも変更後のワークフロー名は表示されません。
  • エスカレーション履歴詳細のワークフロー名は実行時点でパターンに設定されているワークフロー名が表示されます。ワークフロー名を変更された場合でも変更後のワークフロー名は表示されません。
  • ワークフローのノード数やポーリング回数には上限があります。ノードや分岐が多い場合、処理が失敗することがあります。失敗した場合は、ポーリング回数や分岐、ノード数を減らすなど、フローの見直しを行ってください。