본문 바로가기
WIKI 기술 지식 베이스

SNMP 트랩

원문 보기 위키 갱신

SNMP 트랩 수신을 활성화해 장치에서 발생하는 예기치 않은 상태 변화를 포착하는 방법을 설명해요. SNMP 트랩은 장치가 SNMP 관리자에게 보내는 알림으로, 수신을 활성화하면 이를 기반으로 모니터를 구성할 수 있어요.

출처: 문서

본문

개요

SNMP 트랩은 장비에 갑작스러운 상태 변화가 발생하는 등 비정상적인 활동이 있을 때 SNMP 지원 장치가 SNMP 관리자에게 보내는 알림이에요.

SNMP 트랩을 모니터링하면 장치 불안정으로 그렇지 않으면 놓칠 수 있는 문제를 포착하는 데 도움이 돼요. 예를 들어 인터페이스가 15초마다 사용 가능 상태와 손상 상태를 오가는 경우, 60초마다 폴링하면 네트워크 불안정 정도를 놓칠 수 있어요. 트랩은 또한 장치 배터리나 섀시 같은 하드웨어 구성 요소의 상태를 파악할 수 있게 해줘요.

Datadog Agent v7.37 이상은 SNMP 트랩 수신을 지원하므로 특정 트랩 이벤트에 대한 모니터를 구성할 수 있어요.

설정

SNMP 트랩 수신을 활성화하려면 다음 지침을 따르세요.

  1. 방화벽 규칙이 구성된 포트로 들어오는 UDP 트래픽을 허용하는지 확인해요.

  2. 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 같은 포트 번호에 바인딩하려면 다음 지침을 사용해요.

  1. setcap 명령으로 포트에 대한 액세스 권한을 부여해요:

    sudo setcap CAP_NET_BIND_SERVICE=+ep /opt/datadog-packages/datadog-agent/stable/bin/agent/agent
    

참고: Agent를 업그레이드할 때마다 이 setcap 명령을 다시 실행하세요.

  1. 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
  1. 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 파일 생성

사전 요구 사항:

  • Python 3
  • ddev (pip3 install ddev)
  • pysmi (pip3 install pysmi)

모든 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).

더 알아보기 (Learn more)