muninでsnmp監視(CentOSからOSX Leopardを監視)

muninでsnmp監視

net-snmpのインストール
[code]# yum install net-snmp net-snmp-utils[/code]

監視対象の情報が取得できることを確認
[code]# snmpwalk -v 2c -c public server.local[/code]

muninの設定上監視対象にhost名がなければ付けておく(DNSで引けるなら不要)
[code]# /etc/hosts
192.168.0.100 server.local[/code]

muninの自動設定機能を利用
[code]#munin-node-configure –snmp server.local
ln -s /usr/share/munin/plugins/snmp__users /etc/munin/plugins/snmp_server.local_users
ln -s /usr/share/munin/plugins/snmp__load /etc/munin/plugins/snmp_server.local_load
ln -s /usr/share/munin/plugins/snmp__if_err_ /etc/munin/plugins/snmp_server.local_if_err_4
ln -s /usr/share/munin/plugins/snmp__if_err_ /etc/munin/plugins/snmp_server.local_if_err_6
ln -s /usr/share/munin/plugins/snmp__if_ /etc/munin/plugins/snmp_server.local_if_4
ln -s /usr/share/munin/plugins/snmp__if_ /etc/munin/plugins/snmp_server.local_if_6
ln -s /usr/share/munin/plugins/snmp__df /etc/munin/plugins/snmp_server.local_df
[/code]
出力されたln〜のコマンドを使ってシンボリックリンクを作成

host treeに監視対象を追記
[code]# vi /etc/munin/munin.conf

[localhost]
address 127.0.0.1
use_node_name yes
[server.local] ←監視対象の名前
address 127.0.0.1 ←監視するサーバのアドレス
use_node_name no[/code]

munin-nodeを再起動
[code]# service munin-node restart[/code]

監視対象側の設定(OSX Leopardの場合)
snmpdはインストール済みなので起動設定を行う

起動ファイルを作成
[code]$ sudo vi /Library/LaunchDaemons/snmpd.plist



Label
snmpd
OnDemand
Program
/usr/sbin/snmpd
RunAtLoad
[/code]

設定読み込み
[code]$ sudo launchctl load -w /Library/LaunchDaemons/snmpd.plist[/code]

起動
[code]$ sudo launchctl start snmpd[/code]

起動を確認
[code]$ sudo laof -i[/code]

動作の確認
[code]$ snmpwalk -v 2c -c public localhost
$ snmpwalk -v 2c -c private localhost[/code]

snmpdの設定
[code]$ sudo vi /etc/snmp/snmpd.conf

# sec.name source community
#com2sec local localhost private
#com2sec mynetwork NETWORK/24 public
com2sec local 192.168.0.0/24 public[/code]

監視ホスト(CentOS)から監視対象(OSX Leoprad)の情報が取得できることを確認する

, ,
とりあえず付けておく無駄ではなかったなまぁまぁ読めたちょっと役に立ったかなかなり良かったかも (まだ評価されていません)
Loading...

Debian環境でmuninによるCommuniGate ProとDisk状況監視

動作プロセスの状況やディスクについて更に詳細なデータを取得する設定手順

iostatが入っているか確認
# updatedb
# locate iostat

以下があればOK
/usr/bin/iostat

なければsysstatインストール
# apt-get install sysstat

監視ツールmuninインストール
# apt-get install munin munin-node

 プラグインの位置
 /etc/munin/plugins

 ノード再起動コマンド
 /etc/init.d/munin-node restart

muninはインストールした時点でDebianでは標準設定で動作。
http://hostname/munin/
でグラフが表示される。

この時点でiostat等いくらか必要なものは導入されグラフも見えるはずですが、より詳細な情報を得るため設定を追加します。

http://muninexchange.projects.linpro.no/
から必要なプラグイン以下の4つをダウンロード
 ・cpuload_
 ・multips
 ・cpubyuser
 ・linux_diskstat_

scpやftpなどで/etc/munin/pluginsに配置

プラグインを実行可能にします
# cd /etc/munin/plugins
# chmod 777 *

追加するプラグイン1「cpuload_」
プロセス毎のCPU負荷を表示します

 設定方法
 cpuload_[process]

 prosessはsshd,CGServerなどpsコマンド等で表示されるプロセス名
 今回はCommuniGate Proとclamdを監視する設定を追加します

 プラグインを複製し名前を変更します
 # cp cpuload_ cpuload_clamd
 # mv cpuload_ cpuload_CGServer

 必要な設定を追記します
 # vi /etc/munin/plugin-conf.d/munin-node

 以下の4行を書き込みます
 [cpuload_CGServer]
 env.process CGServer

 [cpuload_clamd]
 env.process clamd

追加するプラグイン2「multips」
プロセスの数を監視します

 設定方法
 # vi /etc/munin/plugin-conf.d/munin-node

 [multips]
 env.multipsnames clamd CGServer

追加するプラグイン3「cpubyuser」
ユーザ毎のCPU利用状況を監視します
通常CoomuniGate Proはroot権限で動作しているのですが、CommuniGate Proをrootでなく動作させる場合は有効です。(OSXなどではroot権限でなく動作させるのが容易です)

 設定方法例
 # vi /etc/munin/plugin-conf.d/munin-node

 [cpubyuser]
 env.USERS root clamav nobody

追加するプラグイン4「linux_diskstat_」
ディスクの動作状況を詳細に取得します

 設定方法
 linux_diskstat_[mode]_[device]

 [mode] = iops,throughput,latency

 deviceは # cat /proc/diskstats 内にある名前

 まず必要な情報を調べます。
 # cat /proc/diskstats が読めるか確認します

 # ls /sys/block を確認します
 sda hdaなどディスクの名前が並びますので、監視したいデバイスを選びます
 以下はsda1を監視する設定です

 diskstat設定が有効か調べる
 # cd /etc/munin/plugins
 # perl linux_diskstat_ autoconf
 yesと出ればOK noなら設定できない可能性があります

 標準で利用可能な設定を調べる
 # perl linux_diskstat_ suggest
 latency_sda1
 throughput_sda1
 iops_sda1

 該当の表示があればファイルを作成します
 # cp linux_diskstat_ linux_diskstat_latency_sda1
 # cp linux_diskstat_ linux_diskstat_throughput_sda1
 # cp linux_diskstat_ linux_diskstat_iops_sda1

 該当script用config
 # perl linux_diskstat_latency_sda1 config
 # perl linux_diskstat_throughput_sda1
 # perl linux_diskstat_iops_sda1

ここまで行ったらmunin-nodeを再起動して設定を反映します

# /etc/init.d/munin-node restart

これで必要な情報が取得されるはずです。
http://hostname/munin/
を適宜リロードして確認します。

エラーが発生している場合には以下にログが出るのでチェックします。
# tail -f /var/log/munin/munin-node.log

標準で入っている不要なプラグインは
/etc/munin/plugins
以下のシンボリックリンクを削除することで無効にします。

, ,
とりあえず付けておく無駄ではなかったなまぁまぁ読めたちょっと役に立ったかなかなり良かったかも (まだ評価されていません)
Loading...

Debian/UbuntuへのCommuniGate Pro インストール

CommuniGate ProはLinux用に公式にはrpmパッケージかtgzしか提供されていないので、rpmをdeb変換して利用する。

CGPダウンロード (ここでは64bit版で記述)
# wget
http://www.communigate.com/pub/CommuniGatePro/5.3/CGatePro-Linux-5.3-2.x86_64.rpm

debファイルへ変換する(別マシンで行ってもOKなはず)
# alien -d CGatePro-Linux-5.3-2.x86_64.rpm
(alienがない場合にはaptでインストールする)

cgatepro-linux.5.3.2.x86_64.deb が同じディレクトリに作成される

CGPインストール
# dpkg -i cgatepro-linux.5.3.2.x86_64.deb

rpmでは各種スクリプトで起動設定等が追加されるが、deb変換されたものはそのプロセスが無視されるため、起動ファイル設置や自動起動設定は別途行う必要があるので注意。

CGP起動
# /opt/CommuniGate/Startup start

CGPの停止
# /opt/CommuniGate/Startup stop

CGPパッケージのアンインストール
# dpkg -l | grep cgate
# dpkg -r cgatepro-linux.5.2.x

パッケージでインストールするのは管理上わかりやすいと思うからです。
tarballでインストールしても機能的には変わりません。

,
とりあえず付けておく無駄ではなかったなまぁまぁ読めたちょっと役に立ったかなかなり良かったかも (1 投票, 平均値/最大値: 3.00 / 5)
Loading...

CommuniGate ProのMailBoxのサイズとファイル数カウント

/var/Communigate/Accountsにアカウントがある場合(デフォルトはここ)
$ cd /var/CommuniGate/Accounts (ディレクトリ移動)

/var/Communigate/Domainsにアカウントがある場合(ドメイン追加した場合)
$ cd /var/CommuniGate/Domains (ディレクトリ移動)

それぞれユーザアカウントが確認できるディレクトリで以下を実行

■サイズの集計
 $ du -ah | grep “.macnt” | grep -v “.macnt/”

■ファイル数の集計
 $ for d in `find ./ -type d`; do echo $d,`ls “$d” | wc -l`; done

,
とりあえず付けておく無駄ではなかったなまぁまぁ読めたちょっと役に立ったかなかなり良かったかも (まだ評価されていません)
Loading...

MyNETSソーシャルマップ検索の高速化(Tritonn対応)

2009年9月にUsagi-projectに寄稿したもの。

現状のMyNETSでデータ量が増えて出てくるボトルネックとして、以前日記検索がlikeで行われている状況を改善するためTritonnを使った高速化を紹介しました。

これでしばらく高負荷が発生するのを防げていたのですが、次のボトルネックが発生してきました。それが個人TOPページのサムネ下「ソーシャルマップ」のページの表示です。

このページを開くと全日記本文+コメント及び全トピックコメントからGoogleMap用のcmdをlike検索するため、大きな負荷が発生することになりました。

そこでここもTritonnで対策したので、対応方法を紹介しておきます。

ーーー
■データベースにindex追加

[code]
ALTER TABLE c_diary_comment ADD FULLTEXT fullindex USING SENNA,NGRAM,NORMALIZE (body);
ALTER TABLE c_commu_topic_comment ADD FULLTEXT fullindex USING SENNA,NGRAM,NORMALIZE (body);
[/code]

■webapp/lib/db/read/gmaps.phpを修正

[code]
function p_h_gmaps_list_all_search_c_diary4c_diary($keyword, $page_size, $page)
{

//and検索を実装
//subject,body を検索
if ($keyword) {
//全角空白を半角に統一
$keyword = str_replace(‘ ’, ‘ ‘, $keyword);

$keyword_list = explode(‘ ‘, $keyword);
foreach ($keyword_list as $word) {
$word = check_search_word($word);
$where_d .= ‘ AND (‘. MYNETS_PREFIX_NAME .’c_diary.subject LIKE “%’.$word.’%” OR ‘. MYNETS_PREFIX_NAME .’c_diary.body LIKE “%’.$word.’%”)’;
$where_dc .= ‘ AND (‘. MYNETS_PREFIX_NAME .’c_diary.subject LIKE “%’.$word.’%” OR ‘. MYNETS_PREFIX_NAME .’c_diary_comment.body LIKE “%’.$word.’%”)’;
}
}
[/code]

の部分を以下に修正(MYNETS_PREFIX_NAMEは無しで仮定)

[code]
function p_h_gmaps_list_all_search_c_diary4c_diary($keyword, $page_size, $page)
{

//and検索を実装
//subject,body を検索
if ($keyword) {
//全角空白を半角に統一
$keyword = str_replace(‘ ’, ‘ ‘, $keyword);
//SQL Injection対策
$keyword = str_replace(‘\\’, ”, $keyword);
$keyword = str_replace(‘”‘, ”, $keyword);
$keyword = str_replace(‘;’, ”, $keyword);
$keyword = str_replace(‘)’, ”, $keyword);

$keyword_list = explode(‘ ‘, $keyword);
foreach ($keyword_list as $word) {
$word = check_search_word($word);
$where_d .= ‘ AND MATCH (c_diary.subject, c_diary.body) AGAINST (“‘ .$keyword. ‘” IN BOOLEAN MODE)’;
$where_dc .= ‘ AND (MATCH (c_diary.subject, c_diary.body) AGAINST (“‘ .$keyword. ‘” IN BOOLEAN MODE) OR MATCH (c_diary_comment.body) AGAINST (“‘ .$keyword. ‘” IN BOOLEAN MODE))’;
}
}
[/code]

以下の検索コードをそれぞれ置換する。全部で17カ所。
(MYNETS_PREFIX_NAMEは無しで仮定)

日記本文検索部分
[code]
” WHERE ” . MYNETS_PREFIX_NAME . “c_diary.body like ‘%%'” .
[/code]
 ↓
[code]
” WHERE match(c_diary.subject, c_diary.body) against (\”%'” .
[/code]
 ↓
[code]
” WHERE match(c_diary_comment.body) against (\”%'” .
[/code]
 ↓
[code]
” WHERE match(c_commu_topic_comment.body) against (\”

, ,
とりあえず付けておく無駄ではなかったなまぁまぁ読めたちょっと役に立ったかなかなり良かったかも (まだ評価されていません)
Loading...

MyNETSの日記検索高速化(Tritonn導入)

2009年6月にUsagi-Projectに寄稿したもの。

日記データが膨大になってきて日記検索のI/Oがサーバ全体の足を引っ張るようになってきたので、検索の高速化をしてみました。
方法はmysqlを日本語全文検索対応のTritonnプロジェクト版に変更し、それに合わせて検索部分を修正します。

手元の日記データ37万件400Mくらいのc_diaryテーブルをPentiumM1.6GHzのマシンで検索したところ(検索クエリは後述)検索速度が15倍以上になりました。

 LIKE検索 平均5.3秒
 Tritonn検索 平均0.3秒

以下手順。

1)Tritonnインストール(CentOS5サーバの場合

まずは既存のDBを念のためバックアップ
[code]# mysqldump -u root -p mynets_db > dump.sql[/code]

mysqlを置き換えるためmysqlのインストールを確認
[code]# rpm -qa | grep -i mysql
mysql-5.0.45-7.el5[/code]

mysqlをremove
通常dovecotで利用されているので、dovecotを停止してから作業
[code]# service dovecot stop
# yum remove mysql[/code]

perl-DBIのインストールを確認
[code]# rpm -qa | grep -i perl-DBI
perl-DBI-1.52-1.fc6[/code]

最新のtritonn-1.0.12-mysql-5.0.67パッケージ群をダウンロード
[code]# mkdir download
# cd download/
# wget http://iij.dl.sourceforge.jp/tritonn/36448/MySQL-client-5.0.67-tritonn.1.0.12.i386.rpm
# wget http://iij.dl.sourceforge.jp/tritonn/36448/MySQL-devel-5.0.67-tritonn.1.0.12.i386.rpm
# wget http://iij.dl.sourceforge.jp/tritonn/36448/MySQL-server-5.0.67-tritonn.1.0.12.i386.rpm
# wget http://iij.dl.sourceforge.jp/tritonn/36448/MySQL-shared-5.0.67-tritonn.1.0.12.i386.rpm
# wget http://iij.dl.sourceforge.jp/tritonn/36448/mecab-0.97-tritonn.1.0.12.i386.rpm
# wget http://iij.dl.sourceforge.jp/tritonn/36448/mecab-ipadic-2.7.0.20070801-tritonn.1.0.12.i386.rpm
# wget http://iij.dl.sourceforge.jp/tritonn/36448/senna-1.1.4-tritonn.1.0.12.i386.rpm[/code]

以下の順番でインストール
[code]# rpm -ivh mecab-0.97-tritonn.1.0.12.i386.rpm
# rpm -ivh mecab-ipadic-2.7.0.20070801-tritonn.1.0.12.i386.rpm
# rpm -ivh senna-1.1.4-tritonn.1.0.12.i386.rpm
# rpm -ivh MySQL-shared-5.0.67-tritonn.1.0.12.i386.rpm
# rpm -ivh MySQL-client-5.0.67-tritonn.1.0.12.i386.rpm
# rpm -ivh MySQL-server-5.0.67-tritonn.1.0.12.i386.rpm
# rpm -ivh MySQL-devel-5.0.67-tritonn.1.0.12.i386.rpm[/code]

MySQLはインストール後すぐに起動するのでrootのパスを設定
[code]# /usr/bin/mysqladmin -u root password ‘rootpassword'[/code]

MySQLへのログイン確認
[code]# mysql -u root -p
Enter password:

Welcome to the MySQL monitor. Commands end with ; or \g.
Your MySQL connection id is 7
Server version: 5.0.67-modified MySQL Community Server (GPL) (portions (c) Tritonn Project)

Type ‘help;’ or ‘\h’ for help. Type ‘\c’ to clear the buffer.

mysql>[/code]

これでTritonnのインストール完了

入れ替え前のDBもたぶん大丈夫なはずだが、もし使えない時には新規にDB作成して、バックアップデータをリストアする
[code]# mysql -u root -p
mysql> CREATE DATABASE mynets_db DEFAULT CHARACTER SET utf8;
mysql> quit
# mysql -u root -p mynets_db < dump.sql[/code] 2)Tritonn用のindex作成
[code]# mysql -u root -p
mysql> use mynets_db;
mysql> ALTER TABLE c_diary ADD FULLTEXT fullindex USING NGRAM,SECTIONALIZE (subject, body);[/code]

件数が多いと相当時間がかかるのでじっと待つ
完了したらテスト検索してみる(testで検索)
[code]mysql> SELECT * FROM c_diary WHERE (public_flag = ‘public’ or public_flag = ‘open’) AND MATCH (subject, body) AGAINST (“test”) ORDER BY r_datetime DESC;[/code]

LIKE検索と時間を比較してみる
[code]mysql> SELECT * FROM c_diary WHERE (public_flag = ‘public’ or public_flag = ‘open’) AND (subject LIKE ‘%test%’ or body LIKE ‘%test%’) ORDER BY r_datetime DESC;[/code]

3)MyNETSの検索部分の修正

webapp/lib/db/read/diary.phpの新規日記検索の項目を以下のように修正

$s[code]elect = ‘SELECT *’;
$from = ‘ FROM ‘ . MYNETS_PREFIX_NAME . ‘c_diary’;
$where = ” WHERE (public_flag = ‘public’ or public_flag = ‘open’)”;

if ($keyword) {
//全角空白を半角に統一
$keyword = str_replace(‘ ’, ‘ ‘, $keyword);
//SQL Injection対策
$keyword = str_replace(‘\\’, ”, $keyword);
$keyword = str_replace(‘”‘, ”, $keyword);
$keyword = str_replace(‘;’, ”, $keyword);
$keyword = str_replace(‘)’, ”, $keyword);
$keyword = check_search_word($keyword);

$where .= ‘ AND MATCH (subject, body) AGAINST (“‘ .$keyword. ‘” IN BOOLEAN MODE)’;

}
$order = ” ORDER BY r_datetime DESC”;[/code]

, , , ,
とりあえず付けておく無駄ではなかったなまぁまぁ読めたちょっと役に立ったかなかなり良かったかも (まだ評価されていません)
Loading...

mysqlデータベース障害対応手順

問題のあるテーブルを特定
/var/log/mysqld.log を確認

# mysqlcheck -u root -p -c -q -A
念のためデータベース全チェック。

# cd /var/lib/mysql/dbname/
# mysqld_multi stop 1 (1番のmysql停止)

通常のmysql停止コマンドは
# service mysqld stop
ここでは複数起動設定のためmysqld_multiを使用

CPU100%張り付き等でプロセスが終了してくれない場合には
# ps aux | grep mysql
プロセス番号を確認して強制終了
# kill -9 プロセス番号

# mv tablename.TMD tabelname.TMD.org
# myisamchk -v -q tablename.MYI

-qがダメなら-rで。
# myisamchk -v -r tablename.MYI

修復が終わったら確認

# mysqld_multi start 1
# mysqlcheck -u root -p -c -q -A

データに問題がなければ、念のためデータベースのdump
# mysqlqump -u root -p -e dbname > dbname.sql

以下のやり方もあるけど時間かかるのでオススメしない。
# mysql -u root -p
> use databasename
> check table tablename quick;
> repair no_write_to_binlog table tablename quick;

だめなら

> repair no_write_to_binlog table tablename use_frm;

長時間かかる。

,
とりあえず付けておく無駄ではなかったなまぁまぁ読めたちょっと役に立ったかなかなり良かったかも (まだ評価されていません)
Loading...

CommuniGate Proインストール手順(CentOS)

Linux(CentOS)にCommuniGate Proをインストールする手順

# cd ~/download

最新のバージョンをダウンロード
# wget http://www.communigate.com/pub/CommuniGatePro/5.2/CGatePro-Linux-5.2-18.i386.rpm

rpmでインストール
# rpm -ivh CGatePro-Linux-5.2-18.i386.rpm

サービスを開始
# service CommuniGate start

ブラウザで以下へアクセス
http://localhost:8010/

最初にpostmasterのパスワードを設定
設定後、Basic認証画面が表示されるので

ID:postmaster
pass:指定したもの

でログインする。

とりあえず付けておく無駄ではなかったなまぁまぁ読めたちょっと役に立ったかなかなり良かったかも (まだ評価されていません)
Loading...

CentOS5 VPN設定

pptpdのインストール

# wget http://pptpclient.sourceforge.net/yum/stable/rhel5/pptp-release-current.noarch.rpm
# rpm -ivh pptp-release-current.noarch.rpm
# yum install pptpd

# vi /etc/pptpd.conf
 localip remoteip を設定

# vi /etc/ppp/options.pptpd
 name ms-dns を設定

# vi /etc/ppp/chap-secrets
 client server secret IPaddressesを設定

# vi /etc/sysconfig/iptables
 設定を追加
 -A RH-Firewall-1-INPUT -i ppp0 -j ACCEPT
 -A RH-Firewall-1-INPUT -p gre -j ACCEPT
 -A RH-Firewall-1-INPUT -m state –state NEW -m tcp -p tcp –dport 1723 -j ACCEPT

 

,
とりあえず付けておく無駄ではなかったなまぁまぁ読めたちょっと役に立ったかなかなり良かったかも (まだ評価されていません)
Loading...

CommuniGate Pro削除手順

現在インストール済みのパッケージをリストする
# rpm -qa | grep CGatePro

CGPのサービスを停止する
# service CommuniGate stop

リストされたパッケージを削除する
# rpm -e CGatePro-Linux-5.3c-3

この状態だと /var/CommuniGate以下に設定等は保持される

完全削除するには
# rm -rf /var/CommuniGate

とりあえず付けておく無駄ではなかったなまぁまぁ読めたちょっと役に立ったかなかなり良かったかも (まだ評価されていません)
Loading...