<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	>

<channel>
	<title>Carpe Diem</title>
	<atom:link href="http://www.sssg.org/blogs/naoya/feed" rel="self" type="application/rss+xml" />
	<link>http://www.sssg.org/blogs/naoya</link>
	<description>Who knows hacker is?</description>
	<lastBuildDate>Tue, 09 Mar 2010 08:53:12 +0000</lastBuildDate>
	<generator>http://wordpress.org/?v=2.9.2</generator>
	<language>ja</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
			<item>
		<title>rsyslog 4.6.1 stable</title>
		<link>http://www.sssg.org/blogs/naoya/archives/1734</link>
		<comments>http://www.sssg.org/blogs/naoya/archives/1734#comments</comments>
		<pubDate>Tue, 09 Mar 2010 08:42:10 +0000</pubDate>
		<dc:creator>naoya</dc:creator>
				<category><![CDATA[day]]></category>
		<category><![CDATA[rsyslog]]></category>

		<guid isPermaLink="false">http://www.sssg.org/blogs/naoya/?p=1734</guid>
		<description><![CDATA[rsyslog 4.6.1 stable がリリースされました。おもにバグフィックスリリースです。
rsyslog 4.6.1 の前のバージョンであるバージョン 4.5.6 では、僕がパッチを送ったデータを圧縮したときの [...]]]></description>
			<content:encoded><![CDATA[<p><a href="http://www.rsyslog.com/Article445.phtml">rsyslog 4.6.1 stable</a> がリリースされました。おもにバグフィックスリリースです。</p>
<p>rsyslog 4.6.1 の前のバージョンであるバージョン 4.5.6 では、僕がパッチを送ったデータを圧縮したときのメモリリークが修正されています。おそらく rsyslog を使っている人で圧縮を有効にしている人は少ないと思いますが、もし使っている人は激しくメモリリークするので、最新版の 4.6.1 にアップグレードしましょう。</p>
<blockquote><p>bugfix: memory leak when sending messages in zip-compressed format<br />
Thanks to <strong>Naoya Nakazawa</strong> for analyzing this issue and providing a patch.</p></blockquote>
<p>こんな感じで rsyslog の CHANGELOG に自分の名前が掲載されているなんて感無量です。</p>
<p>現在、rsyslog バージョン 4.4.2 を本番サーバで使っているのバージョンアップする予定です。</p>
<p>あと、rsyslog を使っていますが、たとえばかなりの容量の Apache のアクセスログを rsyslog へ送っているとき、まれに rsyslog が落ちてしまう問題が一回発生したのですが、再現していません。再現したら、解析して、またパッチを送ってみようと思います。</p>
<p>rsyslog は、現在でもかなり活発に開発が進められているので、今後も進化を続けると思います。</p>
<p># 今後は、rsyslog バージョン 5.x 系の開発に注力するようです。</p>
]]></content:encoded>
			<wfw:commentRss>http://www.sssg.org/blogs/naoya/archives/1734/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>MySQL の公式 RPM を使おう</title>
		<link>http://www.sssg.org/blogs/naoya/archives/1724</link>
		<comments>http://www.sssg.org/blogs/naoya/archives/1724#comments</comments>
		<pubDate>Thu, 04 Mar 2010 13:02:12 +0000</pubDate>
		<dc:creator>naoya</dc:creator>
				<category><![CDATA[day]]></category>
		<category><![CDATA[mysql rpm]]></category>

		<guid isPermaLink="false">http://www.sssg.org/blogs/naoya/?p=1724</guid>
		<description><![CDATA[今まで、前に紹介した方法で、自分で MySQL の RPM をビルドしていたのですが、次の点が不満でした。

コンパイルにかなりの時間がかかる
コンパイル後の、テストが必ず失敗する(SSL まわりのエラーなので、テストは [...]]]></description>
			<content:encoded><![CDATA[<p>今まで、<a href="http://www.sssg.org/blogs/naoya/archives/1331">前に紹介した方法</a>で、自分で MySQL の RPM をビルドしていたのですが、次の点が不満でした。</p>
<ul>
<li>コンパイルにかなりの時間がかかる</li>
<li>コンパイル後の、テストが必ず失敗する(SSL まわりのエラーなので、テストは必ずしないように変更していた)</li>
<li>なぜか、InnoDB plugin が無効になってしまって、InnoDB plugin を普通に試せない</li>
</ul>
<p>ということで、QA もちゃんとされている MySQL の公式 RPM に切替えてみることにしました。</p>
<p>まず、現在の MySQL 5.1 の最新バージョンは 5.1.44 です。MySQL の公式サイトでは RHEL5 用の x86_64 の RPM が用意されています。<br />
RHEL5 x86_64 用の RPM は、次のものをダウンロードすることができます。</p>
<ul>
<li>MySQL-client-community-5.1.44-1.rhel5.x86_64.rpm</li>
<li>MySQL-community-5.1.44-1.rhel5.src.rpm</li>
<li>MySQL-community-debuginfo-5.1.44-1.rhel5.x86_64.rpm</li>
<li>MySQL-devel-community-5.1.44-1.rhel5.x86_64.rpm</li>
<li>MySQL-embedded-community-5.1.44-1.rhel5.x86_64.rpm</li>
<li>MySQL-server-community-5.1.44-1.rhel5.x86_64.rpm</li>
<li>MySQL-shared-community-5.1.44-1.rhel5.x86_64.rpm</li>
<li>MySQL-shared-compat-5.1.44-1.rhel5.x86_64.rpm</li>
<li>MySQL-test-community-5.1.44-1.rhel5.x86_64.rpm</li>
</ul>
<p>次のそれぞれの RPM に、どんなものが含まれているか調査してみました。</p>
<blockquote><p>MySQL-client-community-5.1.44-1.rhel5.x86_64.rpm<br />
/usr/bin/mysql など、MySQL クライアントようのコマンドが含まれています。</p>
<p>MySQL-community-5.1.44-1.rhel5.src.rpm<br />
SRPM です。mysql-5.1.44.rhel5.spec と mysql-5.1.44.tar.gz が含まれています。</p>
<p>MySQL-community-debuginfo-5.1.44-1.rhel5.x86_64.rpm<br />
MySQL のデバッグシンボル情報です。</p>
<p>MySQL-devel-community-5.1.44-1.rhel5.x86_64.rpm<br />
mysql_config コマンドと MySQL のヘッダーファイルが含まれています。</p>
<p>MySQL-embedded-community-5.1.44-1.rhel5.x86_64.rpm<br />
MySQL の組み込む用途に使われる /usr/lib64/mysql/libmysqld.a が含まれています。</p>
<p>MySQL-server-community-5.1.44-1.rhel5.x86_64.rpm<br />
mysql の sysinit スクリプト、my.cnf 設定ファイルなど MySQL サーバに必要なプログラムが含まれています。</p>
<p>MySQL-shared-community-5.1.44-1.rhel5.x86_64.rpm<br />
/usr/lib64/libmysqlclient.so と libmysqlclient_r.so が含まれています。</p>
<p>MySQL-shared-compat-5.1.44-1.rhel5.x86_64.rpm<br />
MySQL-shared-community の複数のバージョンが含まれています。</p>
<p>MySQL-test-community-5.1.44-1.rhel5.x86_64.rpm<br />
mysql_client_test コマンドが含まれています。</p></blockquote>
<p>次に、CentOS で提供されているパッケージ名と MySQL 公式のパッケージ名の対応は、次のとおりになります。さらに詳しい RPM の説明は、<a href="http://dev.mysql.com/doc/refman/5.1/ja/linux-rpm.html">MySQL 公式サイト</a>を参照しましょう。</p>
<blockquote><p>mysql:               MySQL-client-community + MySQL-shared-community<br />
mysql-bench:   該当なし<br />
mysql-devel:    MySQL-devel-community<br />
mysql-server:  MySQL-server-community<br />
mysql-test:      MySQL-test-community</p></blockquote>
<p>MySQL 公式の RPM を使うには、既存の CentOS から提供されているパッケージを上書きするようなダミーパッケージを作成したほうが便利だろうと考えました。なぜなら、既存の MySQL 以外のパッケージで、mysql や mysql-devel のパッケージ依存関係が設定されているときにやっかいだからです。具体的には、<a href="http://www.kazu.tv/blog/archives/000770.html">このような現象</a>が想定されるからです。</p>
<p>一度ダミーパッケージを作って、公式の RPM もローカルの yum リポジトリに入れてインストールとすると、どうも不思議な感じになってしまいました。具体的には、mysql パッケージをインストールすると、なぜか MySQL-server-community パッケージがインストールされてしまいました。</p>
<p>公式の RPM をよく見てみると、なんと <strong>Provides</strong> が設定されているじゃありませんか!<br />
公式の RPM では、次のようにちゃんと Provides が設定されています。</p>
<blockquote><p>MySQL-client: mysql-client MySQL-client<br />
MySQL-server-community: msqlormysql mysql-server mysql MySQL MySQL-server<br />
MySQL-test-community: mysql-test MySQL-test<br />
MySQL-devel-community: mysql-devel MySQL-devel<br />
MySQL-shared-community: mysql-shared MySQL-shared<br />
MySQL-embedded-community:  mysql-embedded MySQL-embedded<br />
MySQL-test-community: mysql-test MySQL-test</p></blockquote>
<p>なので、mysql パッケージ名を指定すると MySQL-server-community パッケージがインストールされるんですね。。。ということで、小文字のパッケージ名でもちゃんとインストールできます。。。ダミーパッケージを作成したのが無駄になってしまいました、お恥ずかしい。。。</p>
<p>一点だけ注意点があって、mysql というパッケージ名は MySQL-server-community で Provides されているので、MySQL サーバが入ってしまうということです。もし、あるパッケージに mysql というパッケージの依存関係があると MySQL-server-community パッケージがインストールされてしまうので注意しましょう。</p>
<p>まとめると、ダミーパッケージは必要なく、MySQL の公式パッケージだけで、次のコマンドで MySQL の最新バージョンを手軽に使うことができます。</p>
<blockquote><p>$ sudo yum install mysql-client mysql-shared mysql-server</p></blockquote>
<p>上のコマンドで MySQL をインストールする場合、MySQL の公式 RPM の方がバージョンが新しいので必ず MySQL 5.1.44 がインストールされるはずです。</p>
<p>ですが、正しくバージョンを指定して、MySQL のバージョンをインストールした場合は、次のようにします。</p>
<blockquote><p>$ sudo yum install mysql-client-5.1.44 mysql-shared-5.1.44 mysql-server-5.1.44</p></blockquote>
<p>ただし、RPM に登録されるパッケージ名は、MySQL-*** となるので注意しましょう。mysql* という小文字のパッケージでは登録されていないので気をつけてください。</p>
<p>また、mysql の設定ファイル(/etc/my.cnf と /etc/mysqlmanager.passwd)は、インストールされていないので自分で設置しましょう。<br />
デフォルトの /etc/my.cnf は、<a href="http://gallery.menalto.com/node/62649">このあたりの情報</a>をもとにして設定を追加するといいと思います。</p>
<p>ちなみに MySQL の公式 RPM は、cobbler でローカルの yum リポジトリにミラーしていますが、こんな感じで設定してあります。</p>
<blockquote><p>$ sudo cobbler repo report &#8211;name=mysql-MySQL-5.1</p>
<p>repo: mysql-MySQL-5.1<br />
arch: x86_64<br />
breed: rsync<br />
comment:<br />
created: Tue Feb  9 22:34:22 2010<br />
createrepo_flags: -c cache -d<br />
environment: {}<br />
keep updated: True<br />
mirror: rsync://ftp.jaist.ac.jp/pub/mysql/Downloads/MySQL-5.1/<br />
mirror locally: True<br />
modified : Tue Feb  9 22:34:22 2010<br />
owners: ['admin']<br />
priority: 99<br />
rpm list:<br />
yum options: {}</p></blockquote>
<p>こうしておけば、MySQL 5.1 系の最新バージョンがでたとき、cobbler reposync すればすぐに最新版の RPM をローカルの yum リポジトリにミラーできるので、とても便利です。</p>
<p>さて、これで MySQL をメジャーアップグレードする準備が整いました。</p>
]]></content:encoded>
			<wfw:commentRss>http://www.sssg.org/blogs/naoya/archives/1724/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>OSC 2010 Tokyo/Spring に行ってきた</title>
		<link>http://www.sssg.org/blogs/naoya/archives/1722</link>
		<comments>http://www.sssg.org/blogs/naoya/archives/1722#comments</comments>
		<pubDate>Sat, 27 Feb 2010 14:23:56 +0000</pubDate>
		<dc:creator>naoya</dc:creator>
				<category><![CDATA[day]]></category>
		<category><![CDATA[oscon]]></category>

		<guid isPermaLink="false">http://www.sssg.org/blogs/naoya/?p=1722</guid>
		<description><![CDATA[OSC 2010 Tokyo/Spring に、次の講演だけを目当てに行ってきました。参加目的は、「そろそろインフラを BSD に切替えてもいいかもと考えていて、そのための情報収集のためと、そろそろ Linux に疲れて [...]]]></description>
			<content:encoded><![CDATA[<p><a href="http://www.ospn.jp/osc2010-spring/modules/eguide/event.php?eid=72">OSC 2010 Tokyo/Spring</a> に、次の講演だけを目当てに行ってきました。参加目的は、「そろそろインフラを BSD に切替えてもいいかもと考えていて、そのための情報収集のためと、そろそろ Linux に疲れてきたかもとふと思ってしまったからです」。</p>
<p><a href="http://www.ospn.jp/osc2010-spring/modules/eguide/event.php?eid=72">オープンソースカンファレンス2010 Tokyo/Spring &#8211; イベント案内 | 2010-02-27 (土): LinuxからBSDへ – reallyenglishのインフラとネットワーク</a></p>
<p>以下、講演内容のメモです。</p>
<ul>
<li><a href="http://www.reallyenglish.com/">reallyenglish</a> のサービス紹介、おもに BtoB 向けの英語学習サービスを提供</li>
<li>データセンターは、日本と香港に二つ借りている</li>
<li>サーバ台数 50 台、30 台の L2/L3 スイッチ、10 の IPsec-VPN くらいの規模、L2/L3 レベルですべて冗長化されている</li>
<li>OS は、ルータにはすべて OpenBSD、サーバには FreeBSD 7.x を使っている</li>
<li><a href="http://www.nagios.org/">nagios</a> の監視レベルで、100 個のホスト死活監視、400 のサービス監視</li>
<li>サーバは、PXE 経由でインストールしている、VLAN を設定してあって、管理コンソールは HP の iLO2 を使っている(つまり HP 製のサーバだということ)</li>
<li>香港のデータセンターは、有料で OS のセットアップまで行ってくれるが、自分たちでなるべくやっている</li>
<li><a href="http://oss.oetiker.ch/smokeping/">smokeping</a> を使って、ネットワークのレイテンシーをみている</li>
<li>ローカルネットワークにパッケージのビルドサーバ、パッケージリポジトリをもっていて、port ツリーを一部カスタマイズしたりしている</li>
<li>freebsd-update もローカルのサーバ経由で行っている</li>
<li><a href="http://tinderbox.marcuscom.com/">Marcuscom Tinderbox</a> を使って、パッケージのビルドなどを管理している(かなり便利とのこと)</li>
<li><a href="http://www.freebsd.org/doc/handbook/jails.html">Jail</a> を多用している、雑用系のサーバには 10 くらいの Jail が起動していた、他の仮想化技術と違って仮想化によるオーバーヘッドがほとんどないとのこと、Jail から ZFS も扱えるとのこと</li>
<li>Jail の設定はかなりめんどうだったが、<a href="http://erdgeist.org/arts/software/ezjail/">ezjail &#8211; Jail administration framework</a> というツールでかなり簡単に設定できるようになった</li>
<li>LDAP を使っている</li>
<li><a href="http://wiki.freebsd.org/ZFS">ZFS </a>を本番環境で使っている</li>
<blockquote>
<li>Version 13 が RELENG_8 に入っている</li>
<li>ほぼ本番環境でも使えるクオリティに仕上っている</li>
<li>ZFS の運用では、パーティションやスライスを切らないのが普通とのこと</li>
<li>ルートパーティションは、UFS2 にして USB メモリに入れてブートしている</li>
<li>ハードディスクは、すべて ZFS に割り当てている</li>
<li>SSD 上で <a href="http://blogs.sun.com/brendan/entry/test">ZFS L2ARC : Brendan Gregg</a> にある L2ARC(read), ZIL(write) という仕組みを使うと SSD をキャッシュとして使うことができる</li>
<li>Dedup という実装が進んでいる(詳細は調べてみたが分からず)</li>
</blockquote>
<li><a href="http://wiki.freebsd.org/HAST">HAST &#8211; FreeBSD Wiki</a> という Linux でいうところの DRBD のようなものが開発が進められている</li>
<li>HAST + ZFS + iSCSI という夢の組合せができるかもしれないとのこと</li>
<li>nagios version 3.0.6 を使って監視しているが、Template Engine を使ってテンプレートで生成している(mixi と同じ方式だと理解しました)</li>
<li>reallyenglish では、現在開発エンジニアとインフラエンジニアを<a href="http://www.reallyenglish.com/company/recruiting/index.html">絶賛募集中</a>とのこと</li>
</ul>
<p>その他、貴重な本番の nagios の監視画面や smokeping の画面やネットワーク構成図も見ることができました。</p>
<p>BSD 系のインフラの話は、あまり話を聞く機会がなかったのでかなり参考になりました。</p>
<p>まずは、自分個人の FreeBSD サーバで ZFS や Jail を使ってみたいと思います。</p>
]]></content:encoded>
			<wfw:commentRss>http://www.sssg.org/blogs/naoya/archives/1722/feed</wfw:commentRss>
		<slash:comments>5</slash:comments>
		</item>
		<item>
		<title>hbstudy #8 に行ってきた</title>
		<link>http://www.sssg.org/blogs/naoya/archives/1717</link>
		<comments>http://www.sssg.org/blogs/naoya/archives/1717#comments</comments>
		<pubDate>Tue, 23 Feb 2010 14:12:20 +0000</pubDate>
		<dc:creator>naoya</dc:creator>
				<category><![CDATA[day]]></category>
		<category><![CDATA[engineer]]></category>
		<category><![CDATA[hbstudy]]></category>

		<guid isPermaLink="false">http://www.sssg.org/blogs/naoya/?p=1717</guid>
		<description><![CDATA[会社のインフラをおもに担当している同僚を誘って、hbstudy #8 http://atnd.org/events/3092 に行ってきました。今回は、kazuho さん、mizzy さん、という豪華な講演だったので参加 [...]]]></description>
			<content:encoded><![CDATA[<p>会社のインフラをおもに担当している同僚を誘って、hbstudy #8 <a href="http://atnd.org/events/3092">http://atnd.org/events/3092</a> に行ってきました。今回は、<a href="http://developer.cybozu.co.jp/kazuho/">kazuho</a> さん、<a href="http://trac.mizzy.org/public/blog">mizzy</a> さん、という豪華な講演だったので参加人数も 120 名くらいと、とても大人数で驚きました。</p>
<p>今回の講演のスライドは、おそらく公開されるのではないかと思いますが、今回の hbstudy #8 ではツール以前にインフラエンジニアとしてどんなところを目指すか、どのような姿勢でインフラを管理するかといった精神論的な考えというか思想が、とても勉強になりました。</p>
<p>まず、インフラにかかわらず、何言にも共通する思想は、</p>
<blockquote><p><strong>楽をすること</strong></p></blockquote>
<p>につきると思います。楽をするための苦労は惜しまずに、楽をするためのツールを自作したり、オープンソースのツールを使ったり、楽をするにはいろいろな方法があります。まず考えることは、楽をするために何をすることなのかなぁと思います。楽をするというと、なんだか怠け者のような印象をもたれることもあると思いますが、楽をするために新しい手法を取り入れていることは大事だと思います。</p>
<p>その次は、インフラエンジニアとしての大切だったと思った思想は、次のとおりです。</p>
<ul>
<li>インフラに導入するツールは、なるべくシンプルなものにする</li>
<li>自作ツールの場合、なるべく同じ技術を使ったツールで統一する</li>
<li>ある程度、基本知識がある人なら、自分が管理しているインフラを管理することができるようにする</li>
</ul>
<p>まず、前提となる知識を習得するのが困難だったり、使い方は複雑なツールは使わないということです。やはり、とても便利なツールでも複雑なツールを導入してしまうと、自分はいいのですが他の人に引き継ぐことになったときなどに説明する手間がかなりかかると思います。また、決してオープンソースのツールだけに選択肢をおかずに機会損失や管理コストなどを総合的に比較して商用ツールも検討するといったこともあるかと必要な場面があると思います。</p>
<p>その次ですが、kazuho さんが基本的にとてもシンプルな自作ツールでインフラを管理しているという話の中で登場してきたツールはほとんど perl で書かれていました。自作ツールでも、シェルスクリプトだったり、C++ だったり、ruby だったり、と実装している技術はバラバラだと、すべての知識が必要になってきます。こうした自作ツールは、perl など１つの実装にまとめることで perl さえ分かれば自作ツールのメンテナンスや改良もできます。最近の Linux の場合、<a href="http://www.linuxfoundation.org/collaborate/workgroups/lsb">Linux Standard Base (LSB) | The Linux Foundation</a> という規格があるこの規格によると perl や python は最初からインストールされています。残念ながら、<a href="http://refspecs.linux-foundation.org/LSB_4.0.0/LSB-Languages/LSB-Languages/book1.html">ruby や PHP は入っていない</a>ので、ruby や PHP で作るときにはパッケージのインストールが必要になります。最近のサーバは、とても早いのでわざわざ C++ などで作成するよりも LL で十分なことも多くなってきていると思います。個人的には、ruby を愛用していますが、python にしたほうが標準インストールされているという観点でみるとありかなと思っています。</p>
<p>最後に、自作ツールでもあまりオレオレ仕様的なツールは作らずに、他のツールの思想や考えたにのとった自作ツール、定番といえるオープンソース、だけをできるだけ組み合わせて、かつシンプルに形でインフラを管理しておくということです。シンプルにしておけば、日常業務の中でも毎日やることが単純になったり、業務レベルで他の担当者と共有することも比較的容易なのでないかと思います。</p>
<p>今回の hbstudy では、このような考え方というか思想が大事なのではないかと感じました。僕が管理しているインフラも、この思想に基づいていけるように日々改善を重ねいたいと思いました。</p>
]]></content:encoded>
			<wfw:commentRss>http://www.sssg.org/blogs/naoya/archives/1717/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>monit 5.1</title>
		<link>http://www.sssg.org/blogs/naoya/archives/1712</link>
		<comments>http://www.sssg.org/blogs/naoya/archives/1712#comments</comments>
		<pubDate>Tue, 23 Feb 2010 01:11:58 +0000</pubDate>
		<dc:creator>naoya</dc:creator>
				<category><![CDATA[day]]></category>
		<category><![CDATA[monit]]></category>

		<guid isPermaLink="false">http://www.sssg.org/blogs/naoya/?p=1712</guid>
		<description><![CDATA[愛用している monit の最新版バージョン 5.1 がリリースされました。
このバージョンでは、CHANGELOG をみて分かるようにバグフィックスの他にいくか機能拡張がされています。
その中で、個人的に大きいのは h [...]]]></description>
			<content:encoded><![CDATA[<p>愛用している <a href="http://mmonit.com/monit/">monit</a> の最新版バージョン 5.1 がリリースされました。</p>
<p>このバージョンでは、CHANGELOG をみて分かるようにバグフィックスの他にいくか機能拡張がされています。</p>
<p>その中で、個人的に大きいのは httpd のサービスチェックのときに HOST ヘッダーを指定できるようになったことです。例えば、次のようなに HOST ヘッダーを指定して httpd サービスの監視をすることができます。</p>
<blockquote><p>if failed host localhost port 80 protocol http and request &#8216;/ testing&#8217; hostheader &#8216;example.com&#8217; with timeout 20 seconds for 2 cycles then restart</p></blockquote>
<p>hostheader という識別子で手軽に指定することができます。</p>
<p>さっそく試そうと RPM を作ってみることにしました。monit には、RPM を作成するための SPEC ファイルが同梱されているので、次のコマンドでさくっと RPM を作成することができます。</p>
<blockquote><p>$ rpmbuild -ta monit-5.1.tar.gz</p></blockquote>
<p>しかし、いくつか不用なファイルの設定が原因で RPM をビルドできないので SPEC ファイルを、次のように修正しました。この修正は、本家に連絡してすでにコミットしてもらってあります。</p>
<blockquote><p>&#8212; monit.spec-org      2010-02-18 10:48:56.000000000 +0900<br />
+++ monit.spec  2010-02-18 10:49:09.000000000 +0900<br />
@@ -51,7 +51,7 @@</p>
<p>%files<br />
%defattr(-,root,root)<br />
-%doc CHANGES.txt CONTRIBUTORS COPYING FAQ.txt LICENSE README README.SSL<br />
+%doc CHANGES.txt COPYING LICENSE README README.SSL<br />
%config /etc/monitrc<br />
%config /etc/init.d/%{name}<br />
%{_bindir}/%{name}</p></blockquote>
<p>RPM を作成して、さっそく monit をアップグレードして、次のような設定で試してみます。</p>
<blockquote><p>check process httpd with pidfile /var/run/httpd/httpd.pid<br />
start program = &#8220;/etc/init.d/httpd start&#8221;<br />
stop program = &#8220;/etc/init.d/httpd stop&#8221;<br />
if failed port 80 protocol http<br />
and request &#8220;/&#8221; hostheader &#8220;example.com&#8221;<br />
with timeout 2 seconds for 2 cycles<br />
then restart</p></blockquote>
<p>動作確認するために、sudo monit -Iv してみると、hostheader の syntax エラーになります。ソースコードをみてみると、不具合っぽいのでさっそく連絡してみると、作者の Martin さんから、次のようなパッチが送られてきました。</p>
<blockquote><p>Index: p.y<br />
===================================================================<br />
&#8212; p.y (revision 128)<br />
+++ p.y (working copy)<br />
@@ -1077,7 +1077,7 @@<br />
;</p>
<p>hostheader      : /* EMPTY */<br />
-                | hostheader STRING {<br />
+                | HOSTHEADER STRING {<br />
portset.request_hostheader = $2;<br />
}<br />
;</p></blockquote>
<p>monit バージョン 5.1 の不具合のようです。さっそく、上のパッチとあわせて本家に掲載されている FTP のパッチをあわせて RPM を作成しました。パッチをあてて作成した RPM は、<a href="http://github.com/downloads/n0ts/rpm/monit-5.1-2.x86_64.rpm">ここ</a>に置いておきます。</p>
<p>パッチをあてた monit でさっそく動作確認してみると、hostheader 識別子をちゃんと認識して問題なく動作しました。</p>
<p>これからの修正は、<a href="http://code.google.com/p/monit/source/browse/trunk/CHANGES.txt">CHANGELOG</a> をみてみると、おそらく近いうちに monit バージョン 5.1.1 でリリースされるのでないかと思います。hostheader のバグレポートを報告したので、CHANGELOG になんと僕の名前が掲載されています。こんな小さな報告でも CHANGELOG に追加されるんですね。</p>
<blockquote><p>﻿﻿﻿﻿﻿﻿﻿﻿Fix the HTTP protocol test&#8217;s hostheader option which was added in 5.1.<br />
Thanks to Naoya Nakazawa for report.</p></blockquote>
<p>httpd のサービスチェックで HOST ヘッダーを指定できると、かなり便利になるので、monit を愛用している人はバージョン 5.1.1 を待つか、パッチをあてたバージョンにアップグレードするといいと思います。</p>
<p>monit は、なんといっても設定ファイルが書きやすい、メーリングリストで質問やバグレポートをすると翌日にはすぐに返信があるのでかなり活発なプロジェクトなので、使っていない人はぜひ使ってみるといいと思います。</p>
<p># 2010.02.25: 追記</p>
<p><a href="http://mmonit.com/monit/download/">monit</a> バージョン 5.1.1 がリリースされました。バグフィックスのみのリリースです。</p>
<blockquote><p>Release checksums<br />
=================<br />
md5:    4bbd3845ae1cbab13ec211824e0486dc<br />
sha256: bf789e0660410e8c63f4b3dc2eeab9889347e6494a6dc1c0e764343cae0dc1ba</p>
<p>Release information:<br />
====================<br />
Bug fixes<br />
* Fixed FTP protocol test. Thanks to Axel Reinhold for report.<br />
* Fixed the hostheader option in the HTTP protocol test, which was<br />
added in Monit 5.1. Thanks to Naoya Nakazawa for report.<br />
* Removed an erroneous warning message about missing system service check.<br />
* Improved manual page formatting. Thanks to Stefan Alfredsson for report.</p></blockquote>
<p>僕の名前があって、ちょっとうれしいです(笑)。</p>
]]></content:encoded>
			<wfw:commentRss>http://www.sssg.org/blogs/naoya/archives/1712/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>iptstate</title>
		<link>http://www.sssg.org/blogs/naoya/archives/1709</link>
		<comments>http://www.sssg.org/blogs/naoya/archives/1709#comments</comments>
		<pubDate>Mon, 15 Feb 2010 12:11:03 +0000</pubDate>
		<dc:creator>naoya</dc:creator>
				<category><![CDATA[day]]></category>
		<category><![CDATA[linux]]></category>

		<guid isPermaLink="false">http://www.sssg.org/blogs/naoya/?p=1709</guid>
		<description><![CDATA[iptstate というコマンドがあることを始めて知りました。
iptstate は、netfilter の接続をトラックキングしているテーブルの情報を top のように表示してくれるコマンドです。
CentOS の場合 [...]]]></description>
			<content:encoded><![CDATA[<p><a href="http://www.phildev.net/iptstate/">iptstate</a> というコマンドがあることを始めて知りました。</p>
<p>iptstate は、netfilter の接続をトラックキングしているテーブルの情報を top のように表示してくれるコマンドです。</p>
<p>CentOS の場合は、すでに iptstate バージョン 1.4.1 が提供されていて、普通にインストールすると iptstate パッケージがインストールされています。</p>
<p>さっそく、試してみます。iptstate は、netfilter つまり iptables の接続トラックキングテーブルの情報を表示してくれるので、iptables が動作している必要があります。</p>
<blockquote><p>$ sudo /usr/sbin/iptstate</p></blockquote>
<blockquote><p>IPTables &#8211; State Top<br />
Version: 1.4          Sort: SrcIP           s to change sorting<br />
Source                  Destination             Proto   State        TTL<br />
127.0.0.1:33005         127.0.0.1:8020          tcp     ESTABLISHED  119:59:58<br />
127.0.0.1:52326         127.0.0.1:8021          tcp     ESTABLISHED  119:59:56<br />
192.168.161.1:60730     192.168.161.125:22      tcp     ESTABLISHED  119:59:12<br />
192.168.161.1:54619     192.168.161.125:22      tcp     ESTABLISHED  119:59:55<br />
192.168.161.1:17500     192.168.161.255:17500   udp                    0:00:09</p></blockquote>
<p>な感じで、接続元の IP アドレス、経路情報、プロトコル、状態、TTL、を表示してくれます。</p>
<p>もちろん、top のように並び替えもできます。iptstate では、次の並び替えのキーが定義されています。</p>
<blockquote><p>d   カラムのサイズを動的に変更して、古いデフォルトのサイズを使用する</p>
<p>f   loopback でフィルタリングする</p>
<p>l   IPアドレスの中で DNS を探している順にする</p>
<p>m   ホスト名を切り取った形でフィルタリングする</p>
<p>n   DNS に関連した表示にする</p>
<p>q   終了する</p>
<p>r   逆順に並び替える</p>
<p>space   表示をすぐに更新する</p></blockquote>
<p>昔から存在するコマンドですが、どこから接続があるので、どのポートに接続しているのか、などがすぐに分かるので、とても便利なコマンドです。</p>
]]></content:encoded>
			<wfw:commentRss>http://www.sssg.org/blogs/naoya/archives/1709/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Puppet Dashboard を試してみた</title>
		<link>http://www.sssg.org/blogs/naoya/archives/1700</link>
		<comments>http://www.sssg.org/blogs/naoya/archives/1700#comments</comments>
		<pubDate>Sun, 14 Feb 2010 15:34:03 +0000</pubDate>
		<dc:creator>naoya</dc:creator>
				<category><![CDATA[day]]></category>
		<category><![CDATA[puppet]]></category>

		<guid isPermaLink="false">http://www.sssg.org/blogs/naoya/?p=1700</guid>
		<description><![CDATA[Puppet Dashboard  がリリースされたので、さっそく試してみました。
Puppet Dashboard とは、ノード管理とレポートツールを提供してくれる Puppet のウェブアプリケーションです。ノード情 [...]]]></description>
			<content:encoded><![CDATA[<p><a href="http://reductivelabs.com/2009/12/14/a-tour-of-puppet-dashboard-0-1-0/">Puppet Dashboard  がリリースされた</a>ので、さっそく試してみました。</p>
<p>Puppet Dashboard とは、ノード管理とレポートツールを提供してくれる Puppet のウェブアプリケーションです。ノード情報はYAML 形式でエクスポートすることができて、ダッシュボードから外部ノードツールとして使うこともできるようです。</p>
<p>まず、最初にPuppet Dashboard を動作させるために、次のものが必要です。</p>
<ul>
<li>ruby &gt;= 1.8.1</li>
<li>rake &gt;= 0.8.4</li>
<li>mysql</li>
<li>puppet</li>
<li>rubygems &gt;= 1.3.2</li>
<li>rails &gt;= 2.3.4</li>
</ul>
<p>さっそくインストールしてみましょう。</p>
<blockquote><p>$ git clone git://github.com/reductivelabs/puppet-dashboard.git</p>
<p>$ cd puppet-dashboard</p>
<p>$ rake install</p></blockquote>
<p>rake install すると、dashboard_development というデータベースが作成されてテーブルがいくつか作成されるので、localhost に mysql が起動している必要があります。</p>
<p>Rails アプリケーションなので、さっそく起動します。</p>
<blockquote><p>$ ./script/server</p></blockquote>
<p>http://localhost:3000 にアクセスすると、次のような Puppet Dashboard トップ画面が表示されます。</p>
<p><a href="http://www.sssg.org/blogs/naoya/wp-content/uploads/2010/02/pd1.jpg" rel="lightbox"><img class="aligncenter size-medium wp-image-1701" title="Puppet Dashboard 1" src="http://www.sssg.org/blogs/naoya/wp-content/uploads/2010/02/pd1-300x180.jpg" alt="" width="300" height="180" /></a>ノードの例として、「sample node」が定義されています。さっそく、ユーザ登録してみます。ユーザ登録は、ユーザ名とパスワードを入力するだけのシンプルな形です。</p>
<p><a href="http://www.sssg.org/blogs/naoya/wp-content/uploads/2010/02/pd2.jpg" rel="lightbox"><img class="aligncenter size-medium wp-image-1702" title="Puppet Dashbaord Register" src="http://www.sssg.org/blogs/naoya/wp-content/uploads/2010/02/pd2-300x180.jpg" alt="" width="300" height="180" /></a>ユーザ登録できたところで、実際のノードを追加してみます。Nodes タブをクリックして、ノードを追加します。</p>
<p><a href="http://www.sssg.org/blogs/naoya/wp-content/uploads/2010/02/pd3.jpg" rel="lightbox"><img class="aligncenter size-medium wp-image-1703" title="Puppet Dashboard Nodes" src="http://www.sssg.org/blogs/naoya/wp-content/uploads/2010/02/pd3-300x222.jpg" alt="" width="300" height="222" /></a>この他にも、ノードクラス、ノードグループ、レポート、の機能があります。</p>
<p>まず、レポートの機能は、現在の puppet レポートの実行結果が /var/puppet/lib/reports にある場合は、次のコマンドで Puppet Dashbaord へインポートできます。</p>
<blockquote><p>$ rake reports:import</p></blockquote>
<p>また、puppet レポートの実行結果が、他の場所にある場合は、次のコマンドで Puppet Dashboard へインポートすることができます。REPORT_DIR という環境変数に Puppet レポートの実行結果を格納してあるディレクトリを指定するだけです。</p>
<blockquote><p>$ rake reports:import REPORT_DIR /path/to/your/reports</p>
<p>Importing 1 report from /path/to/your/reports<br />
Importing:     100% |##########################################| Time: 00:00:00<br />
1 of 1 report imported</p></blockquote>
<p>試しに1件レポートデータをインポートした画面は、次のようになっています。</p>
<p><a href="http://www.sssg.org/blogs/naoya/wp-content/uploads/2010/02/pd4.jpg" rel="lightbox"><img class="aligncenter size-medium wp-image-1704" title="Puppet Dashboard Report" src="http://www.sssg.org/blogs/naoya/wp-content/uploads/2010/02/pd4-300x284.jpg" alt="" width="300" height="284" /></a></p>
<p>毎回、レポートをインポートするのが面倒なので、Puppet サーバと連携する方法も用意されています。Puppet サーバと連携するには、puppetmasterd に、次のように &#8211;reports オプションを指定するだけです。</p>
<blockquote><p>&#8211;reports &lt;puppet_bashboardのサーバ名&gt;</p></blockquote>
<p>ただし、Puppet Dashboard は、localhost:3000 で動作するようにハードコーディングされています。これを変更するには、lib/puppet/puppet_dashboard.rb を変更する必要があります。</p>
<p>次に Puppet Dashboard には、Puppet 互換の外部ノード情報と連携することができます。Puppet 互換の外部ノード情報は、YAML 形式で出力しますが、Puppet Dashboard に付属している bin/external_node プログラムを使います。このプログラムも、localhost:3000 でハードコーディングされているので、環境に応じて変更するとよいでしょう。</p>
<p>今のところ、僕が Puppet を投入している本番環境ではレポート機能をオフにして、エラーログのみチェックしていますが、比較的少ない台数で運用している場合は、Puppet Dashboard 管理画面からレポートの実行結果をチェックすることができるので、便利なツールと言えそうです。</p>
<p>将来的には、次の機能が実装予定とのことです。</p>
<ul>
<li>LDAP と ActiveDirectory 認証</li>
<li>管理者の権限によるアクセス制御</li>
<li>データをよりよく可視化して、情報にアクセスしやすくする</li>
<li>さらに多くのノード状態情報(オフライン状態、通信エラー、など)</li>
<li>リソースの変更を報告して、トラックキングする</li>
<li>Puppet の実行スケジューリング</li>
<li>その他のコミュニティからのリクエスト機能</li>
</ul>
<p>まだ、Puppet Dashboard は登場したばかりなので、これから期待できるツールにもなりますね。</p>
]]></content:encoded>
			<wfw:commentRss>http://www.sssg.org/blogs/naoya/archives/1700/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>接続元の IP アドレスをラウンドロビン的に変更する方法</title>
		<link>http://www.sssg.org/blogs/naoya/archives/1695</link>
		<comments>http://www.sssg.org/blogs/naoya/archives/1695#comments</comments>
		<pubDate>Thu, 11 Feb 2010 14:31:05 +0000</pubDate>
		<dc:creator>naoya</dc:creator>
				<category><![CDATA[day]]></category>
		<category><![CDATA[linux iptables]]></category>

		<guid isPermaLink="false">http://www.sssg.org/blogs/naoya/?p=1695</guid>
		<description><![CDATA[とあるサーバから、あるサーバに接続したとき、あるサーバに残るアクセスログの接続元 IP アドレスをラウンドロビン的に変更することが必要になったので調査してみた。そうすると、iptables を使うとできるというまさにぴっ [...]]]></description>
			<content:encoded><![CDATA[<p>とあるサーバから、あるサーバに接続したとき、あるサーバに残るアクセスログの接続元 IP アドレスをラウンドロビン的に変更することが必要になったので調査してみた。そうすると、<a href="http://hanzubon.jp/node/247">iptables を使うとできる</a>というまさにぴったりの記事を発見した。</p>
<p>さっそく、CentOS で試してみると、iptables の libipt_statistic モジュールがないというエラーになってしまった。次に RedHat のページを調べていると、<a href="https://bugzilla.redhat.com/show_bug.cgi?id=215361">Bug 215361 – iptables is missing /lib/iptables/libipt_statistic.so</a> というまさにぴったりな情報が見つかった。その情報では、iptables バージョン 1.3.6 から追加されたとあったので、さっそく netfilter iptables バージョン 1.3.6 のページの<a href="http://www.netfilter.org/projects/iptables/files/changes-iptables-1.3.6.txt">変更点</a>を調べてみると、たしかに次のような記載があった。</p>
<blockquote>
<pre>- Add support for statistic match (needs kernel &gt;= 2.6.18)
  [ Patrick McHardy ]</pre>
</blockquote>
<p>CentOS 5.3 x86_64 の iptables のバージョンは、iptables-1.3.5-4.el5 なので一つバージョンが古いのが原因のようだ。Linux カーネル 2.6.18 が必須とのことなので、CentOS でもおそらく使えるそうだ。</p>
<p>さっそく、iptables バージョン 1.3.6 を導入するために、RPM を作成にとりかかった。</p>
<p>まず、iptables-1.3.5-4.el5 の SRPM をダウンロードして、このバージョンの iptables.spec ファイルをパッチなどはすべて正しくあてるように、かつ libipt_statistic をビルドして組み込むように RPM を作成した。</p>
<p>libipt_statistic は、iptables バージョン 1.4.0 以降から標準で組み込まれるようになっているが、バージョン 1.3.6 では標準では組み込まれない。ちょうど、<a href="http://lists.netfilter.org/pipermail/netfilter-cvslog/2007-September/005498.html">該当のコミットログ</a>があったので、コミットログを参照しながら RPM を作成した。</p>
<p>作成した RPM は、<a href="http://cloud.github.com/downloads/n0ts/rpm/iptables-1.3.6-1.x86_64.rpm">ここ</a>にアップロードしてある。あわせて、<a href="http://cloud.github.com/downloads/n0ts/rpm/iptables-1.3.6-1.src.rpm">SRPM</a> もアップロードした。他に作った人がいないかも調べてみたが、見つからなかった。</p>
<p>iptables を現時点での最新版であるバージョン 1.4.6 ではなく、バージョン 1.3.6 にしようとした理由は RPM のおそらくメジャーアップグレードになるので RPM の作成が大変であること、安定性の面で経験がまったくないのでなるべる標準にインストールされるバージョンに近いものにしたいと思ったからだ。</p>
<p>作成した RPM で、CentOS にインストールされている既存の iptables をバージョンアップして、さっそく試してみた。</p>
<p>まず、外側のネットワークのデバイスに IP エイリアスを設定する。次の例は、ifconfig eth0 の出力結果だが、不要な情報は省いてある。</p>
<blockquote><p>eth0      Link encap:Ethernet  HWaddr xx:xx:xx:xx:xx:xx<br />
inet addr:192.168.161.125  Bcast:192.168.161.255  Mask:255.255.255.0</p>
<p>eth0:0    Link encap:Ethernet  HWaddr xx:xx:xx:xx:xx:xx<br />
inet addr:192.168.161.124  Bcast:192.168.161.255  Mask:255.255.255.0</p>
<p>eth0:1    Link encap:Ethernet  HWaddr xx:xx:xx:xx:xx:xx<br />
inet addr:192.168.161.123  Bcast:192.168.161.255  Mask:255.255.255.0</p>
<p>eth0:2    Link encap:Ethernet  HWaddr xx:xx:xx:xx:xx:xx<br />
inet addr:192.168.161.122  Bcast:192.168.161.255  Mask:255.255.255.0</p></blockquote>
<p>次の iptables の設定で NAT チェインを、次のように設定する。(スマイルアイコン対策のため、PREGROUTING と POSTROUTING の前のセミコロンは省いてある)</p>
<blockquote><p>*nat<br />
PREROUTING ACCEPT [0:0]<br />
:OUTPUT ACCEPT [0:0]<br />
POSTROUTING ACCEPT [0:0]<br />
-A POSTROUTING -o eth0 -p tcp &#8211;dport 80 -m statistic &#8211;mode nth &#8211;every 4 -j SNAT &#8211;to-source 192.168.161.125<br />
-A POSTROUTING -o eth0 -p tcp &#8211;dport 80 -m statistic &#8211;mode nth &#8211;every 4 -j SNAT &#8211;to-source 192.168.161.124<br />
-A POSTROUTING -o eth0 -p tcp &#8211;dport 80 -m statistic &#8211;mode nth &#8211;every 4 -j SNAT &#8211;to-source 192.168.161.123<br />
-A POSTROUTING -o eth0 -p tcp &#8211;dport 80 -m statistic &#8211;mode nth &#8211;every 4 -j SNAT &#8211;to-source 192.168.161.122<br />
COMMIT</p></blockquote>
<p>iptables を再起動して、さっそく接続先のサーバに Apache HTTPD を起動して、アクセスログを確認してみると、次のような結果になった。</p>
<blockquote><p>192.168.161.125 &#8211; - [11/Feb/2010:23:17:07 +0900] &#8220;GET / HTTP/1.1&#8243; 200 44<br />
192.168.161.124 &#8211; - [11/Feb/2010:23:17:08 +0900] &#8220;GET / HTTP/1.1&#8243; 200 44<br />
192.168.161.123 &#8211; - [11/Feb/2010:23:17:09 +0900] &#8220;GET / HTTP/1.1&#8243; 200 44<br />
192.168.161.122 &#8211; - [11/Feb/2010:23:17:09 +0900] &#8220;GET / HTTP/1.1&#8243; 200 44<br />
192.168.161.125 &#8211; - [11/Feb/2010:23:17:10 +0900] &#8220;GET / HTTP/1.1&#8243; 200 44<br />
192.168.161.125 &#8211; - [11/Feb/2010:23:17:11 +0900] &#8220;GET / HTTP/1.1&#8243; 200 44<br />
192.168.161.124 &#8211; - [11/Feb/2010:23:17:12 +0900] &#8220;GET / HTTP/1.1&#8243; 200 44<br />
192.168.161.125 &#8211; - [11/Feb/2010:23:17:13 +0900] &#8220;GET / HTTP/1.1&#8243; 200 44<br />
192.168.161.125 &#8211; - [11/Feb/2010:23:17:14 +0900] &#8220;GET / HTTP/1.1&#8243; 200 44<br />
192.168.161.123 &#8211; - [11/Feb/2010:23:17:14 +0900] &#8220;GET / HTTP/1.1&#8243; 200 44</p></blockquote>
<p>完全にはラウンドロビンにはなっていないが、リクエストごとにアクセス元の IP アドレスが毎回変更されている。</p>
<p>最後に libipt_statistic のモジュールとはどんなモジュールかソースコードを読んでみた。libipt_statistic モジュールとは、ある状態になっているかを調べることができるモジュールのようである。</p>
<p>設定内容は、次のような設定が可能。</p>
<blockquote><p>&#8211;mode mode: マッチモード (random あるいは nth)</p>
<p>&#8211;probability p: 確立</p>
<p>&#8211;everyn: n 番目のパケットに毎回マッチする</p>
<p>&#8211;packet p: 初期値のカウント値(p は、0 以上 p &#8211; 1 以下)、デフォルトは 0</p></blockquote>
<p>どうやらこのモジュールは、ある状態ごとに iptables の設定を変更できるモジュールのようだ。</p>
<p>いろいろと試した結果、完全なラウンドロビンにするには、次のような設定でいけるようだ。(スマイルアイコン対策のため、PREGROUTING と POSTROUTING の前のセミコロンは省いてある)</p>
<blockquote><p>*nat<br />
PREROUTING ACCEPT [0:0]<br />
:OUTPUT ACCEPT [0:0]<br />
POSTROUTING ACCEPT [0:0]<br />
-A POSTROUTING -o eth0 -p tcp &#8211;dport 80 -m statistic &#8211;mode nth &#8211;every 4 -j SNAT &#8211;to-source 192.168.161.125<br />
-A POSTROUTING -o eth0 -p tcp &#8211;dport 80 -m statistic &#8211;mode nth &#8211;every 3 -j SNAT &#8211;to-source 192.168.161.124<br />
-A POSTROUTING -o eth0 -p tcp &#8211;dport 80 -m statistic &#8211;mode nth &#8211;every 2 -j SNAT &#8211;to-source 192.168.161.123<br />
-A POSTROUTING -o eth0 -p tcp &#8211;dport 80 -m statistic &#8211;mode nth &#8211;every 1 -j SNAT &#8211;to-source 192.168.161.122<br />
COMMIT</p></blockquote>
<p>上の設定のときの Apache アクセスログは、次のようになった。</p>
<blockquote><p>192.168.161.122 &#8211; - [11/Feb/2010:23:27:29 +0900] &#8220;GET / HTTP/1.1&#8243; 200 44<br />
192.168.161.125 &#8211; - [11/Feb/2010:23:27:30 +0900] &#8220;GET / HTTP/1.1&#8243; 200 44<br />
192.168.161.124 &#8211; - [11/Feb/2010:23:27:31 +0900] &#8220;GET / HTTP/1.1&#8243; 200 44<br />
192.168.161.123 &#8211; - [11/Feb/2010:23:27:32 +0900] &#8220;GET / HTTP/1.1&#8243; 200 44<br />
192.168.161.122 &#8211; - [11/Feb/2010:23:27:32 +0900] &#8220;GET / HTTP/1.1&#8243; 200 44<br />
192.168.161.125 &#8211; - [11/Feb/2010:23:27:33 +0900] &#8220;GET / HTTP/1.1&#8243; 200 44<br />
192.168.161.124 &#8211; - [11/Feb/2010:23:27:34 +0900] &#8220;GET / HTTP/1.1&#8243; 200 44<br />
192.168.161.123 &#8211; - [11/Feb/2010:23:27:34 +0900] &#8220;GET / HTTP/1.1&#8243; 200 44<br />
192.168.161.122 &#8211; - [11/Feb/2010:23:27:35 +0900] &#8220;GET / HTTP/1.1&#8243; 200 44<br />
192.168.161.125 &#8211; - [11/Feb/2010:23:27:36 +0900] &#8220;GET / HTTP/1.1&#8243; 200 44</p></blockquote>
<p>どうして、この設定だと、完全にラウンドロビンになるのか、よく分かっていない。。。</p>
<p>iptables には、こんなこともできるのかと感動した。</p>
]]></content:encoded>
			<wfw:commentRss>http://www.sssg.org/blogs/naoya/archives/1695/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>HipHop for PHP</title>
		<link>http://www.sssg.org/blogs/naoya/archives/1689</link>
		<comments>http://www.sssg.org/blogs/naoya/archives/1689#comments</comments>
		<pubDate>Tue, 09 Feb 2010 05:02:00 +0000</pubDate>
		<dc:creator>naoya</dc:creator>
				<category><![CDATA[day]]></category>
		<category><![CDATA[facebook php]]></category>

		<guid isPermaLink="false">http://www.sssg.org/blogs/naoya/?p=1689</guid>
		<description><![CDATA[HipHop for PHP の技術的な講演動画が ustream にあったので、チェックしてみました。動画は、全部で 40 分弱くらいですが、講演自体は 20 分くらい、その他は質問でした。
以下、動画からのメモです。 [...]]]></description>
			<content:encoded><![CDATA[<p><a href="http://developers.facebook.com/news.php?blog=1&amp;story=358">HipHop for PHP</a> の技術的な講演動画が ustream にあったので、チェックしてみました。動画は、全部で 40 分弱くらいですが、講演自体は 20 分くらい、その他は質問でした。</p>
<p>以下、動画からのメモです。</p>
<ul>
<li>CPU の高い使用率が問題になっていた</li>
<li>10,000 台のウェブサーバ</li>
<li>それぞれのリクエストに 800 ミリ秒かかっている</li>
<li>コードベースが巨大になるにつれて、さらに遅くなる</li>
<li>ハードウェアは、フリーではない</li>
<li>言語ごとのベンチマークした結果の CPU の使用率</li>
<li>CPU の使用率が低い順 No1: C++, No2: Java, No3: C#, No4: Erlang, No5: Python, No6: Perl,  No7: PHP</li>
<li>PHP と Perl は同等、C++ や Java に比べると10 倍くらい遅いという結果</li>
<li>高いメモリ使用率が問題</li>
<li>- 150M<br />
for ($i = 0; $i &lt; 1000000; $i++) {<br />
$a[] = $i;<br />
}</li>
<li>- 750MB<br />
for ($i = 0; $i &lt; 5000000; $i++) {<br />
$a[] = $i<br />
}</li>
<li>HipHop for PHP では、次の問題点を解消するために作った</li>
<li>高い CPU の使用率を解消するため</li>
<li>多くのメモリの使用率を解消するため</li>
<li>他のシステムで既存の PHP のロジックを再利用するため</li>
<li>拡張は、ほとんどの PHP 開発者には書くことが難しい作業</li>
<li>HipHop for PHP は、2年間の成果で、ソースコードの最適化された C++ コード(g++ を使う)の変換機</li>
<li>効果は、ウェブサーバは 50% 以下に下がった、API は 2 倍のトラフィックに対して 30% 以下に下がった(APC を使った PHP コードベースと比べた結果)</li>
<li>7つのステップを通して、コードを変換する</li>
<li>本番環境でのデプロイは、通常の PHP コードでのデプロイとは異なっている</li>
<li>複数のスレッドで一つのプロセスを起動している</li>
<li>再起動している間のダウンタイムがない(port takeover&#8230; ポートを乗っ取り?)</li>
<li>巨大なバイナリを置く</li>
<li>HipHop は、現在とてもシンプルなウェブサーバ上で使っている</li>
<li>これからのロードマップ</li>
<li>現在、PHP 5.2 をサポートしているが、5.3 もサポートしたい</li>
<li>ウェブサーバのオプションとして Apache をサポートしたい</li>
<li>Facebook では、Apache 1.3 Prefrok で使っているとのこと</li>
<li>同時にデータベースのコネクションも減っている</li>
<li>PHP の拡張はスレッドセーフでない問題は解決できていないとのこと</li>
</ul>
<p>まだ、ちゃんと試していないのでよく分かりませんが、PHP なウェブサービスで PHP が CPU ボトルネックになっている場合には、物理サーバを減らすための有効なソリューションの一つになるかもしれないイメージをうけました。ただし、Facebook では、まだとても単純なウェブサーバ上でしか使っていないそうので、実際のサービスに使うにまだまだ時間がかかりそうです。</p>
<p>あと、個人的には Java は C++ と同様のベンチマーク結果だということも注目です。</p>
<p>なお、HipHop for PHP のソースコードは、<a href="http://github.com/facebook/hiphop-php">github</a> でもうすぐ公開予定とのことです。</p>
<p><object id="utv219687" classid="clsid:d27cdb6e-ae6d-11cf-96b8-444553540000" width="480" height="386" codebase="http://download.macromedia.com/pub/shockwave/cabs/flash/swflash.cab#version=6,0,40,0"><param name="name" value="utv_n_227464" /><param name="flashvars" value="loc=%2F&amp;autoplay=false&amp;vid=4409735" /><param name="allowfullscreen" value="true" /><param name="allowscriptaccess" value="always" /><param name="src" value="http://www.ustream.tv/flash/video/4409735" /><embed id="utv219687" type="application/x-shockwave-flash" width="480" height="386" src="http://www.ustream.tv/flash/video/4409735" allowscriptaccess="always" allowfullscreen="true" flashvars="loc=%2F&amp;autoplay=false&amp;vid=4409735" name="utv_n_227464"></embed></object></p>
]]></content:encoded>
			<wfw:commentRss>http://www.sssg.org/blogs/naoya/archives/1689/feed</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>sudos</title>
		<link>http://www.sssg.org/blogs/naoya/archives/1683</link>
		<comments>http://www.sssg.org/blogs/naoya/archives/1683#comments</comments>
		<pubDate>Wed, 03 Feb 2010 14:44:12 +0000</pubDate>
		<dc:creator>naoya</dc:creator>
				<category><![CDATA[day]]></category>
		<category><![CDATA[sudo]]></category>

		<guid isPermaLink="false">http://www.sssg.org/blogs/naoya/?p=1683</guid>
		<description><![CDATA[本番サーバ上で、sudo コマンド経由でスーパーユーザ権限で実行することはよくあります。
sudo コマンドはなくてはならないコマンドですが、同時に危険なコマンドでもあります。
今まで、ずっとデフォルトの sudo の設 [...]]]></description>
			<content:encoded><![CDATA[<p>本番サーバ上で、sudo コマンド経由でスーパーユーザ権限で実行することはよくあります。</p>
<p>sudo コマンドはなくてはならないコマンドですが、同時に危険なコマンドでもあります。</p>
<p>今まで、ずっとデフォルトの sudo の設定で使っていたのですが、改めて設定を見直してみました。</p>
<p>sudo の<a href="http://www.gratisoft.us/sudo/">公式ページ</a>をみてみると、頻繁にバージョンアップされているのがよく分かります。/etc/sudoers の設定方法も詳しいドキュメントがあっていい感じです。</p>
<p>次の2点ほど設定を見直しました。</p>
<ul>
<li>デフォルトのパスワードのキャッシュ時間を 0 にする</li>
<li>パスワードプロンプトにホスト名を表示する</li>
</ul>
<p>まず、最初の設定はデフォルトだと 5 分間、パスワードがキャッシュされます。そうすると、連続で sudo コマンドを実行するとき、パスワードを聞かれないためオペミスを起こしてしまう可能性が高まります。そこで、キャッシュ時間を 0 にすることにより、必ず毎回パスワードを聞くように設定します。この設定は、visudo コマンドを使って、次の行を追加します。</p>
<blockquote><p>Defaults timestamp_timeout = 0</p></blockquote>
<p>次にパスワードを聞かれるときのプロンプトにホスト名を表示して、念のためどのホストで sudo を実行しようとしているのか表示します。次の行を追加します。</p>
<blockquote><p>Defaults passprompt = &#8220;%u@%h Password: &#8220;</p></blockquote>
<p>この設定をすると、例えば hoge というユーザ名で、s1 というホスト名の場合、次のようなパスワードプロンプトになります。</p>
<blockquote><p>hoge@s1 Password:</p></blockquote>
<p>デフォルトのパスワードプロンプトに比べると、かなり分かりやすい表示になりました。</p>
<p>最新版の sudo バージョン 1.7.1 以降からは、次のような構文で別の設定ファイルも読み込めるようになっています。</p>
<p>これを使えば、ホストごとに異なった設定も管理しやすくなります。ただし、CentOS の場合、バージョン 1.6.8 なので対応していません。すこしはまってしまいました。。。</p>
<blockquote><p><tt>#includedir /etc/sudoers.d/hoge<br />
</tt></p></blockquote>
<p>最新版の sudo に入れ替えようと思いましたが、今のところそれほど困っていないので最新版は使っていません。</p>
<p>普段何気なく使っている sudo。もちろん、なるべく本番サーバ上では使わないのが賢明ですが、メンテナンスのときなど使う機会があるので、なるべくオペミスのリスクを減らしたいものです。</p>
<p>さらに、僕は sudo を<a href="http://www.sssg.org/blogs/naoya/archives/1443">コマンド補完履歴</a>に追加しないようにしています。</p>
<p># 2/5 追記</p>
<p>ちなみに、sudo のパスワードキャッシュをクリアするときは sudo -k あるいは -K オプションで行います。</p>
]]></content:encoded>
			<wfw:commentRss>http://www.sssg.org/blogs/naoya/archives/1683/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>サーバの消費電力 -NEC サーバ編-</title>
		<link>http://www.sssg.org/blogs/naoya/archives/1678</link>
		<comments>http://www.sssg.org/blogs/naoya/archives/1678#comments</comments>
		<pubDate>Wed, 27 Jan 2010 11:17:29 +0000</pubDate>
		<dc:creator>naoya</dc:creator>
				<category><![CDATA[day]]></category>
		<category><![CDATA[server]]></category>

		<guid isPermaLink="false">http://www.sssg.org/blogs/naoya/?p=1678</guid>
		<description><![CDATA[いつも、DELL サーバばかりのエントリばかりだったので、今回は久しぶりに違う内容をエントリします。
NEC サーバの 1U サーバの NEC Express 5800 シリーズの 2 種類の消費電力を測定する機会があっ [...]]]></description>
			<content:encoded><![CDATA[<p>いつも、DELL サーバばかりのエントリばかりだったので、今回は久しぶりに違う内容をエントリします。</p>
<p>NEC サーバの 1U サーバの <a href="http://www.nec.co.jp/products/pcserver/rack/lineup.shtml">NEC Express 5800 シリーズ</a>の 2 種類の消費電力を測定する機会があったので、計測結果を紹介します。</p>
<p>計測方法は、<a href="http://www.sssg.org/blogs/naoya/archives/1576">前回</a>の DELL サーバのときと同じクランプメーターで測定しました。</p>
<blockquote><p><img class="alignnone" title="NEC Express 5800" src="http://www.nec.co.jp/products/pcserver/rack/images/rack_pic_10.jpg" alt="" width="108" height="81" /></p></blockquote>
<blockquote><p><a href="http://www.nec.co.jp/products/pcserver/rack/r120a1/index.shtml"><strong>NEC Express 5800/R120a-1</strong></a></p>
<ul>
<li>CPU: Intel Xeon X5570 2.93GHz x 2</li>
<li>Memory: 32GB</li>
<li>HDD: Seagate Savvio ST973452SSS SAS 60GB x 6 (ハードウェア RAID 0)</li>
<li>Power: 冗長電源付き(2系統に電源が入っている場合、方側の電源を抜くともう片側に2倍の電力がかかる)</li>
<li>消費電力 idle: 0.86A</li>
<li>消費電力 max: 1.74A</li>
</ul>
<p><strong>NEC Express 5800/120Rh-1</strong></p>
<ul>
<li>CPU: Intel Xeon E5420 x 1</li>
<li>Memory: 8GB</li>
<li>HDD: Western Digital SATA 160GB x 1</li>
<li>Power: 冗長電源なし</li>
<li>消費電力 idle: 1.76A</li>
<li>消費電力 max: 2.10A</li>
</ul>
</blockquote>
<p>Xeon E5420 は、<a href="http://www.intel.co.jp/p/ja_JP/products/server/processor/xeon5000/specifications">Intel のホームページ</a>を見ると 80w ですが、かなり消費電力が高いのが、特徴的でした。</p>
<p>サーバ本体の価格、消費電力、どちらをとるのか、サーバの用途によって決めていくのが重要だと思う今日この頃です。</p>
]]></content:encoded>
			<wfw:commentRss>http://www.sssg.org/blogs/naoya/archives/1678/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>DELL スイッチでサービスタグを確認する方法</title>
		<link>http://www.sssg.org/blogs/naoya/archives/1676</link>
		<comments>http://www.sssg.org/blogs/naoya/archives/1676#comments</comments>
		<pubDate>Tue, 26 Jan 2010 14:46:46 +0000</pubDate>
		<dc:creator>naoya</dc:creator>
				<category><![CDATA[day]]></category>
		<category><![CDATA[dell]]></category>

		<guid isPermaLink="false">http://www.sssg.org/blogs/naoya/?p=1676</guid>
		<description><![CDATA[前回に引き続き、今回は DELL スイッチでサービスタグを確認する方法です。DELL スイッチのサービスタグは、背面にあるため一度ラックにマウントしてしまうと、サービスタグを確認するのがかなりめんどうです。
DELL ス [...]]]></description>
			<content:encoded><![CDATA[<p>前回に引き続き、今回は DELL スイッチでサービスタグを確認する方法です。DELL スイッチのサービスタグは、背面にあるため一度ラックにマウントしてしまうと、サービスタグを確認するのがかなりめんどうです。</p>
<p>DELL スイッチには、いくつか種類がありますが、PowerConnect 54XX より上位のモデルは、<a href="http://supportapj.dell.com/support/edocs/network/54xx/ja/ug/config.htm">telnet 接続してスイッチの設定をする機能</a>があるので、telnet 接続することでサービスタグを確認することができます。</p>
<p>例えば、switch1.example.com というスイッチがあった場合には、次のように設定します。</p>
<blockquote><p>$ telnet switch1.example.com</p>
<p>User name: admin</p>
<p>Passowrd: スイッチの管理パスワード</p>
<p>switch1.example.com# show system</p>
<p>System Description:                                        PowerConnect 5448<br />
System Up Time (days,hour:min:sec):       237,08:32:02<br />
System Contact:<br />
System Name:                                                 switch1.example.com<br />
System Location:<br />
System MAC Address:                                  XX:XX:XX:XX:XX:XX<br />
System Object ID:                                         1.3.6.1.4.1.674.10895.1234<br />
Type:                                                               Ethernet Switch<br />
Asset tag:<br />
Service tag:                                                    1234567</p>
<p>Main Power Supply Status:    OK<br />
Fan 1 Status:                             OK<br />
Fan 2 Status:                             OK<br />
Fan 3 Status:                             OK</p>
<p>Unit            Temperature (Celsius)            Status<br />
&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212; &#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212; &#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;<br />
1                        52                       OK</p></blockquote>
<p>上の出力にある Service  tag: という欄で、DELL スイッチのサービスタグを確認することができます。あわせて、スイッチの電源状態、ファンの状態、などもチェックすることができるので、とても便利です。時間があいたときにでも、スイッチの状態を確認する Nagios プラグインでも書いてみようかと思います。</p>
<p>なお、もっとも安価な <a href="http://www1.jp.dell.com/jp/ja/business/networking/switch-powerconnect-28xx/ct.aspx?refid=switch-powerconnect-28xx&amp;s=bsd&amp;cs=jpbsd1">PowerConnect 28xx シリーズ</a>には、その機能がないので注意してください。ただし、ウェブの管理画面があるので、そこから確認することができます。</p>
<p>ちなみに、DELL スイッチにはエクスプレスコードはありません。サービスタグのみで、問い合わせすることが可能です。</p>
]]></content:encoded>
			<wfw:commentRss>http://www.sssg.org/blogs/naoya/archives/1676/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>DELL サーバー Tips</title>
		<link>http://www.sssg.org/blogs/naoya/archives/1668</link>
		<comments>http://www.sssg.org/blogs/naoya/archives/1668#comments</comments>
		<pubDate>Sat, 23 Jan 2010 02:13:24 +0000</pubDate>
		<dc:creator>naoya</dc:creator>
				<category><![CDATA[day]]></category>
		<category><![CDATA[dell]]></category>

		<guid isPermaLink="false">http://www.sssg.org/blogs/naoya/?p=1668</guid>
		<description><![CDATA[今日は、DELL サーバーの Tips を一つ紹介したいと思います。DELL サーバには、サポートに問い合わせるときのために、筐体ごとにサービスタグとエクスプレスコードという ID が割り当てられています。
この ID  [...]]]></description>
			<content:encoded><![CDATA[<p>今日は、DELL サーバーの Tips を一つ紹介したいと思います。DELL サーバには、サポートに問い合わせるときのために、筐体ごとに<a href="http://supportapj.dell.com/support/topics/topic.aspx/jp/shared/support/jp/identifyyoursystem?c=jp&amp;cs=RC1078554&amp;l=ja&amp;s=gen">サービスタグ</a>と<a href="http://supportapj.dell.com/support/topics/topic.aspx/jp/shared/support/jp/identifyyoursystem?c=jp&amp;cs=RC1078554&amp;l=ja&amp;s=gen#ExpressServiceCode">エクスプレスコード</a>という ID が割り当てられています。</p>
<p>この ID は、1u サーバだと筐体の正面にシールで張り付けされています。R410 などのちょっとよい 1U サーバの場合、正面の LCD にもスクロールされて標準されています。</p>
<blockquote><p>RX1Xの場合: <a href="http://www.dell-faq.com/detail.asp?baID=1&amp;FAQID=198241">www.dell-faq.com -Q&amp;A検索- FAQ詳細</a></p>
<p><img class="aligncenter" title="DELL Server LCD" src="http://www.dell-faq.com/image/198241Resized_710_closeup_final.jpg" alt="" width="450" height="350" /></p></blockquote>
<p>何らかの問い合わせがあるとき、このサービスタグとエクスプレスコードを確認する必要がありますが、いちいち筐体の前に行って確認するのはめんどうです。</p>
<p>DELL から、このサービスタグとエクスプレスコードを確認するための RHEL 用のコマンドが配布されているので、これを利用すると便利です。</p>
<p>まず、<a href="http://linux.dell.com/libsmbios/main/yum.html">DELL 非公式の yum リポジトリ</a>を追加します。</p>
<blockquote><p>$ wget -q -O &#8211; http://linux.dell.com/repo/community/bootstrap.cgi | sudo bash</p></blockquote>
<p><a href="http://linux.dell.com/repo/community/bootstrap.cgi">bootstrap.cgi</a> は、ソースコードをみて分かるとおり、CentOS もしっかりサポートされています。上のコマンドを実行すると、DELL 非公式の yum リポジトリが追加されますので、あとはプログラムをインストールします。</p>
<blockquote><p>$ sudo yum install libsmbios-bin</p></blockquote>
<p>そうすると、<a href="http://linux.dell.com/libsmbios/main/getSystemId.html">/usr/sbin/getSystemId</a> というコマンドを python で書かれたコマンドラインツールがインストールされます。次のように、このコマンドを使うと簡単にサービスタグとエクスプレスコードを確認することができます。</p>
<blockquote><p>$ sudo /usr/sbin/getSystemId</p>
<p>Libsmbios version:        2.2.17<br />
Product Name:               PowerEdge R300<br />
Vendor:                            Dell Inc.<br />
BIOS Version:                 1.2.0<br />
System ID:                       0&#215;0123<br />
Service Tag:                     1234567<br />
Express Service Code:   1234567890<br />
Asset Tag:<br />
Property Ownership Tag:</p></blockquote>
<p>&#8211;help すると詳しいコマンドの使い方が分かりますが、例えばサービスタグだけ取得したいときは、次のように実行します。</p>
<blockquote><p>$ sudo /usr/sbin/getSystemId &#8211;service-tag</p></blockquote>
<p>これを応用すれば、サービスタグとエクスプレスコード用のカスタム facter も書けますし、資産管理のときにもまとめて集められるので、とても便利です。</p>
<p>僕の場合は、管理している本番サーバ上で getSystemId を使ってすべてのサービスタグとエクスプレスコードを集めて、社内 wiki に一覧としてまとめてあります。</p>
]]></content:encoded>
			<wfw:commentRss>http://www.sssg.org/blogs/naoya/archives/1668/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>それでも私が CentOS を使いつづける理由また、Why I still use CentOS? 的な。</title>
		<link>http://www.sssg.org/blogs/naoya/archives/1666</link>
		<comments>http://www.sssg.org/blogs/naoya/archives/1666#comments</comments>
		<pubDate>Wed, 20 Jan 2010 15:06:41 +0000</pubDate>
		<dc:creator>naoya</dc:creator>
				<category><![CDATA[day]]></category>
		<category><![CDATA[centos]]></category>

		<guid isPermaLink="false">http://www.sssg.org/blogs/naoya/?p=1666</guid>
		<description><![CDATA[元ネタ: 漢(オトコ)のコンピュータ道: それでも私が MySQL を使いつづける理由または、Why I still use MySQL? 的な。
同じくノリが楽しそうだったので CentOS で便乗してみました。
Fa [...]]]></description>
			<content:encoded><![CDATA[<blockquote><p>元ネタ: <a href="http://nippondanji.blogspot.com/2010/01/mysql-why-i-still-use-mysql.html">漢(オトコ)のコンピュータ道: それでも私が MySQL を使いつづける理由または、Why I still use MySQL? 的な。</a></p></blockquote>
<p>同じくノリが楽しそうだったので CentOS で便乗してみました。</p>
<p><strong>Fast Enough</strong></p>
<blockquote><p>正直なところ、特に速いと思ったことはあまりない。</p></blockquote>
<p><strong> Stable</strong></p>
<blockquote><p>商用版をベースにしているため、安定している。ちゃんと対応しているプログラムが多い。</p>
<p>バージョンアップが枯れ過ぎているので、かなり安定している。</p></blockquote>
<p><strong>Easy to install</strong></p>
<blockquote><p>Live CD ですぐに試せたり、インストール CD を使えば、すぐに分かりやすいグラフィカルなインストーラでインストールすることができる。インストール CD をダウンロードするのがめんどうだという人向けにネットワークインストール用のインストールイメージも用意されている。</p>
<p>Gnome/KDE や仮想環境 (KVM) やクラスタリング環境がすぐにセットアップできるのが便利。</p>
<p>さらにインストール後に、root ユーザのホームディレクトリに生成される kickstart ファイルを使えば、同じ設定で何度もインストールすることが可能なところも魅力である。</p></blockquote>
<p><strong>CentOS have enough users.</strong></p>
<blockquote><p>RHEL のユーザを含めば、恐らく Linux ディストリビューションのユーザ規模では最大規模になると思う。そのため、日本語の書籍やインターネット上の情報が豊富である。</p></blockquote>
<p><strong>まとめ</strong></p>
<blockquote><p>以上に述べた点に比べると、<a href="http://slashdot.jp/linux/article.pl?sid=09/07/31/0419240">プロジェクトが崩壊の危機にあった</a>とか、Linux Kernel のバージョンが 2.6.18 云々とかは些事にすぎない。</p></blockquote>
<div class="amazlet-box" style="margin-bottom: 0px;">
<div class="amazlet-image" style="float: left;"><a name="amazletlink" href="http://www.amazon.co.jp/exec/obidos/ASIN/4839933367/du00-22/ref=nosim/" target="_blank"><img style="border: none;" src="http://ecx.images-amazon.com/images/I/51jRUqFHmzL._SL160_.jpg" alt="改訂第二版 CentOSサーバ構築バイブル" /></a></div>
<div class="amazlet-info" style="float: left; margin-left: 15px; line-height: 120%;">
<div class="amazlet-name" style="margin-bottom: 10px; line-height: 120%;"><a name="amazletlink" href="http://www.amazon.co.jp/exec/obidos/ASIN/4839933367/du00-22/ref=nosim/" target="_blank">改訂第二版 CentOSサーバ構築バイブル</a></p>
<div class="amazlet-powered-date" style="font-size: 7pt; margin-top: 5px; font-family: verdana; line-height: 120%;">posted with <a title="改訂第二版 CentOSサーバ構築バイブル" href="http://www.amazlet.com/browse/ASIN/4839933367/du00-22/ref=nosim/" target="_blank">amazlet</a> at 10.01.20</div>
</div>
<div class="amazlet-detail">平 初 伊藤 幸夫 上鍵 忠志 中澤 直也 面 和毅 館林 綾ノ介 高安 洋輝 宇野 素史 坂井 恵<br />
毎日コミュニケーションズ<br />
売り上げランキング: 55121</div>
<div class="amazlet-link" style="margin-top: 5px;"><a name="amazletlink" href="http://www.amazon.co.jp/exec/obidos/ASIN/4839933367/du00-22/ref=nosim/" target="_blank">Amazon.co.jp で詳細を見る</a></div>
</div>
</div>
]]></content:encoded>
			<wfw:commentRss>http://www.sssg.org/blogs/naoya/archives/1666/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>美しいデータセンター</title>
		<link>http://www.sssg.org/blogs/naoya/archives/1661</link>
		<comments>http://www.sssg.org/blogs/naoya/archives/1661#comments</comments>
		<pubDate>Fri, 15 Jan 2010 16:08:24 +0000</pubDate>
		<dc:creator>naoya</dc:creator>
				<category><![CDATA[day]]></category>
		<category><![CDATA[datacenter]]></category>

		<guid isPermaLink="false">http://www.sssg.org/blogs/naoya/?p=1661</guid>
		<description><![CDATA[ふと海外のデータセンターに関する情報を調査していたとき、Beautiful Web Hosting Datacenter Images &#124; UnixNewbie.org という記事に、各データセンターの美しい様子が紹介さ [...]]]></description>
			<content:encoded><![CDATA[<p>ふと海外のデータセンターに関する情報を調査していたとき、<a href="http://www.unixnewbie.org/beautiful-web-hosting-datacenter-images/">Beautiful Web Hosting Datacenter Images | UnixNewbie.org </a>という記事に、各データセンターの美しい様子が紹介されていました。</p>
<p>せっかくなので、その写真の一部を紹介します。大きな写真は、元記事から見てください。</p>
<p>まずは、日立のグリーンデータセンター。これは、実物ではなく構想上の写真のみです。</p>
<p><img class="aligncenter" title="Hitach Green DC 1" src="http://unixnewbie.org/images/datacenter/small/1.png" alt="" width="195" height="138" /><img class="aligncenter" title="Hitach DC 2" src="http://unixnewbie.org/images/datacenter/small/5.png" alt="" width="195" height="149" /></p>
<p>次に Facebook のデータセンター。これは貴重な写真だと思います。ネットワークのケーブリングまわりも要チェックです。サーバ一台あたりに、2本から3本くらいのケーブルが接続されているのが分かりますね。おそらく冗長化目的というより、ネットワークを分離しているような気がします。</p>
<p><img class="aligncenter" title="Facebook DC1" src="http://unixnewbie.org/images/datacenter/small/7.png" alt="" width="195" height="115" /><img class="aligncenter" title="Facebook DC2" src="http://unixnewbie.org/images/datacenter/small/9.png" alt="" width="195" height="115" /></p>
<p>そして、昨年大きな話題になった Google。Google サーバのケーブルは、各サーバに一本ずつです。シンプルな構成で、かなり割り切った構想のようです。</p>
<p><img class="aligncenter" title="Google DC1" src="http://unixnewbie.org/images/datacenter/small/google2.png" alt="" width="195" height="115" /><img class="aligncenter" title="Google DC2" src="http://unixnewbie.org/images/datacenter/small/google5.png" alt="" width="195" height="115" /></p>
<p>そして、Microsoft のデータセンター。</p>
<p><img class="aligncenter" title="Microsoft DC1" src="http://unixnewbie.org/images/datacenter/small/microsoft3.png" alt="" width="195" height="133" /></p>
<p>Planet  データセンター。DELL サーバだらけです。よくこれで1ラックに詰め込むができますね。ラックの上部にスイッチを配置しているのが新鮮です。</p>
<p><img class="aligncenter" title="Planet DC1" src="http://unixnewbie.org/images/datacenter/small/theplanet6.png" alt="" width="195" height="149" /></p>
<p>美しいネットワークのケーブリング。</p>
<p><img class="aligncenter" title="Network Cable 1" src="http://unixnewbie.org/images/datacenter/small/beautiful5.png" alt="" width="195" height="150" />次のケーブリングは、僕の方式とかなり近いです。</p>
<p><img class="aligncenter" title="Network Cable 2" src="http://unixnewbie.org/images/datacenter/small/beautiful21.png" alt="" width="145" height="211" />次のようなスパゲッティな状態も、別の意味で美しいです。</p>
<p><img class="aligncenter" title="Network Cable 3" src="http://unixnewbie.org/images/datacenter/small/beautiful12.png" alt="" width="195" height="150" /></p>
<p>一度、Facebook か Google か Amazon の巨大データセンターを見てみたいものですね。</p>
]]></content:encoded>
			<wfw:commentRss>http://www.sssg.org/blogs/naoya/archives/1661/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Hadoop で syslog 経由でログを出力する方法</title>
		<link>http://www.sssg.org/blogs/naoya/archives/1659</link>
		<comments>http://www.sssg.org/blogs/naoya/archives/1659#comments</comments>
		<pubDate>Wed, 13 Jan 2010 13:11:29 +0000</pubDate>
		<dc:creator>naoya</dc:creator>
				<category><![CDATA[day]]></category>
		<category><![CDATA[hadoop]]></category>

		<guid isPermaLink="false">http://www.sssg.org/blogs/naoya/?p=1659</guid>
		<description><![CDATA[Hadoop を使いはじめたのですが、Hadoop で出力されるログを syslog 経由で出力するように設定してみました。最初は、log4j.properties だけ書き換えればよいかと思ったのですが、これだけでは  [...]]]></description>
			<content:encoded><![CDATA[<p><a href="&lt;a href=&quot;http://hadoop.apache.org/&quot;&gt;Welcome to Apache Hadoop!&lt;/a&gt;">Hadoop</a> を使いはじめたのですが、Hadoop で出力されるログを syslog 経由で出力するように設定してみました。最初は、log4j.properties だけ書き換えればよいかと思ったのですが、これだけでは syslog 経由でログを出力できませんでした。</p>
<p>Hadoop は、<a href="http://archive.cloudera.com/docs/cdh.html">CDH のバージョン 0.18.3</a> を使っています。</p>
<p>まず、/usr/lib/hadoop/bin/hadoop-daemon.sh で、log4j の logger 環境変数を使えるように次のように変更します。次のパッチでは、念のためローカルのログファイル名も変更できるようにしてあります。</p>
<blockquote><p>/usr/lib/hadoop/bin/hadoop-daemon.sh<br />
28a29,30&gt; #   HADOOP_LOGFILE  The log file name. Default is hadoop-$HADOOP_IDENT_STRING-$command-$HOSTNAME.log<br />
&gt; #   HADOOP_ROOT_LOGGER   The root appender. Default is INFO,console<br />
84a87,94<br />
&gt; # log configuration<br />
&gt; if [ "$HADOOP_LOGFILE" = "" ]; then<br />
&gt;   export HADOOP_LOGFILE=hadoop-$HADOOP_IDENT_STRING-$command-$HOSTNAME.log<br />
&gt; fi<br />
&gt; if [ "$HADOOP_ROOT_LOGGER" = "" ]; then<br />
&gt;   export HADOOP_ROOT_LOGGER=&#8221;INFO,DRFA&#8221;<br />
&gt; fi<br />
&gt;<br />
86,87d95&lt; export HADOOP_LOGFILE=hadoop-$HADOOP_IDENT_STRING-$command-$HOSTNAME.log<br />
&lt; export HADOOP_ROOT_LOGGER=&#8221;INFO,DRFA&#8221;</p></blockquote>
<p>次に、/etc/hadoop/conf/hadooop-env.sh に、次のように追加します。</p>
<blockquote><p>export HADOOP_ROOT_LOGGER=&#8221;INFO,SYSLOG,DRFA&#8221;</p></blockquote>
<p>最後に、/etc/hadoop/conf/log4j.properties に syslog で出力するための log4j の appender を追加します。</p>
<blockquote><p>#<br />
# syslog<br />
#<br />
log4j.appender.SYSLOG=org.apache.log4j.net.SyslogAppender<br />
log4j.appender.SYSLOG.facility=local0<br />
log4j.appender.SYSLOG.layout=org.apache.log4j.PatternLayout<br />
log4j.appender.SYSLOG.layout.ConversionPattern=%p %c{2}: %m%n<br />
log4j.appender.SYSLOG.SyslogHost=127.0.0.1<br />
log4j.appender.SYSLOG.threshold=INFO<br />
log4j.appender.SYSLOG.Header=true<br />
log4j.appender.SYSLOG.FacilityPrinting=true</p></blockquote>
<p>あとは、Hadoop を再起動すれば、127.0.0.1 のサーバに 514 番ポート、UDP、local0 ファシリティ、にて Hadoop のログが転送されます。どうやら、TCP にすることができないみたいです。</p>
<p>hadoop-daemon.sh の方は、本家でバージョン 0.21 で<a href="http://issues.apache.org/jira/browse/HADOOP-5787">対応予定</a>のようです。</p>
<p>参考資料</p>
<ul>
<li><a href="http://wiki.apache.org/hadoop/HowToConfigure">HowToConfigure &#8211; Hadoop Wiki</a></li>
<li><a href="http://mail-archives.apache.org/mod_mbox/hadoop-common-user/200908.mbox/%3C480D7E03-6E9F-4917-BE31-A82D2A42D9C8@cse.unl.edu%3E">Re: syslog-ng and hadoop</a></li>
</ul>
]]></content:encoded>
			<wfw:commentRss>http://www.sssg.org/blogs/naoya/archives/1659/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>syslog-ng と rsyslog</title>
		<link>http://www.sssg.org/blogs/naoya/archives/1653</link>
		<comments>http://www.sssg.org/blogs/naoya/archives/1653#comments</comments>
		<pubDate>Fri, 08 Jan 2010 12:44:58 +0000</pubDate>
		<dc:creator>naoya</dc:creator>
				<category><![CDATA[day]]></category>
		<category><![CDATA[syslog]]></category>

		<guid isPermaLink="false">http://www.sssg.org/blogs/naoya/?p=1653</guid>
		<description><![CDATA[そろそろ本格的に、CentOS な本番サーバを syslog-ng あるいは rsyslog に切替えようと、実際に試してみました。切替えたい目的は、必要なログは集中管理したいためです。今回は、本番環境でも使う Apac [...]]]></description>
			<content:encoded><![CDATA[<p>そろそろ本格的に、CentOS な本番サーバを <a href="http://www.balabit.com/network-security/syslog-ng/">syslog-ng</a> あるいは <a href="http://www.rsyslog.com/">rsyslog</a> に切替えようと、実際に試してみました。切替えたい目的は、必要なログは集中管理したいためです。今回は、本番環境でも使う Apache のアクセスログを他のサーバに転送するための設定方法だけ紹介します。</p>
<p>まずは、syslog-ng。</p>
<p>syslog-ng の<a href="http://www.balabit.com/network-security/syslog-ng/">本家サイト</a>をみると、次のような3種類のバージョンがあります。</p>
<ul>
<li><a href="http://www.balabit.com/network-security/syslog-ng/opensource-logging-system/">オープンソース版</a>: フリー、syslog-ng のオープンソースブランチ</li>
<li><a href="http://www.balabit.com/network-security/syslog-ng/central-syslog-server/">プレミアム版</a>: いくつかの追加機能をオリジナルのオープンソース版 syslog-ng からフォークした商用版</li>
<li><a href="http://www.balabit.com/network-security/syslog-ng/log-server-appliance/">ストアボックス版</a>: ログのライフサイクル管理の中央ログサーバアプライアンス</li>
</ul>
<p>次に CentOS では、バージョン 2.1.4 が EPEL のリポジトリから提供されています。本家サイトでは、次のバージョンが stable として提供されています。</p>
<ul>
<li>3.0.5 &#8211; 3.0.1</li>
<li>2.1.4 &#8211; 2.1.3</li>
<li>2.0.10</li>
</ul>
<p>EPEL で提供されているのは、2.1 系の最新版ということになります。最新版のバージョン 3 系の changelog は、<a href="http://www.balabit.com/downloads/files/syslog-ng/open-source-edition/3.0.5/changelog-en.txt">ここ</a>で確認できます。おもな変更は、次の内容になります。</p>
<ul>
<li>IETF によって策定された新しい syslog プロトコルの標準に対応した、具体的な仕様は<a href="http://www.ietf.org/internet-drafts/draft-ietf-syslog-protocol-23.txt">ここ</a>と<a href="http://www.ietf.org/internet-drafts/draft-ietf-syslog-transport-tls-11.txt">ここ</a>を参照してください</li>
<li>Log ステートメントに他の複雑なログのパスを組み込むことができるようになった</li>
<li>元ファイルの文字コードを設定することが可能になった(内部的には、syslog-ng はすべてのメッセージを UTF-8 として記憶している)</li>
<li>syslog-ng のアプリケーションは、すべてのログメッセージに対してユニークなメッセージ識別子を付与できるようになった</li>
<li>syslog-ng のアプリケーションは、テンプレートや正規表現を使って構造化されたメッセージを読み込んだり、処理できたり、書き直すことができるようになった(例えば、Apache のウェブサーバログ)。フィールドサイズを変更することとデリミッターで区切られているフィールドの両方のメッセージをサポートした</li>
</ul>
<p>それほど大きな変更点はないようなので、EPEL で提供されているものを十分だと思われます。EPEL が利用できるなら、インストールは次のコマンドでできます。</p>
<blockquote><p>$ sudo yum install syslog-ng</p></blockquote>
<p>インストールすると、制御スクリプトが /etc/syslog-ng、設定ファイルが /etc/syslog-ng/syslog-ng.conf にインストールされます。</p>
<p>実際に使用する前に、syslog-ng のおもな特徴をまとめておきます。</p>
<ul>
<li>既存の syslog の設定ファイルと互換性がない(デフォルトでインストールされている設定ファイルがデフォルトの syslog の設定と同じになっています)</li>
<li>facility などで細かく出力するログの内容を設定することができる</li>
<li>出力するログファイル名に、日付などを設定することができる(これによりログローテート入らずになります)</li>
<li>UDP/TCP によって、任意のサーバへログ転送することができる(デフォルトのポートは、514)</li>
<li>facility、priority、ホスト名、アプリケーション名、などで自分のプログラムを起動することができる</li>
</ul>
<p>syslog-ng と rsyslog は、従来の syslog を置き換えるものなので、事前に syslog を必ず止めて起動しないようにしておきます。(さようなら syslog、今までありがとう syslog&#8230;)</p>
<blockquote><p>$ sudo /etc/init.d/syslog stop</p>
<p>$ sudo chkconfig syslog off</p></blockquote>
<p>今回は、Apache のアクセスログを syslog-ng と rsyslog でシスログ転送する方法をそれぞれ紹介します。</p>
<p>Apache のアクセスログは、パイプで logger コマンドを指定すると syslog へ出力することができます。</p>
<blockquote><p>CustomLog &#8220;|/usr/bin/logger -i -p local4.info -t httpd&#8221; combined</p></blockquote>
<p>syslog-ng の設定は、次の内容を /etc/syslog-ng/syslog-ng.conf に追加します。</p>
<blockquote><p>filter f_httpd {<br />
facility(local4) and level(info);<br />
};</p>
<p>destination d_httpd {<br />
file(&#8220;/var/log/syslog_httpd_access_log&#8221;);<br />
udp(&#8220;192.168.1.2&#8243;);<br />
};</p>
<p>log { source(s_sys); filter(f_httpd); destination(d_httpd); };</p></blockquote>
<p>上のように設定しておくと、/var/log/syslog_httpd_access_log にアクセスログが出力されて、かつ 192.168.1.2 のサーバにログを UDP で転送するという設定になります。</p>
<p>192.168.1.2 の syslog-ng の設定は、s_sys source のコメントをはずします。なお、UDP/TCP の 514 ポートが iptables でブロックされていないか確認しておきましょう。tcp にしたい場合には、udp を tcp に置き換えます。</p>
<blockquote><p>udp(ip(0.0.0.0) port(514));</p></blockquote>
<p>syslog-ng を起動する前に、設定ファイルに記述ミスがないかどうか調べてみます。</p>
<blockquote><p>$ sudo /etc/init.d/syslog-ng checkconfig</p>
<p>Checking Configuration:                                    [  OK  ]</p></blockquote>
<p>問題がなければ起動してみます。</p>
<blockquote><p>$ sudo /etc/init.d/syslog-ng start</p>
<p>Starting syslog-ng:                                        [  OK  ]</p></blockquote>
<p>これで、httpd へのアクセスログがローカルのディスクに出力されて、かつ 192.168.1.1 のサーバにも同じ内容が転送されてアクセスログとして出力されます。</p>
<p>syslog-ng の設定項目は、膨大なので<a href="http://www.balabit.com/support/documentation/?product=syslog-ng">公式ドキュメント</a>(PDF 形式)を参考にしたほうがよいと思います。</p>
<p>次に <a href="http://www.rsyslog.com/">rsyslog。</a></p>
<p>rsyslog は、CentOS の base リポジトリで、バージョン 2.0.6 が提供されています。rsyslog にも、いくつかのバージョンが stable として<a href="http://www.rsyslog.com/doc-status.html">提供</a>されています。<strong> </strong></p>
<ul>
<li><strong>v5 stable:</strong> 5.2.0 [2009-11-02] -  <a href="http://www.rsyslog.com/Article421.phtml">変更履歴</a> &#8211; <a href="http://www.rsyslog.com/Downloads-req-viewdownloaddetails-lid-184.phtml">ダウンロード</a></li>
<li><strong>v4 stable:</strong> 4.4.2 [2009-10-09] &#8211; <a href="http://www.rsyslog.com/Article409.phtml">変更履歴</a> &#8211; <a href="http://www.rsyslog.com/Downloads-req-viewdownloaddetails-lid-179.phtml">ダウンロード</a></li>
<li><strong>v3 stable:</strong> 3.22.1 [2009-07-02] &#8211; <a href="http://www.rsyslog.com/Article381.phtml">変更履歴</a> &#8211; <a href="http://www.rsyslog.com/Downloads-req-viewdownloaddetails-lid-163.phtml">ダウンロード</a></li>
<li>v2 stable: 2.0.7 [2009-04-14] &#8211; <a href="http://www.rsyslog.com/Article362.phtml">change log</a> &#8211; <a href="http://www.rsyslog.com/Downloads-req-viewdownloaddetails-lid-154.phtml">ダウンロード</a></li>
</ul>
<p>四系統もバージョンがあり、かなり複雑な印象をうけます。v2 と v3 では、互換性がないようで専用の互換モードが<a href="http://www.rsyslog.com/doc-v3compatibility.html">用意</a>されています。それぞれのバージョンでも互換モードが用意されています。v2 は、すでにサポートされていないので、v3 stable 以降を使うといいと思います。</p>
<p>ちなみに、Fedora では Fedora 8 から、syslog のかわりに rsyslog を<a href="http://www.rsyslog.com/Article144.phtml">採用</a>しています。最新版の Fedora 12 では、rsyslog のバージョンは 4.4.1 でした。</p>
<p>なので、v4 stable のバージョン 4.4.2 を使うのがよさそうです。このバージョンは、RPM では提供されていないので、Fedora プロジェクトのものを使って RPM を作成するといいと思います。Fedora プロジェクトのもので RPM を作成すると、sysklogd パッケージと /etc/logrotate.d/syslog がコンフリクトしてしまいますが、従来の /etc/logrotate.d/syslog の内容と同じもので rsyslog の RPM を作成すればコンフリクトを解消することができます。設定ファイル内のスペースとタグも区別するので、まったく同じ内容になるように作成してください(僕はここですこしはまりました&#8230;)。</p>
<p>rsyslog をインストールすると、制御スクリプトが /etc/init.d/rsyslog、設定ファイルが /etc/rsyslog.conf、にインストールされます。rsyslog.conf をみて分かるとおり、従来の syslog の設定ファイルとほぼ同じ内容になっています。</p>
<p>rsyslog のおもな特徴は、次のとおりです。これらの機能は、syslog-ng では提供されていない機能だと思われます。特に圧縮転送はうれしい機能の一つです。<a href="http://www.rsyslog.com/doc-property_replacer.html">マクロ</a>は、syslog-ng と同じようなものが提供されています。その他の詳しい機能は、<a href="http://www.rsyslog.com/doc-features.html">本家サイト</a>で確認してください。</p>
<ul>
<li>MySQLやPostgreSQLをモジュールなどで拡張することなく、ネイティブでサポート</li>
<li>libdbiを使用すれば、Firebird／Interbase／MS SQL／SQLLite／Oracleなどに対応可能</li>
<li>圧縮転送が可能</li>
<li>stunnelを使ったシスログのセキュアな転送が可能</li>
<li>シスログのディスク書き込みで、I/Oの処理が間に合わない場合など、スプールを使用することができる。特にバックエンドにデータベースを使用している場合に有効に機能する</li>
</ul>
<p>Apache のアクセスログを出力している側の rsyslog の設定は、次の内容を追加します。</p>
<blockquote><p>local4.info @@192.168.1.2</p></blockquote>
<p>たったこれだけです。@@ というのは、TCP でログを転送するという意味になります。UDP で転送したい場合は、@ と指定します。</p>
<p>syslog-ng と rsyslog、どちらも試してみましたが、どちらもほぼ同じ機能が提供されています。設定ファイルの書き方が、まったく違うので、どちらかを常用するべきか決めたほうがいいと思います。</p>
<p>僕の場合、CentOS であること、Fedora が rsyslog を標準採用したということで、RedHat もそろそろ標準採用しそうか感じがあるので、rsyslog を本番環境へ本格的に投入してみることしました。</p>
<p>rsyslog を本番環境へ投入するにあたりかなりはまったので、この内容は別にエントリする予定です。</p>
]]></content:encoded>
			<wfw:commentRss>http://www.sssg.org/blogs/naoya/archives/1653/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>年始めのご挨拶</title>
		<link>http://www.sssg.org/blogs/naoya/archives/1651</link>
		<comments>http://www.sssg.org/blogs/naoya/archives/1651#comments</comments>
		<pubDate>Sun, 03 Jan 2010 12:41:52 +0000</pubDate>
		<dc:creator>naoya</dc:creator>
				<category><![CDATA[day]]></category>
		<category><![CDATA[life]]></category>

		<guid isPermaLink="false">http://www.sssg.org/blogs/naoya/?p=1651</guid>
		<description><![CDATA[いよいよ、2010 年が始まりました。今年も、特にインフラまわりのアウトプットを、このブログで行いたいと思います。
個人的な 2010 年のおおよその目標は元旦に決めましたが、今年はいろいろと自分の環境を変えていく年にな [...]]]></description>
			<content:encoded><![CDATA[<p>いよいよ、2010 年が始まりました。今年も、特にインフラまわりのアウトプットを、このブログで行いたいと思います。</p>
<p>個人的な 2010 年のおおよその目標は元旦に決めましたが、今年はいろいろと自分の環境を変えていく年になりそうです。</p>
<p>ということで、今年 2010 年も Carpe Diem をよろしくお願い致します。</p>
<p>&#8212;</p>
<p>Naoya Nakazawa</p>
]]></content:encoded>
			<wfw:commentRss>http://www.sssg.org/blogs/naoya/archives/1651/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>The Art of モバゲー Capacity Planning</title>
		<link>http://www.sssg.org/blogs/naoya/archives/1648</link>
		<comments>http://www.sssg.org/blogs/naoya/archives/1648#comments</comments>
		<pubDate>Thu, 31 Dec 2009 12:52:52 +0000</pubDate>
		<dc:creator>naoya</dc:creator>
				<category><![CDATA[day]]></category>

		<guid isPermaLink="false">http://www.sssg.org/blogs/naoya/?p=1648</guid>
		<description><![CDATA[さて、2009 年も残すところ、あとわずかとなりましたが、今日はモバゲー版のキャパシティプランニングを考えてみましょう。モバゲー版は、まだ実際にはサードパーティ製のアプリが公開されていない状況だとは思いますが、開発サイト [...]]]></description>
			<content:encoded><![CDATA[<p>さて、2009 年も残すところ、あとわずかとなりましたが、今日はモバゲー版のキャパシティプランニングを考えてみましょう。モバゲー版は、まだ実際にはサードパーティ製のアプリが公開されていない状況だとは思いますが、<a href="http://developer.dena.jp/mbga/">開発サイト</a>が公開されています。モバゲー版も、mixi モバイルアプリ版と同様に、パートナー企業のみが開発できるようになっています。</p>
<p>まず、モバゲーの規模を知るために、 <a href="http://www.c-direct.ne.jp/public/japanese/uj/pdf/10110213/20091105179161.pdf">月次推移のご報告（平成21年10月度）</a>を見てみましょう。この資料から、2009 年 10 月時点での PV は、次のようになっています。</p>
<ul>
<li>会員数: 1527 万人</li>
<li>月間 PV: 約 238 億 PV</li>
<li>単純平均して、日間にすると約 8 億 pV、秒間にすると約 9,259 PVになります</li>
</ul>
<p>次に、モバゲーの成長速度を計るため、<a href="http://www.c-direct.ne.jp/public/japanese/uj/pdf/10110213/20090903176869.pdf">月次推移のご報告（平成21年8月度）</a>を見てみましょう。この資料から、2009 年 8 月時点での PV は、次のようになっています。</p>
<ul>
<li>会員数: 1220 万人</li>
<li>月間 PV: 約 198 億 PV</li>
<li>単純平均して、日間にすると約 6.6 億 PV、秒間にすると約 7,638 PVになります</li>
</ul>
<p>そうすると、2009 年 10 月から三ヶ月前経過した 2010 年 1 月には、最低でも次の数字になっていると推測されます。</p>
<ul>
<li>会員数: 1800 万人</li>
<li>月間 PV: 約 280 億 PV</li>
<li>単純平均して、日間にすると約 9.3億 PV、秒間にすると約 10,802 pv になります</li>
</ul>
<p>さすがは、モバゲーというだけあって、mixi のモバイル版よりはかなり規模が大きいです。</p>
<p>モバゲーの場合も夜の時間帯に約 3 倍のリクエストがあるとなると、モバゲー本体で秒間あたり約 3 万 PV になります。</p>
<p>モバゲーアプリはまだ公開されていないので、モバゲーの会員数のうちいったいどのくらいのユーザがモバゲーアプリが使うかは分かりませんが、すべての会員がアプリを使うことは当り前ですがありません。</p>
<p>おそらく、約 2 割のユーザが使って、アクセスが集中する時間帯で約 3 倍になると仮定すると、おおよそ次のくらいの規模になりそうです。</p>
<ul>
<li>会員数: 約 350 万人</li>
<li>月間 PV: 約 60 億 PV</li>
<li>日間 PV: 約 2 億 PV</li>
<li>秒間最大 PV: 約 6,000 PV</li>
</ul>
<p>モバゲーも mixi 版と同様にかなりの規模になることが分かりました。</p>
<p>いよいよ今年から、日本でも OpenSocial 対応を表明していたサイトが続々と実際にそれぞれのプラットフォームを公開してきました。OpenSocial 対応のアプリを開発しているのは、前でもエントリしたとおりいわゆるベンチャー企業が多いので、これだけの大きなトラフィックをいかに低コストでかつ確実にさばけるかがアプリの成功の鍵を握っていると思います。</p>
<p>個人的には、このような大きなトラフィックをさばくということに、とても大きな関心と興味があるので、来年はさらにもうすこし踏み込んでいかにして低コストでかつ確実にさばくか考えていきたいと思います。</p>
<p>それでは、よい年をおむかえください!</p>
]]></content:encoded>
			<wfw:commentRss>http://www.sssg.org/blogs/naoya/archives/1648/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>The Art of Mixi-mobile-appli Capacity Planning</title>
		<link>http://www.sssg.org/blogs/naoya/archives/1645</link>
		<comments>http://www.sssg.org/blogs/naoya/archives/1645#comments</comments>
		<pubDate>Sat, 26 Dec 2009 15:04:40 +0000</pubDate>
		<dc:creator>naoya</dc:creator>
				<category><![CDATA[day]]></category>
		<category><![CDATA[mixi]]></category>

		<guid isPermaLink="false">http://www.sssg.org/blogs/naoya/?p=1645</guid>
		<description><![CDATA[2009年も残すところあと僅かになりました。今年のネット業界にはたくさんのことが起きましたが、国内でもっともインパクトがあったのは日本最大の SNS サイト mixi がついに OpenSocial 対応になったことだと [...]]]></description>
			<content:encoded><![CDATA[<p>2009年も残すところあと僅かになりました。今年のネット業界にはたくさんのことが起きましたが、国内でもっともインパクトがあったのは日本最大の SNS サイト <a href="http://mixi.jp">mixi</a> がついに <a href="http://developer.mixi.co.jp/appli">OpenSocial 対応</a>になったことだと思います。</p>
<p>今日現在、PC 版とモバイル版の2種類が提供されており、<a href="http://mixi.co.jp/press/2009/0824/1882">PC 版</a>は企業と個人、<a href="http://mixi.co.jp/press/2009/1027/2137">モバイル版</a>は企業のパートナー契約を結んだ会社のみ開発して公開できるようになっています。</p>
<p>さて、mixi のモバイル版が公開された直後は、アクセス殺到にて軒並みモバイル版のアプリケーションを提供しているパートナー企業のサーバに大きな負荷がかかって、<a href="http://www.itmedia.co.jp/news/articles/0910/29/news045.html">ほとんどの mixi のモバイルアプリが使えない状況になった</a>のは記憶に新しいです。3日で約60万人ユーザも集める人気アプリも数多く登場した様子です。</p>
<p>今日は、もし仮に僕が 2010年1月1日に mixi モバイル版アプリを提供することになったことを想定して、インフラ面からどのくらいのアクセスをさばくことができれば問題がないかどうか調べてみました。</p>
<p>まず、そのために mixi の規模感を知るために、mixi から提供されている <a href="http://eir.eol.co.jp/EIR/View.aspx?template=announcement&amp;sid=3768&amp;code=2121">2009年度第2四半期 決算説明資料</a> を参考にしてみると、次の数字が分かります。</p>
<ul>
<li>ユーザ数: 1792 万人</li>
<li>モバイル版月間 PV: 114.4 億 PV</li>
</ul>
<p>とても大規模な環境です。</p>
<p>そして、先月のニュースで「<a href="http://www.itmedia.co.jp/news/articles/0911/26/news038.html">mixi利用時間急増、Yahoo！に次ぐ2位に　mixiアプリ効果 &#8211; ITmedia News</a>」というものがありました。このニュースによれば、利用時間が2倍になって、ユニークユーザ数がそれほど変わっていないことが分かります。</p>
<p>mixi のユーザ数、モバイル版の PV の伸び率を調べるために、<a href="http://eir.eol.co.jp/EIR/View.aspx?template=announcement&amp;sid=3732&amp;code=2121">2009年度第1四半期 決算説明資料</a>をみてみると、次の数字が分かります。</p>
<ul>
<li>ユーザ数: 1741 万人</li>
<li>モバイル版月間 PV: 109.9 億 PV</li>
</ul>
<p>この数字から、四半期あたりの伸び率が次のように分かります。</p>
<ul>
<li>ユーザ数: +約50 万人</li>
<li>モバイル版月間 PV: +約5 億 PV</li>
</ul>
<p>これらの情報から、2010 年 1 月の mixi モバイル版本体は次のような規模感になります。さきほどのニュースからユーザ数はそのまま比例して増えていく、月間 PV は2倍で増えていくことを想定しています。</p>
<ul>
<li>ユーザ数: 約 1817 万人</li>
<li>モバイル版月間 PV:  約 120 億 PV</li>
</ul>
<p>mixi モバイルアプリなので、mixi モバイル版本体より月間 PV は増えないはずです(当り前ですが&#8230;)。</p>
<p>モバイル版月間 PV を、日/秒あたりの PV にすると、次のようになります。</p>
<ul>
<li>モバイル版日間 PV: 約 4 億 PV</li>
<li>モバイル版秒間 PV: 約 4,629 PV</li>
</ul>
<p>mixi のユーザが全員モバイル版アプリを利用することにはなりません。現在、モバイル版アプリで一番ユーザ数の多いアプリは<a href="http://app.wchr.jp/cgi-bin/mixi.cgi?mode=appli&amp;id=9513">まちつく！mixi版 (2,258,452)</a>で約 230 万人くらいになっています。そうすると、モバイル版アプリの利用者は、現時点で多くても約 1/9 くらいになります。</p>
<p>これらの情報から、mixi モバイル版アプリの場合、急激に人気になったことを想定すると、次のくらいの規模感になります。</p>
<ul>
<li>モバイル版日間 PV: 約 4,500 万 PV</li>
<li>モバイル版秒間 PV: 約 520 PV</li>
</ul>
<p>上の秒間は平均的な値です。mixi などのウェブアプリケーションは、必ずもっとも利用される時間帯があるはずです。おそらく、22時から24時あたりでないかと勝手に想像して、なんとなく直感で通常の3倍のリクエストが来ると想定すると、次のような規模感になります。</p>
<ul>
<li>モバイル版日間 PV: 約 4,500 万 PV</li>
<li>モバイル版秒間 PV: 約  1,500 PV</li>
</ul>
<p>この数字が、もっとも人気になった場合の数字になりそうです。mixi モバイル版アプリは、いわゆる人数の少ないベンチャー企業が開発しているのがほとんどなので、最初から上の規模感をさばける環境を準備するにはけっこうなコストがかかりそうです。とはいっても、上の数字はもっとも人気になった場合の数字なので、必ずしも最初から上の規模感をさばけるインフラを準備しておく必要はないはずですが、最高で上のぐらいの規模感になりそうだということがおおよ想像できます。もちろん、実際に公開してみないことには人気が出るのか出ないのか、どのくらいのリクエストが来るのかは分かりませんが、こうして mixi から提供されている情報やニュースなどでおおよその規模感を把握することができるので、とりあえずなんとなくすこしのインフラを準備して公開するよりはよっぽどましだと思います。</p>
<p>次は、同じようにモバゲーも調べてみたいと思います。</p>
]]></content:encoded>
			<wfw:commentRss>http://www.sssg.org/blogs/naoya/archives/1645/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>自作サーバカンファレンスを振り返って</title>
		<link>http://www.sssg.org/blogs/naoya/archives/1612</link>
		<comments>http://www.sssg.org/blogs/naoya/archives/1612#comments</comments>
		<pubDate>Tue, 22 Dec 2009 03:12:14 +0000</pubDate>
		<dc:creator>naoya</dc:creator>
				<category><![CDATA[day]]></category>
		<category><![CDATA[jisaku01]]></category>

		<guid isPermaLink="false">http://www.sssg.org/blogs/naoya/?p=1612</guid>
		<description><![CDATA[先月、自作サーバカンファレンスが開催されたので遊びにいってきました。自作サーバカンファレンスのレポートは、はてブで確認するといいと思います。また、動画も公開されているようなので、興味のある人はチェックするとよいと思います [...]]]></description>
			<content:encoded><![CDATA[<p>先月、<a href="http://atnd.org/events/2052">自作サーバカンファレンス</a>が開催されたので遊びにいってきました。自作サーバカンファレンスのレポートは、<a href="http://b.hatena.ne.jp/t/jisaku09">はてブで確認する</a>といいと思います。また、<a href="http://www.ustream.tv/rakuten_tech">動画も公開されている</a>ようなので、興味のある人はチェックするとよいと思います。</p>
<p>自分のサービスで、自作サーバを使うメリットとデメリットを考えてみました。</p>
<p>まずは、メリットは、<a href="http://d.hatena.ne.jp/stanaka/20091126/1259234976">id:stanaka さんのオープンニングキーノート</a>で述べられていますが、この点について考えてみます。</p>
<ul>
<li>自分のサービスにあった自分好みの自作サーバとしてカスタマイズできる</li>
<blockquote>
<li>この点についてはまさにそのとおりで、自作サーバをするうえでの最大のメリットであると言えるでしょう</li>
<li>たしかにベンダー製サーバは、BTO である程度、搭載部品を選択できても、無駄な部品が搭載されていることは確かなことです</li>
</blockquote>
<li>SSD を搭載して大胆な構成がとれる</li>
<blockquote>
<li>例えば最近 DELL でも SSD を搭載できるモデル（<a href="http://www1.jp.dell.com/jp/ja/business/servers/poweredge-r510/pd.aspx?refid=poweredge-r510&amp;cs=jpbsd1&amp;s=bsd">PowerEdge R510</a>）が登場してきているため、SSD だけでは自作サーバを使うメリットはなくなってきている状況だと思います</li>
</blockquote>
<li>複数の NIC、冗長電源、IPMI （一部のサーバには必要）は不要</li>
<blockquote>
<li>たしかにほとんどのサーバには複数の NIC は不要なケースが多いです</li>
<li>僕は DELL サーバをメインで使っていますが、たしかに NIC 4 つとか搭載されていても使っていませんし</li>
<li>冗長電源は、DELL の場合はカスタマイズでなしにすることができます</li>
<li>IPMI は個人的にはないと困る機能です、もしサーバに何らかのトラブルが発生してデータセンター現地にいって該当のサーバにディスプレイをつないで作業する工数と IPMI 経由で作業する工数を比べると、はるかに後者の工数のほうが少ないはずです</li>
</blockquote>
<li>コスト安</li>
<blockquote>
<li>はてなさんのウェブサーバスペックで、サーバ1台あたりの単価は8万円程度</li>
<li>それ以外に発生するコストとしては、サーバの部品調達と組み上げコストが発生します</li>
<li>さらに台数が増えることで管理コストが増大します、台数が増えてもある程度管理コストを増やさない仕組みが必要そうです</li>
</blockquote>
</ul>
<p>次に、デメリットを考えてみましょう。</p>
<ul>
<li>1台あたりのスペックが低い</li>
<blockquote>
<li>はてなさんのサーバスペックは、CPU Core2Duo 4core、8GB RAM(ECCなし)、ハードディスク x 1、のスペックで 1U ハーフ、消費電力は 1.1A くらいになっています</li>
<li>1U あたりで考えると、この2倍のスペックになりますが、この2倍のスペックになってやっと現在のベンダー製サーバと低標準スペックになりますし、消費電力は 2.2A になることを考えると若干消費電力が大きくなるといえます</li>
<li>自作サーバの場合は、ラックあたりに多くの自作サーバを詰め込む傾向になってきます</li>
</blockquote>
<li>自分達でトラブルを解決する必要がある</li>
<blockquote>
<li>ハードウェアの相性トラブルなどを自分達で解決できなければなりません</li>
<li>例えば DELL なら、無料電話サポートでエンジニアを派遣して解決してもらうこともできますし、部品(CPU やマザーボードなど)が壊れた場合は通常で3年間は無料で交換してくれます(部品は、都内だと5時間くらいで配達してくれます)</li>
</blockquote>
</ul>
<p>メリットとデメリットがあるので、あとはどちらを選択するのかが大事だと思う。</p>
<p>個人的には、自作サーバを導入するなら、次の環境が必須だと思った。</p>
<ul>
<li>インフラチームなる、サーバだけ見ている人たちがいる</li>
<li>自作サーバでのサービス運営を容認してくれる企業文化</li>
</ul>
<p>ということで、今の僕の環境は一人でアプリケーション開発とインフラを見ているので、インフラチームがないという点でとても不可能だと思った。</p>
<p>最後に、個人的に自作サーバを入れるところは、やっぱりストレージサーバかなと思う。ストレージサーバは、容量を増やすことでいっきに価格も変わってくるし、管理ツールはベンダー独自のものを使わなければならないという状況が多い様子だから。</p>
<p>いずれにしても、自作サーバだけではやっぱり無理な部分もあって、自作サーバとベンダー製サーバあるいはクラウド、要所要所でもっとも適したものを使っていくというが大事だと思う。</p>
<p>例えば、はてなさんはかなりベンダー製サーバとのコストも気にしている様子だったので、自作サーバだけに特化せずに大きな視点で物事を見ることも、とても大切だと思う。</p>
<p>僕は、ベンダー製サーバを選定して運用している経験しか今のところないので、これからも情報共有できるととても幸せだと思う。</p>
<p>かなり遅くなりましたが、個人的な自作サーバカンファレンスを振り返っての感想でした。サーバって、本当に奥が深いですね。</p>
]]></content:encoded>
			<wfw:commentRss>http://www.sssg.org/blogs/naoya/archives/1612/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Building a More Efficient Ruby Interpreter</title>
		<link>http://www.sssg.org/blogs/naoya/archives/1640</link>
		<comments>http://www.sssg.org/blogs/naoya/archives/1640#comments</comments>
		<pubDate>Mon, 21 Dec 2009 13:32:56 +0000</pubDate>
		<dc:creator>naoya</dc:creator>
				<category><![CDATA[day]]></category>
		<category><![CDATA[ruby]]></category>

		<guid isPermaLink="false">http://www.sssg.org/blogs/naoya/?p=1640</guid>
		<description><![CDATA[Ruby Enterprise Edition の中について、Google TechTalk で公開されています。

約36分ほどと、Google TechTalk の中では短い部類に入りますので、興味のある人はチェック [...]]]></description>
			<content:encoded><![CDATA[<p>Ruby Enterprise Edition の中について、Google TechTalk で公開されています。</p>
<p><object width="500" height="306"><param name="movie" value="http://www.youtube.com/v/ghLCtCwAKqQ&#038;fs=1"></param><param name="allowFullScreen" value="true"></param><param name="allowscriptaccess" value="always"></param><embed src="http://www.youtube.com/v/ghLCtCwAKqQ&#038;fs=1" type="application/x-shockwave-flash" width="500" height="306" allowscriptaccess="always" allowfullscreen="true"></embed></object></p>
<p>約36分ほどと、Google TechTalk の中では短い部類に入りますので、興味のある人はチェックしてみるとよいでしょう。</p>
<p># wordpress 2.9 では、YouTube などの動画サイトの URL を張り付けるだけで動画をブログに貼ることができるので、とても便利ですね。</p>
]]></content:encoded>
			<wfw:commentRss>http://www.sssg.org/blogs/naoya/archives/1640/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>facter 一覧</title>
		<link>http://www.sssg.org/blogs/naoya/archives/1636</link>
		<comments>http://www.sssg.org/blogs/naoya/archives/1636#comments</comments>
		<pubDate>Sun, 20 Dec 2009 15:25:15 +0000</pubDate>
		<dc:creator>naoya</dc:creator>
				<category><![CDATA[day]]></category>
		<category><![CDATA[facter]]></category>

		<guid isPermaLink="false">http://www.sssg.org/blogs/naoya/?p=1636</guid>
		<description><![CDATA[facter バージョン 1.5.7(現時点での最新版)で、ソースコードレベルから一覧をまとめてみます。
architecture: ハードウェアの種類です。hardwaremodel の値を利用して、ハードウェアの種類 [...]]]></description>
			<content:encoded><![CDATA[<p><a href="http://reductivelabs.com/products/facter/">facter</a> バージョン 1.5.7(現時点での最新版)で、ソースコードレベルから一覧をまとめてみます。</p>
<blockquote><p>architecture: ハードウェアの種類です。hardwaremodel の値を利用して、ハードウェアの種類を取得します(i386 or x86_64 or amd64)</p>
<p>Cfkey: /usr/local/etc/cfkey.pub の値です(おそらく、CfEngine  のときに使われていた値だと思われます)</p>
<p>domain: ドメイン名です。hostname の値から取得しています。</p>
<p>ec2: EC2 のシンボル名(ID) です。</p>
<p>facterversion: Facter のバージョンです。</p>
<p>fqdn: FQDN(ホスト名.ドメイン名)です。</p>
<p>hardwareisa: プロセッサーの種類です。uname -p の出力です。</p>
<p>hardwaremodel: ハードウェアの種類です。uname -m の出力です。</p>
<p>hostname: ホスト名です。hostname コマンドの出力です。</p>
<p>id: id です。whoami コマンドの出力です。interfaces: NIC の種類です。eth0,eth1 のように取得できます。</p>
<p>ipaddress: ip アドレスです。ifconfig コマンドの出力から 127. で始まる以外の最初の IP アドレスを取得します。その他の IP アドレスは、「ipaddress_NIC」で取得できます。</p>
<p>iphostnumber: OSX のみ有効な値で、MAC アドレスを取得しているようですが具体的な値は不明です。</p>
<p>kernelmajversion: カーネルのメジャーバージョンです。例えば、「2.6」のような値になります。</p>
<p>kernel: カーネルの種類です。uname -s の出力です。</p>
<p>kernelrelease: カーネルのバージョン+リリース番号です。uname -r の出力です。</p>
<p>kernelversion: カーネルのバージョンです。kernelrelease の &#8211; の前の値を取得しています。</p>
<p>lsbmajdistrelease: ディストリビューションのメジャーバージョンです。</p>
<p>lsb: LSB(Linux Standard Base) の値です。</p>
<p>macaddress: MAC アドレスです。</p>
<p>macosx: Mac OS X のシステムプロファイラから取得できる値です。具体的な値は不明です。</p>
<p>manufacture: ハードウェアの製造業者です。dmidecode コマンドから Manufacturer: の値を取得しています。</p>
<p>memoryfree: メモリと空き容量です。</p>
<p>memorysize: メモリのサイズです。</p>
<p>netmask: サブネットマスク値です。各 NIC ごとのサブネットマスク値は「netmask_NIC」で取得できます。</p>
<p>network: ネットワークアドレスです。各 NIC ごとのネットワークアドレスは「network_NIC」で取得できます。</p>
<p>operatingsystem: オペレーティングシステムの種類です。/etc にオペレーティングシステムのリリース情報から判断しています。</p>
<p>operatingsystemrelease: オペレーティングシステムのバージョンです。</p>
<p>path: 環境変数 PATH の値です。</p>
<p>physicalprocessorcount: 物理的な CPU の数です。/proc/cpuinfo から算出しています。</p>
<p>processor: プロセッサの種類です。具体的な値は不明です。</p>
<p>productname: 機種名です。</p>
<p>ps: ps コマンドです。Linux だと、ps -ef となっておかしい値になります。</p>
<p>puppetversion: インストールされている Puppet  クライアントのバージョンです。</p>
<p>rubysitedir: site_ruby の場所です。</p>
<p>rubyversion: ruby のバージョンです。</p>
<p>selinux: SELinux の状態です。無効なときは、false になります。</p>
<p>sshdsakey/sshrsakey: SSH のホスト鍵です。</p>
<p>swapfree: スワップの空き容量です。</p>
<p>swapfize: スワップのサイズです。</p>
<p>timezone: システムのタイムゾーンです。</p>
<p>uniqueid: 一意な ID です。hostid コマンドの出力です。</p>
<p>uptime: システムの起動時間です。/proc/uptime の内容です。</p>
<p>uptime_days: 起動日数です。</p>
<p>uptime_hours: 起動時間数です。</p>
<p>uptime_seconds: 起動秒数です。</p>
<p>virtual: 仮想環境の種類です。仮想環境ではないときは「false」になります。Xen、OpenVZ、VMware に対応しています。</p></blockquote>
<p>こうしてみると、facter ではかなりの値を取得できるようになっています。</p>
<p>facter 変数だと、puppet 以外にもシェルスクリプトや ruby プログラムから簡単に参照できるので重宝しそうです。</p>
]]></content:encoded>
			<wfw:commentRss>http://www.sssg.org/blogs/naoya/archives/1636/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>techlifecookpad -puppet- フィードバック編</title>
		<link>http://www.sssg.org/blogs/naoya/archives/1633</link>
		<comments>http://www.sssg.org/blogs/naoya/archives/1633#comments</comments>
		<pubDate>Wed, 16 Dec 2009 14:28:15 +0000</pubDate>
		<dc:creator>naoya</dc:creator>
				<category><![CDATA[day]]></category>

		<guid isPermaLink="false">http://www.sssg.org/blogs/naoya/?p=1633</guid>
		<description><![CDATA[先日、techlifecookpad -puppet- のフィードバック編です、とはいっても一点だけです。
資料の中で、次のようなカスタム facter を定義していましたが、なんと facter 1.5.7 には ma [...]]]></description>
			<content:encoded><![CDATA[<p>先日、<a href="http://www.sssg.org/blogs/naoya/archives/1615">techlifecookpad -puppet-</a> のフィードバック編です、とはいっても一点だけです。</p>
<p>資料の中で、次のようなカスタム facter を定義していましたが、なんと facter 1.5.7 には manufacture 変数が用意されていました。</p>
<blockquote><p>if $bios_vendor == &#8220;dXXX Inc.&#8221; {</p>
<p>include dell</p>
<p>}</p></blockquote>
<p>用意されている manufacture を使うと、次のようにまったく同じにできます。</p>
<blockquote><p>if $manufacture == &#8220;dXXX Inc.&#8221; {</p>
<p>include dell</p>
<p>}</p></blockquote>
<p>facter の該当のソースコードを読むと、僕が作ったカスタム facter と <a href="http://linux.die.net/man/8/dmidecode">dmidecode(8)</a> コマンドを使っていたので処理的にはまったく同じです。</p>
<p>ただし、仮想環境上の場合、manufacture 変数すら表示されないので要注意しましょう。</p>
<p>とはいっても上のコマンドはまったく問題なくとおりますが、facter コマンドで facter 変数一覧の中では表示されないので気がつかない可能性もあるという意味です。</p>
<p>デフォルトに組み込まれていることは知らなかったのが恥ずかしい限りなので、次回は facter 一覧をまとめてみます。</p>
]]></content:encoded>
			<wfw:commentRss>http://www.sssg.org/blogs/naoya/archives/1633/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>koan を使ってコマンド一発で Xen DomU をインストールする</title>
		<link>http://www.sssg.org/blogs/naoya/archives/1358</link>
		<comments>http://www.sssg.org/blogs/naoya/archives/1358#comments</comments>
		<pubDate>Mon, 14 Dec 2009 12:13:29 +0000</pubDate>
		<dc:creator>naoya</dc:creator>
				<category><![CDATA[day]]></category>
		<category><![CDATA[koan]]></category>

		<guid isPermaLink="false">http://www.sssg.org/blogs/naoya/?p=1358</guid>
		<description><![CDATA[koan を使って、コマンド一発で Xen DomU をインストールする方法を紹介します。
1. cobbler のサーバで DomU として使う system を作成する
$ sudo cobbler system a [...]]]></description>
			<content:encoded><![CDATA[<p><a href="https://fedorahosted.org/cobbler/">koan</a> を使って、コマンド一発で Xen DomU をインストールする方法を紹介します。</p>
<p>1. cobbler のサーバで DomU として使う system を作成する</p>
<blockquote><p>$ sudo cobbler system add &#8211;name=&lt;仮想マシン名&gt; &#8211;profile=&lt;プロファイル名&gt; &#8211;virt-type=xenpv &#8211;virt-cpus=1 &#8211;virt-ram=2048 &#8211;virt-file-size=200 &#8211;virt-path=/var/lib/xen/images/&lt;仮想マシン名&gt;.img &#8211;virt-bridge=xenbr0</p></blockquote>
<p>上の例では、準仮想化ドメインとして CPU 数 1、搭載メモリ容量 2048MB、ハードディスク容量 200GB、仮想ブリッジを xenbr0 とした仮想マシンを構築するという意味になる。</p>
<p>2. Dom0 上に koan をインストールする</p>
<blockquote><p>$ sudo yum instal koan</p></blockquote>
<p>3. koan コマンドを使ってコマンド一発で仮想マシンをインストールする</p>
<blockquote><p>$ sudo koan &#8211;server= &#8211;system=&lt;仮想マシン名&gt; &#8211;virt &#8211;nogfx &#8211;virt-path=/var/lib/xen/images/&lt;仮想マシン名&gt;.img</p></blockquote>
<p>なぜか system に virt-path が設定されている状態でも koan コマンドに virt-path を指定しないとエラーでインストールできなかった。</p>
<p>4. DomU をインストール後、DomU が自動的にシャットダウンしてしまうので、DomU を起動する</p>
<blockquote><p>$ sudo virsh start &lt;仮想マシン名&gt;</p></blockquote>
<p>koan コマンドのパラメータは、次のとおり。</p>
<blockquote><p>koan &#8211;server=hostname [--list=type] [--virt|--replace-self|--display]<br />
[--profile=name] [--system=name] [--image=name] [--add-reinstall-entry]<br />
[--virt-name=name] [--virt-path=path] [--virt-type=type] [--nogfx]<br />
[--static-interface=name] [--kexec]</p></blockquote>
<blockquote><p>&#8211;virt-name    作成する仮想マシンの名前(省略した場合はプロファイル名が使われる)<br />
&#8211;virt-type    作成する仮想マシンの種類(xenpv or xenfv or qemu or vmware)<br />
&#8211;virt-ram     メモリ容量(MB 単位)<br />
&#8211;virt-bridge  ブリッジデバイス名<br />
&#8211;virt-path    仮想マシンファイルを保存する場所(パーティション、ディレクトリ、LVM ボリュームの設定が可能)<br />
&#8211;no-gfx       VNC グラフィックスを使用しない(Xen のみ)</p></blockquote>
<p>koan 超便利です。</p>
<p># 先日の techlife@cookpad の内容は、これを応用した Xen DomU の自動インストールの仕組みです</p>
]]></content:encoded>
			<wfw:commentRss>http://www.sssg.org/blogs/naoya/archives/1358/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Nagios NRPE プラグインを作成する方法</title>
		<link>http://www.sssg.org/blogs/naoya/archives/1624</link>
		<comments>http://www.sssg.org/blogs/naoya/archives/1624#comments</comments>
		<pubDate>Tue, 08 Dec 2009 14:23:36 +0000</pubDate>
		<dc:creator>naoya</dc:creator>
				<category><![CDATA[day]]></category>
		<category><![CDATA[nagios]]></category>

		<guid isPermaLink="false">http://www.sssg.org/blogs/naoya/?p=1624</guid>
		<description><![CDATA[Nagios で、独自に任意の方法で自分のサービスを監視したい場合、NRPE プラグインを作成すると便利です。
僕は、基本的にシェルスクリプトでがんばって作成しています。次のようなシェルスクリプトの雛型を準備しています。 [...]]]></description>
			<content:encoded><![CDATA[<p><a href="http://www.nagios.org/">Nagios</a> で、独自に任意の方法で自分のサービスを監視したい場合、<a href="http://nagios.sourceforge.net/docs/nrpe/NRPE.pdf">NRPE</a> プラグインを作成すると便利です。</p>
<p>僕は、基本的にシェルスクリプトでがんばって作成しています。次のようなシェルスクリプトの雛型を準備しています。</p>
<blockquote><p>#!/bin/sh</p>
<p>STATE_OK=0<br />
STATE_WARNING=1<br />
STATE_CRITICAL=2<br />
STATE_UNKNOWN=3<br />
STATE_DEPENDENT=4</p>
<p>echo &#8220;Status is OK&#8221;</p>
<p>exit $STATE_OK</p></blockquote>
<p>exit する前に echo すれば、その情報を Nagios の管理画面の Status Information で確認することができます。</p>
<p>この雛型シェルスクリプトを使って、DELL 製サーバのハードウェア RAID の確認とその BBU の状態を監視しているスクリプトを作成しました。</p>
<ul>
<li><a href="http://github.com/n0ts/nagios/blob/master/check_dell_storage_battery">check_dell_storage_battery</a></li>
<li><a href="http://github.com/n0ts/nagios/blob/master/check_dell_storage_pdisk">check_dell_storage_pdisk</a></li>
</ul>
]]></content:encoded>
			<wfw:commentRss>http://www.sssg.org/blogs/naoya/archives/1624/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Puppet によるインフラ管理入門</title>
		<link>http://www.sssg.org/blogs/naoya/archives/1620</link>
		<comments>http://www.sssg.org/blogs/naoya/archives/1620#comments</comments>
		<pubDate>Sun, 06 Dec 2009 17:40:26 +0000</pubDate>
		<dc:creator>naoya</dc:creator>
				<category><![CDATA[day]]></category>

		<guid isPermaLink="false">http://www.sssg.org/blogs/naoya/?p=1620</guid>
		<description><![CDATA[先日のクックパッド LT で公開したのですが、前回の Velocity で行われた Puppet 作者の Luke さんによる Puppet ワークショップの日本語版を許可いただいて翻訳しました。
実はかなり前(Velo [...]]]></description>
			<content:encoded><![CDATA[<p>先日のクックパッド LT で公開したのですが、前回の Velocity で行われた Puppet 作者の Luke さんによる Puppet ワークショップの日本語版を許可いただいて翻訳しました。</p>
<p>実はかなり前(Velocity が終わった直後)に翻訳したものなのですが、すっかり公開するのも忘れていたので、LT にあわせて公開しました。</p>
<blockquote><p><a href="http://www.sssg.org/~naoya/puppet/project.html">Puppet によるインフラ管理入門</a></p></blockquote>
<p>原本は、次のワークショップです。</p>
<blockquote><p><a href="http://en.oreilly.com/velocity2009/public/schedule/detail/7693">Introduction to Managed Infrastructure with Puppet: Velocity 2009 &#8211; O&#8217;Reilly Conferences, June 22 &#8211; 24, 2009, San Jose, CA</a></p></blockquote>
<p>このワークショップでは、Puppet を実際に触りながら Puppet  の理解を深めていくという内容のワークショップです。</p>
<p>とても Puppet 入門に適している内容だと思いますので、ぜひ会社の中などで Puppet 入門勉強会の資料として使ってもらえばうれしいです!</p>
<p>僕も自分の会社で Puppet 入門勉強会を開催して、そこで資料として使いました。</p>
]]></content:encoded>
			<wfw:commentRss>http://www.sssg.org/blogs/naoya/archives/1620/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>monit で logrotate する</title>
		<link>http://www.sssg.org/blogs/naoya/archives/1617</link>
		<comments>http://www.sssg.org/blogs/naoya/archives/1617#comments</comments>
		<pubDate>Fri, 04 Dec 2009 08:50:01 +0000</pubDate>
		<dc:creator>naoya</dc:creator>
				<category><![CDATA[day]]></category>

		<guid isPermaLink="false">http://www.sssg.org/blogs/naoya/?p=1617</guid>
		<description><![CDATA[monit はとても便利でかなせないツールになっている今日この頃ですが、monit にはデフォルトで logrotate するスクリプトがついていません。
monit の logfile を設定すると、monit でチェ [...]]]></description>
			<content:encoded><![CDATA[<p><a href="http://mmonit.com/monit/">monit</a> はとても便利でかなせないツールになっている今日この頃ですが、<a href="http://mmonit.com/monit/">monit</a> にはデフォルトで logrotate するスクリプトがついていません。</p>
<p>monit の logfile を設定すると、monit でチェックしている対象のプロセスを再起動したときなどにログに情報がたくさん出力されているので、logrotate しておいたほうがいいでしょう。</p>
<p>monit の logfile を /var/log/monit に設定した場合は、次のような内容で /etc/logrotate.d/monit を作成します。</p>
<blockquote><p>/var/log/monit {<br />
missingok<br />
notifempty<br />
size 100k<br />
create 0644 root root<br />
postrotate<br />
/bin/kill -HUP `cat /var/run/monit.pid 2&gt;/dev/null` 2&gt; /dev/null || true<br />
endscript<br />
}</p></blockquote>
]]></content:encoded>
			<wfw:commentRss>http://www.sssg.org/blogs/naoya/archives/1617/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>techlifecookpad -puppet-</title>
		<link>http://www.sssg.org/blogs/naoya/archives/1615</link>
		<comments>http://www.sssg.org/blogs/naoya/archives/1615#comments</comments>
		<pubDate>Thu, 03 Dec 2009 16:01:54 +0000</pubDate>
		<dc:creator>naoya</dc:creator>
				<category><![CDATA[day]]></category>

		<guid isPermaLink="false">http://www.sssg.org/blogs/naoya/?p=1615</guid>
		<description><![CDATA[本日開催された techlife ライトニングトーク at クックパッド puppet 編の資料をアップロードしました。
今回は、実際に puppet を本番サーバへ導入するにあたって、puppet + cobbler  [...]]]></description>
			<content:encoded><![CDATA[<p>本日開催された <a href="http://techlife.cookpad.com/2009/10/24/techlife_introduction/">techlife ライトニングトーク at クックパッド puppet 編</a>の資料をアップロードしました。</p>
<p>今回は、実際に puppet を本番サーバへ導入するにあたって、puppet + cobbler で Xen DomU の初期設定まで自動化しているのですが、その内容について話しました。puppet は便利なのですが、まだまだ自分のインフラでいけていないところばかりなので、引き続き改善し続けていきたいと思います。</p>
<p>動画もそのうち公開されているようですので気になる人は<a href="http://techlife.cookpad.com/">クックパッド開発者ブログ</a>や <a href="http://twitter.com/techlifecookpad">@techlifecook</a> を参考にするとよいでしょう。</p>
<p>また、<a href="http://trac.mizzy.org/public/wiki/TecLifeLTPuppet">mizzy さんの資料</a>もアップロードされていますので、チェックしておきましょう。mizzy さんの発表にもあった exec 脳には、自分も sysctl.conf の変更をまったく同じふうにしていたので file リソースを使うように変更しておきたいと思います。</p>
<div id="__ss_2642138" style="width: 425px; text-align: left;"><a style="font:14px Helvetica,Arial,Sans-serif;display:block;margin:12px 0 3px 0;text-decoration:underline;" title="puppet @techlifecookpad" href="http://www.slideshare.net/n0ts/puppet-techlifecookpad">puppet @techlifecookpad</a></p>
<div style="font-size: 11px; font-family: tahoma,arial; height: 26px; padding-top: 2px; text-align: center;">View more <a style="text-decoration:underline;" href="http://www.slideshare.net/">presentations</a> from <a style="text-decoration:underline;" href="http://www.slideshare.net/n0ts">Naoya Nakazawa</a>.</div>
</div>
<p style="text-align: center;"><object style="margin: 0px;" classid="clsid:d27cdb6e-ae6d-11cf-96b8-444553540000" width="425" height="355" codebase="http://download.macromedia.com/pub/shockwave/cabs/flash/swflash.cab#version=6,0,40,0"><param name="allowFullScreen" value="true" /><param name="allowScriptAccess" value="always" /><param name="src" value="http://static.slidesharecdn.com/swf/ssplayer2.swf?doc=tlltpuppetcobblerbynots-091203095715-phpapp01&amp;stripped_title=puppet-techlifecookpad" /><param name="allowfullscreen" value="true" /><embed style="margin: 0px;" type="application/x-shockwave-flash" width="425" height="355" src="http://static.slidesharecdn.com/swf/ssplayer2.swf?doc=tlltpuppetcobblerbynots-091203095715-phpapp01&amp;stripped_title=puppet-techlifecookpad" allowscriptaccess="always" allowfullscreen="true"></embed></object></p>
<p># 追記:</p>
<p>puppet の情報を日本語に翻訳したい文章があるので、<a href="http://trac.mizzy.org/puppet">パペウィキ</a> の編集アカウントがほしい！</p>
]]></content:encoded>
			<wfw:commentRss>http://www.sssg.org/blogs/naoya/archives/1615/feed</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
		<item>
		<title>Velocity Online Conference Fall 2009</title>
		<link>http://www.sssg.org/blogs/naoya/archives/1610</link>
		<comments>http://www.sssg.org/blogs/naoya/archives/1610#comments</comments>
		<pubDate>Sat, 28 Nov 2009 02:40:31 +0000</pubDate>
		<dc:creator>naoya</dc:creator>
				<category><![CDATA[day]]></category>

		<guid isPermaLink="false">http://www.sssg.org/blogs/naoya/?p=1610</guid>
		<description><![CDATA[来月、Velocity のオンラインカンファレンス Fall 2009 が開催されるようです。O&#8217;Reilly では、たくさんのオンラインカンファレンスがあるみたいです。オンラインカンファレンスとは、インター [...]]]></description>
			<content:encoded><![CDATA[<p>来月、<a href="http://conferences.oreilly.com/velocityonline">Velocity のオンラインカンファレンス Fall 2009</a> が開催されるようです。O&#8217;Reilly では、たくさんの<a href="http://conferences.oreillynet.com/">オンラインカンファレンス</a>があるみたいです。オンラインカンファレンスとは、インターネット上でのカンファレンスでその場でディスカッションなどができるようです。</p>
<p>この Velocity のオンラインカンファレンスですが、今年は次の内容で開催されるということで、さっそく申し込んでみました。</p>
<ul>
<li>パフォーマンスの影響度：ウェブのスピードをオンラインビジネスにどのような影響があるのか(<a href="http://en.oreilly.com/velocityfall09/public/schedule/detail/11220">Performance Impact: How Web Speed Affects Online Business KPIs + Q&amp;A</a>)</li>
<li>SPDY の紹介(<a href="http://en.oreilly.com/velocityfall09/public/schedule/detail/11477">Introduction to SPDY</a>)</li>
<li>延期された JavaScript の評価を通して高速なロード時間にする(<a href="http://en.oreilly.com/velocityfall09/public/schedule/detail/11260">Faster Load Times Through Deferred JavaScript Evaluation</a>)</li>
<li>デフォルトで Rails を高速にする(<a href="http://en.oreilly.com/velocityfall09/public/schedule/detail/11221">Making Rails Even Faster by Default</a>)</li>
<li>ロードバランシングと Varnish を使ったリバースプロキシ(<a href="http://en.oreilly.com/velocityfall09/public/schedule/detail/11219">Load Balancing &amp; Reverse Proxies with Varnish &amp; More + Q&amp;A</a>)</li>
<li>ブラウザスコープ: よいブラウザにプロファリングする方法(<a href="http://en.oreilly.com/velocityfall09/public/schedule/detail/11453">Browserscope: Profiling the Way to a Better Browser</a>)</li>
<li>10,000フィートからの CouchDB(<a href="http://en.oreilly.com/velocityfall09/public/schedule/detail/11308">CouchDB from 10,000 ft + Q&amp;A</a>)</li>
<li>オペレーションの座談会(<a href="http://en.oreilly.com/velocityfall09/public/schedule/detail/11218">Operations Roundtable</a>)</li>
</ul>
<p>日時は、US-PST（太平洋標準時）で 12/8（火）9:00am &#8211; 12:40am なので、日本時間にすると 12/9（水）午前 2:00 &#8211; 5:40 になります。かなり深夜から早朝にかけて行われることになります。</p>
<p>料金は、$149 なのですが、通常で $25 の割引があります。また、過去の Velocity の参加者は $50 の割引があります。僕は、過去の Velocity 参加者なので、メールして特別なクーポンコードを発行してもらいました。さらに今回の Velocity Online Conference Fall 2009 の参加者には、次回の Velocity の 25% 割引という得点もあるので次回 Velocity に参加する人は参加するとよいと思います。</p>
<p>今回のオンラインカンファレンスの中では、Rails、Varnish、座談会の話がもっとも興味あります。</p>
<p>今から、とても楽しみです！</p>
]]></content:encoded>
			<wfw:commentRss>http://www.sssg.org/blogs/naoya/archives/1610/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
	</channel>
</rss>
