zabbix
Scality

Zabbix監視テンプレート(Scality 5 SOFS Connector)

Zabbix監視テンプレート(Scality 5 SOFS Connector)を作成しました。
Zabbix 3.0、Scality RING 5.1.9(Lorien)で検証しています。

前提条件

  • /etc/logrotate.dの設定がrestartではなく、reloadを使用している事。
  • Zabbixエージェントの設定ファイルにパラメータ"Include=/etc/zabbix/zabbix_agentd.d/"を設定している事。

Scality 5 SOFS Connector

テンプレート

  • Template App Scality 5 SOFS Connector Nodes Service(テンプレートとのリンク: なし)

アプリケーション

  • Scality 5 SOFS Connector Nodes service

アイテム

# アイテム名 トリガー キー データ型 単位 乗数の使用 更新間隔(秒) ヒストリ トレンド タイプ アプリケーション 内容 備考
1 HTTP service is running 1 net.tcp.listen[81] 数値 - - 30 90 365 Zabbixエージェント Scality 5 SOFS Connector Nodes service TCP81ポート(http)のステータス取得 TCP81ポート(http)を使用しない場合は不要
2 sagentd service is running 1 net.tcp.listen[7084] 数値 - - 30 90 365 Zabbixエージェント Scality 5 SOFS Connector Nodes service TCP7084ポート(sagentd)のステータス取得 TCP7084ポート(sagentd)を使用しない場合は不要
3 sproxyd service is running 1 net.tcp.listen[10000] 数値 - - 30 90 365 Zabbixエージェント Scality 5 SOFS Connector Nodes service TCP10000ポート(sproxyd)のステータス取得 TCP10000ポート(sproxyd)を使用しない場合は不要
4 Number of running httpd processes 1 proc.num[httpd,root,,] 数値 - - 30 90 365 Zabbixエージェント Scality 5 SOFS Connector Nodes service httpdプロセスの個数取得
5 Number of running salt-minion processes 1 proc.num[salt-minion] 数値 - - 30 90 365 Zabbixエージェント Scality 5 SOFS Connector Nodes service salt-minionプロセスの個数取得
6 Number of running sfused-\* processes 1 proc.num[sfused,root,,"sfused-*"] 数値 - - 30 90 365 Zabbixエージェント Scality 5 SOFS Connector Nodes service sfused-*プロセスの個数取得
7 Number of running sagentd processes 1 proc.num[sagentd] 数値 - - 30 90 365 Zabbixエージェント Scality 5 SOFS Connector Nodes service sagentdプロセスの個数取得
8 Number of running sproxyd processes 1 proc.num[sproxyd] 数値 - - 30 90 365 Zabbixエージェント Scality 5 SOFS Connector Nodes service sproxydプロセスの個数取得
  • ヒストリとは各収集値の保持期間
  • トレンドとは数値データタイプの1時間あたりの最低値、最高値、平均値および合計値の保持期間
  • Zabbixにリトライ回数、リトライ間隔、タイムアウト時間は存在しない

トリガー

# 深刻度 トリガー 条件式 種別 内容 備考
1 軽度の障害 HTTP service is down on {HOST.NAME} net.tcp.listen[81].max(#3)=0 ポート 直近3回のTCP81ポート(http)のステータス取得時の戻り値(最大値)が0(Close)だった場合 TCP81ポート(http)を使用しない場合は不要
2 軽度の障害 sagentd service is down on {HOST.NAME} net.tcp.listen[7084].max(#3)=0 ポート 直近3回のTCP7084ポート(sagentd)のステータス取得時の戻り値(最大値)が0(Close)だった場合 TCP7084ポート(sagentd)を使用しない場合は不要
3 軽度の障害 sproxyd service is down on {HOST.NAME} net.tcp.listen[10000].max(#3)=0 ポート 直近3回のTCP10000ポート(sproxyd)のステータス取得時の戻り値(最大値)が0(Close)だった場合 TCP10000ポート(sproxyd)を使用しない場合は不要
4 重度の障害 httpd process is not running on {HOST.NAME} proc.num[httpd,root,,].last(0)<1 プロセス 稼働中のhttpdプロセスの最新個数が1未満だった場合
5 重度の障害 salt-minion process is not running on {HOST.NAME} proc.num[salt-minion].last(0)<1 プロセス 稼働中のsalt-minionプロセスの個数が1未満だった場合
6 重度の障害 sfused-\* process is not running on {HOST.NAME} proc.num[sfused,root,,"sfused-*"].last(0)<*N* プロセス 稼働中のsfused-*プロセスの個数が*N*未満だった場合
7 重度の障害 sagentd process is not running on {HOST.NAME} proc.num[sagentd].last(0)<5 プロセス 稼働中のsagentdプロセスの個数が5未満だった場合
8 重度の障害 sproxyd process is not running on {HOST.NAME} proc.num[sproxyd].last(0)<2 プロセス 稼働中のsproxydプロセスの個数が2未満だった場合

ディスカバリ

ディスカバリルール

# 名前 タイプ キー 更新間隔(秒) 例外の更新間隔 存在しなくなったリソースの保持期間(日) 説明 備考
1 Custom scality.fuse mounted filesystems for discovery Zabbixエージェント custom.vfs.fs.scality.fuse.discovery 60 - 0 Discovery of custom file systems of different types as defined in global regular expression "Custom file systems for discovery". 存在しなくなったリソースの保持期間(日)を「0」に設定すると要素は即時削除される

フィルター

  • なし

アイテムのプロトタイプ

# 名前 トリガー キー データ型 単位 乗数の使用 更新間隔(秒) ヒストリ トレンド タイプ アプリケーション 内容 備考
1 Scality 5 SOFS Connector Nodes service {#FSNAME} is mounted 1 custom.scality.fuse.mountpoint[{#FSNAME}] 数値 - - 30 90 365 Zabbixエージェント Scality Connector Nodes service 特定ボリュームのマウント状況結果(0: OK, 1: NG)
  • ヒストリとは各収集値の保持期間
  • トレンドとは数値データタイプの1時間あたりの最低値、最高値、平均値および合計値の保持期間
  • Zabbixにリトライ回数、リトライ間隔、タイムアウト時間は存在しない

トリガーのプロトタイプ

# 深刻度 トリガー 条件式 種別 内容 備考
1 重度の障害 Scality 5 SOFS Connector Nodes service {#FSNAME} is unmounted on {HOST.NAME} custom.scality.fuse.mountpoint[{#FSNAME}].min(#3)<>0 ファイルシステム 直近3回の特定ボリュームのマウント状況結果の戻り値(最小値)が0ではない場合

スクリプトの設置

/usr/local/bin/lld-scality-fuse.py
#!/usr/bin/python
# coding: utf-8
# ------------------------------------------------------------------------------
# Script Name  : lld-scality-fuse.py
# Tool Version : 1.0.0
# Argument     : -
# Option       : -h, --help     show this help message and exit
#              : -v, --version  show version and exit
#              : -t, --fstype   select virtual file system type
#              : -n, --fsname   select virtual file system name
# Usage        : $0 [Option]
# Return       : -
# -------------+-------------------------------------------+--------------------
# Date         | Changes                                   | Author
# -------------+-------------------------------------------+--------------------
# 2017/10/17   | New Creation                              | @bloodia
# ------------------------------------------------------------------------------
# --+----1----+----2----+----3----+----4----+----5----+----6----+----7----+----8

import json
import subprocess
import re
import argparse

parser = argparse.ArgumentParser()
parser.add_argument(
                       '-v', '--version',
                       action='version',
                       version='1.0.0',
                       help='show version and exit'
                   )
parser.add_argument(
                       '-t', '--fstype',
                       action='store',
                       help='select virtual file system type'
                   )
parser.add_argument(
                       '-n', '--fsname',
                       action='store',
                       help='select virtual file system name'
                   )
args = parser.parse_args()

if __name__ == '__main__':
    p1 = subprocess.Popen(['cat', '/proc/mounts'], stdout=subprocess.PIPE)
    p2 = subprocess.Popen(['awk', '{print $2,$3}'],stdin=p1.stdout,stdout=subprocess.PIPE)
    p3 = subprocess.Popen(['grep', '-v',  'sr|loop|ram'], stdin=p2.stdout, stdout=subprocess.PIPE)
    stdout, stderr = p3.communicate()
    data = list()
    for line in stdout.split('\n'):
        if line:
            fs = line.split(" ")
            fsname = fs[0]
            fstype = fs[1]
            if args.fstype:
                if fstype == args.fstype:
                    if args.fsname:
                        m = re.match(r"(%s)" % args.fsname, fsname)
                        if m:
                            data.append({"{#FSNAME}": fsname, "{#FSTYPE}": fstype})
                    else:
                        data.append({"{#FSNAME}": fsname, "{#FSTYPE}": fstype})
            else:
                data.append({"{#FSNAME}": fsname, "{#FSTYPE}": fstype})
    print(json.dumps({"data": data}, indent=4))

コンフィグの設置

/etc/zabbix/zabbix_agentd.d/userparameter_scality-fuse.conf
# Custom Discovery Rules
UserParameter=custom.vfs.fs.scality.fuse.discovery,/usr/local/bin/lld-scality-fuse.py -t 'fuse' -n '/ring'

Custom Monitoring Items
UserParameter=custom.scality.fuse.mountpoint[*],mountpoint -q $1 && echo 0 || echo 1

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

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

zabbix-agentの再起動(CentOS 7)

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

関連記事

Zabbix監視テンプレート(Scality 5 RING)
Zabbix監視テンプレート(Scality 5 Supervisor)