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 패키지” 는 각 패키지와 해당 컨텐츠를 요약합니다.

Expand
표 21.2. 사용 가능한 Net-SNMP 패키지
패키지제공

net-snmp

SNMP 에이전트 데몬 및 문서. 이 패키지는 성능 데이터를 내보내는 데 필요합니다.

net-snmp-libs

netsnmp 라이브러리 및 번들 관리 정보 베이스(MB S)입니다. 이 패키지는 성능 데이터를 내보내는 데 필요합니다.

net-snmp-utils

snmpgetsnmpwalk 와 같은 중첩 클라이언트. 이 패키지는 SNMP를 통해 시스템 성능 데이터를 쿼리하기 위해 필요합니다.

net-snmp-perl

mib2c 유틸리티 및 NetSNMP Perl 모듈. 이 패키지는 Optional 채널에서 제공합니다. Red Hat 추가 채널에 대한 자세한 내용은 9.5.7절. “선택적 리포지토리 추가” 를 참조하십시오.

net-snmp-python

Python용 SNMP 클라이언트 라이브러리입니다. 이 패키지는 Optional 채널에서 제공합니다. Red Hat 추가 채널에 대한 자세한 내용은 9.5.7절. “선택적 리포지토리 추가” 를 참조하십시오.

이러한 패키지를 설치하려면 다음 형식으로 yum 명령을 사용하십시오.

yum install package…
Copy to Clipboard Toggle word wrap

예를 들어 이 섹션의 나머지 부분에서 사용된 SNMP 에이전트 데몬 및 SNMP 클라이언트를 설치하려면 쉘 프롬프트에 root 로 다음을 입력합니다.

~]# yum install net-snmp net-snmp-libs net-snmp-utils
Copy to Clipboard Toggle word wrap

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
Copy to Clipboard Toggle word wrap

부팅 시 자동으로 시작하도록 서비스를 구성하려면 다음 명령을 사용합니다.

systemctl enable snmpd.service
Copy to Clipboard Toggle word wrap

21.7.2.2. 서비스 중지

실행 중인 snmpd 서비스를 중지하려면 쉘 프롬프트에 root 로 다음을 입력합니다.

systemctl stop snmpd.service
Copy to Clipboard Toggle word wrap

부팅 시 서비스 시작을 비활성화하려면 다음 명령을 사용하십시오.

systemctl disable snmpd.service
Copy to Clipboard Toggle word wrap

21.7.2.3. 서비스를 다시 시작

실행 중인 snmpd 서비스를 다시 시작하려면 쉘 프롬프트에서 다음을 입력합니다.

systemctl restart snmpd.service
Copy to Clipboard Toggle word wrap

이 명령은 서비스를 중지하고 빠른 연속으로 다시 시작합니다. 서비스를 중지하지 않고 구성을 다시 로드하려면 다음 명령을 대신 실행합니다.

systemctl reload snmpd.service
Copy to Clipboard Toggle word wrap

이로 인해 실행 중인 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
Copy to Clipboard Toggle word wrap

21.7.3.1. 시스템 정보 설정

net-SNMP는 시스템 트리를 통해 몇 가지 기본 시스템 정보를 제공합니다. 예를 들어 다음 snmpwalk 명령은 기본 에이전트 구성이 있는 시스템 트리를 보여줍니다.

~]# snmpwalk -v2c -c public 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
SNMPv2-MIB::sysObjectID.0 = OID: NET-SNMP-MIB::netSnmpAgentOIDs.10
DISMAN-EVENT-MIB::sysUpTimeInstance = Timeticks: (464) 0:00:04.64
SNMPv2-MIB::sysContact.0 = STRING: Root <root@localhost> (configure /etc/snmp/snmp.local.conf)
[output truncated]
Copy to Clipboard Toggle word wrap

기본적으로 sysName 개체는 호스트 이름으로 설정됩니다. sysLocationsysContact 오브젝트는 다음과 같이 syslocationsysContact 지시문의 값을 변경하여 /etc/snmp/snmpd.conf 파일에서 구성할 수 있습니다.

syslocation Datacenter, Row 4, Rack 3
syscontact UNIX Admin <admin@example.com>
Copy to Clipboard Toggle word wrap

구성 파일을 변경한 후 설정을 다시 로드하고 snmpwalk 명령을 다시 실행하여 테스트합니다.

~]# systemctl reload snmp.service
~]# snmpwalk -v2c -c public 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
SNMPv2-MIB::sysObjectID.0 = OID: NET-SNMP-MIB::netSnmpAgentOIDs.10
DISMAN-EVENT-MIB::sysUpTimeInstance = Timeticks: (35424) 0:05:54.24
SNMPv2-MIB::sysContact.0 = STRING: UNIX Admin <admin@example.com>
SNMPv2-MIB::sysName.0 = STRING: localhost.localdomain
SNMPv2-MIB::sysLocation.0 = STRING: Datacenter, Row 4, Rack 3
[output truncated]
Copy to Clipboard Toggle word wrap

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
Copy to Clipboard Toggle word wrap

커뮤니티가 사용할 커뮤니티 문자열인 경우 source 는 IP 주소 또는 서브넷이며, OID 는 액세스를 제공하는 Systemd 트리입니다. 예를 들어 다음 지시문은 로컬 머신의 커뮤니티 문자열 "redhat"을 사용하여 클라이언트에 시스템 트리에 대한 읽기 전용 액세스를 제공합니다.

rocommunity redhat 127.0.0.1 .1.3.6.1.2.1.1
Copy to Clipboard Toggle word wrap

구성을 테스트하려면 -v-c 옵션과 함께 snmpwalk 명령을 사용합니다.

~]# snmpwalk -v2c -c redhat 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
SNMPv2-MIB::sysObjectID.0 = OID: NET-SNMP-MIB::netSnmpAgentOIDs.10
DISMAN-EVENT-MIB::sysUpTimeInstance = Timeticks: (101376) 0:16:53.76
SNMPv2-MIB::sysContact.0 = STRING: UNIX Admin <admin@example.com>
SNMPv2-MIB::sysName.0 = STRING: localhost.localdomain
SNMPv2-MIB::sysLocation.0 = STRING: Datacenter, Row 4, Rack 3
[output truncated]
Copy to Clipboard Toggle word wrap
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" 사용자를 생성합니다.

~]# systemctl stop snmpd.service
~]# net-snmp-create-v3-user
Enter a SNMPv3 user name to create:
admin
Enter authentication pass-phrase:
redhatsnmp
Enter encryption pass-phrase:
 [press return to reuse the authentication pass-phrase]

adding the following line to /var/lib/net-snmp/snmpd.conf:
  createUser admin MD5 "redhatsnmp" DES
adding the following line to /etc/snmp/snmpd.conf:
  rwuser admin
~]# systemctl start snmpd.service
Copy to Clipboard Toggle word wrap

net-snmp/snmp/snmpd.conf에 /etc/snmp/snmpd.conf 에 추가하는 rwuser 지시문(또는 -ro 명령줄 옵션이 제공되는 경우 rouser )은 rwcommunityrocommunity 지시문과 유사한 형식을 갖습니다.

directive user noauth|auth|priv OID
Copy to Clipboard Toggle word wrap

여기서 사용자는 사용자 이름이고 OID 는 액세스를 제공하기 위해 repeatedly 트리입니다. 기본적으로 Net-SNMP 에이전트 데몬에서는 인증된 요청( auth 옵션)만 허용합니다. noauth 옵션을 사용하면 인증되지 않은 요청을 허용할 수 있으며 priv 옵션을 사용하면 암호화를 사용할 수 있습니다. authpriv 옵션은 요청을 인증해야 하고 응답을 암호화하도록 지정합니다.

예를 들어 다음 줄은 "admin" 사용자에게 전체 트리에 대한 읽기-쓰기 액세스 권한을 부여합니다.

rwuser admin authpriv .1
Copy to Clipboard Toggle word wrap

구성을 테스트하려면 다음 행을 사용하여 사용자의 홈 디렉터리에 .snmp/디렉토리와 해당 디렉토리에 snmp.conf 라는 구성 파일을 만듭니다.

defVersion 3
defSecurityLevel authPriv
defSecurityName admin
defPassphrase redhatsnmp
Copy to Clipboard Toggle word wrap

snmpwalk 명령은 이제 에이전트를 쿼리할 때 이러한 인증 설정을 사용합니다.

~]$ 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]
Copy to Clipboard Toggle word wrap

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를 요약합니다.

Expand
표 21.3. 사용 가능한 OIDs
OID설명

HOST-RESOURCES-MIB::hrSystem

가동 시간, 사용자 수 및 실행 중인 프로세스 수와 같은 일반적인 시스템 정보를 포함합니다.

HOST-RESOURCES-MIB::hrStorage

메모리 및 파일 시스템 사용량에 대한 데이터를 포함합니다.

HOST-RESOURCES-MIB::hrDevices

모든 프로세서, 네트워크 장치 및 파일 시스템의 목록을 포함합니다.

HOST-RESOURCES-MIB::hrSWRun

실행 중인 모든 프로세스의 목록을 포함합니다.

HOST-RESOURCES-MIB::hrSWRunPerf

HOST-RESOURCES-MIB::hrSWRun의 프로세스 테이블에 대한 메모리 및 CPU 통계가 포함되어 있습니다.

HOST-RESOURCES-MIB::hrSWInstalled

RPM 데이터베이스 목록이 포함되어 있습니다.

또한 사용 가능한 정보의 요약을 검색하는 데 사용할 수 있는 Host Resources MiB에서 사용할 수 있는 다양한 SNMP 테이블도 있습니다. 다음 예제에서는 HOST-RESOURCES-MIB::hrFSTable 을 표시합니다.

~]$ snmptable -Cb localhost HOST-RESOURCES-MIB::hrFSTable
SNMP table: HOST-RESOURCES-MIB::hrFSTable

 Index MountPoint RemoteMountPoint                Type
  Access Bootable StorageIndex LastFullBackupDate LastPartialBackupDate
   1    "/"        "" HOST-RESOURCES-TYPES::hrFSLinuxExt2
 readWrite   true      31   0-1-1,0:0:0.0     0-1-1,0:0:0.0
   5 "/dev/shm"        ""   HOST-RESOURCES-TYPES::hrFSOther
 readWrite  false      35   0-1-1,0:0:0.0     0-1-1,0:0:0.0
   6  "/boot"        "" HOST-RESOURCES-TYPES::hrFSLinuxExt2
 readWrite  false      36   0-1-1,0:0:0.0     0-1-1,0:0:0.0
Copy to Clipboard Toggle word wrap

HOST-RESOURCES-MIB 에 대한 자세한 내용은 /usr/share/snmp/mibs/HOST-RESOURCES-MIB.txt 파일을 참조하십시오.

21.7.4.2. CPU 및 메모리 정보

대부분의 시스템 성능 데이터는 UCD SNMP MIB 에서 사용할 수 있습니다. systemStats OID는 프로세서 사용량에 대한 여러 카운터를 제공합니다.

~]$ snmpwalk localhost UCD-SNMP-MIB::systemStats
UCD-SNMP-MIB::ssIndex.0 = INTEGER: 1
UCD-SNMP-MIB::ssErrorName.0 = STRING: systemStats
UCD-SNMP-MIB::ssSwapIn.0 = INTEGER: 0 kB
UCD-SNMP-MIB::ssSwapOut.0 = INTEGER: 0 kB
UCD-SNMP-MIB::ssIOSent.0 = INTEGER: 0 blocks/s
UCD-SNMP-MIB::ssIOReceive.0 = INTEGER: 0 blocks/s
UCD-SNMP-MIB::ssSysInterrupts.0 = INTEGER: 29 interrupts/s
UCD-SNMP-MIB::ssSysContext.0 = INTEGER: 18 switches/s
UCD-SNMP-MIB::ssCpuUser.0 = INTEGER: 0
UCD-SNMP-MIB::ssCpuSystem.0 = INTEGER: 0
UCD-SNMP-MIB::ssCpuIdle.0 = INTEGER: 99
UCD-SNMP-MIB::ssCpuRawUser.0 = Counter32: 2278
UCD-SNMP-MIB::ssCpuRawNice.0 = Counter32: 1395
UCD-SNMP-MIB::ssCpuRawSystem.0 = Counter32: 6826
UCD-SNMP-MIB::ssCpuRawIdle.0 = Counter32: 3383736
UCD-SNMP-MIB::ssCpuRawWait.0 = Counter32: 7629
UCD-SNMP-MIB::ssCpuRawKernel.0 = Counter32: 0
UCD-SNMP-MIB::ssCpuRawInterrupt.0 = Counter32: 434
UCD-SNMP-MIB::ssIORawSent.0 = Counter32: 266770
UCD-SNMP-MIB::ssIORawReceived.0 = Counter32: 427302
UCD-SNMP-MIB::ssRawInterrupts.0 = Counter32: 743442
UCD-SNMP-MIB::ssRawContexts.0 = Counter32: 718557
UCD-SNMP-MIB::ssCpuRawSoftIRQ.0 = Counter32: 128
UCD-SNMP-MIB::ssRawSwapIn.0 = Counter32: 0
UCD-SNMP-MIB::ssRawSwapOut.0 = Counter32: 0
Copy to Clipboard Toggle word wrap

특히 ssCpuRawUser,ssCpuRawSystem,ssCpuRaw Idle 및 ssCpuRawIdle OIDs는 시스템이 커널 공간, 사용자 공간, 사용자 공간,에서 대부분의 프로세서 시간을 소비하고 있는지 여부를 결정하는 데 도움이 되는 카운터를 제공합니다. 또는 I/O. ssRawSwapInssRawSwapOut 은 시스템이 메모리 소진으로 인한 고충 여부를 결정할 때 유용할 수 있습니다.

무료 명령에 유사한 데이터를 제공하는 UCD-SNMP-MIB::memory OID에서 더 많은 메모리 정보를 사용할 수 있습니다.

~]$ snmpwalk localhost UCD-SNMP-MIB::memory
UCD-SNMP-MIB::memIndex.0 = INTEGER: 0
UCD-SNMP-MIB::memErrorName.0 = STRING: swap
UCD-SNMP-MIB::memTotalSwap.0 = INTEGER: 1023992 kB
UCD-SNMP-MIB::memAvailSwap.0 = INTEGER: 1023992 kB
UCD-SNMP-MIB::memTotalReal.0 = INTEGER: 1021588 kB
UCD-SNMP-MIB::memAvailReal.0 = INTEGER: 634260 kB
UCD-SNMP-MIB::memTotalFree.0 = INTEGER: 1658252 kB
UCD-SNMP-MIB::memMinimumSwap.0 = INTEGER: 16000 kB
UCD-SNMP-MIB::memBuffer.0 = INTEGER: 30760 kB
UCD-SNMP-MIB::memCached.0 = INTEGER: 216200 kB
UCD-SNMP-MIB::memSwapError.0 = INTEGER: noError(0)
UCD-SNMP-MIB::memSwapErrorMsg.0 = STRING:
Copy to Clipboard Toggle word wrap

부하 평균은 UCD SNMP MIB 에서도 사용할 수 있습니다. SNMP 테이블 UCD-SNMP-MIB::laTable 에는 1, 5, 15분 부하 평균 목록이 있습니다.

~]$ snmptable localhost UCD-SNMP-MIB::laTable
SNMP table: UCD-SNMP-MIB::laTable

 laIndex laNames laLoad laConfig laLoadInt laLoadFloat laErrorFlag laErrMessage
    1 Load-1  0.00  12.00     0  0.000000   noError
    2 Load-5  0.00  12.00     0  0.000000   noError
    3 Load-15  0.00  12.00     0  0.000000   noError
Copy to Clipboard Toggle word wrap

21.7.4.3. 파일 시스템 및 디스크 정보

Host Resources MiB는 파일 시스템 크기 및 사용에 대한 정보를 제공합니다. 각 파일 시스템(및 각 메모리 풀)에는 HOST-RESOURCES-MIB::hrStorageTable 테이블에 항목이 있습니다.

~]$ snmptable -Cb localhost HOST-RESOURCES-MIB::hrStorageTable
SNMP table: HOST-RESOURCES-MIB::hrStorageTable

 Index                     Type      Descr
AllocationUnits  Size  Used AllocationFailures
   1      HOST-RESOURCES-TYPES::hrStorageRam Physical memory
1024 Bytes 1021588 388064         ?
   3 HOST-RESOURCES-TYPES::hrStorageVirtualMemory Virtual memory
1024 Bytes 2045580 388064         ?
   6     HOST-RESOURCES-TYPES::hrStorageOther Memory buffers
1024 Bytes 1021588 31048         ?
   7     HOST-RESOURCES-TYPES::hrStorageOther  Cached memory
1024 Bytes 216604 216604         ?
  10 HOST-RESOURCES-TYPES::hrStorageVirtualMemory   Swap space
1024 Bytes 1023992   0         ?
  31   HOST-RESOURCES-TYPES::hrStorageFixedDisk        /
4096 Bytes 2277614 250391         ?
  35   HOST-RESOURCES-TYPES::hrStorageFixedDisk    /dev/shm
4096 Bytes 127698   0         ?
  36   HOST-RESOURCES-TYPES::hrStorageFixedDisk      /boot
1024 Bytes 198337 26694         ?
Copy to Clipboard Toggle word wrap

HOST-RESOURCES-MIB::hrStorageSizeHOST-RESOURCES-MIB::hrStorageUsed 아래의 OID를 사용하여 마운트된 각 파일 시스템의 나머지 용량을 계산할 수 있습니다.

I/O 데이터는 UCD-SNMP-MIBStats (sIORawSent.0 및 ssIORawRecieved.0 ) 및 UCD-DISKIO-MIB::diskIOTable 둘 다에서 사용할 수 있습니다. 후자의 경우 훨씬 더 세분화된 데이터를 제공합니다. 이 표에는 디스크IONReadX 및 diskIONWrittenX 의 OID가 있으며, 시스템 부팅 이후 해당 블록 장치에서 읽고 쓰는 바이트 수에 대한 카운터를 제공합니다.

~]$ snmptable -Cb localhost UCD-DISKIO-MIB::diskIOTable
SNMP table: UCD-DISKIO-MIB::diskIOTable

 Index Device   NRead NWritten Reads Writes LA1 LA5 LA15  NReadX NWrittenX
...
  25  sda 216886272 139109376 16409  4894  ?  ?  ? 216886272 139109376
  26  sda1  2455552   5120  613   2  ?  ?  ?  2455552   5120
  27  sda2  1486848     0  332   0  ?  ?  ?  1486848     0
  28  sda3 212321280 139104256 15312  4871  ?  ?  ? 212321280 139104256
Copy to Clipboard Toggle word wrap

21.7.4.4. 네트워크 정보

Interfaces MiB는 네트워크 장치에 대한 정보를 제공합니다. IF-MIB::ifTable 은 시스템의 각 인터페이스에 대한 항목, 인터페이스 구성 및 인터페이스에 대한 다양한 패킷 카운터를 사용하여 SNMP 테이블을 제공합니다. 다음 예제에서는 두 개의 물리적 네트워크 인터페이스가 있는 시스템에서 ifTable 의 처음 몇 개의 열을 보여줍니다.

~]$ snmptable -Cb localhost IF-MIB::ifTable
SNMP table: IF-MIB::ifTable

 Index Descr       Type  Mtu  Speed   PhysAddress AdminStatus
   1  lo softwareLoopback 16436 10000000              up
   2 eth0  ethernetCsmacd 1500    0 52:54:0:c7:69:58     up
   3 eth1  ethernetCsmacd 1500    0 52:54:0:a7:a3:24    down
Copy to Clipboard Toggle word wrap

네트워크 트래픽은 OIDs IF-MIB::ifOutOctetsIF-MIB::ifInOctets 에서 사용할 수 있습니다. 다음 Keycloak 쿼리는 이 시스템의 각 인터페이스에 대한 네트워크 트래픽을 검색합니다.

~]$ snmpwalk localhost IF-MIB::ifDescr
IF-MIB::ifDescr.1 = STRING: lo
IF-MIB::ifDescr.2 = STRING: eth0
IF-MIB::ifDescr.3 = STRING: eth1
~]$ snmpwalk localhost IF-MIB::ifOutOctets
IF-MIB::ifOutOctets.1 = Counter32: 10060699
IF-MIB::ifOutOctets.2 = Counter32: 650
IF-MIB::ifOutOctets.3 = Counter32: 0
~]$ snmpwalk localhost IF-MIB::ifInOctets
IF-MIB::ifInOctets.1 = Counter32: 10060699
IF-MIB::ifInOctets.2 = Counter32: 78650
IF-MIB::ifInOctets.3 = Counter32: 0
Copy to Clipboard Toggle word wrap

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-utilsnet-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
Copy to Clipboard Toggle word wrap

이 스크립트를 SNMP에서 사용할 수 있도록 하려면 시스템 경로의 위치에 스크립트를 복사하고 실행 가능한 비트를 설정하고, /etc/snmp/snmpd.conf 파일에 extend 지시문을 추가합니다. extend 지시문의 형식은 다음과 같습니다.

extend name prog args
Copy to Clipboard Toggle word wrap

…​ 여기서 name 은 확장자에 대한 식별 문자열입니다. prog 는 실행할 프로그램이며 args 는 프로그램을 제공하는 인수입니다. 예를 들어 위의 쉘 스크립트가 /usr/local/bin/check_apache.sh 에 복사되는 경우 다음 지시어는 Systemd 트리에 스크립트를 추가합니다.

extend httpd_pids /bin/sh /usr/local/bin/check_apache.sh
Copy to Clipboard Toggle word wrap

그러면 NET-SNMP-EXTEND-MIB::nsExtendObjects 에서 스크립트를 쿼리할 수 있습니다.

~]$ snmpwalk localhost NET-SNMP-EXTEND-MIB::nsExtendObjects
NET-SNMP-EXTEND-MIB::nsExtendNumEntries.0 = INTEGER: 1
NET-SNMP-EXTEND-MIB::nsExtendCommand."httpd_pids" = STRING: /bin/sh
NET-SNMP-EXTEND-MIB::nsExtendArgs."httpd_pids" = STRING: /usr/local/bin/check_apache.sh
NET-SNMP-EXTEND-MIB::nsExtendInput."httpd_pids" = STRING:
NET-SNMP-EXTEND-MIB::nsExtendCacheTime."httpd_pids" = INTEGER: 5
NET-SNMP-EXTEND-MIB::nsExtendExecType."httpd_pids" = INTEGER: exec(1)
NET-SNMP-EXTEND-MIB::nsExtendRunType."httpd_pids" = INTEGER: run-on-read(1)
NET-SNMP-EXTEND-MIB::nsExtendStorage."httpd_pids" = INTEGER: permanent(4)
NET-SNMP-EXTEND-MIB::nsExtendStatus."httpd_pids" = INTEGER: active(1)
NET-SNMP-EXTEND-MIB::nsExtendOutput1Line."httpd_pids" = STRING:
NET-SNMP-EXTEND-MIB::nsExtendOutputFull."httpd_pids" = STRING:
NET-SNMP-EXTEND-MIB::nsExtendOutNumLines."httpd_pids" = INTEGER: 1
NET-SNMP-EXTEND-MIB::nsExtendResult."httpd_pids" = INTEGER: 8
NET-SNMP-EXTEND-MIB::nsExtendOutLine."httpd_pids".1 = STRING:
Copy to Clipboard Toggle word wrap

이 예제의 종료 코드("8")는 INTEGER 유형으로 제공되며 모든 출력은 STRING 유형으로 제공됩니다. 여러 지표를 정수로 노출하려면 extend 지시문을 사용하여 스크립트에 다른 인수를 제공합니다. 예를 들어 다음 쉘 스크립트를 사용하여 임의의 문자열과 일치하는 프로세스 수를 확인할 수 있으며 프로세스 수를 제공하는 텍스트 문자열을 출력할 수도 있습니다.

#!/bin/sh

PATTERN=$1
NUMPIDS=pgrep $PATTERN | wc -l

echo "There are $NUMPIDS $PATTERN processes."
exit $NUMPIDS
Copy to Clipboard Toggle word wrap

다음 /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
Copy to Clipboard Toggle word wrap

다음 예제에서는 nsExtendObjects OID의 snmpwalk 의 출력을 보여줍니다.

~]$ snmpwalk localhost NET-SNMP-EXTEND-MIB::nsExtendObjects
NET-SNMP-EXTEND-MIB::nsExtendNumEntries.0 = INTEGER: 2
NET-SNMP-EXTEND-MIB::nsExtendCommand."httpd_pids" = STRING: /bin/sh
NET-SNMP-EXTEND-MIB::nsExtendCommand."snmpd_pids" = STRING: /bin/sh
NET-SNMP-EXTEND-MIB::nsExtendArgs."httpd_pids" = STRING: /usr/local/bin/check_proc.sh httpd
NET-SNMP-EXTEND-MIB::nsExtendArgs."snmpd_pids" = STRING: /usr/local/bin/check_proc.sh snmpd
NET-SNMP-EXTEND-MIB::nsExtendInput."httpd_pids" = STRING:
NET-SNMP-EXTEND-MIB::nsExtendInput."snmpd_pids" = STRING:
...
NET-SNMP-EXTEND-MIB::nsExtendResult."httpd_pids" = INTEGER: 8
NET-SNMP-EXTEND-MIB::nsExtendResult."snmpd_pids" = INTEGER: 1
NET-SNMP-EXTEND-MIB::nsExtendOutLine."httpd_pids".1 = STRING: There are 8 httpd processes.
NET-SNMP-EXTEND-MIB::nsExtendOutLine."snmpd_pids".1 = STRING: There are 1 snmpd processes.
Copy to Clipboard Toggle word wrap
주의

정수 종료 코드는 0-255 범위로 제한됩니다. 256을 초과할 가능성이 있는 값의 경우 스크립트의 표준 출력(문자열로 입력됨) 또는 에이전트를 확장하는 다른 방법을 사용합니다.

마지막 예는 시스템의 사용 가능한 메모리와 httpd 프로세스 수에 대한 쿼리를 보여줍니다. 성능 테스트 중에 이 쿼리를 사용하여 메모리 부족에 대한 프로세스 수의 영향을 확인할 수 있습니다.

~]$ 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
Copy to Clipboard Toggle word wrap

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();
Copy to Clipboard Toggle word wrap

에이전트 오브젝트에는 특정 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);
Copy to Clipboard Toggle word wrap
참고

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");
Copy to Clipboard Toggle word wrap

handler 함수는 GET 요청과 GETNEXT 요청의 두 가지 유형에 응답해야 합니다. 요청 유형은 처리기 함수에 세 번째 매개 변수로 전달된 request_info 오브젝트에서 getMode 메서드를 호출하여 결정됩니다. 요청이 GET 요청인 경우 호출자는 요청의 OID에 따라 처리기가 요청 오브젝트의 값을 설정해야 합니다. 요청이 GETNEXT 요청인 경우 호출자는 요청의 OID를 트리에서 사용 가능한 다음 OID로 설정할 수도 있습니다. 이는 다음 코드 예제에 설명되어 있습니다.

my $request;
my $string_value = "hello world";
my $integer_value = "8675309";

for($request = $requests; $request; $request = $request->next()) {
 my $oid = $request->getOID();
 if ($request_info->getMode() == MODE_GET) {
  if ($oid == new NetSNMP::OID(".1.3.6.1.4.1.8072.9999.9999.1.0")) {
   $request->setValue(ASN_OCTET_STR, $string_value);
  }
  elsif ($oid == new NetSNMP::OID(".1.3.6.1.4.1.8072.9999.9999.1.1")) {
   $request->setValue(ASN_INTEGER, $integer_value);
  }
 } elsif ($request_info->getMode() == MODE_GETNEXT) {
  if ($oid == new NetSNMP::OID(".1.3.6.1.4.1.8072.9999.9999.1.0")) {
   $request->setOID(".1.3.6.1.4.1.8072.9999.9999.1.1");
   $request->setValue(ASN_INTEGER, $integer_value);
  }
  elsif ($oid < new NetSNMP::OID(".1.3.6.1.4.1.8072.9999.9999.1.0")) {
   $request->setOID(".1.3.6.1.4.1.8072.9999.9999.1.0");
   $request->setValue(ASN_OCTET_STR, $string_value);
  }
 }
}
Copy to Clipboard Toggle word wrap

getModeMODE_GET 을 반환하면 핸들러는 요청 오브젝트에서 getOID 호출 값을 분석합니다. OID가 ".1.0"으로 종료되면 요청의 값은 string_value 로 설정되거나 OID가 ".1.1"으로 종료되면 integer_value 로 설정됩니다. getModeMODE_GETNEXT 를 반환하는 경우, 처리기는 요청의 OID가 ".1.0"인지 여부를 결정하고, ".1.1"의 OID 및 값을 설정합니다. 트리에서 ".1.0"보다 트리에서 요청이 높으면 OID 및 ".1.0"의 값이 설정됩니다. 이것은 실제로 트리의 "next" 값을 반환하여 snmpwalk 와 같은 프로그램은 구조에 대한 사전 지식없이 트리를 트 트 트롤할 수 있습니다.

변수 유형은 NetSNMP::ASN 의 상수를 사용하여 설정됩니다. 사용 가능한 상수 전체 목록은 perldoc for NetSNMP::ASN 을 참조하십시오.

이 예제 Perl 플러그인의 전체 코드 목록은 다음과 같습니다.

#!/usr/bin/perl

use NetSNMP::agent (':all');
use NetSNMP::ASN qw(ASN_OCTET_STR ASN_INTEGER);

sub hello_handler {
 my ($handler, $registration_info, $request_info, $requests) = @_;
 my $request;
 my $string_value = "hello world";
 my $integer_value = "8675309";

 for($request = $requests; $request; $request = $request->next()) {
  my $oid = $request->getOID();
  if ($request_info->getMode() == MODE_GET) {
   if ($oid == new NetSNMP::OID(".1.3.6.1.4.1.8072.9999.9999.1.0")) {
    $request->setValue(ASN_OCTET_STR, $string_value);
   }
   elsif ($oid == new NetSNMP::OID(".1.3.6.1.4.1.8072.9999.9999.1.1")) {
    $request->setValue(ASN_INTEGER, $integer_value);
   }
  } elsif ($request_info->getMode() == MODE_GETNEXT) {
   if ($oid == new NetSNMP::OID(".1.3.6.1.4.1.8072.9999.9999.1.0")) {
    $request->setOID(".1.3.6.1.4.1.8072.9999.9999.1.1");
    $request->setValue(ASN_INTEGER, $integer_value);
   }
   elsif ($oid < new NetSNMP::OID(".1.3.6.1.4.1.8072.9999.9999.1.0")) {
    $request->setOID(".1.3.6.1.4.1.8072.9999.9999.1.0");
    $request->setValue(ASN_OCTET_STR, $string_value);
   }
  }
 }
}

my $agent = new NetSNMP::agent();
$agent->register("hello_world", ".1.3.6.1.4.1.8072.9999.9999",
         \&hello_handler);
Copy to Clipboard Toggle word wrap

플러그인을 테스트하려면 위의 프로그램을 /usr/share/snmp/snmp_world.pl 에 복사하고 /etc/snmp/snmpd.conf 구성 파일에 다음 행을 추가합니다.

perl do "/usr/share/snmp/hello_world.pl"
Copy to Clipboard Toggle word wrap

새 Perl 플러그인을 로드하려면 SNMP 에이전트 데몬을 다시 시작해야 합니다. 다시 시작되면 snmpwalk 가 새 데이터를 반환해야 합니다.

~]$ snmpwalk localhost NET-SNMP-MIB::netSnmpPlaypen
NET-SNMP-MIB::netSnmpPlaypen.1.0 = STRING: "hello world"
NET-SNMP-MIB::netSnmpPlaypen.1.1 = INTEGER: 8675309
Copy to Clipboard Toggle word wrap

또한 snmpget 을 사용하여 핸들러의 다른 모드를 실행해야 합니다.

~]$ 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
Copy to Clipboard Toggle word wrap
맨 위로 이동
Red Hat logoGithubredditYoutubeTwitter

자세한 정보

평가판, 구매 및 판매

커뮤니티

Red Hat 문서 정보

Red Hat을 사용하는 고객은 신뢰할 수 있는 콘텐츠가 포함된 제품과 서비스를 통해 혁신하고 목표를 달성할 수 있습니다. 최신 업데이트를 확인하세요.

보다 포괄적 수용을 위한 오픈 소스 용어 교체

Red Hat은 코드, 문서, 웹 속성에서 문제가 있는 언어를 교체하기 위해 최선을 다하고 있습니다. 자세한 내용은 다음을 참조하세요.Red Hat 블로그.

Red Hat 소개

Red Hat은 기업이 핵심 데이터 센터에서 네트워크 에지에 이르기까지 플랫폼과 환경 전반에서 더 쉽게 작업할 수 있도록 강화된 솔루션을 제공합니다.

Theme

© 2025 Red Hat