Techめも

Techめも

主にオープンソースの技術系メモです。
備忘録としていろいろ綴っています。

文章力がなく、読みづらいかもしれません。。

Amebaでブログを始めよう!
fluentdでforwardすると、「detached forwarding server」が出力されて結構ハマったのでメモ。

先に環境を。
OS RedHatEnterpriseLinux 6.2 (ESX5.0上で動作)
ruby 1.9.3p194 (2012-04-20 revision 35410) [x86_64-linux] 
fluentd (0.10.19, 0.10.13)

送信元(fluent_send)からfowardでログ管理サーバー(fluent_recv)にsendmailのログを送りたくて、ざっくり以下を設定。(forward部分のみ抜粋)

送信側(fluent_send)

<source>
  正規表現等々
</source>
<match sendmail.*>
    type forward
    host fluent_recv
    port 24224
    buffer_type file
    buffer_path /var/log/fluent/myapp-forward
    retry_limit 50
    flush_interval 10s
  </store>
</match>


受信側(fluent_recv)

<source>

  type forward
  port 24224
  bind 0.0.0.0
</source>

<match sendmail.*>
  // マッチング処理

</match>

 「detached forwarding server」が出力されたので、twitterで嘆いてると、@kzk_moverさんにありがたい助言を頂いてhttp://d.hatena.ne.jp/oranie/20120323/1332498317あたりを参考にしながらUDPが怪しいんじゃないかってところまではわかった。
でも、一つの物理サーバー上で動いてるVM間での通信なので、VMのネットワークのみを使用してる。
もちろんFWはないし、iptablesもSE Linuxもオフってみる。

・・・が、うまくいかない。

実際にtcpdumpで見てみると、確かにudpの通信が来ていない。。
コマンド:tcpdump -X port 24224 -e -vv
※念のため-eを指定して、MACアドレスも確認する。(仮想NICのため)
だがしかし!
nmapしてみると、ちゃんとudpが通ってる。※
受信側のtcpdumpでパケットを確認。
コマンド:nmap -p 24224 -sU あて先IP

ってことは、rubyのudpが問題??ってことで、シンプルなudpテストコードを書いてみる。

Require “socket”
udp = UDPSocket.open()
sockaddr = Socket.pack_sockaddr_in(24227,”10.30.120.139”)
udp.send(“hello”, 0, sockaddr)
udp.close()

で、結果はNG。tcpdumpでは送信側のパケットは見えるけど、受信側には何も出てこない。
どうもrubyが怪しいってことはわかったけど、原因がわからない。

VMが怪しいのではと思い、送信元を物理マシンに変更すると、正常に送信された!
VM+rubyの組み合わせがNGってところまで絞れた。

ネットワークを一時的に無差別モードにしてみたけど、変わらない。
VMwareToolsのバージョンを上げたり、仮想HWのバージョンを上げても変化なし。
VMの切り分けで策が尽きたので、yum updateを走らせてみる。
そしてOSをrebootすると、rubyのテストコードが送信、受信側それぞれでパケットを確認できた!
ってことは、OS or ソフトレベルの問題っぽい。

アップデートされたソフトを"/var/log/yum.log"で確認して、怪しそうなのを絞り込む。
数が多かったけど、あやしそうなのは・・・カーネル。
VMのスナップショット機能を使って、update前に戻してから、カーネルのみアップデートしてOSをrebootしてテストコードを流すと、バッチリパケットを確認できた。

これをもとにググってみると、この情報を発見!
https://access.redhat.com/knowledge/ja/node/67823 

要するに、下記の環境だと小さいudpパケットをロスしちゃいますよーってことらしい。
今回たまたまこれに該当してた。
Environment
  • RHEL 6 update 2

  • kernel-2.6.32-220.el6.i686 / kernel-2.6.32-220.2.1.el6.x86_64 / kernel-2.6.32-220.el6.x86_64

  • vmxnet3 1.1.18.0-k

  • Vmware ESX Host

それにしても、fluentdをVM上のマシンで使うってのは結構ありそうな話やけど日本語の情報は全然なかった。
みんな人知れず解決しちゃってるのかなー。
普段使ってるPCのOSをWindows7 32bit からUbuntu11.10 32bit に入れ替えたので、設定の備忘録

[PC環境]
Lenovo X220
CPU Intel(R) Core(TM) i5-2520M CPU @ 2.50GHz
Memory 2GB

[インストール]
B5ノートのためDVDドライブがなく、UNetbootinを使ってUSBからUbuntuを導入しました。
使い方はtextdropのブログ参照
http://www.textdrop.net/soft/unetbootin-usb-instal/

USBからブートするために、BIOS設定を変更。
※Lenovoロゴ画面でF1押せばBIOS設定画面になります。
変更したら、USB差して再起動すればUbuntuのセットアップ画面になります。
インストール手順はこの辺見てください。
昔とは比べ物にならないぐらい楽になりましたねー。
20分ぐらいで導入完了しました!早い!!!

[デスクトップ環境]
Unityがアレなので、デスクトップ環境を軽くするためにlubuntu-desktop環境をインストールしました。
Ubuntuソフトウェアセンターで"lubuntu-desktop"で検索かけると自動的にダウンロードしてインストールが実行されます。
これで簡単にLXDE+Openboxな環境が出来上がっちゃいました。

[F5Networks SSL-VPN設定]
SSL-VPNで接続することがあるので、その設定。
firefoxでJavaアプレット動かすためにjreが必要なのでhttp://java.com/ja/download/から自己解凍ファイルをDL。
以下、こんな感じ。
chmod +x jre-6u31-linux-i586.bin
sudo jre-u31-linux-i586.bin
sudo mv jre1.6.0_31 /usr/lib/jvm/
cd /usr/lib/firefox/plugins/
ln -s /usr/lib/jvm/jre1.6.0_31/plugin/i386/ns7/libjavaplugin_oji.so

次に、SSL-VPNで接続してnp_F5_SSL_VPN.soとSSLVpn.tgzをDLする。
mv np_F5_SSL_VPN.so ~/.mozilla/plugins
tar zxvf SSLVpn.tgz
※/usr/local/lib/にF5Networksが作成されます。
これでfirefox再起動で無事接続できました!

外出先でプロジェクターにPCの画面映そうと思ったらうまく映らずorz
iPadにも資料置いてたから、そっち映して事なきを得たけど、
まだまだ設定することがたくさんありそうなので順次アップしたいと思います。
今日のところはここまで。
会社で使ってるPCがWindowsなのでローカルでさくっと検証したいと思って入れてみました。

せっかくなので、最近出たVer1.0.0を検証してみます!
※現在はVer1.0.1が最新です。
■前提条件cassandraはJavaで書かれているため、JDKが必要です。JDKの最新バージョンをインストールしておいて下さい。
DL先http://java.sun.com/javase/ja/6/download.html

■導入手順

http://cassandra.apache.org/download/からapache-cassandra-1.0.0-bin.tar.gzをダウンロードする。
適当な場所に解凍する
※今回は"c:\tools"

環境変数を以下の通り登録
CASSANDRA_HOME c:\tools\apache-cassandra-1.0.0
コマンドプロンプトを開き、cassandra.batを実行する。
※こいつは起動しっぱなしにしておく。

この辺を参考にしながらcassandra-cliを使ってみる。
http://www.ne.jp/asahi/hishidama/home/tech/apache/cassandra/cli.html
コマンドプロンプトを開き、cassandra-cli.batを実行する。

Cassandraに接続
connect localhost/9160;※デフォルトでTest Clusterというクラスターが存在している。
keyspaceの作成
create keyspace keyspace1;※キースペースはRDBMSでいうところのデータベースをあらわす。
keyspaceの使用
use keyspace;※キースペースを使用する時は明示的に指定する必要がある。この辺はMySQLとか、RDBMSやってれば雰囲気は一緒。
column familyの作成
create column family columnfamily1;
値の入力
set columnfamily1['1']['1'] = 'aaa';
※デフォルトではキーに数字しか使えないみたい
http://wiki.apache.org/cassandra/CassandraCli
textキーを使いたい場合はカラムファミリーをUTF8にしろと書いてある。
update column family User with key_validation_class=UTF8Type; 

あと、キーを作るときに以下の2つの方法で指定(どちらでもOK)
set User[utf8('jsmith')]['first'] = 'John';
assume User keys as utf8;
set User['jsmith']['first'] = 'John';

カラム名については事前に定義することでテキストを使用できた。
create column family User with
comparator = UTF8Type and
column_metadata =
[
{column_name: first, validation_class: UTF8Type},
{column_name: last, validation_class: UTF8Type},
{column_name: age, validation_class: UTF8Type, index_type: KEYS}
];
以上で一通りの操作は完了!
次回はCassandra-cliについてもう少し深く突っ込んでみます。