分散監芖の基瀎4぀のゎヌルデンシグナル

画像



ForePaaSは、しばらくの間DevOpsの実隓を行っおきたした。最初はチヌムずしお、そしお今では䌚瀟党䜓で実隓を行っおいたす。理由は単玔です。組織は成長しおいたす。以前は、すべおの機䌚に1぀のチヌムしかありたせんでした。圌女は補品のアヌキテクチャ、蚭蚈、セキュリティに携わり、あらゆる問題に迅速に察応したした。珟圚、私たちは専門分野によっおいく぀かのチヌムに分かれおいたすフロント゚ンド、バック゚ンド、開発、運甚...



以前の方法はそれほど効果的ではなく、品質ず悪を犠牲にするこずなく速床を維持しながら䜕かを倉曎する必芁があるこずに気付きたした逆もたた同様です。



以前は、チヌムdevopsず呌んでいたしたが、実際にはOpsを実行し、バック゚ンドでの開発も担圓しおいたした。週に1回、他の開発者がDevOpsチヌムに、本番環境にデプロむする必芁のある新しいサヌビスを䌝えたした。これは時々問題を匕き起こしたした。䞀方では、DevOpsチヌムは開発者に䜕が起こっおいるのかを実際には理解しおいたせんでしたが、他方では、開発者はサヌビスに責任を感じおいたせんでした。



最近、DevOpsのスタッフは、サヌビスコヌドの可甚性、信頌性、品質に぀いお、開発者のこの責任を目芚めさせようずしおいたす。たず、負荷がかかったこずに驚いた開発者を安心させる必芁がありたした。新たな問題を蚺断するためにより倚くの情報が必芁だったため、システム監芖を実装するこずにしたした。



この蚘事では、モニタリングずは䜕か、それが䜕で食べられるかに぀いお話し、いわゆる4぀のゎヌルデンシグナルに぀いお孊び、メトリックずドリルダりンを䜿甚しお珟圚の問題を調査する方法に぀いお説明したす。

 





サヌビスを監芖するための4぀のゎヌルデンシグナルを備えたGrafanaダッシュボヌドの䟋。



モニタリングずは䜕ですか



監芖ずは、システムの状態に関する掞察を提䟛するメトリックの䜜成、収集、集玄、および䜿甚です。



システムを監芖するには、その゜フトりェアずハ​​ヌドりェアのコンポヌネントに関する情報が必芁です。このような情報は、特別なプログラムたたはコヌドむンストルメンテヌションを䜿甚しお収集されたメトリックを通じお取埗できたす。



Instrumentationは、パフォヌマンスを枬定できるようにコヌドを倉曎しおいたす。補品自䜓の機胜に圱響を䞎えず、単にメトリックを蚈算しお提䟛するコヌドを远加しおいたす。リク゚ストのレむテンシヌを枬定したいずしたしょう。サヌビスが受信したリク゚ストを凊理するのにかかる時間を蚈算するコヌドを远加したす。



この方法で䜜成されたメトリックは、匕き続き収集しお他のメトリックず組み合わせる必芁がありたす。これは通垞されお行われお Metricbeat収集ずのために Logstashに指暙を割り出す Elasticsearch。次に、これらのメトリックを独自の目的に䜿甚できたす。通垞、このスタックは、Elasticsearchでむンデックス付けされたデヌタをレンダリングするKibanaによっお補完され たす。



なぜ監芖するのですか



さたざたな理由でシステムを監芖する必芁がありたす。たずえば、アラヌトを生成しおダッシュボヌドにデヌタを入力するために、システムの珟圚のステヌタスずそのバリ゚ヌションを監芖したす。アラヌトを受信するず、ダッシュボヌドで倱敗の理由を探したす。監芖は、サヌビスの2぀のバヌゞョンを比范したり、長期的な傟向を分析したりするために䜿甚される堎合がありたす。



䜕を監芖したすか



サむト信頌性゚ンゞニアリングには、 分散システムの監芖に関する圹立぀章があり、4぀のゎヌルデンシグナルを远跡するためのGoogleのアプロヌチに぀いお説明しおいたす。

 



Beyer、B.、Jones C.、Murphy、N。Petoff、J。2016サむト信頌性゚ンゞニアリング。Googleが本番システムを実行する方法。オラむリヌ。無料のオンラむンバヌゞョンhttps  //landing.google.com/sre/sre-book/toc/index.html



  •  â€” . .  â€” , .

  •  â€” . API . , .

  • .  (, 500- ) .  â€” , .

  • , , . ? . . , , .





?



テクノロゞヌスタックを䟋にずっおみたしょう。通垞、カスタム゜リュヌションではなく、䞀般的な暙準ツヌルを遞択したす。利甚可胜な機胜が私たちにずっお十分でない堎合を陀いお。ほずんどのサヌビスをKubernetes環境にデプロむし、コヌドをむンストルメント化しお、各カスタムサヌビスに関するメトリックを取埗したす。これらのメトリックを収集しおPrometheus甚に準備するには、Prometheusクラむアントラむブラリの1぀を䜿甚し たす。ほずんどすべおの䞀般的な蚀語甚のクラむアントラむブラリがありたす。ドキュメントでは、独自のラむブラリを䜜成するために必芁なすべおを芋぀けるこずができたす。



サヌドパヌティのオヌプン゜ヌスサヌビスの堎合、通垞、コミュニティから提案された゚クスポヌタヌを利甚したす。゚クスポヌタヌは、サヌビスからメトリックを収集し、Prometheus甚にフォヌマットするコヌドです。これらは通垞、Prometheusメトリックを生成しないサヌビスで䜿甚されたす。



メトリックをパむプラむンに送信し、時系列ずしおPrometheusに保存したす。さらに、Kubernetesのkube-state-metricsを䜿甚しお、 メトリックを収集しおPrometheusに送信したす。その埌、Prometheusリク゚ストを䜿甚しお、Grafanaでダッシュボヌドずアラヌトを䜜成でき たす。ここでは技術的な詳现に぀いおは説明したせん。これらのツヌルを自分で詊しおみおください。圌らは詳现なドキュメントを持っおいたす、あなたはそれを簡単に理解するこずができたす。



たずえば、トラフィックを受信し、受信したリク゚ストを他のサヌビスを䜿甚しお凊理する単玔なAPIを芋おみたしょう。



ディレむ



レむテンシヌは、リク゚ストの凊理にかかる時間です。リク゚ストが成功した堎合ず゚ラヌが発生した堎合のレむテンシを別々に枬定したす。これらの統蚈が混同されないようにしたす。



通垞、党䜓的な遅延が考慮されたすが、これが垞に適切な遞択であるずは限りたせん。レむテンシヌの分垃は可甚性の芁件に沿っおいるため、远跡する方が適切です。特定のしきい倀よりも速く凊理される芁求の割合は、䞀般的なサヌビスレベルむンゞケヌタヌSLIです。このSLIのサヌビスレベル目暙SLOの䟋を次に瀺したす。

「24時間以内に、リク゚ストの99が1秒未満で凊理されるはずです。」


レむテンシメトリックを衚す最も芖芚的な方法は、時系列グラフを䜿甚するこずです。メトリックをバケットに入れ、゚クスポヌタヌは毎分それらを収集したす。このようにしお、サヌビス埅ち時間のn分䜍数を蚈算できたす。



0 <n <1で、グラフにq倀が含たれおいる堎合、このグラフのn分䜍数は、q倀のうちn * qを超えない倀に等しくなりたす。぀たり、xレコヌドのグラフの䞭倮倀0.5分䜍数は、xレコヌドの半分を超えない倀に等しくなりたす。

 



APIレむテンシグラフグラフから



わかるように、ほずんどの堎合、APIは1秒未満でリク゚ストの99を凊理したす。ただし、SLOに察応しない2秒前埌のピヌクもありたす。

Prometheusを䜿甚しおいるため、バケットサむズの遞択には现心の泚意を払う必芁がありたす。Prometheusは、線圢および指数関数的なバケットサむズを可胜にしたす。掚定誀差が考慮されおいる限り、どちらを遞択しおもかたいたせん 。



Prometheusは、分䜍数の正確な倀を提䟛したせん。分䜍数がどのバケットにあるかを刀別し、線圢補間を䜿甚しお抂算倀を蚈算したす。



トラフィック



APIのトラフィックを枬定するには、APIが毎秒受信するリク゚ストの数を数える必芁がありたす。メトリックは1分に1回収集されるため、特定の1秒間の正確な倀を取埗するこずはできたせん。ただし、Prometheusのrate関数ずirate関数を䜿甚しお、1秒あたりの平均リク゚スト数を蚈算できたす  。



この情報を衚瀺するには、GrafanaSingleStatパネルを䜿甚したす。1秒あたりの珟圚の平均リク゚スト数ず傟向が衚瀺されたす。

 





APIが1秒あたりに受信するリク゚スト数を瀺すGrafanaSingleStatパネルの䟋1秒



あたりのリク゚スト数が突然倉化するず、それが衚瀺されたす。数分でトラフィックが半分になるず、問題があるこずがわかりたす。



゚ラヌ



明らかな゚ラヌの割合を蚈算するのは簡単です。HTTP500応答をリク゚ストの総数で割りたす。トラフィックず同様に、ここでは平均を䜿甚したす。



間隔はトラフィックの堎合ず同じである必芁がありたす。これにより、1぀のパネルで゚ラヌのあるトラフィックを远跡しやすくなりたす。



過去5分間の゚ラヌ率が10で、APIが1秒あたり200リク゚ストを凊理しおいるずしたす。平均しお、1秒あたり20回の゚ラヌが発生したこずは簡単に蚈算できたす。



飜和



飜和状態を監芖するには、サヌビス制限を定矩する必芁がありたす。APIの堎合、どちらがより圱響するかわからなかったため、プロセッサずメモリの䞡方のリ゜ヌスを枬定するこずから始めたした。Kubernetesず kube-state-metricsは、コンテナヌにこれらのメトリックを提䟛したす。

 



API



飜和床枬定のCPU䜿甚率のグラフを䜿甚するず、ダりンタむムを予枬しおリ゜ヌスをスケゞュヌルできたす。たずえば、デヌタベヌスストレヌゞの堎合、ディスクの空き容量ずその空き容量を枬定しお、い぀アクションを実行するかを理解できたす。



分散サヌビスを監芖するための詳现なダッシュボヌド



別のサヌビスを芋おみたしょう。たずえば、他のサヌビスのプロキシずしお機胜する分散API。このAPIには、異なるリヌゞョンず耇数の゚ンドポむントに耇数のむンスタンスがありたす。それらのそれぞれは、独自のサヌビスのセットに䟝存しおいたす。数十行のグラフを読むのはすぐに非垞に難しくなりたす。システム党䜓を監芖し、必芁に応じお個々の障害を怜出する機胜が必芁です。

 



APIの12むンスタンスのCPU䜿甚率グラフ



このために、ドリルダりンダッシュボヌドを䜿甚したす。 1぀のパネルの各画面に、システムのグロヌバルビュヌが衚瀺され、個々の芁玠をクリックしお詳现を確認できたす。圩床に぀いおは、グラフを䜿甚せず、プロセッサずメモリリ゜ヌスの䜿甚を瀺す色付きの長方圢を䜿甚したす。リ゜ヌス䜿甚量が指定されたしきい倀を超えるず、長方圢がオレンゞ色に倉わりたす。

 



API



むンスタンスのCPUおよびメモリ䜿甚量むンゞケヌタヌ長方圢をクリックしお詳现に移動するず、さたざたなAPIむンスタンスを衚すいく぀かの色付きの長方圢が衚瀺されたす。

 



APIむンスタンスのCPU䜿甚率むンゞケヌタヌ



1぀のむンスタンスだけに問題がある堎合は、長方圢をクリックしお詳现を確認できたす。ここには、むンスタンスの領域、受信したリク゚ストなどが衚瀺されたす。

 



APIむンスタンスの状態の詳现ビュヌ。巊から右、䞊から䞋プロバむダヌリヌゞョン、むンスタンスホスト名、最終再起動日、1秒あたりのリク゚スト数、CPU䜿甚率、メモリ䜿甚率、パスあたりの合蚈リク゚スト数、パスあたりの合蚈゚ラヌ率。



゚ラヌの割合に぀いおも同じこずを行いたす。API自䜓たたは関連するサヌビスで、問題がどこにあるかを理解するために、APIの各゚ンドポむントをクリックしお゚ラヌの割合を確認したす。



ここには埮劙な違いがありたすが、成功したリク゚ストの遅延ず゚ラヌに぀いおも同じこずを行いたした。䞻な目暙は、サヌビスが䞖界芏暡で問題ないこずを確認するこずです。問題は、APIに倚くの異なる゚ンドポむントがあり、それぞれが耇数のサヌビスに䟝存しおいるこずです。各゚ンドポむントには、独自の遅延ずトラフィックがありたす。



サヌビス゚ンドポむントごずに個別のSLOおよびSLAを蚭定するのは面倒です。䞀郚の゚ンドポむントは、他の゚ンドポむントよりも公称遅延が高くなりたす。この堎合、リファクタリングが必芁になる堎合がありたす。個別のSLOが必芁な堎合は、サヌビス党䜓をより小さなサヌビスに分割する必芁がありたす。おそらく、私たちのサヌビスの範囲が広すぎるこずがわかりたす。

党䜓的なレむテンシヌを監芖するのが最善であるず刀断したした。现分性により、埅ち時間の偏差が非垞に倧きくお泚意を匕く堎合に、問題を調査するこずができたす。



結論



これらの方法を䜿甚しおシステムを監芖しおきたしたが、問題の怜出にかかる時間ず平均修埩時間MTTRが短瞮されおいるこずに気付きたした。詳现化により、グロヌバルな問題の実際の原因を芋぀けるこずができたす。私たちにずっお、この胜力は倧きく倉化したした。



他の開発チヌムもこれらの方法を䜿い始めおおり、それらの利点だけを確認しおいたす。珟圚、圌らはサヌビスの運営に責任があるだけではありたせん。さらに進んで、コヌドぞの倉曎がサヌビスの動䜜にどのように圱響するかを刀断できたす。

4぀のゎヌルデンシグナルは、すべおの問題を完党に解決するわけではありたせんが、最も䞀般的なものでは非垞に圹立ちたす。ほずんど劎力をかけずに、監芖を倧幅に改善し、MTTRを削枛するこずができたした。それらの間に4぀のゎヌルデンシグナルがある限り、必芁な数のメトリックを远加したす。



All Articles