この前つくった fluent-plugin-ganglia を gem にしてバージョン 0.0.1 をリリースした。
- rubygems.org - fluent-plugin-ganglia
- github - ziguzagu/fluent-plugin-ganglia
前回のエントリーで書いた時点では、gmond を multicast かつ upd_send_channel を bind_hostname = “yes” として動かしている場合に実はうまくいっていなかった。うごいた!とおもってあのエントリーをよろこびいさんで書いた時点では、1台のホストでしかどうささせていなくて、同じ metric group にはいる他のホストで動かし始めたら全然グラフでてこない、という始末…。
これは gmetric gem の Ganglia::GMetric#send が、
conn = UDPSocket.new
conn.connect(host, port)
conn.send gmetric[0], 0
conn.send gmetric[1], 0
conn.close
こうなってて bind してないからだったようで、Ganglia::GMetric#send は使わずにプラグイン内で、
conn = UDPSocket.new
conn.bind(HOSTADDR, 0) if @bind_hostname
conn.send gmetric[0], 0, @host, @port
conn.send gmetric[1], 0, @host, @port
conn.close
こんなような感じで IPSocket.getaddress(Socket.gethostname) でとってきた IP (HOSTADDR定数のところ) に bind して送るようにしたらうまく行った。まぁ、つまり bind_hostname = “yes” なんで bind しろよ、ということと思われる。gmetric コマンドを strace してみてても bind してたし(というか strace して差分みてて気づいた)。
この multicast + bind_hostname してる環境で metric 送りつけるには、こういう設定。
<match metrics>
type ganglia
host 239.2.11.71
port 8649
group metric_group
name_keys metrics.field1,metrics.field2
bind_hostname true
</match>
bind_hostname true
で bind してから送るようになる。multicast だけど bind_hostname してなければいらない。
というのを経ての 0.0.1 はコレの本番環境で絶賛稼働中。unicast での Ganglia はためしたことがないのだけどたぶんうごくとおもうので、もし試せる方おりましたらフィードバックいただけると幸い…。
ご利用ください。