50 posts categorized "サーバ・OS"

October 30, 2014

freeコマンドの出力結果について考える

Linuxの空きメモリ状況はfreeコマンドで確認できるのは有名ですが、出力結果がどのように構成されているのか正確に知らない部分があったので、今回改めて整理してみました。

【freeの出力結果を見てみる】
freeコマンドを実行すると下記のように表示されます。単位はKB(Kilo byte)です。

$ free
             total       used       free     shared    buffers     cached
Mem:       1018596     556204     462392        144      28188     403360
-/+ buffers/cache:     124656     893940
Swap:            0          0          0


【キャッシュ使用量込みの出力結果を見てみる】
まずはこの部分を見てみます。

             total       used       free
Mem: 1018596 556204 462392

これを見ると、トータルメモリは1,018,596KByte(約1GB)、使用量は556,204KByte(約556MB)、そして空きは462,392KByte(約462MB)です。
556,204+462,392=1,018,596なので計算が合いますね。

ちなみにここでusedに含まれる使用量にはキャッシュ使用分も含まれるので実際のデータはもっと小さいです。

【キャッシュ使用量抜きの出力結果を見てみる】
それではキャッシュ使用分を抜いたときはどうなるでしょうか?

             total       used       free
-/+ buffers/cache: 124656 893940

これを見ると、使用量は124,656KByte(約125MB)、そして空きは893,940KByte(約894MB)です。124,656+893,940=1,018,596となり、トータルメモリの数字(約1GB)と合います。
どうやらOSにはキャッシュとして、556,204-124,656=431,548KByte(約43MB)のメモリが使われていたようですね。


【キャッシュ使用量の出力結果を見てみる】
最後にそのキャッシュの使われ方を見てみます。

           shared    buffers     cached
Mem: 144 28188 403360

sharedは共有メモリに割り当てられたメモリのことを指しますが、これは昔の名残なようで現在は無視して良いようです。
buffersはバッファキャッシュに割り当てられたメモリで、ブロックデバイス用のキャッシュを指します。
cachedはページキャッシュに割り当てたメモリを指します。

sharedは無視して良いようなので、28,188+403,360を足すと431,548となり、先ほど計算した数字(約43MB)と合いますね。

【最後に】
・バッファキャッシュとページキャッシュの違いが紛らわしいですが、最近のKernelではページキャッシュに多くが統合されていると聞きます。(詳細はそのうち調べてみようと思います)


・一時的にキャッシュを解放したい場合は下記の通りです。100%完全に解放されるわけではありませんが。

$ echo 3 > /proc/sys/vm/drop_caches

| | Comments (0) | TrackBack (0)

March 30, 2014

パスワードなしでrsyncする方法

他のサーバにrsyncしたいときがあります。その場合考えなければならないのが認証です。よく見られるのは送信先のSSH公開鍵を送信元に登録することで認証をスルーする方法です。しかしrsyncの場合、そんなことをせずともパスワードなしでrsyncできるということを最近知りましたので記録を残しておきます。

【送信先での設定】
まずはパスワードなしでrsyncするために、送信先サーバに下記の要領で/etc/rsyncd.confに追記します。rsyncdの再起動は不要です。

[USERDATA]
   comment=user data
   path=/home/user
   read only=false
   uid=user
   gid=user
   hosts allow=送信元サーバのIPやFQDN
   hosts deny=*

【送信元でのrsync実行】
続いて送信元でのrsync実行となります。下記の要領でrsyncを実行するとパスワードが聞かれずrsyncが可能となります。

rsync -av /home/user/data user@DESTHOST::USERDATA


ご参考までに下記は通常のパスワードが聞かれるrsyncの実行方法です。

rsync -av /home/user/data user@DESTHOST:/home/user

| | Comments (0) | TrackBack (0)

December 16, 2013

LinuxでのNIC冗長化(bonding)を少し深く考えてみる

サーバNIC(Network Interface Card)の可用性向上や負荷分散にはNIC冗長化が有効です。NIC冗長化については拙著「インフラエンジニアの教科書」にも記しましたが、bonding、チーミング、リンクアグリゲーションなど様々な呼び名があります。今回はLinux上でのNIC冗長化の話しとなりますので、bondingについての話題となります。

【bondingとは】
bondingとは、複数のNICが搭載されているマシンのNICを束ねて1つの仮想的なNICとして扱うことのできる技術です。例えば1GbpsのNICポートが4つ搭載されているサーバとL2スイッチの間を4本のLANケーブルで接続してbonding設定を有効にさせると、冗長化が行われて最低1本が正常であれば1~3本に問題があっても通信が継続できたり、負荷分散が行われて通信帯域幅を4Gbpsに拡張されたりといった使い方ができます。

Linux Kernelに標準搭載されているbondingでは以下のように7つのmodeがあります。

mode 名称 負荷分散 冗長性 primary
指定 
Switch
機能 
監視
モード
送信 受信 MII ARP
0 balance-rr SW依存 × Ether Channel
全スレーブを順繰り(ラウンドロビン)に使ってパケットを送信。
送信のみ負荷分散。
1 active-backup × × 不要
1つのスレーブのみを active interfaceとしパケットを送信。
active interfaceに障害が発生した場合、他の backup slave を active interfaceに切り替え、冗長性を確保。
2 balance-xor SW依存 × Ether Channel
送信元/先 MACアドレスを元に送信スレーブを決定しパケットを送信。
送信のみ負荷分散。
3 broadcast SW依存 不明 要(設定不明)
全スレーブに同一パケットを送信。
このモードは通常の用途で使用されないので無視。
4 802.3ad SW依存 802.3ad ×
IEEE 802.3ad(LACP)に準拠したリンクアグリゲーション。
5 balance-tlb SW依存 不要 ×
スレーブの負荷に応じて送信スレーブを決定しパケットを送信。
送信のみ負荷分散。
6 balance-alb 不要 ×
balance-tlbの機能に加え、受信も負荷分散。
参考文献: bondingドライバの違いについて


【負荷分散する際気を付けること】
「1Gbpsを4本を束ねると4Gbpsになる」という理屈は理解しやすいですが、適切なmodeを選び適切に設定しないと、例えば送信側は4Gbpsのままだけど受信側は1Gbpsのままといったようなことが起こりがちなので注意が必要です。

bondingを設定する際、ネットワークスイッチ側でも設定が必要な場合とネットワークスイッチ側の設定が特に不要な場合があることにも注意が必要でしょう。

ただしネットワークスイッチ側の設定が特に不要な場合だと言われているmodeにおいてもネットワークスイッチやそのファームウェアバージョンによってはまれに正常に動作しなくなる場合も見受けられるので、本番環境に投入する際には事前検証が必須です。著者の所属する会社のネットワークエンジニア某氏によるとmode4をお勧めしていました。

【Linux Kernelのbondingは実運用に耐えうるものか?】
著者の経験ではLinux Kernelのbondingはどこの会社でも一般的に使われているものなので、適切に設定されていれば安定性についてはそれなりに信頼できそうです。他のホームページでは2つのNICポートでの事例ばかりですが、4つのNICポートでも8つのNICポートでも普通に動作します。

bondingを可用性向上目的で用いる場合は、mode1にてそれぞれのNICポートの配線を別々のネットワークスイッチに接続することをお勧めします。一方bondingを帯域幅増強目的で行う際は、全ての配線を同一ネットワークスイッチに接続するのが一番安定するはずです。ただしこれはネットワークスイッチの挙動に依存する部分でもありますので、複数ネットワークスイッチでも安定的に動作する可能性を否定するものではありません。このあたりはネットワークスイッチベンダーに問い合わせみると良いでしょう。

| | Comments (0) | TrackBack (0)

June 17, 2011

puttyをタブモードで使う

SSHクライアントソフトとして普段puttyを愛用していますが、タブモードで使えないことだけが不満でした。そこでなんとかならないかと調べてみたら、PuTTY Connection Managerを入れればよいとわかりましたのでご紹介します。(追記: 2014/12/16 現在は開発中止してるみたいです)

PuTTY Connection Manager

Downloads->Current beta versionの中にある「Standalone Executable」をダウンロードすれば、あとはそのexeファイルを実行し、putty本体の所在地を指定するだけでタブ版puttyが起動します。

Tabputty_2

※最後に「インフラエンジニアの教科書」という本を出版させていただきました!という宣伝で締めさせていただきます。

| | Comments (0) | TrackBack (0)

May 26, 2011

Linuxで突然キー入力が受け付けられなくなる問題の対策

コンソール上でキー操作をしている時に突然キー入力できなくなる問題に遭遇することがあります。これは簡単に再現&解除できます。

CTRL+s : キー入力できなくなったように見える操作
CTRL+q : キー入力できなくなった状態を解除する操作


このキー操作がどのような経緯で生まれたのか等は別のWEBサイトに譲るとして、この機能自体恒久的に必要ないという大多数の方は、以下のコマンドを実行することでキー入力が受け付けられなくなる機能が無効になります。

$ stty stop undef


ログイン毎にこの入力をするのが面倒な方は.bashrcに追記しておくと良いでしょう。

| | Comments (0) | TrackBack (1)

November 01, 2010

古いログを別のディレクトリに自動的に移動する方法

ログが溜まってくると、必要な情報を探しにくくなるので古いログを別のところに移動させたいと思うようになります。今回はそんな場合のためのcron設定を記してみます。

【cron設定】
いろいろな方法があるかと思いますが、今回はシンプルにいきます。

5 3 * * * /usr/bin/find /home/user/logs/*log -maxdepth 1 -type f -mtime +6 -exec /bin/mv {} /home/user/oldlogs/ \; 1> /dev/null

細かいオプションの意味は以下の通りです。

・「-maxdepth 1」・・・検索対象のディレクトリを1階層に制限する。
・「-type f」・・・検索対象をファイルに限定する。
・「-mtime +6」・・・データが修正された時間が7日以前のもの。+6とは7日(144時間)前~過去を指す。(+7でない点に注意)
・「-exec ~ \;」・・・「~」の部分のコマンドを実行する。
・「{}・・・ここにfindされたファイルのファイル名が入る。


【注意事項】
この方法で古いファイルを移動させる際、ログを吐き出す元アプリケーションを再起動しないとその後のログを吐き出さなくなる場合があります。その場合はrotatelogsかlogrotateを組み合わせるなどで回避する方法もあります。

| | Comments (0) | TrackBack (0)

October 26, 2010

サーバ間の設定ファイル差異を比較するスクリプト

サーバ台数が増えてくると、例えば同じ種類のサーバをスケールアウトしているとき、1台だけ設定ミスがあったとしてもなかなか気付きづらくなります。サービスの安定稼動のためにはこういった些細なミスは完全に潰しておく必要があります。そこで今回はサーバ間の設定ファイル差異を比較するスクリプトを作りましたのでご紹介してみます。


【前準備】
まずはこちらでも記したような方法で、パスワードなしで各サーバにSSH接続できるようにしておいてください。

【サーバ間の設定ファイル差異を比較するスクリプト】
下記スクリプトをどこかに保存してください。ファイル名は便宜上「filediff.sh」とでもしておきます。そして、今回比較するファイル名を羅列し、かつサーバ番号(下記の例だと10.0.0.1の設定ファイルを10.0.0.2~10の設定ファイルと比較しています)を書き換えてください。

$ cat > filediff.sh

~スクリプトの内容をペースト後、Ctrl+C~

$ chmod gou+x filediff.sh
$ vim filediff.sh

■filediff.sh

#!/bin/bash

FILES[0]="/etc/httpd/conf/httpd.conf"
FILES[1]="/etc/php.ini"
FILES[2]="/etc/my.cnf"

SVR_FROM=2 # サーバ番号始まり
SVR_TO=10 # サーバ番号終り

#
for file in ${FILES[@]};do
  echo "**************************************************"
  echo $file
  echo "**************************************************"
  scp 10.0.0.1:${file} /tmp/_a
  for i in `seq ${SVR_FROM} ${SVR_TO}`;
  do
    echo "[10.0.0.${i}]"
    scp 10.0.0.${i}:${file} /tmp/_b
    diff /tmp/_a /tmp/_b
    rm -f /tmp/_b
  done
  rm -f /tmp/_a
done

# 後処理
unset SVR_FROM
unset SVR_TO
unset FILES


【実行方法】

以下のように実行します。

$ filediff.sh

差異があると下記のように表示されます。

[10.105.4.33]
103c103
< ServerName web1:80
---
> ServerName web2:80


※緊急お知らせ
今週4~6名くらいで技術者交流会という名の飲み会を行なうことになったのですが、メンバーが全然集まっていません。当然面識がなくても構いませんのでどなたか飲みませんか? 参加可能な方は調整さんにエントリーお願い致します!
・・・ということで大変ありがとうございます。4名集まりましたので、10/27(水) 19:00 JR五反田駅改札を出たところ集合でいきましょう。多少であれば飛び入り参加もきっと大丈夫ですのでよろしくお願いいたしまーす。・・・ということで開催してきました。とても盛り上がって楽しかったですね。それにしても皆さん経験豊富だなあ、頑張らないとなあと思いました。またやりましょうね。

[調整さんにエントリー]

●開催趣旨:居酒屋土間土間で1時間525円飲み放題らしいので、たくさん飲みましょうというただそれだけになります。^^

| | Comments (0) | TrackBack (0)

October 24, 2010

WEB上からrsyncを実行する方法

各サーバ群にソースコードを配信するためにrsyncを使っているところも多いと思います。この操作をWEB上から行えるようになれば、例えばデザイナーがちょっとした画像データを配信するといった場面などで便利そうです。そこで今回はrsyncをWEB上から実行する方法について記してみたいと思います。


【ハマりどころ確認】
WEB上からrsyncを実行するのって、簡単に見えて実はちょっと難しいのです。ハマりどころは2つあります。それは

  (1) rsyncを実行するユーザがパスワードなしで配信先サーバにSSH接続できるようにしておかなければならない。

  (2) 配信先サーバでは、rsyncを実行するユーザと同じ名前のユーザで、該当ファイルやディレクトリの書き込み/編集権限を持っていなければならない。

というものです。

(1)については、こちらでも記したような方法で、パスワードなしで他のサーバにSSH接続できるようにしておかなければなりません。ただ厄介なのは、CentOSでyumを使ってapacheをインストールした場合、初期状態のままだとapacheユーザがnologinユーザ(すなわちログインできないユーザ)として登録されているので、これをログインできるユーザに直すところからはじめなければなりません。(注:もしくはapache起動ユーザを変えるという手もあります)

(2)については、配信先サーバ側でもapacheユーザとして該当ファイルやディレクトリに書き込みしに行きますので、パーミッション設定を行わなければなりません。方法としては、ファイルやディレクトリの所有者をapacheユーザにするか、もしくはファイルやディレクトリの所属グループをapacheにした上で、グループの書き込み権限を「w」にする方法があります。今回は後者の方法を採用しました。

ということを踏まえて、以降具体的な設定方法を記していきます。手順は面倒ですが、ほぼコピー&ペーストでいけるので作業自体はそんなに大変ではないかもしれません。


【配信元サーバ側の作業】
OSのapacheユーザがnologinになっているので、通常はapacheユーザでログインできませんが、今回は特別にapacheユーザでもログインできるようにします。(/etc/passwdのapacheユーザの最後の/sbin/nologinを/bin/bashにします)

# sed -i "s/apache:x:48:48:Apache:\/var\/www:\/sbin\/nologin/apache:x:48:48:
Apache:\/var\/www:\/bin\/bash/" /etc/passwd

apacheユーザの秘密鍵と公開鍵を置く場所を作ります。

# mkdir /var/www/.ssh
# chmod 700 /var/www/.ssh
# chown apache.apache /var/www/.ssh

apacheユーザの秘密鍵と公開鍵を作ります。

# su - apache

$ ssh-keygen -t rsa (とりあえず全部Enterで)

すると、秘密鍵(id_rsa)と公開鍵(id.rsa.pub)が生成されるので、公開鍵(id_rsa.pub)の中身をメモ帳などにコピーしておきます。(あとでペーストします。)

$ cat ~apache/.ssh/id_rsa.pub


【各配信先サーバ側の作業】
先程コピーした公開鍵をペーストしつつ、下記のスクリプトを実行します。特に一番最後の行がとても重要です。wwwディレクトリ配下をapacheユーザでも更新できるようにグループ変更を行っています。

# sed -i "s/apache:x:48:48:Apache:\/var
\/www:\/sbin\/nologin/apache:x:48:48:Apache:\/var\/www:\/bin\/bash/" /etc/passwd

# mkdir /var/www/.ssh
# chmod 700 /var/www/.ssh
# chown apache.apache /var/www/.ssh

# echo "ssh-rsa ABCDB3NzaC1yc2EAAAABIwAAAQEAuN0ZaKuttD5/XZna/B2vMKBe1VhuWu/mBqGoYncjkVM
qaWMBRyK1qI6sE4+2k2HGdJa3/RFQu5TMo1f3nxHpvM90wUMoyuTpu2b88WeWZ+ZZxjtS8E
ML5OGsnPBXJ0FMGhuIwQekIBWXiQ7VdfBEIMITngNqzhu+X3dZJgutaJudWyM0j4FZA0b9+
tVsTJw2Kz28r4HwR6Gkcl4vXAo4e4HS8Y7WlabTVXJIkKwN1VqfC/jMohXqUS3SkzMxpS0C
gII0Nmj0PNl+F7zPhJEpsVZbBP9vIYeOKzsKVnD3HWHeeW/QAwVguW8DG1xv4edTR5bwTHS
He3u4UVazwxaSFG== apache@web1
" >> /var/www/authorized_keys

# chown apache.apache /var/www/.ssh/authorized_keys
# chmod 600 /var/www/.ssh/authorized_keys

# chgrp -R apache /var/www/html ←超重要!

【rsync用スクリプトの準備】
細かくは説明しませんが、例えば以下のようなrsync用スクリプトを用意しておきます。

#!/bin/sh
servers[0]=10.0.0.1
servers[1]=10.0.0.2
servers[2]=10.0.0.3
for server in ${servers[@]};
  rsync -avz /var/www/html ${server}:/var/www/
done

【phpプログラムの準備】
そして最後に以下のようなphpプログラムを用意すれば、やっとWEB上からrsyncを実行できるようになります。

<?php
if (@$_GET["c"], ENT_QUOTES == "r") {
    system("/home/miracle/bin/myrsync.sh");
}
?>
<a href="rsync.php?c=r">[rsync]</a>

| | Comments (0) | TrackBack (0)

October 23, 2010

パスワードなしで他のサーバにSSH接続する方法

サーバ台数が増えてくると、サーバ間移動のたびにパスワード入力が求められるのが手間になってきます。これは何とかしたいところです。そこで今回はパスワードなしで他のサーバにSSH接続する方法を記していきます。

※今回、他のサーバにログインしようとするサーバを「admin」、ログインされるサーバを「web1」、対象ユーザを「user」としておきます。

【admin側の作業】
まずは秘密鍵と公開鍵を作ります。

$ su - user
$ ssh-keygen -t rsa (とりあえず全部Enterで)

すると、秘密鍵(id_rsa)と公開鍵(id.rsa.pub)が生成されるので、公開鍵(id_rsa.pub)だけを「web1」にコピーします。

$ scp /home/user/.ssh/id_rsa.pub user@web1:/home/user/.ssh/id_rsa.pub_admin


【web1側の作業】
adminからコピーされてきた公開鍵を「authorized_keys」というファイルに追加します。

$ su - user
$ cd .ssh
$ cat id_rsa.pub_admin >> authorized_keys
$ chmod 600 authorized_keys

すると、adminからweb1にパスワードなしでSSH接続できるようになります。

[user@admin ~] $ ssh web1

Last login: Sat Oct 23 00:42:19 2010 from admin
[user@web1 ~] $


ただ、この方法だとadminからログインされる全てのサーバにadminの公開鍵を配布するのが面倒なので、私は以下のようなスクリプトをログインされる側のサーバ上で実行して済ませています。

$ echo "ssh-rsa ABCDB3NzaC5yc2EAAAABIwAAAIEA0AIDjalANyx09R5KoWCBRheartsNMNmli95CBQ1eBhzZGEQRdHqyS4I9v/5qgKMsrgruhNMBlGUUrop19ALwodHB852vWvAZG3gReu2c3CbP9qGlA0mTG7nYUCWU0ggFwq1b+HAA5wF/BqkSvWXlTe+9G0/8nmgqZMzKr81fL2u8= user@web1" > /home/user/.ssh/id_rsa.pub_admin

$ chown user.user /home/user/.ssh/id_rsa.pub_admin
$ cat /home/user/.ssh/id_rsa.pub_admin >> /home/user/.ssh/authorized_keys
$ chmod 600 /home/user/.ssh/id_rsa.pub_admin
$ chmod 600 /home/user/.ssh/authorized_keys

| | Comments (0) | TrackBack (0)

October 18, 2010

サーバリソース監視ツール「munin」をCentOSで手軽に導入する方法

サーバリソース監視をする際、MTRG、Cacti、Nagiosなどを使う場合が多いですが、SNMPベースのツールは設定が面倒です。

そこで今回はSNMPを使わないお手軽サーバリソース監視ツールとしてmuninを手軽に導入する方法について記してみたいと思います。自動インストールスクリプト付きです。


【muninを使う前に最低限知っておいたほうが良いこと】
muninでは、監視用WEBサーバに入れるパッケージ「munin」と監視対象の各ノードに入れる「munin-node」があります。ただし監視用WEBサーバには「munin」だけでなく「munin-node」も入れなければなりません。


【監視用WEBサーバでの設定】
監視用WEBサーバ上では以下のスクリプトをroot権限で実行してみてください。(myhostnameのところだけそのサーバのホスト名に直した方がよいでしょう)

cd /root/Packages rpm -Uvh http://download.fedora.redhat.com/pub/epel/5/i386/epel-release-5-4.noarch.rpm

echo "[dag]" > /etc/yum.repos.d/dag.repo

echo "name=Dag RPM Repository for Red Hat Enterprise Linux" >> /etc/yum.repos.d/dag.repo

echo "baseurl=http://ftp.riken.jp/Linux/dag/redhat/el4/en/\$basearch/dag/" >> /etc/yum.repos.d/dag.repo

echo "gpgcheck=1" >> /etc/yum.repos.d/dag.repo

echo "gpgkey=http://dag.wieers.com/rpm/packages/RPM-GPG-KEY.dag.txt" >> /etc/yum.repos.d/dag.repo

echo "enabled=1" >> /etc/yum.repos.d/dag.repo

yum -y --enablerepo=dag install munin
yum -y --enablerepo=dag install munin-node

sed -i 's/enabled=1/enabled=0/' /etc/yum.repos.d/dag.repo

mkdir /var/www/munin
mkdir /var/www/munin/htmldir

chown munin.munin /var/www/munin/htmldir
chmod 755 /var/www/munin/htmldir

# munin.conf htmldir変更(9行目)
sed -i 's/# htmldir/htmldir/' /etc/munin/munin.conf

# munin.conf ホスト名に変更(60行目)
sed -i 's/localhost/myhostname/' /etc/munin/munin.conf

# munin-node.conf ホスト名指定(29行目)
sed -i 's/#host_name x86-19.phx2.fedoraproject.org/host_name myhostname/' /etc/munin/munin-node.conf

service munin-node start
chkconfig munin-node on


【各ノードでの設定】
各ノードでは以下のスクリプトをroot権限で実行してみてください。(myhostnameのところをそのサーバのホスト名に直すことと、監視サーバのIP指定部分だけ変更します)

cd /root/Packages rpm -Uvh http://download.fedora.redhat.com/pub/epel/5/i386/epel-release-5-4.noarch.rpm

echo "[dag]" > /etc/yum.repos.d/dag.repo

echo "name=Dag RPM Repository for Red Hat Enterprise Linux" >> /etc/yum.repos.d/dag.repo

echo "baseurl=http://ftp.riken.jp/Linux/dag/redhat/el4/en/\$basearch/dag/" >> /etc/yum.repos.d/dag.repo

echo "gpgcheck=1" >> /etc/yum.repos.d/dag.repo

echo "gpgkey=http://dag.wieers.com/rpm/packages/RPM-GPG-KEY.dag.txt" >> /etc/yum.repos.d/dag.repo

echo "enabled=1" >> /etc/yum.repos.d/dag.repo

yum -y --enablerepo=dag install munin-node

sed -i 's/enabled=1/enabled=0/' /etc/yum.repos.d/dag.repo

# munin-node.conf ホスト名指定(29行目)
sed -i 's/#host_name x86-19.phx2.fedoraproject.org/myhostname/' /etc/munin/munin-node.conf

# munin-node.conf 監視サーバからのアクセス許可(36行目)
sed -i 's/127\\.0\\.0\\.1\$/192\\.168\\.0\\.11\$/' /etc/munin/munin-node.conf

service munin-node start
chkconfig munin-node on


【動作確認】
WEBブラウザー上で以下のようなURLを開いてみてください。

http://monitoring.example.com/munin/

うまくいけば以下のような画面にたどり着きます。うまくいかなかった場合はapacheの設定を見直してみてください。

Munin


【監視項目の追加削除を行なう】
muninには監視項目をプラグインで追加削除できます。プラグイン追加といってもリンクを張るだけです。ここでは試しにApacheとMySQLを監視項目に加え、かつsendmailとntpを監視項目から外してみます。各ノード側で以下のスクリプトを実行してみてください。

ln -s /usr/share/munin/plugins/apache_accesses /etc/munin/plugins/apache_accesses

ln -s /usr/share/munin/plugins/apache_processes /etc/munin/plugins/apache_processes

ln -s /usr/share/munin/plugins/apache_volume /etc/munin/plugins/apache_volume

ln -s /usr/share/munin/plugins/mysql_bytes /etc/munin/plugins/mysql_bytes

ln -s /usr/share/munin/plugins/mysql_queries /etc/munin/plugins/mysql_queries

ln -s /usr/share/munin/plugins/mysql_threads /etc/munin/plugins/mysql_threads

rm -f /etc/munin/plugins/sendmail*

rm -f /etc/munin/plugins/ntp*

ただしこのままだと各ノードのApacheが必要な情報(server-status)を吐き出してくれないので、Apacheにも設定追加を行ないます。

echo "" >> /etc/httpd/conf/httpd.conf echo "ExtendedStatus On" >> /etc/httpd/conf/httpd.conf

echo "" >> /etc/httpd/conf/httpd.conf

echo "SetHandler server-status" >> /etc/httpd/conf/httpd.conf

echo "order deny,allow" >> /etc/httpd/conf/httpd.conf

echo "deny from all" >> /etc/httpd/conf/httpd.conf

echo "allow from 127.0.0.1" >> /etc/httpd/conf/httpd.conf

echo "" >> /etc/httpd/conf/httpd.conf

sed -i 's/#LoadModule status_module modules\/mod_status.so/LoadModule status_module modules\/mod_status.so/' /etc/httpd/conf/httpd.conf

service httpd graceful


【最後に】
以上のように、muninの導入は手軽なので非常に便利ですが、かゆいところに手が届かない気がするのも事実です。ただ本家のFAQは英語だけど割と親切なので一度目を通してみることをお勧めします。例えば集計間隔を5分以外に変える場合は /etc/cron.d/munin を編集してね、みたいなことが書いてあります。

| | Comments (0) | TrackBack (0)

より以前の記事一覧