Edited at

Zabbix監視テンプレート(FlashMAX PCIe SSD)

More than 1 year has passed since last update.

Zabbix監視テンプレート(FlashMAX PCIe SSD)を作成しました。

Zabbix 3.0、HGST PCIe Flashドライブで検証しています。


前提条件


  • Zabbixエージェントの設定ファイルにパラメータ"Include=/etc/zabbix/zabbix_agentd.d/"を設定している事。

  • HGST PCIe Flashドライブ(4,800GB/2,200GB/1,100GB)を使用している事。

  • FlashMAXのユーティリティコマンド"vgc-monitor"がインストールされている事。

  • ZabbixエージェントにJSONパース用のユーティリティコマンド"jq"がインストールされている事。


FlashMAX PCIe SSD


テンプレート


  • Template FlashMAX PCIe SSD(テンプレートとのリンク: なし)


アプリケーション


  • FlashMAX PCIe SSD


アイテム

#
名前
トリガー
キー
データ型
単位
乗数の使用
更新間隔(秒)
ヒストリ
トレンド
タイプ
アプリケーション
内容
備考

1
R Version
0
custom.vgc.rversion
文字列
-
-
3600
90
-
Zabbixエージェント
FlashMAX PCIe SSD
ドライバーの連続稼働時間(秒)

2
Driver Uptime Secs
0
custom.vgc.driveruptimesecs
数値
-
-
60
90
365
Zabbixエージェント
FlashMAX PCIe SSD
バージョン


トリガー


  • なし


ディスカバリ


ディスカバリルール

#
名前
タイプ
キー
更新間隔(秒)
例外の更新間隔
存在しなくなったリソースの保持期間(日)
説明
備考

1
Custom mounted vgc for discovery
Zabbixエージェント
custom.vgc.discovery
3600
-
30
Discovery of custom vgc of different types as defined in global regular expression "Custom mounted vgc for discovery".

2
Custom mounted vgc part for discovery
Zabbixエージェント
custom.vgc.part.discovery
3600
-
30
Discovery of custom mounted vgc part of different types as defined in global regular expression "Custom mounted vgc part for discovery".


フィルター


  • なし


アイテムのプロトタイプ

#
名前
ディスカバリルール
トリガー
キー
データ型
単位
乗数の使用
更新間隔(秒)
ヒストリ
トレンド
タイプ
アプリケーション
内容
備考

1
beacon on {#VGCCARDNAME}
Custom mounted vgc for discovery
0
custom.vgc.beacon[{#VGCCARDNAME},{#VGCCARDNUMBER}]
文字列
-
-
3600
90
-
Zabbixエージェント
FlashMAX PCIe SSD
ビーコン

2
Card Action Required on {#VGCCARDNAME}
Custom mounted vgc for discovery
0
custom.vgc.cardactionrequired[{#VGCCARDNAME},{#VGCCARDNUMBER}]
文字列
-
-
3600
90
-
Zabbixエージェント
FlashMAX PCIe SSD
カードに必要な行動

3
Card Option Rom Rev on {#VGCCARDNAME}
Custom mounted vgc for discovery
0
custom.vgc.cardoptionromrev[{#VGCCARDNAME},{#VGCCARDNUMBER}]
文字列
-
-
3600
90
-
Zabbixエージェント
FlashMAX PCIe SSD
カードのROMリビジョン(オプション)

4
Card Part Name on {#VGCCARDNAME}
Custom mounted vgc for discovery
0
custom.vgc.cardpartname[{#VGCCARDNAME},{#VGCCARDNUMBER}]
文字列
-
-
3600
90
-
Zabbixエージェント
FlashMAX PCIe SSD
カードのパーティーション名

5
Card PCIE Gen on {#VGCCARDNAME}
Custom mounted vgc for discovery
0
custom.vgc.cardpciegen[{#VGCCARDNAME},{#VGCCARDNUMBER}]
文字列
-
-
3600
90
-
Zabbixエージェント
FlashMAX PCIe SSD
カードのPCI Expressの世代

6
Card Rev on {#VGCCARDNAME}
Custom mounted vgc for discovery
0
custom.vgc.cardrev[{#VGCCARDNAME},{#VGCCARDNUMBER}]
文字列
-
-
3600
90
-
Zabbixエージェント
FlashMAX PCIe SSD
カードのリビジョン

7
Card Serial Number on {#VGCCARDNAME}
Custom mounted vgc for discovery
0
custom.vgc.cardserialnumber[{#VGCCARDNAME},{#VGCCARDNUMBER}]
文字列
-
-
3600
90
-
Zabbixエージェント
FlashMAX PCIe SSD
カードのシリアルナンバー

8
Card Status on {#VGCCARDNAME}
Custom mounted vgc for discovery
1
custom.vgc.cardstatus[{#VGCCARDNAME},{#VGCCARDNUMBER}]
文字列
-
-
60
90
-
Zabbixエージェント
FlashMAX PCIe SSD
カードの状態

9
Card State Details on {#VGCCARDNAME}
Custom mounted vgc for discovery
1
custom.vgc.cardtemperaturec[{#VGCCARDNAME},{#VGCCARDNUMBER}]
文字列
-
-
60
90
-
Zabbixエージェント
FlashMAX PCIe SSD
カードの状態(詳細)

10
Card Temperature on {#VGCCARDNAME}, in ℃
Custom mounted vgc for discovery
1
custom.vgc.cardtemperaturec[{#VGCCARDNAME},{#VGCCARDNUMBER}]
数値

-
60
90
365
Zabbixエージェント
FlashMAX PCIe SSD
カードの温度(摂氏)

11
Card Temperature State on {#VGCCARDNAME}
Custom mounted vgc for discovery
1
custom.vgc.cardtemperaturestate[{#VGCCARDNAME},{#VGCCARDNUMBER}]
文字列
-
-
60
90
-
Zabbixエージェント
FlashMAX PCIe SSD
カードの温度(状態)

12
Card Temperature Throttle on {#VGCCARDNAME}
Custom mounted vgc for discovery
1
custom.vgc.cardtemperaturethrottle[{#VGCCARDNAME},{#VGCCARDNUMBER}]
文字列
-
-
60
90
-
Zabbixエージェント
FlashMAX PCIe SSD
カードの温度(スロットル)

13
Card Type on {#VGCCARDNAME}
Custom mounted vgc for discovery
0
custom.vgc.cardtype[{#VGCCARDNAME},{#VGCCARDNUMBER}]
文字列
-
-
60
90
-
Zabbixエージェント
FlashMAX PCIe SSD
カードのタイプ

14
Flash Reserve Left on {#VGCPARTNAME}, in %
Custom mounted vgc part for discovery
1
custom.vgc.part.flashreservesleftpct[{#VGCCARDNAME},{#VGCCARDNUMBER},{#VGCPARTNUMBER}]
数値(浮動小数)
%
-
60
90
365
Zabbixエージェント
FlashMAX PCIe SSD
最大書き換え容量

15
Remaining Life on {#VGCPARTNAME}, in %
Custom mounted vgc part for discovery
1
custom.vgc.part.remaininglifepct[{#VGCCARDNAME},{#VGCCARDNUMBER},{#VGCPARTNUMBER}]
数値(浮動小数)
%
-
60
90
365
Zabbixエージェント
FlashMAX PCIe SSD
最大書き換え容量に対する残りの書き換え容量の割合

16
Format Mode on {#VGCPARTNAME}
Custom mounted vgc part for discovery
0
custom.vgc.part.formatmode[{#VGCCARDNAME},{#VGCCARDNUMBER},{#VGCPARTNUMBER}]
文字列
-
-
3600
90
-
Zabbixエージェント
FlashMAX PCIe SSD
フォーマットモード

17
Idle Time GC on {#VGCPARTNAME}
Custom mounted vgc part for discovery
0
custom.vgc.part.idletimegc[{#VGCCARDNAME},{#VGCCARDNUMBER},{#VGCPARTNUMBER}]
文字列
-
-
3600
90
-
Zabbixエージェント
FlashMAX PCIe SSD
アイドルタイム(ガベージコレクション)

18
Partition State on {#VGCPARTNAME}
Custom mounted vgc part for discovery
1
custom.vgc.part.partitionstate[{#VGCCARDNAME},{#VGCCARDNUMBER},{#VGCPARTNUMBER}]
文字列
-
-
60
90
-
Zabbixエージェント
FlashMAX PCIe SSD
パーティーションの状態

19
Raid on {#VGCPARTNAME}
Custom mounted vgc part for discovery
0
custom.vgc.part.raid[{#VGCCARDNAME},{#VGCCARDNUMBER},{#VGCPARTNUMBER}]
文字列
-
-
3600
90
-
Zabbixエージェント
FlashMAX PCIe SSD
Raidの有効/無効

20
Total Flash Reads on {#VGCPARTNAME}, in Bytes
Custom mounted vgc part for discovery
0
custom.vgc.part.totalreadbytes[{#VGCCARDNAME},{#VGCCARDNUMBER},{#VGCPARTNUMBER}]
数値
B
-
60
90
365
Zabbixエージェント
FlashMAX PCIe SSD
現在までの合計読み込みバイト数

21
Total Flash Writes on {#VGCPARTNAME}, in Bytes
Custom mounted vgc part for discovery
0
custom.vgc.part.totalwritebytes[{#VGCCARDNAME},{#VGCCARDNUMBER},{#VGCPARTNUMBER}]
数値
B
-
60
90
365
Zabbixエージェント
FlashMAX PCIe SSD
現在までの合計書き込みバイト数

22
Usable Capacity on {#VGCPARTNAME}, in Bytes
Custom mounted vgc part for discovery
0
custom.vgc.part.usablecapacitybytes[{#VGCCARDNAME},{#VGCCARDNUMBER},{#VGCPARTNUMBER}]
数値
B
-
60
90
365
Zabbixエージェント
FlashMAX PCIe SSD
使用可能なバイト数


  • ヒストリとは各収集値の保持期間

  • トレンドとは数値データタイプの1時間あたりの最低値、最高値、平均値および合計値の保持期間

  • Zabbixにリトライ回数、リトライ間隔、タイムアウト時間は存在しない


トリガーのプロトタイプ

#
深刻度
トリガー
ディスカバリルール
条件式
種別
内容
備考

1
重度の障害
Custom mounted vgc for discovery
Card Status on {#VGCCARDNAME} on {HOST.NAME}
custom.vgc.cardstatus[{#VGCCARDNAME},{#VGCCARDNUMBER}].str("Good")<>1
デバイス
直近のカードの状態(詳細)の文字列の値が1("Good")以外だった場合

2
重度の障害
Custom mounted vgc for discovery
Card State Details on {#VGCCARDNAME} on {HOST.NAME}
custom.vgc.cardstatedetails[{#VGCCARDNAME},{#VGCCARDNUMBER}].str("Normal")<>1
デバイス
直近のカードの状態の文字列の値が1("Normal")以外だった場合

3
重度の障害
Custom mounted vgc for discovery
Card Temperature on {#VGCCARDNAME} on {HOST.NAME}
custom.vgc.cardtemperaturec[{#VGCCARDNAME},{#VGCCARDNUMBER}].max(#3)>80
デバイス
直近3回のカードの温度(摂氏)の値(最大値)が80以上だった場合

4
重度の障害
Custom mounted vgc for discovery
Card Temperature State on {#VGCCARDNAME} on {HOST.NAME}
custom.vgc.cardtemperaturestate[{#VGCCARDNAME},{#VGCCARDNUMBER}].str("Safe")<>1
デバイス
直近のカードの温度(状態)の文字列の値が1("Safe")以外だった場合

5
重度の障害
Custom mounted vgc for discovery
Card Temperature Throttle on {#VGCCARDNAME} on {HOST.NAME}
custom.vgc.cardtemperaturethrottle[{#VGCCARDNAME},{#VGCCARDNUMBER}].str("Inactive")<>1
デバイス
直近のカードの温度(スロットル)の文字列の値が1("Inactive")以外だった場合

6
重度の障害
Custom mounted vgc part for discovery
Flash Reserve Left on {#VGCPARTNAME} on {HOST.NAME}
custom.vgc.part.flashreservesleftpct[{#VGCCARDNAME},{#VGCCARDNUMBER},{#VGCPARTNUMBER}].max(#3)<20.00
デバイス
直近3回の最大書き換え容量の割合の値(最大値)が20.00以下だった場合

7
重度の障害
Custom mounted vgc part for discovery
Remaining Life on {#VGCPARTNAME} on {HOST.NAME}
custom.vgc.part.remaininglifepct[{#VGCCARDNAME},{#VGCCARDNUMBER},{#VGCPARTNUMBER}].max(#3)<20.00
デバイス
直近3回の最大書き換え容量に対する残りの書き換え容量の割合の値(最大値)が20.00以下だった場合

8
重度の障害
Custom mounted vgc part for discovery
Partition State on {#VGCCARDNAME} on {HOST.NAME}
custom.vgc.part.partitionstate[{#VGCCARDNAME},{#VGCCARDNUMBER},{#VGCPARTNUMBER}].str("READY")<>1
デバイス
直近のカードの状態の文字列の値が1("READY")以外だった場合


スクリプトの設置


/usr/local/bin/lld-vgc.py

#!/usr/bin/python

# coding: utf-8
# ------------------------------------------------------------------------------
# Script Name : lld-vgc.py
# Tool Version : 1.0.0
# Argument : -
# Options : -h, --help show this help message and exit
# : -v, --version show version and exit
# : -p, --partition show all partition
# Usage : $0 [Option]
# Return : -
# -------------+-------------------------------------------+--------------------
# Date | Changes | Author
# -------------+-------------------------------------------+--------------------
# 2018/02/26 | New Creation | @bloodia
# ------------------------------------------------------------------------------
# --+----1----+----2----+----3----+----4----+----5----+----6----+----7----+----8

import json
import subprocess
import argparse

parser = argparse.ArgumentParser()
parser.add_argument(
'-v', '--version',
action='version',
version='v1.0.0',
help='show version and exit'
)
parser.add_argument(
'-p', '--partition',
action='store_true',
dest='partition',
help='show all partition and exit'
)
args = parser.parse_args()

if __name__ == "__main__":
p1 = subprocess.Popen(['vgc-monitor', '-f', 'json'], stdout=subprocess.PIPE)
stdout, stderr = p1.communicate()
data = list()
json_data = json.loads(stdout,'utf-8')
for vgc in json_data:
if isinstance(json_data[vgc], list):
cardnumber = -1
for card in json_data[vgc]:
cardnumber += 1
cardname = card['cardName']
if (args.partition == True or args.partition == True):
if isinstance(card['partitionDetails'], list):
partnumber = -1
for part in card['partitionDetails']:
partnumber += 1
partname = part['partName']
data.append({
"{#VGCCARDNUMBER}": cardnumber,
"{#VGCCARDNAME}": cardname,
"{#VGCPARTNUMBER}": partnumber,
"{#VGCPARTNAME}": partname
})
else:
data.append({
"{#VGCCARDNUMBER}": cardnumber,
"{#VGCCARDNAME}": cardname
})
print(json.dumps({"data": data}, indent=4))



コンフィグの設置


/etc/zabbix/zabbix_agentd.d/userparameter_vgc.conf

# Custom Discovery Rules

UserParameter=custom.vgc.discovery,/usr/local/bin/lld-vgc.py
UserParameter=custom.vgc.part.discovery,/usr/local/bin/lld-vgc.py -p

# Custom Monitoring Items
UserParameter=custom.vgc.rversion,vgc-monitor -f json | jq -r ".rVersion"
UserParameter=custom.vgc.driveruptimesecs,vgc-monitor -f json | jq -r ".driverUptimeSecs"
UserParameter=custom.vgc.beacon[*],vgc-monitor -d $1 -f json | jq -r ".cardInfo[$2].beacon"
UserParameter=custom.vgc.cardactionrequired[*],vgc-monitor -d $1 -f json | jq -r ".cardInfo[$2].cardActionRequired"
UserParameter=custom.vgc.cardoptionromrev[*],vgc-monitor -d $1 -f json | jq -r ".cardInfo[$2].cardOptionRomRev"
UserParameter=custom.vgc.cardpartname[*],vgc-monitor -d $1 -f json | jq -r ".cardInfo[$2].cardPartName"
UserParameter=custom.vgc.cardpciegen[*],vgc-monitor -d $1 -f json | jq -r ".cardInfo[$2].cardPCIEGen"
UserParameter=custom.vgc.cardrev[*],vgc-monitor -d $1 -f json | jq -r ".cardInfo[$2].cardRev"
UserParameter=custom.vgc.cardserialnumber[*],vgc-monitor -d $1 -f json | jq -r ".cardInfo[$2].cardSerialNumber"
UserParameter=custom.vgc.cardstatedetails[*],vgc-monitor -d $1 -f json | jq -r ".cardInfo[$2].cardStateDetails"
UserParameter=custom.vgc.cardstatus[*],vgc-monitor -d $1 -f json | jq -r ".cardInfo[$2].cardStatus"
UserParameter=custom.vgc.cardtemperaturec[*],vgc-monitor -d $1 -f json | jq -r ".cardInfo[$2].cardTemperatureC"
UserParameter=custom.vgc.cardtemperaturestate[*],vgc-monitor -d $1 -f json | jq -r ".cardInfo[$2].cardTemperatureState"
UserParameter=custom.vgc.cardtemperaturethrottle[*],vgc-monitor -d $1 -f json | jq -r ".cardInfo[$2].cardTemperatureThrottle"
UserParameter=custom.vgc.cardtype[*],vgc-monitor -d $1 -f json | jq -r ".cardInfo[$2].cardType"
UserParameter=custom.vgc.part.flashreservesleftpct[*],vgc-monitor -d $1 -f json | jq -r ".cardInfo[$2].partitionDetails[$3].flashReservesLeftPCT"
UserParameter=custom.vgc.part.formatmode[*],vgc-monitor -d $1 -f json | jq -r ".cardInfo[$2].partitionDetails[$3].formatMode"
UserParameter=custom.vgc.part.idletimegc[*],vgc-monitor -d $1 -f json | jq -r ".cardInfo[$2].partitionDetails[$3].idleTimeGC"
UserParameter=custom.vgc.part.partitionstate[*],vgc-monitor -d $1 -f json | jq -r ".cardInfo[$2].partitionDetails[$3].partitionState"
UserParameter=custom.vgc.part.remaininglifepct[*],vgc-monitor -d $1 -f json | jq -r ".cardInfo[$2].partitionDetails[$3].remainingLifePCT"
UserParameter=custom.vgc.part.totalreadbytes[*],vgc-monitor -d $1 -f json | jq -r ".cardInfo[$2].partitionDetails[$3].totalReadBytes"
UserParameter=custom.vgc.part.totalwritebytes[*],vgc-monitor -d $1 -f json | jq -r ".cardInfo[$2].partitionDetails[$3].totalWriteBytes"
UserParameter=custom.vgc.part.usablecapacitybytes[*],vgc-monitor -d $1 -f json | jq -r ".cardInfo[$2].partitionDetails[$3].usableCapacityBytes"
UserParameter=custom.vgc.part.raid[*],vgc-monitor -d $1 -f json | jq -r ".cardInfo[$2].partitionDetails[$3].raid"



zabbix-agentの再起動(CentOS 5, 6)

[root@localhost ~]# /etc/init.d/zabbix-agent restart


zabbix-agentの再起動(CentOS 7)

[root@localhost ~]# systemctl restart zabbix-agent