그럼, 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 의 예]
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 }
SYNTAX SEQUENCE OF MyTableEntry
MAX-ACCESS not-accessible
STATUS current
DESCRIPTION "table obj"
::= { myTest 1}
SYNTAX MyTableEntry
MAX-ACCESS not-accessible
STATUS current
DESCRIPTION
"An entry contains test msg"
INDEX{ idx }
::={ myTable 1}
idx Integer32,
text DisplayString
}
SYNTAX Integer32 (0..65536)
MAX-ACCESS read-create
STATUS current
DESCRIPTION
"Reference Index for myTableEntry"
::= {myTableEntry 1}
SYNTAX DisplayString
MAX-ACCESS read-create
STATUS current
DESCRIPTION
"log message"
::= { myTableEntry 2}
END
위의 MIB파일을 트리형태로 보면 다음과 같습니다.
|
+--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서버에서 변수에 값을 할당하는 방법을 알아보겠습니다.