Tech Info - 네트워크 및 시스템 관리
상태바
Tech Info - 네트워크 및 시스템 관리
  • 승인 2005.12.06 00:00
  • 댓글 0
이 기사를 공유합니다

오픈소스 툴 크로켓, 가볍고 유용하다

네트워크 관리 베이스라인을 손쉽게 … 계층적 구성 트리 이용

애플리케이션이 느려지면 애플리케이션 서버의 CPU 이용률이 정상적인지 여부를 알고 싶을 것이다. 가볍지만 유용한 오픈소스 툴인 크로켓(Crocket)은 이렇듯 네트워크 관리에 있어 가장 중요한 부분, 즉 베이스라인(baseline)을 쉽게 만들 수 있게 해준다.

전면적인 네트워크 관리 시스템과 달리, 크로켓은 스태프에게 큰 부담을 주지 않는다. 그리고 인기 있는 MRTG(Multi Router Traffic Grapher)와 달리 크로켓에는 계층적인 구성 트리(Hierarchical Configuration tree)가 있으며, 이는 곧 한번 SNMP 커뮤니티 문자열(community string)을 설정해서 이것이 모든 하부조직에 영향을 미치게 할 수 있다는 것을 의미한다.
크로켓이 있으면 그래프당 단 두 개가 넘는 카운터를 모니터링할 수가 있다. 나아가 많은 써드파티 소프트웨어들이 프라우터에서의 프레임 릴레이 에러율에서부터 서버에서의 디스크 및 CPU 이용량 측정에 이르는 모든 것을 모니터링하기 위해 이것을 지원하고 있다.

대부분 유닉스에서 실행
크로켓은 대부분의 유닉스 버전에서 실행이 된다. 어떤 사람들은 이것을 윈도에서 돌리기도 하지만 첫 이행에서는 그리 좋은 생각이 아니다. 우리는 데비안 리눅스(Debian Linuz)를 이용해 32MB의 램이 있는 로우엔드 P100 박스에 크로켓을 설치했다. 이 구성은 그래프를 느리게 만들기는 하지만 가격면에서는 단연 으뜸이다.
크로켓은 원래 바이너리(binary)가 아니라 인터프리티드(interpreted) 패키지지만, 각자 선택한 리눅스 배포판이 있는 사전 제작된 패키지를 이용하기를 강력하게 권하는 바다. 크로켓 홈페이지에 올라와 있는 TGZ(tarred and g-zipped) 패키지(현재 버전 1.0.5)를 이용하는 것도 한 가지 방법이지만, 초보자라면 데비안용으로는 apt-get, 레드햇용으로는 up2date나 yum 명령어가 있는 RPM을 이용해서 가장 최신의 가장 멋진 크로켓 이미지를 설치하는 게 좋다.
데비안 시스템에 크로켓을 설치할 때는 아파치 웹 서버가 로딩 돼 있는지를 확인한 다음, apt-get 명령어를 이용해 크로켓을 설치하라. 이 때 /etc/apt-get/sources. list를 변경해서는 안 된다. 이 디폴트값은 제대로 잘 작동할 것이기 때문이다.

작동 방식
크로켓은 사용자가 지정한 간격으로 장비를 폴링(polling)하고, 사전 지정된 SNMP OID(object identifier)를 수집한다. 이것은 RRD툴(RRDTool)로 데이터를 공급하는데, RRD툴은 최신 데이터를 보관하고 15분이나 60분 등의 간격으로 오래된 데이터를 에버리지(average)로 보내는 ‘라운드로빈(round-robin)’ 데이터베이스다. 크로켓은 RRD 툴의 그래픽 기능을 이용해 호스트에서 웹 서버에 대한 그래프를 보여준다.
데비안 패키지에서 크로켓의 구성 파일은 /etc/cricket/config 안에 있다. 이 파일들은 크로켓에게 장비나 장비 그룹에서 어떻게 수집하는지뿐만 아니라 에러 처리 방식과 폴링을 해야 할 때를 알려준다. 컨피그 루트 디렉토리와 서브디렉토리를 포함한 모든 디렉토리들은 두 가지 유형의 파일로부터 구성 정보를 수집하는데, 그 하나는 디폴트 파일(default file)로 이것은 주어진 서브디렉토리에서 어떠한 구성 환경이든 셋업을 한다. 다른 하나인 타깃 파일(target file)은 장비들에게 크로켓이 트리의 이 부분을 모니터링할 것이라는 사실을 알린다. 디폴트 파일은 snmp 버전이나 프로토콜 통신에서 사용될 SNMP 버전 등을 셋업하며, 타깃 파일은, 예를 들어 장비에 연결하는 데 이용되는 호스트 이름을 나타내는 타깃 동사(verb)를 사용하는 특정 장비를 셋업한다.
크로켓은 어떠한 서브디렉토리든지 그 위에 있는 디렉토리의 속성을 이어받는 상속성의 원칙에 따라 작동한다. 한 그룹에서 우리는 상속성을 이용해 그 지리적 위치를 기반으로 장비용으로 별도의 SNMP 커뮤니티 문자열을 만들었다. 유사한 장비를 또한 서브디렉토리 체계에 둘 수도 있는데, 예를 들어 /etc/cricket/config/westside/servers는 도시 서쪽에 있는 모든 서버가 될 수 있다. 서버 서브디렉토리에 있는 모든 서버는 서쪽의 속성(이 경우 커뮤니티 문자열)뿐만 아니라 westside/servers 디렉토리에 있는 속성들까지 상속받게 된다.
주어진 서브디렉토리용의 디폴트 파일에는 그 자체의 카운터와 사용될 SNMP OID, 그리고 그래픽 방법론이 포함돼 있다. 주어진 서브트리 안에서 장비 유형을 섞는 것은 좋은 생각이 아니다. 즉 특정 서브트리용 디폴트가 하드드라이브 이용량을 추적할 경우 라우터가 이것을 상속하는 것은 소용이 없다.
크로켓은 거기에 연관된 카운터만 있으면 거의 어떤 것이든 모니터링할 수가 있다. MRTG 사용자들도 감사하겠지만 인바운드 및 아웃바운드 인터페이스에서 옥테트(octet, 바이트) 수를 알면 인터페이스에 문제가 있는지 여부를 파악하는 데 도움이 된다.
보통 크로켓이 데이터를 수집해 오는 장비는 타깃 파일에 지정이 돼 있는데, 여기서는 IP 어드레스가 포함될 것이다. 그 대신 이들을 /etc/hosts 파일에서 정의되도록 할 수도 있고 아니면 보다 더 좋게 DNS에서도 가능하다. 우리가 모두 알다시피 IP 어드레스는 바뀔 수 있고 바뀔 것이며, 숫자 어드레스보다는 상징적인 것으로 하는 게 네트워크 관리를 셋업하는 데 수고가 덜 들어간다.
디폴트 파일을 만지려고 애쓰며 시간을 낭비하지 말라. 다양한 업체의 OID를 쓰기보다는 크로켓 컨트리브(Contrib) 페이지(cricket.sourceforge.net/contrib/)를 찾으라. 우리가 가장 좋아하는 크로켓용 컨트리브 스크립느는 GenRtrCfg로, 이것은 주니퍼와 시스코 라우터, 방화벽 및 스위치 등을 지원한다. 이것은 자동탐색용으로 텔넷이나 SSH를 통한 원격 명령어가 아닌 SNMP를 사용한다.
하지만 구성을 셋업한다고 해서 그래프가 만들어지는 것은 아니다. 구성을 컴파일링하고, 크로켓의 컬렉터(collector)를 셋업해서 로컬 스케줄러로부터 실행을 시켜야 한다. 데비안 리눅스에서는 이것이 /etc/cron.d/cricket 파일에 있는 크론에서 실행이 될 것이다. 크로켓 컬렉터는 보통 5분마다 불려 나와서 크로켓 컨피그 디렉토리(/etc/cricket/config)에 정의된 모든 타깃에서 데이터를 수집한다.
디폴트 데비안 설치에서는 특정 크로켓 사용자를 지정함으로써 루트 이용을 피한다. 그리고 구성 파일을 컴파일링 하기 위해 ‘cricket’으로 로그인을 하거나, 혹은 ‘su’를 이용해서 컴파일링용으로 크로켓 사용자를 흉내낼 수 있다.

su -m --command=”cricket-compile” cricket

이 때는 cricket-complie 명령어를 루트 사용자로서 실행하지 않는 게 중요하다. 그렇게 할 경우에는 컴파일이 만들어내는 모든 파일이 루트 소유가 되며, 크로켓 사용자는 이들에게 액세스를 할 수가 없어서 데이터 수집이 힘들어진다.
데비안은 적절한 크론 엔트리를 셋업해 컬렉터가 몇 분마다 실행이 된다. 하지만 셋업을 정확히 할 때까지는 이것을 설치한 후 몇 분마다 루트가 메일함에 에러 보고서를 보게 될 것이다.

SNMP의 안전과 셋업
데이터 컬렉션을 셋업하기 전에 먼저 장비에서 SNMP를 잠궈둬야 한다. 나중까지 기다리면 데이터 컬렉션을 다시 한번 셋업해야 하며 이것은 결코 재미삼아 할 수 있는 일이 아니다.
대문자와 소문자, 그리고 특수 문자가 복합된 SNMP 커뮤니티 문자열을 사용하라(특히 패스워드). rw 액세스는 필요치 않을 경우 꺼두면 된다. 그런 다음 장비가 SNMP에 응답하는지 확인하라. 네트워크에 연결된 장비는 어떤 것이든 인터페이스가 있기 때문에 다음과 같이 이것을 이용하는 장비 인터페이스의 목록을 뽑아보라.

/usr/share/cricket/util/listInterfaces hostname community-string

시스코 포트 구성에서 설명 기능을 이용하는 것처럼, 라우터나 스위치에서 하는 어떠한 셀프 도큐멘팅 작업도 크로켓에서 보여질 것이다. 따라서 이런 설명 필드를 최신 것으로 유지해야 크로켓 그래프를 보는 사람들이 자신들이 무엇을 보고 있는지 정확히 알 수가 있다. 예를 들어 ‘일일 이용량(그림)’에 대한 셋업에서는 COA_EXCHANGE를 하나의 라벨로 보여주고 있다. 이것은 스위치 설명 필드에서 뽑혀나온 것으로 수동으로 입력할 필요가 없다.
GenRtrCfg 스크립트를 이용해 다양한 라우터, 스위치 및 방화벽을 구성하려면, 이것을 /usr/share/cricket/util 디렉토리로 복사하면 된다. 스크립트가 각 장비용의 서브디렉토리를 생성할 것이기 때문에, 장비용으로 부모 디렉토리를 내비게이팅해서 GenRtpCfg를 불러내면 된다. mys3333cr3t라는 커뮤니티 문자열을 이용해 datacenter-6509라는 HQ 라우터에 대한 구성을 만들려면 다음과 같이 입력하면 된다.

cd /etc/cricket/config/headquarters
/usr/share/cricket/util/genRtrConfig -C mys3333cr3t
-nounused datacenter-6509

이제 GenRtrCfg가 나머지를 돌봐불 것이다. 이것은 datacenter-6509라는 서브디렉토리를 만들고 적절한 타깃과 디폴트를 배치시킨다.

테스팅
컬렉터 기능을 수동으로 테스트하거나, 혹은 최소한 이것을 어떻게 하는지를 알아 두어야 장애관리를 할 때 예를 들어 왜 그래프가 업데이트되지 않는지 등을 알 수가 있다.
‘cricket’으로 로그인을 하거나, 혹은 ‘su’ 명령어를 이용하라.

su -m --command="/usr/share/cricket/collector" cricket

컬렉션에서의 어떠한 에러도 여기서 확실히 나타날 것이다. 절대 루트를 사용해서는 안 된다.
일단 셋업이 정해지고 수집이 진행되면 호스트를 브라우징함으로써 크로켓 웹 계층을 내비게이팅할 수가 있다. 예를 들어 호스트 이름이 crickethost라면 그 URL은 crickethost/cgi-bin/cricket/grapher.cgi가 될 것이다. 그래프에 아무런 데이터가 뜨지 않더라도 놀라지 말라. 여기에는 몇 분이 걸리기 때문에 가서 커피를 한 잔 만들어 오면 된다. 그런 다음 다음과 같이 크로켓의 그론 파일에 있는 cron을 확인하라.

/etc/cron.d/cricket

크로켓을 처음 사용하는 사람들이 컴파일 명령어를 사용하면서 흔히 부딪치는 에러 중 한 가지는 ‘타깃 유형에서 어떠한 ds 태그도 발견되지 않는다(No ds tag found for target type)’라는 것이다. 이것은 간단히 말해 타깃 파일에 있는 타깃 유형이 유효하지 않다는 얘기다. 타깃 파일에 있는 타깃 유형을 점검해서 이 유형이 ‘디폴트’ 파일 안 어딘가에(기존 디렉토리 안이나 혹은 트리에서 더 높은 어딘가) 정의돼 있는지를 확인하라.
주어진 페이지의 아웃풋에서 값 대신 nan이 보인다면 이는 곧 /var/lib/cricket/에서 허가(permission)가 잘못됐다는 얘기다. 이 디렉토리가 크리겟 사용자 소유로 되어 있는지를 확인하라.
일단 크로켓이 돌아가면 주, 월, 연별로 사용할 수 있는 베이스라인을 갖게 되며, 모니터링하는 모든 것에서 무엇이 정상적인지를 알게 될 것이다. 따라서 다음 번에 네트워크가 느려질 때는 재부팅을 하지 않아도 된다.


댓글삭제
삭제한 댓글은 다시 복구할 수 없습니다.
그래도 삭제하시겠습니까?
댓글 0
댓글쓰기
계정을 선택하시면 로그인·계정인증을 통해
댓글을 남기실 수 있습니다.