Foglightがメモリ負荷の問題を即座に報告すると考えるのはいつまで間違えられますか

何が起こっているかを知っているときにその自信感に慣れているなら、すべてがコントロールされていることを知っているでしょう。 この投稿では、私が水たまりで思い切って座った方法、それが起こった理由、およびエラーに関するどのような作業が行われたかについてお話します。 これは、Quest Foglightとメモリをチェックするための組み込みルールについてです。







最初の記事で、私たちの部門でQuest Folight監視システムがどのように委託されたかを説明しました。 数週間前、次のリリース後、サービスの1つがメモリを満杯にし、「システムのメモリ不足例外」という形で問題を引き起こしているという苦情が始まりました。 そのため、些細なメモリリークに対処しています。 実際にメモリが徐々に詰まり、ルールが通過するためのすべてのしきい値が日中に通過したため、監視がサイレントになるのはなぜですか? 少なくとも2回は通知されるべきでしたが、これは起こりませんでした。 一緒に考えてみましょう。



この図には、VMW仮想マシンのメモリ使用率ルールと、このルールがVMWVirtualMachineMemoryトポロジをカバーしているという事実が示されています。 これまでのところ、すべてが正しく、トリックの前兆ではありません。







次に、しきい値の1つを見てみましょう。 「#utilization from $ scope.hostMemory#。」の行に興味があります。この場合のスコープは、前の図のVMWVirtualMachineMemoryです。まだキャッチはありませんが、そうです。







問題が既にわかっている場合は、私よりもvCenterについて多くのことを知っています。 問題はどこにありますか? 問題は、vCenterを統計としてフィードするものを分析するときに発見されました。 このリンクは、vCenterから抽出できるさまざまなメトリックに関する情報を提供します。 この間ずっと使用していたものは、Active Memoryにすぎませんでした。 リンクをたどる気がない場合は、「最近使用したメモリページに基づいてVMkernelが推定した、アクティブに使用されているメモリの量」という引用文があります。これを既に笑っている人は正しいです。 メモリリークとは何ですか? 記憶漏れ、彼女はハムスターのようであり、種を取り、頬にそれを置きますが、彼らとの積極的な行動をとりません。 これは、負荷が突然ではなく徐々に増加する場合、ルールが機能しないことを意味します! このため、memtestでこのルールをテストしたときに一貫してアラートを受信し、リークが発生しても何も受信しませんでした。



その後、サプライヤでケースを開き、そうです、もちろん正しいという確認を受け取りましたが、VMwareカートリッジから必要な情報を取得することに代わるものはありません。 必要な情報を取得するための代替手段としてホストエージェントを使用することをお勧めします。 私は、多くの人がこの監視システムを使用したことがなく、オペレーティングシステムからデータを収集する絶対にワイルドなアプローチを認識していないと確信しています。 システムにマシンをインポートまたは自動的に追加するメカニズムはありません。 それぞれを手動で追加し、平均で1分半かかります。 言うまでもなく、数百の仮想マシンを手動で追加したい人はいません。結局、削除されたものと追加されたものを追跡する必要があります。



ソリューションは、powershellで記述されたいくつかのスクリプトでした。 ゼロ以外のIPが含まれる仮想マシンのリストを常にチェックして比較します。 2つ目は、WMIを介して仮想マシンに直接接続され、必要なものを収集します。 私はpowershellの鑑定家ではないことをすぐに認めます。そのため、紹介のためだけにレビュー用にスクリプトを提出します-自慢することは何もありません。 すぐに並列化する必要があることを理解していても、PowerShellジョブをすぐにマスターできなかったことに言及するだけで十分です。数百台の仮想マシンを順番にチェックするスクリプトは約10分かかり、データを収集する最良の方法とはほど遠いです。 現在、これらのスクリプトはFoglightのデータを収集し、既にスクリプト内で直接行うことはできますが、その中にルールとレポートを作成しますが、大画面にデータを美しく表示することはできません。



これがデータ収集スクリプトです。 驚異的なものはありません。 一部をカットする必要がありました-私たちの環境にはさまざまな特性があります。



非表示のテキスト
$csv = Import-Csv .\Inv.csv #Load inventory foreach ($server in $csv){ if ($server."Domain Name" -like "**"){ #This limits the number of concurrently running jobs. Set number of jobs and sleep timer here. While ($(Get-Job -state running).count -ge 50){ Start-Sleep -Milliseconds 250 } Start-Job -scriptblock { param($ipAddress, $hostName, $domainName) $return=@() $Memory=Get-WmiObject win32_operatingsystem -ComputerName $ipAddress | Foreach {"{0:N2}" -f ((($_.TotalVisibleMemorySize - $_.FreePhysicalMemory)*100)/ $_.TotalVisibleMemorySize)} $return=New-Object PSObject $return|Add-Member -MemberType "NoteProperty" -Name "ipAddress" -Value $ipAddress $return|Add-Member -MemberType "NoteProperty" -Name "memoryUtilization" -Value $Memory $return|Add-Member -MemberType "NoteProperty" -Name "hostName" -Value $hostName $return|Add-Member -MemberType "NoteProperty" -Name "domainName" -Value $domainName if ($error[0]) { $return|Add-Member -MemberType "NoteProperty" -Name "Error" -Value $error[0] } else { $return|Add-Member -MemberType "NoteProperty" -Name "Error" -Value "NA" } $return } -ArgumentList ($server."IP Address", $server."VMName".toUpper(), $server."Domain Name".toUpper()) } } Get-Job | Wait-Job -Timeout 30 $recievedObject = Get-Job | Receive-Job Get-Job | Remove-Job -Force #start building folight observation set Write-Output "TABLE WMI" foreach($observation in $recievedObject) { Write-Output "START_SAMPLE_PERIOD" Write-Output "host.String.id = $($observation.hostName).$($observation.domainName)" Write-Output "ipAddress.String = $($observation.ipAddress)" Write-Output "physicalMemoryUsed:percent = $($observation.memoryUtilization)" Write-Output "error.StringObservation.obs =$($observation.Error)" Write-Output "END_SAMPLE_PERIOD" } Write-Output "END_TABLE"
      
      







建設的な批判は大歓迎です。



All Articles