Instana 合成コードをCI/CDパイプラインに統合する

ソフトウェアチームが DevOps 手法を採用し、これまで以上に迅速にコードをプッシュする中、デプロイ後のアプリケーションの安定性とパフォーマンスを確保することが最重要課題となっている。

そこで Instana の合成監視が役立ちます。CI/CDワークフローの一環として合成テストを自動実行できるようにします。

デプロイ後の環境(ステージングまたはプレプロダクション)の準備を整えるため、 Instana の OnDemand Synthetic API を使用して、 Instana Synthetic監視をCI/CDパイプラインに直接統合できます。

以下の手順に従い、 Instana の合成監視をCI/CDパイプラインにシームレスに統合します。デプロイ後に Instana APIを使用して合成テストをトリガーし、結果を待機した後、自動的に応答します。これにより、デプロイの承認またはロールバックを実行します。

CI/CDにおいて Instana の合成監視を利用する理由とは?

Instana 合成監視により、以下のことが可能になります:

  • ユーザーに影響が出る前に問題を検出する
  • デプロイ後にオンデマンドで合成テストを実行する
  • プルリクエストやビルドパイプラインへのフィードバックを自動化する
  • パフォーマンスと可用性に基づいて本番環境へのデプロイをブロックまたは有効化する

使用された工具

  • GitHub
  • CI/CD自動化(パイプライン)
  • Instana 合成監視
  • サンプル・アプリケーション

統合のワークフロー

ステップ1: 開発者がコードを GitHub にプッシュする

プロセスは、開発者がコード変更を GitHub リポジトリにコミットしてプッシュした時点で開始されます。

git push origin new-feature
 

ステップ2: CI/CDパイプラインがビルドをトリガーする

CI/CDパイプラインは、 GitHub リポジトリを監視するように設定されています。 新たな変更を検出すると、自動的にビルドをトリガーします。

ビルドは GitHub, から最新のコードを取得し、コンパイルしてユニットテストまたは統合テストを実行します。

ステップ3: ビルド状況の報告

パイプラインは GitHub のコミットステータスを更新します。

  • ビルドが失敗した場合:

    • 本番環境へのデプロイがブロックされています - 問題が解決されるまでパイプラインは停止します。
  • ビルドが成功した場合:

    • パイプラインはデプロイメントに進みます。

ステップ4: アプリケーションのデプロイ

ビルドが成功した場合、パイプラインは継続し、アプリのアップグレードをステージング環境またはテスト環境にデプロイします。

ステップ5: Instana のオンデマンド合成テストを開始する

パイプラインは、更新された環境を対象に、既存の Instana Synthetic監視テスト( OnDemand, )を任意の数だけトリガーします。これには Instana api/synthetics/settings/tests/ci-cd API が使用されます。

これらのテストは、ユーザー操作をシミュレートし、アプリのパフォーマンス、レイテンシ、可用性を監視するために使用できます。

curl -s -X POST -H "Content-Type: application/json" -H "authorization: apiToken $INSTANA_API_TOKEN" \
  https://your-instance.instana.io/api/synthetics/settings/tests/ci-cd \
  -d '[ 
    {
      "testId":"<test-id>",
      "customization":{
        "locations":["<location-id>"],
        "configuration":{"timeout":"2m","retries":0}
      }
    }
  ]'
 

応答例:

[
  {
    "testResultId": "4e6451ba-7e47-487c-813d-5b95c73f391b",
    "testId": "<test-id>",
    "locationId": "<location-id>"
  }
] 
 

ステップ6: Instana が合成結果を報告します

パイプラインは、以下のAPIを使用して OnDemand テストの完了を監視できます: Instana api/synthetics/settings/tests/ci-cdAPI および前述のサンプルレスポンスに示されている内容 testResultId

curl -s -H "Content-Type: application/json" -H "authorization: apiToken $INSTANA_API_TOKEN" \
  https://your-instance.instana.io/api/synthetics/settings/tests/ci-cd/4e6451ba-7e47-487c-813d-5b95c73f391b
 

応答例:

{
  "testResultId": "4e6451ba-7e47-487c-813d-5b95c73f391b",
  "locationId": "<location-id>",
  "locationLabel": "<location-label>",
  "testId": "<test-id>",
  "testLabel": "<test-label>",
  "testType": "<test-type>",
  "runType": "OnDemand",
  "completed": true,
  "customization": {"configuration":{"retries":0,"timeout":"2m"}}
}
 

テストの実行 OnDemand 結果(成功または失敗)の詳細は、Synthetic Playbackを使用して取得 api/synthetics/results/listAPI できます。

curl -s -H "Content-Type: application/json" -H "authorization: apiToken $INSTANA_API_TOKEN" \
  https://your-instance.instana.io/api/synthetics/results/list \
  -d '{
    "syntheticMetrics":["errors"],
    "tagFilterExpression":{
      "elements":[
        {"stringValue":"OnDemand","name":"synthetic.runType","operator":"EQUALS"},
        {"elements":[{"stringValue":"4e6451ba-7e47-487c-813d-5b95c73f391b","name":"id","operator":"EQUALS"}],"logicalOperator":"OR","type":"EXPRESSION"}
      ],
      "logicalOperator":"AND",
      "type":"EXPRESSION"
    },
    "pagination":{"page":1,"pageSize":5},
    "timeFrame":{"to":0,"windowSize":14400000}
  }'
 

応答例:

{
  "items":
  [
    {
      "testResultCommonProperties": 
        {
          "id": "4e6451ba-7e47-487c-813d-5b95c73f391b",
          "testId": "<test-id>",
          "testName": "<test-label>",
          "locationId": "<location-id>",
          "locationDisplayLabel": "<location-label>",
          "errors": ["{timeStamp=1759283474221, errorType=Assertion, errorMessage=Response time 1443.66ms exceeded 200msn}"],
          "runType": "OnDemand"
        }
    }
  ], 
  "page": 1,
  "pageSize": 5,
  "totalHits": 1
}
 

ステップ7: パイプラインの状態を報告 - 失敗時のロールバック

  • OnDemand 合成テストが失敗した場合、パイプラインは次の処理を行います:

    • アプリケーションのアップグレードをロールバックする
    • ビルドに失敗する
  • OnDemand 合成テストが成功した場合、パイプラインは次のことを行います:

    • アプリケーションのデプロイを維持する
    • ビルドを成功としてマークする

おわりに

Instana の合成監視をCI/CDパイプラインに統合することで、以下のメリットが得られます:

  • 開発品質に対する信頼性を向上させる
  • 本番環境に影響が出る前に問題を発見する
  • リスクとメンテナンスサイクルを削減する
  • アプリケーションが可用性とパフォーマンスのSLAを、あらゆる段階で確実に満たすようにしてください。

今後のリリースパイプラインに Instana の合成監視を統合することをご検討ください。 この積極的なアプローチにより、潜在的な問題が本番環境で顕在化する前に特定し、修正することが可能となります。