2013年04月06日のツイート

Apache qpid稼働確認時のメモ

※ CentOS6のqpidで確認
CentOS python-qpidパッケージにはいくつかサンプルのスクリプトが付いてきており、そちらを使って、qpidの動作確認をする場合のメモ。
ファイルの置き場所は /usr/share/doc/python-qpid-0.14/examples/api/ で使用するファイルは hello, drain, spoutとなる。
helloは指定されたキューにメッセージを書き込み、そのまま受信するので単体で使える。(Exchangeに対しても使用可能)
drain, spoutはそれぞれ受信/送信だけを行うので、組み合わせて使う。(Queueではなく、Exchangeに対して使う場合はは工夫が必要。。)

qpidのインストールを終えたら、まずhello で helloworldがかえってくるかを確認する。(単体qpidでの疎通確認)

./hello

その後、drain -r -f amq.fanout を実行しつつ, spout amq.fanout で、任意のexchange, queue 指定でメッセージ送信が出来るかを確認する(bind, routing のテストにも使える)

./drain -r -f amq.fanout
./spout amq.fanout

※ amq.fanoutはqueueではなく、exchangeのため、メッセージを受信するためには、drainの-fオプションが必要なことに注意。。

サイズの異なるメッセージを送りたい場合第2引数にテキストファイルを指定するとそちらをメッセージに含めることが出来る。

./spout amq.fanout $(cat aaa)

queueを作成したい場合はqpid-config (qpid-tools パッケージを使用)

qpid-config add queue キュー名

※ デフォルトで作成されているamq.fanout, amq.topic などはExchangeで、メッセージを貯めることが出来ないので注意。。

queueが作成されたかどうかはqpid-config で確認できる。

qpid-config
qpid-config queues

なお、キュー定義をdurableにしておかないと、qpidd再起動時にキューが消えてしまうので注意。(qpid-cpp-server-store パッケージが必要)

qpid-config add queue キュー名 --durable

GitでExcel2003のdiffを取る方法

やり方はまず、次のページからファイルのダウンロードを行い、 xls2txt を作成しておく。
Linux or Cygwin上で実施可能
http://wizard.ae.krakow.pl/~jb/xls2txt/

その後、次のページの形式に従って、.git 以下を編集しておく。
http://sixtease.livejournal.com/45387.html
.git/config に

[diff "excel"]
  textconv=/usr/local/bin/xls2txt.exe -A

.git/info/attributes に

 *.xls diff=excel

これで、git diff でExcelの記述がテキストのdiffで表示されるようになるはず。
※ Excel2003でしか試していないので、それ以外だと無理かも。。

rsync+Gitで設定ファイルの差分管理

基本的にサーバーの設定はPuppet経由で実施しており、かつmanifestをGitで管理しているので、変更内容は後から容易にトラッキング出来るのだが、1台だけで実施していた作業や、暫定的に追加した対応については、サーバー上の設定を直接変更していることも多い。

その部分については、基本的には設定項目をExcelで管理していたのだが、変更項目が多かったり、今までに無い変更だったりすると、台帳のフォーマットに大きく変更が入ってしまうことがある。
また複数人で作業していると台帳更新が徹底されないこともあり、もう少し上手いやり方が欲しいところだった。

より上手い方法として、サーバー上で変更が頻繁に入る部分を、日次でrsyncでGitサーバーに転送しておき、かつGitサーバーではcronでdailyコミットを行うことで、各設定ファイルの差分を管理していくことにした。

やり方としては次のようになる。(CentOS6で実施。)
1. Gitサーバー側での作業
1-1.
次のような/etc/rsyncd.confを作成しておく。

uid = root
gid = root

[rsyncbackup]
        path = /srv/rsyncbackup
        read only = false

合わせて/etc/xinetd.d/rsync でdisable = no を設定し、xinetd を有効化しておく。

1-2.
/srv/rsyncbackup でgit initを実施しておく。

1-3. cronに次の登録を実施しておく。

 cd /srv/rsyncbackup && git add -A . && git commit -m "daily commit" > /dev/null 2>&1

2. 管理したいサーバーに 次のcronを登録する。(転送対象, 除外対象、転送時刻は適宜変更)

2 1 * * * cd / && rsync -aqzR --exclude=/etc/selinux /etc /usr/local serverfqdn::rsyncbackup/$(hostname)

これで、各サーバーの設定ファイルがGitで管理できるようになる。普段.yyyymmdd などのバックアップファイルで管理している部分までdiff形式で取得できるようになるのでとても便利だ。また、スクリプトの開発等で使用しているサーバーに入れておくことで、各サーバーにGitを入れなくてもスクリプトのバージョン管理が出来るようになる。

[考慮点]

  • 一部のファイル (/etc/adjtime など) は定期的に内容が変化して、その度にコミットが発生してしまう。こちらを回避するために不要な項目については .gitignoreに追加していく必要がある。
  • Gitはレポジトリのサイズが大きくなるとgit status, git log --stat などのスピードが落ちるので、各サーバーから送付するサイズはできる限り絞った方がよい。
  • DBの中に設定を持つような場合、PostgreSQLならテーブル指定のpg_dump等を使用して設定ファイルとして落とし込む必要がある。
  • rsyncに--deleteをつけた方がよいかは今後の課題。

[今後の展開]

  • Puppetマニフェストもそうだが、こちらのレポジトリもRedmineと組み合わせておくと、チケット内容(日付、実施者、変更意図、作業ログなど)と実機の設定変更の内容を関連付けることが出来る。後から実施内容を振り返る際にとても便利そうだ。。


トラックバック
http://d.hatena.ne.jp/enakai00/20131001/1380616727

覚えたい開発ツール群

開発ツールはこれだけ覚えておけばひとまず安心だろうか。以前の"オープンソースまとめ"と合わせて、メモしておこう。。
git, redmine, jenkins, selenium, sonar, eclipse, jmeter, testlink, sphinx

perlでgmetricを使う場合の注意点

こちらのperl gmetricだが、v3.0用で3.2系では動かなかった。。 https://github.com/athomason/perl-Ganglia-Gmetric-PP 3.1以降を使う場合はこちらをおく必要がある。 http://pastebin.com/NyzGVdW8

Ganglia3.2とgweb2を試してみた

Ganalia ( http://ganglia.sourceforge.net/ )はUnix系のリアルタイムグラフ化ツールなのだが、最近本体のバージョンが3.2に上がっており、かつWebコンソールのバージョンが2.0にあがったのに気づいたので改めて試してみた。

元々Gangliaはエージェントのインストール, 設定が非常に簡単で、かつ取得する量を増やすのも比較的簡単(エージェントに値を送るためのコマンドが付属しており、シェル等で値を送付できる, http://d.hatena.ne.jp/aaabbb_200904/20100313/1268472285 )と使いやすいものだったのだが、2つ厄介な点があった。
1. Windowsで使用できない (正確にはCygwinからは使用できるはずなのだが、Cygwin-1.7で上手くビルド出来ない、など使い辛かった。。)
2. 値を取得するのは簡単だが、それを任意の並びで表示するのが少々大変(PHPで表示ロジックを書く必要がある)
今回のバージョンアップではこの辺が大きく改善されていた。まずはGanglia3.2の変更点とgweb2の変更点を順番にまとめていこうと思う。<<参考リンク>>
http://ganglia.info/?p=430
http://ganglia.info/?p=393
http://ganglia.info/?p=422
http://ganglia.info/?p=448

Ganglia3.2

sFlow対応(Windows対応)

WindowsネイティブのGangliaエージェントは依然として上手く動かないようなのだが w, Ganlia3.2ではsFlow(詳細は参考リンクを参照, 元々はSNMPに代わるネットワーク機器の情報取得プロトコルだったはずなのだが、ホストのキャパシティ管理にも転用されたらしい。。w) の値を表示できるようになっており、Windows用のホストsFlowエージェントを使うことで、Gangliaエージェントで取得できる量が表示できるようになっている。<<参考リンク>>
http://itpro.nikkeibp.co.jp/article/COLUMN/20070410/267869/
http://blog.sflow.com/2010/10/installing-host-sflow-on-windows-server.html
gmondと違って、任意の値を取得するためのコマンドが付属していないので、完全にgmondを置き換えられるわけではないが、まったく量が取れなかった以前の状態と比べると大きな進歩だ。。

互換性

こちらで試した限りでは、gmond 3.1.7からgmond 3.2 に送付したデータは正常に表示できた。ただし、3.0, 3.1 は元々互換性が無いので、3.0系しかパッケージが準備出来ない場合には 3.2のSRPMをビルドしなおした方がよいかもしれない。
※ CentOS5のEPELではパッケージが 3.0系なので、ビルドが必要になる。

gweb-2.0

GangliaのWebコンソールはかなり大きく変更されているので、大きい変更だけを記述しようと思う。。詳細は参考リンクを参照。<<参照リンク>>
http://sourceforge.net/apps/trac/ganglia/wiki/ganglia-web-2
なお、デモサイトとしてこちらのサイトが用意されていた。
http://fjrkr5ab.joyent.us/ganglia-2.0/

Aggregate Graph

前述の通り、今まではGangliaのWebコンソールにグラフを追加する際は手でロジックを作る必要があったが、この機能を使うと"ある値を複数のサーバーに対してまとめて表示する"というグラフをWebコンソール上で作成出来るようになる。例えば、Apacheサーバーが複数ある場合、全サーバーのスレッド数をまとめて表示した画面を作っておくと、パフォーマンス障害に気づくのが簡単になるだろう。。

AggregateGraphの作成画面は、こんな感じの画面になっている。(デモサイトの画面を参照, 直接たどるには 上部の "Aggregate Graphs"タブを使用。)
http://fjrkr5ab.joyent.us/ganglia-2.0/aggregate_graphs.php
この画面で、ホスト正規表現: "ba"("ba"を含むノード), メトリック正規表現 "cpu_idle" を選ぶと、"ba"を含むノードについて cpu_idle のグラフが表示される。(直リンクは下のリンクを参照, 数台のサーバーについてidleの量がグラフで見られるはず。。)

http://fjrkr5ab.joyent.us/ganglia-2.0/graph.php?r=hour&z=xlarge&title=&vl=&hreg[]=ba&mreg[]=cpu_idle&gtype=line&aggregate=1&embed=1

なお、確認時点ではデモサイトのWebコンソールのバージョンが 2.0.0だったのだが、最新の2.1.7(正確には 2.1.5以降 ) では、作成したAggregateGraphを閲覧するためのURLを生成するボタンが追加されている。メモ帳等によく使うURLを書いておき、毎朝まとめて開くと良さそうだ。。なお、Views機能を使うと開くグラフをサーバー側に保管できるが、これについては後述。。

Event

Eventはあるノードのグラフに対して縦棒と、その時刻に起こった事象を書き込む機能になる。 参考リンク先に例があった。値が妙な動きを見せたときの確認結果をまとめるために使えそうだ。。<<参考リンク>>
http://sourceforge.net/apps/trac/ganglia/wiki/events
時刻、名前等はWebコンソールの"Events"タブから指定できる(こちらも2.1.5以降)が、事前に gwebのconf.php(インストールディレクトリに置く, CentOSでは通常 /var/www/html/gweb) で次の設定を行う必要がある。

$conf['overlay_events'] = true;

便利な機能だが、こちらは、管理コンソールから変更を加えてしまうため、閲覧だけのユーザーには実施させないよう注意したい。ただ、現時点のWebコンソール(2.1.7で確認)ではEventsの追加については、認証の対象となっていない(このため、閲覧が出来るユーザーなら誰でもEventを定義出来てしまう)ようなので注意。URL的には "events.php"が画面となるので、後述する"login.php"と合わせて、個別にhtpasswdの対象としておくとよさそうだ。。

認証

1.0系のコンソールでは、認証はクラスタごとの閲覧制限にしか使用していなかった(private_clusters 内に記述していた )が、2.0系ではViewsの編集 (2.1.7でいうと、Viewを事前に定義しておき、任意のAggregateGraphを追加していく機能になっている。1画面に表示するグラフを細かく制御したい場合に便利そう。。 ) の機能が加わったため、この機能を有効にする場合には認証を有効にしておいた方がよさそうだ。。<<参考リンク>>
http://sourceforge.net/apps/trac/ganglia/wiki/ganglia-web-2/AuthSystem

デフォルトの設定では conf_default.php 内で次が定義されており、Viewsの編集機能が使えなくなっている。

$conf['auth_system'] = 'readonly'

編集を有効化するには、次の定義を入れる必要があるが、

$conf['auth_system'] = 'enabled'

gweb自体は認証を行えず、Apache等のBasic認証と連携する(REMOTE_USER を取得する) 形で認証を行うため、上の設定と合わせて、httpd.confに次の設定を行う必要がある。

SetEnv ganglia_secret yourSuperSecretValueGoesHere

<Files "login.php">
  AuthType Basic
  AuthName "Ganglia Access"
  AuthUserFile /var/lib/ganglia/htpasswd
  Require valid-user
</Files>

なお、ACLを設定するには更にconf.php内で$aclにユーザーを追加していく必要があるが、こちらで試したところ "admin" というユーザーには元々admin権限が与えられていたため、htpasswd を作成するだけで動作させることが出来た。

# htpasswd -c /var/lib/ganglia/htpasswd admin

この設定で、admin権限を持つユーザーだけがシステムに変更を行えるようになるはずである。

まとめ

リアルタイムグラフ系のツールではCacti(http://www.cacti.net/)も有名だが、こちらはWindows対応が難しいのと(wmiはLinuxからの取得が難しい、、)、取得量の追加が多少面倒(グラフを作るのは簡単なのだが、エージェント型では無いので取る量を増やすのが多少面倒 )な感じで、Ganglia3.2はかなり出来がよい印象を受ける。
あまり商用製品が多い分野では無いので、地味な感じだが w 障害切り分けの助けとなったり、長期的なシステムの変化を確認したりと、運用上非常に重要なツールなので、まだ類似のツールが導入されていない場合には、早めに導入計画を立てておくのがよさそうだ。。