<?xml version="1.0" encoding="UTF-8"?>
<feed xmlns="http://www.w3.org/2005/Atom">
    <title>HEARTBEATS blog</title>
    <link rel="alternate" type="text/html" href="http://heartbeats.jp/hbblog/" />
    <link rel="self" type="application/atom+xml" href="http://heartbeats.jp/hbblog/atom.xml" />
    <id>tag:heartbeats.jp,2009-08-24:/hbblog//2</id>
    <updated>2010-01-27T16:39:31Z</updated>
    <subtitle>株式会社ハートビーツのインフラエンジニアから、ちょっとした技術情報をお届けします</subtitle>
    <generator uri="http://www.sixapart.com/movabletype/">Movable Type 4.26</generator>

<entry>
    <title>sudoでNOPASSWDが効かない時の対応方法</title>
    <link rel="alternate" type="text/html" href="http://heartbeats.jp/hbblog/2010/01/sudonopasswd.html" />
    <id>tag:heartbeats.jp,2010:/hbblog//2.17</id>

    <published>2010-01-27T15:39:57Z</published>
    <updated>2010-01-27T16:39:31Z</updated>

    <summary>最近ハマったので解決方法をご紹介しておきます。 visudoでNOPASSWDを...</summary>
    <author>
        <name>馬場俊彰</name>
        <uri>http://heartbeats.jp/</uri>
    </author>
    
        <category term="Linux" scheme="http://www.sixapart.com/ns/types#category" />
    
    
    <content type="html" xml:lang="ja" xml:base="http://heartbeats.jp/hbblog/">
        <![CDATA[<p>最近ハマったので解決方法をご紹介しておきます。</p>

<p>visudoでNOPASSWDを指定しても有効にならないケースがあります。 <br />
特にUbuntuではよくハマるかな。CentOSでも同じことになるケースがあります。。。</p>

<p><a href="http://ubuntuforums.org/showthread.php?t=135160">Sudo NOPASSWD not working...?</a></p>

<pre>
The trick seems to be to put the NOPASSWD lines at the *end* of the file.
</pre>

<p>と、いうわけで、sudoでNOPASSWORDが効かない場合、設定をファイルの一番最後に設定を書けば解決します。  </p>

<p>ぜひお試しあれ</p>
]]>
        

    </content>
</entry>

<entry>
    <title>インフラエンジニア勉強会 hbstudy#5 が開催されました</title>
    <link rel="alternate" type="text/html" href="http://heartbeats.jp/hbblog/2009/11/-hbstudy5.html" />
    <id>tag:heartbeats.jp,2009:/hbblog//2.15</id>

    <published>2009-11-26T07:26:22Z</published>
    <updated>2009-11-26T09:23:03Z</updated>

    <summary>こんにちは。ハートビーツ運用スタッフの山田です。 １１月１４日（土）、インフラエ...</summary>
    <author>
        <name>山田真也</name>
        <uri>http://heartbeats.jp/</uri>
    </author>
    
    
    <content type="html" xml:lang="ja" xml:base="http://heartbeats.jp/hbblog/">
        <![CDATA[<p>こんにちは。ハートビーツ運用スタッフの山田です。</p>

<p>１１月１４日（土）、インフラエンジニアの技術交流の場として開催させて頂いておりますhbstudyが開催されました。
hbstudyは今回で５回目となり、40名近いみなさまにご参加頂きました！本当にありがとうございました。</p>

<p>　前半は永安悟さんより、「PostgreSQL安定運用のコツ２００９」と題してPostgreSQLの運用管理に関してお話し頂きました。後半は松信嘉範さんより、「DBサーバーのパフォーマンスチューニング」と題してMｙSQLを中心にデータベースのチューニングについてお話頂きました。</p>
]]>
        <![CDATA[<h1>PostgreSQL安定運用のコツ2009　永安悟さん</h1>

<p><a href="http://www.slideshare.net/uptimejp/postgresql2009-hbstudy5">（資料：http://www.slideshare.net/uptimejp/postgresql2009-hbstudy5）</a></p>

<p>永安さんからは、PostgreSQLのパフォーマンスに関わる初期設定からデータベースの監視の必要性、性能劣化要因とメンテナンスという内容で、PostgreSQLのしくみから運用テクニックまで分かりやすくご説明頂きました。</p>

<p><span class="mt-enclosure mt-enclosure-image" style="display: inline;"><a href="http://heartbeats.jp/hbblog/assets_c/2009/11/hbstudy5_1-19.html" onclick="window.open('http://heartbeats.jp/hbblog/assets_c/2009/11/hbstudy5_1-19.html','popup','width=640,height=480,scrollbars=no,resizable=no,toolbar=no,directories=no,location=no,menubar=no,status=no,left=0,top=0'); return false"><img src="http://heartbeats.jp/hbblog/assets_c/2009/11/hbstudy5_1-thumb-300x225-19.jpg" width="300" height="225" alt="hbstudy5_1.jpg" class="mt-image-center" style="text-align: center; display: block; margin: 0 auto 20px;" /></a></span></p>

<p>　まずPostgreSQLのパフォーマンス考える上で重要なポイントとして、各プロセスとデータファイル間のI/O処理をいかに適切にコントロールするかが挙げられます。
PostgreSQLのしくみとして、クライアントからのアクセスがあると、アクセスを待ち受けるリスナプロセス（postmaster）からフォークされたサーバプロセス（postgres）が処理を引き継ぎます。サーバプロセスは各データファイル（テーブルファイル、インデックスファイル等）にアクセスする際、共有バッファというメモリ領域を介して行います。
この共有バッファのサイズを定めるshared_buffersという設定項目がPostgreSQLのデフォルトのインストール設定では小さく、ハードウェアのパフォーマンスを引き出せない可能性が高く、初期設定時には特に注意が必要です。（実際はデータベースの設計やアプリケーションの構造により適切な設定値は異なる）
他にもパフォーマンスに影響する設定項目があり、デフォルト設定で動作させず適切な初期設定を行うことが重要とのことです。</p>

<p>　また、パフォーマンスを維持するためにデータベースの監視も重要です。監視項目としてはデータベースサイズ・テーブルサイズ、トランザクション量、ディスクI/Oなどが挙げられます。これらを測定し、可視化することでディスクのキャパシティがどれくらいかやパフォーマンスが低下する兆候を事前に把握し対策することが出来るため、データベース運用に監視は必須といえるでしょう。</p>

<p>また、PostgreSQLの特徴として、レコードが削除されても削除した領域が不要領域としてディスク上に残り、ディスク使用効率が落ちるという問題があります。この不要領域を再利用可能領域として回収するVACUUM処理が実際になされていないために性能劣化が起こることがあります。（エンジニアが性能劣化で呼び出されるとVACUUM処理をしていないだけだったということが過去には結構あったそうです。）VACUUM処理も自動化できるコマンドもあり、工数のかかるメンテナンスを省力化していくことも可能です。</p>

<p>　データベースの運用管理には初期設定段階から監視、そしてメンテナンスと一連の流れで運用することが重要ということで、実際の運用に役立つ内容をお聞きすることができとても参考になりました。</p>

<h1>DBサーバーのパフォーマンスチューニング 松信嘉範さん</h1>

<p><a href="http://www.mysql.gr.jp/frame/modules/bwiki/index.php?matsunobu">（資料：http://www.mysql.gr.jp/frame/modules/bwiki/index.php?matsunobu）</a></p>

<p>松信さんからは、著書「Linux-DBシステム構築/運用入門」より、インデックスのチューニング、Linux上でデータベースを用いる際のチューニングテックニック、そしてストレージとしてSSDを用いるメリットと注意点という内容で、MySQLを中心にお話し頂きました。</p>

<p><span class="mt-enclosure mt-enclosure-image" style="display: inline;"><a href="http://heartbeats.jp/hbblog/assets_c/2009/11/hbstudy5_2-22.html" onclick="window.open('http://heartbeats.jp/hbblog/assets_c/2009/11/hbstudy5_2-22.html','popup','width=640,height=480,scrollbars=no,resizable=no,toolbar=no,directories=no,location=no,menubar=no,status=no,left=0,top=0'); return false"><img src="http://heartbeats.jp/hbblog/assets_c/2009/11/hbstudy5_2-thumb-300x225-22.jpg" width="300" height="225" alt="hbstudy5_2.jpg" class="mt-image-center" style="text-align: center; display: block; margin: 0 auto 20px;" /></a></span></p>

<p>　最初にデータベースのチューニングポイントということで、blogエントリ用のテーブルを例に紹介頂きました。
まず、データベースチューニングの基本として、データサイズをいかに小さくするということが重要となります。
そのためには、適切なデータ型を使うことでデータサイズを小さくすることが可能です。　
　またパフォーマンスに大きく影響する項目として、ディスクI/Oをいかに減らすかということが重要となります。blogのテーブルがuser<em>id（ユーザID）、post</em>date（投稿日）、title（タイトル）、body（本文）のような列を含む場合、通常はテーブルの大部分がbodyとなります。しかし実際は毎回bodyを参照するクエリは少なく、user<em>id、post</em>dateのみを参照するだけで完結してしまうクエリが多いため、bodyがメモリを占有しているので新たなアクセスに対し、新たなディスクI/Oが発生してしまうことになります。
　このような場合、bodyのような巨大な列を別のテーブルに移す等もパフォーマンスには効果的とのことです。（この場合正規化が崩れるという問題もある）。また巨大な列の扱いを最適化してくれるストレージエンジンもあり、そちらを使うのも手です。
　
　またディスクI/Oを減らす方法として、Covering Indexも有効。Covering Indexとは、アクセスしている列が全てインデックスに含まれる場合、クエリがそのインデックスのみを読むだけで完結するため、レコードへのI/Oを減らせるというものです。</p>

<p>　次にお話し頂いたLinux上でのチューニングは下記がポイントとなります。</p>

<p>　・メモリを十分にとり、ダイレクトI/Oを使用する。（ファイルシステムキャッシュを迂回することで高速化。大容量のメモリが必要）</p>

<p>　・適切なファイルシステムを選択する。ext3、xfs、ex2、btrfs等からシステム要件に合ったものを使用する。（ジャーナルの有り無し等）</p>

<p>　最後にお話し頂いたのは、ストレージとしてHDDの代わりにフラッシュメモリを用いたSSDを使用することでI/Oを高速化するという興味深い話題です。HDDとSSDのI/O性能の差のベンチマークをするとHDDのI/Oが500回/秒くらいのところをSSDだと25000回/秒となるそうです！さすがSSDといった感じです。
　HDDはシーケンシャルリード/ライトが得意、SSDはランダムリード/ライトが得意という特長を生かし、HDDとSSDを併用し適切にファイル配置で使用するこで安定性と価格面でメリットがありそうです。
　しかしSSDを用いれば複雑なチューニングをせずとも簡単にパフォーマンスをよくすることは可能ですが、SSDはまだ安定性などに製品差があるため製品選択には注意が必要とのことです。</p>

<p>今回お話し頂いたデータベースのパフォーマンスチューニングは、実戦的で非常に興味深い内容でした。
今やwebアプリケーションにってデータベース無くして語れないものとなっており、安定して高速な稼働が求められています。スケールアウトしなければ対応できない状況でも、適切なパフォーマンスチューニングを行うことで回避できる場合もあり、データベースを扱う上で必須の作業といえそうです。</p>

<h1>最後に</h1>

<p>貴重なお話をして頂きました永安さん、松信さん、そしてお越しいただいた皆様、本当にありがとうございました。</p>

<p>次回hbstudyは2009/12/5(土)に決定しました！たくさんのご参加をお待ちしております。
hbstudyの詳細につきましては<a href="http://heartbeats.jp/hbstudy/">http://heartbeats.jp/hbstudy/</a>もご確認ください。</p>
]]>
    </content>
</entry>

<entry>
    <title>Nagiosプラグイン自作方法の紹介</title>
    <link rel="alternate" type="text/html" href="http://heartbeats.jp/hbblog/2009/10/nagios-1.html" />
    <id>tag:heartbeats.jp,2009:/hbblog//2.12</id>

    <published>2009-10-19T02:04:54Z</published>
    <updated>2009-10-19T02:12:39Z</updated>

    <summary>こんにちは。ハートビーツ運用スタッフの津田です。 ハートビーツからお届けする技術...</summary>
    <author>
        <name>津田均</name>
        
    </author>
    
        <category term="監視" scheme="http://www.sixapart.com/ns/types#category" />
    
    <category term="nagios" label="nagios" scheme="http://www.sixapart.com/ns/types#tag" />
    <category term="ubuntu" label="ubuntu" scheme="http://www.sixapart.com/ns/types#tag" />
    
    <content type="html" xml:lang="ja" xml:base="http://heartbeats.jp/hbblog/">
        <![CDATA[<p>こんにちは。ハートビーツ運用スタッフの津田です。</p>

<p>ハートビーツからお届けする技術情報の初回シリーズ、Nagiosについての第4回です。</p>

<p>第3回ではNagiosの監視プラグインで、aptでインストールできるものをご紹介しましたので
今回は自作監視プラグインの作り方をご紹介します。 <br />
(ただし、ここではサービス監視に関するものをご紹介します。ホスト監視についてや、
細かい仕様については公式ドキュメントの<a href="http://nagios.sourceforge.net/docs/3_0/pluginapi.html">Nagios Plugin API</a>などをご覧下さい。）</p>
]]>
        <![CDATA[<p>"作り方"と言っても、専用のプログラミング言語があるわけではありません。</p>

<p>プラグインを使って監視をしたいサーバで動くプログラミング言語であれば、どんな言語でも構いません。  前回ご紹介したプラグインはC言語で書かれていますが、シェルスクリプトや
Perl,Ruby,Pythonで書いても構わないんです。</p>

<p>Nagiosで動くプラグインを作るための2つの約束事を、順番にご紹介しましょう。</p>

<h1>約束事1：プラグイン自体の返り値が0,1,2,3のどれかであること</h1>

<p>プラグインの終了コードは、サービスのプラグインとして使う場合は</p>

<ul>
<li>0:OK</li>
<li>1:WARNING</li>
<li>2:CRITICAL</li>
<li>3:UNKNOWN</li>
</ul>

<p>を表します。例えばシェルスクリプトであればexitコマンドで
終了コードを指定してプログラムを終了することが出来ます。</p>

<h1>約束事2：最低でも一行のテキストを標準出力へ出力すること</h1>

<p>終了コードの補足情報として、テキストを1行持たせることが出来ます。
例えばシェルスクリプトであれば、echoコマンドなどを使うだけです。
ただし2行目以降は無視されてしまいますので、改行をいれずに出力して下さい。
1行も出力が無い場合にはNagios側がエラーと見なしてしまい、UNKNOWNとして補足されてしまいます。</p>

<h1>サンプルコード</h1>

<p>以上を踏まえた<code>check_dummy</code>をシェルスクリプトで簡単に作ってみましょう。
<code>check_dummy</code>はもらった引数が0,1,2,3であれば、それに応じたステータスをそのまま返すプラグインです。</p>

<pre><code>
#!/bin/sh

# 終了コード
OK=0
WARNING=1
CRITICAL=2
UNKNOWN=3

# オプションを1つ受け取って、変数 status に格納します。
if [ $# != 1 ]
then
  echo "Just 1 argument is permitted."
  exit $UNKNOWN
else
  status=$1
fi

# 変数 status が 0,1,2,3 のどれかなら、それに応じたステータスを返し、終了します。
# 0,1,2,3 以外であれば UNKNOWN としてみましょう。
case $status in
  0)  echo "** OK **"
      exit $OK ;;
  1)  echo "** WARNING **"
      exit $WARNING ;;
  2)  echo "** CRITICAL **"
      exit $CRITICAL ;;
  3)  echo "** UNKNOWN **"
      exit $UNKNOWN ;;
  *)  echo "The argument $status is not permitted."
      exit $UNKNOWN ;;
esac

# 上で分岐が網羅されていれば、ここには来ませんが、念のため。
echo "** Error **"
exit $UNKNOWN
</code></pre>

<p>とても簡単なスクリプトでしたが、雰囲気はつかんで頂けたでしょうか？</p>

<h1>応用例</h1>

<p>ハートビーツでは主にaptでインストールできるプラグインを使用していますが、各案件に応じたプラグインを作成することもよくあります。</p>

<p>例えば1時間に3通受信して欲しいメールがあり、3通未満であればエラーを出すような監視がしたいとしましょう。  メールに対する監視であれば、Procmailと連携させるととても便利です。</p>

<p>受信して欲しいメールが来たら、Procmailから何らかのスクリプトへ処理を受け渡し、どこかのファイルへ受信数を保存します。プラグインとして実装すべき部分は、その保存された受信数を見に行き、ある時間に3通未満であればWARNINGやCRITICALとする部分のみです。</p>

<p>他には、会員制のホームページがあったとして、ログインした後に所定のページを回るまでに何秒かかるかを監視することも出来ます。  弊社ではLWP::UserAgentを利用して、Perlでこれを実装しています。</p>

<p>今あるプラグインを無理に作らなくても結構ですが、少し手を加えることでNagiosで出来ることはグンと広がります。是非挑戦してみてください！</p>
]]>
    </content>
</entry>

<entry>
    <title>インフラエンジニア勉強会 hbstudy#4 が開催されました</title>
    <link rel="alternate" type="text/html" href="http://heartbeats.jp/hbblog/2009/10/-hbstudy4.html" />
    <id>tag:heartbeats.jp,2009:/hbblog//2.11</id>

    <published>2009-10-06T07:56:30Z</published>
    <updated>2009-10-13T01:45:39Z</updated>

    <summary>こんにちは。ハートビーツ運用スタッフの稗田です。 先日10月3日(土)、西新宿の...</summary>
    <author>
        <name>稗田直人</name>
        
    </author>
    
        <category term="イベント" scheme="http://www.sixapart.com/ns/types#category" />
    
    
    <content type="html" xml:lang="ja" xml:base="http://heartbeats.jp/hbblog/">
        <![CDATA[<p>こんにちは。ハートビーツ運用スタッフの稗田です。</p>

<p>先日10月3日(土)、西新宿の会議室にて、ハートビーツ主催のインフラエンジニア勉強会 hbstudy の第4回が行われ、前半は藤倉和明さんより仮想化技術であるOpenVZについて、後半は民田雅人さんよりDNSの拡張であるDNSSECのお話を頂きました。</p>

<p>では、そのレポートをどうぞ。</p>
]]>
        <![CDATA[<h1>OpenVZのお話 藤倉和明さん</h1>

<p><a href="http://www.slideshare.net/fujya/open-vz-2118072">(資料：http://www.slideshare.net/fujya/open-vz-2118072)</a></p>

<p>藤倉さんからは、OpenVZの使い方から、実際に現場で遭遇したトラブル・その解決策についてお話しして頂きました。</p>

<p><span class="mt-enclosure mt-enclosure-image" style="display: inline;"><a href="http://heartbeats.jp/hbblog/assets_c/2009/10/IMG_5249-7.html" onclick="window.open('http://heartbeats.jp/hbblog/assets_c/2009/10/IMG_5249-7.html','popup','width=640,height=480,scrollbars=no,resizable=no,toolbar=no,directories=no,location=no,menubar=no,status=no,left=0,top=0'); return false"><img src="http://heartbeats.jp/hbblog/assets_c/2009/10/IMG_5249-thumb-300x225-7.jpg" width="300" height="225" alt="IMG_5249.jpg" class="mt-image-center" style="text-align: center; display: block; margin: 0 auto 20px;" /></a></span></p>

<p>OpenVZはOSレベルでの仮想化技術であり、コンテナ(OpenVZではゲストOSのことをコンテナと呼ぶそうです)の実行速度がほぼネイティブでの実行速度と変わらないのが特徴です。そのかわり、コンテナのOSはホストOSによって制限されます。</p>

<p>藤倉さんの挙げるOpenVZの特徴の一つに、コンテナのメモリサイズを最大値で指定するというものがあります。そのため余っているメモリをフルに活用できるのが利点です。</p>

<p>OpenVZ固有のコマンドの説明もあり、その中でおもしろかったものは"vzyum"です。ホストOSからコンテナのパッケージ管理が行えるため、サーバ管理者には強力なコマンドになるでしょう。</p>

<p>そしてここからが本題ともいえる、現場で遭遇したトラブル集です。</p>

<p>一つ目は、memcachedが使えないというトラブル。
稼働中のコンテナが1つの場合は使えるのに、2つ以上になるとmemcachedが使えなくなるという事例があったそうです。
こちらはコンテナの仮想ネットワークインターフェースとの相性が悪かった(ルーティングキャッシュの遅延?)ことによるそうです。</p>

<p>二つ目は、Emailが送信できないトラブル。
アプリケーションサーバにて、perlのプロセスが3GB程のメモリを使っていたそうなのですが、ここからqmailにforkする際メモリ容量が足りなかったのが原因のようです。
そこで、"vmguarpages"コマンドにより、メモリサイズの保証できる下限値を設定することで解決できたそうです。</p>

<p>最後に、コンテナにてNFSが使えないというトラブル。
NFSはカーネルでサポートされているためコンテナ上でカーネルを再構築する必要があるためそのままでは使えませんが、UNFSというユーザスペースで稼働するNFSを導入することで解決できたそうです。</p>

<p>その後にOpenVZの注目の機能、P2V(物理サーバをコンテナ化できる)や、Live Migration(コンテナのメモリをダンプして別のサーバに移すことで、コンテナを停止することなく別サーバに移動する)の紹介がありました。</p>

<p>残念ながら藤倉さんのノートパソコンとプロジェクターの相性が悪く、予定していらっしゃったLive Migration等の実演はできなかったのですが、現場での使用感を聞くことができ、とても参考になりました。</p>

<h1>今こそDNSSEC！ 民田雅人さん</h1>

<p>日本レジストリサービスの民田さんからは、DNSキャッシュポイズニングを防ぐための次世代DNSである、DNSSECのお話がありました。</p>

<p><span class="mt-enclosure mt-enclosure-image" style="display: inline;"><a href="http://heartbeats.jp/hbblog/assets_c/2009/10/IMG_0110-10.html" onclick="window.open('http://heartbeats.jp/hbblog/assets_c/2009/10/IMG_0110-10.html','popup','width=1024,height=768,scrollbars=no,resizable=no,toolbar=no,directories=no,location=no,menubar=no,status=no,left=0,top=0'); return false"><img src="http://heartbeats.jp/hbblog/assets_c/2009/10/IMG_0110-thumb-300x225-10.jpg" width="300" height="225" alt="IMG_0110.jpg" class="mt-image-center" style="text-align: center; display: block; margin: 0 auto 20px;" /></a></span></p>

<p>ユーザはサイトの閲覧等をする際、ドメインに対応するIPアドレスをキャッシュDNSサーバに問い合わせますが、このIPアドレスは悪意のあるユーザによって詐称されることがあります。これがDNSキャッシュポイズニングです。</p>

<p>過去、Kashpureff型、偽装応答型といった攻撃方法が発見されましたが、前者はプログラム的に防ぐことができ、後者もキャッシュサーバがDNSレコードをキャッシュしておく時間(TTL)により、攻撃が成功する確率は非常に低いとされていました。
しかし、もともとDNSプロトコルは改ざんされやすいUDPを利用しているため、次なる方法が発見されることになります。
それがKaminsky型の攻撃であり、存在しないサブドメインに絞って総当り的に攻撃することでTTLの制約を無視し、高い成功率でDNSキャッシュポイズニングを実現することができました。
利用するポート番号をランダムにすることで攻撃の脅威は避けられましたが、それでも理想的な環境では、たった10時間でアタックに成功するという報告さえあるそうです。</p>

<p>そこでDNSに署名を行い、正当な管理者からの情報であること・改ざんのないことを保障するよう改善されたのがDNSSEC(DNS SECurity Extensions)です。
DNSSECはDNSの拡張であり、権威サーバが応答を署名することで、ルートサーバからドメインを管理するネームサーバまで連鎖的に情報が保障されます。
しかし、署名を行うための鍵の管理・更新が複雑になること、トラフィックやネームサーバの負荷が増大するなど、導入に向けて課題が残っています。スウェーデンでは2005年より導入されていますが、ルートサーバや日本等、多くのドメインでは導入に至っていません。</p>

<p>DNSは非常に身近なプロトコルでありながら関心を呼びづらいため、敷居を高く感じやすいものです。
知っているようで意外と知らないことが多いDNSを、この機会にもう一度勉強してみてはいかがでしょうか(このブログでもネームサーバの運用について触れられたらいいですね！。)</p>

<h1>最後に</h1>

<p>貴重なお話をして頂いた藤倉さん、民田さん、そしてお越しいただいた皆様、本当にありがとうございました。
次回hbstudyの詳細につきましては<a href="http://heartbeats.jp/hbstudy/">http://heartbeats.jp/hbstudy/</a>にて追って告知致します。興味のある方はぜひご確認ください！</p>
]]>
    </content>
</entry>

<entry>
    <title>Nagiosプラグインの紹介</title>
    <link rel="alternate" type="text/html" href="http://heartbeats.jp/hbblog/2009/09/nagios.html" />
    <id>tag:heartbeats.jp,2009:/hbblog//2.10</id>

    <published>2009-09-29T10:39:41Z</published>
    <updated>2009-09-29T10:56:25Z</updated>

    <summary>こんにちは。CTOの馬場です。 ハートビーツからお届けする技術情報の初回シリーズ...</summary>
    <author>
        <name>馬場俊彰</name>
        <uri>http://heartbeats.jp/</uri>
    </author>
    
        <category term="監視" scheme="http://www.sixapart.com/ns/types#category" />
    
    <category term="nagios" label="nagios" scheme="http://www.sixapart.com/ns/types#tag" />
    <category term="ubuntu" label="ubuntu" scheme="http://www.sixapart.com/ns/types#tag" />
    
    <content type="html" xml:lang="ja" xml:base="http://heartbeats.jp/hbblog/">
        <![CDATA[<p>こんにちは。CTOの馬場です。</p>

<p>ハートビーツからお届けする技術情報の初回シリーズの、Nagiosについての第3回です。</p>

<p>今回は、Nagiosの監視プラグインについてご紹介します。</p>

<p>独自に作るのも簡単にできるんですが、まずはaptでインストールできるものを一通りご紹介します。これだけでもかなりの量があるので、さっと試す分には十分だと思います。</p>
]]>
        <![CDATA[<p>すべて、<code>/usr/lib/nagios/plugins/</code>に配置されます。</p>

<p>いずれのコマンドも、たいがい<code>-h</code>オプションをつけてコマンドラインで実行するとUsageが表示されるので、困ったらやってみましょう。</p>

<p><strong><em>nagios-plugins-basic</em></strong></p>

<ul>
<li><code>check_apt</code>  - apt(apt-getのapt)でエラーがないか、更新すべきファイルが残っていないか確認します。チェックに少し時間がかかるので、あまりに頻繁にチェックすると問題になるかもしれません</li>
<li><code>check_by_ssh</code>  - あるホストにsshでログインし、引数で指定したコマンドを実行して結果を確認します。パスワードは指定できないので、パスフレーズなしの公開鍵認証でのログインを想定しているようです</li>
<li><code>check_clamd</code> - あるホストのClamd(アンチウィルスのClamAVのデーモン)と通信可能か確認します。</li>
<li><code>check_cluster</code> - 複数のホストorサービスをまとめてclusterとして定義し、そのclusterの状態が正常かどうかをNagiosサーバで確認します。ホスト・サービスの指定にはon-demand macro(on-demand service macro, on-demand host macro)を使うため、コマンドラインでの実行は難しいかもしれません</li>
<li><code>check_dhcp</code> - DHCPサーバの動作を確認します。応答すべきDHCPサーバのIPアドレスをチェックしたりできます</li>
<li><code>check_disk</code> - 自ホストのディスクの空き容量を確認します。容量指定・%指定ができます</li>
<li><code>check_dummy</code> - 引数で指定されたステータスを返します</li>
<li><code>check_file_age</code> - 自ホストのファイルが指定秒数以内に更新されていることを確認します。閾値として、指定サイズ以上であるということも合わせて確認できます</li>
<li><code>check_ftp</code> - あるホストにftp接続ができることを確認します</li>
<li><code>check_http</code> - あるホストにHTTP(HTTPS)接続ができることを確認します。文字列検知、認証、ユーザエージェント指定などに対応しています</li>
<li><code>check_icmp</code> - あるホストにICMPパケットを送り、応答を確認します</li>
<li><code>check_ide_smart</code> - 自ホストのディスクのSMART値を確認します</li>
<li><code>check_imap</code> - あるホストにIMAP(IMAPS)接続ができることを確認します</li>
<li><code>check_ircd</code> - あるホストにIRC接続ができることを確認します。同時接続数も同時に確認できます</li>
<li><code>check_jabber</code> - あるホストにJABBER(over SSL)接続ができることを確認します</li>
<li><code>check_load</code> - 自ホストのロードアベレージを確認します。1分平均、5分平均、15分平均を確認できます</li>
<li><code>check_log</code> - 自ホストのあるファイルに対してパターンマッチで出力を確認します。ファイルを2つ指定し、2つのファイルに対してパターンマッチを適用した結果が異なるかどうかを確認します</li>
<li><code>check_mailq</code> - 自ホストのメールキュー滞留数を確認します。sendmail、qmail、postfix、eximに対応しています</li>
<li><code>check_mrtg</code> - 自ホストのMRTGログファイルを確認します。MRTGで取得した値・データの最終更新時間を確認できます。値の平均値・最大値の確認もできます</li>
<li><code>check_mrtgtraf</code> - 自ホストのMRTGログファイルを確認します。MRTGで取得した値・データの最終更新時間を確認できます。値の平均値・最大値の確認もできます。2値が同時に確認できるのが特徴です</li>
<li><code>check_nagios</code> - 自ホストのnagiosログファイルを確認します。ログファイルが指定した時間以内に更新されていることを確認します</li>
<li><code>check_nntp</code> - あるホストにNNTP接続できることを確認します</li>
<li><code>check_nntps</code> - あるホストにNNTPS接続できることを確認します</li>
<li><code>check_nt</code> - あるホスト(Windows)のNSClientからデータを取得し、値が閾値を超過していないことを確認します</li>
<li><code>check_ntp</code> - deprecatedとのこと。<code>check_ntp_peer</code>か<code>check_ntp_tim</code>を使いましょう</li>
<li><code>check_ntp_peer</code> - あるホストのNTPサーバの動作を確認します。時刻ずれの大きさも確認できます</li>
<li><code>check_ntp_time</code> - あるホストの、NTPサーバとの時間のずれを確認します。時刻ずれの大きさも確認できます</li>
<li><code>check_nwstat</code> - あるNovellサーバのMRTGEXT NLMと通信し、様々な値を確認します</li>
<li><code>check_overcr</code> - あるホストのOver-CR collector daemonと通信し、様々な値を確認します</li>
<li><code>check_ping</code> - あるホストにPINGを実行し、応答時間・パケットロスを確認します</li>
<li><code>check_pop</code> - あるホストにPOP(POP3S)通信ができることを確認します</li>
<li><code>check_procs</code> - 自ホストのプロセスの状態を確認します。プロセス数、プロセスの状態(state)、PID,VSZ,RSS,PCPU,USER,引数,コマンドなどを条件として加えることができます</li>
<li><code>check_real</code> - あるホストにRTSP接続できることを確認します(動画再生のREALの意)</li>
<li><code>check_sensors</code> - <code>lm_sensors</code>を使い、自ホストのハードウェアステータスを確認します</li>
<li><code>check_simap</code> - あるホストにSIMAP(SIMAPS)接続ができることを確認します。SIMAP接続が何なのかは、いまいちよくわかりません。IMAPとIMAPSのことでしょうか...</li>
<li><code>check_smtp</code> - あるホストにSMTP(SMTP with TLS)接続できることを確認します</li>
<li><code>check_spop</code> - 3あるホストにSPOP(SPOPS)接続ができることを確認します。SPOP接続が何なのかは、いまいちよくわかりません。POP3とPOP3Sのことでしょうか...</li>
<li><code>check_ssh</code> - あるホストにSSH接続ができることを確認します</li>
<li><code>check_ssmtp</code> - あるホストにSSMTP(SSMTPS)接続できることを確認します。SSMTP接続が何なのかは、いまいちよくわかりません。SMTPSのことでしょうか...</li>
<li><code>check_swap</code> - 自ホストのSWAP空き容量が所定以上であることを確認します</li>
<li><code>check_tcp</code> - あるホストにTCP(SSL)接続ができることを確認します</li>
<li><code>check_time</code> - あるホストの時刻がずれていないことを確認します</li>
<li><code>check_udp</code> - あるホストにUDP(SSL)接続ができることを確認します</li>
<li><code>check_ups</code> - あるホストのUPSの状態を確認します。温度、ステータスを確認できます。www.networkupstools.orgのNetwork UPS Toolsが必要です</li>
<li><code>check_users</code> - 自ホストのログインユーザ数を確認します</li>
</ul>

<p><strong><em>nagios-plugins-extra</em></strong></p>

<ul>
<li><code>check_fping</code> - fpingを使ってあるホストの死活を確認します。使うためにはfpingコマンドにsuidフラグを立てる必要があります</li>
<li><code>check_game</code> - qstatを使ってあるホストのゲームサーバの状態を確認します</li>
</ul>

<p><strong><em>nagios-plugins-standard</em></strong></p>

<ul>
<li><code>check_bgpstate</code> - あるホストのBGPセッションを確認します</li>
<li><code>check_breeze</code> - あるホストのBreezecom wirelessの電波の強さを確認します</li>
<li><code>check_dig</code> - あるホストのDNSサービス稼働を、digを使って確認します</li>
<li><code>check_disk_smb</code> - あるホストのSMB共有ディスクの、ディスク使用量を確認します</li>
<li><code>check_dns</code> - あるホストに対してDNSクエリを発行し、結果として得られたIPアドレスが想定通りであるかを確認します</li>
<li><code>check_flexlm</code> - 自ホストのライセンスファイルを見て、Flexlmのライセンスを確認します</li>
<li><code>check_hpjd</code> - HPのプリンタ(JetDirect cardのついたもの)のステータスを確認します</li>
<li><code>check_ifoperstatus</code> - あるホストの、あるNICのoperational statusを確認します</li>
<li><code>check_ifstatus</code> - あるホストの、各NICのoperational statusを確認します</li>
<li><code>check_ldap</code> - あるホストのLDAP(SSL,TLS対応)応答が時間内にあることを確認します</li>
<li><code>check_ldaps</code> - 同上。<code>This detection is deprecated, please use 'check_ldap' with the '--starttls' or '--ssl' flags to define the behaviour explicitly instead.</code> とのこと。</li>
<li><code>check_linux_raid</code> - 自ホスト(linux)のraid(おそらくsoftware raid)のステータスを確認します</li>
<li><code>check_mysql</code> - あるホストのmysqlの状態を確認します。スレーブとして正常に機能しているか確認もできます</li>
<li><code>check_mysql_query</code> - あるホストのmysqlにクエリを発行し、結果を確認します</li>
<li><code>check_oracle</code> - あるホストのOracleの状態を確認します</li>
<li><code>check_pgsql</code> - あるホストのPostgreSQLの状態を確認します</li>
<li><code>check_radius</code> - あるホストのRADIUSと通信できるか確認します</li>
<li><code>check_rpc</code> - あるホストのRPCが利用できるか確認します</li>
<li><code>check_snmp</code> - SNMPを利用して、あるホストの状態を確認します。OIDを指定して値を取得し、結果をもとに判定ができます</li>
<li><code>check_wave</code> - あるホストの信号の強さを確認できるようです。いまいちよくわかりません</li>
</ul>
]]>
    </content>
</entry>

<entry>
    <title>Nagios3.0の基本設定</title>
    <link rel="alternate" type="text/html" href="http://heartbeats.jp/hbblog/2009/09/nagios30.html" />
    <id>tag:heartbeats.jp,2009:/hbblog//2.8</id>

    <published>2009-09-09T06:49:27Z</published>
    <updated>2009-09-09T09:11:15Z</updated>

    <summary>こんにちは。CTOの馬場です。 ハートビーツからお届けする技術情報の初回シリーズ...</summary>
    <author>
        <name>馬場俊彰</name>
        <uri>http://heartbeats.jp/</uri>
    </author>
    
        <category term="監視" scheme="http://www.sixapart.com/ns/types#category" />
    
    <category term="nagios" label="nagios" scheme="http://www.sixapart.com/ns/types#tag" />
    
    <content type="html" xml:lang="ja" xml:base="http://heartbeats.jp/hbblog/">
        <![CDATA[<p>こんにちは。CTOの馬場です。</p>

<p>ハートビーツからお届けする技術情報の初回シリーズの、Nagiosについての第2回です。</p>

<p>今回は設定についてご紹介します。</p>

<p>マニュアルなどにもあまり書いていない、俯瞰した内容を中心に話をすすめましょう。</p>
]]>
        <![CDATA[<h1>Nagiosの動作概要</h1>

<p>まずはNagiosの動作概要について見てみましょう。</p>

<p>Nagiosは、大きく3つの要素で成り立っています。</p>

<p><span class="mt-enclosure mt-enclosure-image" style="display: inline;"><a href="http://heartbeats.jp/hbblog/assets_c/2009/09/function_map-1.html" onclick="window.open('http://heartbeats.jp/hbblog/assets_c/2009/09/function_map-1.html','popup','width=1053,height=662,scrollbars=no,resizable=no,toolbar=no,directories=no,location=no,menubar=no,status=no,left=0,top=0'); return false"><img src="http://heartbeats.jp/hbblog/assets_c/2009/09/function_map-thumb-400x251-1.png" width="400" height="251" alt="Nagiosの動作概要" class="mt-image-center" style="text-align: center; display: block; margin: 0 auto 20px;" /></a></span></p>

<ol>
<li>CGI
<ul>
<li>Webインターフェースを提供します</li>
<li>Webインターフェースからある程度の操作(External Command)を実行することにより、Nagiosデーモンの動作を制御できます</li>
</ul></li>
<li>Nagiosデーモン
<ul>
<li>監視を司ります。チェックのスケジューリングや、監視プラグインの呼び出しなどを行います <br />
チェックの結果がエラーだった場合のリトライなども実施します</li>
<li>監視の結果をもとに、通知したりイベントハンドラを起動したりします</li>
<li>Webインターフェースからの操作(External Command)を受け付けます</li>
<li>監視結果を記録します</li>
</ul></li>
<li>監視プラグイン
<ul>
<li>実際に監視を実施します</li>
</ul></li>
</ol>

<h1>Nagiosの設定</h1>

<p>Nagiosの設定は、正直なところかなり複雑に見えます。 <br />
これは、設定ファイルがいくつもあったりして見渡しづらいのが原因だと思います。</p>

<p>でも、実はそんなに複雑じゃないんですよ。
まずはコアな部分を押さえましょう。</p>

<p><span class="mt-enclosure mt-enclosure-image" style="display: inline;"><a href="http://heartbeats.jp/hbblog/assets_c/2009/09/config_definition-4.html" onclick="window.open('http://heartbeats.jp/hbblog/assets_c/2009/09/config_definition-4.html','popup','width=519,height=284,scrollbars=no,resizable=no,toolbar=no,directories=no,location=no,menubar=no,status=no,left=0,top=0'); return false"><img src="http://heartbeats.jp/hbblog/assets_c/2009/09/config_definition-thumb-400x218-4.png" width="400" height="218" alt="Nagiosの設定概要" class="mt-image-center" style="text-align: center; display: block; margin: 0 auto 20px;" /></a></span></p>

<ul>
<li>ホスト定義(host)
<ul>
<li>監視対象ホストを定義します</li>
<li>名称やIPアドレスなどを設定します</li>
<li>物理的なトポロジに合わせて、親子関係を設定することができます</li>
<li>ホストごとに、ホスト死活監視用のコマンド(command)を設定できます</li>
<li>ホストごとに、ホストダウン時の通知先(contactgroup)を設定できます</li>
<li>ホストごとに、チェックする時間帯(timeperiod)を設定できます</li>
<li>ホストごとに、監視間隔の設定などもできます</li>
<li>その他にも、ホストごとに細かく動作を設定できます</li>
</ul></li>
<li>サービス定義(service)
<ul>
<li>ホストごとにサービスを定義します</li>
<li>サービスごとに、利用する監視で利用するコマンド(command)を設定できます</li>
<li>サービスごとに、サービス異常時の通知先(contactgroup)を設定できます</li>
<li>サービスごとに、チェックする時間帯(timeperiod)を設定できます</li>
<li>サービスごとに、監視間隔の設定などもできます</li>
<li>その他にも、サービスごとに細かく動作を設定できます</li>
</ul></li>
<li>コマンド定義(command)
<ul>
<li>実際に利用するコマンドを定義します</li>
<li>定義のときに使えない文字(セミコロンなど)があるので注意してください <br />
使えない文字を使いたいときは、マクロを使います</li>
</ul></li>
<li>コンタクト定義(contanct)
<ul>
<li>サービス異常などを検知したときの通知先を定義します</li>
<li>通知先ごとに、通知する時間帯(timeperiod)を設定できます</li>
<li>通知先ごとに、通知するイベントの種類 - warning, critical, recoveryなど - を設定できます</li>
<li>通知先ごとに、メールアドレスを設定できます <br />
pager(ポケベル)も指定できます</li>
</ul></li>
<li>コンタクトグループ定義(contactgroup)
<ul>
<li>通知先のグループを作成できます</li>
<li>グループごとに、通知先(contact)を複数設定できます</li>
</ul></li>
<li>タイムピリオド定義(timeperiod)
<ul>
<li>時間帯を定義します</li>
<li>曜日、時間帯(分単位)、日付指定、第○水曜日、などの指定ができます <br />
応用することで、祝日などに対応したタイムピリオドを定義できます</li>
</ul></li>
</ul>

<p>メインの設定ファイルはnagios.cfgなのですが、これらの定義はそのファイルには載っていません。</p>

<p>Nagiosの設定ファイルはIncludeを活用できる形になっていますので、うまく整理してみてください。 <br />
設定ファイルのリポジトリ管理と組み合わせるととても使いやすいですよ。</p>
]]>
    </content>
</entry>

<entry>
    <title>Ubuntu Server 9.04 で Nagios3.0 を使う</title>
    <link rel="alternate" type="text/html" href="http://heartbeats.jp/hbblog/2009/09/ubuntu-server-904-nagios30.html" />
    <id>tag:heartbeats.jp,2009:/hbblog//2.6</id>

    <published>2009-09-01T05:33:23Z</published>
    <updated>2009-09-01T09:15:58Z</updated>

    <summary>こんにちは。CTOの馬場です。 ハートビーツからお届けする技術情報の初回シリーズ...</summary>
    <author>
        <name>馬場俊彰</name>
        <uri>http://heartbeats.jp/</uri>
    </author>
    
        <category term="監視" scheme="http://www.sixapart.com/ns/types#category" />
    
    <category term="nagios" label="nagios" scheme="http://www.sixapart.com/ns/types#tag" />
    <category term="ubuntu" label="ubuntu" scheme="http://www.sixapart.com/ns/types#tag" />
    
    <content type="html" xml:lang="ja" xml:base="http://heartbeats.jp/hbblog/">
        <![CDATA[<p>こんにちは。CTOの馬場です。</p>

<p>ハートビーツからお届けする技術情報の初回シリーズとして、
弊社でも利用しているNagiosについて書いてみます。</p>

<p>・・・といっても、現代はリポジトリが整備されていて、
インストールだけならとても簡単です。 <br />
そこで今回はインストール<strong>だけなら</strong>いかに簡単かご紹介します。</p>
]]>
        <![CDATA[<h1>Apacheをインストール</h1>

<p>aptitudeで楽々インストール</p>

<pre><code>$ sudo aptitude install apache2
</code></pre>

<h1>Nagiosをインストール</h1>

<p>これもaptitudeで楽々インストール <br />
※dpkg-statoverrideは、ブラウザから各種操作を実施するために<strong>現時点では</strong>必要</p>

<pre><code>$ sudo aptitude install nagios3 \
 nagios3-common \
 nagios3-doc \
 nagios-images
$ sudo dpkg-statoverride --update --add nagios www-data 2710 /var/lib/nagios3/rw
$ sudo dpkg-statoverride --update --add nagios nagios 751 /var/lib/nagios3
</code></pre>

<p>ブラウザからアラーム音を出すために、音声ファイルをとってきておきます。</p>

<pre><code>$ cd /tmp
$ wget http://downloads.sourceforge.net/project/nagios/nagios-2.x/nagios-2.12/nagios-2.12.tar.gz?use_mirror=jaist  
$ tar zxf nagios-2.12.tar.gz  
$ sudo find nagios-2.12/ -name "*.wav" -exec cp '{}' /usr/share/nagios3/htdocs/media/. \;
</code></pre>

<h1>監視プラグインをインストール</h1>

<pre><code>$ sudo aptitude install nagios-plugins \
 nagios-plugins \
 nagios-plugins-basic \
 nagios-plugins-extra \
 nagios-plugins-standard \
 nagios-nrpe-plugin \
 nagios-snmp-plugins
</code></pre>

<h1>nrpe(監視エージェント)デーモンをインストール</h1>

<p>内部監視を実施する場合に必要です。</p>

<pre><code>$ sudo aptitude install nagios-nrpe-server
</code></pre>

<hr />

<p>以上でインストール完了です。実に簡単ですね！ <br />
ただし、ちゃんと設定しないと動かないのは相変わらずです。</p>

<p>と、いうわけで、次回は設定について解説する予定です。</p>
]]>
    </content>
</entry>

</feed>
