― Web Technology and Life ―

ubuntuにリソース監視ツールのCloudForecastを入れてみた~YAPC::Asia2010の復習(前編)~

2011-10-13
YAPC::Asia2011を前にして、YAPC::Asia2010の復習として、リソース監視ツールCloudForecastをubuntu系のサーバー群で使ってみたレポートです。監視うんぬんというキホンから、snmpうんぬんというはまりどころ、CloudForecast::Data::*との格闘が、主な内容です。

前置きと目次と前提

前置き

さてさて今日からYAPC::Asia2011ですね!今年もいろんなセッションに出たりしていろいろ情報収集したいところですが、そもそも去年の聞いたことちゃんと生かしているのか?というとわりとはっきり応えられないですよね!なので、前編と後編(後編ではPlackをつかった具体的なサーバー運用的なものの話)にわけて去年Welcome Perlっぽいテーマの学びとかの実践をレポートしたいと思います。で、前編の今回の目次は以下のようになります。

目次

  • 監視うんぬんと使用動機
  • CloudForecast本体のインストール
  • 監視したいサーバ毎の設定
  • CloudForecastの設定と起動
  • 解説/感想
  • 参考URL

サーバー前提

基本的に監視したいサーバーもCloudForecastを入れたサーバも以下のOSを前提にしています。

DISTRIB_ID=Ubuntu
DISTRIB_RELEASE=10.04
DISTRIB_CODENAME=lucid
DISTRIB_DESCRIPTION="Ubuntu 10.04 LTS"

監視うんぬんと使用動機

監視うんぬん

今年のYAPC::Asiaでたくさんの監視にまつわるセッションがありますが、そもそも監視って何でしょう?kazeburoさんのスライドに簡単にありますが、監視は主に「死活監視」と「リーソス監視」の二つあってそれぞれ以下のようになります。

死活監視

サーバがサーバが落ちているかpingとかhttpレスポンスとかでチェックして1か0で判断するもので、サービスの永続的な稼働を保証するために行うです。何かサービスとかシステムを作ったら最低でも死活監視だけやるのが通常ですが、いつも使っているものだと、いつも使うという人力で死活監視をやっており、意識しませんので、カバーしなくはいけないサービスが二つ三つになったときに早めに導入したいですね。

リーソス監視

サーバーリソース(CPU使用率とかロードアベレージとかハードディスク使用量とかメモリ使用量とか)を量的に監視するもので、主にサービスチューニング時に参考データとして利用するために行うものです。これはある程度サービスを運用して、今後も運用していきそうで、サービスの利用状況(頻度や利用内容)が変化していくときに、プログラムのチューニングやサーバー増強の必要が出てくると思うので、その際に非常に参考になるデータなので、そのちょっと前のタイミングで導入したいですね。

使用動機~CloudForecastはPerl製のリーソス監視ツール~

何故にわざわざ新しいツールを入れるの?っていう話ですが、CloudForecastはリーソス監視ツールでPerl製なので、Perlがわかる私にとっては、リソース監視が実際にしていることがコードを読みながら学べるというリーソス監視の勉強とPerlのコードリーディングという一石二鳥のすばらしいツールだと思い、また、いつまにかHDD使用量がMAXになっていたサーバがあったことから、重い腰をあげて導入することにしたのです。

CloudForecast本体のインストール

だらだら前置き的なことが長かったですが、早速実践です。まず本体のインストールですが、ホントに簡単でだいたい以下の通りで問題なく入れられると思います。

sudo aptitude isntall libsnmp-perl librrds-perl
git clone https://github.com/kazeburo/cloudforecast.git
cd ./cloudforecast
#私はperlbrewを使っています。
#ClouldForecastはシステムPerlを利用した方がいいとどこかで聞いた気がするので
#システムPerlに変えています
(perlbrew switch /usr/bin/perl)
mkdir extlib
wget --no-check-certificate http://cpanmin.us/
perl cpanm -v -L extlib Module::Install CPAN
perl cpanm -v -L extlib --installdeps .

監視したいサーバ毎の設定~snmpのインストールと設定~

このsnmpがriywoさんのレポートやkazeburoさんのスライドではあまり触れられていないのですが、ubuntuではデフォルトでsnmpが入っていないみたいなので(Fedoraはコアではいっていたので、Red Hat系は入っていて、Debian系は入っていないのかな?)、下記で触れますがわりとボトルネックになってきます。

snmpとは

私はCloudForecastをいれてはじめてしったんですが(苦笑)、昔ながらのMRTGとかで使うリソース監視には定番のプロトコルみたいです。簡単に私が理解した範囲でいうと、外部サーバーのリクエストに応じてCPU使用率とかメモリ使用率とか基本的なサーバーリソースの状態を返したりするプロトコル、です。下記に、参考URLをまとめますので、そちらを見てください。

snmpのインストール

snmpのインストール自体は簡単です。(私がいれたsnmpdのバージョンは5.4.2.1~dfsg0ubuntu1-0ubuntu2.1のようです。バージョンによる違いがあるかどうかはよく知りませんがもしものときは注意を)

sudo aptitude install snmpd 
(sudo aptitude install snmpwalk)

CloudForecastとかを入れるサーバだけsnmpwalkをいれておいてsnmp設定の確認用のsnmpwalkを使えるようにするのがいいと思います。そして、めんどくさい設定が以下です。

/etc/default/snmpdの編集

#SNMPDOPTS='-Lsd -Lf /dev/null -u snmp -I -smux -p /var/run/snmpd.pid 127.0.0.1'(コメントアウト)
SNMPDOPTS='-Lsd -Lf /dev/null -u snmp -I -smux -p /var/run/snmpd.pid'(追加)

/etc/snmp/snmpd.confの編集

# com2sec paranoid  default         public #←コメントアウト
com2sec readonly  192.168.1.0/24      public #← default とあった部分を、自分のネットワークの IP アドレスの範囲(CIDR)を書く。
com2sec readwrite localhost           private #← default とあった部分を、localhost に書き換える。

...

# group MyROSystem v1        paranoid #← MyROSystem あたりはコメントアウト
# group MyROSystem v2c       paranoid #← MyROSystem あたりはコメントアウト
# group MyROSystem usm       paranoid #← MyROSystem あたりはコメントアウト
group MyROGroup v1         readonly #← そのまま
group MyROGroup v2c        readonly #← そのまま
group MyROGroup usm        readonly #← そのまま
group MyRWGroup v1         readwrite #← そのまま
group MyRWGroup v2c        readwrite #← そのまま
group MyRWGroup usm        readwrite #← そのまま

...

#                context sec.model sec.level match  read   write  notif
# access MyROSystem ""  any  noauth  exact  system none  none #← コメントアウト
access MyROGroup     ""   any  noauth  exact  all        none  none #← そのまま
access MyRWGroup    ""   any  noauth  exact   all        all      none #← そのまま

# Check the / partition and make sure it contains at least 10 megs.
disk / 10000                                                 #← コメントアウトをとる

ファイアウォールをかけている場合

ufw allow proto udp from 192.168.0.0/16 to any port 161
ufw status
   Status: active
   To                         Action      From
   --                         ------      ----
   161/udp                    ALLOW       192.168.0.0/16 

設定後の処理

sudo service snmpd restart
#snmpの基本的な起動チェックをします
snmpwalk -c public -v 2c [みたいIP] 
#ほにゃほにゃ~ってたくさん出力されればたぶんオッケーです

CloudForecastの設定と起動

起動までの一連の流れですが以下です。とりあえず的なところでは、cloudforecast.yamlとserver_list.yamlとhost_config/basic.yamlの編集をします。私がはまったところは後ほど触れます。

cd ./cloudforecast
cp cloudforecast_sample.yaml cloudforecast.yaml 
cp server_list_sample.yaml server_list.yaml
vi server_list.yaml(編集)
vi host_config/basic.yaml(必要があれば編集)
mkdir data
CF_DEBUG=1 ./cloudforecast_radar -r > /tmp/cloudforecast_radar.log 2>&1 & #監視の起動
CF_DEBUG=1 ./cloudforecast_web -r > /tmp/cloudforecast_web.log 2>&1 & #監視のWeb画面の起動
#Perlのpsgiのスタンドアローンサーバでたちあがるので(http://localhost:5000/とか)アクセスしてみる
#なお、データの取得はデフォルトでは5分おきらしいので、グラフに描写は10分くらいたたないと判別できない

解説/感想

とりあえず、動かしてはまったこととか、これいいなと思ってメモったことを、感想とおりまぜながら、共有しておきたいと思います。

daemontoolsでプロセス管理

kazeburoさんのスライド抜粋ですが、以下のようにすると、ログがでるし、設定変更に自動で反応して再起動されるみたいです。良い感じですね!

#!/bin/sh
exec 2>&1
export CF_DEBUG=1
exec /path/to/cloudforecast/cloudforecast_radar -r -c /path/to/cloudforecast/cloudforecast.yaml -l /path/to/cloudforecast/server_list.yaml

CloudForecast::Data::*の設定の仕方がイマイチ謎

ディスクI/OやHDD使用量の推移を取得するCloudForecast::Data::Diskio、CloudForecast::Data::Diskがあるのですが、perldoc CloudForecast::Data::Diskioとしても設定の仕方がわかりませんでした。この2つに関しては、試行錯誤した後、以下のように設定したらうまくとれたみたいです。

#host_config/basic.yaml
component_config:
resources:
- traffic:eth0
  - basic
  - disk:/ #数字ではなくmountの位置を入力
  - diskio:sda #チェックしたパーティションを入力

Apacheの監視

apacheはmod_statusを使うので、監視先サーバーでモジュールを有効化しましょう。基本設定はリンク先のドキュメントの通りで何も難しくはないのですが、以下のような組み合わせ時に要注意。

IP制限とベーシック認証の合わせ技は複数のDirectroyやFileやLocationをApacheの設定内で書く場合は使わせないほうがいいでしょう。

MySQLの監視

mysqlに入るユーザーとPASSが必要なんですが、権限を限定した専用のユーザーを作成したほうがいいですね。とりあえず、PROCESSという権限が必要なので以下のようにユーザーを作成しておくといいと思います。

GRANT PROCESS ON *.* TO cloudforecast@"219.117.199.226" IDENTIFIED BY 'pass' WITH GRANT OPTION;

テスト用のsnmpの確認コマンド

CloudForecastでエラーができると思っても、SNMP経由のものはそもそも取得先サーバのSNMP設定が間違っているかもだから以下のようなコマンドをたたいて結果が取れるかどうかを確認すると安全です(snmpwalkが必要です)

メモリ使用率とかの確認
snmpwalk -v 2c -c public [チェックしたいIP] memory
ディスク使用量とかの確認
snmpwalk -v 2c -c public [チェックしたいIP] .1.3.6.1.4.1.2021.9.1
ディスクI/O関連の確認
snmpwalk -v 2c -c public [チェックしたいIP] .1.3.6.1.4.1.2021.13.15.1.1

その他

snmpは汎用的なプロトコルらしいのですが、設定においては環境による違いがありました。Ubuntu 9.10だと「/etc/default/snmpd」の設定が微妙に違っていました。

ubuntu10.04だとsnmpのmemSharedがとれない??きがします。(ご存知のかたいらしゃったら教えて頂けるとうれしいです!)

感想まとめ

意外に(?)苦戦しましたが、インフラとかあまり知らない私でもなんとか導入できたっぽいので、なかなかいいと思います。わからないところは、ググったりソースをみたりして学んでいきたいと思いますが、とりあえず、host_config/*.yamlの設定というか、CloudForecast::Data::*の使い方というかの参考情報がある助かりますねー。。。それにしても、いやはや、先人の知恵は偉大ですねー、ツールを入れると、監視したほうがいい項目も入っているかとても嬉しいです!今年のYAPCでも監視系を注目ですね!

参考URL

その他不明点は以下のあたりみるとSNMPも含めていい感じにできると思います。(YAPC::Asia2010のkazeburoさんのスライドは『ソースモニタリングツール「CloudForecast」入門 』に参考として載っているんで割愛)

Perl Linux update_at : 2013-08-21T11:54:44
hirobanex.netの更新情報の取得
 RSSリーダーで購読する   
blog comments powered by Disqus