ผู้ส่งออกนี้เป็นวิธีที่แนะนำในการเปิดเผยข้อมูล SNMP ในรูปแบบที่ Prometheus สามารถนำเข้าได้
เพื่อเริ่มต้นใช้งาน ขอแนะนำให้ใช้โมดูล if_mib
กับสวิตช์ จุดเข้าใช้งาน หรือเราเตอร์โดยใช้โมดูลการตรวจสอบสิทธิ์ public_v2
ซึ่งควรเป็นชุมชนการเข้าถึงแบบอ่านอย่างเดียวบนอุปกรณ์เป้าหมาย
หมายเหตุ สตริงชุมชนใน SNMP ไม่ถือว่าเป็นความลับ เนื่องจากสตริงเหล่านั้นถูกส่งโดยไม่เข้ารหัสใน SNMP v1 และ v2c เพื่อการเข้าถึงที่ปลอดภัย จำเป็นต้องมี SNMP v3
แม้ว่า SNMP จะใช้โครงสร้างข้อมูลแบบลำดับชั้นและ Prometheus ใช้เมทริกซ์ขนาด n มิติ แต่ทั้งสองระบบจะแมปได้อย่างสมบูรณ์แบบ และไม่จำเป็นต้องเดินผ่านข้อมูลด้วยมือ snmp_exporter
แมปข้อมูลให้กับคุณ
Prometheus สามารถแมปอินสแตนซ์ดัชนี SNMP กับป้ายกำกับได้ ตัวอย่างเช่น ifEntry
ระบุ INDEX ของ ifIndex
สิ่งนี้จะกลายเป็นป้ายกำกับ ifIndex
ใน Prometheus
หากรายการ SNMP มีค่าดัชนีหลายค่า แต่ละค่าจะถูกแมปกับป้ายกำกับ Prometheus ที่แยกจากกัน
SNMP มีโครงสร้างเป็นแผนผัง OID ซึ่งอธิบายโดย MIB แผนผังย่อย 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 และไม่จำเป็นต้องติดตั้งพิเศษ
นอกจากนี้เรายังจัดเตรียมไฟล์ systemd unit ตัวอย่างไว้ด้วย
เริ่มต้น snmp_exporter
เป็น daemon หรือจาก CLI:
./snmp_exporter
ไปที่ http://localhost:9116/snmp?target=192.0.0.8 โดยที่ 192.0.0.8
คือ IP หรือ FQDN ของอุปกรณ์ SNMP ที่จะรับการวัด โปรดทราบว่าสิ่งนี้จะใช้การขนส่งเริ่มต้น ( udp
) พอร์ตเริ่มต้น ( 161
) การรับรองความถูกต้องเริ่มต้น ( public_v2
) และโมดูลเริ่มต้น ( if_mib
) ต้องกำหนดการรับรองความถูกต้องและโมดูลในไฟล์ snmp.yml
ตัวอย่างเช่น หากคุณมีการรับรองความถูกต้องชื่อ my_secure_v3
สำหรับการเดิน ddwrt
URL จะมีลักษณะเป็น http://localhost:9116/snmp?auth=my_secure_v3&module=ddwrt&target=192.0.0.8
หากต้องการกำหนดค่าการขนส่งและ/หรือพอร์ตอื่น ให้ใช้ไวยากรณ์ [transport://]host[:port]
ตัวอย่างเช่น หากต้องการคัดลอกอุปกรณ์โดยใช้ tcp
บนพอร์ต 1161
URL จะมีลักษณะดังนี้ http://localhost:9116/snmp?auth=my_secure_v3&module=ddwrt&target=tcp%3A%2F%2F192.0.0.8%3A1161
โปรดทราบว่าควรใช้การเข้ารหัส URL สำหรับ target
เนื่องจากมีอักขระ :
และ /
Prometheus เข้ารหัสพารามิเตอร์การสืบค้นโดยอัตโนมัติ และการเข้ารหัสด้วยตนเองไม่จำเป็นภายในไฟล์การกำหนดค่า Prometheus
ตัวชี้วัดที่เกี่ยวข้องกับการดำเนินงานของผู้ส่งออกนั้นมีอยู่ที่จุดสิ้นสุด http://localhost:9116/metrics
เป็นไปได้ที่จะระบุพารามิเตอร์เสริม snmp_context
ใน URL เช่นนี้: http://localhost:9116/snmp?auth=my_secure_v3&module=ddwrt&target=192.0.0.8&snmp_context=vrf-mgmt พารามิเตอร์ snmp_context
ใน URL จะแทนที่ 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
สามารถใช้ได้หลายครั้งเพื่อโหลดมากกว่าหนึ่งไฟล์ นอกจากนี้ยังรองรับการจับคู่ชื่อไฟล์ glob เช่น snmp*.yml
พารามิเตอร์ --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 Exporter รองรับ TLS และการตรวจสอบสิทธิ์ขั้นพื้นฐาน ซึ่งช่วยให้สามารถควบคุมจุดสิ้นสุด HTTP ต่างๆ ได้ดียิ่งขึ้น
หากต้องการใช้ TLS และ/หรือการตรวจสอบสิทธิ์ขั้นพื้นฐาน คุณจะต้องส่งไฟล์การกำหนดค่าโดยใช้พารามิเตอร์ --web.config.file
รูปแบบของไฟล์อธิบายไว้ในที่เก็บเครื่องมือผู้ส่งออก
โปรดทราบว่าการตั้งค่า TLS และการตรวจสอบสิทธิ์ขั้นพื้นฐานส่งผลต่อตำแหน่งข้อมูล HTTP ทั้งหมด: /metrics for scraping, /snmp สำหรับการขูดอุปกรณ์ SNMP และ UI ของเว็บ
กรณีการใช้งานส่วนใหญ่ควรครอบคลุมโดยการกำหนดค่าเริ่มต้นของเรา หากคุณต้องการสร้างการกำหนดค่าของคุณเองจาก MIB คุณสามารถใช้ตัวสร้างได้
ใช้ตัวสร้างหากคุณต้องการปรับแต่งวัตถุที่จะเดินหรือใช้ MIB ที่ไม่ใช่แบบสาธารณะ
เพื่อให้มีตัวนับที่แม่นยำสำหรับค่า Counter64 ที่มีขนาดใหญ่ ผู้ส่งออกจะรวมค่าทุกๆ 2^53 โดยอัตโนมัติเพื่อหลีกเลี่ยงการปัดเศษแบบทศนิยม 64 บิต Prometheus จัดการเรื่องนี้ให้คุณอย่างสง่างาม และคุณจะไม่สังเกตเห็นผลเสียใดๆ
หากคุณต้องการปิดใช้งานคุณลักษณะนี้สำหรับระบบที่ไม่ใช่ Prometheus ให้ใช้แฟล็กบรรทัดคำสั่ง --no-snmp.wrap-large-counters
การเริ่มต้นทั้งหมดนี้อาจไม่ชัดเจน แต่จากประสบการณ์ของเราเอง snmp_exporter เป็นวิธีที่ดีที่สุดในการโต้ตอบกับ SNMP เพื่อให้ผู้อื่นง่ายขึ้น โปรดพิจารณาส่งการกำหนดค่าของคุณกลับมาให้เรา การกำหนดค่า snmp.yml
ควรมาพร้อมกับการกำหนดค่าตัวสร้าง สำหรับแดชบอร์ด การแจ้งเตือน และกฎการบันทึกของคุณ โปรดพิจารณาสนับสนุนกฎเหล่านี้ที่ https://github.com/prometheus/snmp_exporter/tree/main/snmp-mixin