ラベル Zabbix の投稿を表示しています。 すべての投稿を表示
ラベル Zabbix の投稿を表示しています。 すべての投稿を表示

2015年10月7日水曜日

Zabbix のアクションで送信するメールに日付を挿入する方法

概要

Zabbix で発泡するアクションメール内に時刻情報を記載する方法を紹介します

環境

  • CentOS 6.6 64bit
  • Zabbix 2.4.5

設定方法

設定 -> アクションを開き設定したいアクションに以下のマクロを追記します

  • Event time: {EVENT.TIME}
  • Event date: {EVENT.DATE}

設定画面のサンプルは以下のような感じです

insert_event_info.png

これで時刻情報がアクションメールの本文内に記載されます

2015年9月16日水曜日

Zabbix のカスタムスクリプトで Redis を自動で再起動させてみた

概要

Redis を監視してダウンしたら自動で起動するようにしてみました
カスタムスクリプトの使い方のおさらいもしたのでメモしておきます

環境

  • CentOS 6.6 64bit
  • Zabbix 2.4.5
  • Redis 3.0.2-1

各種インストール方法

アイテムおよびトリガーの作成

Redisを監視するアイテムとトリガーを作成します
テンプレートはお好きなテンプレートを作成してください

  • アイテム
    redis_item.png

  • トリガー
    redis_trigger.png

アクションの作成

上記作成したトリガーを元に実行されるアクションを設定します

  • 条件
    redis_action_condition.png

  • 実行内容
    redis_action_plan.png

ポイントは実行内容を「リモートコマンド」にして「現在のホスト」でコマンドを実行される部分でしょうか
このままだと権限の関係でコマンドを実行できない可能性があるので設定ファイルを修正します

zabbix_agentd.conf の修正

以下のパラメータが有効になっているか確認してください

  • EnableRemoteCommands=1
  • AllowRoot=1

今回 service コマンドで redis を再起動しますが、zabbix ユーザだと権限がなく service コマンドを実行できません
また、EnableRemoteCommands を有効にしないとカスタムスクリプト自体使えません
AllowRoot の設定はセキュリティ的に嫌だという場合は sudo 等で権限を与えるようにしてください
修正後は zabbix-agent を再起動してください

ここまで設定できれば完了です
実際に redis を停止すれば設定したリモートコマンドが実行されると思います

トラブルシュート

カスタムスクリプトに指定したコマンドがうまく実行されない場合は Zabbix サーバのログを見てみましょう
デフォルトだとログレベルが warnings (3) になっているため debugging (4) にしてください

  • vim /etc/zabbix/zabbix_server.conf
    • DebugLevel=4

これでリモートコマンドが実行されたときに/var/log/zabbix/zabbix_server.logにログが出るようになります
ただ、ログの量が非常に多いのでtail -f /var/log/zabbix/zabbix_server.log | grep start等で必要なログだけ見るようにしてください
Zabbix サーバのログにエラーが出ていなくてもリモートコマンドが実行されていない場合はコマンドを実行しているホスト側で何かしらが原因で実行されていないのでホスト側を確認しましょう
いろいろと原因は考えられますが、コマンドが間違っていたり、一番多そうなのはやはり権限回りかと思います

最後に

Zabbix はトラブルシュート系が結構面倒だといつも感じます
もう少しログを見やすくしてほしい気もします
一番はUI上で「失敗」や「エラー」となっている状態で、その原因を詳細に確認できるとログもデバッグモードにして見る必要がないので楽かなと思います

2015年8月19日水曜日

Munin みたいなメモリグラフを Zabbix でも監視したい

概要

Munin のメモリのグラフを Zabbix でも監視できないかなと思って調べていたら記事を見つけたのでやってみました
Zabbix 2.4 で実施しているのでスクリプトを Zabbix 2.4 に対応するように修正しています

環境

  • CentOS 6.6 64bit Final
  • Zabbix 2.4.5
  • Munin 2.0.25
  • Python 2.6.6

各種インストール

Munin インストール

とりあえずこれでhttp://hostname/muninに ID/PW でアクセスできることを確認しましょう
今回 munin は使いませんがメモリの使用量が munin で問題なく取得できていることを確認してください

今回利用するメモリ使用量を取得するプラグインは以下にシンボリックリンクとしてあります

/etc/munin/plugins/memory

Zabbix インストール

ここを参考にインストールしています
今回は Munin も Zabbix (MySQL も) すべて同一ホストにインストールしています

インストールが完了したらとりあえずZabbix Server自体が監視できていればOKです

スクリプト設定

公開されている python スクリプトは指定したテンプレートに対してアイテムおよびグラフを登録してくれます
今回は Zabbix 2.4 でも動作するようにスクリプトを修正しています

テンプレート登録

Zabbix の UI にアクセスしてテンプレートを一つ登録してください
今回は「Template_Munin_Memory」というテンプレートを作成した体で話を進めます

zabbix_agentd.conf 修正

  • echo 'UserParameter=munin[*],/etc/munin/plugins/$1 |grep "^$2.value" |cut -d " " -f2' > /etc/zabbix/zabbix_agentd.d/userparameter_munin_plugin.conf

echo 文で conf ファイルを1つ作成します
作成したらservice zabbix-agent restartで再起動しましょう

スクリプト修正

適当なディレクトリに移動してスクリプトを取得しましょう

  • cd work
  • git clone git://github.com/oopsops/scripts.git
  • cd scripts/zabbix

zabbix_munin_plugin.py 修正

  • 39 - 40行目 : Zabbix にアクセスするための ID/PW に変更します
39,40c39,40
< username = "Admin"
< password = "zabbix"
---
> username = "Your ID"
> password = "Your PW"
  • 65行目 : カラーコードを6桁にします
65c65
<   for x in range(1,6):
---
>   for x in range(1,7):
  • 71行目 : graph.create の際に templateid を送信しないようにする
71c71
< createdgraphids = zapi.graph.create([{'gitems': (gitems) ,'name': (graph_title),'width':'900','height':'200','yaxismin':'
0.0000','yaxismax':'3.0000','templateid':'0','show_work_period':'1','show_triggers':'1','graphtype':'0','show_legend':'1','
show_3d':'0','percent_left':'0.0000','percent_right':'0.0000','ymin_type':'0','ymax_type':'0','ymin_itemid':'0','ymax_itemi
d':'0'}])["graphids"][0]
---
> createdgraphids = zapi.graph.create([{'gitems': (gitems) ,'name': (graph_title),'width':'900','height':'200','yaxismin':'
0.0000','yaxismax':'3.0000','show_work_period':'1','show_triggers':'1','graphtype':'0','show_legend':'1','show_3d':'0','per
cent_left':'0.0000','percent_right':'0.0000','ymin_type':'0','ymax_type':'0','ymin_itemid':'0','ymax_itemid':'0'}])["graphi
ds"][0]

zabbix_api.py 修正

  • 201 - 206 行目: user.login method の場合に auth パラメータを付与しないようにする
201,206c201,213
<         obj = {'jsonrpc': '2.0',
<                'method': method,
<                'params': params,
<                'auth': self.auth,
<                'id': self.id
<               }
---
>         if method == "user.login":
>             obj = {'jsonrpc': '2.0',
>                    'method': method,
>                    'params': params,
>                    'id': self.id
>                   }
>         else:
>             obj = {'jsonrpc': '2.0',
>                    'method': method,
>                    'params': params,
>                    'auth': self.auth,
>                    'id': self.id
>                   }
  • 230 行目 : user.authenticate を user.login に変更する
230c237
<         obj = self.json_obj('user.authenticate', {'user': l_user,
---
>         obj = self.json_obj('user.login', {'user': l_user,

修正箇所は以上です
とりあえず自分は上記のみで動作しましたが、他にも Zabbix Server のホスト名を記載する部分もあったので環境によってはまだ修正が必要な箇所があるかもしれません

スクリプト実行

  • chmod 755 zabbix_munin_plugin.py
  • ./zabbix_munin_plugin.py memory Template_Munin_Memory

でエラーがでなければOKです
エラーの場合は Exception の内容を確認して上記スクリプトを更に修正する必要があります

各種調整

スクリプトの動作が完了するとテンプレートにアイテムが13個とグラフ1個が追加されます
以下手動での操作ですがやったほうが良さそうな点を紹介します

グラフ修正

  • グラフタイプの変更
    グラフのタイプが「ノーマル」になっているので「積算グラフ」に変更しましょう

  • 不要なアイテムの削除
    グラフから以下のアイテムを削除しましょう

committed
active
inactive
vmalloc_used
mapped

上記はあってもいいのですが積算グラフにすることで縦軸が合わなくなります
Munin のグラフは積算+折れ線グラフでメモリ使用量を表示しており上記のアイテムは折れ線グラフで表示している項目になるため Zabbix では削除しないと縦軸の値が合いません
なので、やるとしたら別途、ノーマルタイプの折れ線グラフを作成して、そちらに移行するといいと思います

完成するとこんな感じになります

sample_memory.png

色はzabbix_munin_plugin.py内でランダムで生成しているので必要に合わせて変更してください

最後に

munin-node を使って Zabbix で Munin ってぽいメモリ監視をすることができました
Python スクリプトも使っているので、スクリプトの実行で失敗しまくる場合は、素直に Munin を使いましょう

Tips

  • Zabbix 2.0.3 でも実施してみましたが Color を作成する for 文のところだけ変更すれば動作しました

2015年8月17日月曜日

Zabbix の UserParameter の引数に特殊文字を指定する方法

概要

デフォルトだと UserParameter の引数に特殊文字「*」「{}」等のが使えないらしいです
使えるようにする方法を紹介します

環境

  • CentOS 6.6
  • Zabbix 2.0.3

設定方法

zabbix_agentd.confを修正します
以下の1行を追加すればOKです

UnsafeUserParameters=1

修正したらzabbix-agentを再起動してください
これで特殊文字が使えるようになります

Tips

デフォルトだと使用できない特殊文字の一覧は以下の通りです(真ん中くらい)
https://www.zabbix.com/documentation/2.0/manual/config/items/userparameters

変数を渡したい場合はそのまま使えるようです
例えばホスト名を表す環境変数{HOSTNAME}を渡したい場合は

original.key[{HOSTNAME}]

でOKです

2015年8月14日金曜日

zbx_redis_template を使ってみた

概要

Zabbix で Redis の監視を簡単にできないかなと探していたら便利そうなテンプレートがあったので使ってみました
ということで zbx_redis_template を使ってみました

環境

  • CentOS 6.6
  • Redis 3.0.3
  • Zabbix 2.0.3
  • Python 2.6.3
  • pip 7.1.0

事前作業

Zabbix Agent および Server のインストールと設定
Redis のインストールと設定

は完了させておいてください
ここでは紹介しません
Zabbix Agent は公式から rpm を取得してインストールしました、Redis は Remi を追加して yum インストールしています
Redis サーバを Zabbix ですでに監視可能な状態であることを前提にしています

Redis 側の設定

監視対象の Redis サーバ上に監視に必要な設定をしていきます

pip インストール

  • yum -y install python-pip
  • pip install redis
  • pip install redis argparse

zabbix_agentd.conf 修正

Zabbix Server 設定

Zabbix Server の GUI を操作していきます
GUI が操作できるマシン上で作業してください

git clone https://github.com/blacked/zbx_redis_template.git
でテンプレートをダウンロードしてください

テンプレートをダウンロードしたら GUI を開いて

設定 -> テンプレート -> インポート

で参照からダンロードテンプレートの中からzbx_redis_templates.xml を選択してください

これで作業自体は完了です
問題なく動作すれば Redis の情報が Zabbix Server に登録されはじめます

トラブルシュート

自分が遭遇したトラブルシュートを紹介します

Not supported by Zabbix Agent

多くはこれにハマると思います

監視対象に配置した python スクリプトを直接実行してエラーにならないようにしましょう
python スクリプトは以下のように実行できます

/etc/zabbix/script/redis/zbx_redis_stats.py -p 16379 $1 $2 $3

まずこれでエラーが出なくならないようにしましょう
エラーになる場合大抵の理由は

  • pipでライブラリのインストールが足りていない
  • zbx_redis.confでポートの指定が足りていない

かなと思います
ライブラリのインストールは必要なものを pip intall してください
ポートの指定は zbx_redis.conf 内を以下のように変更することで可能です

/etc/zabbix/script/redis/zbx_redis_stats.py -p 16379 $1 $2 $3

エラーが出なくなったら再度テンプレートの監視設定を有効にする必要があるので、テンプレートから全アイテムにチェックして一括更新でステータスを無効 -> 有効にしてください
こうすることで再度アイテムのチェックが走ります

監視できない項目もある

おそらくバージョンの違いによるものだと思いますが自分の場合は「redis[{HOSTNAME}, dbsize, none]」の値が取得できませんでした
取得できない値は Zabbix Server 側に値があっても仕方ないのでテンプレートから削除しちゃってOKです

2015年4月30日木曜日

cannot send list of active checks to [$IP]: host [$HOSTNAME] not found

概要

Zabbix Proxy で監視設定をしている際にタイトルのエラーがずっと発生していつまで経ってもホストの監視が有効にならなかった

環境

  • CentOS 6.6 64bit
  • Zabbix Server 2.0.5
  • Zabbix Proxy 2.0.14
  • Zabbix Agent 2.0.14

エラーの詳細

エージェント側とプロキシ側で以下のログがずっと出続けいる状態が発生しました

  • プロキシ側
    cannot send list of active checks to …
  • エージェント側
    no active checks on server …

監視対象のZabbix Agentの設定、分散監視するZabbix Proxyの設定はすでに完了しているものとします
設定とは具体的にはzabbix_agentd.confやzabbix_proxy.confの記載が完了していてプロセスも起動している状態です
またACL等も問題なく設定されている状態です

この状態で当該エラーが発生してホストの監視がずっと行われていませんでした

原因調査

Zabbix Agent側の設定やZabbix Proxy側の設定を散々変更してみたのですが、一向に解消されませんでした
原点に立ち返って再度ログを眺めてみると/var/log/zabbix/zabbix_proxy.logに以下のようなログが出ていました

failed to update local proxy configuration copy: invalid field name "items.filter"

このログを頼りに調査を続けるとどうやらZabbix Proxyに必要なMySQLのスキーマがおかしいことがわかりました

Zabbix ProxyはZabbix Serverとデータの同期を行っています
具体的にはホストの監視設定(アイテム等)になります
このときにZabbix Proxy側のスキーマがZabbix Server側のスキーマとあわずにうまくのデータが同期できていなかったようです

ここまで来てピンと来たのですが、Zabbix Serverは古くから使われているサーバでバージョンが古く「2.0.5」でした
対してZabbix ProxyとZabbix Agentは最近構築したサーバでここには最新のZabbix ProxyとZabbix Agentをインストールしていました
最新バージョンは2.4.5になります

対応方法

結論は

2.4.5のZabbix ProxyとZabbix Agentを一旦アンインストールして2.0.14のProxyとAgentを再インストールしました

になります
すべてyumで管理していたので

yum erase zabbix_proxy
yum erase zabbix_agent
yum erase zabbix

で最新バージョンのパッケージを削除し

rpm -ivh http://repo.zabbix.com/zabbix/2.0/rhel/6/x86_64/zabbix-release-2.0-1.el6.noarch.rpm
yum clean all
yum install zabbix-proxy
yum install zabbix-agent

で再度インストールしたあとに

mysql -u user -p zabbix < /usr/share/doc/zabbix-proxy-mysql-2.0.14/create/schema.sql

という感じで2.0系のDBスキーマをZabbix Proxy用に当ててあげれば問題なく動作しました

最後に

今回学んだ教訓は

Zabbix Serverのバージョンに合わせてZabbix ProxyとZabbix Agentのバージョンも合わせよう
そうしないとDBのスキーマが異なりうまく監視データをZabbix Proxy上に登録することができない

ということです
本当はセキュリティの関係とかもあって最新版を使いたいところなのですが、どうやらDBのスキーマの関係で無理なようです
マイナーバージョンは異なっていても問題ないようです

  • Zabbix Server 2.0.5 <–> Zabbix Proxy 2.0.14 の組み合わせでは問題なく動作した

新規でZabbix Serverも構築する場合は今回のような問題に遭遇することは少ないと思いますが
Zabbix Proxyを使って監視対象の新規サービスを増やす場合などに陥りそうです

2015年3月9日月曜日

ZabbixのAPIを使ってhistoryの一覧を取得してみた

概要

特定のホストに紐づくアイテムの履歴は「ヒストリ」と呼ばれる機能で提供されます
WebUIでヒストリ情報を確認したい場合、過去1,000個分のヒストリしか確認することができません
アイテムを30秒間隔で取得している場合には

30 * 1000 = 30,000 sec = 500 min = 8.3 hour

しか履歴を確認することができません

ZabbixAPIを使えばヒストリをすべて取得できそうだったので試してみました
言語はPHPを使用しています
PHPを使ってZabbixAPIをコールする方法の準備は済ませておいてください

環境

  • CentOS 6.3 64bit Final
  • Zabbix Server 2.0.5
  • Zabbix API 1.4
  • PHP 5.3.3

ヒストリ取得スクリプト

さっそくスクリプトを紹介します
使うためにはソース上の設定部分を直接修正します
次で使い方を紹介します

  • get_history.php
<?php

require 'ZabbixApi.class.php';

try {
    $hostid='10116';
    $itemid='28908';
    $history=3; // 0 - float; 1 - string; 2 - log; 3 - integer; 4 - text.

    $api = new ZabbixApi('http://hostname/api_jsonrpc.php', 'your user name', 'your uesrs password');
    $res = $api->historyGet(
      array(
        'history' => $history,
        'output' => 'extend',
        'hostids' => array (
          $hostid
        ),
        'itemids' => array (
          $itemid
        )
        #,'limit' => 10
      )
    );
    foreach ($res as $result) {
      $value = $result->value;
      $clock = $result->clock;
      echo $value . "," . date("Y/m/d H:i:s", intval($clock)) . "\n";
    }
} catch (Exception $e) {
    echo $e->getMessage() . "\n";
}

?>

使い方

今回は取得したいヒストリ情報は「指定したホストに紐づくアイテムのヒストリ」とします

サンプルで修正する箇所は以下の通り

  • $hostid・・・ホストのIDを記載します、IDはWebUIでホスト設定画面を表示すればURLに記載されます
  • $itemid・・・取得したいヒストリのアイテムIDを記載します、これもWebUIからアイテムの設定画面を表示すればURLに記載されています
  • hostname・・・ZabbixServerが起動しているサーバのホスト名を記載します
  • username・・・サンプルソースの「your user name」の部分を変更してください、WebUIにログインするためのユーザ名を記載すればOKです
  • password・・・サンプルソースの「your users password」の部分を変更してください

最低限上記を修正してください
必要に応じて以下も修正してください

  • $history・・・ヒストリとして保存されているアイテムの型を指定します、ここで型の指定が間違っているとうまくレスポンスが取得できず空が返却されてしまいます、デフォルトでは「3」のintegerが設定されています
  • limit・・・ヒストリがあまりにありすぎる場合、APIがタイムアウトしてしまいます、その場合はlimitを調整してください、もしくは開始時間(time_from)と終了時間(time_till)を指定して件数を削減してください

で実行は

php get_history.php

でOKです
結果は時系列順に「値,タイムスタンプ」のcsv形式で標準出力されます
表示形式等は必要に応じて変更していただければと思います

一応自分の場合はこれで2万弱のヒストリをlimitなしで取得することができました
APIのタイムアウトを調整できれば1回のリクエストで大量のヒストリを取得できると思います

参考サイト

2015年3月6日金曜日

zabbix-getコマンドだけインストール

概要

あれなぜか「zabbix-get」コマンドがないという場合に使えます

環境

  • CentOS 6.3 64bit Final
  • Zabbix Agent 2.0.5

インストール

公式で配布されているrpmを使います
ポイントはすでにインストールされているZabbixAgentと同じバージョンのrpmをインストールすることです

wget http://repo.zabbix.com/zabbix/2.0/rhel/6/x86_64/zabbix-get-2.0.5-1.el6.x86_64.rpm
rpm -ivh zabbix-get-2.0.5-1.el6.x86_64.rpm

今回はCentOS6系なので「el6」をダウンロードしています
CentOS5系の場合は別途「el5」も配布されているのでそちらをダウンロードしてください

動作確認

インストールされるパスは/usr/bin/zabbix_getです

zabbix_get --version

でバージョンが表示されればOKです

2014年12月10日水曜日

Zabbixのアクションでシェルスクリプトを実行する方法 その2

概要

過去にZabbix 1.8で検証していましたが
Zabbixの2系でも試してみました

環境

  • CentOS 6.3 final 64bit
  • Zabbix 2.0.3

設定

事前準備

今回前提として

  • ホストの登録(ホストグループも必要であれば)
  • アイテムの登録(テンプレートも必要であれば)
  • トリガーの登録
  • ホストとアイテムおよびトリガーの紐付け

上記が完了しているとしてアクションを作成してリモートホストにシェルスクリプトを実行させてみます
あとZabbixのインストールはChefで実施しています(Chefはソースコンパイルしてmake installしていた)

アクション作成

設定 -> アクション -> アクションの作成

といきアクションの作成画面を表示します

アクションの概要を設定

まずは「アクション」の設定です
名前は適当に入力します
リカバリメッセージは送信したいと思うのでチェックボックスをONにします
config_action_base.png

アクションの実行条件を設定

次にアクションの実行条件を設定します
ポイントは「トリガーの値 = “障害” 」を削除します
これを削除しないとリカバリメッセージが送信されません
デフォルトのアクションだと「メンテナンスの状態 期間外 “メンテナンス”」が入っていますがこれはこのままでOKです
あとは自分で追加したいトリガーを追加すればOKです
config_action_condition.png

アクションの実行内容を設定

最後に「アクションの実行内容」を設定します
ここに具体的に実行するリモートホストの情報やシェルスクリプトの情報を記載します

デフォルトは何もないので新規で登録します
実行内容の詳細を設定していきます
実行内容のタイプは「リモートコマンド」を選択します

そのすぐ下にターゲットリストがあります

新規 -> ターゲットでホストを選択 -> 選択からリモートホストを実行させるホストを指定 -> 追加

としてシェルスクリプトを実行させたいリモートホストを選択します
選択後に「追加」をクリックすることを忘れずに

次にタイプを設定します
今回はリモートホストにSSH経由でシェルスクリプトを実行したいと思います
なのでZabbixサーバからシェルスクリプトを実行するリモートホストへのSSHは通信できるように事前に設定しておいてください
認証方式は「パスワード」と「公開鍵」のどちらかが選択できますのでお好みに合わせて選択してください
※と、いいたいところなのでが自分がZabbix2.0.3で試した限りだと公開鍵を選択した場合うまくできませんでした(自分のZabbix力が足りなかっただけかもしれませんが)

ログインするためのユーザ名やパスワード、ポート番号の入力してください
そして、ここで実行するシェルスクリプトを記載します
リモートホストで実行できるシェルスクリプトであれば何でもOKです

最後にアクションの実行条件を設定します
新規から「障害対応済 = “コメントなし”」を設定します

ここまで入力できたら一番下の追加をクリックします
config_action_execute.png

アクションのすべての設定が完了したら「保存」をクリックします
これでアクションの作成が完了しました

zabbix側の設定

zabbi_serverのlibssh2を有効にする

zabbix_server.logの中に以下のように「SSH2 support NO」が出ている場合はSSH2を有効にする必要があります

 21535:20141209:130822.629 ****** Enabled features ******
 21535:20141209:130822.629 SNMP monitoring:           YES
 21535:20141209:130822.629 IPMI monitoring:            NO
 21535:20141209:130822.629 WEB monitoring:            YES
 21535:20141209:130822.629 Jabber notifications:       NO
 21535:20141209:130822.629 Ez Texting notifications:  YES
 21535:20141209:130822.629 ODBC:                       NO
 21535:20141209:130822.629 SSH2 support:               NO
 21535:20141209:130822.629 IPv6 support:               NO
 21535:20141209:130822.629 ******************************

面倒ですが、再度コンパイルしてインストールし直す必要があります
※自分の場合はchefからインストールしたのでその場合の手順ですが、rpmとかyumでイントールした人も同じような手順でいいのだろうか。。。

/etc/init.d/zabbix_server stop
cp /opt/zabbix/sbin/zabbix_server{,.back}
cd /opt/zabbix-2.0.3-server/
make clean
./configure --enable-server --with-mysql --with-libcurl --with-net-snmp --with-ssh2
make install
cp /usr/local/sbin/zabbix_server /opt/zabbix/sbin/
/etc/init.d/zabbix_server start

でzabbix_server.logに「SSH2 support NO」が出ていないことを確認します
それでもダメな場合はrpm -qa | grep libssh2がインストールされているか確認してください
インストールされていない場合はyumでインストールしてください
※普通にやっていたらこれに気がつくほうが大変、そしてlibssh2はEPELが必要。。。

zabbix_agetnd.confの設定

シェルスクリプトを実行するリモートホスト側のzabbix_agentd.confに
EnableRemoteCommands=1
が設定されているか確認してください
なければ追加してzabbix_agentを再起動してください
これがないとリモートホストでシェルスクリプトを実行する権限がなく実行に失敗します

sshd_configの設定

今回はパスワード認証を使ってSSHログインするのでログインするリモートサーバ側のユーザのpasswdは設定しておいてください
また、/etc/ssh/sshd_config

  • PasswordAuthentication yes

にしておいてください
実際にZabbixに設定するユーザ情報でログインできるか確認したい場合はZabbixサーバ上のzabbixユーザからリモートサーバにパスワードログインできるか確認してみてください
ACLや権限周りの確認もあるのでログインの確認はやっておいて損はないと思います

試してみる

トリガーの閾値などを極端に低くしたりしてトリガーに引っかかるようにしましょう
その状態にしたときにアクションが実行されるか確認してください

トラブルシューティング

  • うまくシェルスクリプトが実行されない
  • Zabbixを見るとアクションのステータスが未送信になっている
  • ACLおよび認証情報や権限周りが問題ないか再度確認する

うまく一発で想定どおりの動作をすることがあるかもしれませんが、自分の経験的には、まずありえません
うまく実行されない場合にはzabbix_server.logを確認してみましょう
その前にzabbix_server.confのDebugLevelが「4」になっているか確認しましょう
なっていないようなら4に変更してzabbix_serverを再起動してください

変更できたらログを確認します
おそらく/var/log/zabbix/zabbix_server.logがあるかと思いますがこいつが厄介でものすごい速さでログが流れて
ものすごい速さでローテートされてどんどん過去のログがなくなっていきます(5分前のログとかもすぐになくなります)
なのでログが追えないという場合にはzabbix_server.confのLogFileSize=0をzabbix_server.confに記載して再起動するとローテーションされなくなります
ただ、この場合はローテーションがされずどんどんログサイズが肥大化していきます
すぐにログの確認が終わる場合はいいですが終わらない場合に、いつの間にかファイルサイズがとんでもないことになっていてディスク逼迫している。。。なんてこともありますので気をつけてください

自分はローテーションを無効にする設定をするのも面倒だったので
while :; do tailf /var/log/zabbix/zabbix_server.log | grep 'alerts'; done;
でログを見ていて
トリガーが発砲されたときのログ(以下のようなやつ)をメモって
19675:20141209:114118.008 query [txnlev:1] [insert into alerts (alertid,actionid,eventid,clock,message,status,error,alerttype,esc_step) values (10,6,10399,1418092878,'remote_host:hostname

急いでtailfを解除して、そのときのzabbix_server.logを適当な場所にコピーします
そして、コピーしたそのファイルで「19675:20141209:114118.008」を検索してその辺りのログにシェルスクリプトが失敗しているログがあるのでそれで調べていました(超絶ださいですね)

この辺のトラブルシューティングがログを見る方法しかないのがちょっと辛いです

遭遇したエラー

  • Support for SSH script was not compiled
    --with-ssh2で再コンパイル
  • Unsupported authentication method. Supported methods: publickey
    これが一番はまった、、、秘密鍵と公開鍵の権限を変えたり、名前変えたり、パスを変えたり、、、
    結局最終的にはZabbixサーバからzabbixユーザでリモートサーバに対してパスワード認証でログインできるユーザを作成して解決しました
    バージョンとかをあげたら公開鍵認証もできるようになるのだろうか

今回は以上です
パスワード認証ではありますがSSH経由でシェルスクリプトを実行できる方法を紹介しました
SSH経由が嫌だという場合にはカスタムスクリプトという仕組みもあるのでこれを使うといいと思います

P.S 2014/12/10

カスタムスクリプトをちょっと使ってみましたがzabbix_proxyを経由していないのであれば断然これを使ったほうが楽でした。。。
zabbix_agent側でコマンドを発行してくれるのでSSHとかの設定もいらないし、権限回りもAgentをAllowRoot=1で起動しておけば問題なさそうだし。。。
カスタムスクリプトおすすめです

2014年8月24日日曜日

ZabbixAPIを使ってホストを登録するPHPスクリプトを書いた

作りました
https://gist.github.com/kakakikikeke/199a75e7802acec72cdfa

使い方は
  1. $group_id に追加するホストが所属するグループIDを指定
  2. $template_ids に追加するホストに紐付けるテンプレートIDを指定
  3. $host_info に追加するホストのホスト名とIPの配列を定義
  4. 実行

になります
$host_infoは配列で定義した分が追加されます

2014年8月21日木曜日

ZabbixAPIを使ってテンプレートをコピーするPHPスクリプトを書いた

ZabbixのWebUIからはテンプレートを複製する機能がありますが、どうやらAPIにはコピーのAPIがないので各種取得を実行してから作成系のAPIをコールすることでコピーを実現しています

ソースコード
https://gist.github.com/kakakikikeke/b7d6fe1bb671297b921f

簡単に実行の流れを説明すると
  1. ソース内の冒頭、configurationの部分を適宜設定
  2. コピー元になるテンプレートIDをconfigurationで設定したテンプレート名を元に取得
  3. 取得したテンプレートIDを元にテンプレートに設定してあるアイテムの情報を取得
  4. 同様に取得したテンプレートIDを元にトリガーの情報を取得
  5. コピー元のテンプレート名を元に新たにテンプレートを作成(同一テンプレート名は作成できないのでコピー元のテンプレート名を一部置換して作成)
  6. 新たに作成したテンプレートと取得したアイテムの情報を元に新規にアイテムを登録(ここでもアイテム名を一部置換)
  7. 新たに作成したテンプレートと取得したトリガー情報を元に新規にトリガーを登録(ここでもトリガー名を一部置換)

といった流れになっています
置換している部分は個人的に必要なロジックだったので使っているだけで必要に応じて削除してもらって大丈夫です

ZabbixのWebUIのソースを見ていないので何とも言えませんが、WebUIでも同じようなことをしているのだろうか

2014年8月19日火曜日

Zabbixでリカバリメッセージを送信しないようにする方法

ポイントは2つ

  1. アクションの設定でアクションの実行条件から「トリガーの値 = "障害"」を追加する
  2. アクションの設定でリカバリメッセージのチェックをOFFにする

よくありがちなのはリカバリメッセージのチェックをOFFにしただけで通知が飛ばないと思いがちですが、
「トリガーの値 = "障害"」が入っていないと「復旧」のときにもアクションが発生してしまい
リカバリメッセージでないデフォルトの件名とデフォルトのメッセージによる通知が発生してしまいます

その通知がstatus=OKで飛んでくるのであたかもリカバリメッセージに見えるわけです
うーん、わかりずらい

2014年6月11日水曜日

Zabbixでtimeoutするアイテムを監視する方法

Zabbix Agentのタイムアウトは最大で30秒までしか設定できません
値を取得するのに30秒以上かかるアイテムの場合はZBX_NOTSUPPORTEDになってしまい監視できません
その場合、自分はcron+リダイレクトを使った方法で監視しているので紹介します
(cronを使わない方法(zabbix_sender等)もありますので参考程度に御覧ください)

■環境
CentOS release 5.10 (Final)
Zabbix Server 2.2.1

■設定方法
  1. Zabbixに登録するデータを取得するコマンドを作成する
  2. 今回は時間がかかるコマンドとして「du -sx /」を例として紹介します
  3. 結果が数字の部分だけになるようにコマンドを修正する
  4. du -sx / | awk '{print $1}'
  5. cronに登録する(例として毎時5分実行するように設定する)
  6. cron内で結果をファイルにリダイレクトさせる
  7. 5 * * * * du -s . | awk '{print $1}' > /var/tmp/du.size
  8. zabbix_agent.confを開く
  9. emacs /etc/zabbix/zabbix_agent.conf
  10. UserParameterを使ってリダイレクトしたファイルの情報を取得する設定を記載する
  11. UserParameter=get.du.size,cat /var/tmp/du.size
  12. zabbix-agentdを再起動する
  13. 一度cronが回ってファイルが作成できたら念のためzabbix_getで設定したキーの値が取得できるか確認する
  14. zabbix_get -s hostname -k get.du.size
  15. zabbix-serverのアイテムにget.du.sizeで監視するアイテムを登録する
  16. ポイントは更新間隔(秒)を「3600」にすることでcronの間隔と合わせています

以上で設定は完了です
これで1時間おきにduの結果がZabbix Serverに登録されているかと思います

■Tips
うまく値が取得できなくZBX_NOTSUPPORTEDになってしまう場合は、ファイルの権限を確認して読み込み権限を付与してください

cronの部分をJenkinsで巻き取り、値を取得したあとでzabbix_getでZBX_NOTSUPPORTEDにならないか確認するとより正確な監視ができるかと思います
(Zabbix Serverはアイテムが何かの拍子にZBX_NOTSUPPORTEDになっても警告してくれないのでそこをJenkinsでカバーするイメージです)
RESULT=`zabbix_get -s yoshi3 -k get.du.size2`
if [ $RESULT = "ZBX_NOTSUPPORTED" ]
then 
  echo NG
  exit 1
fi

2014年2月28日金曜日

PhpZabbixApiを使って指定してZabbixのアクションの有効/無効を切り替えるPHPスクリプト

スクリプトはGistにて公開しています
https://gist.github.com/kakakikikeke/9222910

■Version
Zabbix 2.0.3
PHP 5.3.3

■Configuration
$api = new ZabbixApi('http://zabbix_server_hostname/api_jsonrpc.php', 'zabbix_user_name', 'zabbix_user_password');
  • zabbix_server_hostname・・・zabbixサーバのホスト名またはIPアドレスを設定
  • zabbix_user_name・・・zabbixにログインするユーザ名
  • zabbix_user_password・・・zabbixにログインユーザのパスワード
を設定してください

■How to use
change_action_status.php test 1
1つ目の引数はアクション名
2つ目の引数は有効/無効フラグ

アクション名は部分一致に対応しているので条件に合致するアクションすべてのステータスを変更します
すべてのアクションに対して実施したい場合は「""」をアクション名に指定します
フラグは0が有効で1が無効に切り替わります

■Tips
部分一致になってしまうのは、search パラメータがデフォルトだと部分一致に対応してしまっているため(おそらく完全一致にすることもできると思う)
内部的にはaction.getを呼び出し検索に引っかかったアクションのactionidを元にaction.updateを呼び出している

■参考サイト

2014年1月29日水曜日

Zabbixでロックファイルを監視する方法

■概要
よくあるケースとしてロックファイルが正常に削除されているか、ずっとロック状態になっていないか
という確認をしたいことがあるかと思います
今回はzabbixでロックファイルの存在を監視する例を紹介したいと思います

■環境
CentOS 5.9 64bit
zabbix 2.2.1

■アイテムを追加
以下のアイテムを作成します
  • 名前:lockfile exists check
  • タイプ:Zabbixエージェント
  • キー:vfs.file.exists[/tmp/test.lock]
  • 更新間隔(秒):30
名前、キーで指定するlockfile名は適宜変更してください
その他の項目については特に変更する必要はございません
更新間隔は30秒を指定していますがここの設定によってlockファイルが何秒存在していたらアラートをあげるという部分の条件になるので必要に応じて変更してください
アイテム追加は新規作成したテンプレートか既存のテンプレートに追加した方がいいと思いますが、ホストに直接アイテムを追加しても問題ないです

■トリガー設定
以下のトリガーを作成します
  • 名前:lockfile exists check
  • 条件式:{Original Template:vfs.file.exists[/tmp/test.lock].last()}+{Original Template:vfs.file.exists[/tmp/test.lock].prev()}>1
  • 深刻度:警告
条件式は「Original Template」というテンプレート内にアイテムを作成した場合の設定方法となります

■動作確認
監視データ -> 概要から追加したアイテムの値が取得できているか確認します
ファイルが存在している場合は1が、存在していない場合は0が返ってきます
今回の設定では30秒間隔でデータを取得しにいくようにしているのですぐにアラートがあがると思います
アクションは必要に応じて追加してください

●仕組み
ロックファイルが存在しているどうかを調べることで実現しています
トリガーの設定で前回の値と今回の値を加算した結果が1より大きかった場合にアラートをあげるようにしています
これは例えば30秒で値を取得しているときに30秒前にファイルが存在して今回取得したときにもファイルが存在している場合にアラートあがる動きになっています
つまり、指定した更新間隔時間以上、ロックファイルが存在している場合にアラートをあげてくれています
ただ、この場合はだとファイル作成 -> 削除 -> 作成 -> 削除と繰り返した場合に、たまたま値を取得したタイミングが前回も今回も作成した場合にぶち当たるとちゃんとロックファイルは削除されているのにアラートがあがってしまうという過剰検知を引き起こす可能性もあります

たぶんもっと良い仕組みはあるんだろうけどパッと思いついたのがこの方法でした

2014年1月28日火曜日

Zabbixを1.8から2.2にアップグレードしたときのメモ

■背景
Zabbixがあまりにも古かったのでアップグレードしました
バージョンは 1.8 から 2.2 にアップグレードしました
残念ながら今回既存のデータは引き継げませんでした
やり方によっては引き継げるようで、1.8 -> 2.0 -> 2.2 という順番でアップグレードすればできるみたいです
既存のデータが引き継げていないので正直新しくインストールしているやり方と全く同じですが、既存のZabbix環境をアップグレードするための方法となります
また、今回新しいバージョンのインストールはyumからでなくソースコードから実施しました

■環境
CentOS 5.10 (64bit)
Zabbix 1.8.15 -> 2.2.1
php 5.3.3
MySQL 5.5.32 (ニフティクラウドRDB)
※古いZabbix、phpは共にyumでインストール

■アップグレード方法
0. 事前準備
service zabbix-server stop
service zabbix-agent stop
  事前にプロセスは停止しておきましょう

1. zabbix-server, zabbix-agent のアップグレード
cd /var/tmp
wget http://downloads.sourceforge.net/project/zabbix/ZABBIX%20Latest%20Stable/2.2.1/zabbix-2.2.1.tar.gz?r=http%3A%2F%2Fwww.zabbix.com%2Fjp%2Fdownload.php&ts=1390818737&use_mirror=jaist
  ダウンロードできない場合は http://www.zabbix.com/jp/download.php から最新の安定版のパッケージをダウンロードしてください
tar xvzf zabbix-2.2.1.tar.gz
cd zabbix-2.2.1
./configure --enable-server --enable-agent --with-mysql --enable-ipv6 --with-net-snmp --with-libcurl --with-libxml2
  「--with-hogehoge」という感じで指定すると様々な追加パッケージを同時にインストールすることができるようです
  詳細は「./configure --help」で確認できます、今回は公式ドキュメントにあるMySQLを使ってzabbixを使用するためのオプションで指定しました
  「Now run 'make install'」と出れば configure は完了です
make
make install
zabbix_agentd -V
zabbix_server -V
  「Zabbix server v2.2.1 (revision 40808) (09 December 2013)」と表示されればインストール完了です
  上記バイナリファイルは/usr/local/sbin/配下にインストールされています

2. zabbixのバージョンを切り替える
cd /usr/sbin
  yumでインストールした場合はバイナリファイルは/usr/sbinにあります
mv zabbix_agentd zabbix_agentd_1.8.15
mv zabbix_server_mysql zabbix_server_mysql_1.8.15
mv zabbix_agent zabbix_agent_1.8.15
ln -nfs /usr/local/sbin/zabbix_server zabbix_server
ln -s /usr/local/sbin/zabbix_agent zabbix_agent
ln -s /usr/local/sbin/zabbix_agentd zabbix_agentd

3. 新規DBへの移行
mysqldump -u username -p zabbix -h hostname > zabbix_backup.dmp
  念のため1.8時代の情報はdumpしておきます
mysql -u username -p zabbix -h hostname
mysql> drop database zabbix;
mysql> create database zabbix;
cd /var/tmp
cd zabbix-2.2.1/database/mysql
mysql -u username -p zabbix -h hostname < schema.sql
mysql -u username -p zabbix -h hostname < images.sql
mysql -u username -p zabbix -h hostname < data.sql
  順番は schema.sql -> images.sql -> data.sql の順番でやる必要があります(外部キー制約の関係上)
  data.sqlでデフォルトテンプレートやデフォルトユーザをINSERTします

4. UI更新
cd /usr/share
  yumでインストールした場合のUIは/usr/share/zabbixにあります
mv zabbix zabbix_1.8.15
  既存のUIのソースは念のためバックアップしておきます
cd /var/tmp
cd zabbix-2.2.1/frontends/
cp -r php/ /usr/share/zabbix_2.2.1
cd /usr/share
ln -s zabbix_2.2.1/ zabbix

5. 各種起動
service zabbix-server start
service zabbix-agentd start
service httpd start
tailf /var/log/zabbix/zabbix_server.log
  念のためログを確認してエラーが出ていないことを確認します

6. WebUIでセットアップ
http://hostname/zabbix/setup.php にアクセスしてzabbixのセットアップを実施します

セットアップの最後で zabbix.conf.php を /usr/share/zabbix_2.2.1/conf/zabbix.conf.php に作成しようとします
うまく作成できない場合はフォルダの権限を変更してみてください(権限はzabbix:zabbixでやってください)
それでもダメな場合は「Download configuration file」から手動でダウンロードしサーバに配置してください
配置後に「retry」するとOKになると思います

残念ながら既存環境の移行はできませんでしたが、同一サーバ上での zabbix のアップグレードは行えたのでよしとしましょう

■参考サイト

■Tips
makeするための環境等もともと整っている環境で実施したのでその辺のインストール手順は省略しています

ユーザやグループの追加も既存のzabbix:zabbixを使用しています

2.2.1からDBの自動マイグレート機能がついており、それにより既存のデータを簡単に引き継げるようになったのですが、1.8から2.2で自動マイグレート機能を使用しようとすると起動時に「Cannot upgrade database: the database must correspond to version 2.0 or later. Exiting ...」というエラーが出てマイグレートできません
冒頭にも記載しましたが、2.2.1のDB自動マイグレート機能を使用したい場合は一度 1.8 -> 2.0 のアップグレードを実施したあとで 2.0 -> 2.2 のアップグレードも実施する必要があります

WebUIで「Database error: Error connecting to database [Too many connections]」が表示される場合はMySQLの max_connections の値を30以上にしてみてください
どうやらzabbixのWebUIからは毎回30弱のDBコネクションを張るようなのでそれ以下の設定だと上記エラーが出るようです

2013年12月5日木曜日

Zabbixでmongoの監視やってみた

■環境
CentOS 6.2
Zabbix 2.0.3
mongoDB 2.4.5
php 5.3.3
※事前作業としてZabbixサーバのインストールとmongoDBのインストールは完了しているものとします
※今回の対応自体ではzabbix_agentd自体は使用しません、また作業はほぼ全てZabbixサーバ上で実施します、zabbix_agentdはインストールしてあっても問題はないです

■モジュール追加(Zabbixサーバ上で実施上で実施)
yum -y install php-devel php-pear gcc make
pecl install mongo
vim /etc/php.ini
以下を追記
extension=mongo.so

vim test.php
以下を追記
<?php
new MongoClient("mongodb://dbserver:27017");
?>

php test.php
でエラーとならなければOK
エラーとなる場合はmongoのプロセスが上がっているかやACLの設定(FWやiptables)を見なおして下さい

■スクリプト追加(Zabbixサーバ上で実施)
mkdir -p /opt/zabbix/share/zabbix/externalscripts/
cd /opt/zabbix/share/zabbix/externalscripts/
wget http://mikoomi.googlecode.com/svn/plugins/MongoDB%20Plugin/mikoomi-mongodb-plugin.php
wget http://mikoomi.googlecode.com/svn/plugins/MongoDB%20Plugin/mikoomi-mongodb-plugin.sh
chmod 755 mikoomi-mongodb-plugin.*
chown zabbix:zabbix mikoomi-mongodb-plugin.*
※どうやらchefインストールした環境だと上記のパスに置く必要があるようです(すいません、先に書いておくべきでしたが今回Zabbiサーバのインストールはchefで実施しています

■スクリプト修正(Zabbixサーバ上で実施)
以下は実施しないでもいいかもしれません、自分の環境では実施しないと動作しなかったので備忘録がてら記載しておきます
  1. mikoomi-mongodb-plugin.sh内で「shift」コマンドを実行している行を削除(shiftすることで引数がうまくphpに渡せませんでした)
  2. mikoomi-mongodb-plugin.php内541行目あたりでzabbix_senderを呼んでいるパスをフルパスに変更(フルパスで呼んでいないのでPATHを通していない場合はzabbix_senderをフルパスで呼ぶように変更してください)

■Zabbixサーバへのテンプレート登録(Zabbixサーバ上で実施)
http://mikoomi.googlecode.com/svn/plugins/MongoDB%20Plugin/MongoDB_Plugin_template_export.xml
をダウンロードしてZabbixのWebUIからテンプレートを登録します
インポートできたテンプレートに対して監視対象のホストを追加します
テンプレートの設定からマクロタブを選択して
{$HOSTNAME}、{$PORT}、{$SERVER}
を追加します
{$HOSTNAME}と{$SERVER}に監視するmongoDB側のIP(またはホスト名)を入力し
{$PORT}にLISTENしているmongoのポートを入力します(test.phpでテストしたときのポート番号を入力します)

■ACL設定(ZabbixサーバとDBサーバ)
Zabbixサーバ -> tcp/27071 -> mongoDB
上記を満たすFWやiptablesの設定をしてください
replicaSet構成の場合は各ポートも通信できるようにしたほうがいいかもしれません
※公式だとmongosのプロセスを監視すれば良いと書いてあるようでしたが私はreplicaSetのPRIMARYポートを監視するようにしました(なのでfail overした場合は監視するポート変更する必要があります。。。)

■参考

以上で設定自体は完了です
あとは自分が設定した際のトラブルシューティングを記載しているので参考にしてみてください

●全体的な動きの流れ
全体的な動きとしては
シェル実行 -> php実行 -> mongoからデータ取得 -> zabbix_sender で 127.0.0.1にデータ登録
という流れとなっています
なのでzabbix_agentを使えないで監視ができるわけです
zabbix_senderは /tmp/mikoomi-mongodb-plugin.php_dbserver.data のデータを送っています
ちなみにphp内で送信しているzabbix_senderのコマンドは以下でした
/opt/zabbix/bin/zabbix_sender -vv -z 127.0.0.1 -i /tmp/mikoomi-mongodb-plugin.php_dbserver.data
上記を実行してエラーとならないことを確認する必要もあります
zabbix_sender自体のログも/tmp配下にあります

●トラブルシューティング
うまく取得できない場合はホストのアイテムの設定からMiscellaneous: Data Collectorのステータスを有効にしてください
その後zabbix_server.logを見るとシェルを実行した結果のログがでるのでそれを元に修正します

配置したシェルを直接叩いて動作を確認することもできます、以下は実行サンプルです
sh /opt/zabbix/share/zabbix/externalscripts/mikoomi-mongodb-plugin.sh -h dbserver -p 27071 -z dbserver
phpは以下のように実行します
php /opt/zabbix/share/zabbix/externalscripts/mikoomi-mongodb-plugin.php -h dbserver -p 27071 -z dbserver
シェルやphpをrootで実行した場合は/tmp配下のログの権限に気をつけてください
ログの所有者がrootになってしまいzabbixから実行した場合はzabbixユーザで実行することになりログへの権限がなくなりスクリプトがうまく動かなくなりますのでrootで直接スクリプトを実行した場合は権限の書き換えかファイルの削除をしてください

「timeout while executing a shell script」が出力される場合はzabbix_server.confのTimeoutの値を30に変更しzabbix_serverを再起動してください

「No Data Received in 5 minutes」でアラートが常にあがってしまう場合はトリガーの設定でnodateの引数を800くらいあげてください
どうやらZabbixトラッパーでのデータの取得が10分おきになっているのでデフォルトの300秒(5分)だと常にアラートがあがってしまうようです

最終的にzabbix_server.logに
8967:20131204:171621.274 item [db_server:mikoomi-mongodb-plugin.sh[-h {$SERVER} -p {$PORT} -z {$HOSTNAME}]] became supported
的なログが出力されれば完了です

2013年10月29日火曜日

【Zabbix】net.tcp.serviceを使う際の注意事項

■環境
CentOS 6.3 64bit
Zabbix 2.0.3

■注意事項
net.tcp.serviceはポートの状態を確認することができるキーです
LISTEN可能な状態なら1が返ってきます

net.tcp.serviceは引数を3つ設定でき
  • 1つ目はプロトコル(ssh、service.ntp、ldap、smtp、ftp、http、pop、nntp、imap、tcpのいずれか1つを指定)
  • 2つ目はIPアドレス
  • 3つ目はポート番号
を指定するのですが、LISTENしているIPアドレスによって2つ目の引数の設定に注意してください

以下具体例です
  • ポート10052が127.0.0.1でLISTEN -> net.tcp.service[tcp,,10052]
  • ポート10052が0.0.0.0でLISTEN -> net.tcp.service[tcp,,10052]
  • ポート10052が192.168.1.10でLISTEN -> net.tcp.service[tcp,192.168.1.10,10052]

何も指定しないとデフォルト監視しに行くのIPアドレスは「127.0.0.1」となります
0.0.0.0でLISTENしている場合は127.0.0.1でもアクセスできるので何も指定しなくても大丈夫です
厄介なのが192.168.1.10(とかプライベートIP系)でLISTENしている場合で
IPアドレスを指定しないと127.0.0.1に聞きに行ってしまうのでうまく監視できません
なのでちゃんとIPを指定してあげないとずっと「0」が返ってきてしまいます

ブログ等の紹介はIPアドレスまでちゃんと指定しているケースが少ないので
ちゃんと引数が何を意味しているのかはちゃんと調べないとダメですね

■参考サイト

2013年9月24日火曜日

Zabbixで日付付きのログファイルを監視する場合のちょっとしたコツ

例えば

/var/log/app/sample_app.YYYY-MM-DD.log

みたいな感じのログで日付でローテートしているログがあった場合に
Zabbixでログ監視をするアイテムを登録するときにアイテムキーの登録で正規表現を使ったりするとうまく監視ができない
(自分がやった限りでは正規表現を使ったキーだとうまく監視できませんでした)

そんな場合にちょっと工夫してやることで日付ローテートするログでも監視できるようになる

対処としてはログが存在しているサーバ側で以下のようなコマンドを実行してあげる

ln -nfs /var/log/app/sample_app.`date "+%Y-%m-%d"`.log /var/log/app/sample_app.log

要するに監視するログファイル名を固定するためにシンボリックリンクを使う
これでZabbixサーバ側のアイテムの設定では「sample_app.log」を監視するだけでよくなる

シンボリックリンクを張っている正規表現のコマンドもあくまでもサンプルなので、あとは必要に応じて正規表現の部分を変更すれば、大抵のファイル名には対応できると思う

P.S 20130925
リンクの切替は毎日実行しないとダメなのでcronを仕込んでおくといいと思います
1 0 * * * ln -nfs /var/log/app/sample_app.`date "+%Y-%m-%d"`.log /var/log/app/sample_app.log

参考にしてみてください

2013年7月4日木曜日

ChefでインストールしたZabbix Serverのタイムゾーンを変更する方法

/etc/httpd/sites-enabled/localhost.conf



php_admin_value date.timezone "Asia/Tokyo"

の部分を変更します
そして変更後はZabbix Serverじゃなくてhttpdを再起動しましょう
変更してるのはapacheの設定ファイルですからね


「zabbix」「タイムゾーン」とかでググると/etc/php.iniを変更してください
という記事が多いんだけどChefでインストールしたZabbix Serverの場合は設定ファイルが違うところにあるみたい

/etc/httpd/conf.d/zabbix.confを変更してください
という記事もあったのでどちらかと言うとそっちのほうが今回の設定には近いと思う

apacheがdebian方式でインストールされるのでZabbix Serverの設定ファイルも違うところに保存されるといった感じでしょうか