그럼, SNMP에서 기본이 되는 MIB파일을 간단히 만들어 보겠습니다.

MIB파일은 ASN.1 문법으로 작성됩니다.
ASN.1 문법은 다른 곳에 많으니 참고해서 보세요.

아니면 MIB 브라우져를 이용하면 쉽게 만들 수 있을 것입니다.
허나 저는 기존에 있는 ~/mibs 밑에 있는 파일들을 참고해서 만드는 방법으로 만들었습니다.
직접 메모장에 타이핑한다는 뜻입니다. 이해도 돕고, 여러 모로 좋죠.

MIB하면 RFC에 정의된 SMI 니 뭐니 이런게 있는데, 차츰 찾아서 보시기 바랍니다.

MIB파일을 만들때, 아주 간단한 법칙이 있는데, 대강 이것만 알아도 될 듯.

1. 선언은    ::=           <---- 요걸로 한다.

2. 시작은 모듈이름 ::= BEGIN ~ 끝날 땐, END
모듈이름 DEFINITION ::= BEGIN
(내용)
END


3. 웬만하면 소문자로 시작한다.

4. IMPORT를 통해 데이터 타입을 불로오게 되고, 이것을 사용할 수 있다.
int 형은 Integer32, Counter 등의 데이터 타입으로 쓸 수 있고,
string 형은 DisplayString



[TEST-MIB 의 예]

TEST-MIB DEFINITIONS ::= BEGIN
IMPORTS
  OBJECT-TYPE, MODULE-IDENTITY, Integer32, enterprises
       FROM SNMPv2-SMI
  DisplayString
    FROM SNMPv2-TC;
      
 
myTest MODULE-IDENTITY
  LAST-UPDATED  "200701250000Z"
  ORGANIZATION  "woorie.net"
  CONTACT-INFO    "woorie.net"
  DESCRIPTION     "Just Test!!!!"
  REVISION     "200701250000Z"
  DESCRIPTION   "This file defines the test."
  ::= { enterprises 4444 }
myTable OBJECT-TYPE
  SYNTAX SEQUENCE OF MyTableEntry
  MAX-ACCESS not-accessible
  STATUS  current
  DESCRIPTION   "table obj"
  ::= { myTest 1}
myTableEntry OBJECT-TYPE
  SYNTAX MyTableEntry
  MAX-ACCESS not-accessible
  STATUS current
  DESCRIPTION
  "An entry contains test msg"
  INDEX{  idx }
  ::={ myTable 1}
MyTableEntry ::= SEQUENCE {
  idx   Integer32,
  text    DisplayString
}
idx OBJECT-TYPE
  SYNTAX Integer32 (0..65536)
  MAX-ACCESS  read-create
  STATUS current
  DESCRIPTION
  "Reference Index for myTableEntry"
  ::= {myTableEntry 1}
text OBJECT-TYPE
  SYNTAX DisplayString
  MAX-ACCESS read-create
  STATUS current
  DESCRIPTION
  "log message"
  ::= { myTableEntry 2}
END


위의 MIB파일을 트리형태로 보면 다음과 같습니다.

-myTest(4444)
  |
  +--myTable(1)
     |
     +--myTableEntry(1)
        |  Index: idx
        |
        +-- CR-- Integer32 idx(1)
        |        Range: 0..65536
        +-- CR-- String    text(2)
                 Textual Convention: DisplayString
                 Size: 0..255


myTest 제일 상위에 있고, 이것은 OID 1.3.6.1.4.1 밑에 존재하게 됩니다.
1.3.6.1.4.1 은 벤더가 직접 MIB을 만들어 사용할 수 있도록 배려한 특별한 OID입니다.
CISCO 장비같은 경우,
보통 1.3.6.1.4.1.9 밑으로 정보를 제공합니다.

직접 MIB을 만든다면 저 밑으로 만들어서 넣는게 좋겠죠.
원칙대로라면 이것도 일일이  MIB파일이 있는지 없는지 확인을 하고 사용해야하는데,
그런건 다 생략하도록 하겠습니다. -_-a

다시 돌어와서 위의 MIB파일의 정의된 것을 보면
결국 myTest의 정보를 얻고 싶다면, 1.3.6.1.4.1.4444 로 접근을 하면 됩니다.

이렇게 MIB을 만들었으니 subagent에서 MIB에 해당정보를 담는 루틴을 만들어야 합니다.
MIB을 만든다는 것은 서버와 클라이언트 간에 변수명을 맞춘다고 해도 될 것 같군요.
이제 변수를 선언했으니 snmp서버에서 변수에 값을 할당하는 방법을 알아보겠습니다.

Posted by 백구씨쥔장
,