Eksportir ini adalah cara yang disarankan untuk mengekspos data SNMP dalam format yang dapat diserap oleh Prometheus.
Untuk memulai, disarankan untuk menggunakan modul if_mib
dengan switch, titik akses, atau router menggunakan modul autentikasi public_v2
, yang seharusnya merupakan komunitas akses hanya-baca pada perangkat target.
Catatan, string komunitas di SNMP tidak dianggap rahasia, karena dikirim tidak terenkripsi di SNMP v1 dan v2c. Untuk akses aman, diperlukan SNMP v3.
Meskipun SNMP menggunakan struktur data hierarki dan Prometheus menggunakan matriks n-dimensi, kedua sistem memetakan dengan sempurna, dan tanpa perlu menelusuri data dengan tangan. snmp_exporter
memetakan data untuk Anda.
Prometheus dapat memetakan contoh indeks SNMP ke label. Misalnya, ifEntry
menentukan INDEX dari ifIndex
. Ini menjadi label ifIndex
di Prometheus.
Jika entri SNMP memiliki beberapa nilai indeks, setiap nilai dipetakan ke label Prometheus terpisah.
SNMP disusun dalam pohon OID, dijelaskan oleh MIB. Subpohon OID memiliki urutan yang sama di berbagai lokasi berbeda di pohon. Urutan di bawah 1.3.6.1.2.1.2.2.1.1
( ifIndex
) sama dengan di 1.3.6.1.2.1.2.2.1.2
( ifDescr
), 1.3.6.1.2.1.31.1.1.1.10
( ifHCOutOctets
), dll. Nomornya adalah OID, nama dalam tanda kurung adalah nama dari a MIB, dalam hal ini IF-MIB.
Mengingat perangkat dengan antarmuka di nomor 2, sebagian snmpwalk
kembali terlihat seperti:
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
menggabungkan semua data ini menjadi:
ifHCOutOctets{ifAlias="",ifDescr="eth0",ifIndex="2",ifName="eth0"} 1000
Satu contoh snmp_exporter
dapat dijalankan untuk ribuan perangkat.
Biner dapat diunduh dari halaman rilis Github dan tidak memerlukan instalasi khusus.
Kami juga menyediakan contoh file unit systemd.
Mulai snmp_exporter
sebagai daemon atau dari CLI:
./snmp_exporter
Kunjungi http://localhost:9116/snmp?target=192.0.0.8 di mana 192.0.0.8
adalah IP atau FQDN perangkat SNMP untuk mendapatkan metrik. Perhatikan bahwa ini akan menggunakan transport default ( udp
), port default ( 161
), auth default ( public_v2
) dan modul default ( if_mib
). Auth dan modul harus didefinisikan dalam file snmp.yml
.
Misalnya, jika Anda memiliki autentikasi bernama my_secure_v3
untuk berjalan ddwrt
, URL-nya akan terlihat seperti http://localhost:9116/snmp?auth=my_secure_v3&module=ddwrt&target=192.0.0.8.
Untuk mengonfigurasi transport dan/atau port yang berbeda, gunakan sintaksis [transport://]host[:port]
.
Misalnya, untuk mengikis perangkat menggunakan tcp
pada port 1161
, URL akan terlihat seperti http://localhost:9116/snmp?auth=my_secure_v3&module=ddwrt&target=tcp%3A%2F%2F192.0.0.8%3A1161.
Perhatikan bahwa pengkodean URL harus digunakan untuk target
karena karakter :
dan /
. Prometheus mengkodekan parameter kueri secara otomatis dan pengkodean manual tidak diperlukan dalam file konfigurasi Prometheus.
Metrik mengenai pengoperasian eksportir itu sendiri tersedia di titik akhir http://localhost:9116/metrics.
Dimungkinkan untuk menyediakan parameter snmp_context
opsional di URL, seperti ini: http://localhost:9116/snmp?auth=my_secure_v3&module=ddwrt&target=192.0.0.8&snmp_context=vrf-mgmt Parameter snmp_context
di URL akan menggantikan context_name
parameter dalam file snmp.yml
.
Fungsionalitas multi-modul memungkinkan Anda menentukan beberapa modul, memungkinkan pengambilan informasi dari beberapa modul dalam satu goresan. Konkurensi dapat ditentukan menggunakan opsi snmp-exporter --snmp.module-concurrency
(defaultnya adalah 1).
Catatan: Implementasi ini tidak melakukan de-duplikasi jalan antar modul yang berbeda.
Ada dua cara untuk menentukan beberapa modul. Anda dapat memisahkannya dengan koma atau menentukan beberapa params_module. URL-nya akan terlihat seperti ini:
Untuk pemisahan koma:
http://localhost:9116/snmp?module=if_mib,arista_sw&target=192.0.0.8
Untuk beberapa params_module:
http://localhost:9116/snmp?module=if_mib&module=arista_sw&target=192.0.0.8
Nama file konfigurasi default adalah snmp.yml
dan tidak boleh diedit secara manual. Jika Anda perlu mengubahnya, lihat Membuat konfigurasi.
File snmp.yml
default mencakup berbagai perangkat keras umum yang menjalankannya menggunakan SNMP v2 GETBULK.
Parameter --config.file
dapat digunakan beberapa kali untuk memuat lebih dari satu file. Ini juga mendukung pencocokan nama file glob, misalnya snmp*.yml
.
Parameter --config.expand-environment-variables
memungkinkan meneruskan variabel lingkungan ke beberapa bidang file konfigurasi. Bidang username
, password
& priv_password
di bagian autentikasi didukung. Defaultnya adalah dinonaktifkan.
module
duplikat atau entri auth
dianggap tidak valid dan tidak dapat dimuat.
Parameter URL target
, auth
, dan module
dapat dikontrol melalui pelabelan ulang.
Contoh konfigurasi:
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']
Anda dapat meneruskan username
, password
& priv_password
melalui variabel lingkungan pilihan Anda dalam format di bawah ini. Jika variabel ada di lingkungan, variabel tersebut diselesaikan dengan cepat jika tidak, string dalam file konfigurasi akan diteruskan apa adanya.
Hal ini mengharuskan flag --config.expand-environment-variables
disetel.
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}
Mirip dengan blackbox_exporter, snmp_exporter
dimaksudkan untuk berjalan di beberapa mesin pusat dan dapat dianggap seperti "proxy Prometheus".
Eksportir SNMP mendukung TLS dan otentikasi dasar. Hal ini memungkinkan kontrol yang lebih baik terhadap berbagai titik akhir HTTP.
Untuk menggunakan TLS dan/atau autentikasi dasar, Anda perlu meneruskan file konfigurasi menggunakan parameter --web.config.file
. Format file dijelaskan dalam repositori toolkit eksportir.
Perhatikan bahwa pengaturan TLS dan autentikasi dasar memengaruhi semua titik akhir HTTP: /metrics untuk scraping, /snmp untuk scraping perangkat SNMP, dan UI web.
Sebagian besar kasus penggunaan harus dicakup oleh konfigurasi default kami. Jika Anda perlu membuat konfigurasi sendiri dari MIB, Anda dapat menggunakan generator.
Gunakan generator jika Anda perlu menyesuaikan objek mana yang dilalui atau menggunakan MIB non-publik.
Untuk memberikan penghitung yang akurat untuk nilai Counter64 yang besar, eksportir akan secara otomatis menggabungkan nilai setiap 2^53 untuk menghindari pembulatan float 64-bit. Prometheus menangani ini dengan baik untuk Anda dan Anda tidak akan melihat efek negatif apa pun.
Jika Anda perlu menonaktifkan fitur ini untuk sistem non-Prometheus, gunakan tanda baris perintah --no-snmp.wrap-large-counters
.
Mungkin tidak jelas untuk memulai semua ini, tetapi menurut pengalaman kami, snmp_exporter sejujurnya adalah cara terbaik untuk berinteraksi dengan SNMP. Untuk memudahkan orang lain, harap pertimbangkan untuk menyumbangkan kembali konfigurasi Anda kepada kami. Konfigurasi snmp.yml
harus disertai dengan konfigurasi generator. Untuk dasbor, peringatan, dan aturan pencatatan Anda, harap pertimbangkan untuk menyumbangkannya ke https://github.com/prometheus/snmp_exporter/tree/main/snmp-mixin.