タグ「Zabbix」が付けられているもの


Zabbix のダッシュボード代わりに grafana を使えるようにしてみる(その2)

ということで、前回からの続きです。

"Installed Apps" のところに、おなじみのアイコンと Zabbix と表示されていれば、プラグインのインストールも無事に完了しています。

[From Zabbix のダッシュボード代わりに grafana を使えるようにしてみる(その1) - Soukaku's HENA-CHOKO Blog]

とりあえず、インストールして Zabbix プラグインまでのインストールまで完了した状態になったわけですが、ここからもう少し設定をいじっていきます。

バックエンドのデータベースを MariaDB に変更

インストールした素のままだと、バックエンドに使っているデータベースは sqlite3 が使われるようになっているのですが、ここを MariaDB (or MySQL) に変更してみます。もちろん、必須ではないですけどね。

まず、 MariaDB に grafana 用の grafana というデータベースを作成。そこに、 session という名前のテーブルをひとつだけ作成します。

soukaku@vpsdb:~$ mysql -uroot -p
Enter password:
Welcome to the MariaDB monitor.  Commands end with ; or \g.
Your MariaDB connection id is 731303
Server version: 10.0.28-MariaDB-2 Debian unstable

Copyright (c) 2000, 2016, Oracle, MariaDB Corporation Ab and others.
Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.
MariaDB [(none)]> create database grafana character set utf8; Query OK, 1 row affected (0.01 sec)
MariaDB [(none)]> grant all privileges on grafana.* to grafana identified by '**********'; Query OK, 0 rows affected (0.01 sec)
MariaDB [(none)]> use grafana Database changed MariaDB [grafana]> create table `session` ( `key` char(16) not null, `data` blob, `expiry` int(11) unsigned not null, primary key (`key`) ) ENGINE=MyISAM default charset=utf8; Query OK, 0 rows affected (0.01 sec)
MariaDB [grafana]> show tables; +-------------------+ | Tables_in_grafana | +-------------------+ | session | +-------------------+ 1 row in set (0.01 sec)
MariaDB [grafana]> quit Bye

session テーブルを作る必要がある点は、ドキュメントに記載されてますので、それも参考に。データベースへのアクセス権の設定は、各自調べてください。
今回のうちの環境では、grafanaが稼働するサーバと、DB サーバを別にしているので、そのあたりにも注意。

Zabbix のダッシュボード代わりに grafana を使えるようにしてみる(その1)

Zabbix に関して言えば、このところずっと開発版を追っかけているわけですけど、ダッシュボードでグラフを表示させた後、グラフの自動再描画がかかっても、ずっと更新されずにいる、という状況が起きています。DB を MySQL から MariaDB に変えたタイミングぐらいから、のような気もするんですが、いまいち原因が判らずに困っているわけですが…。

それとは別に、 grafana というダッシュボードを統合できるツールがあるということで、コレを機会にちょっと使ってみようか思いまして、インストールしてみた次第。

kibana等でも使用されているOSSのダッシュボードツールです。zabbixだけでなく、ElasticsearchやGraphite、AWS CloudWatchなど複数のデータソースのものを可視化することができます。ライブデモもあるので、実際どういうものか気になったらまずは見てみてください。

[From grafanaを使用してzabbixのモダンなダッシュボードを簡単作成! - Catcher in the tech]

複数の Zabbix サーバのコンソールを統合できるようなので、そのあたりにも興味があったりしますし。

さくっとインストール

まず、 grafana 関連のパッケージがどれだけあるのか、チェック。

root@vps2:~# aptitude search grafana
p   grafana                                 - feature rich metrics dashboard and graph editor
p   grafana-data                            - feature rich metrics dashboard and graph editor -
p   grafana-zabbix                          - Zabbix datasource for Grafana

結果からみれば、 grafana-zabbix を指定してインストールすれば、依存関係の解消が行われるので、念のためシミュレーションモードで、どんなパッケージがインストールされるのかを確認。

root@vps2:~# aptitude -s install grafana-zabbix
以下の新規パッケージがインストールされます:
  adwaita-icon-theme{a} at-spi2-core{a} dconf-gsettings-backend{a} dconf-service{a}
  fonts-font-awesome{a} glib-networking{a} glib-networking-common{a}
  glib-networking-services{a} golang-1.7-go{a} golang-1.7-src{a} golang-go{a} golang-src{a}
  grafana{a} grafana-data{a} grafana-zabbix gsettings-desktop-schemas{a}
  gstreamer1.0-plugins-base{a} libatk-bridge2.0-0{a} libatspi2.0-0{a} libcairo-gobject2{a}
  libcdparanoia0{a} libcolord2{a} libdconf1{a} libepoxy0{a} libevdev2{a} libglew2.0{a}
  libgstreamer-plugins-base1.0-0{a} libgstreamer1.0-0{a} libgtk-3-0{a} libgtk-3-bin{a}
  libgtk-3-common{a} libgudev-1.0-0{a} libinput-bin{a} libinput10{a}
  libjs-jquery-metadata{a} libjs-jquery-tablesorter{a} libjs-twitter-bootstrap{a}
  libjson-glib-1.0-0{a} libjson-glib-1.0-common{a} libmtdev1{a} libproxy1v5{a}
  libqt5core5a{a} libqt5dbus5{a} libqt5gui5{a} libqt5network5{a} libqt5opengl5{a}
  libqt5printsupport5{a} libqt5qml5{a} libqt5quick5{a} libqt5sql5{a} libqt5sql5-sqlite{a}
  libqt5svg5{a} libqt5webkit5{a} libqt5widgets5{a} librest-0.7-0{a} libsoup-gnome2.4-1{a}
  libsoup2.4-1{a} libvisual-0.4-0{a} libwacom-bin{a} libwacom-common{a} libwacom2{a}
  libwayland-cursor0{a} libxcb-icccm4{a} libxcb-image0{a} libxcb-keysyms1{a}
  libxcb-render-util0{a} libxcb-util0{a} libxcb-xinerama0{a} libxcb-xkb1{a}
  libxkbcommon-x11-0{a} libxkbcommon0{a} mesa-utils{a} phantomjs{a}
  qt5-gtk-platformtheme{a} qttranslations5-l10n{a}
更新: 0 個、新規インストール: 75 個、削除: 0 個、保留: 96 個。
アーカイブの 79.5 MB を取得する必要があります。展開後に 346 MB のディスク領域が新たに消費されます。

注意: 'シミュレーション' モードを使用します。 先に進みますか? [Y/n/?] y パッケージのダウンロード/インストール/削除を行います。

今回、grafana のインストールを試みるサーバでは 75個のパッケージを追加することになるようですね。
あとは、シミュレーションモードを外して、"aptitude install grafana-zabbix" でインストール。

インストールが完了すると、grafana が自動的に起動、3000/tcp に web ブラウザでアクセスして、ログイン画面が表示されれば、まずは OK 。

zabbix-2.4.7+dfsg ベースに Zabbix 3.0 のビルドをしようとしてハマる

Zabbix 、人柱も兼ねて、このところずっと rc 付きとか 3.0 系とかを自前でパッケージングして使っていたんですが、最近になって zabbix-agent がビルドできなくなり、なんでだろうと、ずっと思っていたんですが、そもそも 3.0.0 においては zabbix-agent は削除されたということで、ビルドできなくて正解だった模様。

:: Dropped support of zabbix_agent binary
Dropped support of Inetd version of Zabbix Agent.

[From Zabbix :: The Enterprise-Class Open Source Network Monitoring Solution]

となると、ビルドする中で zabbix-agent の処理を止めなくちゃいけないわけですが、それをどの部分で制御しているのかが判るまでに、結構時間取られたんで、念のためメモ的に残しておく。

ハマリポイントは、実は二つ

一つ目は JavaScript ファイルのコピー先がない、といってビルドが止まるというもの。こちらは、コピー先のディレクトリを dpkg-buildpackage コマンドの実行前に作る、ということで比較的楽に回避できたんですが。

make[1]: ディレクトリ '/usr/local/src/zabbix-3.0.0beta2.dev.58103' に入ります
DEB_BUILD_OPTIONS=parallel=4
I: zabbix_3.0.0+dfsg
Replacing sourceless (minified) bundled libraries...
cp -vfH debian/missing-sources/jquery.js  frontends/php/js/jquery/jquery.js
'debian/missing-sources/jquery.js' -> 'frontends/php/js/jquery/jquery.js'
cp: 通常ファイル 'frontends/php/js/jquery/jquery.js' を作成できません: そのようなファイルやディレクトリはありません
debian/rules:90: ターゲット 'override_dh_autoreconf' のレシピで失敗しました
make[1]: *** [override_dh_autoreconf] エラー 1
make[1]: ディレクトリ '/usr/local/src/zabbix-3.0.0beta2.dev.58103' から出ます
debian/rules:76: ターゲット 'binary' のレシピで失敗しました
make: *** [binary] エラー 2
dpkg-buildpackage: error: fakeroot debian/rules binary gave error exit status 2

で、二つ目が、zabbi-agent の削除に伴うもので、こっちを解消するのに、かなり手間取りまして…。

make[1]: Entering directory '/usr/local/src/zabbix-3.0.0beta2.dev.58100'
DEB_BUILD_OPTIONS=parallel=4
I: zabbix_3.0.0+dfsg
dh_install
dh_install: zabbix-agent missing files: debian/tmp-build-MYSQL/src/zabbix_agent/zabbix_agent
dh_install: missing files, aborting
debian/rules:127: recipe for target 'override_dh_install' failed
make[1]: *** [override_dh_install] Error 255
make[1]: Leaving directory '/usr/local/src/zabbix-3.0.0beta2.dev.58100'
debian/rules:76: recipe for target 'binary' failed
make: *** [binary] Error 2
dpkg-buildpackage: error: fakeroot debian/rules binary gave error exit status 2

メッセージから行けば、" zabbix_agent がねぇよ" というわけですが、まぁソースレベルで削除されてるんで当然なわけですが、この zabbix-agent に関する操作をどこでやっているのかが、最初全く見当がつかなくて悪戦苦闘していた、と…。

Zabbix 3.0 のカスタムインターバルを試してみたのだけど…

さて、前のエントリーで、最初考えていたのとは、違う方法で実現したところがあったりします。

スクリプト内で処理をしている HTTP/2 でのアクセス比率の計算、最初は各バージョンのアクセス数をカウントした値を使って、 Zabbix 側の計算アイテムを使う予定だったのですが…。

アクセス比率のデータは、スクリプトの計算結果が小数点以下5桁の数値が送られくるので、それに合わせてデータ形式を浮動小数点型を選択し、Zabbix 側でパーセンテージ変換するために、単位 (Units) と乗数 (Use custom multiplier) の設定も合わせて行います。

[From HTTP/2 でのアクセス比率を Zabbix で蓄積&グラフ化 - Soukaku's HENA-CHOKO Blog]

当初案は、計算アイテム と カスタムインターバルの組み合わせ

最初の目論見では、HTTPバージョンのアクセス数だけスクリプト側で集計して zabbix_sender で送信して、アクセス比率は計算アイテムにして、その計算アイテムをカスタムインターバルで設定してみよう、と。(3.0 で実装された機能なので、どう動くのかを見てみたかった、というのもありましたし。)

It is possible to create custom rules regarding the times when an item is checked. The two methods for that are Flexible intervals, which allow to redefine the default update interval, and Scheduling, whereby an item check can be executed at a specific time or sequence of times.

[From 2 Custom intervals [Zabbix Documentation 3.0]]

カスタムインターバル自体は、データの取得やポーリングを決められた時刻や特定のタイミングでで実行させたい時などに有用な設定なんで、これが実装されるのを待っている人もいると思うのですが、実行タイミングをかなり細かく制御(といっても秒単位まで)出来るようで、「毎時 0 分 0 秒に実行」という指定も可能になっています。
下の例の "m/5s10" だと 毎時 0 分 10 秒、5分 10 秒、10 分 10 秒、15 分 10 秒(以下略)というタイミングで実行するという設定になります。(細かいパラメータは、マニュアルページ参照。)

カスタムインターバルの設定

HTTP/2 でのアクセス比率を Zabbix で蓄積&グラフ化

常時 SSL 化 & HTTP/2 対応したのはいいのだけど、実際自サイトへのアクセスが、どれだけ HTTP/2 で来ているのかを定常的にチェックする仕組みを考えてみた。

自分のところは、HTTP も HTTPS も同じ /var/log/apache2/access.log にアクセスログを出力しているので、そのログに記録されている HTTP バージョンを集計すれば出来るな、ということで、

  • logtail2 コマンドを使って、アクセスログの増分を取得
  • HTTP/1.0 、 HTTP/1.1 、 HTTP/2 それぞれでのアクセス回数のカウントと、HTTP/2 でのアクセス比率を計算
  • その結果を全て zabbix_sender で、Zabbixサーバに送信
という動作を行うスクリプトを Web サーバ上に用意してすることに。
スクリプトで利用している、 logtail2 コマンド( logtail パッケージに含まれる)と zabbix_sender のインストールについては、ここでは言及しません。
#HTTP と HTTPS でアクセスログを分離しているのであれば、 HTTPS 側だけ集計すればいいんですけど…。

下は実際に動作させているスクリプト。見てもらえれば、特に小難しいことをやってないのは判るんじゃないかと思います。

root@vps2:~# more bin/HTTP_Ver.sh
#!/bin/bash
item=()
# アクセスログの増分から、HTTPバージョンごとのアクセス数をカウント
/usr/sbin/logtail2 -f /var/log/apache2/access.log -o /tmp/apache2.offset > /tmp/apache2.diff
for i in 1.0 1.1 2 ; do
    verCount=`/bin/grep -c HTTP/${i} /tmp/apache2.diff `
    /usr/bin/zabbix_sender -z 127.0.0.1 -s vps2.downtown.jp -k HTTP.ver.${i} -o $verCount
    item+=($verCount)
done
# HTTP/2でのアクセス比率を計算
if [ ${item[2]} -eq 0 ]; then
    ratio=0.00000
else
    ratio=`echo "scale=5 ; ${item[2]} / (${item[0]} + ${item[1]} + ${item[2]})" | bc`
fi
/usr/bin/zabbix_sender -z 127.0.0.1 -s vps2.downtown.jp -k HTTP2.ratio -o $ratio

for 文の繰り返し回数の制御を HTTP のバージョン番号である " 1.0 1.1 2" (実際にアクセスログ中に出てくるもの)で行うようにして、この値を zabbix_sender で指定するアイテムのを識別するための key の識別に使う、というような工夫はしていますけどね。

次に、Zabbix サーバ側に、このスクリプトが送信するデータを受け付けるためのアイテムを作成します。

Zabbixのトリガーをtweetしたついでに吊る!

Zabbix のトリガーと連動して検知内容を tweet する方法は、前二つのエントリー通りで、こちらは期待通りに動いてくれている。

いま通知を tweet するようにしているサイト、実際に見に行って某クラスターお馴染みの即吊♥キャプチャーを使って、アーカイブを作っているのだけど、サイトの更新確認と同時に archive.is でのアーカイブ取得と Twitter への取得通知を自動化しちゃおう、というのが今回のミッション。

即吊♥キャプチャー|WEBキャプチャーをTwitterに投稿しちゃうアプリケーション

tweepyを使って、Zabbixのトリガーをtweetする(その2)

で、前のエントリーの続き。

tweet しようとしてハマる…

さて、Zabbix 側も設定が終わって、実際にトリガーに連動して tweet されるかをチェックするために、 zabbix-agent の停止で上がるトリガー使ってテストをしていたのだけど、一向に tweet されない。スクリプトを CLI で実行すれば任意のメッセージで tweet 出来るわけだから、スクリプト本体に問題がある可能性は低いだろう、ということで、 Zabbix Server でログレベルを debug に変更してログを採取。

すると、zbx2tw.py が呼びだされたタイミングで、以下のようなメッセージが出ていることを発見。

 17336:20151128:195521.400 zbx2tw.py output:
Traceback (most recent call last):
  File "/usr/lib/zabbix/alertscripts/zbx2tw.py", line 15, in 
    api.update_status(sys.argv[2])
IndexError: list index out of range

"IndexError: list index out of range" でググってみると、「リスト(配列)に対して存在しないインデックを指定した際に発生する例外」ということで、Zabbix が zbx2pw.py を呼び出す際に渡そうとしている引数の内容やその順番がおかしいのかもしれない、というところまでは判ったのだけど…。

zbx2tw.py の呼び出し方を変えてみる

まぁ、まだリリースされてもいない Zabbix 3.0.0alpha3 使っているんで、もしかしたらスクリプトに渡す引数に関する仕様が 2.0 や 2.4 と変わっていたりするかもしれないし、あんまり追求する気力もなかったのだけど、色々考えてみたわけですが…。

トリガー検知時の処理内容を変更

Zabbix ではアクションの設定の中で任意のコマンドを実行するように設定することも可能なので、「 zbx2tw.py をコマンドとして扱うように設定を変更してみたらどうだろう?」ということで、設定を変えてみたところ…。

なんと、ビンゴ!トリガーの内容が、tweet されるようになったじゃないですか!

具体的には、設定で、処理タイプをメッセージ送信からリモートコマンドへ。実行タイプにカスタムスクリプト、実行先として Zabbix Server を選択。
そして、コマンド欄に実行したい内容を記述、という感じ。


tweepyを使って、Zabbixのトリガーをtweetする(その1)

Zabbix 使って、 Web ページの更新をチェックしているところがいくつかあって、更新されたらメールが飛ぶようにはしているのだけど、それを tweet させられないか、ということで調べてみると、やはり先人は居るものですね。

A continuación, vamos a explicar cómo configurar de forma sencilla las alertas en Zabbix para enviarlas a Twitter.

[From Zabbix: Alertas a Twitter ~ El mundo en bits]

今回は、このスペイン語で書かれたサイトの情報を元に、やってみたというわけです。

tweepy をインストールする

まずは、 tweepy をインストール。

ここで軽くひとハマり。
上記で引用しているサイトに書かれた手順どおり、 tweepy を github から取得してセットアップしようしたら、以下の様なメッセージが出てセットアップが中断される。

root@vps2:~/tweepy# python setup.py install
Traceback (most recent call last):
  File "setup.py", line 5, in <module>
    from pip.req import parse_requirements
ImportError: No module named pip.req

あんまり時間かけたくなかったのと、原因調べるの面倒だったので、配布物に含まれる README.md を参照してみたところ、 pip というコマンドを使う方法も記述されていたので、そちらを試してみることに。
まず、 pip 自体をインストールする必要があるわけですが、これは Debian sid 向けに python-pip というパッケージがあるので、こいつをインストール。

root@vps2:~# aptitude install python-pip
以下の新規パッケージがインストールされます:
  python-cffi-backend{a} python-colorama{a} python-cryptography{a} python-distlib{a} python-enum34{a}
  python-html5lib{a} python-dina{a} python-ipaddress{a} python-ndg-httpsclient{a} python-openssl{a}
  python-pip python-pyasn1{a} python-requests{a} python-urllib3{a} python-wheel{a}
更新: 0 個、新規インストール: 15 個、削除: 0 個、保留: 202 個。
1,030 k バイトのアーカイブを取得する必要があります。展開後に 5,550 k バイトのディスク領域が新たに消費されます。
先に進みますか? [Y/n/?] 

Debian の常で、インストールしたいパッケージを指定して上げれば、依存関係は自動的に解決されて関連パッケージも一纏めにインストール完了。

続く pip のインストールも、コマンド一発で関連するモジュール群まで、無事インストール完了。

root@vps2:~# pip install tweepy
Downloading/unpacking tweepy
  Downloading tweepy-3.5.0-py2.py3-none-any.whl
Requirement already satisfied (use --upgrade to upgrade): requests>=2.4.3 in /usr/lib/python2.7/dist-packages (from tweepy)
Requirement already satisfied (use --upgrade to upgrade): six>=1.7.3 in /usr/lib/python2.7/dist-packages (from tweepy)
Downloading/unpacking requests-oauthlib>=0.4.1 (from tweepy)
  Downloading requests_oauthlib-0.5.0-py2.py3-none-any.whl
Requirement already satisfied (use --upgrade to upgrade): urllib3==1.12 in /usr/lib/python2.7/dist-packages (from requests>=2.4.3->tweepy)
Downloading/unpacking oauthlib>=0.6.2 (from requests-oauthlib>=0.4.1->tweepy)
  Downloading oauthlib-1.0.3.tar.gz (109kB): 109kB downloaded
  Running setup.py (path:/tmp/pip-build-ViGwji/oauthlib/setup.py) egg_info for package oauthlib
Installing collected packages: tweepy, requests-oauthlib, oauthlib
  Running setup.py install for oauthlib
Successfully installed tweepy requests-oauthlib oauthlib
Cleaning up...

で、ここまでで準備の第一弾が完了。
あとから気づいたのだけど、最初に tweepy のインストールに失敗したメッセージに "ImportError: No module named pip.req" とあるので、 python-pip も必要だった模様。

VyOS に、Debian パッケージを導入する

VyOS 自体は、 Debian ベースなので、apt line を正しく設定すれば、VyOS と Debian のキメラを作れるわけですが、前回のエントリーで

あぁ、あと Vyatta 時代の設定を引き継いでしまう関係上、パッケージレポジトリの設定は直しておきましょうね。

[From Vyatta CORE 6.6R1 から VyOS 1.0.4 へ変更してみた - Soukaku's HENA-CHOKO Blog]

と書いておいた分、実は誤りがあって、sid を指定した設定になっていた。
VyOS は、 Debian としは oldstable になっている Squeeze ベースなので、本来なら次のような設定を投入しないと、いけなかったのですね。

set system package repository squeeze components 'main contrib non-free'
set system package repository squeeze distribution 'squeeze'
set system package repository squeeze url 'http://cdn.debian.or.jp/debian'
set system package repository squeeze-security components 'main'
set system package repository squeeze-security distribution 'squeeze/updates'
set system package repository squeeze-security url 'http://security.debian.org/debian-security'

#VyOS の FAQ の中にも ”How do I install debian packages?” という項目があったりする。

あの設定のママ ”sudo aptitude update” して "sudo aptitude" でパッケージのアップデートとかインストールをしようとしても、依存関係の解決のため libc6 のアップデートをしようとするために他にも多くのパッケージのアップデートを行おうとするも、VyOS 特有のパッケージと整合性がとれなくなって、グチャグチャな状態になってしまう、というわけです。

正しく設定しておけば、実際のインストールは

$ sudo aptitude update && sudo aptitude install emacs23-nox

とやれば OK となります。

Zabbix 2.3 で PHP の encoding 周りのエラーが発生

とりあえず 2.3.1 をビルドしてみたわけですが、

Zabbix 2.1 が出てからほぼ1年になるのねぇ、と思いながら、次のメジャーバージョン 2.4 の開発版である 2.3.1 を deb パッケージにしてみた。

[From Zabbix 2.3.1 を 独自にパッケージングしてみた - Soukaku's HENA-CHOKO Blog]

インストールしてみたら、今度は色んな所で、

ini_set(): Use of mbstring.internal_encoding is deprecated [dashboard.php:22 → require_once() → ZBase->run() → ZBase->initLocales() → init_mbstrings() → ini_set() in /usr/share/zabbix/include/locales.inc.php:25]

というエラーメッセージが表示されるように…。
例えば、こんな↓感じ。

ダッシュボードに表示されるエラーメッセージ

Zabbix 2.3.1 を 独自にパッケージングしてみた

Zabbix 2.1 が出てからほぼ1年になるのねぇ、と思いながら、次のメジャーバージョン 2.4 の開発版である 2.3.1 を deb パッケージにしてみた。

パッケージングの手順自体は

  1. Zabbix 2.3.1 のソースをダウンロード
  2. Debian に取り込まれている Zabbix 2.2.3 のソースパッケージをインストール
  3. ダウンロードしてきた 2.3.1 のソースを、deb パッケージ作成用に展開
  4. パッケージング実行

となるわけですが、今回は 4. のパッケージングのところで引っかかった。

何も考えずに、dpkg-buildpackage コマンドを実行すると、

nexus01:/usr/local/src/zabbix-2.3.1-gaia01# dpkg-buildpackage -us -b -rfakeroot
dpkg-buildpackage: warning: using a gain-root-command while being root
dpkg-buildpackage: source package zabbix
dpkg-buildpackage: source version 1:2.3.1-gaia01-1
dpkg-buildpackage: source distribution UNRELEASED
dpkg-buildpackage: source changed by root <root@nexus01.downtown.jp>
dpkg-buildpackage: host architecture amd64
 dpkg-source --before-build zabbix-2.3.1-gaia01
dpkg-source: info: using options from zabbix-2.3.1-gaia01/debian/source/options: --extend-diff-ignore=\.(bat|exe)$ --compression=xz
dpkg-checkbuilddeps: Unmet build dependencies: libgcrypt-dev
dpkg-buildpackage: warning: build dependencies/conflicts unsatisfied; aborting
dpkg-buildpackage: warning: (Use -d flag to override.)

バグフィックス版を入れたら Zabbix 2.1.6 をインストールすることになったでござる

仕事の関係もあって、Zabbix 2.2 のアルファ版である 2.1.0 をインストールしたのは、以前書いたとおり。
そのアルファ版も、順調に 2.1.1 → 2.1.2 とリリースされていったので、そのとおりに追従していたのだけど、 2.1.2 にしたところで、zabbix-server プロセスがクラッシュするという事象に遭遇…。

2.1.3 、 2.1.4 も試したのだけど、事象が解消しないし再現性も高いということで、BTS にバグ報告してみた。報告時に気がついたのだけど、ほぼ同時期に同じ事象が報告されていたようで、そちらのほうに「fixした」というコメントが付いたので、早速試してみることに。

Zabbix 2.1.0 が出たというので、早速自前で deb にしてみた

何気なく、TL 眺めてたら、

というのが流れてたので、早速自前でdeb化してみた。

source を元にパッケージングする方法は、昔書いたエントリーがあるので、そいつを参考に。

パッケージの依存関係が解消したので、Zabbix サーバは正しく稼働中

BTS に報告を投げたものの、Zabbix パッケージのメンテナの方ではなにもしないという事になったようで、

好き好んでsid使ってるんだから、こういうことがあっても、じっと我慢の子で、パッケージ更新されるの待つしか無い、かな?

[From パッケージの依存関係が解決できなくて、Zabbixサーバが削除されたでござる - Soukaku's HENA-CHOKO Blog]

と思っていたのだけど、自前でビルドできないこともないので、

と、書いたとおり、復旧はさせたんですが…。

rsyslog から名前付きパイプ経由で出力したログを snmptrap で飛ばす

前回からの引き続き。

rsyslog の omsnmp モジュールでは、やりたいことには微妙に足りない感じなので、何か代替案はないかとドキュメントを漁ったりググってみた結果、名前付きパイプ経由でやればいいのでは、という結論に達したので、実際に試してみた。

簡単に流れを書き出すと、

  • 名前付きパイプを準備
  • rsyslog から特定条件のログを、名前付きパイプに出力
  • 名前付きパイプに出力されたログを、Perl スクリプトで処理して、snmptrap コマンドを利用してトラップ発信
  • snmptrapd でトラップを受信

という感じ。

ものぐささん(というか、せっかちな人向け)の Zabbix インストール

ここ数日、CentOS入れてZabbix(2.0.4ね)インストールして、ってのを繰り返していて、気がついたのだけど、

  1. Zabbix 2.0.4のrpmとZabbix推奨になっているfping、iksemelのrpmをダウンロードして来て、ターゲットとなるサーバに配置。(一つのディレクトリにまとめておくと、さらに良い。)
  2. yumコマンドで、"yum install /path/to/*.rpm" を実行。

で、依存関係の解決による不足パッケージのダウンロードも行われて、必要となるものは全部インストールされるのですね。なぜか、MySQLだけは、yumが依存関係の解決をしてくれなかったので、パッケージ名を明示していますが…。
もちろん、MySQL、Zabbixそれぞれの設定は必要だけど、ちまちま依存関係にあるパッケージをインストールして~、よりは格段に手間が省けるので、参考になれば。

実際にやってみた時のログは、こちらを参照のこと。
#Serverでしか試してませんが、おそらくProxyも同じように出来るはず。

Zabbix APIからのホストグループ登録で日本語名を使いたい

昨日エントリーした

ZabbixのAPIを叩いて、ホストグループやホストの一括登録をやらせるプログラムを書いているのだけど、日本語の扱いで上手く行っていなくて、悩んでいたりする。

[From Zabbix APIを叩いて、日本語ホストグループ名で登録したいのだが… | Software - Soukaku's HENA-CHOKO Blog]

の続き。

「日本語の部分を、JSON形式にする前に、JSONで使える形に変換できれば」ということで、改めて調べてみて、どうやら

外部から入力された文字列は必ずEncodeモジュールのdecode関数を使用してデコードします。デコードとは「バイト文字列」を「内部文字列」に変換する処理のことをいいます。マルチバイト文字列を扱う場合はdecode関数を使用して必ず内部文字列に変換します。

[From Encode - 日本語などのマルチバイト文字列を適切に処理する / Perlモジュール徹底解説 - サンプルコードによるPerl入門]

のあたりのやり方が使えそうということで、標準入力からホスト名データを読み込んだあと、JSON形式のデータを生成する前のところで、バイト文字列を内部文字列に変換する処理を入れみたら、文字化けせずに登録されるようになりました。

Zabbix APIを叩いて、日本語ホストグループ名で登録したいのだが…

ZabbixのAPIを叩いて、ホストグループやホストの一括登録をやらせるプログラムを書いているのだけど、日本語の扱いで上手く行っていなくて、悩んでいたりする。

Zabbix自身、GUIからであればホストグループ名やホストの表示名に日本語が使えることはわかっているので、API経由での登録処理で生成するJSONデータの中での2バイトコードの扱いが正しく出来れば問題がなくなるのだろうけど、その辺りの情報が少ないんだよね。

どうやっているかというと…

今、参考にしているのは、ここ。

Zabbix API starts to play significant role especially when it comes to integration of Zabbix with third-party software like configuration and incident management systems as well as for automation of routine tasks. It is incredibly difficult to manage monitoring of thousands of hosts without some automation in place!

[From Getting started with Zabbix API | Zabbix Weblog]

にあるホスト名を取得して一覧表示をするスクリプト。

インストールしたZabbixエージェントをOS起動のタイミングで実行

前回の手順でインストールが完了しても、実はMacを再起動したりすると、Zabbixエージェントの起動は手動でやらなくちゃいけない。

とコマンドを実行すれば、インストールまで完了。
あとは、/usr/local/etc/zabbix_agentd.confを自分の環境に合わせて変更して、zabbix-agentを起動。

[From 訳あって、またZabbixを使い始めたので、OS Xも監視対象にしてみた | Software - Soukaku's HENA-CHOKO Blog]

ウチでは、Mac miniは基本起動させっぱなしなんだけど、やっぱり手動でいちいち起動させるのも、面倒。
なので、自動起動できるように設定をしてみた。

訳あって、またZabbixを使い始めたので、OS Xも監視対象にしてみた

いろいろ紆余曲折があって、Zabbixを使うプロジェクトに放り込まれたので、勉強がてら自宅でも再びZabbixを使い始めてる。
インストールなり初期の設定なりは、ググれば出てくるので、細かくは書かないけど、「Mac OS Xもシステム要件に入っているようだし、監視対象に入れてみようかな〜。」とバイナリを探してみたのだけど、公式サイト周辺では見つからない。
homebrewにあるのだけど、OS XをZabbixサーバと動かすためのパッケージで「MySQLが入ってない」と言われてインストール出来ない。

[soukaku@messiah]$ sudo brew search zabbix
Password:
zabbix
[soukaku@messiah]$ sudo brew install zabbix
MySQL is required to install.

You can install this with Homebrew using:
brew install mysql-connector-c
For MySQL client libraries only.

brew install mysql
For MySQL server.

Or you can use an official installer from:
http://dev.mysql.com/downloads/mysql/
Error: An unsatisfied requirement failed this build.

コレを入れればエージェントも一緒にインストールされそうだけど、欲しいのはエージェントだけだし、そのためにMySQL入れるまで必要性はないので、「バイナリなければ、コンパイルすればいいじゃない」ってことで、ソースを取ってきて展開してみたら…。