Kaleは、異垞を怜出しお盞関させるためのオヌプン゜ヌスツヌルです。

ITむンフラストラクチャを監芖するには、次のような倚くのツヌルを䜿甚したす。



さたざたな監芖システムの長所/短所に぀いお長い間議論するこずは可胜ですが、私はただ䞀぀の問題、぀たり異垞の特定に専念したいず思いたす。 監芖システム内のメトリックの数が数癟単䜍で枬定される堎合、1぀以䞊のメトリックの異垞な動䜜を远跡するこずは難しくありたせん。 しかし、メトリックの数が数䞇たたは数十䞇単䜍で枬定される堎合、異垞を自動的に怜出する問題が重芁になりたす。 管理者たたは管理者グルヌプは、䜕癟ものデバむスからなる耇雑なシステムの動䜜を手動で远跡できたせん。

Etsy゚ンゞニアはか぀おこの問題に遭遇し、異垞を怜出しお盞関させる独自のツヌルを開発したした。 ケヌルず呌ばれ、2぀の郚分で構成されおいたす。





各郚分をより詳现に怜蚎しおください。



スカむラむン



Skylineは、リアルタむムの異垞怜出システムです。 数十䞇のメトリックを受動的に監芖するために䜜成されたもので、各メトリックにしきい倀を蚭定する必芁はありたせん。 これは、監芖システムでトリガヌしきい倀を手動で蚭定する必芁がないこずを意味したす。システムは、入力されたデヌタを自動的に分析し、それに組み蟌たれたいく぀かのアルゎリズムに基づいお、このデヌタの「異垞な性質」に぀いお決定したす。



スカむラむン



スカむラむンはいく぀かのコンポヌネントで構成されおいたす。



地平線


Horizo​​nは、デヌタの収集を担圓するコンポヌネントです。 pickleTCPずMessagePackUDPの2぀の圢匏のデヌタを受け入れたす。

したがっお、次のチェヌンを構成できたす。監芖システムは、「metric_name time_stamp_value」の圢匏でデヌタをGraphiteに送信したす。 グラファむト偎では、 カヌボンリレヌが機胜し、ピクルスデヌタがHorizo​​nに送信されたす。 次に、Horizo​​nはデヌタを受信した埌、それを凊理し、MessagePackを䜿甚しお゚ンコヌドし、Redisに送信したす。 たたは、監芖システムを構成しお、デヌタをHorizo​​nに盎接送信し、MessagePack圢匏で事前に゚ンコヌドするこずができたす。 さらに、最新のプログラミング蚀語のほずんどの蚀語には、 MessagePackを操䜜するためのモゞュヌルがありたす。

たた、Horizo​​nは叀いメトリクスを定期的にトリミングおよび削陀したす。 これを行わないず、すべおの空きメモリがすぐに䜿い果たされたす。

蚭定では、無芖されるメトリックのリストを指定するこずもできたす。



レディス


Redisは別のコンポヌネントですが、Skylineはそれなしでは機胜したせん。 その䞭に、圌はすべおのメトリックず゚ンコヌドされた時系列を保存したす。

この゜リュヌションには長所ず短所がありたす。 䞀方では、RedisはすべおのデヌタがRAMに保存されるため、高いパフォヌマンスを発揮したす。 デヌタは「キヌ-倀」の圢匏で保存されたす。キヌはメトリックの名前で、倀はそれに察応する゚ンコヌドされた時系列です。 䞀方、Redisは非垞に長いラむンで貧匱な仕事をしおいたす。 文字列が長いほど、パフォヌマンスは䜎䞋したす。 実践が瀺しおいるように、1日/ 2日以䞊デヌタを保存するこずは意味がありたせん。 ほずんどのシステムでは、デヌタには1時間ごず、1日ごず、1週間ごず、1か月ごずの頻床がありたす。 ただし、数週間たたは数か月間デヌタを保存するず、Redisのパフォヌマンスは非垞に䜎くなりたす。 この問題を解決するには、たずえばredis-timeseriesラむブラリなどを䜿甚しお、時系列を保存する別の方法を䜿甚できたす。



アナラむザヌ


アナラむザヌ-このコンポヌネントはデヌタ分析を担圓したす。 Redisからメトリックの䞀般リストを受け取り、いく぀かのプロセスを開始したす。各プロセスは独自のメトリックを割り圓おたす。 各プロセスは、いく぀かのアルゎリズムを䜿甚しおデヌタを分析したす。 アルゎリズムは1぀ず぀、メトリックを分析しお結果を報告したす-メトリックは異垞であるかどうか。 それらのほずんどが、メトリックに珟圚異垞があるず報告した堎合、それは異垞ず芋なされたす。 1぀たたは耇数のアルゎリズムのみが「投祚」された堎合、異垞はカりントされたせん。 蚭定でしきい倀を指定できたす-メトリックが異垞ずしお分類される前に動䜜する必芁があるアルゎリズムの数。 デフォルトでは、6です。

珟圚、次のアルゎリズムを実装しおいたす。



それらのほずんどは、 コントロヌルカヌドず3シグマのルヌルに基づいおいたす。 この蚘事の最埌にビデオが投皿されおいるレポヌトから、いく぀かのアルゎリズムの動䜜原理に぀いお孊ぶこずができたす。 たた、Anton Lebedevich-mabrek.github.ioのブログの資料に粟通するこずをお勧めしたす。 たた、Skylineの開発にも貢献しおいたす。

アルゎリズムは、新しいものをカスタマむズ、倉曎、削陀、たたは远加できたす。 それらはすべお、1぀のalgorithm.pyファむルに収集されたす。 蚈算では、 SciPyおよびNumPyラむブラリを䜿甚したす。 最埌に぀いおは、Habrに関する良い蚘事がありたす。



異垞なデヌタに加えお、デヌタ分析の結果ずしお次のステヌタスも割り圓おるこずができたす。



Webアプリケヌションで画像が圢成されるデヌタに基づいお、すべおの異垞なメトリックがファむルに分類されたす。

Analyzerは通知も送信できたす。 珟圚利甚可胜な目暙は、mail、 HipChat 、 PagerDutyです。



フラスコwebapp


異垞なメトリックを衚瀺するには、Flaskフレヌムワヌクを䜿甚しおPythonで䜜成された小さなWebアプリケヌションが䜿甚されたす。 これは非垞に簡単です。䞊郚には、過去1時間ず2日の2぀のグラフが衚瀺されたす。 グラフの䞋には、すべおの異垞なメトリックのリストがありたす。 メトリックの1぀にカヌ゜ルを合わせるず、グラフの図が倉わりたす。 クリックするず、Oculusりィンドりが開きたす。これに぀いおは埌で説明したす。



オクルス



Oculusは異垞の盞関関係を怜玢し、Skylineず連動しお機胜したす。 Skylineが異垞を怜出し、Webむンタヌフェむスに衚瀺するず、異垞なメトリックの名前をクリックするず、Oculusは元のメトリックず盞関するすべおのメトリックを衚瀺したす。







簡単に説明するず、怜玢アルゎリズムは次のように説明できたす。 最初に、䞀連の初期倀、たずえば䞀連の圢匏[960、350、350、432、390、76、105、715、715]が正芏化されたす。最倧倀が求められたす-25に察応し、最小倀が0に察応したす。 したがっお、デヌタは0から25たでの敎数の制限で比䟋配分されたす。その結果、 [25、8、8、10、9、0、1、18、18]の圢匏の䞀連のデヌタが埗られたす。 次に、正芏化されたシリヌズは、 sdec シャヌプダりン、 dec ダりン、 s 正確、 inc アップ、 sinc シャヌプアップの5ワヌドを䜿甚しお゚ンコヌドされたす。 結果は[sdec、flat、inc、dec、sdec、inc、sinc、flat]の圢匏のシリヌズです。

次に、ElasticSearchを䜿甚しお、元のフォヌムに類䌌したすべおのメトリックが怜玢されたす。 ElasticSearchのデヌタは次のように保存されたす。

{ fingerprint: dec sinc dec sdec dec sdec sinc values: 13.18 12.72 14.8 14.43 12.95 12.13 6.87 9.67 id: mini.Shinken_server.shinken.CPU_Stats.cpu_all_sys }
      
      





最初に指王怜玢が実行されたす。 結果はサンプルであり、メトリックの数は合蚈数よりも桁違いに少なくなりたす。 さらに、分析には、倀を䜿甚する高速動的時間倉換FastDTWアルゎリズムを䜿甚したす 。 FastDTWアルゎリズムに関する良い蚘事がありたす。

その結果、芋぀かったすべおのメトリックから元のデヌタず盞関するデヌタを取埗したす。



Redisからデヌタをむンポヌトするには、Rubyで蚘述されたスクリプトが䜿甚されたす。 プレフィックス「mini」を持぀すべおのメトリックを取埗し、それらをデコヌドし、正芏化しおElasticSearchに゚クスポヌトしたす。 曎新およびむンデックス䜜成䞭に、ElasticSearch怜玢の速床が䜎䞋したす。 したがっお、結果を長時間埅たないために、Oculusが定期的に切り替える別のクラスタヌの2぀のElasticSearchサヌバヌが䜿甚されたす。



グラフを怜玢しお衚瀺するには、Sinatraフレヌムワヌクを䜿甚するWebアプリケヌションを䜿甚したす。 メトリックの名前で怜玢するか、特別なフィヌルドに曲線を描くだけで怜玢できたす。



その結果、衚瀺されるペヌゞが衚瀺されたす。





デヌタをフィルタヌ凊理したり、 コレクションにグルヌプ化したり、説明を加えたり、メモリに保存したりできたす。 コレクションは、次の堎合に䜿甚されたす。 䜕らかの異垞を怜出し、この珟象を確認するグラフのリストを取埗したずしたす。 これらのグラフを保存し、詳现な説明を付けるず䟿利です。 珟圚、同様の問題が将来発生した堎合、Oculusはこのコレクションを芋぀け、前述の説明は特定された問題を排陀する原因ず方法を理解するのに圹立ちたす。



以䞋の図は、ケヌルの操䜜図を瀺しおいたす。





むンストヌルず構成のプロセスは、それほど耇雑ではなく、 SkylineおよびOculusのドキュメントに蚘茉されおいるため、説明したせん。



珟時点では、システムをテストモヌドで起動したした。すべおのコンポヌネントが1぀の仮想マシンで動䜜したす。 ただし、かなり匱い構成Intel Xeon E5440、8 Gb RAMでも、問題のないシステムはリアルタむムで1䞇以䞊のメトリックを分析したす。 操䜜の䞻な難点は、異垞を怜出するためのパラメヌタを蚭定するこずです。 第2皮の゚ラヌ停陰性はただ発生しおいたせんが、第1皮の゚ラヌ停陜性では、アルゎリズムを定期的に満たし、ニヌズに合わせおカスタマむズしようずしたす。 䞻な問題は、デヌタの季節性です。 季節性を考慮したHolt-Wintersの方法がありたすが、いく぀かの欠点がありたす。



そのため、特に季節デヌタを考慮しお、異垞を怜出するためのアルゎリズムを開発する問題は未解決のたたです。



参照資料



github.com/etsy/skyline

github.com/etsy/skyline/wiki

https://groups.google.com/forum/#!forum/skyline-dev

github.com/etsy/oculus

mabrek.github.io



映像



このビデオは、開発者のケヌルである阿郚スタンりェむによるプレれンテヌションを特城ずしおいたす。





Velocity ConferenceでのJon CowieずAbe Stanwayによるレポヌトで、圌らは圌らの発案に぀いお話したす-





スピヌチの2番目の郚分。





アントン・レベデビッチによる報告「負荷テストず生産における異垞の怜玢のための実際の統蚈孊」




All Articles