Zabbix監視テンプレート（Scality 6 Supervisor）

Zabbix監視テンプレート（Scality 6 Supervisor）を作成しました。
Zabbix 3.0、Scality RING 6.4.5.4（Mithrandir）で検証しています。

# 前提条件
- /etc/logrotate.dの設定がrestartではなく、reloadを使用している事。
- Zabbixエージェントの設定ファイルにパラメータ"Include=/etc/zabbix/zabbix_agentd.d/"を設定している事。
- Zabbixエージェントの設定ファイルにパラメータ"ServerActive=***Zabbix ServerのIPアドレス***"を設定している事。

# Scality 6 Supervisor

## テンプレート
- Template App Scality 6 Supervisor Service（テンプレートとのリンク: なし）

## アプリケーション
- Scality 6 Supervisor service

## アイテム
| # | アイテム名 | トリガー | キー | データ型 | 単位 | 乗数の使用 | 更新間隔（秒） | ヒストリ | トレンド | タイプ | アプリケーション | 内容 | 備考 |
|:-:|:-:|:-:|:-:|:-:|:-:|:-:|:-:|:-:|:-:|:-:|:-:|:-:|:-:|
| 1 | RING Administrator HTTP service is running | 1 | net.tcp.listen[3080] | 数値 | - | - | 30 | 90 | 365 | Zabbixエージェント | Scality 6 Supervisor service | TCP3080ポート（http）のステータス取得 | TCPポート（http）を使用しない場合は不要
| 2 | RING Administrator HTTPS service is running | 1 | net.tcp.listen[3443] | 数値 | - | - | 30 | 90 | 365 | Zabbixエージェント | Scality 6 Supervisor service | TCP3443ポート（https）のステータス取得 | TCPポート（https）を使用しない場合は不要
| 3 | Supervisor sagentd service is running | 1 | net.tcp.listen[7084] | 数値 | - | - | 30 | 90 | 365 | Zabbixエージェント | Scality 6 Supervisor service | TCP7084ポート（sagentd）のステータス取得 | TCPポート（sagentd）を使用しない場合は不要
| 4 | Supervisor supv2 service is running | 1 | net.tcp.listen[12345] | 数値 | - | - | 30 | 90 | 365 | Zabbixエージェント | Scality 6 Supervisor service | TCP12345ポート（supv2）のステータス取得 | TCPポート（supv2）を使用しない場合は不要
| 5 | Supervisor uwsgi service is running | 1 | net.tcp.listen[4443] | 数値 | - | - | 30 | 90 | 365 | Zabbixエージェント | Scality 6 Supervisor service | TCP4443ポート（uwsgi）のステータス取得 | TCPポート（uwsgi）を使用しない場合は不要
| 6 | Supervisor grafana-server service is running | 1 | net.tcp.listen[3000] | 数値 | - | - | 30 | 90 | 365 | Zabbixエージェント | Scality 6 Supervisor service | TCP3000ポート（grafana-server）のステータス取得 | TCPポート（grafana-server）を使用しない場合は不要
| 7 | Supervisor bizstoresup service is running | 1 | net.tcp.listen[2443] | 数値 | - | - | 30 | 90 | 365 | Zabbixエージェント | Scality 6 Supervisor service | TCP2443ポート（bizstoresup）のステータス取得 | TCPポート（bizstoresup）を使用しない場合は不要
| 8 | Supervisor bizstoresup service is running | 1 | net.tcp.listen[5580] | 数値 | - | - | 30 | 90 | 365 | Zabbixエージェント | Scality 6 Supervisor service | TCP5580ポート（bizstoresup）のステータス取得 | TCPポート（bizstoresup）を使用しない場合は不要
| 9 | Supervisor salt-master service is running | 1 | net.tcp.listen[4505] | 数値 | - | - | 30 | 90 | 365 | Zabbixエージェント | Scality 6 Supervisor service | TCP4505ポート（salt-master）のステータス取得 | TCPポート（salt-master）を使用しない場合は不要
| 10 | Supervisor salt-master service is running | 1 | net.tcp.listen[4506] | 数値 | - | - | 30 | 90 | 365 | Zabbixエージェント | Scality 6 Supervisor service | TCP4506ポート（salt-master）のステータス取得 | TCPポート（salt-master）を使用しない場合は不要
| 11 | Number of SSD failures | 1 | custom.scality.supervisor.ringsh.ringstatus.meta.ssd.ng | 数値 | - | - | 60 | 7 | 365 | Zabbixエージェント | Scality 6 Supervisor service | 認識しているエラー状態のSSDの個数取得 | 
| 12 | Number of HDD failures | 1 | custom.scality.supervisor.ringsh.ringstatus.data.disk.ng | 数値 | - | - | 60 | 7 | 365 | Zabbixエージェント | Scality 6 Supervisor service | 認識しているエラー状態のHDDの個数取得 | 
| 13 | Number of running httpd processes | 1 | proc.num[httpd,root,,"-DFOREGROUND"] | 数値 | - | - | 30 | 90 | 365 | Zabbixエージェント | Scality 6 Supervisor service | httpdプロセスの個数取得 | 
| 14 | Number of running bizstoresup processes | 1 | proc.num[,root,,"/usr/bin/bizstoresup"] | 数値 | - | - | 30 | 90 | 365 | Zabbixエージェント | Scality 6 Supervisor service | bizstoresupプロセスの個数取得 | 
| 15 | Number of running sagentd processes | 1 | proc.num[,root,,"/usr/bin/sagentd"] | 数値 | - | - | 30 | 90 | 365 | Zabbixエージェント | Scality 6 Supervisor service | sagentdプロセスの個数取得 | 
| 16 | Number of running sagentd/core processes | 1 | proc.num[,root,,"sagentd/core"] | 数値 | - | - | 30 | 90 | 365 | Zabbixエージェント | Scality 6 Supervisor service | sagentd/coreプロセスの個数取得 | 
| 17 | Number of running sagentd/heartbeat processes | 1 | proc.num[,root,,"sagentd/heartbeat"] | 数値 | - | - | 30 | 90 | 365 | Zabbixエージェント | Scality 6 Supervisor service | sagentd/heartbeatプロセスの個数取得 | 
| 18 | Number of running sagentd/poll processes | 1 | proc.num[,root,,"sagentd/poll"] | 数値 | - | - | 30 | 90 | 365 | Zabbixエージェント | Scality 6 Supervisor service | sagentd/pollプロセスの個数取得 | 
| 19 | Number of running sagentd/scheduler processes | 1 | proc.num[,root,,"sagentd/scheduler"] | 数値 | - | - | 30 | 90 | 365 | Zabbixエージェント | Scality 6 Supervisor service | sagentd/schedulerプロセスの個数取得 | 
| 20 | Number of running sagentd/webclient processes | 1 | proc.num[,root,,"sagentd/webclient"] | 数値 | - | - | 30 | 90 | 365 | Zabbixエージェント | Scality 6 Supervisor service | sagentd/webclientプロセスの個数取得 | 
| 21 | Number of running sagentd/webserver processes | 1 | proc.num[,root,,"sagentd/webserver"] | 数値 | - | - | 30 | 90 | 365 | Zabbixエージェント | Scality 6 Supervisor service | sagentd/webserverプロセスの個数取得 | 
| 22 | Number of running supv2 processes | 1 | proc.num[,root,,"/usr/bin/supv2"] | 数値 | - | - | 30 | 90 | 365 | Zabbixエージェント | Scality 6 Supervisor service | supv2プロセスの個数取得 | 
| 23 | Number of running supv2/core processes | 1 | proc.num[,root,,"supv2/core"] | 数値 | - | - | 30 | 90 | 365 | Zabbixエージェント | Scality 6 Supervisor service | supv2/coreプロセスの個数取得 | 
| 24 | Number of running supv2/scheduler processes | 1 | proc.num[,root,,"supv2/scheduler"] | 数値 | - | - | 30 | 90 | 365 | Zabbixエージェント | Scality 6 Supervisor service | supv2/schedulerプロセスの個数取得 | 
| 25 | Number of running supv2/webclient processes | 1 | proc.num[,root,,"supv2/webclient"] | 数値 | - | - | 30 | 90 | 365 | Zabbixエージェント | Scality 6 Supervisor service | supv2/webclientプロセスの個数取得 | 
| 26 | Number of running supv2/webserver processes | 1 | proc.num[,root,,"supv2/webserver"] | 数値 | - | - | 30 | 90 | 365 | Zabbixエージェント | Scality 6 Supervisor service | supv2/webserverプロセスの個数取得 | 
| 27 | Number of running salt-master processes | 1 | proc.num[,root,,"salt-master"] | 数値 | - | - | 30 | 90 | 365 | Zabbixエージェント | Scality 6 Supervisor service | salt-masterプロセスの個数取得 | 
| 28 | Number of running salt-minion processes | 1 | proc.num[,root,,"salt-minion"] | 数値 | - | - | 30 | 90 | 365 | Zabbixエージェント | Scality 6 Supervisor service | salt-minionプロセスの個数取得 | 
| 29 | Number of running uwsgi processes | 1 | proc.num[,,,"/usr/sbin/uwsgi"] | 数値 | - | - | 30 | 90 | 365 | Zabbixエージェント | Scality 6 Supervisor service | uwsgiプロセスの個数取得 | 
| 30 | Number of running grafana-server processes | 1 | proc.num[,grafana,,"/usr/sbin/grafana-server"] | 数値 | - | - | 30 | 90 | 365 | Zabbixエージェント | Scality 6 Supervisor service | grafana-serverプロセスの個数取得 | 
| 31 | Number of online Nodes | 0 | custom.scality.supervisor.ringsh.serverlist.online | 数値 | - | - | 60 | 7 | 365 | Zabbixエージェント | Scality 6 Supervisor service | 認識しているオンライン状態のノードの個数取得 | 
| 32 | Number of offline Nodes | 1 | custom.scality.supervisor.ringsh.serverlist.offline | 数値 | - | - | 60 | 7 | 365 | Zabbixエージェント | Scality 6 Supervisor service | 認識しているオフライン状態のノードの個数取得 | 
| 33 | Free disk space on DATA | 0 | custom.scality.supervisor.ringsh.ringstorage.data.disk.avail | 数値 | B | 1099511627776 | 60 | 7 | 365 | Zabbixエージェント | Scality 6 Supervisor service | ノード全体のDATAの合計空き容量 | 
| 34 | Used disk space on DATA | 0 | custom.scality.supervisor.ringsh.ringstorage.data.disk.used | 数値 | B | 1099511627776 | 60 | 7 | 365 | Zabbixエージェント | Scality 6 Supervisor service | ノード全体のDATAの合計使用容量 | 
| 35 | Supervisor detected error log in cluster.log | 1 | log[/var/log/scality-supervisor/cluster.log,,,,skip] | ログ | - | - | 30 | 7 | 365 | Zabbixエージェント | Scality 6 Supervisor service | ログファイルの文字列取得 | 
- ヒストリとは各収集値の保持期間
- トレンドとは数値データタイプの1時間あたりの最低値、最高値、平均値および合計値の保持期間
- Zabbixにリトライ回数、リトライ間隔、タイムアウト時間は存在しない

## トリガー
| # | 深刻度 | トリガー | 条件式 | 種別 | 内容 | 備考 |
|:-:|:-:|:-:|:-:|:-:|:-:|:-:| 
| 1 | 軽度の障害 | RING Administrator HTTP service is down on {HOST.NAME} | net.tcp.listen[3080].max(#3)=0 | ポート | 直近3回のTCP3080ポート（RING Administrator HTTP）のステータス取得時の戻り値（最大値）が0（Close）だった場合 | TCP3080ポート（RING Administrator HTTP）を使用しない場合は不要
| 2 | 軽度の障害 | RING Administrator HTTPS service is down on {HOST.NAME} | net.tcp.listen[3443].max(#3)=0 | ポート | 直近3回のTCP3443ポート（RING Administrator HTTPS）のステータス取得時の戻り値（最大値）が0（Close）だった場合 | TCP3443ポート（RING Administrator HTTPS）を使用しない場合は不要
| 3 | 軽度の障害 | Supervisor bizstoresup service is down on {HOST.NAME} | net.tcp.listen[2443].max(#3)=0 | ポート | 直近3回のTCP2443ポート（bizstoresup）のステータス取得時の戻り値（最大値）が0（Close）だった場合 | TCP2443ポート（bizstoresup）を使用しない場合は不要
| 4 | 軽度の障害 | Supervisor bizstoresup service is down on {HOST.NAME} | net.tcp.listen[5580].max(#3)=0 | ポート | 直近3回のTCP5580ポート（bizstoresup）のステータス取得時の戻り値（最大値）が0（Close）だった場合 | TCP5580ポート（bizstoresup）を使用しない場合は不要
| 5 | 軽度の障害 | Supervisor supv2 service is down on {HOST.NAME} | net.tcp.listen[12345].max(#3)=0 | ポート | 直近3回のTCP12345ポート（supv2）のステータス取得時の戻り値（最大値）が0（Close）だった場合 | TCP12345ポート（supv2）を使用しない場合は不要
| 6 | 軽度の障害 | Supervisor sagentd service is down on {HOST.NAME} | net.tcp.listen[7084].max(#3)=0 | ポート | 直近3回のTCP7084ポート（sagentd）のステータス取得時の戻り値（最大値）が0（Close）だった場合 | TCP7084ポート（sagentd）を使用しない場合は不要
| 7 | 軽度の障害 | Supervisor uwsgi service is down on {HOST.NAME} | net.tcp.listen[4443].max(#3)=0 | ポート | 直近3回のTCP4443ポート（uwsgi）のステータス取得時の戻り値（最大値）が0（Close）だった場合 | TCP4443ポート（uwsgi）を使用しない場合は不要
| 8 | 軽度の障害 | Supervisor grafana-server service is down on {HOST.NAME} | net.tcp.listen[3000].max(#3)=0 | ポート | 直近3回のTCP3000ポート（grafana-server）のステータス取得時の戻り値（最大値）が0（Close）だった場合 | TCP3000ポート（grafana-server）を使用しない場合は不要
| 9 | 軽度の障害 | Supervisor salt-master service is down on {HOST.NAME} | net.tcp.listen[4505].max(#3)=0 | ポート | 直近3回のTCP4505ポート（salt-master）のステータス取得時の戻り値（最大値）が0（Close）だった場合 | TCP4505ポート（salt-master）を使用しない場合は不要
| 10 | 軽度の障害 | Supervisor salt-master service is down on {HOST.NAME} | net.tcp.listen[4506].max(#3)=0 | ポート | 直近3回のTCP4506ポート（salt-master）のステータス取得時の戻り値（最大値）が0（Close）だった場合 | TCP4506ポート（salt-master）を使用しない場合は不要
| 11 | 重度の障害 | Number of detected a SSD Failures | custom.scality.supervisor.ringsh.ringstatus.meta.ssd.ng.max(#3)<>0 | ディスク | 直近3回の認識しているエラー状態のSSDの最大個数が0以外だった場合 | 
| 12 | 重度の障害 | Number of detected a HDD Failures | custom.scality.supervisor.ringsh.ringstatus.data.disk.ng.max(#3)<>0 | ディスク | 直近3回の認識しているエラー状態のHDDの最大個数が0以外だった場合 | 
| 13 | 重度の障害 | httpd process is not running on {HOST.NAME} | proc.num[httpd,root,,].last(0)<1 | プロセス | 稼働中のhttpdプロセスの最新個数が1未満だった場合 | 
| 14 | 重度の障害 | bizstoresup process is not running on {HOST.NAME} | proc.num[,root,,"/usr/bin/bizstoresup"].last(0)<2 | プロセス | 稼働中のbizstoresupプロセスの最新個数が2未満だった場合 | 
| 15 | 重度の障害 | sagentd process is not running on {HOST.NAME} | proc.num[,root,,"/usr/bin/sagentd"].last(0)<1 | プロセス | 稼働中のsagentdプロセスの最新個数が1未満だった場合 | 
| 16 | 重度の障害 | sagentd/core process is not running on {HOST.NAME} | proc.num[,root,,"sagentd/core"].last(0)<1 | プロセス | 稼働中のsagentd/coreプロセスの最新個数が1未満だった場合 | 
| 17 | 重度の障害 | sagentd/heartbeat process is not running on {HOST.NAME} | proc.num[,root,,"sagentd/heartbeat"].last(0)<1 | プロセス | 稼働中のsagentd/heartbeatプロセスの最新個数が1未満だった場合 | 
| 18 | 重度の障害 | sagentd/poll process is not running on {HOST.NAME} | proc.num[,root,,"sagentd/poll"].last(0)}<1 | プロセス | 稼働中のsagentd/pollプロセスの最新個数が1未満だった場合 | 
| 19 | 重度の障害 | sagentd/scheduler process is not running on {HOST.NAME} | proc.num[,root,,"sagentd/scheduler"].last(0)<1 | プロセス | 稼働中のsagentd/schedulerプロセスの最新個数が1未満だった場合 | 
| 20 | 重度の障害 | sagentd/webclient process is not running on {HOST.NAME} | proc.num[,root,,"sagentd/webclient"].last(0)<1 | プロセス | 稼働中のsagentd/webclientプロセスの最新個数が1未満だった場合 | 
| 21 | 重度の障害 | sagentd/webserver process is not running on {HOST.NAME} | proc.num[,root,,"sagentd/webserver"].last(0)<1 | プロセス | 稼働中のsagentd/webserverプロセスの最新個数が1未満だった場合 | 
| 22 | 重度の障害 | supv2 process is not running on {HOST.NAME} | proc.num[,root,,"/usr/bin/supv2"].max(#10)<1 | プロセス | 直近10回の稼働中のsupv2プロセスの最大個数が1未満だった場合 | 
| 23 | 重度の障害 | supv2/core process is not running on {HOST.NAME} | proc.num[,root,,"supv2/core"].last(0)}<5 | プロセス | 稼働中のsupv2/coreプロセスの最新個数が5未満だった場合 | 
| 24 | 重度の障害 | supv2/scheduler process is not running on {HOST.NAME} | proc.num[,root,,"supv2/scheduler"].last(0)}<1 | プロセス | 稼働中のsupv2/schedulerプロセスの最新個数が1未満だった場合 | 
| 25 | 重度の障害 | supv2/webclient process is not running on {HOST.NAME} | proc.num[,root,,"supv2/webclient"].last(0)}<1 | プロセス | 稼働中のsupv2/webclientプロセスの最新個数が1未満だった場合 | 
| 26 | 重度の障害 | supv2/webserver process is not running on {HOST.NAME} | proc.num[,root,,"supv2/webserver"].last(0)}<5 | プロセス | 稼働中のsupv2/webserverプロセスの最新個数が5未満だった場合 | 
| 27 | 重度の障害 | salt-master process is not running on {HOST.NAME} | proc.num[,root,,"salt-master"].last(0)<12 | プロセス | 稼働中のsalt-masterプロセスの最新個数が12未満だった場合 | 
| 28 | 重度の障害 | salt-minion process is not running on {HOST.NAME} | proc.num[,root,,"salt-minion"].last(0)<3 | プロセス | 稼働中のsalt-minionプロセスの最新個数が3未満だった場合 | 
| 29 | 重度の障害 | uwsgi process is not running on {HOST.NAME} | proc.num[,,,"/usr/sbin/uwsgi"].last(0)<12 | プロセス | 稼働中のuwsgiプロセスの最新個数が12未満だった場合 | 
| 30 | 重度の障害 | grafana-server process is not running on {HOST.NAME} | proc.num[,grafana,,"/usr/sbin/grafana-server"].last(0)<1 | プロセス | 稼働中のgrafana-serverプロセスの最新個数が1未満だった場合 | 
| 31 | 重度の障害 | Number of detected a offline Nodes | custom.scality.supervisor.ringsh.serverlist.offline.max(#3)<>0 | 通信 | 直近3回の認識しているオフライン状態のノードの最大数が0以外だった場合 | 
| 32 | 重度の障害 | Supervisor detected error log in cluster.log on {HOST.NAME} | log[/var/log/scality-supervisor/cluster.log,,,,skip].str("ERROR")=1 and log[/var/log/scality-supervisor/cluster.log,,,,skip].count(1h,"ERROR")>4 and log[/var/log/scality-supervisor/cluster.log,,,,skip].nodata(1m)=0 | ログ | 文字列"ERROR"が検知された場合および文字列"ERROR"の個数が1時間に4個以上だった場合および60秒以内のデータの受信数が0個だった場合 | 

# コンフィグの設置
```vim:/etc/zabbix/zabbix_agentd.d/userparameter_scality.conf
# Custom Monitoring Items
UserParameter=custom.scality.supervisor.ringsh.ringstatus.meta.ssd.ng,/usr/bin/ringsh supervisor ringStatus META | grep 'ssd' | grep 'NG' | wc -l
UserParameter=custom.scality.supervisor.ringsh.ringstatus.data.disk.ng,/usr/bin/ringsh supervisor ringStatus DATA | grep 'disk' | grep 'NG' | wc -l
UserParameter=custom.scality.supervisor.ringsh.serverlist.online,/usr/bin/ringsh supervisor serverList | grep 'online' | wc -l
UserParameter=custom.scality.supervisor.ringsh.serverlist.offline,/usr/bin/ringsh supervisor serverList | grep 'offline' | wc -l
UserParameter=custom.scality.supervisor.ringsh.ringstorage.data.disk.avail,/usr/bin/ringsh supervisor ringStorage DATA | grep 'Disk avail' | cut -d ' ' -f 4 | awk '{ printf("%d",$1 + 0.5) }'
UserParameter=custom.scality.supervisor.ringsh.ringstorage.data.disk.used,/usr/bin/ringsh supervisor ringStorage DATA | grep 'Disk used' | cut -d ' ' -f 4 | awk '{ printf("%d",$1 + 0.5) }'
```

## zabbix-agentの再起動（CentOS 5, 6）
```bash
[root@localhost ~]# /etc/init.d/zabbix-agent restart
```

## zabbix-agentの再起動（CentOS 7）
```bash
[root@localhost ~]# systemctl restart zabbix-agent
```

# 関連記事
[Zabbix監視テンプレート（Scality 6 RING）](https://qiita.com/bloodia/items/98a9a94644fd48457189)
[Zabbix監視テンプレート（Scality 6 SOFS Connector）](https://qiita.com/bloodia/items/e1900d4e25c210682cee)