이 내보내기는 Prometheus가 수집할 수 있는 형식으로 SNMP 데이터를 노출하는 데 권장되는 방법입니다.
간단히 시작하려면 대상 장치의 읽기 전용 액세스 커뮤니티여야 하는 public_v2
인증 모듈을 사용하는 스위치, 액세스 포인트 또는 라우터와 함께 if_mib
모듈을 사용하는 것이 좋습니다.
SNMP의 커뮤니티 문자열은 SNMP v1 및 v2c에서 암호화되지 않은 상태로 전송되므로 비밀로 간주되지 않습니다. 보안 액세스를 위해서는 SNMP v3가 필요합니다.
SNMP는 계층적 데이터 구조를 사용하고 Prometheus는 n차원 행렬을 사용하지만 두 시스템은 완벽하게 매핑되며 데이터를 직접 살펴볼 필요가 없습니다. snmp_exporter
데이터를 매핑합니다.
Prometheus는 SNMP 인덱스 인스턴스를 레이블에 매핑할 수 있습니다. 예를 들어, ifEntry
ifIndex
의 INDEX를 지정합니다. 이는 Prometheus의 ifIndex
라벨이 됩니다.
SNMP 항목에 여러 인덱스 값이 있는 경우 각 값은 별도의 Prometheus 레이블에 매핑됩니다.
SNMP는 MIB로 설명되는 OID 트리로 구성됩니다. OID 하위 트리는 트리의 여러 위치에서 동일한 순서를 갖습니다. 1.3.6.1.2.1.2.2.1.1
( ifIndex
) 아래의 순서는 1.3.6.1.2.1.2.2.1.2
( ifDescr
), 1.3.6.1.2.1.31.1.1.1.10
( ifHCOutOctets
) 등과 동일합니다. 숫자는 OID이고 괄호 안의 이름은 MIB(이 경우 IF-MIB)의 이름입니다.
2번 인터페이스가 있는 장치의 경우 부분 snmpwalk
반환은 다음과 같습니다.
1.3.6.1.2.1.2.2.1.1.2 = INTEGER: 2 # ifIndex for '2' is literally just '2'
1.3.6.1.2.1.2.2.1.2.2 = STRING: "eth0" # ifDescr
1.3.6.1.2.1.31.1.1.1.1.2 = STRING: "eth0" # IfName
1.3.6.1.2.1.31.1.1.1.10.2 = INTEGER: 1000 # ifHCOutOctets, 1000 bytes
1.3.6.1.2.1.31.1.1.1.18.2 = STRING: "" # ifAlias
snmp_exporter
이 모든 데이터를 다음과 같이 결합합니다.
ifHCOutOctets{ifAlias="",ifDescr="eth0",ifIndex="2",ifName="eth0"} 1000
snmp_exporter
의 단일 인스턴스는 수천 개의 장치에 대해 실행될 수 있습니다.
바이너리는 Github 릴리스 페이지에서 다운로드할 수 있으며 특별한 설치가 필요하지 않습니다.
또한 샘플 시스템 단위 파일도 제공합니다.
snmp_exporter
데몬으로 시작하거나 CLI에서 시작합니다.
./snmp_exporter
http://localhost:9116/snmp?target=192.0.0.8을 방문하세요. 여기서 192.0.0.8
메트릭을 가져올 SNMP 장치의 IP 또는 FQDN입니다. 이는 기본 전송( udp
), 기본 포트( 161
), 기본 인증( public_v2
) 및 기본 모듈( if_mib
)을 사용합니다. 인증 및 모듈은 snmp.yml
파일에 정의되어야 합니다.
예를 들어, ddwrt
실행을 위해 my_secure_v3
이라는 인증이 있는 경우 URL은 http://localhost:9116/snmp?auth=my_secure_v3&module=ddwrt&target=192.0.0.8과 같습니다.
다른 전송 및/또는 포트를 구성하려면 [transport://]host[:port]
구문을 사용하십시오.
예를 들어 포트 1161
에서 tcp
사용하여 장치를 스크래핑하려면 URL은 http://localhost:9116/snmp?auth=my_secure_v3&module=ddwrt&target=tcp%3A%2F%2F192.0.0.8%3A1161과 같습니다.
:
및 /
문자로 인해 target
에는 URL 인코딩을 사용해야 합니다. Prometheus는 쿼리 매개변수를 자동으로 인코딩하며 Prometheus 구성 파일 내에서는 수동 인코딩이 필요하지 않습니다.
내보내기 자체의 작업과 관련된 메트릭은 엔드포인트 http://localhost:9116/metrics에서 확인할 수 있습니다.
다음과 같이 URL에 선택적 snmp_context
매개변수를 제공할 수 있습니다. http://localhost:9116/snmp?auth=my_secure_v3&module=ddwrt&target=192.0.0.8&snmp_context=vrf-mgmt URL의 snmp_context
매개변수는 context_name
재정의합니다. snmp.yml
파일의 매개변수입니다.
다중 모듈 기능을 사용하면 여러 모듈을 지정할 수 있으므로 단일 스크랩으로 여러 모듈에서 정보를 검색할 수 있습니다. 동시성은 snmp-exporter 옵션 --snmp.module-concurrency
(기본값은 1)를 사용하여 지정할 수 있습니다.
참고: 이 구현은 서로 다른 모듈 간의 이동 중복 제거를 수행하지 않습니다.
여러 모듈을 지정하는 방법에는 두 가지가 있습니다. 쉼표로 구분하거나 여러 params_module을 정의할 수 있습니다. URL은 다음과 같습니다.
쉼표로 구분하려면 다음을 수행하세요.
http://localhost:9116/snmp?module=if_mib,arista_sw&target=192.0.0.8
여러 params_module의 경우:
http://localhost:9116/snmp?module=if_mib&module=arista_sw&target=192.0.0.8
기본 구성 파일 이름은 snmp.yml
이며 직접 편집하면 안 됩니다. 변경해야 하는 경우 구성 생성을 참조하세요.
기본 snmp.yml
파일은 SNMP v2 GETBULK를 사용하여 이를 탐색하는 다양한 일반 하드웨어를 다룹니다.
--config.file
매개변수는 두 개 이상의 파일을 로드하기 위해 여러 번 사용될 수 있습니다. 또한 snmp*.yml
과 같은 glob 파일 이름 일치도 지원합니다.
--config.expand-environment-variables
매개변수를 사용하면 환경 변수를 구성 파일의 일부 필드에 전달할 수 있습니다. 인증 섹션의 username
, password
및 priv_password
필드가 지원됩니다. 기본값은 비활성화입니다.
중복된 module
또는 auth
항목은 유효하지 않은 것으로 간주되어 로드할 수 없습니다.
URL 매개변수 target
, auth
및 module
레이블 재지정을 통해 제어할 수 있습니다.
예시 구성:
scrape_configs :
- job_name : ' snmp '
static_configs :
- targets :
- 192.168.1.2 # SNMP device.
- switch.local # SNMP device.
- tcp://192.168.1.3:1161 # SNMP device using TCP transport and custom port.
metrics_path : /snmp
params :
auth : [public_v2]
module : [if_mib]
relabel_configs :
- source_labels : [__address__]
target_label : __param_target
- source_labels : [__param_target]
target_label : instance
- target_label : __address__
replacement : 127.0.0.1:9116 # The SNMP exporter's real hostname:port.
# Global exporter-level metrics
- job_name : ' snmp_exporter '
static_configs :
- targets : ['localhost:9116']
아래 형식으로 원하는 환경 변수를 통해 username
, password
및 priv_password
전달할 수 있습니다. 환경에 변수가 있으면 즉시 해결됩니다. 그렇지 않으면 구성 파일의 문자열이 있는 그대로 전달됩니다.
이를 위해서는 --config.expand-environment-variables
플래그를 설정해야 합니다.
auths :
example_with_envs :
community : mysecret
security_level : SomethingReadOnly
username : ${ARISTA_USERNAME}
password : ${ARISTA_PASSWORD}
auth_protocol : SHA256
priv_protocol : AES
priv_password : ${ARISTA_PRIV_PASSWORD}
blackbox_exporter와 마찬가지로 snmp_exporter
몇 개의 중앙 시스템에서 실행되도록 고안되었으며 "Prometheus 프록시"처럼 생각할 수 있습니다.
SNMP 내보내기는 TLS 및 기본 인증을 지원합니다. 이를 통해 다양한 HTTP 엔드포인트를 더 효과적으로 제어할 수 있습니다.
TLS 및/또는 기본 인증을 사용하려면 --web.config.file
매개변수를 사용하여 구성 파일을 전달해야 합니다. 파일 형식은 내보내기 툴킷 저장소에 설명되어 있습니다.
TLS 및 기본 인증 설정은 모든 HTTP 엔드포인트(스크래핑의 경우 /metrics, SNMP 장치 스크래핑의 경우 /snmp 및 웹 UI)에 영향을 미칩니다.
대부분의 사용 사례는 기본 구성으로 처리되어야 합니다. MIB에서 자체 구성을 생성해야 하는 경우 생성기를 사용할 수 있습니다.
탐색할 객체를 사용자 정의해야 하거나 비공개 MIB를 사용해야 하는 경우 생성기를 사용하십시오.
큰 Counter64 값에 대한 정확한 카운터를 제공하기 위해 내보내기는 64비트 부동 소수점 반올림을 방지하기 위해 2^53마다 자동으로 값을 래핑합니다. Prometheus는 이를 우아하게 처리하므로 부정적인 영향은 전혀 느끼지 못할 것입니다.
Prometheus가 아닌 시스템에 대해 이 기능을 비활성화해야 하는 경우 명령줄 플래그 --no-snmp.wrap-large-counters
사용하십시오.
이 모든 것을 시작하는 것이 불투명할 수 있지만 경험상 snmp_exporter는 솔직히 SNMP와 상호 작용하는 가장 좋은 방법입니다. 다른 사람들이 더 쉽게 사용할 수 있도록 귀하의 구성을 우리에게 다시 제공하는 것을 고려해 보십시오. snmp.yml
구성은 생성기 구성과 함께 제공되어야 합니다. 대시보드, 경고 및 기록 규칙의 경우 https://github.com/prometheus/snmp_exporter/tree/main/snmp-mixin에 기여해 보세요.