munin 2.0 インストールしてみた

環境はVirtualBoxで稼動してる CentOS5.8 i386
とあえずローカルホストでMunin::MasterとMunin::Nodeが稼動するまでのログ。

参考にさせていただいたエントリなど。

perl moduleはCpanで入れるのもありだと思うけどrpm

wget http://download.fedoraproject.org/pub/epel/5/i386/epel-release-5-4.noarch.rpm
wget http://rpms.famillecollet.com/el5.i386/remi-release-5-8.el5.remi.noarch.rpm
rpm -ivh epel-release-5-4.noarch.rpm remi-release-5-8.el5.remi.noarch.rpm

yum install perl-Module-Build perl-HTML-Template perl-Log-Log4perl perl-Net-SSLeay perl-Net-SNMP perl-Net-Server
yum install fcgi fcgi-devel fcgi-perl
yum install perl-IO-Socket-INET6 perl-File-Copy-Recursive
yum install httpd mod_fcgid

muninアカウント追加

groupadd -r munin
useradd -r -g munin -d /opt/munin -s /sbin/nologin -c "Munin user" munin

インストール

wget http://downloads.sourceforge.net/project/munin/stable/2.0.0/munin-2.0.0.tar.gz?r=http%3A%2F%2Fsourceforge.net%2Fprojects%2Fmunin%2Ffiles%2Fstable%2F2.0.0%2F&ts=1339839300&use_mirror=jaist -O munin-2.0.0.tar.gz
tar xfz munin-2.0.0.tar.gz
cd munin-2.0.0
make
make install

cronファイルコピー

cp -pi build/resources/linux-cron.d_munin /etc/cron.d/munin

pluginファイルのシンボリックリンク(何もないとrootあてにメールが届くので適当にお好みで)

cd /etc/opt/munin/plugins
ln -s /opt/munin/lib/plugins/cpu cpu
ln -s /opt/munin/lib/plugins/df df

munin-node起動

/opt/munin/sbin/munin-node &

apache設定

sed -i 's/^ScriptAlias/\#ScriptAlias/g' /etc/httpd/conf/httpd.conf
vi /etc/httpd/conf.d/munin.conf

# Munin2
Alias /munin2/ /opt/munin/www/docs/


 AllowOverride All
 Options ExecCGI -MultiViews +SymLinksIfOwnerMatch
 Order allow,deny
 Allow from all


ScriptAlias /cgi-bin/  /opt/munin/www/cgi/


 AllowOverride None
 Options ExecCGI -MultiViews +SymLinksIfOwnerMatch
 Order allow,deny
 Allow from all



 SetHandler fcgid-script

パーミッション関連

chgrp -R apache /opt/munin/log/munin
chmod 775 /opt/munin/log/munin
mkdir -p /var/opt/munin/cgi-tmp/munin-cgi-graph/
chown munin:apache -R /var/opt/munin/cgi-tmp/
chmod 775 /var/opt/munin/cgi-tmp/
chmod 775 /var/opt/munin/cgi-tmp/munin-cgi-graph/

apache起動

service httpd start

バージョン1.4.7のmunin-nodeが稼動してるホストを試しにmunin.confに追加してみたら普通に値は取れた。
動的にグラフ作成されるタイミングでマシンに負荷が結構かかるんだなという感想だったけど、
mod_fcgiに変えてみたらかなり改善されたように感じた。mod_fcgi必須なのかな。

munin-nodeだけインストールする場合はこんな感じで

make
make install-common-prime install-node-prime install-plugins-prime

rpmでインストールされてるmunin-nodeが稼動してるマシンでバージョン2.0のmunin-node入れると同じperl
モジュールが存在してしまうので古いバージョンのmunin-nodeが起動しなくなる。

切り替えたい場合はモジュールを退避すればいいんだけどどうなんだろ。。。

mv -i /usr/local/share/perl5/Munin ~/.

spec書けってことですかね。
suse Linux用のspecはあるのにRHEL用はないという。。。

追記
fcgiの設定も様子をみながら調整したほうがよさそうですね。

IPCConnectTimeout 20
MaxProcessCount 8
DefaultMaxClassProcessCount 2
TerminationScore 10
SpawnScore 80
IdleTimeout 300

ほぼダウンタイムなしでinnodb plugin でのテーブル圧縮

  • 前提条件
    • innodb_file_per_tableが有効になってること
    • innodb pluginが使えるバージョンのMySQLであること

innodb_file_formatを下記のように変更

SET GLOBAL innodb_file_format=Barracuda;
SET GLOBAL innodb_file_format_max=Barracuda;

既存のテーブルとほぼ同じ構成の新しいテーブルを作成(ROW_FORMAT=COMPRESSED KEY_BLOCK_SIZE=4を追加しただけ)

CREATE TABLE `new_recipe_log` (
  `type` varchar(200) NOT NULL,
  `user_id` int(10) unsigned NOT NULL,
  `date` datetime NOT NULL,
  `recipe` mediumtext
) ENGINE=InnoDB DEFAULT CHARSET=utf8 ROW_FORMAT=COMPRESSED KEY_BLOCK_SIZE=4
 PARTITION BY RANGE (TO_DAYS(date))
(PARTITION p20120530 VALUES LESS THAN (735018) ENGINE = InnoDB,
 PARTITION p20120531 VALUES LESS THAN (735019) ENGINE = InnoDB,
 PARTITION p20120601 VALUES LESS THAN (735020) ENGINE = InnoDB,
 PARTITION p20120602 VALUES LESS THAN (735021) ENGINE = InnoDB,
 PARTITION p20120603 VALUES LESS THAN (735022) ENGINE = InnoDB,
 PARTITION p_max VALUES LESS THAN MAXVALUE ENGINE = InnoDB);

徐々にINSERT INTO SELECT

INSERT INTO new_recipe_log SELECT * FROM recipe_log WHERE date BETWEEN '2012-05-29 00:00:00' AND '2012-05-29 23:59:59';
INSERT INTO new_recipe_log SELECT * FROM recipe_log WHERE date BETWEEN '2012-05-30 00:00:00' AND '2012-05-30 23:59:59';
INSERT INTO new_recipe_log SELECT * FROM recipe_log WHERE date BETWEEN '2012-05-31 00:00:00' AND '2012-05-31 23:59:59';
INSERT INTO new_recipe_log SELECT * FROM recipe_log WHERE date BETWEEN '2012-06-01 00:00:00' AND '2012-06-01 23:59:59';
INSERT INTO new_recipe_log SELECT * FROM recipe_log WHERE date BETWEEN '2012-06-02 00:00:00' AND '2012-06-02 11:59:59';
INSERT INTO new_recipe_log SELECT * FROM recipe_log WHERE date BETWEEN '2012-06-02 12:00:00' AND '2012-06-02 17:59:59';
INSERT INTO new_recipe_log SELECT * FROM recipe_log WHERE date BETWEEN '2012-06-02 18:00:00' AND '2012-06-02 21:59:59';
INSERT INTO new_recipe_log SELECT * FROM recipe_log WHERE date BETWEEN '2012-06-02 22:00:00' AND '2012-06-02 22:59:59';
INSERT INTO new_recipe_log SELECT * FROM recipe_log WHERE date BETWEEN '2012-06-02 23:00:00' AND '2012-06-02 23:59:59';

適当なタイミングでRENAME TABLE(数秒かかる時もある)

RENAME TABLE recipe_log TO old_recipe_log,
             new_recipe_log TO recipe_log;

動作確認したらDROP TABLE

DROP TABLE old_recipe_log;

データが大きいとかなり時間かかります。

InnoDB を ARCHIVE ENIGINEに変えてみた

ALTER TABLEでパーティショニング

alter table foobar_log
PARTITION BY RANGE (TO_DAYS(ins_date)) (
  PARTITION p20120501 VALUES LESS THAN (734989),
  PARTITION p20120502 VALUES LESS THAN (734990),
  PARTITION p20120503 VALUES LESS THAN (734991),
  PARTITION p20120504 VALUES LESS THAN (734992),
  PARTITION p20120505 VALUES LESS THAN (734993),
  PARTITION p_max VALUES LESS THAN MAXVALUE
);

InnoDBからARCHIVE ENGINEに

alter table foobar_log ENGINE=ARCHIVE;
ERROR 1069 (42000): Too many keys specified; max 1 keys allowed

ARCHIVE ENGINEは1 KEYのみサポートなので怒られた

show index from foobar_log;
alter table foobar_log drop index hoge_level;
alter table foobar_log drop index bar_age;

ARCHIVE ENGINEに変更

alter table foobar_log ENGINE=ARCHIVE;
Query OK, 20093910 rows affected (13 min 29.84 sec)
Records: 20093910  Duplicates: 0  Warnings: 0

圧縮前に約7.8Gだったものが圧縮後には約632Mほどに。
他のテーブルもいくつかやってみたところ200%超の圧縮率になるものもあった。

適当なログ用のテーブルをやってみたけどログデータの保管に向いてるとは本当みたいです。
DELETEできないのはパーティショニングでカバーできそう。
UPDATE/REPLACEはないし。

InnoDB Pluginによる圧縮もやってみたけど圧縮率という意味ではARCHIVEのほうが良いです。
InnoDBの特性をそのままに圧縮もしたいというならPluginによる圧縮のほうが良いと思いました。
わかってた事だけど要は使い道次第ってことですね。

ウェブオペレーション ―サイト運用管理の実践テクニック (Theory in practice) 買ってみた

ウェブオペレーション ―サイト運用管理の実践テクニック (THEORY/IN/PRACTICE)

ウェブオペレーション ―サイト運用管理の実践テクニック (THEORY/IN/PRACTICE)

まだ読み途中。

mussh

大きめの環境になるとたくさんのホストにコマンド実行したい時とかにmusshは便利かも。
bashなので色々な環境にすぐ適用できそうな感じです。

CentOSでのインストールは簡単。

yum install mussh

rpmが使えない環境ならココから落とせる。
使いかたはmanとかhelpで見る限り簡単なので特に書くこともないと思う。

今の仕事場では同じようなツールがあるからあまり使う機会がないけど、aliasでいろいろ
やってみるのも楽しいかも。