SNMPTRAP의 깨진 해결 방법 (Zabbix에도 사용할 수 있음)

15788 단어 snmpttzabbix

하고 싶은 일



일본어판 vCenter나 Windows로부터의 일본어 트랩이 깨져(↓) 하는 것의 대처.


이런 느낌(↓)으로 하고 싶다! !


환경



snmptrapd와 snmptt를 사용한 zabbix 환경
  • SNMPTT v1.4beta2
  • NET-SNMP 버전: 5.7.2
  • Zabbix 3.0.9

  • 실현 방법



    표준으로 구축하면
    snmptrapd는 snmptt용 핸들러(/usr/sbin/snmptthandler)를 직접 부른다.

    하지만 이번에는
    snmptt 용 핸들러를 호출하기 전에 16 진수 텍스트를 바이너리로 변환합니다.

    구축시 거동 확인



    snmptrapd가 내뿜는 것 (샘플)



    UTF8 (vCenter 및 Linux 기반) 알람 (최후의 샘플)
    1497051259
    hostname
    UDP: [192.168.10.84]:48146->[192.168.10.84]:162
    .1.3.6.1.2.1.1.3.0 0:1:24:40.47
    .1.3.6.1.6.3.1.1.4.1.0 .1.3.6.1.4.1.3.1.1.0.99
    .1.3.6.1.4.1.8072.9999.1 "31 32 33 E6 97 A5 E6 9C AC E8 AA 9E "
    .1.3.6.1.4.1.8072.9999.2 "E6 97 A5 E6 9C AC E8 AA 9E 34 35 36 E3 81 82 E3 
    81 82 E3 81 82 "
    .1.3.6.1.4.1.8072.9999.3 "E5 AF BF E9 99 90 E7 84 A1 E3 80 81 E5 AF BF E9 
    99 90 E7 84 A1 E4 BA 94 E5 8A AB E3 81 AE E6 93 
    A6 E3 82 8A E5 88 87 E3 82 8C E6 B5 B7 E7 A0 82 
    E5 88 A9 E6 B0 B4 E9 AD 9A E3 81 AE E6 B0 B4 E8 
    A1 8C E6 9C AB E9 9B B2 E6 9D A5 E6 9C AB E9 A2 
    A8 E6 9D A5 E6 9C AB E9 A3 9F E3 81 86 E5 AF 9D 
    E3 82 8B E5 87 A6 E3 81 AB E4 BD 8F E3 82 80 E5 
    87 A6 E8 97 AA E3 82 89 E6 9F 91 E5 AD 90 E3 81 
    AE E8 97 AA E6 9F 91 E5 AD 90 E3 83 91 E3 82 A4 
    E3 83 9D E3 83 91 E3 82 A4 E3 83 9D E3 83 91 E3 
    82 A4 E3 83 9D E3 81 AE E3 82 B7 E3 83 A5 E3 83 
    BC E3 83 AA E3 83 B3 E3 82 AC E3 83 B3 E3 82 B7 
    E3 83 A5 E3 83 BC E3 83 AA E3 83 B3 E3 82 AC E3 
    83 B3 E3 81 AE E3 82 B0 E3 83 BC E3 83 AA E3 83 
    B3 E3 83 80 E3 82 A4 E3 82 B0 E3 83 BC E3 83 AA 
    E3 83 B3 E3 83 80 E3 82 A4 E3 81 AE E3 83 9D E3 
    83 B3 E3 83 9D E3 82 B3 E3 83 94 E3 83 BC E3 81 
    AE E3 83 9D E3 83 B3 E3 83 9D E3 82 B3 E3 83 8A 
    E3 83 BC E3 81 AE E9 95 B7 E4 B9 85 E5 91 BD E3 
    81 AE E9 95 B7 E5 8A A9 "
    .1.3.6.1.6.3.18.1.3.0 192.168.10.84
    .1.3.6.1.6.3.18.1.4.0 "public"
    .1.3.6.1.6.3.1.1.4.3.0 .1.3.6.1.4.1.3.1.1
    

    CP932 (Windows 형식) 알람 (어디까지나 샘플)
    1497027708
    hostname
    UDP: [192.168.10.35]:60869->[192.168.10.84]:162
    .1.3.6.1.2.1.1.3.0 0:0:51:24.96
    .1.3.6.1.6.3.1.1.4.1.0 .1.3.6.1.4.1.311.1.13.1.9.84.101.115.116.98.97.116.99.104.0.1
    .1.3.6.1.4.1.311.1.13.1.9999.1.0 "83 70 83 89 83 81 81 5B 83 5E 81 5B 20 27 4D 65 
    73 73 61 67 65 20 82 CC 88 F8 90 94 82 F0 8A 6D 
    94 46 82 C5 82 AB 82 DC 82 B9 82 F1 81 42 88 F8 
    90 94 82 AA 20 6E 75 6C 6C 0D 0A "
    .1.3.6.1.4.1.311.1.13.1.9999.2.0 "Unknown"
    .1.3.6.1.4.1.311.1.13.1.9999.3.0 "win2016"
    .1.3.6.1.4.1.311.1.13.1.9999.4.0 "1"
    .1.3.6.1.4.1.311.1.13.1.9999.5.0 "1"
    .1.3.6.1.4.1.311.1.13.1.9999.6.0 "83 70 83 89 83 81 81 5B 83 5E 81 5B 20 27 4D 65 
    73 73 61 67 65 20 82 CC 88 F8 90 94 82 F0 8A 6D 
    94 46 82 C5 82 AB 82 DC 82 B9 82 F1 81 42 88 F8 
    90 94 82 AA 20 6E 75 6C 6C "
    .1.3.6.1.6.3.18.1.3.0 192.168.10.35
    .1.3.6.1.6.3.18.1.4.0 "public"
    .1.3.6.1.6.3.1.1.4.3.0 .1.3.6.1.4.1.311.1.13.1.9.84.101.115.116.98.97.116.99.104
    

    snmptrapd가 내뿜는 것 (고찰)


  • 처음 몇 줄에는 시간, 호스트 및 패킷 (src/dest)과 같은 정보가 있습니다 (이번에는 변환되지 않음).
  • 각 OID와 값 (문자열 또는 숫자)이 쌍으로 저장됩니다.
  • 위의 쌍은 기본 행이지만 값이 길어지면 여러 행에 걸쳐 있습니다.
  • 걸친 값은 시작점 끝점을 알 수 있도록 이중 따옴표 (")로 둘러싸여 있습니다
  • 멀티 바이트의 경우, "2 자리의 16 진수 + 공백"의 패턴의 반복이다
  • 16 진수를 바이너리로 연결하면 멀티 바이트 문자열이됩니다.

    할 일 (세부 사항)



    값 부분의 더블 쿼트(")로 둘러싸인 문자열이 패턴(2자리 16진수+공백)이면, 멀티바이트로 간주해, 바이너리 데이터(멀티바이트 문자)로 변환한다
    다른 문자열은 만지지 않습니다. 또한 더블 쿼트로 둘러싸여도 패턴과 일치하지 않으면 변환하지 않습니다.

    위의 일을 실현 한 프로그램을 github에 등록했습니다.
    * htps : // 기주 b. 코 m / 미카시 완 / 곤 v_sn mpt 등 p_mb. 기 t

    실제 절차


  • snmptrapd가 실행중인 서버에 하나의 프로그램을 배치하십시오.
  • snmptrapd.conf를 수정한다.
  • 이상! !

  • 프로그램을 가져오다


    $ git clone https://github.com/mishikawan/conv_snmptrap_mb.git
    $ cp -p conv_snmptrap_mb/conv_snmptrap_mb /usr/local/bin/.
    $ chmod a+x /usr/local/bin/conv_snmptrap_mb
    

    snmptrapd.conf 설정 (1 (원하는))



    다음과 같이 설정하고 snmptrapd를 restart합니다.
    멀티 바이트 트랩의 OID를 알고 있다면 여기가 바람직합니다.

    e.g.) 다음과 같은 사양의 경우
    1. vCenter(1.3.6.1.4.1.6876.) ... UTF8
    2. windows-event(1.3.6.1.4.1.311.) ...CP932
    3. 그렇지 않으면 싱글 바이트 트랩

    /etc/snmp/snmptrapd.conf
    disableAuthorization yes
    
    traphandle 1.3.6.1.4.1.6876.* /usr/local/bin/conv_snmptrap_mb | /usr/sbin/snmptthandler
    traphandle 1.3.6.1.4.1.311.* /usr/local/bin/conv_snmptrap_mb | iconv -f cp932 | /usr/sbin/snmptthandler
    traphandle default /usr/sbin/snmptthandler
    
  • UTF8의 경우는 별도 iconv 필요 없다 (아래로부터 3 행째 )
  • CP932 (UTF8 이외의 인코딩)의 경우, iconv의 별도 기재가 필요 (아래에서 2 행째)

  • snmptrapd.conf 설정 (그 2 (편리하지만 비추천))



    다음과 같이 설정하고 snmptrapd를 restart합니다.
    이것으로, vCenter나 UTF8로 날아 오는 트랩에도 대응할 수 있다.
    어쨌든, CP932의 경우는 깨져서 모든 트랩이 내 프로그램을 통과하는 것이 무서워요.

    /etc/snmp/snmptrapd.conf
    disableAuthorization yes
    
    traphandle default /usr/local/bin/conv_snmptrap_mb | /usr/sbin/snmptthandler
    

    마지막으로



    명확한 해결 방법이 인터넷에 없고 곤란했기 때문에 만들었습니다.

    프로그램 짜는 사람이 아니기 때문에 코딩 센스 없지만, 내 환경에서는 문제없이 움직이고 있습니다.
    사실은 Encode::Guess도 사용하고 싶었지만, trap의 OID마다 사용하는 인코딩은 사람이 판별할 수 있으므로, 설정으로 회피하고 있습니다.

    좋은 웹페이지 즐겨찾기