はじめに

私が開発運甚を担圓しおいる瀟内サヌビスの䞀぀に「MSPの監芖業務の䞀次察応を自動化する」システムがありたす。
ある条件に則ったPagerDutyむンシデント(以䞋むンシデント)が登録されるず事前に蚭定された䞀次察応シナリオを実行するずいうもので、PagerDutyを掻甚する圓瀟の監芖業務の䞀翌を担っおいたす。

この瀟内サヌビスではMSPをはじめずしたむンシデントの閲芧者に察する補足情報ずしお PagerDutyのNotes (以䞋ノヌト)を利甚しおいたす。
サヌビスの凊理内容や凊理結果を随時ノヌトに蚘録し、あずから参照できるようになっおいたす。

ノヌトはたいぞん䟿利ですが、より端的な情報を䌝えるこずができるような機胜はないかず探したずころ「カスタムフィヌルド」ずいう機胜が今幎(2023幎)リリヌスされたので調べた内容をたずめたす。

カスタムフィヌルドずは

公匏ドキュメントより。

カスタムフィヌルドを䜿甚するず、むンシデントのラむフサむクルを通じお、PagerDutyむンシデントを重芁か぀有甚なメタデヌタで豊かにするこずができたす。お奜みのデヌタを柔軟に定矩し、むンシデントが衚瀺する情報を暙準化するこずができたす。たた、この機胜により、耇数の既存システムからデヌタを集玄し、むンシデント察応時にその情報を入力するこずができたす。

仕様をたずめるず以䞋のずおり。

  • 1぀のカスタムフィヌルド 「フィヌルド名(name)」ず「フィヌルド倀(value)」のペア
  • 远加したフィヌルドはPagerDutyアカりント単䜍で共通しお利甚できる
    • フィヌルドの远加・線集・削陀にはAdminもしくはAccount Owner暩限が必芁
  • むンシデントごずに各フィヌルドの倀を蚭定できる
    • 倀の線集はUser暩限でも可胜
  • 9皮類のフィヌルドのデヌタ型が甚意されおいる(埌述)

なおカスタムフィヌルドが利甚できる料金プランは Business および Digital Operations です。

●ノヌトずの違い

ノヌト (Notes) カスタムフィヌルド (Custom Fields)
远加できる数 2,000ä»¶/1むンシデント 15フィヌルド/1アカりント
1件あたり最倧文字数 65,535文字 200文字 (各フィヌルドごず)
デヌタ型 なし – Text
– Single select
– Multiple select
– Tag
– URL
– Checkbox
– Datetime
– Decimal
– Integer
※詳现はドキュメント参照
衚瀺される堎所 – むンシデント詳现ペヌゞ (右偎)
– むンシデント詳现 > Timeline
– むンシデント詳现ペヌゞ
必芁な暩限 正確な情報は芋぀けられなかったものの基本的な暩限であればUser以䞊、高床な暩限であればResponder以䞊あれば远加できるず思いたす ・フィヌルドの远加/線集/削陀
 → AdminもしくはAccount Owner
・フィヌルドの衚瀺・倀の線集
 → むンシデントの衚瀺・線集できるナヌザヌであれば可胜(おそらくノヌトず同じ)
線集・削陀 远加埌に線集・削陀できない フィヌルド倀を蚭定埌に線集・削陀可胜
その他特城 ノヌト内のURLはリンクに自動倉換される

むンシデント察応者に察しお远加や補足ずなる情報を提䟛するずいう機胜は共通しおいたすが、

ノヌト
→ むンシデント詳现のTimelineタブでも衚瀺できるこずから「時系列を意識したメモを远加・掲茉する堎所」
カスタムフィヌルド
→ 様々なデヌタ型が甚意されおいるこずから「連携する他のシステムから暙準化されたデヌタ(情報)を掲茉する堎所」

ずいった特城があるようです。

API

REST APIが甚意されおおり、倧きく「カスタムフィヌルド自䜓の远加・線集・削陀」ず「各むンシデントに蚭定されたカスタムフィヌルドの倀の取埗・線集」に分かれたす。

●カスタムフィヌルドの远加・線集・削陀

API Reference ぞのリンクを茉せただけですが、、

フィヌルド本䜓ず、リスト型フィヌルドのオプションの取埗・远加・線集・削陀ず、䞀般的なCRUDが甚意されおいたす。
たた䞊述のずおり远加や線集するにはAdmin以䞊の暩限を持぀ナヌザヌが発行したAPIキヌが必芁です。
カスタムフィヌルドの線集や削陀は機胜の䞻旚からしお頻繁に行われるものではないず思いたすし、アカりント党䜓に圱響するため慎重を芁したす。
可胜であればPagerDutyのコン゜ヌル画面で確認しながら実斜するのが安党かず思いたす。

●各むンシデントに蚭定されたカスタムフィヌルドの倀の取埗・線集

むンシデントごずに蚭定されたフィヌルド倀(value)は取埗・線集の2皮類が甚意されおおり、カスタムフィヌルド本䜓の操䜜よりもこちらがメむンで利甚するAPIになるず思いたす。
䞊蚘リンク先のリファレンスにあるサンプルコヌドのずおりに実行すれば簡単に確認できたす。

取埗は “Get an incident” でも可胜

むンシデントのデヌタを取埗する “Get an incident” ずいうAPIがありたす。
プログラム䞊では最も利甚されるAPIの䞀぀ではないかず思いたすが、ク゚リパラメヌタのオプションを指定するこずで取埗したむンシデントデヌタ内にカスタムフィヌルドも含めるこずができたす。

# ク゚リパラメヌタ `include[]` で "custom_fields" を含める
https://api.pagerduty.com/incidents/?include[]=custom_fields

少し長いですが以䞋のようなレスポンスが返っおきたす(倀は適圓に倉曎しおいたす)
䞋から2番目に "custom_fields" がありたす。

{
    "incident": {
        "title": "xxxx",
        "incident_number": 9999999,
        "id": "QXXXXXXXXXXXXX",
        "summary": "xxxx",
        "self": "https://api.pagerduty.com/incidents/QXXXXXXXXXXXXX",
        "incidents_responders": [],
        "status": "resolved",
        "escalation_policy": {
            "html_url": "https://mspdev.pagerduty.com/escalation_policies/PXXXXXX",
            "id": "PXBS8UU",
            "self": "https://api.pagerduty.com/escalation_policies/PXXXXXX",
            "summary": "Default",
            "type": "escalation_policy_reference"
        },
        "teams": [],
        "resolved_at": "2023-12-00T00:02:00Z",
        "type": "incident",
        "resolve_reason": null,
        "priority": null,
        "updated_at": "2023-12-00T00:01:00Z",
        "created_at": "2023-12-00T00:00:00Z",
        "html_url": "https://mspdev.pagerduty.com/incidents/QXXXXXXXXXXXXX",
        "impacted_services": [
            {
                "html_url": "https://mspdev.pagerduty.com/service-directory/PZZZZZZ",
                "id": "PPOPWIV",
                "self": "https://api.pagerduty.com/services/PZZZZZZ",
                "summary": "xxxx",
                "type": "service_reference"
            }
        ],
        "basic_alert_grouping": null,
        "assigned_via": "escalation_policy",
        "pending_actions": [],
        "last_status_change_at": "2023-12-00T00:00:00Z",
        "assignments": [],
        "first_trigger_log_entry": {
            "html_url": "https://mspdev.pagerduty.com/incidents/QXXXXXXXXXXXXX/log_entries/RXXXXXXXXXXXXXXXXXXXXXXXXX",
            "id": "RXXXXXXXXXXXXXXXXXXXXXXXXX",
            "self": "https://api.pagerduty.com/log_entries/RXXXXXXXXXXXXXXXXXXXXXXXXX",
            "summary": "Triggered through the website.",
            "type": "trigger_log_entry_reference"
        },
        "responder_requests": [],
        "last_status_change_by": {
            "html_url": "https://mspdev.pagerduty.com/users/PXXXXXX",
            "id": "PXXXXXX",
            "self": "https://api.pagerduty.com/users/PYYYYYY",
            "summary": "XXXXXX",
            "type": "user_reference"
        },
        "urgency": "high",
        "is_mergeable": true,
        "acknowledgements": [],
        "subscriber_requests": [],
        "service": {
            "html_url": "https://mspdev.pagerduty.com/service-directory/PXXXXXX",
            "id": "PXXXXXX",
            "self": "https://api.pagerduty.com/services/PXXXXXX",
            "summary": "xxxx",
            "type": "service_reference"
        },
        "description": "xxxx",
        "incident_key": "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx",
        "alert_grouping": null,
        "custom_fields": [
            {
                "data_type": "string",
                "description": "䌚瀟の名前",
                "display_name": "䌚瀟名",
                "field_type": "single_value",
                "id": "PXXXXXX",
                "name": "name",
                "type": "field_value",
                "value": "iret, inc."
            },
            {
                "data_type": "url",
                "description": null,
                "display_name": "ホヌムペヌゞURL",
                "field_type": "single_value",
                "id": "PXXXXXX",
                "name": "website_url",
                "type": "field_value",
                "value": "https://iret.co.jp"
            }
        ],
        "alert_counts": {
            "all": 0,
            "resolved": 0,
            "triggered": 0
        }
    }
}

このようにしおおけば埌からカスタムフィヌルドが必芁になっおもこのデヌタから抜き出せるのでリク゚ストを節玄できたす。
逆にカスタムフィヌルドの倀しかいらないのに “Get an incident” しおしたうず䞍芁なデヌタも぀いおくるので控えたほうが良いでしょう。

たずめ

カスタムフィヌルドを䜿うずPagerDutyアカりント党䜓に共通する項目であり぀぀、むンシデントごずに個別のデヌタ(倀)を茉せられるようになるこずがわかりたした。
仕様的には他のサヌビスから暙準化されたデヌタを掲茉するこずが意識されおいるようですが、むンシデント詳现ペヌゞの䞭倮あたりず目立぀堎所に衚瀺されるので、他サヌビスずの連携はなくおもむンシデントの察応者に圹立぀情報を茉せるような掻甚をしおいきたいず思いたす。