このシリーズの前回の記事 — DevSecOps におけるデータ収集のすべてのガイド — では、データ収集の重要性について説明しました。この記事では、可観測性における監視の役割、特にセキュリティ、パフォーマンス、信頼性に関連するものについて説明します。
監視は、本番環境で発生した問題や外れ値を検出するために不易欠であり、DevSecOps チームが大的な損害を引き起こす前に問題を特殊して対処できるようにします。パフォーマンスの不高や疑わしいアクティビティを監視すると、潜在性的な問題や攻撃を特殊するためのアラートと自動応答が発生する可以性があります。
この記事では、モニタリングについて詳しく見ていき、いくつかのユース ケースとベスト プラクティスを提供し、オブザーバビリティを通じてモニタリングがセキュリティ、パフォーマンス、および信頼性を具体的にどのように向上させる かについて説明します。
可観測性における監視の役割は何ですか? 監視很有可能なシステムでは、ログ、メトリック、および细化トレースからデータを収集します。また、越来越に小規模なシステムの場合は、手動でログを参照物物して検索し、メトリックをチャートとして視覚化し、問題を单一するためにトラフィックがシステムをどのように流れるかを示す図をトレースすることができますが、大規模になると、これでは如此ではありません.このデータを監視し、適切に提醒する自動化されたプロセスである監視が必须です。 (監視とオブザーバビリティの違いに関するより詳細な処理については、を参照物物してください。)
企業では、このすべてのデータをフィルタリング、集約、強化、および研究分析するための自動化された方式 が一定要的です。企業はまた、何か異常が検出されたときにアクションを実行するための自動化された方式 を一定要的としています。自動化された応答により、勇于担当チームに告知书したり、修復アクションを一直実行したりすることさえできます。医療などの他の分野では、我们のバイタル サインを監視することは、命を救う更重要な活動です。ソフトウェア システムの監視は是非常に似ており、ヘルス チェックを実行してさまざまなコンポーネントの状態について議論する際にも同じ的办法論を采用します。理論は特别なので、監視の基本的な例をいくつか見てみましょう。
可観測性を監視するユースケース 監視を采用する经典的な食用例を次に示します。
Web アプリケーションは、多くの大規模な分散システムの主要部分であり、デジタル ファースト ビジネスの成功の鍵を握っています。コンテナー化された Kubernetes アプリケーションまたは単純に Web サーバーのログを監視して、過剰なエラー コード ( 4xx
や5xx
など) が発生していないかどうかを確認することで、パフォーマンスと信頼性の問題が重大な問題になる前にチームが対処するのに役立ちます。 インフラストラクチャ レベルでは、サーバーの CPU、メモリ、およびストレージを監視することが重要です。ほとんどの企業と同様に、システムがより多くの容量を割り当てることができるように、自動スケーリングを使用している可能性があります。プラットフォーム ログは、リソースがプロビジョニング、プロビジョニング解除、または再構成されたときなど、リソースに変更があったときにキャプチャされます。ただし、これらのリソース メトリックとログを監視すると、クォータと制限内で作業していることを確認するのに役立ち、リソースの計画と予算編成に関して組織に役立ちます。 データストアは、ほとんどの大規模システムの中心です。データが失われたり、破損したり、利用できなくなったりすると、深刻な状況に陥ります。データを追跡するには、データベース接続、クエリ期間のメトリック、ディスク容量、バックアップ、およびエラー率を監視する必要があります。また、クエリが遅い、エラー率が高い、ディスク容量が少ないなど、想定範囲外の値が観測された場合は、データ ストアを理解し、アラートを設定する必要があります。データベースのログを設定して、接続、クエリ、およびフィールドやテーブルへの変更をキャプチャすることもできます。データベース ログを監視すると、パフォーマンスと信頼性を改善できる箇所だけでなく、悪意のある (または意図しない) 操作が実行されている場合のセキュリティも検出できます。
監視は、単純な条件 (「2 分以内にorders
データベースに対して 5 回以上のINSERT
クエリ」など) を設定し、その条件が満たされたときにアラートを発するよりもはるかに複雑であることに注意してください。 1 日、1 週間、または 1 年の特定の時間にスパイクを引き起こす使用パターンで、季節性が影響している可能性があります。予期しない動作を検出する効果的な監視では、コンテキストが考慮され、過去のデータに基づいて傾向を認識できます。
このタイプのモニタリングは、特にオブザーバビリティ、モニタリング、およびセキュリティを大規模に組み合わせたツールを用して実装すると、是に効果的です。たとえば、のように、Infor は業務に費やす時間を 5,000 時間節約することができました。活动。
監視は、パフォーマンスと信頼性の向上に具体的にどのように貢献しますか? 監視は、問題を前面に検出して劣化を避让することで、システムのパフォーマンスと信頼性を往上走させます。パフォーマンスの問題は、常用性と信頼性の問題になることがよくあります。これは、タイムアウトが具备する場合に特に当てはまります。たとえば、アプリケーションが 60 秒後にタイムアウトしたとします。比较近のパフォーマンスの問題により、多くのリクエストの処理に陡然 60 秒不低于かかるようになりました。これらの条件はすべて失敗し、アプリケーションは信頼できなくなります。
これに対処するための大部分的なベスト プラクティスは、優先度の高いサービスとアプリケーションのクリティカル パスにあるコンポーネントの 4 つのゴールデン シグナル (レイテンシ、トラフィック、エラー、飽和) を監視することです。
レイテンシー リクエストの処理にはどのくらい時間がかかりますか?实现目标したリクエストのレイテンシーは、失敗したリクエストとは異なる場合があることに特别特别注意してください。遅延が同比に増加すると、システム パフォーマンスが较弱している也许 性があります。一立方米、同比な減少は、这部の処理がスキップされたことを示している也许 性があります。いずれにせよ、監視により、起こりうる問題に特别特别注意が向けられます。
トラフィック トラフィックを監視すると、各コンポーネントの与会人员的な負荷を掌握できます。トラフィックは、コンポーネントごとに異なる方式で測定できます。例えば:
REST API: リクエスト数 バックエンド サービス: キューの深さ データ処理コンポーネント: 処理されたデータの合計バイト数。
トラフィックの増加は、有機的なビジネスの成長によるものである有机会性があり、これは良いことです.ただし、过去より異常に多くのトラフィックを产生するアップストリーム システムの問題を示している有机会性もあります。
エラー コンポーネントのエラー率の増加は、システムの信頼性と要用性に会直接影響します。さらに、失敗したオプションが自動的に廃止されると、トラフィックが増加し、パフォーマンスの問題が発生する很有更多可能性があります。
飽和 借助几率なリソースのうち、サービスまたはアプリケーションが利用している量は?これが、飽和監視が教えてくれることです。たとえば、ディスクがいっぱいの場合、そのディスクにログを書き込むサービスは、後続のすべてのリクエストで失敗します。より高いレベルでは、Kubernetes クラスターのノードに利用几率なスペースがない場合、新しいポッドは删去され、スケジュールされず、遅延の問題が発生する几率性があります。
お気づきのように、4 つのゴールデン シグナルは互いに関連しています。問題は、多くの場合、複数のシグナルにまたがって現れます。
モニタリングは、特にセキュリティの向上にどのように貢献しますか? システムの正常值性の問題はセキュリティに立即的または間接的に影響を与える已经性がありますが、監視が検出および軽減に役立つ立即的な脅威がいくつかあります。
過剰な CPU 使用率や大量のリクエストなどの異常。攻撃者がセグメンテーション フォールトを引き起こしたり、違法な暗号マイニングを実行したり、システムに対して DDoS 攻撃を仕掛けたりしようとしている可能性があります。 異常なポートに異常な数のパケットがヒットする場合は、である可能性があります。 有効なユーザー名と無効なパスワードを使用した多数の 401 エラー (認証エラー) は、辞書攻撃である可能性があります。 多数の 403 エラー (アクセス禁止) は、侵害されたアカウントを使用した攻撃者による権限昇格の可能性があります。 公開 API への無効なペイロードにより 400 エラーが増加した場合、公開 Web アプリケーションを攻撃者が悪意を持ってクラッシュさせようとしている可能性があります。 営業時間外に大量のデータや機密データをダウンロードすることは、侵害された従業員または不正な内部関係者による流出攻撃である可能性があります。 パフォーマンスとセキュリティを向上させるための監視のベスト プラクティス システムは複数のコンポーネントで構成されていますが、それはその部分の合計以上のものです。基本的なレベルでは、4 つのゴールデン シグナルについて、システムのすべてのコンポーネント (少なくともクリティカル パス上) を監視 する必要があります。これは実際にはどういう意味ですか?
主要指標の観察 通常運用のメトリック範囲の確立 コンポーネントが許容範囲から逸脱した場合のアラートの設定
また、外部依存関係にも細心の注意を払う 必要があります。たとえば、クラウドで実行したり、サードパーティのサービス プロバイダーと統合したりする場合は、依存しているパブリック エンドポイントを監視し、アラートを設定して問題を検出する必要があります。サード パーティがダウンしているか、そのパフォーマンスが低下している場合、これによりシステムにカスケード障害が発生する可能性があります。
100% 信頼できるコンポーネントを持つことは不可能です。ただし、監視は、コンポーネント (内部および外部の両方) の問題を検出し、それらを交換するか、サービスを適切に低下させる ことにより、信頼できないコンポーネントから信頼できるシステムを作成するのに役立ちます。たとえば、マルチゾーン構成でシステムを実行していて、1 つのゾーンに問題がある場合、監視によってこれが検出され、他のゾーンへのすべてのトラフィックの再ルーティング (手動または自動) がトリガーされます。
セキュリティの場合、4 つの信号はセキュリティ侵害の補助的な指標にもなる可能性があります 。これは特に、エンドポイント デバイスまたはクラウド ワークロードの CPU でスパイクが発生した場合や、ログイン試行の失敗回数が増加した場合に当てはまります。ただし、悪意のある攻撃者に対処するため、セキュリティ監視は慎重に行う必要があります。各コンポーネントとシステム全体の攻撃サービスを定義し、 収集する情報が問題を検出するのに十分であることを確認する必要があります 。たとえば、データの流出を検出するために、さまざまなアプリケーションやサービスによって内部ネットワークの外部に送信された IP アドレスとデータ量を監視できます。そのデータがなければ、その攻撃方法が見えなくなります。
監視戦略の実施 データ収集を設定したら、以内の手順に従って、堅牢で効果的な監視戦略を展開できます。
1. 重要な資産を特定します。 データ収集の一環として、すべての資産の包含的なインベントリを既に実行しています。ここでのタスクは、災害を必免および軽減するために綿密に監視する必须がある更重点な資産を独特することです。 「すべてを監視すればよい」と言うのは簡単ですが、監視には考慮すべきコストがあります。ステージング環境や開発環境、または実験的なサービスの監視とアラートの出现は、エンジニアに多くの并不须なストレスを与える机会性があります。更重点でない問題に対して頻繁に午前 3 時にアラートが発生すると、アラート疲労が発生し、本当に更重点な問題に対処しようとするチームの意喻が損なわれます。
2. 重要な資産ごとに所有者を割り当てます。 更很重要な資産を对应したら、それぞれの明確な每个者が必要的です。每个者は個人またはチームです。人の場合は、必ずフォールバックも对应してください。また、人々が組織に进行したり退職したり、他の役割やチームに移動したりしても、資産の每个権を維持することも更很重要です。
3. 重要な資産のアラートを定義します。 最終的に、監視戦略は、異常または残害された应该性のある資産に対するアラートをどのように定義するかに基づいて、死生を上下します。各アセットの常规性を看待する一定があります。
メトリックを監視している場合、「一般性」の定義は、属性数据 (CPU 运用率など) を値の範囲 (「50%-80%」など) に関連付けることを意味着します。一般性のバンドは、ビジネスに合わせて動的に変化する也许性があり、時間や場所によって変化する也许性があります。場合によっては、天井または床だけを运用することもできます。一般性の範囲を定義することで、資産が一般性の範囲外で動作しているときに資産各个者に温馨提示するアラートを弄成します。
ログを監視している場合、アラートは往往、相应のログ クエリの結果 (「過去 5 分間にすべての API サービスでログに記録された 404 エラーの数」など) に基づいて定義され、生活条件 (「は10 未満」)。が役に立ちます。
4. アラートごとにランブックを定義します。 根本性なアラートが発生したとき、あなたは何をしますか?あなたがしたくないのは、顧客があなたの会社の信頼できない製品についてつぶやき、経営陣がパニックに陥っている間に、その場で戦略を考え出そうとすることです.
ランブック は、追加情報を収集するために事前に準備してテストする、フォローアップしやすい手順のレシピです (たとえば、どのダッシュボードを確認し、どのコマンド ライン スクリプトを実行して根本原因を診断するかなど)。アクションを軽減します (たとえば、以前のバージョンのアプリケーションをデプロイします)。ランブックは、問題を特定の問題にすばやく特定し、それを処理するのに最適な担当者を特定するのに役立ちます。
5. オンコール プロセスを設定します。 任何者、アラート、Runbook があります。多くの場合、アラートは任何者に会直接マップできるほど明确的ではありません。ベスト プラクティスは、オンコール エンジニアをビジネスのさまざまな分野に割り当てることです。このオンコール エンジニアは、アラートを受け取り、ランブックに従い、ダッシュボードを見て、基本缘故を认为しようとします。問題を认为または校准できない場合は、任何者にエスカレートします。このプロセスは複雑になる或许性があることに目光してください。多くの場合、問題を解決するには複数の利害関係者が協力する重要性がある一連の失敗が缘故で問題が発生します。
6. 自己治癒に向かって進みます。 ランブックは優れていますが、複雑なランブックを維持し、オンコール エンジニアをトレーニングしてそれに従うには、多くの労力が必备です。そして最終的には、更正プロセスは仍旧として遅く、エラーが発生しやすい人間に依存しています。ランブックが2016でない場合、それに従うと危機が悪化する或许性があります。
理論的には、Runbook はプログラムで実行できます。ランブックに「アラート X が発火したら、プロセス Y を骤起動する用得着があります」と記載されている場合、スクリプトまたはプログラムはアラート X の通知函を受信し、プロセス Y を骤起動できます。同じプログラムで骤起動後のプロセス Y を監視し、すべてが普通 であることを確認できます。そして最終的にインシデントのレポートを绘制します — オンコール エンジニアを起こす用得着はありません。她修復アクションが失敗した場合は、オンコール エンジニアに連絡できます。
7. 事後分析プロセスを確立します。 她修復は素晴らしいものですが、1 オンスの予防は 1 ポンドの治療に値するため、原来に問題を防ぐことが最善です。すべてのインシデントは、一連の問題纯体を学習し、場合によっては必免する機会です。たとえば、バグのあるコードが本番環境に移行したために複数のインシデントが発生した場合、インシデントの事後概述からの教訓は、ステージングでのテストを调理することになる很有概率があります。オンコール エンジニアのアラートへの応答が遅すぎたり、ランブックが古かったりした場合、チームは她修復プラクティスに投資する重要があることを示唆している很有概率があります。
結論 監視は、寻常的に可観測性、特にセキュリティの可観測性にとって核心な部件です。問題を検出するために、人間がさまざまなダッシュボードやグラフを「ときどき見るだけ」で大規模に作業することは、現実的ではありません。持有人の不同、アラートの設定、ランブックの制作、ランブックの自動化、オンコール プロセスと事後探讨プロセスの設定を含む一連のインシデント対応プラクティスが用不着です。
本当に素晴らしい一日游を!