UbiquitiUnifiデバイスのCPUとメモリを監視する方法

これは、RetuneABのインフラストラクチャマネージャーであるPatrikNordlundによるゲストブログ投稿です。 Retune ABは、スウェーデンのストックホルムを拠点とするマネージドサービスプロバイダーであり、LogicMonitorを使用して、お客様がハイブリッドインフラストラクチャの監視を最新化するのを支援してきました。 Patrikは2003年からITに携わっており、クライアントからサーバー、ネットワーキングに至るまですべてを処理しています。

Retune ABは、さまざまなUbiquitiデバイス(エンタープライズおよびワイヤレスブロードバンドプロバイダー向けのワイヤレスデータ通信製品)を管理しています。 当然、私たちはこれらを監視下に置きたかったのです。 ただし、Ubiquitiは、信頼できると判断した方法でSNMPを介してリアルタイムのCPUまたはメモリメトリックを公開しません。これらは、デバイスの状態を確認するために必要な重要な値の一部です。 メモリとCPUが急増してそこにとどまり、再起動後にのみリソースが解放されるというインシデントが発生しました。 LogicMonitorでトリガーされたアラートを使用して、可能な限り迅速にアクションを実行できるようにします。

簡単なWeb検索の結果、他のUbiquitiユーザーがCPUの平均使用量をXNUMX分、XNUMX分、およびXNUMX分間隔で取得する非公式のOIDを見つけたことがわかりましたが、これらの値はすべてのデバイスで正しく機能しませんでした。 また、記憶を見ようとしたとき、私たちは完全に盲目でした。 公式のUBNT-Unifi-MIBには、CPUやメモリについての言及はありません。

LogicMonitorの拡張性のおかげで、コレクターからPowerShellスクリプトを実行することで簡単な回避策を見つけることができました。 これが私たちがそれをした方法です:

  • SSHをPowerShellで使用できるように、POSHモジュールposh-sshをコレクターにインストールします
  • アクセスポイントに接続します
    • 認証はSSH-key.pairを使用して行われます。 公開鍵は(Unifiコントローラーを介して)APにアップロードされ、秘密鍵はコレクターに保存され、強力なパスフレーズで保護されます
    • スクリプトで$ keyFileを編集するか、次の場所にあるコレクターのインストールディレクトリに秘密鍵を配置できます。 LogicMonitor \ Agent \ bin \ Local_Disk_On_Collector \ privatekey_LM.key
    • パスフレーズとユーザー名がプロパティとしてLogicMonitorに追加されます unifi.sshuser 及び unifi.sshpassphrase.key そのため、スクリプトで直接公開されることはありません
  • ネイティブLinuxコマンドを使用して、CPUとメモリのメトリックを取得します
  • 収集されたデータは、パーセンテージ値を計算するようにフォーマットされてから、LogicMonitorに返されます。

CPU使用率のスクリプト

$ username = "## unifi.sshuser ##" $ passwd = "## unifi.sshpassphrase.key ##" $ secpasswd = ConvertTo-SecureString $ passwd -AsPlainText -Force $ device = "## system.ips ##" $ keyFile = "Local_Disk_On_Collector \ privatekey_LM.key" $ creds = New-Object System.Management.Automation.PSCredential($ username、$ secpasswd)#デバイスへのSSHセッションNew-SSHSession -ComputerName $ device -Credential $ creds -Keyfile $ keyFile -AcceptKey | Out-Null#CPU統計を取得$ cpuAll = Invoke-SSHCommand -index(Get-SSHSession -host $ device).sessionid -Command "cat / proc / stat | grep '^ cpu'"#セッションを削除Remove-SSHSession(Get- SSHSession -host $ device)| Out-Null#CPU使用量を計算$ cpuArray = $ cpuAll.Output -split "+" $ cpuTotal =([int] $ cpuArray [1])+([int] $ cpuArray [2])+([int] $ cpuArray [3])+([int] $ cpuArray [4])+([int] $ cpuArray [5])+([int] $ cpuArray [6])+([int] $ cpuArray [7])+( [int] $ cpuArray [8])+([int] $ cpuArray [9])+([int] $ cpuArray [10])$ cpuIdle =([int] $ cpuArray [4])$ cpuUsage =($ cpuTotal -$ cpuIdle)/ $ cpuTotal $ cpuUsedPercent = $ cpuUsage * 100 $ cpuPercent =([int] $ cpuUsedPercent)書き込みホスト "CPUUsage = $ {cpuPercent}" Exit 0

メモリ使用量のスクリプト

$ username = "## unifi.sshuser ##" $ passwd = "## unifi.sshpassphrase.key ##" $ secpasswd = ConvertTo-SecureString $ passwd -AsPlainText -Force $ device = "## system.ips ##" $ keyFile = "Local_Disk_On_Collector \ privatekey_LM.key" $ creds = New-Object System.Management.Automation.PSCredential($ username、$ secpasswd)#デバイスへのSSHセッションNew-SSHSession -ComputerName $ device -Credential $ creds -Keyfile $ keyFile -AcceptKey | Out-Null#メモリ統計の取得$ memAll = Invoke-SSHCommand -index(Get-SSHSession -host $ device).sessionid -Command "free | grep'Mem: '"#セッションの削除Remove-SSHSession(Get-SSHSession -host $デバイス)| Out-Null#メモリ使用量を計算します$ memArray = $ memAll.Output -split "+" $ memTotal = $ memArray [1] $ memUsed = $ memArray [2] if($ memTotal -eq "Mem:"){$ memTotal = $ memArray [2] $ memUsed = $ memArray [3]} $ memUsedPercent = [int](($ memUsed / $ memTotal)* 100)書き込みホスト "MemoryUsed = $ {memUsedPercent}" Exit 0

私たちのチームは、Linuxコマンドからの出力にわずかな違いがあることに気づきました。つまり、特定のデバイスに合わせてスクリプトを微調整する必要があるかもしれません。

これらのメトリックは、APIを介してUnifiコントローラーから取得できます。 ただし、この場合、各デバイスはコントローラーに質問を生成し、データの流入とネットワーク監視の単一障害点を引き起こします。 LogicMonitorのおかげで、私たちはビジネスにとって何が重要であるかを監視する機能を備えており、Ubiquitiデバイスで受け取っているメトリックに自信を持っています。

これらのモジュールは公開されており、顧客がデータソースを交換するためのリポジトリであるLM Exchangeを介して利用でき、コード6H7TE3およびJ9NFZJを使用して見つけることができます。 LogicMonitorが環境でどのように役立つかについて詳しく知りたい場合は、ここでサインアップしてください。 無料試用 or デモ.