SSHを介したNetAppボリュームの監視



みなさん、こんにちは。私の名前はイゴール・シドレンコです。モニタリングは私の仕事の主要な分野の1つであり、私の趣味でもあります。Zabbixと、それを使用して、SSH経由でのみアクセスできるNetAppボリュームについて必要な情報を監視する方法について説明します。モニタリングとZabbixのトピックに興味のある方は、猫の下でお願いします。



最初に、基本的なLinuxテンプレートのファイルシステムと同様に、ノード上のNFSマウントをキャッチして監視下に置く特別なテンプレートがハングしている特定のサーバーにボリュームをマウントすることにより、ボリュームを監視しました。マウントはfstabに登録し、手動でマウントする必要がありました。このため、多くが失われ、忘れられていました。



それから素晴らしいアイデアが思い浮かびました。これをすべて自動化する必要があります。いくつかのオプションがありました:



  • SNMPで動作するがアクセスできない既製のテンプレートがあります。
  • ボリュームのリストの取得とノードへの自動マウント:フォルダーを作成し、fstabを登録し、マウントする必要があります。それだけで、痔核が多すぎます。
  • 優れたAPIがありますが、私たちはスペースを借りるだけなので、私たちのバージョンのONTAPではそれが削減され、ユーザーに必要な情報を提供しません。
  • どういうわけか、SSHアクセスを使用してボリュームを取得し、監視用にセットアップします。


選択はSSHエージェントに委ねられました



低レベル検出(LLD)



まず、低レベルの検出(LLD)を作成する必要があります。これらは、ボリュームの名前になります。これはすべて、必要なボリュームに関する特定の情報を引き出すために必要です。生データは次のようになります(執筆時点では114)。



set -unit B; volume show -state online






さて、クラッチなしでどのように行うことができますか:ボリュームの名前をJSON形式で表示する1行のbashスクリプトを書いてみましょう(これは外部チェックであるため、スクリプトはディレクトリのZabbixサーバーにあります/usr/lib/zabbix/externalscripts):



netapp_volume_discovery.sh
#!/usr/bin/bash

SVM_NAME=""
SVM_ADDRESS=""
USERNAME=""
PASSWORD=""

for i in $(sshpass -p $PASSWORD ssh -o StrictHostKeyChecking=no $USERNAME@$SVM_ADDRESS 'set -unit B; volume show -state online' | grep $SVM_NAME | awk {'print $2'}); do echo '{"volume_name":"'$i'"}'; done | jq -s '.








次に、テンプレートを作成し、受信したデータに基づいてデータ項目を作成する必要があります。











データ項目



自動的にアイテムを作成するには、する必要がある項目をプロトタイプ 私たちは、マスターアイテムといくつかの使用する依存項目を。したがって、ボリュームごとに、SSHを介した一連のコマンドが実行される1つのマスター要素が作成されます。











set -unit B; df -i -volume {#VOLUME_NAME}; volume show-space {#VOLUME_NAME}; statistics volume show -volume {#VOLUME_NAME}


私たちはそのようなシートを手に入れます:



ボリュームを取得:ackey_media info
Last login time: 9/15/2020 12:42:45
Filesystem               iused      ifree  %iused  Mounted on

/vol/ackey_media/           96     311191      0%  /ackey_media

                      Volume Name: ackey_media
                      Volume MSID: 2159592810
                      Volume DSID: 1317
                     Vserver UUID: 46a00e5d-c22d-11e8-b6ed-00a098d48e6d
                   Aggregate Name: NGHF_FAS2720_04
                   Aggregate UUID: 7ec21b4d-b4db-4f84-85e2-130750f9f8c3
                         Hostname: FAS2720_04
                        User Data: 20480B
                User Data Percent: 0%
                    Deduplication: -
            Deduplication Percent: -
          Temporary Deduplication: -
  Temporary Deduplication Percent: -
              Filesystem Metadata: 1150976B
      Filesystem Metadata Percent: 0%
              SnapMirror Metadata: -
      SnapMirror Metadata Percent: -
             Tape Backup Metadata: -
     Tape Backup Metadata Percent: -
                   Quota Metadata: -
           Quota Metadata Percent: -
                           Inodes: 12288B
                   Inodes Percent: 0%
                   Inodes Upgrade: -
           Inodes Upgrade Percent: -
                 Snapshot Reserve: -
         Snapshot Reserve Percent: -
        Snapshot Reserve Unusable: -
Snapshot Reserve Unusable Percent: -
                   Snapshot Spill: -
           Snapshot Spill Percent: -
             Performance Metadata: 28672B
     Performance Metadata Percent: 0%
                       Total Used: 1212416B
               Total Used Percent: 0%
         Total Physical Used Size: 1212416B
         Physical Used Percentage: 0%
                Logical Used Size: 1212416B
             Logical Used Percent: 0%
                Logical Available: 10736205824B

DOMCLIC_SVM : 9/15/2020 12:42:51

                        *Total Read Write Other  Read Write Latency 

     Volume     Vserver    Ops  Ops   Ops   Ops (Bps) (Bps)    (us) 
----------- ----------- ------ ---- ----- ----- ----- ----- ------- 
ackey_media DOMCLIC_SVM      0    0     0     0     0     0       0




このシートから、必要なメトリックを選択する必要があります。



規則的な表現の魔法



当初は前処理にJavaScriptを使いたかったのですが、どういうわけか習得できず、うまくいきませんでした。そのため、常連に立ち寄り、ほとんどどこでも使っています。



使用されたinodeの数



各ボリュームのinodeに関する情報のみを2段階で選択します。 まず、すべての情報:















\/vol\/\w+\/.*










次に、具体的にはメトリックによって:



(\d+)\s+(\d+)\s+(\d+)










出力-出力フォーマットテンプレート。\N ( N=1..9)-エスケープシーケンスは、N番目の一致するグループに置き換えられます。エスケープシーケンス\0は、一致するテキストに置き換えられます。



  • \1 - Inode used on {#VOLUME_NAME} -使用されたinodeの数。
  • \2 - Inode free on {#VOLUME_NAME} -無料のinodeの数。
  • \3 - Inode used percentage on {#VOLUME_NAME} -inodesをパーセンテージとして使用。
  • Inode total on {#VOLUME_NAME}-計算された要素、使用可能なinodeの数。


last(inode_free[{#VOLUME_NAME}])+last(inode_used[{#VOLUME_NAME}])


使用済みスペース



ここではすべてが単純で、データとレギュラーはより快適な形式になっています。 必要なメトリックを引き出し、数値のみを取得します。















(?<=Logical Available:\s)\d+










収集されたメトリック:



  • Logical available on {#VOLUME_NAME} -使用可能な論理スペースの量。
  • Logical used percent on {#VOLUME_NAME} -論理的な場所をパーセンテージで使用。
  • Logical used size on {#VOLUME_NAME} -使用された論理スペースの量。
  • Physical used percentage on {#VOLUME_NAME} -使用された物理スペースの割合。
  • Total physical used size on {#VOLUME_NAME} -使用された物理スペースの量。
  • Total used on {#VOLUME_NAME} -使用された合計スペース。
  • Total used percent on {#VOLUME_NAME} -使用された場所の合計(パーセンテージ)。
  • Logical size on {#VOLUME_NAME}-計算された要素、使用可能な論理スペースの量。


last(logical_available[{#VOLUME_NAME}])+last(total_used[{#VOLUME_NAME}])


ボリュームパフォーマンス



ドキュメントを読み、さまざまなコマンドを調べてみると、ボリュームのパフォーマンスに関するメトリックを取得できることがわかりました。小片がこれに責任があります:



statistics volume show -volume {#VOLUME_NAME}










最初の規則性を持つ共通シートからパフォーマンスメトリックを選択します。



.DOMCLIC_SVM.*










次に、番号をグループ化します。



(\d+)\s+(\d+)\s+(\d+)\s+(\d+)\s+(\d+)\s+(\d+)\s+(\d+)






どこ:



  • \1 - Total number of operations per second on {#VOLUME_NAME} -1秒あたりの操作の総数。
  • \2 - Read operations per second on {#VOLUME_NAME} -1秒あたりの読み取り操作。
  • \3 - Write operations per second on {#VOLUME_NAME} -1秒あたりの書き込み操作。
  • \4 - Other operations per second on {#VOLUME_NAME} -1秒あたりの他の操作(それが何であるかはわかりませんが、何らかの理由で撮影します);
  • \5 - Read throughput in bytes per second on {#VOLUME_NAME} -読み取り速度(バイト/秒)。
  • \6 - Write throughput in bytes per second on {#VOLUME_NAME} -書き込み速度(バイト/秒)。
  • \7 - Average latency for an operation in microseconds on {#VOLUME_NAME} -マイクロ秒単位の操作の平均待ち時間。


アラート



トリガーのセットは、標準、場所、およびinodeです。







  • {#VOLUME_NAME}の空きディスク容量が1%未満
  • {#VOLUME_NAME}の空きディスク容量が5%未満
  • {#VOLUME_NAME}の空きディスク容量が10%未満
  • {#VOLUME_NAME}で1%未満の無料のinode
  • {#VOLUME_NAME}で5%未満の無料のinode
  • {#VOLUME_NAME}で10%未満の無料のinode


視覚化



視覚化は主にグラファナ行わ、美しくて便利です。たとえば、1つのボリュームは次のようになります。 右上隅に[ Zabbixで表示]ボタンがありZabbixに移動して、選択したボリュームのすべてのメトリックを表示できます。











結果



  • 監視用ボリュームの自動設定。
  • ボリュームがNetAppから削除された場合、監視からのボリュームの自動削除。
  • 1つのサーバーへのバインドと、ボリュームの手動マウントを排除しました。
  • 各ボリュームのパフォーマンスメトリックを追加しました。これで、NetAppからグラフを作成するためにデータセンターのサポートを利用する可能性が低くなりました。


間もなく、ONTAPを更新し、拡張APIを導入することを約束し、テンプレートはHTTPエージェントに移動します



テンプレート、スクリプト、ダッシュボード



github.com/domclick/netapp-volume-monitoring



便利なリンク



docs.netapp.com/ontap-9/index.jsp

www.zabbix.com/documentation/current



All Articles