RRDTOOL(MRTG)とSMNPのメモ

| コメント(0) | トラックバック(0)

旧自宅サーバー設定保存計画RRDTOOL編。

RRDTOOLとは言ったもののログの記録は基本的にMRTGにおまかせしていて、 グラフの描画のみRRDTOOLで行っていたので、とりあえずログ保存に関してはMRTGをサルベージする。

項目コマンド、SNMPアドレス備考
転送速度IF-MIB::ifOutOctets.2 & IF-MIB::ifInOctets.2
CPU温度&M/B温度1.3.6.1.4.1.2021.8.1.101.1 & 1.3.6.1.4.1.2021.8.1.101.1
CPUロードアベレージ1.3.6.1.4.1.2021.10.1.3.1 & 1.3.6.1.4.1.2021.10.1.3.2 & 1.3.6.1.4.1.2021.10.1.3.31分毎/5分毎/15分毎
共有メモリ1.3.6.1.4.1.2021.4.13.0
バッファメモリ1.3.6.1.4.1.2021.4.14.0
キャッシュメモリ1.3.6.1.4.1.2021.4.15.0
物理メモリ1.3.6.1.4.1.2021.8.1.101.3
ユーザ領域1.3.6.1.4.1.2021.8.1.101.4
実メモリ1.3.6.1.4.1.2021.4.5.0 & 1.3.6.1.4.1.2021.4.6.0総容量/使用可能
スワップメモリ1.3.6.1.4.1.2021.4.3.0 & 1.3.6.1.4.1.2021.4..0総容量/使用可能
ディスクIO数1.3.6.1.4.1.2021.13.15.1.1.3.1 & 1.3.6.1.4.1.2021.13.15.1.1.4.1
ディスクIOバイト1.3.6.1.4.1.2021.13.15.1.1.5.1 & 1.3.6.1.4.1.2021.13.15.1.1.6.1
UPS電圧apcstat.sh LINEV
UPS最小電圧apcstat.sh LOTRANS
UPS最大電圧apcstat.sh HITRANS
バッテリ残量apcstat.sh BCHARGE
シャットダウン残量apcstat.sh MBATTCHG
残り駆動時間apcstat.sh TIMELEFT
UPS負荷率apcstat.sh LOADPCT
HDD温度1.3.6.1.4.1.2021.8.1.101.5

apcstat.sh はこんな感じでAPCのUPSから状態を読み取る。

#!/bin/sh
apcaccess | grep ^$1 | awk -F ':' '{print $2}'

データの更新は次のスクリプトでRRDに書き込み。 設定リストを用意しておけばSMNPからでもシェルスクリプトからでも値を追加できる優れもの。

#!/usr/bin/perl

# 設定ファイル
# rrdfilename
# data1
# data2
# ...
# データの書式
# SNMP: dataname community@hostname mib
# Shell Script: dataname '@' sciptfilename

my $rrdupdate = "/usr/local/rrdtool-1.2/rrdupdate";

foreach(@ARGV) {
	my $cfg_file = $_;
		if(!open(IN, "<$cfg_file")) {
		print "Error config file: $cfg_file\n";
		next;
	}

	my $rrd = <IN>;
	$rrd =~ s/(^\s+|\s+$)//g;
	my $time = time;
	my $ds_str;
	my $data_str;
	while() {
		my @str = split(/[ \t\r\n]/);
		my $dname = shift(@str);
		my $comm = shift(@str);
		my ($mib, $cmd, $data, $dtype);
		my ($cname, $host) = split(/@/, $comm);

		if ($comm eq '@') {
			$cmd = join(' ', @str);
			open (DATA, "$cmd |") || next;
			$data = <DATA>;
			$data = $data + 0.0;
			close(DATA)
		} else {
			$mib = shift(@str);
			open(SNMP, "/usr/local/bin/snmpget -v 1 -c $cname -Ov $host $mib |") || next;

			my $snmp = <SNMP>;
			($dtype, $data) = split(/[:\r\n]/, $snmp);
			$data =~ s/(^\s+|\s+$)//g;
			close(SNMP);
#			print "$mib\n$dname:$data\n";
		}
		$ds_str .= "$dname:";
		$data_str .= "$data:";
	}
	$ds_str =~ s/:$//;
	$data_str =~ s/:$//;
#    print "$ds_str\n";
#    print "$data_str\n";
	system("$rrdupdate $rrd -t $ds_str $time:$data_str");
	close(IN);
}]]>

こんなスクリプト作ってたなんて、俺意外と頑張ってたんだな。

トラックバック(0)

トラックバックURL: http://nesitive.net/mt/tbping/193

コメントする

アーカイブ

ウェブページ

Powered by Movable Type 4.21-ja

このブログ記事について

このページは、が2009年12月24日 19:26に書いたブログ記事です。

ひとつ前のブログ記事は「mbmon と mrtg の組合せ用スクリプト覚書」です。

次のブログ記事は「PostgreSQL on Leopard」です。

最近のコンテンツはインデックスページで見られます。過去に書かれたものはアーカイブのページで見られます。