필요한 툴
rrdtool HotSaNIC libart_lgpl Perl freetype libpng
☞ rrdtool
http://oss.oetiker.ch/rrdtool/
# tar zxf
rrdtool-1.2.23.tar.gz
# vi
configure
/usr/include/libart-2.0 ->
/usr/local/include/libart-2.0
/usr/include/freetype ->
/usr/local/include/freetype
# ./configure
--prefix=/usr/local/rrdtool --enable-perl-site-install --disable-python
--disable-tcl (1.0.X와는 다르다)
# make
# make
install
☞HotSaNIC
http://hotsanic.sourceforge.net/
# tar zxf
hotsanic-0.5.0-pre5.gz -C /usr/local/
# cd
/usr/local/HotSaNIC
# ./setup.pl
이 후 필요한 설정을 체크한다.
OPTION 서비스명 설명 Y/N APCUSV APC UPS의 현황 (apcaccess 툴 사용) (APC UPS를 사용하지 않고 또한 있더라도 서버와 연결하여 모니터링중이
아니라면 N) N APPS 데몬, 응용프로그램별 프로세스 현황(프로세스 이름 별도 설정 필요) Y DISKIO 각 HDD별(파티션별이 아님) 입출력 N DNET Distributed.Net관련 RC5, OGR, DES,
CSC N NETWORKS 네트워크 트래픽 (별도 설정 필요) N PART 사용량 파티션별 Y 지정한 서버로 ping time 결과 (ping서버 설정 필요) N SENSORS CPU, 마더보드 등의 온도, 전압등의 수치 N SHOUTCAST 지정한 서버와 포트로의 스트링 현황 (서버, 포트 설정 필요 N SYSTEM 시스템의 프로세스 수, CPU 사용률, load, 메모리 사용률 Y TRAFFIC 네트워크 인터페이스별(eth0, ...) 트래픽(SNMP를 통해 라우터나 다른 서버의 트래픽도 모니터링
가능,
물론 이 때는 별도 설정
필요) Y 웹로그 파일을 이용한 님다, 코드레드 등의 웜 공격 건수(웹로그 경로 설정 필요. 문자열 지정으로 다른 웜 공격도 설정 가능) N
# /usr/local/HotSaNIC/var/settings/
main : HotSaNIC 의 전반적인
설정이다. 파일을 적절하게 수정해준다
BINPATH="/usr/local/rrdtool/bin" #
rrdtool 의 bin 디렉토리 위치
WEBDIR="/data/www/rrdtool" #
rrdtool이 저장될 디렉토리. 즉, 웹서비스될 디렉토리
IMAGEFORMAT="png" #
png를 추천
mod_apps : 모니터링할 데몬을 적는다 커널
2.4와 설정동일
APP:httpd,Apache
Webserver
APP:mysqld,MySQL
Database Server
mod_diskio : 디스크의 입출력
상태를 나타내는 모듈로 커널 2.6에서 수정이 필요하다
disk io 를 나타내는 파일이
/proc/stat 에서 /proc/diskstats 로 변경됐다
mod_diskio 는
KERNEL=2.6 이부분만 수정해주고 나머지 설정은 동일하다
# vi
/usr/local/HotSaNIC/modules/diskio/platform/linux.pm
package
HotSaNICmod::OSdep;
use RRDs;
sub version
{
($VERSION =
'$Revision: 1.16 $') =~ s/.*(\d+\.\d+).*/$1/;
my $platform;
foreach (keys(%INC)) {
$platform=$_ if $_ =~ /platform/; }
return "$platform
$VERSION";
}
sub sample
{
my
%args=@_;
@stats =
();
if
($args{KERNEL} eq "2.6") {
open FILE, "<
/proc/diskstats";
while (<FILE>)
{
chomp;
push @stats, $_ if / [hs]d. /;
}
close FILE;
foreach my $entry (@stats)
{
$entry
=~ s/^\s*//;
my
($num1,$num2,undef,$racc,$undef,$rblk,undef,$wacc,undef,$wblk,undef,undef,undef,undef)
= split /\s+/, $entry;
$num = $num1 . '_' .
$num2;
store_values($args{MODNAME},$num,$racc,$wacc,$rblk,$wblk,512);
}
} elsif ($args{KERNEL} eq "2.4")
{
# disk_io:
(8,0):(985065,41330,436455,943735,13075448)
(8,1):(12563,6363,333604,6200,167608)
(8,2):(11194,11012,90140,182,3160)
open
FILE,"/proc/stat";
while (<FILE>) {
(undef,@stats)=split if /disk_io/; }
close FILE;
foreach my $entry (@stats)
{
$entry=~
s/[()]//g;
$entry=~ s/:/,/g;
my
($num1,$num2,undef,$racc,$rblk,$wacc,$wblk)=split /,/,$entry;
$num=$num1."_".$num2;
store_values($args{MODNAME},$num,$racc,$wacc,$rblk,$wblk,512);
}
}
elsif ($args{KERNEL} eq "2.2")
{
# disk 1494755
377215 221577 144318
# disk_rio 564538 286941 151189
77490
# disk_wio
930217 90274 70388 66828
# disk_rblk 1129538 573882
302378 154980
#
disk_wblk 1860536 180548 140776 133656
open
FILE,"/proc/stat";
while (<FILE>)
{
(undef,@readacc)=split if /disk_rio/;
(undef,@writeacc)=split if
/disk_wio/;
(undef,@readblk)=split if /disk_rblk/;
(undef,@writeblk)=split if
/disk_wblk/;
}
close
FILE;
$num=0;
while
(@readacc) {
$racc=shift @readacc;
$wacc=shift
@writeacc;
$rblk=shift @readblk;
$wblk=shift
@writeblk;
store_values($args{MODNAME},$num,$racc,$wacc,$rblk,$wblk,512);
$num++;
}
}
}
sub store_values {
my
($MODNAME,$drive,$racc,$wacc,$rblk,$wblk,$blksize)=@_;
if ( ! -e "rrd/$drive.rrd" ) {
system("./makerrd","$drive","U") }
RRDs::update
"rrd/$drive.rrd",time.":$racc:".($rblk*$blksize).":$wacc:".($wblk*$blksize);
if ($ERROR = RRDs::error) { print
time," ","$MODNAME: unable to update `$drive.rrd': $ERROR\n"; }
}
mod_system : 시스템의 전반적인 내용이
추가한다.
메모리의 설정 저장 파일이
달라졌다. 하지만 이미 파일에 패치가 되어 있다. 현재 파일에 KERNEL=2.6 을
추가한다.
(가끔 interrupts
그래프가 안그려질때가 있다 그럴때는 /usr/local/HotSaNIC/modules/system/diagrams.pl
파일을 열어서 756 줄과 760 줄을
주석처리해본다 (맨앞에 # 붙이기) )
mod_sensors : 파일의 형식이
변경됐다
SENSOR=/sys/bus/i2c/devices/0-0290/temp_input1,1_temp1,M/B
Temp,1,0.001,0,C
SENSOR=/sys/bus/i2c/devices/0-0290/temp_input2,2_temp2,CPU
Temp,1,0.001,0,C
SENSOR=/sys/bus/i2c/devices/0-0290/temp_input3,3_temp3,Temp3,1,0.001,0,C
SENSOR=/sys/bus/i2c/devices/0-0290/fan_input3,4_fan3,fan3,1,1,0,RPM
SENSOR=/sys/bus/i2c/devices/0-0290/in_input0,5_in0,VCore
1,1,0.001,0,V
SENSOR=/sys/bus/i2c/devices/0-0290/in_input1,6_in1,VCore
2,1,0.001,0,V
실행
# ./makeindex.pl
(인덱스 파일을 만드는 데몬)
# ./rrdgraph
start (rrdtool을 실행하는 데몬)
# vi /etc/rc.d/rc.local
/usr/local/HotSaNIC/rrdgraph
start
- 기본설정에 의해서 최초 이미지가
생성될려면 15분을 기다려야한다.
(엑박이미지를 클릭해서 들어가면 세부이미지가 보일것이다 15분뒤에 새로고침을 눌러 확인하자)
- 24시간이 지나면 메인의 엑박들도 이미지로
보일것이다.
- 24시간전에 보고
싶으면 /usr/local/HotSaNIC/convert.pl 을 실행시킨다.
RRDtool
명령어
- HoSaNIC은 이미
정해진 모듈을 통해서 RRDtool을 다루는 것이다.
시스템관리자가 원하는 데이터를 RRDtool로 직접 조작하여
통계용 이미지를 생성
- RRDtool용 자체 DB(일반적으로
.rrd로 지정)를 생성한다.(create) ->
- 데이터를 업데이트하거나 (update) 가져온다.(fetch)
->
- 이미지를 생성한다.
(graph)
-- rrdtool
명령
- DB 생성, 이미지 생성은
모두 rrdtool/bin/rrdtool 명령을 통해서 한다.
- 형식 : rrdtool [명령] [명령
옵션...]
- 예 :
rrdtool create coffeenix_status.rrd DS:....
명령 |
설명 |
create |
새로운 RRD DB를 만든다. |
update |
DB에 새 데이터를 저장한다. |
graph |
저장된 DB자료를 이용해서 이미지를 생성한다. (.gif 또는 .png) |
dump |
RRD DB의 데이터를 XML 포맷으로 뽑아준다. |
restore |
XML 포맷에서 RRD DB로 저장한다. |
fetch |
RRD DB에서 데이터를 얻어온다. |
tune |
RRD DB의 설정을 변경한다. |
last |
RRD DB의 최종 업데이트 시간을 알려준다. |
info |
RRD DB의 헤더 정보를 보여준다. (파일명, 최근업데이트일, 설정값...) |
rrdresize |
RRA 크기를 변경한다. 가능하면 사용하지 말기를 |
xport |
RRD DB의 데이터를 XML 포맷으로 뽑아준다. (출력 포맷 지정) |