UNIXserver

ZabbixでCPUやメモリなどのリソーストリガーが発生した時にpsやtopの状態を記録するスクリプト

Zabbixで監視をしている時、リソーストリガーで障害メールを出すようにしていることが多いけれど、
実際午前3時に何のプロセスが動いているのかという事は、
ログを確認したり、実際に起きていないとわからないことのほうが多かった。

そこで、自動的にpsやtopの出力をファイルに書き出すようなスクリプトを作って、
リソーストリガーでメールと、このスクリプトを起動するようなアクションを組んでみた。という備忘録。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
#!/bin/sh
 
TIME=`date +%Y%m%d-%H%M%S`
TXT_DIR='/tmp/zabbix_check_pstop'
UNAME_=`which uname`
OS_=`${UNAME_} -a`
 
# txt directory create
if [ ! -d ${TXT_DIR} ];then
  mkdir ${TXT_DIR}
fi
 
# ps output
/bin/ps auxww >> ${TXT_DIR}/ps_${TIME}.txt
 
# top output and erase
case ${OS_} in
  *FreeBSD*)
    #echo 'FreeBSD'
    /usr/bin/top -b -d 1 60 >> ${TXT_DIR}/top_${TIME}.txt
    # erase old files
    /usr/bin/find ${TXT_DIR} -mtime +30 -type f -exec rm -f {} \;
    ;;
  *)
    #echo 'default'
    /usr/bin/top -b -n 1 >> ${TXT_DIR}/top_${TIME}.txt
    # erase old files
    /usr/sbin/tmpwatch 720 ${TXT_DIR}
    ;;
esac



僕の関わっているシステムはRedhat系LinuxとFreeBSD混在環境が多いため、こんな感じで1つのスクリプトにまとめている。

Apacheベーシック認証Satisfyとプロクシー

今まで、ベーシック認証の制御というとSatisfy Any を利用して、特定のIPアドレスからはベーシック認証なし、それ以外はベーシック認証という形で運用することが多かった。
特に、開発サイトや公開前のチェックや構築中で自分とお客さんのIPだけを許可していたり。

        Order allow,deny
        Satisfy Any
        #Allow from all
        # system
        Allow from 127.0.0.1 10.0.0.1 10.0.0.2
        # client
        Allow from 61.111.111.111
        # develop
        Allow from 61.100.100.100 61.100.100.101
 
        authtype basic
        .......



こんな形だったのだが、途中にロードバランサーがシングルネットワークで入ったり、融通の利かないプロクシーサーバが入ったりして接続元のIPアドレスが失われ、1つのネットワーク機器やローカルのIPアドレスでしか接続されないという事象になったので、この設定を変更することに。
Read the rest of this entry »

Zabbixでsnmptrapdを使い、VMwareのホストから受信(zabbixスクリプト編 その2)

Zabbixでsnmptrapdを使い、VMwareのホストから受信(snmptrapd編 その1)これと
Zabbixでsnmptrapdを使い、VMwareのホストから受信(snmptrapd編 その2)これと
Zabbixでsnmptrapdを使い、VMwareのホストから受信(zabbixスクリプト編 その1)これの続き。

前回はVMwareのホストから出てくるsnmptrapdの出力が日本語HEXだったという発見ができたというところまで。

■日本語HEXの逆変換


では、日本語HEX逆変換をするには?という事で探したら、xxd というものが見つかった。
Linuxの16進ダンプツール(od,xxd)

さらに調べると、このxxdは単体のパッケージが見つからなかったので、vim を入れるとついてくるらしいという
情報を信じて、下記のようにインストール。(OSはCentOS5.4)

# yum install vim-common.x86_64



Read the rest of this entry »

Zabbixでsnmptrapdを使い、VMwareのホストから受信(zabbixスクリプト編 その1)

Zabbixでsnmptrapdを使い、VMwareのホストから受信(snmptrapd編 その1)これと
Zabbixでsnmptrapdを使い、VMwareのホストから受信(snmptrapd編 その2)これの続き。

[root@mngsv ~]# cat /tmp/zabbix_snmptrap.log
/usr/local/bin/zabbix_snmptrap.sh: line 41: read: `disman-event-mib': not a valid identifier
/usr/local/bin/zabbix_snmptrap.sh: line 51: unexpected EOF while looking for matching ``'
/usr/local/bin/zabbix_snmptrap.sh: line 57: syntax error: unexpected end of file
エラー


前回はこんなエラーが出ていたというところで終わっていた。既存スクリプトが間違っているかと思ったところ。

■zabbix_snmptrap.shの解析

ログをチェックするとエラーが出ていた。

zabbixに登録された値を見ると

SNMPv2-SMI::enterprises.6876.4.3.301 = STRING: "host"
SNMPv2-SMI::enterprises.6876.4.3.302 = STRING: "192.168.11.111"



この2つだけ取得できているといえる・・・
つまり、read文で標準入力から取得したうちの一部ということ。
Read the rest of this entry »

Zabbixでsnmptrapdを使い、VMwareのホストから受信(snmptrapd編 その2)

これの続きです。Zabbixでsnmptrapdを使い、VMwareのホストから受信(snmptrapd編 その1)

■ホストを無効状態にしてのテスト出力


zabbix_sender [28695]: DEBUG: answer [{
        "response":"success",
        "info":"Processed 0 Failed 1 Total 1 Seconds spent 0.000037"}]
Info from server: "Processed 0 Failed 1 Total 1 Seconds spent 0.000037"
sent: 1; skipped: 0; total: 1


■成功例


zabbix_sender [28770]: DEBUG: answer [{
        "response":"success",
        "info":"Processed 1 Failed 0 Total 1 Seconds spent 0.000162"}]
Info from server: "Processed 1 Failed 0 Total 1 Seconds spent 0.000162"
sent: 1; skipped: 0; total: 1



Read the rest of this entry »

Zabbixでsnmptrapdを使い、VMwareのホストから受信(snmptrapd編 その1)

VMwareでの仮想サーバでサイトを運営しているプロジェクトに入っているけど、最近メモリが圧迫されてきたとかで
パフォーマンス低下によるエラーが上がることから、VMwareが何をしているのか。スワップやバルーニング(メモリの貸し出しとかでHDDに読書)が発生していないかをzabbixで監視できないかという要望だった。

snmptrapdの部分も相当面倒くさいと思ったけれど、日本語HEXで文書が出てくるところとかも肝だった。
下記、備忘録。ネットにはそれほど出回っていないのと、同じ環境ではそれほど物理サーバ増えないし、
増えたところで、この文書を使用する機会なんて数度あるぐらいだから、風化しちゃうよりも他で使ってもらえたら嬉しいとか思ったり。

ZABBIX SNMPTrap設定

こちらを参考にさせていただきました。

Read the rest of this entry »

JenkinsでPHPUnitのテストファイルを複数指定する。

この続きです。
だいぶ間が空いてしまいました。

phpunit --log-junit reports/unitreport.xml \
--coverage-html reports/coverage \
--coverage-clover reports/coverage/coverage.xml \
./test/test_lib_*.php



僕のコマンドラインでのテストファイル指定は致命的なものがあるんだけれど、別の投稿にします。

って書いたまま放置して申し訳ないです。

どうもワイルドカードで指定したつもりだったんですが、結果を見ると最初のテストファイルの結果しか出てきません。
Read the rest of this entry »

JenkinsでPHPUnitを実行してコードカバレッジを試した。

これの続きです

Seleniumだけでは内部のclassを細かくテストできないので、PHPUnitでテストしようと思って、設定してみました。
もともと、/lib/ディレクトリにはclassを入れて、/test/ ディレクトリにはクラスファイルに対するテストファイルを置いています。

参考にしたのはこのサイトです。

準備と書かれたxdebugのインストールを忘れ、Jenkinsのプラグインのチェックだけしちゃったところで
ビルド実行したものだからエラーが出ちゃいました。
Read the rest of this entry »

JenkinsにSelenium Html Reportをいれてみた。

PHPでプログラムを作るときに、どうしてもテストがブラウザテストに偏りがちになり、
classのテストコードを書いているだけではコードのテストカバー率が悪くなってきたので、Selenium とJenkinsを組み合わせて
自動ビルド(テスト)を行えるような仕組みを組んでみた。

PHPでTDD&CIワークショップ、Jenkins + PHP の各種プラグインパート資料

5分で出来るJenkins導入

こちらを参考にJenkinsはyum で入れて、各種のプラグインを入れてみた。

で、Seleniumを調べると、Firefoxのプラグインとして導入できるSelenium IDEがあり、
ブラウザ上でクリックやテキストボックスに書いた文言とかを記録して、HTMLファイル形式やJavaなどの各言語に特化した形式に
出力してくれるらしい。(HTMLファイルはそのままマクロとして動く。)

Selenium IDEの詳しい説明は下記のサイトが分かりやすかった。
PHPUnit と Selenium RCで機能テストをやってみる
Read the rest of this entry »

zabbixで東京電力の過去分の値を入れる(完了)

これ
これ
これ
これ
これ
これの続きです。

注意:この作業を行うにあたって、心構えとしては

・運用中のzabbixが不安定になる覚悟をする。
・バックアップを取ったデータベースがなければ、過去データはすべて破棄する覚悟。
・作業を行った直後は問題がなかったとしても、特殊なデータや状況が発生した時に、データ破損してしまうことを受け入れる覚悟。

これらのことが許容できる環境の持ち主か、どうにもせっぱつまっていて、上記のリスクに比べたら相当に致命的な状況まで追い込まれている人じゃない限り、やらないほうが良い作業だと思っています。※技術力向上のためにやれるなら幸せかもですが。

今回は今までの準備で作ったスクリプトやfunction(ストアドプロシージャ)を使って本番データに入れてみたいと思います。
といっても、あっさりしたものですが。
Read the rest of this entry »