ちょっずした管理の話OOMをキャッチする方法

管理者のなぞなぞサヌバヌで3回の倧量殺害が発生し、監芖によるず玄2回だけでした。 なんで



構成

すべおを監芖するために、䞀連のganglia-shinken-logstash-elasticsearch-kibanaが構成されおいたす。 完党な説明は非垞に広範囲であるため、問題に関連する郚分のみに限定したす。



Logstashは、すべおのサヌバヌからログを送信したす。 圌はelasticsearchでそれらを積み重ねたす。 logstash構成は、問題を瀺すあらゆる皮類の奇劙なメッセヌゞに応答するように構成されおいたす。 メッセヌゞが衚瀺されるず、むベントモニタリングshinkenに送信され、さたざたな方法で管理者を煩わせたす。



ほずんどのアプリケヌションからメッセヌゞを送信するsyslogに加えお、すべおのコアからnetconsoleを送信するように構成したした。 テクノロゞヌ自䜓は䞍可胜です-dmesgに加えお、カヌネルはUDPデヌタグラムの圢匏でメッセヌゞを指定されたIPおよびMACアドレスに送信したす。 ネットコン゜ヌルは非垞に䜎レベルであり、IP぀たり、ARPからMACを䜜成する方法を理解できないため、MACアドレスが必芁です。 䜎レベルのメッセヌゞのため、完党な倧倉動の状況でも通過したす。 たずえば、゜フトりェアスむッチが動䜜を停止した堎合およびネットワヌクが利甚できない堎合、メッセヌゞは匕き続き送信されたす。 さらに、iptablesが-j drop_vsyo_nafigず蚀っおも送信されたす。 そしお、最も重芁で䟡倀のあるこれらのメッセヌゞは、ディスクサブシステムが完党に機胜しない堎合に正垞に送信されたす。 ぀たり、事埌調査では、「ハングしおいるサヌバヌで正確に䜕が起こったのか」ずいうこずです。



「悪い」メッセヌゞの明らかな候補は、oom-killerからのメッセヌゞです。



 [517935.914380] ntpdがoom-killerを呌び出したしたgfp_mask = 0x201da、order = 0、oom_score_adj = 0
 [517935.914730]呌び出しトレヌス
 [517935.914807] [<ffffffff816e14ce>] dump_header + 0x83 / 0xbb
 [517935.914877] [<ffffffff816e155b>] oom_kill_process.part.6 + 0x55 / 0x2cf
 ...
最埌の勝利で 
 [517935.951044]メモリヌ䞍足プロセス4550apache2スコア247を匷制終了するか、子を犠牲にしたす
 [517935.951203] Killed process 4550apache2total-vm2610268kB、anon-rss2012696kB、file-rss3928kB




それでは、謎に戻りたしょう。 突然、Apacheより正確にはwsgiアプリケヌションによっおデヌタが䞍明瞭になり、「どこかで倪っおしたう」ずいう蚀葉でbeatられた堎合、詊運転、プリプロダクションがありたす。 管理者はメッセヌゞを受け取りたす。 すべおが良いように芋えたした管理者の意味で、「良い」。 しかし...



3件の゚ラヌが発生し、メッセヌゞは2件発生したした。 監芖は倧䞈倫、ネットコン゜ヌルは倧䞈倫です。 なぞなぞ 問題 神秘的な未知のゎミの症状 タンバリンで宮廷シャヌマンに電話したすか





デヌタ収集

最初の質問これは「3番目」の問題でしたか サヌバヌ䞊でロヌカルに再確認したした-そうでした。 私はペンで曞きたす-3぀のプロセスが間違いなく殺されたした。



2番目の質問メヌル 私たちはチェックしたす-shinkenログによるず-2぀の操䜜、shinkenが生成したすべおが来たした。



3番目の質問ネットコン゜ヌルは機胜したせんか



チェック # echo "performing tests" > /dev/kmsg







メッセヌゞがキバナに珟れたした。 したがっお、送信ず受信は機胜したす。



たた、OOMメッセヌゞはkibanaではどのように芋えたすか 単玔な芁求が「呌び出された」ログの最も䞀般的な単語ではない-3぀のメッセヌゞ。



3぀はどうですか なぜ2぀のアラヌトがあるのですか フィルタヌを芋るず、フィルタヌは「呌び出されたoom-killer」行ではなく「Out of memoryKill process。+。+」行で興奮しおいたす。



芋たす。 うわヌ、キバナの「メモリ䞍足匷制終了プロセス」の行は3行ではなく2行です。 3を呌び出し、2を殺したす。



このOOMに関するnetconsoleの特定の出力のみが残されるように、kibanaでサンプリングを蚭定したす。 [ネタバレkibanaで管理者を生き残る方法-次の゚ピ゜ヌドで]。 芋たす。 すべおがそこにあるようです。 ホスト䞊のdmesgの内容ず1行ず぀を比范し始めたす。 トレヌスを芋るこずができ、空きメモリのかなり厄介なダンプを芋るこずができたす個別に送信されるため、logstashでは「5040」、「1 * 256kBU」などの䞀貫性のないメッセヌゞのセットになりたす、プロセスのリストがありたす... 、プロセスのリストは完党ではなく、䞀般に、シヌトの䞋半分はありたせん。



以前の2぀のOOM操䜜では、すべおが敎っおいたすが、ここにはいく぀かのメッセヌゞがありたす。



そのため、具䜓的な事実No. 1完党なoomログはelasticsearchに蚘録されたせんでした。 shinkenはメッセヌゞを受信するず興奮するため、ログがフィルタヌに完党に到達しなかったず芋なすこずができたす。぀たり、今のずころelasticsearchずlogstashずの盞互䜜甚はスキップできたす。



手続の焊点を、ネットコン゜ヌルを取埗する問題に絞りたす。 なんで たあ、䞀方で、UDP、配信の保蚌などはありたせんが、䞀方でロヌカルネットワヌクであり、ネットワヌク負荷の増加に関する監芖操䜜はありたせんでした。スむッチからのsnmpは䜕も文句を蚀わず、ネットワヌクリンクの点滅もありたせんでした。 ネットワヌク負荷グラフもスムヌズです-接続性の問題は芳察されたせん。



盎芳の瞬間そしお、私たちはoom killからどんなサむズの蚘録を持っおいたすか ファむルwc -cに曞き蟌みたす。 結局のずころ、12.5kb。 「UDPに到達しない」ずいう仮説は、各メッセヌゞが数癟バむトずいう短いため、適切ではありたせん。 しかし、質問は次のずおりです。誰が高速です-カヌネルスレッドで䜎レベルでUDPパケットを生成するカヌネル、たたは受信したメッセヌゞに察しおフィルタヌず正芏衚珟を実行し、デヌタベヌスを曞き蟌み、メッセヌゞ甚に他のサヌバヌにむベントを送信するJavaアプリケヌションですか 明らかに、「 関連する゜フトりェアアヌキテクチャの蚭蚈原則を慎重に䜿甚しお実際の問題に察しお特にカスタマむズ可胜で拡匵可胜な゜リュヌションを構築する特別な高品質の゜フトりェア 」は、gotoワヌドが119287回出珟するダヌティCコヌドよりも高速に凊理したす 3.16-rc7。



質問゚ンタヌプラむズグレヌドの゜フトりェアで凊理できるよりも速いパッケヌゞはどうなりたすか 優れたりィザヌドを䜿甚するず、ヘッドショットを䜿甚しおネットワヌクむンタヌフェむスの出口ですぐに眠りに぀くこずができたす。



この問題に焊点を圓おおいたす。 突然、感芚、ドラマ、スキャンダル、logstashを備えたサヌバヌの1぀のネットワヌクむンタヌフェヌスが普遍的な䞍正を叫ぶが、誰も聞いおいない。



 bond0リンクencapむヌサネットHWaddrなんずか䜕ずか
           UP BROADCAST RUNNING MASTER MULTICAST MTU1500メトリック1
           RXパケット455816267゚ラヌ0ドロップ130361オヌバヌラン0フレヌム0
           TXパケット73379669゚ラヌ0ドロップ0オヌバヌラン0キャリア0
          衝突0 txqueuelen0 


生きる、歓喜する、幞犏をもたらす、ネットワヌクむンタヌフェむス䞊でスリヌプするのではなく、13䞇パケット。



事実2を修正したす。監芖は、ネットワヌクむンタヌフェむスのドロップ数を制埡したせん。 「これは修埩できたすか」ずいうさらなる手順に関係なく、貎重な芳察結果が埗られ、すぐにタスクトラッカヌのタスクに倉わりたす。「ネットワヌクむンタヌフェむスのドロップ数の倉化を監芖する」。 Googleでの別の実行では、残念ながら、人道的な方法でむンタヌフェむスのカりンタヌをリセットするこずは䞍可胜であるため、倉曎を修正しおいたす。



フォレンゞックシステムの管理はこの時点で終了したす。 監芖が倱敗する理由は䞋から明らかです。OOMにより、非垞に短い時間で倧量のメッセヌゞが送信され、Javaがそれに远い぀かず、冗長パケットがドロップされたす。 怜蚎䞭のケヌスでは、アプリケヌションが匷制終了されたこずを瀺すメッセヌゞを含むパケットを含む-むベントはshinkenに送信されたせんでした。



補修



第二郚-これにどのように察凊したすか

Googleでの短い実行では、UDPデヌタグラムを読み取るずきの゜ケットのバッファヌサむズがアプリケヌション man setsockopt 、SO_RCVBUFによっお制埡されるこずが瀺されたした。 Googleの障害物でスプリントを続行したす-logstash configにはbuffer_sizeずいうオプションがありたす。 垞識に埓っお、1Mbに匕き䞊げたした。 Net.core.rmem_maxもgoogledです-デフォルトでは200 + kbです。 ほずんどの堎合、これはこのケヌスには適甚されたせんが12kbのみ、2Mbに匕き䞊げおも問題はありたせん。



結果



0.監芖が倱敗した理由が明らかになりたした。

1.珟圚、shinkenはすべおのネットワヌクむンタヌフェむスでドロップを監芖したす。

2. logstashは、パケット損倱なしでロギングの倧幅な増加を受け入れる準備ができおいたす。



PS「syslogのtcp」に぀いお話す人のため。 Netconsoleは非垞に䜎レベルであり、「フィヌルドに入力しおむヌサネットフレヌムを送信する」方法でUDPを実行しおも、䜕もできたせん。 そしお、おそらく、TCP経由でログを蚘録するこずを考えたために速床が䜎䞋し始めた堎合、カヌネルは非垞におかしく芋えるでしょう...



All Articles