メインコンテンツへスキップ

Splunk Lantern

外部依存関係に関するアラート用の API テスト JSON ペイロードの作成

この記事では、カスタム変数と JavaScript を使用して API からデータを取得し、レスポンスから有用な情報を解析し、そのデータを別の API に POST するカスタムペイロードで使用する方法を説明します。

ステータス API の出力は次の目的で使用します。 GitHub クラウドフレア Splunk Synthetic Monitoring API テストを使用して Splunk Observability Cloud に送信する新しい JSON メトリクスペイロードを作成し、以下のメトリクスを作成するには github.status そして cloudflare.status 。これらのメトリクスにより、サードパーティーの依存関係が停止したときを考慮に入れた、よりスマートなアラートを作成できるようになり、アラートを通知したり、集約アラートのコンテキストとして使用したりするための有用なシグナルとなります。

このユースケースでの Splunk ソフトウェアの使い方

JavaScript エンジンについて

  • Splunk シンセティックモニタリングは V8 エンジンのみを提供します。 スクリプトの実行用。Node.js ランタイム環境が提供されていないため、Node.js の機能はサポートされていません。たとえば、を使用したファイルシステムへのアクセスはサポートされていません。 fs 、以下を使用した HTTP リクエスト http 、を使用したイベントループ setTimeout または類似の関数、または次のようなモジュール require または module.exports
  • API が戻ってくると予想される場合 null 値は、構文解析する前に JavaScript で適切に処理する必要があります。

GitHub API から取得

ここでは以下を使用します。 githubstatus.com API データを収集する最初の API エンドポイントとして。このエンドポイントには、以下のいずれかのインジケーターが含まれます。 noneminormajor 、または critical また、ブレンドされたコンポーネントの状態に関する人間による説明もあります。混合ステータスの例としては、「全システム稼働」、「部分的なシステム停止」、「重大なサービス停止」などがあります。これら 2 つのインジケーターを使用して JSON ペイロードを作成します。

GitHub API は次のような本文を返します。

 { 
    "page": 
    { 
        "id": "kctbh9vrtdwd", 
        "name": "GitHub", 
        "url": "https://www.githubstatus.com", 
        "time_zone": "Etc/UTC", 
        "updated_at": "2025-04-10T09:51:56.432Z" 
    }, 
    "status": 
    { 
        "indicator": "none", 
        "description": "All Systems Operational" 
    } 
} 

このレスポンスを受け取ったら、リクエスト設定の Validation 部分を JavaScript 抽出とともに使用して、レスポンスボディをカスタム変数に抽出します。 custom.response これを JavaScript と組み合わせて使用すると、有用な情報を解析できます。

javascript
var apiResponse = JSON.parse(custom["response"]); 
  
function createGaugeEntry(apiResponse) { 
    var value = (apiResponse.status.indicator === "none") ? "0" : "1"; 
  
    var gaugeEntry = { 
        "gauge": [ 
            { 
                "metric": "github.status", 
                "dimensions": { 
                    "description": apiResponse.status.description, 
                    "indicator": apiResponse.status.indicator 
                }, 
                "value": value 
            } 
        ] 
    }; 
    return gaugeEntry; 
} 
var gaugeEntry = createGaugeEntry(apiResponse); 
custom.payload_github = gaugeEntry; 

JavaScript (以下のスクリーンショットを参照) は次のようになります。

  1. 以下を解析します。 custom.response 変数を JSON として出力します。
  2. から確立する関数を作成する status.indicator メトリクスの値を 1 (つまり、次のようなステータス) に設定する必要がある場合 none ) または 0
  3. 形式に合わせて JSON ペイロードを作成する データポイントインジェスト API が想定していること 作成したメトリクスを送信する場所。
  4. 受け取った解析済みの JSON 応答のフィールドを使用して、次のディメンションを更新します。 description そして indicator Splunkオブザーバビリティクラウドでグラフ化してアラートする1または0の値とともに、メトリックスに含まれます。
  5. 作成した JSON を、という別のカスタム変数として出力します。 custom.payload_github
  6. 作成したペイロードが空でないことを確認します。

clipboard_eea9e57926f7164381b1c3701c35126bf.png

クラウドフレアAPIから取得

次に、でほぼ同じことを行います cloudflarestatus.com API。 このエンドポイントには、githubstatus.com API と同じインジケーターと説明が含まれています。繰り返しますが、これら 2 つのインジケーターを使用して JSON ペイロードを作成します。

CloudFlare API は次のようなボディを返します。

{ 
    "page": 
    { 
        "id": "yh6f0r4529hb", 
        "name": "Cloudflare", 
        "url": "http://www.cloudflarestatus.com", 
        "time_zone": "Etc/UTC", 
        "updated_at": "2025-04-10T15:02:38.563Z" 
    }, 
    "status": 
    { 
        "indicator": "minor", 
        "description": "Minor Service Outage" 
    } 
}  

この応答を受け取ったら、同じ検証を行います。 前のステップで詳しく説明したように レスポンスボディをカスタム変数に抽出するには custom.response これを JavaScript と組み合わせて使用すると、有用な情報を解析して変数にまとめることができます。 custom.payload_cloudflare

javascript
var apiResponse = JSON.parse(custom["response"]); 
  
function createGaugeEntry(apiResponse) { 
    var value = (apiResponse.status.indicator === "none") ? "0" : "1"; 
  
    var gaugeEntry = { 
        "gauge": [ 
            { 
                "metric": "cloudflare.status", 
                "dimensions": { 
                    "description": apiResponse.status.description, 
                    "indicator": apiResponse.status.indicator 
                }, 
                "value": value 
            } 
        ] 
    }; 
  
    return gaugeEntry; 
} 
  
var gaugeEntry = createGaugeEntry(apiResponse); 
  
custom.payload_cloudflare = gaugeEntry; 

最後に、作成したペイロードが空でないことを確認します。

clipboard_ebc78fe761f619bb99fdbee7875166b9f.png

2 つのカスタムペイロード変数を作成したら、次にそれらを組み合わせて最終リクエストを送信し、Splunk Observability Cloud でメトリクスを作成します。

API インジェストトークンのグローバル変数の作成

GitHub と CloudFlare のステータスに関するメトリクスを Splunk オブザーバビリティクラウドに送信するには、有効な Splunk オブザーバビリティクラウドインジェストトークンを含むグローバル変数を Splunk Synthetic Monitoring で作成する必要があります。

Splunk Synthetic モニタリングインターフェースで、ギアをクリックします clipboard_e99143e85ab5055b6c76546c01546e2fe.png アイコンをクリックして選択します。 グローバル変数

clipboard_e0c0b0841a49b05c49beee00778cf6f3c.png

をクリックします [変数を作成] ボタンをクリックし、以下を入力して変数を作成します。

  • 変数タイプ:環境
  • 変数名:env.o11y-ingest-token (または独自の名前)
  • 変数値:<Your valid Splunk Observability Cloud ingest token>
  • 値を隠す:クリックすると、UI とリクエストでこの値が編集されます。

clipboard_e94250f467e60624f18666e1a68fffcd2.png

この変数は POST リクエストで参照します。

Splunk オブザーバビリティクラウドデータポイントインジェストへの POST

Splunk Synthetic Monitoring API テストの最終段階は、2 つの JSON ペイロードを取得して、可能な限り 1 つのペイロードにまとめることです。 データポイントインジェスト API に送ってください。

POST リクエストは、次の宛先に作成します。 https://ingest.us1.signalfx.com/v2/datapoint セットアップステップでは、JavaScript を使用してこれらのペイロードを結合します。

この JavaScript は 2 つのカスタム変数を取ります。 custom.payload_github そして custom.payload_cloudflare そして、各カスタムペイロードを反復処理し、そのデータを新しい結合データ配列に追加する関数に渡します。ファイナル custom.payload 最後の POST のペイロード本体として使用する変数が返されます。その JavaScript は以下に含まれています。

javascript
var gaugePayloads = [ 
    JSON.parse(custom["payload_github"]), 
    JSON.parse(custom["payload_cloudflare"]) 
]; 
  
function combineMultipleGaugeEntries(payloads) { 
    var combinedGaugeArray = []; 
     
    for (var i = 0; i < payloads.length; i++) { 
        combinedGaugeArray = combinedGaugeArray.concat(payloads[i].gauge); 
    } 
  
    return { "gauge": combinedGaugeArray }; 
} 
  
var combinedGaugeEntry = combineMultipleGaugeEntries(gaugePayloads); 
  
custom.payload = combinedGaugeEntry; 
  • リクエストでは、データポイントインジェスト用の URL を使用してください。 https://ingest.us1.signalfx.com/v2/datapoint タイプを POST に設定します。
  • ペイロード本体の場合は、テンプレートを使用してペイロードを含めます {{custom.payload}}
  • で作成した環境変数を参照する、X-SF-Token に必要なリクエストヘッダーを 2 つ含めます API インジェストトークンのグローバル変数の作成 :
    • X-SF トークン: {{env.org_ingest_token}}
    • コンテンツタイプ: application/json
  • クリック 今すぐ試す テストの上部で、テストが正常に動作することを確認します。インジェスト API から 2XX レスポンスを返すようにしたい。
  • 400 エラーが発生した場合は、トークンが正しいことを確認してください。

指標をグラフ化する

グラフ化することで cloudflare.status そして github.status 外部の依存関係で問題が発生したときを簡単にグラフ化できるようになりました。これにより、アラートを知らせたり、集約アラートのコンテキストとして使用したりするのに便利なシグナルになります。コードリポジトリや CDN などの外部依存関係や、その他のサードパーティーの依存関係がダウンしたときに、ページングされたいと思う人はいません。

clipboard_e4c4b4297dbc11041f0d3b294e99d8fea.png

clipboard_e238288de63c4b582a3a375a1998368f7.png