2013-08-17 Sat

Solaris 11 で Munin asyncd を使う はてぶ

@karky7 に頼まれた、
Solaris 11 での Munin の設定方法第 3 弾。

前回まででリモートの Munin node から値を取得できるはずなので、
とりあえず困ることもないかと思いますが、
監視する Munin node が増えるとデータの収集に時間がかかってきて
いろいろと嫌な感じになるかと思います。

そのあたりを少しなんとかしてくれるのが Munin asyncd です。

[ Read More... ]

Referrer (Inside):
[2013-08-17-1] Solaris 11 で Munin asyncd を使う
[2013-08-14-1] リモートの Munin node から値を取得する
[2013-08-13-1] Solaris 11 上での Munin のインストール & 設定

2013-08-14 Wed

リモートの Munin node から値を取得する はてぶ

@karky7 に頼まれた、
Solaris 11 での Munin の設定方法第2弾。

前回([2013-08-13-1])は Solaris 11 上に
jposug のパッケージで Munin をインストールして
ローカルの Munin node から値を取得するところまで書いたので、
今回はリモートの Munin node に接続する方法です。

[ Read More... ]

Referrer (Inside):
[2013-08-17-1] Solaris 11 で Munin asyncd を使う
[2013-08-14-1] リモートの Munin node から値を取得する
[2013-08-13-1] Solaris 11 上での Munin のインストール & 設定

2013-08-13 Tue

Solaris 11 上での Munin のインストール & 設定 はてぶ

@karky7 に頼まれたので、
Solaris 11 での Munin の設定方法を書いてみる

[ Read More... ]

Referrer (Inside):
[2013-08-17-1] Solaris 11 で Munin asyncd を使う
[2013-08-14-1] リモートの Munin node から値を取得する
[2013-08-13-1] Solaris 11 上での Munin のインストール & 設定

2013-02-13 Wed

fieldname.cdef はてぶ

Munin Plugin を書くとき、何らかのコマンドで取得できる値の単位が byte で
これを bit になおしたいことがある。

Plugin の中で計算してもいいんだけど、
shell script で書いているのでちょっと面倒という時に、
fieldname.cdef を使うと便利。

- fieldname.cdef – Munin
  http://munin-monitoring.org/wiki/fieldname.cdef

 Fieldname.cdef allows you to manipulate the data collected in an rrd. Things like turning bytes into bits, making numbers negative, and a host of other operations.

ということなので、rrd に格納したデータをグラフ作成のときにいじってくれるもののよう。

if_ plugin で byte で取得したデータを bit になおしてグラフを作成するのに使われている。

        echo 'rbytes.label received'
        echo 'rbytes.type DERIVE'
        echo 'rbytes.graph no'
        echo 'rbytes.cdef rbytes,8,*'
        echo 'rbytes.min 0'


逆ポーランド記法(operand,operand,operator)の形で書く。

rrd にためこんだ数値をいじらずにグラフで利用する値を変更できるので、
すでにあるデータを活かせるのがいい。

fieldname.cdef 以外については以下。

- fieldnames – Munin
  http://munin-monitoring.org/wiki/fieldnames

2013-02-11 Mon

arc_summary.pl をベースに munin plugin を書いた はてぶ

ある程度グラフができて問題なさそうなら、どこかに晒す。

ARC については、ここを参照。

- Brendan's blog » Activity of the ZFS ARC
  http://dtrace.org/blogs/brendan/2012/01/09/activity-of-the-zfs-arc/

2012-12-09 Sun

munin plugin for Solaris kernel memory usage はてぶ

原口さんのところ ( http://shojih.jp/wiki/index.php?SolarisTips#d0384886 ) に
カーネルメモリの使用量を調べる方法があったので,
munin のプラグインにしてみた.

調べ方は以下

% echo '::memstat '| sudo mdb -k
Page Summary                Pages                MB  %Tot
------------     ----------------  ----------------  ----
Kernel                     898937              3511   45%
ZFS File Data              673199              2629   33%
Anon                       328549              1283   16%
Exec and libs                6290                24    0%
Page cache                  40769               159    2%
Free (cachelist)            38763               151    2%
Free (freelist)             28617               111    1%
Total                     2015124              7871


こんな感じにとれるので,
% の部分を取って,CPU のグラフのように STACK させたグラフを描くようにしてみた.

solaris kernel memory usage

STACK させるには 1 つ目の {fieldname}.draw を AREA にし,
2 つ目からの {fieldname}.draw を STACK にする.

http://munin-monitoring.org/wiki/fieldname.draw


2012-09-29 Sat

munin-async を Solaris 11 上で動かしたい 3 はてぶ

結局,以下のようなパッチでごまかすことにして,
#jposug にコミットした.

--- common/lib/Munin/Common/SyncDictFile.pm~    2012-09-01 00:22:50.000000000 +0900
+++ common/lib/Munin/Common/SyncDictFile.pm     2012-09-29 12:40:13.342258023 +0900
@@ -170,6 +170,7 @@

 sub _lock_write {
        my ($filename, $mode) = @_;
+       $mode = "w+" if $filename =~ /SPOOL-META/;
        $mode ||= "a+";

        use Fcntl qw(:flock);


次は munin-async の SMF マニフェスト作り.
munin-node のマニフェストは含まれているのに,
munin-async のマニフェストは含まれていないので.

その後,plugin ごとパッケージを分割して,
それぞれに Requires を設定すれば,
ちゃんとしたパッケージっぽくなる.

- munin-async を Solaris 11 上で動かしたい [2012-09-27-1]
- munin-async を Solaris 11 上で動かしたい 2 [2012-09-28-3]

Referrer (Inside):
[2013-08-17-1] Solaris 11 で Munin asyncd を使う

2012-09-28 Fri

munin-async を Solaris 11 上で動かしたい 2 はてぶ

昨日 [2012-09-27-1] の続き.

以下のように print をいれて,どこのファイルでひっかかるのか確認

sub _lock_write {
    my ($filename, $mode) = @_;
    print "$filename: $mode\n";


これで実行すると,以下のように
/var/lib/munin/spool/SPOOL-META を "r" で開いたときに
flock($fh, LOCK_EX) が失敗している.

$ sudo -u munin /usr/share/munin/munin-asyncd -v
/var/lib/munin/spool/SPOOL-META: r
Cannot lock tied file '/var/lib/munin/spool/SPOOL-META' - Bad file number at /usr/perl5/vendor_perl/5.12/Munin/Common/SyncDictFile.pm line 182.


なので,以下のようにして,SPOOL-META を開くときの mode を
"w+" に変えてしまう.

sub _lock_write {
    my ($filename, $mode) = @_;
    $mode = "w+" if $filename =~ /SPOOL-META/;
    print "$filename: $mode\n";


すると,以下のように,flock でひっかからなくなる.

$ sudo -u munin /usr/share/munin/munin-asyncd -v
/var/lib/munin/spool/SPOOL-META: w+
/var/lib/munin/spool/SPOOL-META.tmp: w+
/var/lib/munin/spool/SPOOL-META: w+
/var/lib/munin/spool/SPOOL-META.tmp: w+
/var/lib/munin/spool/SPOOL-META: w+
/var/lib/munin/spool/SPOOL-META.tmp: w+
[21634][main] Reading config from localhost:4949
[21634][plugin:cpu] asking for config
[21634][plugin:cpu] asking for data
[21634][plugin:df] asking for config


場当り的だけど,これで動くので,
とりあえず,しばらくはこれで使ってみる.

ちなみに,SPOOL-META は以下のようなファイル.

$ cat /var/lib/munin/spool/SPOOL-META
lastruntime:1348803319


Referrer (Inside):
[2013-08-17-1] Solaris 11 で Munin asyncd を使う
[2012-09-29-1] munin-async を Solaris 11 上で動かしたい 3

2012-09-27 Thu

munin-async を Solaris 11 上で動かしたい はてぶ

#osoljp の contrib-spec-files に munin 2.0.6 をコミットしたし,
依存関係もある程度解決したので,そろそろ munin-async を試そうかと.

munin-async の使い方はここを参照.
http://munin.readthedocs.org/en/latest/node/async.html

とりあえず,munin-asyncd を実行してみる.

$ sudo -u munin /usr/share/munin/munin-asyncd -v
    Cannot lock tied file '/var/lib/munin/spool/SPOOL-META' - Bad file number at /usr/perl5/vendor_perl/5.12/Munin/Common/SyncDictFile.pm line 180.


と言われるので,SyncDictFile.pm を見てみる.

sub _lock_write {
        my ($filename, $mode) = @_;
        $mode ||= "a+";

        use Fcntl qw(:flock);
        use IO::File;

        my $fh = IO::File->new($filename, $mode)
                or die "Cannot open tied file '$filename' - $!";
        flock($fh, LOCK_EX) or die "Cannot lock tied file '$filename' - $!";
        return $fh;
}


となっていて,flock のところでこけている.

ググってみると以下のような話がみつかった

OSがSolarisの場合、flockシステムコールの仕様の違いによりpkwk_chown(): flock() failedがでることが分かりました。Solarisのflockでは、LOCK_EX(排他ロック)をするためには書き込み可能な状態でファイルをオープンする必要があります。これに対して、LinuxなどのOSでは読み出しオープンでもLOCK_EX可能です。fopen の 'r' を 'w+' に変更すると改善するのは、OSのflockがSolaris流の場合と考えられます。ただ、pkwk_chown は、書き込みできないファイルのオーナーを変更することにより、書き込み権限を得ることが本来の目的ですので、'w+' でオープンできない場合、目的を果たせなくなります。それから、PHPのposix拡張モジュールの有無も、挙動に影響します。posix拡張モジュールがあれば、ファイルのオーナーをapacheの実行ユーザに変更することで解決できますが、posix拡張モジュールが無い場合、apache実行ユーザIDの取得ができず、毎回chownしようとしますので、pkwk_chown(): flock() failedが出ます。どのように問題解決すべきか考えています(LOCK_EXできないので、ロックファイルを作って対応かな・・・)。目処が立ったら、dev:BugTrack2で改善案を提案します。 -- 三浦克介 2010-10-24 (日) 11:51:16

http://pukiwiki.sourceforge.jp/?%E8%B3%AA%E5%95%8F%E7%AE%B13%2F260


ということなので,

        my ($filename, $mode) = @_;
        $mode ||= "a+";


で,$mode に "r" が入ることがあってこけてるっぽい.

とりあえず,以下のように LOCK_SH にしてみる.

       flock($fh, LOCK_SH) or die "Cannot lock tied file '$filename' - $!";


すると,以下のように実行できた.

$ sudo -u munin /usr/share/munin/munin-asyncd -v
[6812][main] Reading config from localhost:4949
[6812][plugin:cpu] asking for config
[6812][plugin:cpu] asking for data
(snip)


排他ロックを共有ロックにしてしまっているのでよろしくないのだけど,
どうすればいいんだろう?

Perl と Solaris に詳しい人いませんかね?

Referrer (Inside):
[2013-08-17-1] Solaris 11 で Munin asyncd を使う
[2012-09-29-1] munin-async を Solaris 11 上で動かしたい 3
[2012-09-28-3] munin-async を Solaris 11 上で動かしたい 2

2012-09-26 Wed

munin しきいち値設定 はてぶ

http://munin-monitoring.org/wiki/fieldname.warning
http://munin-monitoring.org/wiki/fieldname.critical

[foo.example.com]
address 10.20.30.40
    postfix_mailstats.delivered.warning 1:


こんな感じで,munin.conf で設定すればよいらしい.

{plugin name}.{fieldname}.warning 閾値
{plugin name}.{fieldname}.critical 閾値


閾値にひっかかると,以下のようにメールを飛ばせる.
http://munin-monitoring.org/wiki/HowToContact

この閾値のチェックをしているのは,
munin-limits で,munin-cron から呼び出されている.

munin-cron が呼び出すのは以下の 4 つ
- munin-update
- munin-limits
- munin-graph
- munin-html

http://munin-monitoring.org/wiki/munin-cron

2012-09-23 Sun

munin-node のタイムアウト はてぶ

munin をちゃんと使いはじめているんですが,
値のとりこぼしがよく発生する自作 plugin があったので
ちょっと調べてみた.

munin-node.log に

Service '(プラグイン名)' timed out.


と出るパターンのタイムアウト.

Munin timeout — RedTurtle's Blog
http://blog.redturtle.it/redturtle/2011/03/17/munin-timeout

によると,munin-node.conf に

timeout 60


のように timeout を指定すればよいらしい.
(ドキュメントには書いていないけど,ソースを読めばわかるらしい.
で,ソースは未確認)

munin 1.4.7 で確認したところ,
munin-node.log に "timed out" はでなくなり,
値もとれているので,今後 timeout の設定はいれておくようにする.

2012-08-26 Sun

munin 2.0.4 のパッケージを作った はてぶ

munin 1 系のパッケージをベースに 2 系のパッケージを作成.
とりあえず,動くことは確認.

いろいろと汚なかったりするので,
そのあたりの調整をしておくべき.

munin 2 系のパッケージを作るにあたり,
以下の perl モジュールのパッケージも作成.
- Date::Manip
- Test::Intr

2010-08-13 Fri

munin でグラフが生成されない はてぶ

エラーとかメモし忘れたけど,こんな感じ.

原因: munin-node が返す host 名と munin.conf で指定した host 名が一致しなかったため
対策: munin-node.conf で host_name を指定

今までこんなことでハマったことがないので,
munin-node.conf で host_name を特に指定していなかったけど,
こういうハマり方があるなら,常に host_name を指定した方がよさげ.

munin-node が返す host 名は telnet で munin-node に接続して確認できる.
以下のような感じ.

$ telnet localhost 4949
Trying 127.0.0.1...
Connected to localhost.localdomain (127.0.0.1).
Escape character is '^]'.
# munin node at fuga.ftnk.jp
nodes
fuga.ftnk.jp
.
quit
Connection closed by foreign host.


- munin の apahce プラグイン [2009-07-03-2]
- munin の NFSv4 プラグイン [2009-07-03-1]
- munin の plugin 自動設定 [2009-02-09-1]

2009-07-12 Sun

Unbound 1.3.1 にアップデート はてぶ

Unbound 1.3.1 にアップデート

bug fix がメインで新機能は以下の 2 点.

- unbound_munin_ in contrib uses ps to show total memory rss if sbrk hack does not work.
- Added build-unbound-localzone-from-hosts.pl to contrib, from Dennis DeDonatis. It converts /etc/hosts into config statements.

build-unbound-localzone-from-hosts.pl は /etc/hosts から
以下のような設定を生成してくれる perl スクリプト.

server:

local-zone: "example.com" transparent

local-data-ptr: "127.0.0.1 localhost.localdomain"
local-data: "localhost.localdomain A 127.0.0.1"
local-data: "localhost A 127.0.0.1"

local-data-ptr: "::1 localhost6.localdomain6"
local-data: "localhost6.localdomain6 AAAA ::1"
local-data: "localhost6 AAAA ::1"




munin 用 plugin の使い方

Plugin の準備
contrib/unbound_munin_ を /etc/munin/plugins/unbound としてコピー.
さらに以下のように ln しておく.

ln -s unbound unbound_munin_by_class
ln -s unbound unbound_munin_by_flags
ln -s unbound unbound_munin_by_opcode
ln -s unbound unbound_munin_by_rcode
ln -s unbound unbound_munin_by_type
ln -s unbound unbound_munin_histogram
ln -s unbound unbound_munin_hits
ln -s unbound unbound_munin_memory
ln -s unbound unbound_munin_queue


/etc/munin/plugin-conf.d/munin-node に以下を追加.

[unbound*]
user root
env.statefile /var/lib/munin/plugin-state/unbound-state
env.unbound_conf /etc/unbound.conf
env.unbound_control /usr/sbin/unbound-control
env.spoof_warn 1000
env.spoof_crit 100000


で,munin-node を restart.

unbound の準備
まず remote control 用の setup

# unbound-control-setup


/etc/unbound.conf の編集

extended-statistics: yes


control-enable: yes


- 日本Unboundユーザ会 » Unbound 1.3.1リリース
  http://unbound.jp/?p=370

2009-07-03 Fri

munin の apahce プラグイン はてぶ

munin の apache プラグインは /server-status から情報を取得するので,
server status を有効にする必要がある.

ExtendedStatus On
<Location /server-status>
  SetHandler server-status
  Order deny,allow
  Deny from all
  Allow from 127.0.0.1
</Location>


ExtendedStatus を on にしないと
- Total Accesses
- Total kBytes
- Uptime
- ReqPerSec
- BytesPerSec
- BytesPerReq
等の情報が取得できない.

- munin の NFSv4 プラグイン [2009-07-03-1]
- munin の plugin 自動設定 [2009-02-09-1]

Referrer (Inside):
[2010-08-13-1] munin でグラフが生成されない

2009-07-03 Fri

munin の NFSv4 プラグイン はてぶ

munin に含まれる nfsd プラグインは NFSv4 に対応していないので,
以下から NFSv4 用プラグインをダウンロードしてインストール.

- MuninExchange - nfsv4

- munin の plugin 自動設定 [2009-02-09-1]

Referrer (Inside):
[2010-08-13-1] munin でグラフが生成されない
[2009-07-03-2] munin の apahce プラグイン

2009-02-09 Mon

munin の plugin 自動設定 はてぶ

第 1 回 静岡 IT Pro 勉強会([2009-02-07-1])のディスカッションで,
munin は plugin を自動設定してくれて便利
という話がでたんだけど,どうやっているのか気になったので,
ちょっと調べてみた.

- munin-node インストール時には設定されている
- munin-node を再起動したりしても変更されない
ということはわかっているので,
インストール時に何かしているはず,
ということで spec ファイルを見てみると,以下のような記述が.

%post node
/sbin/chkconfig --add munin-node
%{_sbindir}/munin-node-configure --shell 2> /dev/null | sh >& /dev/null || :


どうやら,munin-node-configure でどんなサービスが動いているか確認しているよう.

Usage: /usr/sbin/munin-node-configure [options]

Options:
       --help                  View this help page
       --version               Show version information
       --debug                 View debug information (very verbose)
       --config <file>         Override configuration file
                               [/etc/munin/munin-node.conf]
       --servicedir <dir>      Override plugin dir [/etc/munin/plugins]
       --libdir <dir>          Override plugin lib [/usr/share/munin/plugins]
       --families <family,...> Override families (auto,manual,contrib) [auto]
       --suggest               Show suggestions instead of status
       --shell                 Show shell commands (implies --suggest)
       --remove-also           Also show rm-commands when doing --shell
       --newer <version>       Only show suggestions related to plugins newer
                               than version <version>. [0.0.0]
       --snmp <host|cidr>      Do SNMP probing on the host or CIDR network.
       --snmpversion <ver>     Set SNMP version (1, 2c or 3) [2c]
       --snmpcommunity <comm>  Set SNMP community [public]


で,--shell オプションでリンクの生成コマンドの表示と
サジェストをしてくれる.

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


こんな感じの出力.

spec ファイルでは,これを sh に渡してリンクの作成までして,
自動設定してくれている.

Referrer (Inside):
[2010-08-13-1] munin でグラフが生成されない
[2009-07-03-2] munin の apahce プラグイン
[2009-07-03-1] munin の NFSv4 プラグイン
ChangeLog 最新ページ