먼저 이 글에서 언급할 내용들은 PC가 2대 필요합니다.

한 대는 인터넷이 되지 않는 환경에 있는 우분투

나머지 한 대는 인터넷에 연결이 되어있는 우분투

 

인터넷이 두 대 모두 연결이 되어있다면 검색해도 나오는 걸 굳이 이렇게 글로 남기진 않겠죠?

인터넷이 된다면 레드햇 계열에서 사용하는 yum과 비슷한 역할을 하는 apt-get이 있으니 걱정이 없으니까요

 

어차피 인터넷이 않는데 SNMP를 설치해서 뭐하나 싶으신 분들이 있을 수도 있겠는대요..

이번에 폐쇄망 환경에 있는 우분투에 SNMP를 설치해야하는 일이 있어서 혹시나 필요하신분 있으실까 올려봅니다 ~

 

또 굳이 이 글에서 말하는 방법으로 안하셔도 됩니다.

구글에 조금만 검색해보면 .deb 파일을 쉽게 구하실 수 있습니다.

저는 주로 레드햇계열을 사용해서 우분투는 이번에 처음이라 deb 검색 자체가 좀 어렵게 느껴지더라구요

RPM같은 경우는 rpmsearch 같은 곳에 바로 들어가서 검색하면 되는데

데비안계열 패키지는 싸이트는 있는데 뭔가 좀.. 헷갈리고 그렇더라구요..

더구나 rpm이나 deb나 의존성이라는게 은근 귀찮고 무시 못할 존재기 때문에..

그렇다고해서 안된다는건 아니고 좀 찾아보면 바로 패키지는 나옵니다. 다만 좀 더 쉽게 deb 패키지를 구할 수 있는 방법이 있습니다.

또 꼭 패키지가 아니어도 소스를 손수 컴파일하셔서 설치하셔도 되구요

 

어쨋든 이 방법은 크게 복잡하진 않습니다.

apt-get을 사용해서 패키지를 설치하고 나면 특정 디렉토리에 deb 파일을 남겨두게 되는데 그냥 그걸 가져와서 사용하는겁니다.

우선 snmp를 설치하는 글이니 인터넷이 되는 우분투에서 apt-get을 이용해 snmp를 설치 해줍니다.

아 설치하기 전에 기존에 apt-get을 이용해서 패키지를 설치한적이 있다면 snmp 패키지와 섞이지 않도록

apt-get clean을 먼저 입력해줍니다. 그러면 deb가 저장되는 디렉토리에 있던 기존 파일들이 삭제가 됩니다.

그리고 아래 두 줄을 입력합니다.

 

apt-get install snmp

apt-get install snmpd

 

이렇게 두 줄만 입력해주면 snmp관련 패키지들이 바로 설치가됩니다.

제대로 설치가 됬다면 netstat을 입력했을 때 localhost:161 혹은 127.0.0.1:161 을 리스닝하고 있는 상태일 겁니다.

그럼 이제 /var/cache/apt/archives/ 로 들어가봅니다.

들어가보면 여러 deb 파일들이 있을텐데요.

위에서 먼저 말했던 apt-get clean을 쳐주셨으면 깔끔하게 snmp 관련 패키지들과 lock파일, partial이라는 디렉토리가 있을겁니다.

lock이랑 partial은 정확히 뭔지는 모르겠내요..

저는 저 경로로 들어가보니 아래 파일들이 있었습니다.

풀네임이 아닌건 따로 적어놔서 이름만 써놓은 상태라 이렇내요

 

snmpd_5.4.3
libsnmp15
libsnmp-base
libperl5
perl-base
libsensors4
libwrap0
snmp_5.4.3
tcpd_7.6
perl

perl-modules
smistrip
snmp-mibs-downloader

 

그냥 각각 패키지들이 뭔지 알아보진 않았고 단순히 인터넷이 되지 않는 우분투에서 구동만 시키기 위해서 바로바로 작업을 했습니다.

저 파일들을 이제 usb에 넣어도 되고 cd로 구워도 되고 방법은 많습니다. 원하시는 방법으로 파일을 옮겨주시구요

되도록이면 한 디렉토리 내에 몰아서 옮기시는게 옮기고 나서 설치할 때 좀 편합니다.

인터넷이 되지 않는 환경에 있는 우분투로 옮기셨으면 이제 가져온 패키지들을 설치합니다.

가령 패키지들을 옮긴 디렉토리가 ~/snmp_pkg/ 라면

 

dpkg -i ~/snmp_pkg/*.deb 혹은 dpkg -i ~/snmp_pkg/*

 

이렇게 입력해주시면 저 파일들이 서로 의존성을 갖기 때문에 자체적으로 판별해서 설치를 하게 됩니다.

처음에 모르고 한 개 한 개 따로따로 하다가 귀찮아서 * 해줬더니 알아서들 설치되더라구요

에러가 없이 설치가 됬다면 설치 끝입니다.

SNMP 설치가 끝나고 설정을 해야 정상적으로 사용이 가능할텐데요

설정부분은 예전에 올린 FreeBSD에서 SNMP 설정하는 방법과 크게 다른건 없어보이더라구요.

 

아 그리고 저 위에 패키지 목록에 보면 snmp-mibs-downloader 라는 패키지가 있는데 이 패키지는 이름 그대로

mib들을 추가적으로 다운(?)받아주는 패키지입니다.

추가적으로 mib를 받지 않으면 snmp로 볼 수 있는 정보가 꽤 한정적이어서 cacti 같은 툴을 사용하실 목적이시라면 꼭 설치해주셔야합니다..

신기한건 eth0를 내려놓고 사용해봤는데도 mib 파일들이 생성 된다는 겁니다.

아마 snmp 설치하면서 따로 생성됬던 파일들을 가지고 mib 파일로 재생성해주지 않나 싶더라구요.

사용방법은 그냥 패키지를 설치하면 알아서 mib를 추가 생성해줍니다.

알아서 생성이 안된다면 패키지 설치 후 그냥 download-mibs 라고 입력해주면 생성이 됩니다.

추가 생성된 mib 들은 /usr/share/mibs/에 /netsnmp/ 디렉토리에 저장되어있습니다.

이걸 사용하려면 /etc/snmp/snmp.conf 를 수정해줘야하는대요

저 파일을 열면 처음 몇 줄은 주석이고 딱 한 줄만 활성화 되어있는 상태일겁니다. 

 

mibs :

 

아마 저 상태일텐데 저 부분을 주석처리 해버리면 됩니다.

구글링해보니 mibs +ALL도 된다고하는데 저는 안되더라구요..

다른글 보니 주석처리하면 된다길래 해봤는데 바로되더라구요

 

mib가 추가됬는지 안됬는지는 snmpwalk를 이용하면 눈에 확 띄게 달라진걸 확인할 수 있을꺼에요

제대로 적용이 안됬다면 snmpwalk를 사용했을 때 출력되는 양이 상당히 적더라구요

하지만 적용이 되고 나면 엄청난 양의 출력물이..

 

이번 기회에 우분투를 거의 처음 사용해봤는데 명령어가 익숙치 않아서 그렇지

다른 배포판들과 크게 다른건 못 느끼겠더라구요~

느낌은 상당히 다르지만 레드햇계열이나 데비안계열이나 어쨌든 리눅스니 큰 괴리감은 없내요

 

어쨌든 간단하게 나마 SNMP 설치하는 법과 MIB 추가 적용시키는 방법을 적어봤습니다 ~

필요하신분이 있을라나 모르겠지만 틀린 부분이나 수정이 필요한 부분이 있다면 댓글 남겨주시면 수정하겠습니다.

CMD 명령어를 보면 이미 시스템 정보에 대해서 출력해주는 명령어가 있는대요

대표적으로 systeminfo와 dxdiag가 있겠내요

systeminfo는 CMD창에서 결과를 바로 출력해주고

dxdiag는 기본이 GUI로 창을 띄워 보여주긴하지만 옵션을 주면 파일로 저장이 가능하죠

 

컴퓨터 정보를 가져올 필요가 생겨서 저 두 녀석을 가지고 이리저리 배치파일을 만들어봤지만

systeminfo 같은 경우에는 설치된 OS 언어에 따라 따로 작성을 해야하는 단점이 있고..

dxdiag 같은 경우에는 영어로 저장이 되서 괜찮긴한데 제가 원하는 정보를 쏙쏙 빼오기는 너무 방대하더라구요..

그래서 찾다가 저번에 Cacti Template 만들 때 사용했던 WMI가 생각나더라구요

WMI도 처음에 배치파일 작성하다가 포기할까도 했는데 생각보다 빠르고 손 쉽게 작성이 되더라구요.

 

제가 필요했던 정보는

컴퓨터이름

IP주소

OS 버전(2003, 2008, 2008 R2 ...)

OS 아키텍쳐(32bit, 64bit)

OS 서비스팩 버전

OS 마지막 업데이트 날짜

물리 메모리 총 용량

CPU 갯수(물리적으로 박혀있는 갯수가 아니라 실질적으로 동작하는 프로세서 수)

HDD 파티션별 총 용량

IIS or Apache 존재 유무 및 버전

이렇게 정보가 필요했습니다.(DB관련도 필요한데 이건 아직 해결을 못했내요..)

 

아래 써있는 배치파일 내용을 보면 아시겠지만 주로 WMIC를 이용해서 정보를 꺼내왔고

for /f를 이용해서 원하는 값만 추려내 출력해주는 방법입니다.

 

for문은 CMD에 for /?라고만 쳐도 자세히 나오니 설명은 생략하겠습니다.

소스 내용 자체가 특별히 어려운 것 없이 WMIC를 이용하고 있어서 자세하게 설명은 안하겠습니다.

포스팅하면서 추가된 설명부분은 기울여놨습니다.

 

-------------------------------------------systeminfo_wmic.bat-------------------------------------------

@echo off
setlocal enableextensions enabledelayedexpansion

 

rem Language 확인
for /f "tokens=2 delims==" %%a in ('wmic os get oslanguage /format:list') do set lang=%%a

::중간에 IP주소 확인할 때 한글OS인지 아닌지 필요한데 그 때 사용하기 위해 작성

 

REM OS 버전 & 아키텍처
for /f "tokens=3-9 delims== " %%a in ('wmic os get caption /format:list') do set os_1=%%a&set os_2=%%b&set os_3=%%c&set os_4=%%d&set os_5=%%e&set os_6=%%f&set os_7=%%g
set osver=%os_1% %os_2% %os_3% %os_4% %os_5% %os_6% %os_7%

::변수가 쓸데없이 많이 써져있는데 이건 .. OS별로 풀네임 길이가 다른 이유로 최대치를 몇 개로 잡아야할지 몰라서 막 생성했습니다.

::좀 귀찮았던 것도 있구요

 

set osarch=x64
set wow64="%windir%\SysWOW64"
if not exist %wow64% set osarch=x86

::아키텍쳐 판별하는 부분인데 64비트에서만 있는 SysWOW64가 존재하는지 판별

 

REM HOSTNAME
set hname=%computername%
rem echo %hname%


REM IP ADDRESS
if %lang%==1042 (
IPCONFIG |FIND "IPv4 주소 . . . . . . . . . : 1" > %TEMP%\TEMP_DAT.txt
FOR /F "tokens=2 delims=:" %%a in (%TEMP%\TEMP_DAT.txt) do set IP=%%a
del %TEMP%\TEMP_DAT.txt
set IP=%IP:~1%
)
if %lang%==1033 (
IPCONFIG |FIND "IPv4 Address. . . . . . . . . . . : 1" > %TEMP%\TEMP_DAT.txt
FOR /F "tokens=2 delims=:" %%a in (%TEMP%\TEMP_DAT.txt) do set IP=%%a
del %TEMP%\TEMP_DAT.txt
set IP=!IP:~1!
)

::IP주소 구하는 부분인데.. 이 부분은 NIC가 두 개 이상이라면 꽤 수정을 해야되는 부분입니다.

::저는 필요한게 하나의 NIC에 대한 IP주소기 때문에 이렇게 작성한거구요.

::NIC 두 개 이상인 PC의 IP주소를 모두 출력하고 싶으신 분은 다르게 작성해야하지 않을까 싶습니다.

 

rem Memory
for /f "tokens=2 delims==" %%a in ('wmic computersystem get totalphysicalmemory /format:list') do set mem=%%a
set /a mem=%mem:~0,-4% / 1024
set /a mem=%mem% / 1024

::배치파일은 안타깝게도 큰 숫자에 대한 연산이 안됩니다.(2^31 = 2,147,483,648) 즉 2147483648보다 큰 숫자는 연산을 할 수가 없습니다.

::그래서 어차피 GB로 변환할 때 1000 으로 나누면 없어질 3자리는 미리 출력을 안하도록 하고 변환 작업을 진행합니다.

 

rem hdd
::for /f "tokens=2-3 delims= " %%a in ('wmic logicaldisk get filesystem^,name^,size ^| find "NTFS"') do set ::size_byte=%%b&set /a size_GB=!size_byte:~0,-3!/1048576&set label=%%a&set hdd_cap=!hdd_cap!!::label:~0,1!!size_GB!

rem hdd
for /f "tokens=2-3 delims= " %%a in ('wmic logicaldisk get filesystem^,name^,size ^| find "NTFS"') do (
set size_byte=%%b
set len=0
rem TB 인지 아닌지 검사
for /L %%i in (0,1,15) do (
 set len_1=!size_byte:~%%i,1!
 if "!len_1!" NEQ "" set /a len=!len!+1
 if !len!==13 (set /a size_GB=!size_byte:~0,-4!/1048576&set size_GB=!size_GB!0)else (set /a size_GB=!size_byte:~0,-3!/1048576)
 if !len!==14 (set /a size_GB=!size_byte:~0,-5!/1048576&set size_GB=!size_GB!00)else (set /a size_GB=!size_byte:~0,-3!/1048576)
 if !len!==15 (set /a size_GB=!size_byte:~0,-6!/1048576&set size_GB=!size_GB!000)else (set /a size_GB=!size_byte:~0,-3!/1048576)
) 2>nul
set label=%%a
set hdd_cap=!hdd_cap!!label:~0,1!!size_GB!
)

::HDD 정보 구하는 부분인데... 진짜 지저분하내요.. 각 PC마다 파티션이 어떤 이름을 가지고 있을지 모르니 라벨명을 구하고

::그에 대한 용량을 구해서 메모리처럼 GB단위로 변환합니다.

::그리고 하나의 변수에 저장을 시켜버리는 과정입니다. 출력 결과는 C100D400 이런식으로 나옵니다.

::소스 부분 밑에 결과 이미지 첨부해놓을테니 참고하세요

::그리고 중간에 테라바이트인지 아닌지 확인하는 부분이 있어서 더욱 지저분해보이는데요

::원하는 출력형태에 단위를 표시하지 않기때문에 GB단위의 값이 필요해서 테라바이트가 넘어가는 숫자들은

::변환 후 뒤에 0을 더 붙여주는 식으로 100TB 까지 표현가능하게 되어있습니다.

::PB까지 필요하신분은 'rem TB인지 아닌지 검사' 밑에 for문의 15를 16으로 바꿔주시고 한 줄 더 추가하시면 되겠내요.

::아니면 아예 단위 변환하는걸 수정하셔도..


rem Service Pack Info
for /f "tokens=2 delims==" %%a in ('wmic os get servicepackmajorversion /format:list') do set sp=%%a
set sp=SP%sp%
if %sp%==SP0 set sp=N/A


rem Processor
for /f "tokens=2 delims==" %%a in ('wmic computersystem get numberoflogicalprocessors /format:list 2^>nul') do set lo_processors=%%a
if "%lo_processors%"=="" (for /f "tokens=2 delims==" %%a in ('wmic computersystem get numberofprocessors /format:list 2^>nul') do set lo_processors=%%a )

::CPU 정보인데요. if문을 사용한 이유는 첫번째 for문에 있는 wmic 명령줄은 Windows Server 2008 이후에 있는 값이기 때문에

::if를 이용해서 최초 변수에 값이 없는 경우에 2003 의 명령줄로 실행되게 해주는 부분입니다.

 

rem Processor Clock
for /f "tokens=2 delims==" %%a in ('wmic cpu get maxclockspeed /format:list 2^>nul') do set cpu_hz=%%a
set clock_1=%cpu_hz:~0,1%
set clock_2=%cpu_hz:~1,2%

::CPU 클럭 수치인대요 이 부분은 제가 원하는 출력형태가 x.xx 인데  최초 출력형태는 4자리 정수로 나오기 때문에

::변수를 두개 이용했습니다.

 

rem IIS 존재유무
set iis_exist=IIS EXIST
set iis_fd=%windir%\system32\inetsrv\InetMgr.exe
if not exist %iis_fd% set iis_exist=IIS NOT EXIST

::단순하게 작성했습니다. IIS 설치하면 생기는 inetmgr이 존재하는지 판별하게 합니다.

 

rem IIS 존재하면 Version 체크
if "%iis_exist%"=="IIS EXIST" (
reg query "HKLM\SOFTWARE\Microsoft\InetStp" /v "SetupString" > %TEMP%\iis_ver.txt
type %TEMP%\iis_ver.txt | find "IIS" > %TEMP%\iis_sion.txt
for /f "tokens=3-4 delims= " %%a in (%TEMP%\iis_sion.txt) do set iis_ver=%%a&set iis_sion=%%b
del %TEMP%\iis_ver.txt
del %TEMP%\iis_sion.txt
)
if "%iis_ver%" NEQ "" set iis_version=%iis_ver% %iis_sion%

::위에 IIS존재유무에서 존재한다고 판별이되면 버전검사를 합니다.

::이 부분은 WMIC에 따로 없는 듯하여 찾아보니 레지스트리에서 답을 찾게 됬고 바로 작성을 했습니다.

 


rem Apache 존재유무
tasklist | find "httpd" > %TEMP%\apache_exist.txt
for /f "delims=" %%a in (%TEMP%\apache_exist.txt) do set apa_che=%%a
del %TEMP%\apache_exist.txt
set apa_exist=APACHE EXIST
if "%apa_che%"=="" set apa_exist=APACHE NOT EXIST

::이 부분 역시 단순하게 실행중인 프로세스 중에 httpd가 있으면 아파치가 설치됬다고 판단합니다.

::물론 이 부분이 제일 불완전하다고 생각합니다.


rem Apache Version
if "%apa_exist%"=="APACHE EXIST" (
httpd -v | find "Apache" > %TEMP%\apa_version.txt
for /f "tokens=3 delims= " %%a in (%TEMP%\apa_version.txt) do set apa_ver=%%a
del %TEMP%\apa_version.txt
)
if "%apa_ver%" NEQ "" set apache_version=%apa_ver%

::IIS와 마찬가지로 존재한다고 판별이되면 httpd 명령을 통해 버전을 구해줍니다.

 

rem OS Last Update Time
reg query "HKLM\SOFTWARE\Microsoft\Windows\CurrentVersion\WindowsUpdate\Auto Update\Results\install" /v "LastSuccessTime" > %TEMP%\last_update.txt 2>nul
for /f "tokens=3 delims= " %%a in ( %TEMP%\last_update.txt) do set last_uptime=%%a
if "%last_uptime%"=="" set last_uptime=Not Update!!
del %TEMP%\last_update.txt

::이 부분도 IIS 버전 체크와 비슷하게 레지스트리를 이용합니다.

::wmic를 아무리봐도 답이 없을 것 같아 검색을 해봤더니 친절하게도 레지에 날짜가 등록되어있더군요.

 

 

echo.HOSTNAME: %hname%
echo.IP ADDRESS: %IP%
echo.OS VERSION: %osver%
echo.OS Architecture: %osarch%
echo.TOTALMEMORY: %mem%GB
echo.NUMBEROFPROCESSORS: %clock_1%.%clock_2%*%lo_processors%
echo.IIS: %iis_exist% %iis_version%
echo.APACHE: %apa_exist% %apache_version%
echo.HDD: %hdd_cap%
echo.OS LAST UPDATE TIME: %last_uptime%

:end
endlocal
pause

 

-------------------------------------------systeminfo_wmic.bat-------------------------------------------

단순 노동으로 작성해서 그렇게 어려운 부분은 없을 것 같내요.

이 정보들 외에 따로 필요하신 것 있으시면 wmic 명령줄만 수정하시면 되구요

그렇게 중요하고 참신한 배치파일은 아니지만 나름 공부는 되었내요 ~

마지막으로 출력결과 이미지입니다.

IP주소는 출력이안된게 아니라 지운겁니다.

 

 

시간 진심 빨리가는듯

이번 달 초에 정보보안산업기사 접수했다 취소한지 얼마 안된거 같은데

벌써 리마 1급 2차 접수기간이라니

오늘 접수했으니까 시험당일날까지 51일남았는데

어떻게 준비를 해야하지

일단 예전에 올려놨던 기출문제나 풀어봐야겠다

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

  (0) 2014.06.19
뭐지 왜지 뭐지  (0) 2014.05.16
정보보안 산업기사 시험 볼껄 그랬나  (0) 2014.03.19
결국 정보보안산업기사 접수 취소  (0) 2014.03.06
정보보안기사/산업기사 필기 책 도착!  (0) 2014.03.06

어제 회사에서 심심해서 1회차 기출문제 풀었는데..

물론 찍은게 많이 맞아서 인것도 있지만

합격이던데.. 조금만 공부하면 합격선일거 같은데..

이미 취소했으니 여유롭게 공부하고 다음회차에 봐야겠다

생각보다 산업기사는 난이도가 그렇게 높지는 않은듯

 

오늘도 업무차 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

벌써 3월

부대에서는 그렇게 시간이 안가더니

어느 새 전역한지 달 수로 4달 째

3개월이 이렇게 빨리 지나갈 줄 이야

3.8

1.2.8

1.2.6

* 5

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

2014. 05. 12.  (0) 2014.05.12
2014. 04. 10.  (0) 2014.04.10
2014. 02. 17.  (0) 2014.02.18
2014. 01. 22.  (0) 2014.01.22
2014. 01. 13.  (0) 2014.01.13

업무 차 Cacti를 조금씩 공부하고 있는데

이렇다할 국내 사이트가 없어서 관련 정보찾기가 상당히 귀찮고 어지럽다..(영어만 몇 시간을 들여볼 때도..)

이번에는 Cacti에 Windows 8을 모니터링하려고 했는데 Cacti 설치 직후 제공되는 데이터 쿼리(SNMP - Get Mounted Partitions)에서 Virtual Memory는

출력이 잘 되나 Physical Memory는 아무리 찾아도 없길래 찾아보았다..

 

위 아래 사진은 Cacti 설치 직 후 바로 Windows 8.1을 붙이고 SNMP - Get Mounted Partitions를 추가하고 그래프를 생성했을 때..

 

 

딱 보면 알겠지만 이미 그래프를 그리기 전에 물리메모리에 대한 정보를 가져오질 못하고 있었다..

당연히 그래프를 그려봤자 물리메모리 그래프는 안나온다.

하여 처음에는 데이터 쿼리가 잘 못된줄 알고 확인차 FreeBSD도 똑같이 붙여봤다.

결과는.. 물리, 가상 메모리 둘 다 이쁘게 정보를 가져오고 이쁘게 그래프도 그려준다.

 

 

 

FreeBSD에 테스트를 해보고 나는 Win 계열은 다른 데이터쿼리나 템플릿을 써야되는 줄 알고 구글링으로 구할 수 있는

상당 수의 쿼리와 템플릿을 적용시켰었다.. 결과는 대 실패 거기다 템플릿 설치 이상하게 하는 바람에 Cacti 자체가 엉망이 되서

재설치를 했었다. 왜 안되는건가 하고 계속해서 구글링을 하다가 초반에 보고 무시해던 소스파일 수정하는 글을 다시 보게 됬다..

웬만하면 순정상태에서 하고 싶었지만 아주 간단하게 소스를 수정하는 거라 되지도 않는 영어실력으로 대충 보고

해당 라인을 주석처리 시켜보았다..

아래 사진 3장은 주석처리는 과정이다.

 

우선 cacti가 설치되어있는 디렉토리로 가서 scripts 디렉토리로 간다.(CactiEZ를 사용한다면 나와 경로가 같은 것이다)

scripts 디렉토리에 보면 ss_host_disk.php 라는 파일이 있다. 이걸 열어보자

열어보면 당연히 php로 작성되어있는데 주석처리하는 부분을 쉽게 찾아가려면 "$arr2" 라고 2번 검색해준다.

그러면 아래와 같은 라인을 찾을 수 있을텐데 바로 저 if문 라인을 주석처리해주면 된다.

 

 

if ($arr2[$i] > 100000) 요래 되있는걸

#if ($arr2[$i] > 100000) 오래 바꿔주던지 라인을 삭제하면 된다.

 

생각보다 상당히 간단했고 설레는 마음으로 다시 SNMP - Get Mounted Partitions를 추가하고 그래프를 그리러 갔는데..

있어야할 Physical Memory가 보이지 않았다.. 난 또 영어못해서 다른거 수정했나 싶었다.. 

 

근데 아무리 생각해도 소스 수정했다고 그게 바로 적용될리가 없다는 생각이 번뜩 들었고.. 뒤로 가서 디버깅 버튼을 한 번 눌러봤다..

사진에 표시한 status 수치가 변하길 바라면서.. (저 item 수치랑 rows 수치가 아마 그래프 그릴 떄 필요한 정보가 아닌가 싶습니다..)

 

결과는 성공했다.

아래 사진처럼 status 수치가 상당히 많이 늘어났다..

 

 

기분 좋게 Create Graphs for this Host 눌렀고 나는 Physical Memory를 볼 수 있었다..

 

 

특별히 달라지는 부분도 없고 메모리 정보 출력도 정확하다.

다만 소스 수정 후 있지도 않는 F, G, H, I, J 까지 인식을 하는데 이건 크게 신경안써도 될 것 같다.

영어를 해석을 다 못해서 왜 저 소스 부분을 없애면 이렇게 작동을 하는지 알지는 못했다..

영어 공부도 좀 해야되는데..

어쨌든 Cacti에서 Windows Physical Memory 출력시키기 끝

 

 

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

Cacti WMI 이용해서 그래프 템플릿 만들기  (1) 2014.03.12
CactiEZ를 이용한 Cacti 설치  (0) 2014.03.06
FTP Active Mode & Passive Mode  (0) 2014.01.08
vsftpd 설치 및 설정  (1) 2009.11.12

이래저래 책을 볼 틈이 너무 없어서

다음회차를 기약하며 취소 ~

시간이 주말도 평일도 없으니.. 다음회차 기다리면서 천천히 봐야지

+ Recent posts