盲点と推測を排除し、監視ツールの切り替えの手間を省きましょう。Splunk Observability CloudとAI Assistantを使えば、1つのソリューションですべてのメトリクス、ログ、トレースを自動的に相関付けることができます。
金曜日の午後5時、ようやくデプロイが完了し、メンテナンス期間も終了間近で、誰もがすでに週末気分です。それにしても、よりによって金曜日の午後5時にデプロイを行うなんて…
まさにそのときです。定期的な外形テストが実行され、本番環境のアラームが一斉に鳴り響きます。ログインは失敗し、決済はタイムアウトしています。24時間体制で稼働している外形テスト、つまり緊急事態を知らせるために構築したそのテストが、突然警告を発し始めたのです。
この事態を知った経営陣は説明を求め、「どうしてこんな問題が見過ごされたのか?」、「なぜもっと早く発見できなかったのか?」と問い詰めます。こうして、苦労して築いてきた外形監視システムの信頼は、脆くも崩れ去ろうとしています。
こうなった理由は簡単です。問題はそもそも本番前環境の段階で起きていたのです。それは検出可能であり、測定可能であり、回避可能でした。しかし誰も、本番環境を監視するときほど真剣には本番前環境を監視していませんでした。
どこかですでに申し上げたかもしれませんが、私は、外形テストで問題が検出されたら、それは対応が必要な問題であることに確信を持っているので、夜はぐっすり眠れます。なぜそれほどの確信がもてるのかと言えば、それはオブザーバビリティ戦略の中で、本番前環境を本番環境と同等の「第一級市民」として扱うといった、このシリーズでご紹介しているすべてのベストプラクティスの根底にある規律に従っているためです。
今回は、「外形監視を正しく行う方法」シリーズの次のベストプラクティス「リリース前テストの重要性」についてご説明します。このシリーズを初めてお読みになる場合は、まず「はじめに」の記事で、これらのベストプラクティスを組み合わせてブラウザ外形テストの信頼性と実用性を高める方法の概要をご確認ください。
リリース前テストでは、本番前の「本番マイナス1」環境を本番環境と同じ重要度で監視します。スモークテストや手動での簡単な動作確認で済ませず、本番環境で重要なユーザージャーニーを監視するときと同じように、外形テストのすべての項目を継続的に実行します。
デリバリーパイプラインでは一般的に、本番前環境は、顧客向けの環境に変更が反映される直前の最終段階です。コード、設定、機能フラグ、依存関係、UIの更新はすべて、まずこの環境に適用します。問題、遅延、ドリフトが発生する場合は、通常、この時点で発覚します。
本番前環境で本番環境と同様の外形テストを実行すれば、システム停止、大規模な被害、深夜の緊急対応につながるような問題を未然に発見できます。それが、変更自体の問題であり、実際の被害につながるのか、あるいはテストの設定(セレクター、アサーション)に問題があり、設定の調整が必要なだけなのか。いずれの場合であっても、実際のユーザーに影響が及ぶ前に問題を検出できます。
簡単に言うと、リリース前にテストを行えば、外形監視システム、アプリケーション、デリバリープロセスがすべて適切に調整されていることを確認して、顧客に被害が及ぶのを避けられるということです。
詳細:階層型オブザーバビリティ:オブザーバビリティ機能を優先度に沿って成熟させる方法
本番前環境は、問題が最初に表面化する場所です。この環境を監視しないと、早期に警告を発する唯一のシグナルを見落としたまま、変更を本番環境にリリースすることになります。本番環境と同様の外形テストを本番前環境で実行することで、以下のものを維持できます。
体系化されたソフトウェア開発ライフサイクル(SDLC)に従って変更をリリースしている場合、本番前環境でのテストは、顧客が問題に気づく前にドリフトや障害を捕捉できる最後のチャンスです(SDLCに従っていない場合は、…残念ながらこの記事の対象外です)。
本番前環境を一貫して監視することは、以下の問題の検出に役立ちます。
| 領域 | 重要である理由 | 外形テストで早期発見できる問題 |
|---|---|---|
| デプロイ品質 | ほとんどの問題は、顧客に影響が及ぶ前に本番前環境で検出できる | シークレットの設定ミス、フラグの欠如、パスの断絶 |
| ダウンタイムゼロ検証 | ダウンタイムゼロを掲げるには実証が必要 | 一時的なスパイク、不安定なロールアウト、デプロイ後の復旧の遅延 |
| 開発者の生産性 | 本番前環境が停止すると、ビルド、テスト、パイプラインがすべてブロックされてしまう | エンジニアリングの時間を無駄にするような、不安定な環境や実用に適さない環境 |
| テストやセレクターのドリフト | テスト資産でドリフトが発生していると本番環境での誤検出につながる | 壊れたセレクター、古くなったアサーション、UIの変更 |
| パフォーマンスの低下 | わずかなパフォーマンス低下の見逃しが、本番環境でのSLOエラーバジェットの急速な消費につながる | LCP、TTFB、ステップ実行時間の初期の増加 |
| オブザーバビリティパイプライン | ダッシュボード、スパン、ディテクター、ルーティングには安全なテスト環境が必要である | ディテクターの障害、タグの欠落、ルーティングの誤り |
| レジリエンスの準備状況 | フェイルオーバーやカオステストは安全な環境でテストする必要がある | 可用性の不足、検出の遅れ、不明確な対応ワークフロー |
本番前環境を効果的に監視するには、以下の手順に従います。
まずは、本番環境で特に重要な外形テストを本番前環境に複製します。目標は、同等性を保つことです。以下のすべてを同じ状態に維持します。
以下の必要最小限の設定のみ、本番前環境に合わせて変更します。
その他の設定はすべて、本番環境のテストと一致させます。これにより、環境間を明確に比較し、ドリフトを簡単に特定できるようになります。また、テストの定義が時間の経過とともに乖離するのを防げるため、テストのメンテナンスコストを低く抑えることもできます。
詳細:
本番前環境へのデプロイ時も外形テストを有効なままにしておきましょう。これにより、ロールアウト前、ロールアウト中、ロールアウト後の動作を確認できます。外形テストはオフにせず、Splunk Synthetic Monitoringのダウンタイム設定を使ってテストの実行方法を制御します。
Splunkには2種類のルールが用意されています。
本番前環境など、デプロイによる影響を把握したい環境では、データの拡張を選ぶことをお勧めします。テストの実行を中断せず、さらに、既知のメンテナンス期間中に発生した結果を明確に見分けることができます。コアメトリクスをクリーンな状態に保ち、通知を抑制した状態で、システムの動作の全体像を把握できます。
これにより、以下の点を分析できます。
しかも、これらすべてを、夜中に担当者を不必要に呼び出すことなく実行できます。
Splunkのダウンタイム設定UIを使えば、これらの期間を簡単にスケジュール設定し、適切なバッファを追加し、結果に適切なラベルを付けることができます。拡張ルールの下で実行されるテストには自動的に「under_maintenance:true」ディメンションが追加されます。
本番前環境で外形テストが失敗する場合は、本番環境への移行は一切中止すべきです。これは、失敗の原因がアプリケーション自体にある場合でも、外形テストの設定にある場合でも同様です。
本番前環境での外形テストは、顧客向けに変更をリリースする前の最後の品質チェックポイントです。これらのテストに失敗した場合は、以下のいずれかを意味します。
いずれにしても、そのままリリースへと進むとリスクが生じます。アプリケーションの動作の問題であれば、それは本番環境でのインシデントになります。テストの問題であれば、誤検出につながり、信頼性の低下や真の問題の見落としを招きます。
本番前の外形テストの結果を本番への移行の判断基準にすることで、デリバリープロセスに規律が生まれます。たとえば、以下の作業が重視されるようになります。
チームの手間を増やしたいわけではありません。これは、本番環境での外形テストの信頼性を維持し、意図したとおりのシグナルを提供し続けるようにするために必要な作業です。
重要ポイント:テストの実行状況は、Splunk ObservabilityのUI内で直接確認することも、Splunk Observability Cloud APIにクエリーを実行して確認することもできます。どちらの方法でも、テストが期待どおりに実行され、有効な結果が返されていることをすばやく確認できます。
本番前環境では24時間365日のオンコール体制は不要ですが、一貫性のある予測可能な対応は必要です。本番前環境の健全性に問題があると、開発者は開発を行えず、QA担当者は検証を行えず、パイプラインも停止してしまいます。顧客に影響が一切なくても、これは生産性の低下につながります。
組織のエンジニアリングチームの運用体制に合わせた対応基準を設定しましょう。たとえば、次のように設定します。
たとえば、チームメンバーの多くがインド標準時に沿って仕事をしていて、インド標準時の午前10時に本番前環境の外形テストが失敗した場合は、プロセスの停止を招く重大問題として扱うべきです。目標は、すべての問題を緊急にエスカレーションすることではなく、問題が何日も気づかれずに放置されてデリバリーが遅れる事態を回避することです。
本番前環境では、本番環境よりも頻繁に変更が行われます。新たなビルド、機能フラグの追加、設定変更、依存関係の更新、インフラの微調整などはすべて、まず本番前環境で行われます。このように本質的に変化が激しいため、しきい値を本番環境に近づけすぎるとノイズが増える可能性があります。
目標は、期待値を下げることではなく、環境の実情に合わせて以下のような調整を行うことです。
Splunk Observability Cloudでは、チームへの通知方法を柔軟に設定できます。本番前環境で発生したアラートを、Slack、Jira、ServiceNowなどのコラボレーションツールに送信できます。これにより、通常の開発サイクル中に対応担当者に過度な負担をかけることなく、問題を常に可視化できます。
詳細:Splunk Observability Cloudのすぐに使える通知サービスインテグレーション
外形テストは、調整を繰り返しながら開発していく必要があります。アプリケーションの成熟度が高まるとともに、セレクターは変化し、アサーションは進化し、タイミング戦略を練り直す必要が生じることもあります。本番前環境は、その作業を行うための最適な場所です。
本番環境で直接テストを調整すると、盲点、誤検出、アラート抑制などの問題が生じます。これにより、「本番環境の外形テストでアラートが発生したら緊急事態だ」という認識に対する信頼性が損なわれることになります。また、テストの調整に奔走している間に顧客に影響が及ぶ可能性もあります。
先に本番前環境でテストロジックを調整しておくことで、本番環境の外形テストの正確性、安定性、信頼性を維持できます。それこそが、外形テストの理想の運用方法です。
本番前環境は、負荷が高い状態でのアプリケーションの動作をテストするための最も安全な場所です。カオステスト、負荷テスト、フェイルオーバーシナリオなどの実験を行うときは、その間も外形テストを有効にしておきましょう。そうすれば、システムに負荷がかかったときの重要なユーザージャーニーに対する影響を、外形テストによって一貫して測定できます。
これらの実験によって以下の点を理解できます。
これらの実験により、アプリケーションのレジリエンスを高めるだけでなく、運用態勢(検出、対応、伝達、復旧)を検証することもできます。本番前環境で外形テストを有効にしておくことで、これら実験が測定可能かつ反復可能なものとなります。
リリース前にテストを行うことで、その後のすべてのプロセスを強化できます。本番環境と同じ規律に従って本番前環境を監視すれば、問題を早期に検出し、ドリフトをすばやく特定し、本番環境の外形テストの正確性と信頼性を維持できます。これにより、信頼できるシグナルを生成して、顧客への影響を回避できます。また、不安定な環境やテストの不具合に悩まされることがなくなり、作業効率が向上します。
本番前環境は、本番環境の簡易版ではありません。そこはデリバリーパイプラインの性能を検証するための場所です。本番環境と同等の「第一級市民」として扱い、本番環境と同じ外形テストを実行し、そこから得られたインサイトに基づいてリリースと監視戦略の両方を改善していきましょう。
このプラクティスに共感された方は、このシリーズの残りの記事も引き続きご覧ください。外形監視が信頼できる実践的な手法である理由を詳しく解説していきます。これまでにご紹介したプラクティスを組織の環境で実践してみたい方は、Splunk Observability Cloudの無料トライアル版をご利用いただけます。