Παρακολούθηση δικτύου ESPHome
Το ESPHome είναι ένα δημοφιλές σύστημα για τον έλεγχο συσκευών Espressif ESP8266 και ESP32. Αυτό το άρθρο περιγράφει πώς να παρακολουθείτε πολλές συσκευές χρησιμοποιώντας ένα προσαρμοσμένο στοιχείο SNMP του ESPHome και ένα δημοφιλές εργαλείο παρακολούθησης δικτύου.
Χάρη σε αυτό, μπορείτε να ανιχνεύσετε και να ενημερωθείτε για ανώμαλες συμπεριφορές των συσκευών σας, όπως επανεκκινήσεις, χαμηλό σήμα Wi-Fi ή έλλειψη ελεύθερης μνήμης.
Το SNMP υποστηρίζεται από πολλές εφαρμογές, αλλά αυτό το άρθρο συζητά την ενσωμάτωση με το εργαλείο ανοιχτού κώδικα Zabbix. Υποτίθεται ότι έχετε εγκατεστημένο και σε λειτουργία το Zabbix έκδοσης 6.4.
INFO
Ο οδηγός εγκατάστασης του Zabbix είναι διαθέσιμος στη σελίδα του Zabbix: https://www.zabbix.com/download
Στοιχείο SNMP
Το ESPHome δεν υποστηρίζει το SNMP από προεπιλογή. Αλλά παρέχει έναν εύκολο τρόπο ενσωμάτωσης με εξωτερικά στοιχεία.
Για να προσθέσετε το πρωτόκολλο SNMP στη συσκευή ESPHome, ανατρέξτε στο στοιχείο SNMP που βρίσκεται στο https://github.com/aquaticus/esphome-snmp.
Προσθέστε τον ακόλουθο κώδικα στο αρχείο διαμόρφωσης YAML του ESPHome:
yaml
# Enable SNMP component
snmp:
# Retrieve SNMP component from github
external_components:
- source: github://aquaticus/esphome-snmp
Όταν φορτωθεί σε μια πλακέτα, θα πρέπει να δείτε το ακόλουθο μήνυμα στο αρχείο καταγραφής:
log
[00:00:00][C][snmp:268]: SNMP Config:
[00:00:00][C][snmp:269]: Contact: ""
[00:00:00][C][snmp:270]: Location: ""
Δοκιμή SNMP
Τώρα μπορείτε να προσπαθήσετε να ανακτήσετε κάποιες πληροφορίες από την πλακέτα. Υπάρχουν πολλά προγράμματα που μπορούν να περιηγηθούν στα δεδομένα SNMP. Εδώ είναι μερικά παραδείγματα:
Windows
- MIB Browser https://www.ireasoning.com/mibbrowser.shtml
- Paessler SNMP Monitor https://www.paessler.com/snmp_monitor
Linux
Εδώ είναι ένας δείγμα κώδικα για χρήση στο Linux. Αντικαταστήστε τη διεύθυνση IP 192.168.1.10
με μια τιμή που να ταιριάζει με τη διεύθυνση της πλακέτας σας.
bash
snmpget -v2c -c public 192.168.1.10 1.3.6.1.2.1.1.1.0
Το αποτέλεσμα του παραπάνω ερωτήματος μοιάζει με το παρακάτω. Είναι μια περιγραφή του συστήματος. Είναι το αντικείμενο SMTP sysDescr
που μεταφράζεται στο αντικείμενο ID 1.3.6.1.2.1.1.1.0
.
log
iso.3.6.1.2.1.1.1.0 = STRING: "ESPHome version 2023.3.2 compiled Mar 29 2023, 00:00:01, Board wemos_d1_mini32”
Μπορείτε προαιρετικά να προσπαθήσετε να λάβετε το χρόνο λειτουργίας του συστήματος.
bash
snmpget -v2c -c public 192.168.1.10 1.3.6.1.2.1.25.1.1.0
Το αποτέλεσμα:
log
iso.3.6.1.2.1.25.1.1.0 = Timeticks: (66281) 0:11:02.81
Η τιμή των χρονικών στιγμών αλλάζει συνεχώς. Κάθε κλήση σας δίνει διαφορετικό αριθμό.
Για μια λίστα όλων των αντικειμένων που παρέχονται από το στοιχείο SNMP, δείτε την τεκμηρίωση του στοιχείου.
Πρότυπα
Κατεβάστε το αρχείο προτύπου από: https://github.com/aquaticus/esphome_zabbix_templates
Αποτελείται από 3 πρότυπα:
- Esphome by SNMP - βασικό πρότυπο
- Esphome ESP32 by SNMP - πρότυπο για συσκευές ESP32 (συμπεριλαμβανομένων των C3, S2 κ.λπ.)
- Esphome ESP8266 by SNMP - πρότυπο για ESP8266
Η κύρια διαφορά μεταξύ των προτύπων ESP8266 και ESP32 είναι τα δεδομένα heap.
Εισάγετε το αρχείο προτύπου κάνοντας κλικ στο κουμπί Import στη συλλογή δεδομένων→Πρότυπα.
Hosts
Ανοίξτε τη διεπαφή Zabbix και μεταβείτε στην Παρακολούθηση→Hosts. Κάντε κλικ στο Create host στην επάνω δεξιά γωνία.
- Ως πρότυπο επιλέξτε Esphome ESP32 by SNMP ή Esphome ESP8266 by SNMP
- Προσθέστε
SNMP
διεπαφή. - Συμπληρώστε τα πεδία IP ή DNS
- Αφήστε τα υπόλοιπα πεδία με τις προεπιλεγμένες τιμές.
- Στο τέλος κάντε κλικ στο κουμπί
Add
.
Στη λίστα των παρακολουθούμενων hosts (Παρακολούθηση→Hosts) θα πρέπει να δείτε μια νέα καταχώρηση.
Θα υπάρχει ένα εικονίδιο SNMP στη στήλη Διαθεσιμότητα. Αρχικά, θα είναι γκρι, αλλά μετά από μερικά δευτερόλεπτα θα πρέπει να γίνει πράσινο.
Παρακολούθηση
Μόλις δείτε το πράσινο εικονίδιο, μπορείτε να εξετάσετε τα δεδομένα SNMP.
Αν κάνετε κλικ στο σύνδεσμο Latest data, θα δείτε τη λίστα των συλλεγμένων στοιχείων.
Συναγερμοί
Το Zabbix μπορεί να ανιχνεύσει αυτόματα ανώμαλες καταστάσεις. Στην ορολογία του Zabbix, αυτό ονομάζεται "Trigger". Το πρότυπο ESPHome περιλαμβάνει triggers που ανιχνεύουν τυπικά προβλήματα, για παράδειγμα, η πλακέτα επαναρυθμίστηκε. Για μια λίστα με τα διαθέσιμα triggers, επιλέξτε Triggers
από το μενού όταν κάνετε κλικ στο όνομα του host.
Ακολουθεί μια προεπιλεγμένη λίστα triggers:
- Το firmware έχει αλλάξει
- Υψηλή απώλεια ICMP ping
- Υψηλός χρόνος απόκρισης ICMP ping
- Μη διαθέσιμο από ICMP ping
- Ο host έχει επανεκκινηθεί
- Δεν υπάρχει συλλογή δεδομένων SNMP
- Το όνομα του συστήματος έχει αλλάξει
- Αδύναμο σήμα WiFi για 5 λεπτά
- Η σύνδεση WiFi χάθηκε
Μπορείτε επίσης να δημιουργήσετε τις δικές σας ενεργοποιήσεις, για παράδειγμα, για να παρακολουθείτε τη χρήση της μνήμης heap.
Διαθεσιμότητα δικτύου
Το SNMP Component μπορεί να παρέχει τη διαθεσιμότητα δικτύου (αντικείμενο SNMP sysUpTime1.3.6.1.2.1.1.3
). Αυτή η παράμετρος είναι κρίσιμη για την ανίχνευση γεγονότων απώλειας σύνδεσης.
Δυστυχώς, το ESPHome WiFi component δεν παρέχει αυτή την πληροφορία. Εξαιτίας αυτού, από προεπιλογή το SNMP Component αναφέρει πάντα το sysUpTime
ως 0.
Για να λάβετε ουσιαστικά δεδομένα, πρέπει να τροποποιήσετε το αρχικό WiFi component και να προσθέσετε μία λειτουργία.
Μπορείτε να το κάνετε χειροκίνητα ή να χρησιμοποιήσετε το ήδη τροποποιημένο από το αποθετήριο.
Χειροκίνητη τροποποίηση του WiFi component
Κλωνοποιήστε και εγκαταστήστε το ESPHome από το github.
Επεξεργαστείτε δύο αρχεία wifi_component.cpp
και wifi_component.h
στον κατάλογο esphome/components/wifi
.
Στη γραμμή 282 του wifi_component.h
προσθέστε δύο γραμμές (μπορεί να είναι οπουδήποτε στη δημόσια ενότητα):
cpp
#define WIFI_CONNECTED_TIMESTAMP_AVAILABLE
uint32_t wifi_connected_timestamp() {return connected_timestamp_;}
protected:
uint32_t connected_timestamp_{0};
Στο wifi_component.cpp
προσθέστε στη γραμμή 518 ακριβώς πριν από το μήνυμα καταγραφής "WiFi Connected":
cpp
this->connected_timestamp_ = millis();
Δοκιμή διαθεσιμότητας δικτύου
Συγκεντρώστε και ανεβάστε το νέο firmware.
Τώρα, όταν διαβάζετε το αντικείμενο sysUpTime 1.3.6.1.2.1.1.3
, θα πρέπει να λαμβάνετε διαφορετικές τιμές κάθε φορά που εκτελείται η λειτουργία λήψης.
bash
snmpget -v2c -c public 192.168.1.10 1.3.6.1.2.1.1.3.0
Θα πρέπει να δείτε μια τιμή διαφορετική από το 0.
Λίστα διαθέσιμων OIDs
Για να δείτε μια πλήρη λίστα αντικειμένων που παρέχονται από το ESPHome SNMP Component, δείτε Λίστα OID