SNMP 트랩
SNMP 트랩 수신을 활성화해 장치에서 발생하는 예기치 않은 상태 변화를 포착하는 방법을 설명해요. SNMP 트랩은 장치가 SNMP 관리자에게 보내는 알림으로, 수신을 활성화하면 이를 기반으로 모니터를 구성할 수 있어요.
출처: 문서
본문
개요
SNMP 트랩은 장비에 갑작스러운 상태 변화가 발생하는 등 비정상적인 활동이 있을 때 SNMP 지원 장치가 SNMP 관리자에게 보내는 알림이에요.
SNMP 트랩을 모니터링하면 장치 불안정으로 그렇지 않으면 놓칠 수 있는 문제를 포착하는 데 도움이 돼요. 예를 들어 인터페이스가 15초마다 사용 가능 상태와 손상 상태를 오가는 경우, 60초마다 폴링하면 네트워크 불안정 정도를 놓칠 수 있어요. 트랩은 또한 장치 배터리나 섀시 같은 하드웨어 구성 요소의 상태를 파악할 수 있게 해줘요.
Datadog Agent v7.37 이상은 SNMP 트랩 수신을 지원하므로 특정 트랩 이벤트에 대한 모니터를 구성할 수 있어요.
설정
SNMP 트랩 수신을 활성화하려면 다음 지침을 따르세요.
-
방화벽 규칙이 구성된 포트로 들어오는 UDP 트래픽을 허용하는지 확인해요.
-
datadog.yaml파일에 다음을 추가해요:network_devices: namespace: <NAMESPACE> # optional, defaults to "default". snmp_traps: enabled: true port: 9162 # on which ports to listen for traps community_strings: # which community strings to allow for v2 traps - <STRING_1> - <STRING_2> bind_host: 0.0.0.0 users: # SNMP v3 - user: "user" authKey: myAuthKey authProtocol: "SHA" privKey: myPrivKey privProtocol: "AES" - user: "user" authKey: myAuthKey authProtocol: "MD5" privKey: myPrivKey privProtocol: "DES" - user: "user2" authKey: myAuthKey2 authProtocol: "SHA" # choices: MD5, SHA, SHA224, SHA256, SHA384, SHA512 privKey: myPrivKey2 privProtocol: "AES" # choices: DES, AES, AES192, AES192C, AES256, AES256C
참고: 여러 v3 사용자와 비밀번호는 Datadog Agent 7.51 이상에서 지원돼요.
SNMP 트랩 보기
설정 후 SNMP 트랩은 로그로 Datadog에 전달돼요. Log Explorer에서 source:snmp-traps 검색 쿼리로 확인할 수 있어요.
참고: SNMP 트랩이 로그로 전달되지만 logs_enabled를 true로 설정할 필요는 없어요.
NDM 장치 보기에서 SNMP 트랩을 직접 볼 수도 있어요. Infrastructure > Network Devices에서 장치를 선택하고 Events 탭을 클릭해요. Syslog 메시지와 SNMP 트랩이 단일 보기로 결합돼요. 필터를 사용해 이벤트 유형별로 결과를 좁힐 수 있어요.
기본 SNMP 트랩 포트 162 사용
1024 미만의 포트 번호에 바인딩하려면 상위 권한이 필요해요. 기본 SNMP 트랩 포트인 162 같은 포트 번호에 바인딩하려면 다음 지침을 사용해요.
-
setcap명령으로 포트에 대한 액세스 권한을 부여해요:sudo setcap CAP_NET_BIND_SERVICE=+ep /opt/datadog-packages/datadog-agent/stable/bin/agent/agent
참고: Agent를 업그레이드할 때마다 이 setcap 명령을 다시 실행하세요.
-
getcap명령을 실행해 설정이 올바른지 확인해요:sudo getcap /opt/datadog-packages/datadog-agent/stable/bin/agent/agent
다음과 같은 출력이 보여야 해요:
/opt/datadog-packages/datadog-agent/stable/bin/agent/agent = cap_net_bind_service+ep
- Agent를 재시작해요.
장치 네임스페이스
네트워크 장치 모니터링과 마찬가지로 네임스페이스 태그를 사용해 동일한 사설 IP를 공유하는 여러 네트워크 장치를 구분해요. 예를 들어 뉴욕에 하나, 파리에 하나, 동일한 사설 IP를 공유하는 두 대의 라우터가 있다고 가정해요. 이 경우 뉴욕 데이터센터에 namespace: nyc 태그로 텔레메트리를 보내는 Agent를, 파리 데이터센터에 namespace: paris 태그로 텔레메트리를 보내는 Agent를 배포할 수 있어요.
이 네임스페이스는 SNMP 트랩에서 발신 장치로, 또는 발신 장치에서 SNMP 트랩으로 고유하게 피벗하는 데 사용할 수 있어요.
참고: Agent에서 네임스페이스 태그를 사용한다면 모든 Agent가 네임스페이스 태그를 사용하는지 확인하세요. Agent 중 일부에만 네임스페이스 태그를 구성하지 마세요.
해석(Resolution)
각 SNMP 트랩은 특정 객체 식별자(OID, 폴링 시 해당 값의 응답 코드를 반환하는 장치의 고유 ID 또는 주소) 기반 형식을 가져요. Datadog Agent는 OID를 더 읽기 쉬운 문자열로 변환하는 해석 단계를 수행해요.
SNMP 트랩은 다음으로 구성돼요:
- 발신자 정보(예: 장치의 IP).
- 트랩 유형을 정의하는 OID.
- 메타데이터: 트랩에 추가 컨텍스트를 제공하는
OID:value쌍 목록.
디코딩은 Agent 측에서 수행되며, $<PATH_TO_AGENT_CONF.D>/snmp.d/traps_db/dd_traps_db.json.gz에 디스크에 저장된 매핑을 사용해요. Datadog는 11,000개 이상의 서로 다른 MIB(Management Information Base)를 지원해요.
매핑 형식
매핑은 TrapsDB 파일로 저장되며, YAML 또는 JSON 형식일 수 있어요.
예시
YAML
mibs:
- NET-SNMP-EXAMPLES-MIB
traps:
1.3.6.1.4.1.8072.2.3.0.1:
mib: NET-SNMP-EXAMPLES-MIB
name: netSnmpExampleHeartbeatNotification
vars:
1.3.6.1.4.1.8072.2.3.2.1:
name: netSnmpExampleHeartbeatRate
JSON
{
"mibs": [
"NET-SNMP-EXAMPLES-MIB"
],
"traps": {
"1.3.6.1.4.1.8072.2.3.0.1": {
"mib": "NET-SNMP-EXAMPLES-MIB",
"name": "netSnmpExampleHeartbeatNotification"
}
},
"vars": {
"1.3.6.1.4.1.8072.2.3.2.1": {
"name": "netSnmpExampleHeartbeatRate"
}
}
}
Agent 확장
Agent의 기능을 확장하려면 직접 매핑을 만들어 $<PATH_TO_AGENT_CONF.D>/snmp.d/traps_db/ 디렉터리에 배치해요.
이 매핑을 직접 작성하거나, Datadog 개발자 툴킷인 ddev를 사용해 MIB 목록에서 매핑을 생성할 수 있어요.
MIB 목록에서 TrapsDB 파일 생성
사전 요구 사항:
모든 MIB를 전용 폴더에 넣고 다음을 실행해요:
ddev meta snmp generate-traps-db -o ./output_dir/ /path/to/my/mib1 /path/to/my/mib2 /path/to/my/mib3 ...
ddev 도구는 사용 가능한 MIB 종속성을 자동으로 가져와요. 누락된 종속성 오류가 발생하고 MIB 파일이 로컬에 있다면 --mib-sources <DIR> 매개변수로 로컬 MIB 파일 위치를 지정해요. 파일 이름이 MIB 이름과 일치하는지 확인해요(예: snmp_v2_smi.txt가 아닌 SNMPv2-SMI).