
みなさん、こんにちは。私の名前はイゴール・シドレンコです。モニタリングは私の仕事の主要な分野の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