カテゴリー別アーカイブ: Cacti

cactiで利用されるmk-heartbeatのデーモンを動かす

1. cactiで利用されるmk-heartbeat

現在、cactiでmk-heartbeatと呼ばれるレプリケーションの遅延計測を行っている。

maatkitと呼ばれる、perlで書かれたスクリプト群があり、その中にレプリケーション遅延がどれぐらい発生しているかを調べるためのツールがある。

そのツールとcactiを利用して遅延を計測し、遅延が一定値を超えた時など必要に応じてアラートメールを飛ばすようにしている。

repl

続きを読む cactiで利用されるmk-heartbeatのデーモンを動かす

tracの導入に当たっての注意点他

FreeBSD7.3-R, 32bit版にtrac-0.12を入れてみた。

長らく使用してたtrac-0.11はマルチリポジトリに対応して無くて、対応するぞーって言ってた0.12を待ってた。ちょくちょくインストールしたりしてたけど、これまでうまくいかなかった。なんとなく動くようになったぽいのでメモ。

FreeBSD7.3-R i386
apache-2.2.16
py26-sqlite3-2.6.5_1
sqlite3-3.6.23.1_1
trac-0.12

fast cgiモード?で動かす
マルチリポジトリ
全部のリポジトリで共通の認証。リポジトリごとに分けたりもできるぞたぶん。

まずリポジトリのおいてあるサーバとtracを稼働させようとしているサーバが違うのでそこをなんとかする。tracは必ずtracを動かしたローカルにリポジトリがないと駄目らしい。

nfsで見れるようにしようかと思ったけど、うちのnfsってだいたいrw出しちゃうから、一方的に読み取りのみの参照&ネットワークの負荷もかけないってことからrsyncしてみる。良いか悪いかわかんないけど。

crontabに下記を追加。先だって一発コマンドを通しておくとknown_hostsがどうのこうのするはず。ディレクトリが無いとか怒られないためにも。

*/10    *       *       *       *       root    /usr/local/bin/rsync -arv -e "ssh -i /usr/home/hogetan/.ssh/id_dsa" [email protected]:/usr/local/repositories/ /usr/local/repositories/ > /dev/null 2>&1

各種必要なパッケージ?はportinstallで適当に入れる。

%sudo portinstall /usr/ports/www/mod_fcgid

公式を見ながら設定する。

まずはapacheのhttpd.conf

LoadModule fcgid_module libexec/apache22/mod_fcgid.so
<IfModule alias_module>
  ScriptAlias /trac "/usr/local/share/trac/cgi-bin/trac.fcgi"
</IfModule>
<IfModule mod_fcgid.c>
  AddHandler fcgid-script .fcgi
</IfModule>
<LocationMatch "/trac/login">
  AuthType Basic
  AuthName "Trac"
  AuthUserFile /var/trac/.htpasswd
  Require valid-user
</LocationMatch>

scriptaliasを書く位置に注意。あとは.htpasswdが読めないと後で怒られる。.htpassswdの作成とかconfの参考とかは公式
TRAC_ENVはtrac.fcgiに直接書く。なんか理由があったけど忘れた。公式のどこかに書いてあった気がする。

basic認証させるディレクトリの記述に注意。公式通りだと/trac/hogehoge/loginしか受け付けなかったりする。

%sudo ee /usr/local/share/trac.fcgi
import os
os.environ['TRAC_ENV'] = "/var/trac"
os.environ['PYTHON_EGG_CACHE'] = "/tmp"

ここの設定で、TRAC_ENVを書くとそこのディレクトリにあるconf/trac.iniを読もうとするみたい。ここをマルチリポジトリだから~、って、TRAC_ENV_PARENT_DIRを設定すると、そのディレクトリから一つしたのディレクトリをそれぞれの独立したtracのプロジェクトと認識してしまうっぽかった。

(/var/trac/hogeproject/conf/trac.ini, /var/trac/hoge2project/conf/trac.ini, …)と、どんどん参照しちゃうみたい。ここでちょっとはまった。というか以前こんなことやってたけど、それぞれのディレクティブをhttpd.confに書いたりしてた・・・。これを知ってれば、ってかんじ。

次にtracのなんとかディレクトリ?(tracディレクトリとでも呼ぶのかな)、TRAC_ENVで設定されたディレクトリを作成してやる、tracのフォーマットで。

%sudo trac-admin /var/trac initenv

これでできる。nfsだとエラー。ミスったら消して直せば良い。気にくわなければ消して直せば良い。

.htpasswdは個人的な好みで/var/trac直下に。作り方は割愛。このファイルが残っててもinitenvできない。うざい。

次にconf/trac.iniを編集。

Trac 0.12b1が出たね - watawata日記
[repositories]
hoge1.dir=/usr/local/repositories/hoge1
hoge2.dir=/usr/local/repositories/hoge2
hoge3.dir=/usr/local/repositories/hoge3

こんな感じで列挙。元サイトにはtypeとかdescriptionとかあったけど、desc書いたらごちゃごちゃしちゃったし、typeはデフォルトでsvnなので今回はdirのみ定義。下記のコード+適当に選び出すでおk。

%php -r '$h = opendir("/usr/local/repositories"); while($f = readdir($h)){ print basename($f).".dir = /usr/local/repositories/$f\n";}'

そろそろ見て確認してみる。対象サーバのURLにscriptaliasで名付けた/tracとか付ける。


パーミッションとかよく怒ってくるので適当に対処。pythonのエラーは見慣れないので困ったら泣く。結構同じエラーにはまってる人とか少なかったりして泣ける。

tracの管理者権限をそれっぽいユーザに付与。これするとtrac画面の一番右端の方にadminってのが出てきて管理ができるらしい。

%sudo trac-admin /var/trac permission list
%sudo trac-admin /var/trac permission add tracadminisry TRAC_ADMIN

ログインしてTracを使う - へたれプログラマな日々

このあと、adminの画面の一番左下の方にあるrepositriesをクリック。
リポジトリが複数あるかチェック

これだとまだ利用できない。同期?が必要らしい。でも何を同期するんだろう。他にはどんなタイミングで同期すれば良いんだろう。

%sudo trac-admin /var/trac repository resync '*'
%sudo trac-admin /var/trac changeset added '*'

リビジョンが多いと結構時間がかかる。
これが終わったらさっきの管理画面でリビジョンが出てたりする。そんでなんかうまくいけたっぽい。

ここから先はこれから試す。

以上

ERROR: could not lock RRD

rrdtoolを使って手動でアップデートをかけようとおもったが、なぜだかエラーをはかれる。

%./src/rrdtool update test.rrd N

ERROR: could not lock RRD

しょうがないのでソースを落としてきて追跡。

該当の箇所は

src/rrd_update.c

if (rrd_lock(rrd_file) != 0) {
rrd_set_error(“could not lock RRD”);
goto err_close;
}

このへんらしい。

rrd_loclをたどってみたけど、rrd_fileがファイルディスクリプタでfcntをれをぽい投げして終わりらしい。

fcntlって見たことあったけどよくわかんなくってman

最初は戻り値見てたけど、エラー時は-1を返してerrnoとかいうやつにエラー番号が格納されるらしい。

#include <errno.h>

char erromsg[50];
extern int errno;

sprintf(erromsg, “%s: %d”, “could not lock RRD”, errno);
rrd_set_error(erromsg);

適当に出力させる。

%./src/rrdtool update test.rrd N
ERROR: could not lock RRD: 45
%grep 45 /usr/include/errno.h
#define EOPNOTSUPP      45              /* Operation not supported */

うーん・・・、結局わかんなかったけど久しぶりにC触って意外に触れるんだって言う後書きとしておこう。

Cactiでtholdプラグインを使う方法

今回はtholdプラグインをインストールした。
tholdプラグインはsettingsプラグインを必要とする。settingsプラグインはCacti’s Plugin Architectureを必要とするのでこれをインストールした。

Cacti’s Plugin Architecture
http://cactiusers.org/index.php
http://cactiusers.org/wiki/PluginArchitectureInstall
インストールには2種類方法があるらしく、パッチを当てる方法とファイルを上書きする方法があったので今回は上書きの方法でやった。
ファイルをダウンロードして展開するとfiles-versionという名前のディレクトリが出てくるので、中身をCactiのインストールディレクトリ(/usr/local/share/cacti/)に上書きした。
global.phpにデータベースの設定を記述している場合は、Cacti’s Plugin Architectureに上書きされてしまうため再度設定する必要がある。
global.phpにインストールパスを記述する新しい設定項目が増えているので設定する。http://servername/cacti/であれば $config['url_path'] = "/cacti/"; といった感じで。
展開したファイルの中にpa.sqlがあるのでcactiのデータベースに流し込んでやれば
Cacti’s Plugin Architectureのインストールは完了。

# cd /usr/local/sahre/cacti
# wget http://mirror.cactiusers.org/downloads/plugins/cacti-plugin-0.8.7e-PA-v2.6.zip
# unzip cacti-plugin-0.8.7e-PA-v2.6.zip
# cp -R files-0.8.7e/ ./
# ee include/global.php
$config['url_path'] = "/cacti/";
# mysql -u username -p database < pa.sql

次にsettingsプラグインをインストールした。
http://cactiusers.org/downloads/settings.tar.gz
ダウンロードして展開したら出てくるディレクトリをpluginsディレクトリの中に入れる。
config.phpに

$plugins = array();
$plugins[] = ‘settings’;

を書き込む。

次にtholdプラグインをインストールした。
http://cactiusers.org/downloads/thold.tar.gz
ダウンロードしてプラグインディレクトリに入れてconfig.phpに

$plugins[] = ‘thold’;

を書き込む。

次にCactiのメニューからUserManagementを選択してユーザの設定画面を開くと、Realm Permissionsの中にPlugin Managementが増えているのでチェックを付けてSaveする。
次にCactiのメニューからPlugin Managementが増えているので開くと、Global Plugin SettingsとThresholdsがあるので両方ともInstall及びEnableを実行する。

Cactiの上部にあるタブにtholdが増えていればインストールは完了だ。

CactiでGigabitなNICの転送速度が正しく表示されない

Cactiのオフィシャルフォーラムで検索すると同様の問題にぶち当たってる人をちらほらと見かけた。

Are you using 64bit counters? If not, you could be wrapping the 32bit counters (they wrap each time around 114mb/sec)

と書き込んでいる人が居たのでおそらくトータルの転送量を蓄積するのであろうカウンタ?がwrap(一周?)するものと思われる。

http://forums.cacti.net/about31399.html
このページにあがってるSSを参考にうまく表示されないグラフのデータソースを修正してやる。Maximum Valueを10000000000に、Output Type IDを64bitに修正した。

しかしこれでもうまくいかなかった。色々とググってみると以下のような記事を発見。

http://fixunix.com/bsd/359274-snmp-problems.html

コンパイルオプションを指定しろとのこと。早速/usr/ports/net-mgmt/net-snmp/に入ってmake configしてみた。

[ ] MFD_REWRITES   Build with 64-bit Interface Counters

それっぽいのを発見。このコンパイルオプションを有効にしてportupgrade -f net-snmpを実行。グラフが正しく表示された。

CactiでHDDの転送速度をモニタリングする方法

http://docs.cacti.net/templates
ここのページを開くと上の方にタグがいっぱい並んでいるのでその中からdiskを選択すると、Disk IO Usageというテンプレートが出てくるのでダウンロードする。

  1. untar the attached resource file
  2. Drop disk_io.xml into your \cacti\resources\snmp_queries\ folder.
  3. Import the data query templates via browser
  4. Add the DiskIO Data Query to a device.
  5. From the ‘Create Graphs for this Host’ screen, select the required disks and click Create.

DLしたファイルを展開して出てくるdisk_io.xmlを/usr/local/share/cacti/resources/snmp_queries/の中に入れる。

もう一つのXMLファイルをCactiのメニューにあるInport Templatesを使ってインポートする。ファイルを選択してアップロードしてもテキストボックスにXMLの中身を貼り付けてやってもおk。今回は中身を貼り付けてやってみた。

メニューのDevicesから設定したいデバイスを選択してAssosiated Data QueryにSNMP – Get Disk IOを追加してやる。

メニューのNew GraphsからDiskIOのグラフを追加する。

これでHDDの転送速度のグラフを作成することが出来た。

cactiのお引っ越し

cactiを別のサーバにインストールしてデータを移行するときの注意点。
採取したデータはDBに格納されてるけど、グラフの形式とかその辺のデータは/usr/local/share/cacti/rraディレクトリの中にあるのでこいつを移さないとグラフが出なくなる。
追記:
グラフ作成を行うpoller.phpをcronでちゃんと動かせば作成されるから問題無かったぽ。