質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

ただいまの
回答率

88.92%

Zabbixにて自動でアイテムの追加・削除、そのアイテムのトリガーの値を設定する

解決済

回答 2

投稿

  • 評価
  • クリップ 0
  • VIEW 4,246

GotHokLin

score 13

 前提・実現したいこと

Zabbixにて、以下のような監視を行いたいと考えています。

  • 1台のサーバ内にある、特定ディレクトリ毎のディスク容量の使用量の増減を監視したい
    例:
    /var/data/1/
    /var/data/2/
    /var/data/.../
  • 上記例での1, 2, ...のディレクトリそのものが増減する
  • ディレクトリごと、Zabbix上ではアイテムとして分けたい
  • ディレクトリ自体が増減するので、例えば上記例での「/var/data/2/」がなくなった場合は、Zabbix上からそのアイテムを削除したい
  • ディレクトリごと(=Zabbix上でのアイテムごと)、トリガーになるしきい値(今回は使用量)が異なる
  • トリガーにしたいしきい値も運用上変動するため、そのアイテムのトリガーの値も都度自動で追従させたい
  • ディレクトリごとの使用量はduコマンドで、またそのディレクトリに対するしきい値については別のコマンドで取得できている
  • ディレクトリ容量を監視したいサーバ側の負荷を考慮し、バッチ処理にて1日1回や2回程度cronで実行する予定
  • その際にディレクトリそのものの増減が判明する
  • Zabbixへの値の取り込みは、Zabbixサーバ側からのポーリングではなく、ディレクトリのディスク使用量をチェックするバッチ処理の最後にzabbix_sender等を利用してZabbixサーバへ送るような形をとりたい(zabbix_senderと記載しましたが、今回の件ではzabbix_senderを利用するのが適切かどうかはわかりません。)

 質問

Zabbix側にて、WebのI/Fなど人間の手作業を伴わず、監視のアイテムの増減や、トリガーのしきい値の設定を行うには、どういう方法があるでしょうか。
分からないながら調べたところ、Zabbix APIを利用すれば実現が可能そうですが、他に方法はありますでしょうか。

トリガーの設定まではできなかったかもしれませんが、アイテムの増減については、Zabbix APIを用いずともできる方法を解説したwebページを以前見た覚えがあるのですが、今検索しても見つけられませんでした。

後述しておりますが、Zabbixサーバ側は3.4を利用しております。
ディレクトリ容量を監視したいサーバにはZabbixエージェントとして3.0系が入っていますが、3.4系に上げることは可能です。zabbix_senderはまだインストールしておりませんが、インストールすることも可能です。

 補足情報(FW/ツールのバージョンなど)

Zabbixサーバ側

  • zabbix-server-mysql-3.4.5-1.el7.x86_64
  • zabbix-web-japanese-3.4.5-1.el7.noarch
  • zabbix-agent-3.4.5-1.el7.x86_64
  • zabbix-release-3.4-2.el7.noarch
  • zabbix-web-mysql-3.4.5-1.el7.noarch
  • zabbix-web-3.4.5-1.el7.noarch
  • zabbix-sender-3.4.5-1.el7.x86_64
  • zabbix-get-3.4.5-1.el7.x86_64

Zabbixエージェント側

  • zabbix-release-3.0-1.el6.noarch
  • zabbix-agent-3.0.10-1.el6.x86_64

以上となります。なにとぞ、よろしくお願いいたします。

  • 気になる質問をクリップする

    クリップした質問は、後からいつでもマイページで確認できます。

    またクリップした質問に回答があった際、通知やメールを受け取ることができます。

    クリップを取り消します

  • 良い質問の評価を上げる

    以下のような質問は評価を上げましょう

    • 質問内容が明確
    • 自分も答えを知りたい
    • 質問者以外のユーザにも役立つ

    評価が高い質問は、TOPページの「注目」タブのフィードに表示されやすくなります。

    質問の評価を上げたことを取り消します

  • 評価を下げられる数の上限に達しました

    評価を下げることができません

    • 1日5回まで評価を下げられます
    • 1日に1ユーザに対して2回まで評価を下げられます

    質問の評価を下げる

    teratailでは下記のような質問を「具体的に困っていることがない質問」、「サイトポリシーに違反する質問」と定義し、推奨していません。

    • プログラミングに関係のない質問
    • やってほしいことだけを記載した丸投げの質問
    • 問題・課題が含まれていない質問
    • 意図的に内容が抹消された質問
    • 過去に投稿した質問と同じ内容の質問
    • 広告と受け取られるような投稿

    評価が下がると、TOPページの「アクティブ」「注目」タブのフィードに表示されにくくなります。

    質問の評価を下げたことを取り消します

    この機能は開放されていません

    評価を下げる条件を満たしてません

    評価を下げる理由を選択してください

    詳細な説明はこちら

    上記に当てはまらず、質問内容が明確になっていない質問には「情報の追加・修正依頼」機能からコメントをしてください。

    質問の評価を下げる機能の利用条件

    この機能を利用するためには、以下の事項を行う必要があります。

回答 2

checkベストアンサー

+2

面白そうなのでやってみました。
Zabbix3.0でやってみましたが、ローレベルディスカバリ機能があるバージョンならばできるはずです。

1. 対象ホストのエージェントにローレベルディスカバリが必要とするjsonデータを出力するスクリプトを仕込む
ローレベルディスカバリではエージェントから帰ってきたjsonデータを元にしてアイテムを作成します。
特定ディレクトリ以下の1階層目だけのディレクトリリストをjsonにして出すスクリプトがこんな。

#!/bin/bash
for dir_path in `/bin/find $1 -maxdepth 1 ! -regex $1 -type d`; do
    tmpdata=$tmpdata"{\"{#DIRPATH}\":\"$dir_path\"},"
done
jsondata="{\"data\":["`echo $tmpdata | sed -e "s/,$//"`"]}"
echo $jsondata


このスクリプトを適当なところへ保存。例えば/usr/local/bin/dirlist.shとか。
出力されるデータはこんなのです。

{"data":[{"{#DIRPATH}":"/tmp/mm"},{"{#DIRPATH}":"/tmp/mm/1"},{"{#DIRPATH}":"/tmp/mm/2"}]}

2. 対象ホストのzabbixエージェントに上記のスクリプトをUserParameterにして登録
キーの名前はなんでもいいんですが、ファイルシステムっぽいのでvfsにしています。適当に。

UserParameter=vfs.directory.discovery[*],/bin/sh /usr/local/bin/dirlist.sh $1

3. zabbixサーバでディスカバリルールと、アイテムのプロトタイプを作成
設定→ホスト→ディスカバリで、「ディスカバリルールの作成」
名前:適当に
タイプ:Zabbixエージェント
キー:vfs.directory.discovery[/home]

/home以下のディレクトリについて調べる場合。

つづいてアイテムのプロトタイプ
名前:directory size of  [{#DIRPATH}]
タイプ: Zabbixエージェント
キー: vfs.dirdu.size[#DIRPATH]
アプリケーション: FileSystems

これも好みで変えてOK。#DIRPATHのところだけは、上記のjsonキーと一致させる必要があります。

4. 対象ホストのzabbixエージェントに上記で作成したアイテムのキーを登録
さっきの2と合わせてこんな感じ。

UserParameter=vfs.directory.discovery[*],/bin/sh /tmp/mm.sh $1
UserParameter=vfs.dirdu.size[*],sudo du -b -s $1 | awk '{print $$1}'


du -bにしていますが、そのあたりも適当に変更してもOK。
ここまで書いたらzabbixエージェントを再起動。

これでアイテム追加されました。
削除は自動的にやってくれるのかな。ディスカバリルールのところで「存在しなくなったリソースの保持期間」という設定項目があるのでそのあたりで調整できるかもしれません。

参考になれば。

投稿

編集

  • 回答の評価を上げる

    以下のような回答は評価を上げましょう

    • 正しい回答
    • わかりやすい回答
    • ためになる回答

    評価が高い回答ほどページの上位に表示されます。

  • 回答の評価を下げる

    下記のような回答は推奨されていません。

    • 間違っている回答
    • 質問の回答になっていない投稿
    • スパムや攻撃的な表現を用いた投稿

    評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。

  • 2018/03/08 10:17

    roguerefさん、サンプルスクリプトも含め、誠にありがとうございます。
    まだ私の中では頂いた回答を試すことができないのですが、なるべく早く試してみたいと思います。

    ご回答いただいた内容に加え、自動登録したディレクトリの使用量に対するしきい値の自動登録をする方法があればありがたいのですが、なにか方法はありそうでしょうか。

    キャンセル

  • 2018/03/08 17:45

    一定の数字を超えたらなにかアクションを起こすとかですかね?
    それだとZabbixのトリガそのものですね。トリガは1つだけ作ればいいので、自動登録なんて意味がないと思いますよ。
    それにトリガの自動設定はできないんじゃいないかな。

    キャンセル

  • 2018/03/08 17:51

    あ、ウソですね。ディスカバリルールの設定でトリガのプロトタイプってのもあるので、これを使えばトリガの自動登録もできるはず。試してみてください。

    キャンセル

0

ご回答いただいた後全く別の業務に追われておりました。
大変遅くなってしまったのですが、やっと本件に手を付ける時間ができroguerefさんのご回答を元にLLDにて対象ディレクトリ分、自動でアイテムの登録ができるようになりました。
アイテムごと個別に値を指定するトリガについては、今回は見送りました。
Zabbixから呼ばれるアイテムについては、実際のディレクトリの使用量をZabbixに返すのではなく、サーバ内で利用率として返し、トリガーについては、全アイテム共通で90%といったしきい値で稼働するように設定いたしました。

長い間、放置したままで申し訳ありませんでした。今更ですが、ベストアンサーなどを付けさせていただきました。

投稿

  • 回答の評価を上げる

    以下のような回答は評価を上げましょう

    • 正しい回答
    • わかりやすい回答
    • ためになる回答

    評価が高い回答ほどページの上位に表示されます。

  • 回答の評価を下げる

    下記のような回答は推奨されていません。

    • 間違っている回答
    • 質問の回答になっていない投稿
    • スパムや攻撃的な表現を用いた投稿

    評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。

15分調べてもわからないことは、teratailで質問しよう!

  • ただいまの回答率 88.92%
  • 質問をまとめることで、思考を整理して素早く解決
  • テンプレート機能で、簡単に質問をまとめられる

関連した質問

同じタグがついた質問を見る