يعد هذا المصدر هو الطريقة الموصى بها لعرض بيانات 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، الموصوفة بواسطة MIBs. تتمتع الأشجار الفرعية لمعرفات الكائنات (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
) وما إلى ذلك. الأرقام هي معرفات الكائنات (OIDs)، والأسماء الموجودة بين قوسين هي الأسماء من 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.
ابدأ تشغيل snmp_exporter
كبرنامج خفي أو من 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
عدة مرات لتحميل أكثر من ملف واحد. كما أنه يدعم مطابقة اسم الملف الشامل، على سبيل المثال 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 proxy".
يدعم مُصدِّر SNMP TLS والمصادقة الأساسية. يتيح ذلك تحكمًا أفضل في نقاط نهاية HTTP المختلفة.
لاستخدام TLS و/أو المصادقة الأساسية، تحتاج إلى تمرير ملف التكوين باستخدام المعلمة --web.config.file
. تم توضيح تنسيق الملف في مستودع أدوات التصدير.
لاحظ أن إعدادات TLS والمصادقة الأساسية تؤثر على جميع نقاط نهاية HTTP: /metrics للاستخراج، و/snmp لاستخراج أجهزة SNMP، وواجهة مستخدم الويب.
ينبغي تغطية معظم حالات الاستخدام من خلال التكوين الافتراضي الخاص بنا. إذا كنت بحاجة إلى إنشاء التكوين الخاص بك من MIBs، فيمكنك استخدام المولد.
استخدم المولد إذا كنت بحاجة إلى تخصيص الكائنات التي يتم السير عليها أو استخدام MIBs غير العامة.
من أجل توفير عدادات دقيقة لقيم Counter64 الكبيرة، سيقوم المصدر تلقائيًا بتغليف القيمة كل 2^53 لتجنب التقريب العائم 64 بت. يتعامل بروميثيوس مع هذا الأمر بأمان ولن تلاحظ أي آثار سلبية.
إذا كنت بحاجة إلى تعطيل هذه الميزة لأنظمة غير Prometheus، فاستخدم علامة سطر الأوامر --no-snmp.wrap-large-counters
.
قد يكون من غير الواضح البدء بكل هذا، ولكن من خلال تجربتنا الخاصة، فإن snmp_exporter هو بصراحة أفضل طريقة للتفاعل مع SNMP. لتسهيل الأمر على الآخرين، يرجى التفكير في المساهمة بتكويناتك لنا. يجب أن يكون تكوين snmp.yml
مصحوبًا بتكوين المولد. بالنسبة إلى لوحة المعلومات والتنبيهات وقواعد التسجيل، يرجى التفكير في المساهمة بها على https://github.com/prometheus/snmp_exporter/tree/main/snmp-mixin.