21.7. Net-SNMP를 사용하여 성능 모니터링
Red Hat Enterprise Linux 7에는 유연하고 확장 가능한 간단한 네트워크 관리 프로토콜 (SNMP) 에이전트가 포함된 Net-SNMP 소프트웨어 제품군이 포함되어 있습니다. 이 에이전트 및 관련 유틸리티는 다수의 시스템의 성능 데이터를 SNMP 프로토콜에 대한 폴링을 지원하는 다양한 툴로 제공하는 데 사용할 수 있습니다.
이 섹션에서는 Net-SNMP 에이전트를 구성하여 네트워크를 통해 성능 데이터를 안전하게 제공하고, SNMP 프로토콜을 사용하여 데이터를 검색하고, Systemd 에이전트를 확장하여 사용자 지정 성능 지표를 제공하는 방법에 대한 정보를 제공합니다.
21.7.1. Net-SNMP 설치 링크 복사링크가 클립보드에 복사되었습니다!
Net-SNMP 소프트웨어 제품군은 Red Hat Enterprise Linux 소프트웨어 배포에서 RPM 패키지 세트로 사용할 수 있습니다. 표 21.2. “사용 가능한 Net-SNMP 패키지” 는 각 패키지와 해당 컨텐츠를 요약합니다.
| 패키지 | 제공 |
|---|---|
| net-snmp | SNMP 에이전트 데몬 및 문서. 이 패키지는 성능 데이터를 내보내는 데 필요합니다. |
| net-snmp-libs |
|
| net-snmp-utils |
|
| net-snmp-perl |
|
| net-snmp-python | Python용 SNMP 클라이언트 라이브러리입니다. 이 패키지는 Optional 채널에서 제공합니다. Red Hat 추가 채널에 대한 자세한 내용은 9.5.7절. “선택적 리포지토리 추가” 를 참조하십시오. |
이러한 패키지를 설치하려면 다음 형식으로 yum 명령을 사용하십시오.
yum install package…
yum install package…
예를 들어 이 섹션의 나머지 부분에서 사용된 SNMP 에이전트 데몬 및 SNMP 클라이언트를 설치하려면 쉘 프롬프트에 root 로 다음을 입력합니다.
yum install net-snmp net-snmp-libs net-snmp-utils
~]# yum install net-snmp net-snmp-libs net-snmp-utils
Red Hat Enterprise Linux에 새 패키지를 설치하는 방법에 대한 자세한 내용은 9.2.4절. “패키지 설치” 를 참조하십시오.
21.7.2. Net-SNMP 데몬 실행 링크 복사링크가 클립보드에 복사되었습니다!
net-snmp 패키지에는 snmpd, SNMP Agent Daemon이 포함되어 있습니다. 이 섹션에서는 snmpd 서비스를 시작, 중지 및 다시 시작하는 방법에 대한 정보를 제공합니다. Red Hat Enterprise Linux 7에서 시스템 서비스 관리에 대한 자세한 내용은 10장. systemd를 사용하여 서비스 관리 를 참조하십시오.
21.7.2.1. 서비스 시작 링크 복사링크가 클립보드에 복사되었습니다!
현재 세션에서 snmpd 서비스를 실행하려면 쉘 프롬프트에 root 로 다음을 입력합니다.
systemctl start snmpd.service
systemctl start snmpd.service
부팅 시 자동으로 시작하도록 서비스를 구성하려면 다음 명령을 사용합니다.
systemctl enable snmpd.service
systemctl enable snmpd.service
21.7.2.2. 서비스 중지 링크 복사링크가 클립보드에 복사되었습니다!
실행 중인 snmpd 서비스를 중지하려면 쉘 프롬프트에 root 로 다음을 입력합니다.
systemctl stop snmpd.service
systemctl stop snmpd.service
부팅 시 서비스 시작을 비활성화하려면 다음 명령을 사용하십시오.
systemctl disable snmpd.service
systemctl disable snmpd.service
21.7.2.3. 서비스를 다시 시작 링크 복사링크가 클립보드에 복사되었습니다!
실행 중인 snmpd 서비스를 다시 시작하려면 쉘 프롬프트에서 다음을 입력합니다.
systemctl restart snmpd.service
systemctl restart snmpd.service
이 명령은 서비스를 중지하고 빠른 연속으로 다시 시작합니다. 서비스를 중지하지 않고 구성을 다시 로드하려면 다음 명령을 대신 실행합니다.
systemctl reload snmpd.service
systemctl reload snmpd.service
이로 인해 실행 중인 snmpd 서비스가 구성을 다시 로드합니다.
21.7.3. Net-SNMP 구성 링크 복사링크가 클립보드에 복사되었습니다!
Net-SNMP 에이전트 데몬 구성을 변경하려면 /etc/snmp/snmpd.conf 구성 파일을 편집합니다. Red Hat Enterprise Linux 7에 포함된 기본 snmpd.conf 파일은 크게 주석 처리되어 에이전트 구성을 위한 좋은 시작점으로 사용됩니다.
이 섹션에서는 시스템 정보 설정 및 인증 구성의 두 가지 공통 작업에 중점을 둡니다. 사용 가능한 구성 지시문에 대한 자세한 내용은 snmpd.conf(5) 매뉴얼 페이지를 참조하십시오. 또한 유효한 에이전트 구성을 대화형으로 생성하는 데 사용할 수 있는 snmpconf 라는 net-snmp 패키지에 유틸리티도 있습니다.
이 섹션에 설명된 snmpwalk 유틸리티를 사용하려면 net-snmp-utils 패키지를 설치해야 합니다.
구성 파일의 변경 사항을 적용하려면 root 로 다음 명령을 실행하여 snmpd 서비스가 구성을 다시 읽도록 합니다.
systemctl reload snmpd.service
systemctl reload snmpd.service
21.7.3.1. 시스템 정보 설정 링크 복사링크가 클립보드에 복사되었습니다!
net-SNMP는 시스템 트리를 통해 몇 가지 기본 시스템 정보를 제공합니다. 예를 들어 다음 snmpwalk 명령은 기본 에이전트 구성이 있는 시스템 트리를 보여줍니다.
기본적으로 sysName 개체는 호스트 이름으로 설정됩니다. sysLocation 및 sysContact 오브젝트는 다음과 같이 syslocation 및 sysContact 지시문의 값을 변경하여 /etc/snmp/snmpd.conf 파일에서 구성할 수 있습니다.
syslocation Datacenter, Row 4, Rack 3 syscontact UNIX Admin <admin@example.com>
syslocation Datacenter, Row 4, Rack 3
syscontact UNIX Admin <admin@example.com>
구성 파일을 변경한 후 설정을 다시 로드하고 snmpwalk 명령을 다시 실행하여 테스트합니다.
21.7.3.2. 인증 구성 링크 복사링크가 클립보드에 복사되었습니다!
Net-SNMP 에이전트 데몬에서는 다음 세 가지 버전의 SNMP 프로토콜을 모두 지원합니다. 처음 두 버전(1 및 2c)은 커뮤니티 문자열 을 사용하여 간단한 인증을 제공합니다. 이 문자열은 에이전트와 모든 클라이언트 유틸리티 간의 공유 시크릿입니다. 문자열은 네트워크를 통해 일반 텍스트로 전달되지만 안전한 것으로 간주되지 않습니다. SNMP 프로토콜의 버전 3은 다양한 프로토콜을 사용하여 사용자 인증 및 메시지 암호화를 지원합니다. Net-SNMP 에이전트는 SSH를 통한 터널링 및 X.509 인증서를 사용한 TLS 인증도 지원합니다.
Manila 버전 2c 커뮤니티 구성
SNMP 버전 2c 커뮤니티를 구성하려면 /etc/snmp/snmpd.conf 구성 파일에서 rocommunity 또는 rwcommunity 지시문을 사용합니다. 지시문 형식은 다음과 같습니다.
directive community source OID
directive community source OID
커뮤니티가 사용할 커뮤니티 문자열인 경우 source 는 IP 주소 또는 서브넷이며, OID 는 액세스를 제공하는 Systemd 트리입니다. 예를 들어 다음 지시문은 로컬 머신의 커뮤니티 문자열 "redhat"을 사용하여 클라이언트에 시스템 트리에 대한 읽기 전용 액세스를 제공합니다.
rocommunity redhat 127.0.0.1 .1.3.6.1.2.1.1
rocommunity redhat 127.0.0.1 .1.3.6.1.2.1.1
구성을 테스트하려면 -v 및 -c 옵션과 함께 snmpwalk 명령을 사용합니다.
Manila 버전 3 사용자 구성
SNMP 버전 3 사용자를 구성하려면 net-snmp-create-v3-user 명령을 사용합니다. 이 명령은 사용자를 생성하고 사용자에게 액세스 권한을 부여하는 /var/lib/net-snmpd.conf 및 /etc/snmp/snmpd.conf 파일에 항목을 추가합니다. net-snmp-create-v3-user 명령은 에이전트가 실행되지 않는 경우에만 실행할 수 있습니다. 다음 예제에서는 암호 "redhatsnmp"를 사용하여 "admin" 사용자를 생성합니다.
net-snmp/snmp/snmpd.conf에 지시문(또는 /etc/snmp/snmpd.conf 에 추가하는 rwuser -ro 명령줄 옵션이 제공되는 경우 rouser )은 rwcommunity 및 rocommunity 지시문과 유사한 형식을 갖습니다.
directive user noauth|auth|priv OID
directive user noauth|auth|priv OID
여기서 사용자는 사용자 이름이고 OID 는 액세스를 제공하기 위해 repeatedly 트리입니다. 기본적으로 Net-SNMP 에이전트 데몬에서는 인증된 요청( auth 옵션)만 허용합니다. noauth 옵션을 사용하면 인증되지 않은 요청을 허용할 수 있으며 priv 옵션을 사용하면 암호화를 사용할 수 있습니다. authpriv 옵션은 요청을 인증해야 하고 응답을 암호화하도록 지정합니다.
예를 들어 다음 줄은 "admin" 사용자에게 전체 트리에 대한 읽기-쓰기 액세스 권한을 부여합니다.
rwuser admin authpriv .1
rwuser admin authpriv .1
구성을 테스트하려면 다음 행을 사용하여 사용자의 홈 디렉터리에 . 라는 구성 파일을 만듭니다.
snmp/디렉토리와 해당 디렉토리에 snmp.conf
defVersion 3 defSecurityLevel authPriv defSecurityName admin defPassphrase redhatsnmp
defVersion 3
defSecurityLevel authPriv
defSecurityName admin
defPassphrase redhatsnmp
snmpwalk 명령은 이제 에이전트를 쿼리할 때 이러한 인증 설정을 사용합니다.
snmpwalk -v3 localhost system
~]$ snmpwalk -v3 localhost system
SNMPv2-MIB::sysDescr.0 = STRING: Linux localhost.localdomain 3.10.0-123.el7.x86_64 #1 SMP Mon May 5 11:16:57 EDT 2014 x86_64
[output truncated]
21.7.4. SNMP를 통한 성능 데이터 검색 링크 복사링크가 클립보드에 복사되었습니다!
Red Hat Enterprise Linux의 Net-SNMP Agent는 SNMP 프로토콜을 통해 다양한 성능 정보를 제공합니다. 또한 시스템에 설치된 RPM 패키지 목록, 시스템에서 현재 실행 중인 프로세스 목록 또는 시스템의 네트워크 구성에 대해 에이전트를 쿼리할 수 있습니다.
이 섹션에서는 Keycloak을 통해 사용할 수 있는 성능 튜닝과 관련된 OID에 대한 개요를 제공합니다. net-snmp-utils 패키지가 설치되어 있고 사용자에게 21.7.3.2절. “인증 구성” 에 설명된 대로 Systemd 트리에 대한 액세스 권한이 부여된 것으로 가정합니다.
21.7.4.1. 하드웨어 구성 링크 복사링크가 클립보드에 복사되었습니다!
Net-SNMP에 포함된 Host Resources MiB는 호스트의 현재 하드웨어 및 소프트웨어 구성에 대한 정보를 클라이언트 유틸리티에 제공합니다. 표 21.3. “사용 가능한 OIDs” 는 해당 MIB에서 사용할 수 있는 다양한 OID를 요약합니다.
| OID | 설명 |
|---|---|
|
| 가동 시간, 사용자 수 및 실행 중인 프로세스 수와 같은 일반적인 시스템 정보를 포함합니다. |
|
| 메모리 및 파일 시스템 사용량에 대한 데이터를 포함합니다. |
|
| 모든 프로세서, 네트워크 장치 및 파일 시스템의 목록을 포함합니다. |
|
| 실행 중인 모든 프로세스의 목록을 포함합니다. |
|
| HOST-RESOURCES-MIB::hrSWRun의 프로세스 테이블에 대한 메모리 및 CPU 통계가 포함되어 있습니다. |
|
| RPM 데이터베이스 목록이 포함되어 있습니다. |
또한 사용 가능한 정보의 요약을 검색하는 데 사용할 수 있는 Host Resources MiB에서 사용할 수 있는 다양한 SNMP 테이블도 있습니다. 다음 예제에서는 HOST-RESOURCES-MIB::hrFSTable 을 표시합니다.
HOST-RESOURCES-MIB 에 대한 자세한 내용은 /usr/share/snmp/mibs/HOST-RESOURCES-MIB.txt 파일을 참조하십시오.
21.7.4.2. CPU 및 메모리 정보 링크 복사링크가 클립보드에 복사되었습니다!
대부분의 시스템 성능 데이터는 UCD SNMP MIB 에서 사용할 수 있습니다. systemStats OID는 프로세서 사용량에 대한 여러 카운터를 제공합니다.
특히 ssCpuRawUser,ssCpuRawSystem,ssCpuRaw Idle 및 ssCpuRawIdle OIDs는 시스템이 커널 공간, 사용자 공간, 사용자 공간,에서 대부분의 프로세서 시간을 소비하고 있는지 여부를 결정하는 데 도움이 되는 카운터를 제공합니다. 또는 I/O. ssRawSwapIn 및 ssRawSwapOut 은 시스템이 메모리 소진으로 인한 고충 여부를 결정할 때 유용할 수 있습니다.
무료 명령에 유사한 데이터를 제공하는 UCD-SNMP-MIB::memory OID에서 더 많은 메모리 정보를 사용할 수 있습니다.
부하 평균은 UCD SNMP MIB 에서도 사용할 수 있습니다. SNMP 테이블 UCD-SNMP-MIB::laTable 에는 1, 5, 15분 부하 평균 목록이 있습니다.
21.7.4.3. 파일 시스템 및 디스크 정보 링크 복사링크가 클립보드에 복사되었습니다!
Host Resources MiB는 파일 시스템 크기 및 사용에 대한 정보를 제공합니다. 각 파일 시스템(및 각 메모리 풀)에는 HOST-RESOURCES-MIB::hrStorageTable 테이블에 항목이 있습니다.
HOST-RESOURCES-MIB::hrStorageSize 및 HOST-RESOURCES-MIB::hrStorageUsed 아래의 OID를 사용하여 마운트된 각 파일 시스템의 나머지 용량을 계산할 수 있습니다.
I/O 데이터는 UCD-SNMP-MIBStats (sIORawSent.0 및 ) 및 ssIORawRecieved.0UCD-DISKIO-MIB::diskIOTable 둘 다에서 사용할 수 있습니다. 후자의 경우 훨씬 더 세분화된 데이터를 제공합니다. 이 표에는 디스크IONReadX 및 의 OID가 있으며, 시스템 부팅 이후 해당 블록 장치에서 읽고 쓰는 바이트 수에 대한 카운터를 제공합니다.
diskIONWrittenX
21.7.4.4. 네트워크 정보 링크 복사링크가 클립보드에 복사되었습니다!
Interfaces MiB는 네트워크 장치에 대한 정보를 제공합니다. IF-MIB::ifTable 은 시스템의 각 인터페이스에 대한 항목, 인터페이스 구성 및 인터페이스에 대한 다양한 패킷 카운터를 사용하여 SNMP 테이블을 제공합니다. 다음 예제에서는 두 개의 물리적 네트워크 인터페이스가 있는 시스템에서 ifTable 의 처음 몇 개의 열을 보여줍니다.
네트워크 트래픽은 OIDs IF-MIB::ifOutOctets 및 IF-MIB::ifInOctets 에서 사용할 수 있습니다. 다음 Keycloak 쿼리는 이 시스템의 각 인터페이스에 대한 네트워크 트래픽을 검색합니다.
21.7.5. Net-SNMP 확장 링크 복사링크가 클립보드에 복사되었습니다!
원시 시스템 지표 외에도 애플리케이션 지표를 제공하도록 Net-SNMP 에이전트를 확장할 수 있습니다. 이를 통해 용량 계획 및 성능 문제 해결을 수행할 수 있습니다. 예를 들어, 테스트 중에 이메일 시스템에 5 분의 부하 평균 15가 있다는 것을 아는 것이 도움이 될 수 있지만 이메일 시스템이 초당 80,000개의 메시지의 부하 평균을 처리하는 동안 이메일 시스템의 부하 평균 15를 사용하는 것이 더 도움이 됩니다. 시스템 지표와 동일한 인터페이스를 통해 애플리케이션 메트릭을 사용할 수 있는 경우 시스템 성능에 대한 다양한 로드 시나리오의 영향을 시각화할 수도 있습니다(예: 각 추가 10,000개의 메시지는 000까지 선형적으로 로드 평균 증가).
Red Hat Enterprise Linux에 포함된 여러 애플리케이션에서 Net-SNMP 에이전트를 확장하여 Keycloak을 통해 애플리케이션 지표를 제공합니다. 사용자 지정 애플리케이션에 대한 에이전트를 확장하는 방법은 여러 가지가 있습니다. 이 섹션에서는 선택적 채널에서 쉘 스크립트 및 Perl 플러그인을 사용하여 에이전트 확장을 설명합니다. net-snmp-utils 및 net-snmp-perl 패키지가 설치되어 있고 사용자에게 21.7.3.2절. “인증 구성” 에 설명된 대로 Systemd 트리에 대한 액세스 권한이 부여된 것으로 가정합니다.
21.7.5.1. 쉘 스크립트를 사용하여 Net-SNMP 확장 링크 복사링크가 클립보드에 복사되었습니다!
Net-SNMP 에이전트는 임의의 쉘 스크립트를 쿼리하는 데 사용할 수 있는 확장 기능인 mB(NET-SNMP-EXTEND-MIB)를 제공합니다. 실행할 쉘 스크립트를 지정하려면 /etc/snmp/snmpd.conf 파일에서 extend 지시문을 사용합니다. 정의한 후에는 에이전트에서 종료 코드와 Keycloak을 통해 명령의 출력을 제공합니다. 아래 예제에서는 프로세스 테이블에서 httpd 프로세스 수를 결정하는 스크립트를 사용하여 이 메커니즘을 보여줍니다.
또한 Net-SNMP 에이전트는 proc 지시문을 통해 프로세스 테이블을 확인하기 위한 내장 메커니즘을 제공합니다. 자세한 내용은 snmpd.conf(5) 매뉴얼 페이지를 참조하십시오.
다음 쉘 스크립트의 종료 코드는 지정된 시점에서 시스템에서 실행되는 httpd 프로세스 수입니다.
#!/bin/sh NUMPIDS=pgrep httpd | wc -l exit $NUMPIDS
#!/bin/sh
NUMPIDS=pgrep httpd | wc -l
exit $NUMPIDS
이 스크립트를 SNMP에서 사용할 수 있도록 하려면 시스템 경로의 위치에 스크립트를 복사하고 실행 가능한 비트를 설정하고, /etc/snmp/snmpd.conf 파일에 extend 지시문을 추가합니다. extend 지시문의 형식은 다음과 같습니다.
extend name prog args
extend name prog args
… 여기서 name 은 확장자에 대한 식별 문자열입니다. prog 는 실행할 프로그램이며 args 는 프로그램을 제공하는 인수입니다. 예를 들어 위의 쉘 스크립트가 /usr/local/bin/check_apache.sh 에 복사되는 경우 다음 지시어는 Systemd 트리에 스크립트를 추가합니다.
extend httpd_pids /bin/sh /usr/local/bin/check_apache.sh
extend httpd_pids /bin/sh /usr/local/bin/check_apache.sh
그러면 NET-SNMP-EXTEND-MIB::nsExtendObjects 에서 스크립트를 쿼리할 수 있습니다.
이 예제의 종료 코드("8")는 INTEGER 유형으로 제공되며 모든 출력은 STRING 유형으로 제공됩니다. 여러 지표를 정수로 노출하려면 extend 지시문을 사용하여 스크립트에 다른 인수를 제공합니다. 예를 들어 다음 쉘 스크립트를 사용하여 임의의 문자열과 일치하는 프로세스 수를 확인할 수 있으며 프로세스 수를 제공하는 텍스트 문자열을 출력할 수도 있습니다.
다음 /etc/snmp/snmpd.conf 지시문은 위의 스크립트가 /usr/local/bin/check_proc.sh 에 복사되면 httpd PID 수와 snmpd PID 수를 모두 제공합니다.
extend httpd_pids /bin/sh /usr/local/bin/check_proc.sh httpd extend snmpd_pids /bin/sh /usr/local/bin/check_proc.sh snmpd
extend httpd_pids /bin/sh /usr/local/bin/check_proc.sh httpd
extend snmpd_pids /bin/sh /usr/local/bin/check_proc.sh snmpd
다음 예제에서는 nsExtendObjects OID의 snmpwalk 의 출력을 보여줍니다.
정수 종료 코드는 0-255 범위로 제한됩니다. 256을 초과할 가능성이 있는 값의 경우 스크립트의 표준 출력(문자열로 입력됨) 또는 에이전트를 확장하는 다른 방법을 사용합니다.
마지막 예는 시스템의 사용 가능한 메모리와 httpd 프로세스 수에 대한 쿼리를 보여줍니다. 성능 테스트 중에 이 쿼리를 사용하여 메모리 부족에 대한 프로세스 수의 영향을 확인할 수 있습니다.
snmpget localhost \ 'NET-SNMP-EXTEND-MIB::nsExtendResult."httpd_pids"' \ UCD-SNMP-MIB::memAvailReal.0
~]$ snmpget localhost \
'NET-SNMP-EXTEND-MIB::nsExtendResult."httpd_pids"' \
UCD-SNMP-MIB::memAvailReal.0
NET-SNMP-EXTEND-MIB::nsExtendResult."httpd_pids" = INTEGER: 8
UCD-SNMP-MIB::memAvailReal.0 = INTEGER: 799664 kB
21.7.5.2. Perl을 사용하여 Net-SNMP 확장 링크 복사링크가 클립보드에 복사되었습니다!
extend 지시문을 사용하여 쉘 스크립트를 실행하는 것은 Keycloak을 통해 사용자 지정 애플리케이션 지표를 노출하는 데 상당히 제한된 방법입니다. Net-SNMP 에이전트에서는 사용자 정의 오브젝트를 노출하기 위한 내장 Perl 인터페이스도 제공합니다. Optional 채널의 net-snmp-perl 패키지는 Red Hat Enterprise Linux에 임베디드 Perl 플러그인을 작성하는 데 사용되는 NetSNMP::agent Perl 모듈을 제공합니다.
선택적 및 추가 채널에 가입하기 전에 지원 범위 세부 정보를 참조하십시오. 이러한 채널에서 패키지를 설치하려면 How to access Optional and Supplementary channel, and -devel packages using Red Hat Subscription Manager (RHSM)를 사용하여 Red Hat Customer Portal에 설명된 단계를 따르십시오.
NetSNMP::agent Perl 모듈은 에이전트 의 OID 트리에 대한 요청을 처리하는 데 사용되는 에이전트 오브젝트를 제공합니다. 에이전트 오브젝트의 생성자에는 snmpd 또는 독립 실행형 에이전트의 하위 에이전트로 에이전트를 실행하는 옵션이 있습니다. 포함된 에이전트를 만드는 데는 인수가 필요하지 않습니다.
use NetSNMP::agent (':all');
my $agent = new NetSNMP::agent();
use NetSNMP::agent (':all');
my $agent = new NetSNMP::agent();
에이전트 오브젝트에는 특정 OID에 콜백 함수를 등록하는 데 사용되는 레지스터 방법이 있습니다. register 함수는 콜백 함수에 대한 이름, OID 및 포인터를 사용합니다. 다음 예제에서는 OID .1.3 .6.1.4.1.8072.9999에서 요청을 처리할 중첩 에이전트에
hello_handler 라는 콜백 함수를 등록합니다.
$agent->register("hello_world", ".1.3.6.1.4.1.8072.9999.9999",
\&hello_handler);
$agent->register("hello_world", ".1.3.6.1.4.1.8072.9999.9999",
\&hello_handler);
OID .1.3 .6.1.4.1.8072. 9999(NET-SNMP-MIB::netSnmpPlaypen)는 일반적으로 설명 목적으로만 사용됩니다. 조직에 이미 루트 OID가 없는 경우 ISO 이름 등록 기관(미국의ANSI)에 문의하여 얻을 수 있습니다.
처리기 함수는 네 개의 매개변수인 HANDLER,REGISTRATION_INFO,REQUEST_INFO, REQUESTS 를 사용하여 호출됩니다. REQUESTS 매개변수에는 현재 호출의 요청 목록이 포함되어 있으며 반복하여 데이터로 채워야 합니다. 목록의 요청 오브젝트에는 요청의 OID 및 값을 조작하는 get 및 set 메서드가 있습니다. 예를 들어 다음 호출은 요청 오브젝트의 값을 "hello world" 문자열로 설정합니다.
$request->setValue(ASN_OCTET_STR, "hello world");
$request->setValue(ASN_OCTET_STR, "hello world");
handler 함수는 GET 요청과 GETNEXT 요청의 두 가지 유형에 응답해야 합니다. 요청 유형은 처리기 함수에 세 번째 매개 변수로 전달된 request_info 오브젝트에서 getMode 메서드를 호출하여 결정됩니다. 요청이 GET 요청인 경우 호출자는 요청의 OID에 따라 처리기가 요청 오브젝트의 값을 설정해야 합니다. 요청이 GETNEXT 요청인 경우 호출자는 요청의 OID를 트리에서 사용 가능한 다음 OID로 설정할 수도 있습니다. 이는 다음 코드 예제에 설명되어 있습니다.
getMode 가 MODE_GET 을 반환하면 핸들러는 요청 오브젝트에서 getOID 호출 값을 분석합니다. OID가 ".1.0"으로 종료되면 요청의 값은 string_value 로 설정되거나 OID가 ".1.1"으로 종료되면 integer_value 로 설정됩니다. getMode 가 MODE_GETNEXT 를 반환하는 경우, 처리기는 요청의 OID가 ".1.0"인지 여부를 결정하고, ".1.1"의 OID 및 값을 설정합니다. 트리에서 ".1.0"보다 트리에서 요청이 높으면 OID 및 ".1.0"의 값이 설정됩니다. 이것은 실제로 트리의 "next" 값을 반환하여 snmpwalk 와 같은 프로그램은 구조에 대한 사전 지식없이 트리를 트 트 트롤할 수 있습니다.
변수 유형은 NetSNMP::ASN 의 상수를 사용하여 설정됩니다. 사용 가능한 상수 전체 목록은 perldoc for NetSNMP::ASN 을 참조하십시오.
이 예제 Perl 플러그인의 전체 코드 목록은 다음과 같습니다.
플러그인을 테스트하려면 위의 프로그램을 /usr/share/snmp/snmp_world.pl 에 복사하고 /etc/snmp/snmpd.conf 구성 파일에 다음 행을 추가합니다.
perl do "/usr/share/snmp/hello_world.pl"
perl do "/usr/share/snmp/hello_world.pl"
새 Perl 플러그인을 로드하려면 SNMP 에이전트 데몬을 다시 시작해야 합니다. 다시 시작되면 snmpwalk 가 새 데이터를 반환해야 합니다.
snmpwalk localhost NET-SNMP-MIB::netSnmpPlaypen
~]$ snmpwalk localhost NET-SNMP-MIB::netSnmpPlaypen
NET-SNMP-MIB::netSnmpPlaypen.1.0 = STRING: "hello world"
NET-SNMP-MIB::netSnmpPlaypen.1.1 = INTEGER: 8675309
또한 snmpget 을 사용하여 핸들러의 다른 모드를 실행해야 합니다.
snmpget localhost \ NET-SNMP-MIB::netSnmpPlaypen.1.0 \ NET-SNMP-MIB::netSnmpPlaypen.1.1
~]$ snmpget localhost \
NET-SNMP-MIB::netSnmpPlaypen.1.0 \
NET-SNMP-MIB::netSnmpPlaypen.1.1
NET-SNMP-MIB::netSnmpPlaypen.1.0 = STRING: "hello world"
NET-SNMP-MIB::netSnmpPlaypen.1.1 = INTEGER: 8675309