오늘도 업무차 Cacti를 계속 건들였습니다..

오늘 하게 된건 얼마전부터 구글링하고 템플릿들 적용시켜보고 해봤지만 안되던.. Windows 계열 Disk IO 그래프 그리기 입니다..

구글링해서 찾은 템플릿들은 대부분 유닉스나 리눅스, 윈도우즈 2000 혹은 2003까지 사용가능한 템플릿들이 더라구요

지금 제가 써야되는건 윈 서버 2008 r2 이상 버전에도 적용이 되는 걸 찾아야 되는데 말이죠..

이래 저래 검색하다 보니 snmpwalk 라는 녀석을 알게 됬고 Windows 8.1을 대상으로 사용을 해봤더니..


.1.3.6.1.4.1.2021.13.15.1 = No more variables left in this MIB View (It is past the end of the MIB tree)

 

요런 메시지가 뜨더군요.. 구글 번역기를 사용해보면..

 

MIB보기에 남아 더 이상 변수 ( MIB 트리의 끝을지나 없음) 

....

...

뭔 말인지 더 모르겠내요 .. 대충 보면 아마 더 이상 MIB를 이용해서 관련 정보를 볼 수 없는거 같은데..

또 다시 이래저래 검색해보니 2003 이후 버전은 지원이 안된다는 것 같더라구요

그래서 찾은 방법이 바로 WMI를 이용해서 해당 호스트의 정보를 가져오는 건데요..

아주 우연히 한 외국사이트를 찾게 됬는데 WMI를 이용해서 스크립트를 짜고 Cacti에 적용시키는 방법까지

상세히 써놓은 곳이 있더라구요

물론 영어지만 막 전문용어로 써있거나 한 것도 아니고 중요한 부분은 친절하게 굵게 표시도 해놨습니다.

(우연히 찾은 곳 : http://www.lost-it.org/drupal/?q=node/527)

이 곳에 들어가보시면 알겠지만 예제로 CPU 관련한 스크립트를 보여주내요.

덤으로 마지막 글에 메모리 관련 스크립트도 주지만 저는 제대로 적용이 안되더라구요 ㅠㅠ

 

우선 WMI를 사용하려면 Cacti 서버에 wmic가 설치되어 있어야합니다.

위에 적어준 lost-it에 들어가보시면 Cacti WMI 1 이라는 글에 yum을 이용해서 설치하는 방법이 소개 되어있습니다.

보면 기본적으로 설치가 되어있지 않은 atomic 리포지터리를 설치를 하라고 하내요

제가 설치한 CactiEZ도 기본 리포지터리에 wmi가 존재하지 않아서 설치를 해줬습니다.

yum list wmi 해서 없는 분만 설치해주세요

(굳이 atomic이 아니라 wmic가 있으면 어떤 리포지터리든 상관없어요)

 

lost-it 글을 그대로 가져와보면

 

wget -q -O - http://www.atomicorp.com/installers/atomic | sh

 

이걸 그대로 쉘에 입력해주면 혼자 막 ~ 실행되다가 질의를 한번 합니다. 읽어보진 않았지만 설치하는데 동의하냐고 물어보는게 아닐까 싶습니다....

금방 설치가 되고 yum을 이용해서 wmi를 설치해줍니다.

 

yum -y install wmi

 

설치가 다 되고 나면 이제 WMI 이용한 Disk IO 출력 스크립트를 간단히 짜보고 Cacti에 적용시켜보겠습니다.

스크립트 자체는 생각보다 간단합니다. perl을 이용하는거고 단순히 인자값을 받아서 wmic 를 이용, 정보를 가져오는 건데요.

lost-it 글을 순서대로 가다보면 친절하게도 cpu관련 스크립트 완성본이 있습니다.

 

#!/usr/bin/perl

use strict;

my $user = $ARGV[0];

my $password = $ARGV[1];

my $server = $ARGV[2];

my $result = `wmic -U wonderland/$user%"$password" //$server "select DeviceID,LoadPercentage from Win32_Processor"`;

my @results=split(/\n/,$result);

my @tmparray=split(/\|/, @results[2]);

print "CPUNo:@tmparray[0] Load:@tmparray[1]\n";

 

간단..하죠 ? 인자값을 하나하나 변수로 받아주고 다시 그 변수를 wmic 구문에 입력해준 뒤 입맛에 맞게 출력하기 위해서

split 구문을 사용합니다.

6번째 줄을 보시면 wmic -U wonderland 라고 써있는데 저 원더랜드라는 값은 도메인명 입니다.

기본적으로 workgroup이어서 워크그룹을 사용하는 호스트라면 굳이 안적으셔도 무방합니다.

이제 저 스크립트를 DIsk IO 관련 스크립트로 수정을 해보겠습니다.

 

#!/usr/bin/perl
$user = $ARGV[0];

$password = $ARGV[1];

$server = $ARGV[2];

$disk_name = $ARGV[3];

$result = `wmic -U $user%"$password" //$server "SELECT DiskReadBytesPerSec,DiskWriteBytesPerSec FROM Win32_PerfFormattedData_PerfDisk_PhysicalDisk where Name like '%$disk_name%'"`;


@split_test=split(/\n/,$result);
my @split_test_2=split(/\|/,@split_test[2]);

@split_test_2[0]=@split_test_2[0] / (1024*1024);
@split_test_2[1]=@split_test_2[1] / (1024*1024);
my @split_test_3=split(/ /,@split_test_2[2]);

 

print "DiskReadBytesPersec:@split_test_2[0] DiskWriteBytesPersec:@split_test_2[1] DiskName:@split_test_3[1]\n";

이게 제가 수정한 스크립트 내용인데요.

보면 5번 째 줄에 원하는 파티션을 고를 수 있도록 드라이브 라벨을 입력할 수 있게 변수를 하나 더 추가 했습니다.

그러고 6번 째 줄 wmic에 있는 select 구문을 수정해줬는데요.

흔히들 알고 계시는 select 구문이 맞으니 겁내실 것 없습니다.

select 구문을 보고 의문이 드는게 있다면 저 table 명과 column명을 어떻게 알아내느냐..

처음에 저도 몰라서 구글링을 통해서 저 select 구문을 통채로 가져와서 썼었는데요

회사 형이 아주 좋은 툴을 알려주시더라구요

WMIexplorer라는 툴인데요 말 그대로 WMI를 탐색할 수 있습니다..

쿼리를 이용해서 원하는 걸 볼 수도 있고 원하는 테이블도 검색할 수 있습니다.

구글에 검색하면 바로 나오구요 설치형도 아니고 실행형이라 편리하내요.

(WMIexplorer : http://www.ks-soft.net/hostmon.eng/wmi/)

다운 받으셔서 원하는 값 확인하시고 다른 스크립트나 WMI 이용하실 때 참고하면 좋을 듯해요

 

본론으로 돌아와서 저 스크립트를 Cacti 설치경로/scripts 에 파일로 만들어줍니다.

저는 /var/www/html/scripts/WMI-DISK-IO.pl 로 만들어줬습니다.

 

이제 스크립트를 만들었으니 Cacti에 적용시켜야겠죠?

먼저 Cacti에 접속 후 Console -> collection Methods -> Data Input Methods 로 들어갑니다.

보면 많은 데이터 인풋 메소드들이 있는데 구경해보실분은 구경하고 우측 상단에 ADD를 눌러줍니다.

 

 

ADD를 눌러주면 위 사진 처럼 화면이 뜰텐데 Name은 원하시는 이름을 넣어주시면 됩니다.

Input Type은 Script/Command 로 선택해주시구요

Input String에는 lost-it에 적혀있는걸 참고해서 다음과 같이 입력해주시면 됩니다.

 

perl <path_cacti>/scripts/WMI-DISK-IO.pl <user> <password> <host> <Label>

 

<> 안에 들어있는 것들은 인자값을들 말하는 거니 따로 수정하실 필요없이 파일명만 맞게 수정해주시면 됩니다.

 

 

입력을 다 했으면 Create 버튼을 눌러 생성시켜 줍니다.

그러면 Input Fields와 Output Fields 가 보이실텐데요 먼저 input Fields 부분의 ADD를 눌러줍니다.

눌러보면 아래 같은 화면이 뜨게 되는데요

 

 

여기서 설정해줘야되는건 Field [Input]과 Friendly Name 입니다.

Field [Input]은 위에서 Data Input Methods를 추가할 때 Input String부분에 <>안에 넣어줬던 값이 Drop Box로 출력되는건데요

제가 만든 스크립트를 이용하기 위해서는 이 DropBox안에 있는걸 하나하나 다 생성해줘야합니다.

우선 user가 선택되어 있으니 그대로 두시고 Friendly Name에 원하시는 이름을 써주시면 됩니다.

로그인 계정이 아니라 Cacti에서 사용할 필드명입니다.

(말로 이해가 되지 않을까 사진을 찍었습니다. 왼쪽에 굵은 글씨들이 Friendly Name이 출력된 것입니다.) 

 

Friendly Name 입력하시고 Create 버튼 눌러주시면 됩니다.

이런 식으로 DropBox 값을 순차적으로 생성해주시면 되는데요, host 값을 설정할 때만 추가적으로 Special Type Code란에 hostname이라고

입력해주시면 됩니다.

이렇게 Input Fields 생성은 끝났고 이번에는 Output Fileds를 설정해줘야합니다.

역시 Add 버튼을 눌러보면 아래사진 처럼 나오는대요

 

 

Output Fields도 Input Fields와 비슷하게 설정을 해주면 됩니다.

다만 Filed [Output] 란에 입력을 직접해줘야한다는건데요.

이 부분은 위 스크립트에 마지막 줄에 print 문을 참고하면 됩니다.

print "DiskReadBytesPersec:@split_test_2[0] DiskWriteBytesPersec:@split_test_2[1] DiskName:@split_test_3[1]\n";

출력내용을 보면 DiskReadBytesPersec 하고 DiskWriteBytesPersec, DiskName 이렇게 3가지가 있습니다.

이 세가지를 Field [Output] 란에 하나씩 입력해주면 됩니다. Friendly Name은 입맛대로 설정해주시면 됩니다.

여기까지 하셨으면 아래 사진처럼 혹은 비슷하게 설정이 됬을 겁니다.

 

혹시 모르니 Save 버튼 한 번 더 눌러주고 Console -> Templates -> Data Templates로 갑니다.

데이터 템플릿에 들어가보면 이것 저것 정신 없어 보이는데

맨 위에 Data Templates에 있는 Name칸에 원하시는 이름 넣어주시고

그 아래 Data Source에 있는 Name에도 원하시는 이름 넣어주시면 되는데 lost-it을 참고해서 저는

|host_description| - WMI-DiskIO-DataTemplate 이렇게 입력 했습니다.

파이프 안에 이름은 아마 Cacti 자체에 제공되는 기능인듯한데요 .. 따로 찾아보지는 않았습니다.

그리고 Data Input Method DropBox에서 아까 만들어준 Data Input Methods를 선택해줍니다.

이 상태로 생성을 하려고 하면 Internal Data Source Name을 입력하라고 에러가 날텐데요

이제부터 설정하는 것들은 그래프를 그릴 때 직접적으로 영향을 주는 값들입니다.

우선 아무 값이나 Internal Data Source Name에 입력해주고 저장을 합니다.

그러면 저장하기 전하고 입력하는 부분이 달라졌을텐데요

이건 말로 설명하는 것보단 제가 설정한 화면을 보는게 더 빠를 것 같내요

 

 

이게 제 설정 내용인대요. Data Source Item 부분을 보면 위에 탭이 3개가 있습니다.

아까 설정해줬던 Output Fields에 대해서 각각 설정을 잡아준거구요

지금 보이는 저 화면은 DiskLabel에 대한 설정인데 원하는대로 라벨리 출력은 안되더라구요 .....

Read/Write에 대한 설정도 위 화면이랑 크게 다를건 없는대요

Read/Write는 Maximum Value와 Data Source Type그리고 Output Filed가 위 화면과 다릅니다.

맥시멈은 아무래도 그래프에 출력되는 최대값을 설정하는 걸 말하는듯 합니다.

(U를 사용하면 최대치를 사용안한다고 되있는데 .. 이 말이 최대치에 한계가 없다는건지 설정을 안해주겠다는건지 모르겠내요)

(더구나 U를 사용했더니 그래프가 안그려지는 현상이...어떤 내용인지 알게 되면 수정하겠습니다.)

저는 Read/Wirte에 맥시멈값을 1000으로 잡아줬구요 기본값은 100입니다.

그리고 아웃풋 필드는 Read면 아까 데이터 인풋 메소드에서 설정해줬던 Read 값을 선택해주면 됩니다.

Write도 마찬가지로 설정해주면 되구요..

그리고 밑에를 보면 Custom Data 란이 있는대요

보면 아까 Data Input Methods 설정해줄 때 입력해줬던 Input Fields의 Fiendly Name들입니다.

미리 저 곳에 값을 입력해두면 그 값으로 고정이 되기 때문에 여러 호스트에 적용을 못하게 됩니다.

그래서 Use Per-Data Source Value(Ignore this Value)를 체크해줍니다.

이걸 체크해주면 그래프를 그릴 때 원하는 값을 입력해줄 수 있게 됩니다.

이렇게 설정을 해줬다면 Save 버튼을 눌러 저장을 해줍니다. Data Template 설정은 이게 끝입니다.

 

다음은 마지막으로 Console -> Templates -> Graph Templates로 갑니다.

역시나 우측 상단에 Add를 눌러줍니다.

Add를 누른 직후에는 딱히 입력해줄 값이 없습니다.

그냥 보이는대로 Name과 Title을 입력해주시고 Create 눌러주시면 됩니다.

Title을 설정할 때 |host_description| 이걸 입력하셔도 상관없습니다.

 

 

생성이 완료되면 바로 화면이 바뀌는데요 그 화면 위쪽을 보면 이렇게 No Items라고 출력이 되어있습니다.

이제 이 두 곳을 채워줘야합니다. 다행인건 Graph Template Items를 추가하면 자동적으로 Graph Item Inputs도 추가가 됩니다.

Graph Template Items에 Add를 눌러줍니다.

들거가게 되면 또 여러 입력칸들이 나오는대 바로 제가 입력한 사진을 보겠습니다.

 

 

먼저 Data Source는 DropBox로 구성되어있는대요 눌러보면 기본적으로 제공되는 여러가지 데이터템플릿도 같이 보입니다.

그 중에서 원하시는 데이터템플릿, 여기서는 먼저 Read에 대한 그래프를 설정하기 위해서

아까 생성한 Data Template 중에 DiskRead를 선택해줬습니다.

Color는 그래프 상에 그려질 때 출력되는 색상을 골라주는 것이구요

Opacity/Alpha Channel은 그려지는 그래프의 투명도 설정입니다. 100%로 설정해주면 완전 찐한 그래프가 그려집니다.

그리고 이제 중요한 Graph Item Type.  DropBox를 열어보면 여러가지가 있는데

그 중에 제가 아는 것은 세 가지입니다. AREA와 GPRINT 그리고 COMMENT인대요

AREA는 직접적으로 Cacti 그래프에 그리고 싶을 때, 즉 그래프화면에 출력을 시켜주고 싶을 때 선택하는 값이구요

GPRINT는 직접적으로 그래프에 출력을 되지 않지만 그래프 밑에 TEXT형식으로 값을 출력시키고 싶을 때 선택해줍니다.

COMMENT는 그냥 그래프 밖 여백에 글을 출력시켜 놓는거구요.

그리고 사용해보지는 않았지만 HRULE과 VRULE은 아마 가로세로축 이름을 설정해줄 때 사용하지 않을까 싶내요

그 다음 Consolidation Function의 DropBox를 열어보면 AVERAGE, MIN, MAX, LAST 이렇게 4가지가 있습니다.

다 단어 그대로의 의미를 갖습니다. AVERAGE는 평균값을, MIN은 최소값을, MAX는 최대값을..

LAST는 그 출력할 정보의 마지막 값을 출력하고자 할 때, 다시 말하자면 그 시점에 실질적인 값을 출력하고자 할 때 선택합니다.

마지막으로 Text Format은 그래프 화면에서 범례 형식으로 출력될 이름을 써주면 됩니다.

그 외 나머지는 사용을 하지 않아서 뭔지 모르지만 영어를 대충 해석하면 쉽게 사용할 수 있지 않을까 싶습니다..

이렇게 Write도 마찬가지고 설정해주고 Save눌러주시면 됩니다.

이제 스크립트를 Cacti에 적용시키는 작업은 끝이 났습니다.

이제 제대로 작동을 하는지 테스트를 해보겠습니다.

Device 추가하고 그래프 추가하는걸 다 안다는 가정하에 생략하겠습니다.

디바이스를 추가해주고 방금 만들어준 Graph Template을 추가해준 뒤 Create Graphs for this Host를 눌러보면

 

이렇게 그래프가 아직 생성되지 않고 기다리고 있습니다.

이유는 위에서 만든 스크립트를 사용하려면 인자값을 넣어줘야하는데 아직 Input Field에 대한 값을 넣어주지 않았기 때문이죠

오른쪽에 체크를 해주고 Create를 눌러봅니다. 그러면 아까 저 ~ 위에서 보여드렸던 화면이 나옵니다.

 

 

이 곳에 그래프를 그리고자하는 대상의 정보를 입력해주면 됩니다.

DiskLabel은 예를 들어 C드라이브를 보고 싶다 하시면

C 혹은 C: 이라고 입력하시면 됩니다.

다 입력하셨고 지금까지 설정한 값이 아무 이상 없다면 Create를 눌렀을 때 아무런 에러가 뜨지 않을 것 입니다.

이제 Graph가 제대로 그려졌는데 확인을 해줍니다.

처음 그래프 생성을 하고 난 직후 몇 분정도는 RRD파일이 생성되지 않아서 그려지지 않을 텐데요

시간이 좀 지나면 rrd파일이 생성되고 그래프가 정상적으로 보이게됩니다.

RRD가 생성된거 같은대도 그래프가 그려지지 않는다면 ... 설정값을 확인해보시거나 그래프 디버깅모드를 한번 해보시면

원인을 찾으실 수 있습니다.

저는 Hyper-V에 올려놓았던 Windows Server 2008 R2를 대상으로 해봤구요

쉬는 녀석이라 특별히 IO가 발생하지 않아서 HDTune을 이용해서 IO를 발생시켜준 뒤 테스트 했습니다.

 

 

그래프 모양이 네모라서 그렇게 이쁘지는 않지만 그래도 정상 작동을 합니다.

이렇게 모든 설정이 끝났구요.

Data Template이나 Graph Template은 원하시는 설정이 있으시면 입맛대로 수정하시면 됩니다.

스크립트도 WMI Explorer를 사용해서 원하는 테이블에 원하는 칼럼을 찾으셔서 수정하시면 되겠구요 ~

 

설명이 많이 부족한건 이 많은 기능들을 다 사용해보지 않고, 설정도 해보지 않고 제가 했던 내용만 적는 바람에

내용이 많이 부실 한거 같내요. 대부분 lost-it을 참고해서 만들었습니다.

그 외 모르는 점들은 구글링하고 영단어 검색하면서 했습니다.

아는 것도 없이 막 쓴 글이라 틀리거나 수정할게 많을 수도 있습니다.

수정해야할 부분이 있다면 댓글 달아주세요 !

 

참고 URL : http://www.lost-it.org/drupal/?q=node/527

 

 

 

' 2016년 이전 > Server' 카테고리의 다른 글

Cacti Windows Physical Memory 설정  (0) 2014.03.10
CactiEZ를 이용한 Cacti 설치  (0) 2014.03.06
FTP Active Mode & Passive Mode  (0) 2014.01.08
vsftpd 설치 및 설정  (1) 2009.11.12

+ Recent posts