{"id":331445,"date":"2022-04-03T21:00:07","date_gmt":"2022-04-03T21:00:07","guid":{"rendered":"http:\/\/savepearlharbor.com\/?p=331445"},"modified":"-0001-11-30T00:00:00","modified_gmt":"-0001-11-29T21:00:00","slug":"","status":"publish","type":"post","link":"https:\/\/savepearlharbor.com\/?p=331445","title":{"rendered":"<span>Unifi prometheus exporter<\/span>"},"content":{"rendered":"<div><\/div>\n<div id=\"post-content-body\">\n<div>\n<div class=\"article-formatted-body article-formatted-body_version-2\">\n<div xmlns=\"http:\/\/www.w3.org\/1999\/xhtml\">\n<p>\u0412\u0441\u0435\u043c \u043f\u0440\u0438\u0432\u0435\u0442! \u041d\u0430 \u0434\u043d\u044f\u0445 \u0437\u0430\u0445\u043e\u0442\u0435\u043b\u043e\u0441\u044c \u0441\u0434\u0435\u043b\u0430\u0442\u044c \u0433\u0440\u0430\u0444\u0438\u043a\u0438 \u043f\u043e \u0432\u0441\u0435\u043c \u043d\u0430\u0448\u0438\u043c \u0442\u043e\u0447\u043a\u0430\u043c \u0434\u043e\u0441\u0442\u0443\u043f\u0430, \u0443 \u043d\u0430\u0441 \u0438\u0445 \u043c\u043d\u043e\u0433\u043e, \u0447\u0430\u0441\u0442\u044c \u043d\u0430 \u0431\u0430\u0437\u0435 Mikrotik \u0438 \u0441 \u043d\u0438\u043c\u0438 \u043d\u0435\u0442 \u043f\u0440\u043e\u0431\u043b\u0435\u043c, \u043e\u043d \u043b\u0435\u0433\u043a\u043e \u043e\u043f\u0440\u0430\u0448\u0438\u0432\u0430\u0435\u0442\u0441\u044f \u043f\u043e SNMP \u0438 \u043e\u0442\u0434\u0430\u0451\u0442 \u0441\u0442\u0430\u0442\u0438\u0441\u0442\u0438\u043a\u0443 \u0441\u0440\u0430\u0437\u0443 \u043f\u043e \u0432\u0441\u0435\u043c \u0442\u043e\u0447\u043a\u0430\u043c, \u0430 \u0432\u043e\u0442 \u0441 Unifi \u0432\u0441\u0451 \u0441\u043b\u043e\u0436\u043d\u0435\u0439, \u043d\u0443\u0436\u043d\u043e \u043e\u043f\u0440\u0430\u0448\u0438\u0432\u0430\u0442\u044c \u043a\u0430\u0436\u0434\u0443\u044e \u0442\u043e\u0447\u043a\u0443 \u0434\u043e\u0441\u0442\u0443\u043f\u0430 \u043e\u0442\u0434\u0435\u043b\u044c\u043d\u043e, \u0430 \u043e\u043d\u0438 \u0443 \u043d\u0430\u0441 \u0438\u043d\u043e\u0433\u0434\u0430 \u043c\u0435\u043d\u044f\u044e\u0442, \u0441\u043e\u043e\u0442\u0432\u0435\u0442\u0441\u0442\u0432\u0435\u043d\u043d\u043e, \u043d\u0443\u0436\u043d\u043e \u043a\u0430\u043a\u043e\u0435-\u0442\u043e \u0440\u0435\u0448\u0435\u043d\u0438\u0435, \u043a\u043e\u0442\u043e\u0440\u043e\u0435 \u0431\u0443\u0434\u0435\u0442 \u043e\u0442\u0441\u043b\u0435\u0436\u0438\u0432\u0430\u0442\u044c \u044d\u0442\u0438 \u0438\u0437\u043c\u0435\u043d\u0435\u043d\u0438\u044f \u0430\u0432\u0442\u043e\u043c\u0430\u0442\u0438\u0447\u0435\u0441\u043a\u0438. \u041d\u0430 \u043f\u0440\u043e\u0441\u0442\u043e\u0440\u0430\u0445 \u0418\u043d\u0442\u0435\u0440\u043d\u0435\u0442 \u043d\u0435 \u043d\u0430\u0448\u043b\u043e\u0441\u044c \u043d\u0438\u0447\u0435\u0433\u043e \u0433\u043e\u0442\u043e\u0432\u043e\u0433\u043e, \u043f\u043e\u044d\u0442\u043e\u043c\u0443 \u0440\u0435\u0448\u0438\u043b\u0438 \u043d\u0430\u043f\u0438\u0441\u0430\u0442\u044c \u043e\u0447\u0435\u0440\u0435\u0434\u043d\u043e\u0439 &#171;\u0432\u0435\u043b\u043e\u0441\u0438\u043f\u0435\u0434&#187;, \u043d\u043e \u0445\u043e\u0442\u0435\u043b\u043e\u0441\u044c \u0441\u0434\u0435\u043b\u0430\u0442\u044c \u043c\u0430\u043a\u0441\u0438\u043c\u0430\u043b\u044c\u043d\u043e \u0441\u043e\u0432\u043c\u0435\u0441\u0442\u0438\u043c\u043e, \u0447\u0442\u043e\u0431\u044b \u044d\u0442\u0438\u043c \u043c\u043e\u0433\u043b\u0438 \u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c\u0441\u044f \u0434\u0440\u0443\u0433\u0438\u0435.<\/p>\n<h2>\u041d\u0430\u0448 \u043f\u043e\u0434\u0445\u043e\u0434<\/h2>\n<p>\u041c\u044b \u0440\u0435\u0448\u0438\u043b\u0438, \u0447\u0442\u043e \u043d\u0430\u043f\u0438\u0448\u0435\u043c \u043f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u0435\/\u0434\u0435\u043c\u043e\u043d, \u043a\u043e\u0442\u043e\u0440\u043e\u0435 \u043c\u043e\u0436\u0435\u0442 \u0430\u0432\u0442\u043e\u0440\u0438\u0437\u043e\u0432\u0430\u0442\u044c\u0441\u044f \u0432 \u043a\u043e\u043d\u0442\u0440\u043e\u043b\u043b\u0435\u0440\u0435 Unifi, \u043f\u043e\u043b\u0443\u0447\u0438\u0442\u044c \u0441\u043f\u0438\u0441\u043e\u043a \u0442\u043e\u0447\u0435\u043a \u0434\u043e\u0441\u0442\u0443\u043f\u0430, \u0430 \u0434\u0430\u043b\u044c\u0448\u0435 \u043f\u043e \u0437\u0430\u043f\u0440\u043e\u0441\u0443 \u0432 \u0440\u0443\u0447\u043a\u0443 \/metrics \u0431\u0443\u0434\u0435\u0442 \u043e\u0431\u0440\u0430\u0449\u0430\u0442\u044c\u0441\u044f \u043a\u043e \u0432\u0441\u0435\u043c \u0442\u043e\u0447\u043a\u0430\u043c \u0434\u043e\u0441\u0442\u0443\u043f\u0430 \u043f\u043e snmp \u0438 \u043e\u0442\u0434\u0430\u0432\u0430\u0442\u044c \u0440\u0435\u0437\u0443\u043b\u044c\u0442\u0430\u0442 \u043d\u0430\u0440\u0443\u0436\u0443 \u0432 \u0444\u043e\u0440\u043c\u0430\u0442\u0435 prometheus<\/p>\n<h2>\u0420\u0435\u0430\u043b\u0438\u0437\u0430\u0446\u0438\u044f<\/h2>\n<p>\u041f\u043e\u0434\u0440\u043e\u0431\u043d\u043e \u043e\u0441\u0442\u0430\u043d\u0430\u0432\u043b\u0438\u0432\u0430\u0442\u044c\u0441\u044f \u043d\u0430 \u0434\u0435\u0442\u0430\u043b\u044f\u0445 \u0440\u0435\u0430\u043b\u0438\u0437\u0430\u0446\u0438\u0438 \u043f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u044f \u043d\u0435 \u0431\u0443\u0434\u0443, \u0432\u0441\u0451 \u0437\u0430\u043b\u0438\u043b <a href=\"https:\/\/github.com\/maetx777\/unifi-prometheus-exporter\" rel=\"noopener noreferrer nofollow\">\u043d\u0430 github<\/a> \u0438 \u043f\u043e\u0434\u0440\u043e\u0431\u043d\u043e \u0437\u0430\u0434\u043e\u043a\u0443\u043c\u0435\u043d\u0442\u0438\u0440\u043e\u0432\u0430\u043b. \u0415\u0441\u0442\u044c \u0442\u0430\u043a\u0436\u0435 <a href=\"https:\/\/hub.docker.com\/r\/maetx777\/unifi-prometheus-exporter\" rel=\"noopener noreferrer nofollow\">docker-\u043e\u0431\u0440\u0430\u0437<\/a>.<\/p>\n<p>\u041e\u043f\u0438\u0448\u0443 \u043d\u0435\u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u043f\u043e\u0434\u0445\u043e\u0434\u044b, \u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u0431\u044b\u043b\u0438 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043d\u044b:<\/p>\n<ul>\n<li>\n<p>\u044f\u0437\u044b\u043a \u0440\u0430\u0437\u0440\u0430\u0431\u043e\u0442\u043a\u0438 <a href=\"https:\/\/go.dev\/\" rel=\"noopener noreferrer nofollow\">Golang <\/a><\/p>\n<\/li>\n<li>\n<p>\u0434\u043b\u044f \u043e\u0431\u0440\u0430\u0431\u043e\u0442\u043a\u0438 cli-\u0430\u0440\u0433\u0443\u043c\u0435\u043d\u0442\u043e\u0432 \u0438 \u043f\u0435\u0440\u0435\u043c\u0435\u043d\u043d\u044b\u0445 \u043e\u043a\u0440\u0443\u0436\u0435\u043d\u0438\u044f \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043d \u0444\u0440\u0435\u0439\u043c\u0432\u043e\u0440\u043a <a href=\"https:\/\/github.com\/urfave\/cli\" rel=\"noopener noreferrer nofollow\">urfave\/cli\/v2<\/a><\/p>\n<\/li>\n<li>\n<p>\u0432 \u043a\u0430\u0447\u0435\u0441\u0442\u0432\u0435 \u0440\u043e\u0443\u0442\u0435\u0440\u0430 http-\u0437\u0430\u043f\u0440\u043e\u0441\u043e\u0432 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043b\u0438 <a href=\"https:\/\/github.com\/gorilla\/mux\" rel=\"noopener noreferrer nofollow\">gorilla\/mux<\/a><\/p>\n<\/li>\n<li>\n<p>\u0434\u043b\u044f \u043e\u0433\u0440\u0430\u043d\u0438\u0447\u0435\u043d\u0438\u044f \u043e\u0434\u043d\u043e\u0432\u0440\u0435\u043c\u0435\u043d\u043d\u043e\u0433\u043e \u043e\u043f\u0440\u043e\u0441\u0430 \u0442\u043e\u0447\u0435\u043a \u0434\u043e\u0441\u0442\u0443\u043f\u0430 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043d \u043f\u0440\u0438\u043c\u0438\u0442\u0438\u0432 \u0441\u0438\u043d\u0445\u0440\u043e\u043d\u0438\u0437\u0430\u0446\u0438\u0438 &#171;<a href=\"https:\/\/ru.wikipedia.org\/wiki\/%D0%A1%D0%B5%D0%BC%D0%B0%D1%84%D0%BE%D1%80_(%D0%BF%D1%80%D0%BE%D0%B3%D1%80%D0%B0%D0%BC%D0%BC%D0%B8%D1%80%D0%BE%D0%B2%D0%B0%D0%BD%D0%B8%D0%B5)\" rel=\"noopener noreferrer nofollow\">\u0441\u0435\u043c\u0430\u0444\u043e\u0440<\/a>&#171;<\/p>\n<\/li>\n<li>\n<p>\u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043b\u0438 <a href=\"https:\/\/ru.wikipedia.org\/wiki\/%D0%9C%D1%8C%D1%8E%D1%82%D0%B5%D0%BA%D1%81\" rel=\"noopener noreferrer nofollow\">mutex<\/a> \u0434\u043b\u044f \u0441\u0438\u043d\u0445\u0440\u043e\u043d\u0438\u0437\u0430\u0446\u0438\u0438 \u0441\u043f\u0438\u0441\u043a\u0430 \u0442\u043e\u0447\u0435\u043a \u0434\u043e\u0441\u0442\u0443\u043f\u0430 \u043c\u0435\u0436\u0434\u0443 \u0433\u043e\u0440\u0443\u0442\u0438\u043d\u0430\u043c\u0438<\/p>\n<\/li>\n<li>\n<p>\u0434\u043b\u044f \u043e\u043f\u0440\u043e\u0441\u0430 \u0442\u043e\u0447\u0435\u043a \u0434\u043e\u0441\u0442\u0443\u043f\u0430 \u043f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u0435 \u043e\u0431\u0440\u0430\u0449\u0430\u0435\u0442\u0441\u044f \u043a \u0441\u0442\u043e\u0440\u043e\u043d\u043d\u0435\u0439 \u0440\u0435\u0430\u043b\u0438\u0437\u0430\u0446\u0438\u0438 <a href=\"https:\/\/github.com\/prometheus\/snmp_exporter\" rel=\"noopener noreferrer nofollow\">snmp-exporter<\/a><\/p>\n<\/li>\n<\/ul>\n<h2>\u041d\u0430\u0441\u0442\u0440\u043e\u0439\u043a\u0430 \u043e\u043a\u0440\u0443\u0436\u0435\u043d\u0438\u044f<\/h2>\n<p>\u041d\u0430\u043c \u043d\u0443\u0436\u043d\u043e \u043d\u0430\u0441\u0442\u0440\u043e\u0438\u0442\u044c \u0434\u0432\u0435 \u043f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u044c\u043a\u0438:<\/p>\n<ul>\n<li>\n<p>snmp-exporter &#8212; \u0434\u0435\u043c\u043e\u043d, \u0432 \u043a\u043e\u0442\u043e\u0440\u043e\u0433\u043e \u043c\u044b \u0431\u0443\u0434\u0435\u043c \u043e\u0431\u0440\u0430\u0449\u0430\u0442\u044c\u0441\u044f \u0438\u0437 \u043d\u0430\u0448\u0435\u0439 \u043f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u044c\u043a\u0438<\/p>\n<\/li>\n<li>\n<p>unifi-prometheus-exporter &#8212; \u043d\u0430\u0448\u0430 \u043f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u044c\u043a\u0430<\/p>\n<\/li>\n<\/ul>\n<p>\u042f \u0441\u0440\u0430\u0437\u0443 \u0441\u043a\u0430\u0436\u0443, \u0447\u0442\u043e \u044f \u0447\u0435\u0441\u0442\u043d\u043e \u0437\u0430\u043a\u043e\u043f\u0430\u043b\u0441\u044f \u0432 \u043a\u043e\u0434 snmp-exporter, \u0432 \u043d\u0430\u0434\u0435\u0436\u0434\u0435, \u0447\u0442\u043e \u043c\u043e\u0436\u043d\u043e \u0431\u0443\u0434\u0435\u0442 \u0438\u043c\u043f\u043e\u0440\u0442\u0438\u0440\u043e\u0432\u0430\u0442\u044c \u043a\u043e\u0434 \u0438 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c \u0435\u0433\u043e \u0444\u0443\u043d\u043a\u0446\u0438\u0438 \u043d\u0430\u0442\u0438\u0432\u043d\u043e, \u043d\u043e \u0442\u0430\u043c \u0432\u0441\u0451 \u043d\u0435 \u043e\u0447\u0435\u043d\u044c \u0445\u043e\u0440\u043e\u0448\u043e, \u043a\u043e\u0434 \u043d\u0435 \u043c\u043e\u0434\u0443\u043b\u044c\u043d\u044b\u0439, \u0435\u0433\u043e \u043d\u0435\u043b\u044c\u0437\u044f \u0438\u043c\u043f\u043e\u0440\u0442\u0438\u0440\u043e\u0432\u0430\u0442\u044c, \u043f\u043e\u044d\u0442\u043e\u043c\u0443 \u043f\u0440\u0438\u0434\u0451\u0442\u0441\u044f \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c \u0434\u0432\u0435 \u043f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u044c\u043a\u0438.<\/p>\n<h3>Snmp-exporter<\/h3>\n<p>\u0414\u043b\u044f \u043d\u0430\u0447\u0430\u043b\u0430 \u043d\u0430\u0434\u043e \u0437\u0430\u043f\u0443\u0441\u0442\u0438\u0442\u044c snmp-exporter, \u043a \u043a\u043e\u0442\u043e\u0440\u043e\u043c\u0443 \u043c\u044b \u0431\u0443\u0434\u0435\u043c \u043e\u0431\u0440\u0430\u0449\u0430\u0442\u044c\u0441\u044f \u0434\u043b\u044f \u043e\u043f\u0440\u043e\u0441\u0430 \u043d\u0430\u0448\u0438\u0445 \u0442\u043e\u0447\u0435\u043a \u0434\u043e\u0441\u0442\u0443\u043f\u0430, \u043f\u043e\u043a\u0430\u0436\u0443 \u043a\u0430\u043a \u044d\u0442\u043e \u043c\u043e\u0436\u043d\u043e \u0437\u0430\u043f\u0443\u0441\u0442\u0438\u0442\u044c \u0432 docker-compose \u0438 \u0432 kubernetes. \u0423\u0441\u0442\u0430\u043d\u043e\u0432\u043a\u0443 docker-compose \u0438 kubernetes \u0442\u0443\u0442 \u0440\u0430\u0441\u0441\u043c\u0430\u0442\u0440\u0438\u0432\u0430\u0442\u044c \u043d\u0435 \u0431\u0443\u0434\u0443, \u044d\u0442\u043e \u043d\u0435 \u044f\u0432\u043b\u044f\u0435\u0442\u0441\u044f \u0446\u0435\u043b\u044c\u044e \u0434\u0430\u043d\u043d\u043e\u0433\u043e \u043f\u043e\u0441\u0442\u0430.<\/p>\n<p>\u042d\u043a\u0441\u043f\u043e\u0440\u0442\u0435\u0440 \u0441\u043b\u0443\u0448\u0430\u0435\u0442 \u043d\u0430 \u043f\u043e\u0440\u0442\u0443 9116, \u0447\u0442\u043e\u0431\u044b \u043e\u043f\u0440\u043e\u0441\u0438\u0442\u044c \u0443\u0434\u0430\u043b\u0451\u043d\u043d\u044b\u0439 \u0443\u0437\u0435\u043b \u043f\u043e snmp, \u0434\u043e\u0441\u0442\u0430\u0442\u043e\u0447\u043d\u043e \u043f\u043e\u0441\u043b\u0430\u0442\u044c \u0432 \u044d\u043a\u0441\u043f\u043e\u0440\u0442\u0435\u0440 http-\u0437\u0430\u043f\u0440\u043e\u0441 \u0432 \u0440\u0443\u0447\u043a\u0443 \/snmp c \u043f\u0430\u0440\u0430\u043c\u0435\u0442\u0440\u0430\u043c\u0438 module (\u043f\u043e \u0443\u043c\u043e\u043b\u0447\u0430\u043d\u0438\u044e if_mib) \u0438 target (\u0447\u0442\u043e \u043e\u043f\u0440\u0430\u0448\u0438\u0432\u0430\u0435\u043c), \u043d\u0430\u043f\u0440\u0438\u043c\u0435\u0440:<\/p>\n<pre><code>curl http:\/\/127.0.0.1:9116\/snmp?target=10.0.0.1<\/code><\/pre>\n<h4>docker-compose<\/h4>\n<pre><code>version: \"2\"  services:   nexus:     image: prom\/snmp-exporter     ports:       - \"9116:9116\"<\/code><\/pre>\n<h4>kubernetes<\/h4>\n<pre><code>--- apiVersion: apps\/v1 kind: Deployment metadata:   name: snmp-exporter   labels:     app: snmp-exporter spec:   replicas: 1   selector:     matchLabels:       app: snmp-exporter   strategy:     rollingUpdate:       maxSurge: 1       maxUnavailable: 0     type: RollingUpdate   template:     metadata:       labels:         app: snmp-exporter     spec:       containers:       - image: prom\/snmp-exporter         imagePullPolicy: IfNotPresent         name: exporter         ports:         - containerPort: 9116 --- apiVersion: v1 kind: Service metadata:   name: snmp-exporter spec:   ports:   - port: 9116     protocol: TCP     targetPort: 9116     name: snmp-exporter   selector:     app: snmp-exporter<\/code><\/pre>\n<h3>unifi-prometheus-exporter<\/h3>\n<p>\u0442\u0435\u043f\u0435\u0440\u044c \u0437\u0430\u043f\u0443\u0441\u043a\u0430\u0435\u043c \u043d\u0430\u0448\u0443 \u043f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u044c\u043a\u0443, \u0443 \u043d\u0435\u0451 \u0435\u0441\u0442\u044c \u0440\u044f\u0434 cli-\u0430\u0440\u0433\u0443\u043c\u0435\u043d\u0442\u043e\u0432, \u043f\u0440\u043e\u0434\u0443\u0431\u043b\u0438\u0440\u043e\u0432\u0430\u043d\u043d\u044b\u0445 \u043f\u0435\u0440\u0435\u043c\u0435\u043d\u043d\u044b\u043c\u0438 \u043e\u043a\u0440\u0443\u0436\u0435\u043d\u0438\u044f:<\/p>\n<pre><code>NAME:    exporter - \u044d\u043a\u0441\u043f\u043e\u0440\u0442\u0435\u0440 snmp-\u043c\u0435\u0442\u0440\u0438\u043a \u043e\u0442 \u0442\u043e\u0447\u0435\u043a \u0434\u043e\u0441\u0442\u0443\u043f\u0430 unifi  USAGE:    exporter [global options] command [command options] [arguments...]  COMMANDS:    help, h  Shows a list of commands or help for one command  GLOBAL OPTIONS:    --controller-login value               \u043b\u043e\u0433\u0438\u043d \u043e\u0442 unifi-\u043a\u043e\u043d\u0442\u0440\u043e\u043b\u043b\u0435\u0440\u0430 [$CONTROLLER_LOGIN]    --controller-password value            \u043f\u0430\u0440\u043e\u043b\u044c \u043e\u0442 unifi-\u043a\u043e\u043d\u0442\u0440\u043e\u043b\u043b\u0435\u0440\u0430 [$CONTROLLER_PASSWORD]    --controller-address value             \u0430\u0434\u0440\u0435\u0441 unifi-\u043a\u043e\u043d\u0442\u0440\u043e\u043b\u043b\u0435\u0440\u0430 (default: \"https:\/\/127.0.0.1:8443\") [$CONTROLLER_ADDRESS]    --snmp-exporter-address value          \u0430\u0434\u0440\u0435\u0441 snmp-\u044d\u043a\u0441\u043f\u043e\u0440\u0442\u0435\u0440\u0430 (default: \"http:\/\/snmp-exporter:9116\") [$SNMP_EXPORTER_ADDRESS]    --access-points-update-interval value  \u0438\u043d\u0442\u0435\u0440\u0432\u0430\u043b \u043e\u0431\u043d\u043e\u0432\u043b\u0435\u043d\u0438\u044f \u0441\u043f\u0438\u0441\u043a\u0430 \u0442\u043e\u0447\u0435\u043a (default: 1h0m0s) [$ACCESS_POINTS_UPDATE_INTERVAL]    --listen-port value                    \u043f\u043e\u0440\u0442 \u043f\u0440\u043e\u0441\u043b\u0443\u0448\u043a\u0438 http-\u0441\u0435\u0440\u0432\u0435\u0440\u0430 (default: 8080) [$LISTEN_PORT]    --parallel value                       \u043a\u043e\u043b\u0438\u0447\u0435\u0441\u0442\u0432\u043e \u043f\u043e\u0442\u043e\u043a\u043e\u0432 \u0434\u043b\u044f \u043e\u043f\u0440\u043e\u0441\u0430 \u0442\u043e\u0447\u0435\u043a-\u0434\u043e\u0441\u0442\u0443\u043f\u0430 (default: 10) [$PARALLEL]    --poll-timeout value                   \u0442\u0430\u0439\u043c\u0430\u0443\u0442 \u0434\u043b\u044f \u043e\u043f\u0440\u043e\u0441\u0430 \u0442\u043e\u0447\u0435\u043a \u0434\u043e\u0441\u0442\u0443\u043f\u0430 (default: 15s) [$POLL_TIMEOUT]    --help, -h                             show help (default: false)<\/code><\/pre>\n<p>\u0432 \u043f\u0440\u0438\u043d\u0446\u0438\u043f\u0435, \u0442\u0443\u0442, \u043d\u0430 \u043c\u043e\u0439 \u0432\u0437\u0433\u043b\u044f\u0434, \u0432\u0441\u0451 \u043f\u043e\u043d\u044f\u0442\u043d\u043e. \u0437\u0430\u043f\u0443\u0441\u043a\u0430\u0435\u043c \u0432 docker-compose\/kubernetes<\/p>\n<h4>docker-compose<\/h4>\n<pre><code>version: \"2\"  services:   nexus:     image: maetx777\/unifi-prometheus-exporter     environment:     - CONTROLLLER_LOGIN=admin     - CONTROLLER_PASSWORD=123456     ports:       - \"9116:9116\"<\/code><\/pre>\n<h4>kubernetes<\/h4>\n<pre><code>--- apiVersion: apps\/v1 kind: Deployment metadata:   name: unifi-snmp-exporter   labels:     app: unifi-snmp-exporter spec:   replicas: 1   selector:     matchLabels:       app: unifi-snmp-exporter   strategy:     rollingUpdate:       maxSurge: 1       maxUnavailable: 0     type: RollingUpdate   template:     metadata:       labels:         app: unifi-snmp-exporter       annotations:         prometheus.io\/scrape: 'true'         prometheus.io\/port: '8080'         prometheus.io\/path: '\/metrics'     spec:       containers:       - image: maetx777\/unifi-prometheus-exporter         name: exporter         ports:         - containerPort: 8080         env:         - name: CONTROLLER_LOGIN           value: admin         - name: CONTROLLER_PASSWORD           value: 123456       restartPolicy: Always --- apiVersion: v1 kind: Service metadata:   name: unifi-prometheus-exporter spec:   ports:   - port: 8080     protocol: TCP     targetPort: 8080     name: unifi-prometheus-exporter   selector:     app: unifi-prometheus-exporter      <\/code><\/pre>\n<p>\u043e\u0441\u0442\u0430\u043d\u043e\u0432\u043b\u044e\u0441\u044c \u043d\u0430 \u043d\u044e\u0430\u043d\u0441\u0430\u0445<\/p>\n<ul>\n<li>\n<p><strong>CONTROLLER_LOGIN<\/strong> &#8212; \u043f\u0440\u0438 \u043d\u0435\u043e\u0431\u0445\u043e\u0434\u0438\u043c\u043e\u0441\u0442\u0438 \u043c\u0435\u043d\u044f\u0435\u043c<\/p>\n<\/li>\n<li>\n<p><strong>CONTROLLER_PASSWORD<\/strong> &#8212; \u043f\u0440\u0438 \u043d\u0435\u043e\u0431\u0445\u043e\u0434\u0438\u043c\u043e\u0441\u0442\u0438 \u043c\u0435\u043d\u044f\u0435\u043c \ud83d\ude42<\/p>\n<\/li>\n<li>\n<p><strong>CONTROLLER_ADDRESS<\/strong> &#8212; \u043c\u0435\u043d\u044f\u0435\u043c \u043d\u0430 \u0430\u0434\u0440\u0435\u0441 unifi-\u043a\u043e\u043d\u0442\u0440\u043e\u043b\u043b\u0435\u0440\u0430 \u0441 \u0443\u043a\u0430\u0437\u0430\u043d\u0438\u0435\u043c \u043f\u0440\u043e\u0442\u043e\u043a\u043e\u043b\u0430 \u0438 \u043f\u043e\u0440\u0442\u0430, \u043d\u0430\u043f\u0440\u0438\u043c\u0435\u0440 https:\/\/1.2.3.4:8443<\/p>\n<\/li>\n<li>\n<p><strong>SNMP_EXPORTER_ADDRESS<\/strong> &#8212; \u043c\u0435\u043d\u044f\u0435\u043c \u043d\u0430 \u0430\u0434\u0440\u0435\u0441 snmp-\u044d\u043a\u0441\u043f\u043e\u0440\u0442\u0435\u0440\u0430, \u0447\u0442\u043e \u0437\u0430\u043f\u0443\u0441\u0442\u0438\u043b\u0438 \u0440\u0430\u043d\u0435\u0435, \u043c\u043e\u0436\u043d\u043e \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c dns-\u0438\u043c\u044f<\/p>\n<\/li>\n<li>\n<p>\u043f\u0435\u0440\u0435\u0434\u0430\u0432\u0430\u0442\u044c <strong>\u0441\u0435\u043a\u0440\u0435\u0442\u044b<\/strong> \u0432 kubernetes \u0443\u043a\u0430\u0437\u0430\u043d\u043d\u044b\u043c \u0441\u043f\u043e\u0441\u043e\u0431\u043e\u043c <strong>\u043f\u043b\u043e\u0445\u043e<\/strong>, \u0434\u043b\u044f \u044d\u0442\u043e\u0433\u043e \u0435\u0441\u0442\u044c \u0441\u043f\u0435\u0446\u0438\u0430\u043b\u044c\u043d\u044b\u0439 \u0440\u0435\u0441\u0443\u0440\u0441 <strong>Secret<\/strong>, \u043d\u043e \u0437\u0434\u0435\u0441\u044c \u044d\u0442\u043e \u043d\u0435 \u0440\u0430\u0441\u0441\u043c\u0430\u0442\u0440\u0438\u0432\u0430\u0435\u0442\u0441\u044f, \u043a\u0430\u0436\u0434\u044b\u0439 <strong>\u0441\u0430\u043c<\/strong> \u043f\u043e\u0434 \u0441\u0435\u0431\u044f \u0434\u043e\u043f\u0438\u043b\u0438\u0442<\/p>\n<\/li>\n<\/ul>\n<h2>\u041f\u043e\u0441\u043b\u0435 \u0437\u0430\u043f\u0443\u0441\u043a\u0430<\/h2>\n<p>\u041f\u043e\u0441\u043b\u0435 \u0437\u0430\u043f\u0443\u0441\u043a\u0430 \u043c\u044b \u0443\u0432\u0438\u0434\u0438\u043c \u0432 \u043b\u043e\u0433\u0430\u0445 unifi-prometheus-controller \u043d\u0435\u0447\u0442\u043e \u043f\u043e\u0434\u043e\u0431\u043d\u043e\u0435<\/p>\n<pre><code>INFO[0000] Daemon start INFO[0000] Start http server INFO[0000] Start fatals catcher INFO[0000] Start signals catcher INFO[0000] Start access points updater INFO[0001] Http client authorized INFO[0001] Update access points list INFO[0001] Access point name Room1, ip 10.0.0.10 INFO[0001] Access point name Room2, ip 10.0.0.20<\/code><\/pre>\n<p>\u0442\u0435\u043f\u0435\u0440\u044c \u043c\u043e\u0436\u043d\u043e \u043e\u0431\u0440\u0430\u0442\u0438\u0442\u044c\u0441\u044f \u043a \u043d\u0430\u0448\u0435\u043c\u0443 \u043a\u043e\u043d\u0442\u0440\u043e\u043b\u043b\u0435\u0440\u0443 \u0447\u0442\u043e\u0431\u044b \u043f\u043e\u043b\u0443\u0447\u0438\u0442\u044c \u043c\u0435\u0442\u0440\u0438\u043a\u0438 \u043d\u0430\u0439\u0434\u0435\u043d\u043d\u044b\u0445 \u0442\u043e\u0447\u0435\u043a<\/p>\n<pre><code># curl -s http:\/\/127.0.0.1:8080\/metrics|grep ifOutOctets ifOutOctets{ap_name=\"Room1\",ap_ip=\"10.0.0.10\",ifAlias=\"\",ifDescr=\"ath0\",ifIndex=\"6\",ifName=\"ath0\"} 0 ifOutOctets{ap_name=\"Room1\",ap_ip=\"10.0.0.10\",ifAlias=\"\",ifDescr=\"ath1\",ifIndex=\"7\",ifName=\"ath1\"} 3.319545249e+09 ifOutOctets{ap_name=\"Room1\",ap_ip=\"10.0.0.10\",ifAlias=\"\",ifDescr=\"br0\",ifIndex=\"9\",ifName=\"br0\"} 2.7572029e+07 ifOutOctets{ap_name=\"Room1\",ap_ip=\"10.0.0.10\",ifAlias=\"\",ifDescr=\"eth0\",ifIndex=\"2\",ifName=\"eth0\"} 4.93001573e+08 ifOutOctets{ap_name=\"Room1\",ap_ip=\"10.0.0.10\",ifAlias=\"\",ifDescr=\"eth1\",ifIndex=\"3\",ifName=\"eth1\"} 0 ifOutOctets{ap_name=\"Room1\",ap_ip=\"10.0.0.10\",ifAlias=\"\",ifDescr=\"lo\",ifIndex=\"1\",ifName=\"lo\"} 3572 ifOutOctets{ap_name=\"Room1\",ap_ip=\"10.0.0.10\",ifAlias=\"\",ifDescr=\"teql0\",ifIndex=\"5\",ifName=\"teql0\"} 0 ifOutOctets{ap_name=\"Room1\",ap_ip=\"10.0.0.10\",ifAlias=\"\",ifDescr=\"vwire2\",ifIndex=\"8\",ifName=\"vwire2\"} 0 ifOutOctets{ap_name=\"Room2\",ap_ip=\"10.0.0.20\",ifAlias=\"\",ifDescr=\"ath0\",ifIndex=\"6\",ifName=\"ath0\"} 0 ifOutOctets{ap_name=\"Room2\",ap_ip=\"10.0.0.20\",ifAlias=\"\",ifDescr=\"ath1\",ifIndex=\"7\",ifName=\"ath1\"} 6.28150693e+08 ifOutOctets{ap_name=\"Room2\",ap_ip=\"10.0.0.20\",ifAlias=\"\",ifDescr=\"br0\",ifIndex=\"9\",ifName=\"br0\"} 2.7178302e+07 ifOutOctets{ap_name=\"Room2\",ap_ip=\"10.0.0.20\",ifAlias=\"\",ifDescr=\"eth0\",ifIndex=\"2\",ifName=\"eth0\"} 4.95262026e+08 ifOutOctets{ap_name=\"Room2\",ap_ip=\"10.0.0.20\",ifAlias=\"\",ifDescr=\"eth1\",ifIndex=\"3\",ifName=\"eth1\"} 0 ifOutOctets{ap_name=\"Room2\",ap_ip=\"10.0.0.20\",ifAlias=\"\",ifDescr=\"lo\",ifIndex=\"1\",ifName=\"lo\"} 8180 ifOutOctets{ap_name=\"Room2\",ap_ip=\"10.0.0.20\",ifAlias=\"\",ifDescr=\"teql0\",ifIndex=\"5\",ifName=\"teql0\"} 0 ifOutOctets{ap_name=\"Room2\",ap_ip=\"10.0.0.20\",ifAlias=\"\",ifDescr=\"vwire2\",ifIndex=\"8\",ifName=\"vwire2\"} 0 ifOutOctets{ap_name=\"Room2\",ap_ip=\"10.0.0.20\",ifAlias=\"\",ifDescr=\"wifi0\",ifIndex=\"4\",ifName=\"wifi0\"} 0<\/code><\/pre>\n<p>\u0437\u0430\u043f\u0440\u043e\u0441 \u0437\u0430\u043d\u0438\u043c\u0430\u0435\u0442 \u043a\u0430\u043a\u043e\u0435-\u0442\u043e \u0432\u0440\u0435\u043c\u044f, \u0447\u0435\u043c \u0431\u043e\u043b\u044c\u0448\u0435 \u0442\u043e\u0447\u0435\u043a &#8212; \u0442\u0435\u043c \u0434\u043e\u043b\u044c\u0448\u0435 \u0431\u0443\u0434\u0435\u0442 \u0440\u0430\u0431\u043e\u0442\u0430\u0442\u044c \u0437\u0430\u043f\u0440\u043e\u0441, \u043d\u043e \u043e\u043f\u0440\u043e\u0441 \u043f\u0440\u043e\u0438\u0441\u0445\u043e\u0434\u0438\u0442 \u0430\u0441\u0438\u043d\u0445\u0440\u043e\u043d\u043d\u043e \u0432 \u043c\u043d\u043e\u0433\u043e\u043f\u043e\u0442\u043e\u0447\u043d\u043e\u043c \u0440\u0435\u0436\u0438\u043c\u0435, \u0442\u0430\u043a \u0447\u0442\u043e \u043e\u0431\u044b\u0447\u043d\u043e \u043e\u043d \u0443\u043a\u043b\u0430\u0434\u044b\u0432\u0430\u0435\u0442\u0441\u044f \u0432 \u043f\u0440\u0438\u0435\u043c\u043b\u0435\u043c\u043e\u0435 \u0432\u0440\u0435\u043c\u044f (\u0443 \u043d\u0430\u0441 10 \u0442\u043e\u0447\u0435\u043a \u043e\u043f\u0440\u0430\u0448\u0438\u0432\u0430\u0435\u0442\u0441\u044f \u0437\u0430 10 \u0441\u0435\u043a\u0443\u043d\u0434)<\/p>\n<p>\u0442\u0430\u043a\u0436\u0435 \u043c\u0435\u0442\u0440\u0438\u043a\u0438 &#171;\u043e\u0431\u043e\u0433\u0430\u0449\u0430\u044e\u0442\u0441\u044f&#187; \u0442\u0435\u0433\u0430\u043c\u0438 \u0441 \u0438\u043c\u0435\u043d\u0435\u043c (ap_name) \u0438 ip-\u0430\u0434\u0440\u0435\u0441\u043e\u043c (ap_ip) \u043e\u043f\u0440\u043e\u0448\u0435\u043d\u043d\u044b\u0445 \u0442\u043e\u0447\u0435\u043a<\/p>\n<h2>Prometheus<\/h2>\n<p>\u041a\u0430\u043a \u0443\u0441\u0442\u0430\u043d\u0430\u0432\u043b\u0438\u0432\u0430\u0442\u044c prometheus \u044f \u0442\u0443\u0442 \u043f\u0438\u0441\u0430\u0442\u044c \u043d\u0435 \u0431\u0443\u0434\u0443, \u044d\u0442\u043e \u043d\u0435 \u044f\u0432\u043b\u044f\u0435\u0442\u0441\u044f \u0446\u0435\u043b\u044c\u044e \u0434\u0430\u043d\u043d\u043e\u0439 \u0441\u0442\u0430\u0442\u044c\u0438, \u0443 \u043d\u0430\u0441 \u044d\u0442\u043e \u0434\u0435\u043b\u043e \u0440\u0430\u0431\u043e\u0442\u0430\u0435\u0442 \u043d\u0430 \u0431\u0430\u0437\u0435 <a href=\"https:\/\/prometheus.io\/docs\/prometheus\/latest\/configuration\/configuration\/#kubernetes_sd_config\" rel=\"noopener noreferrer nofollow\">kubernetes_sd_config<\/a>, \u0432 \u043f\u0440\u0435\u0434\u0441\u0442\u0430\u0432\u043b\u0435\u043d\u043d\u043e\u043c \u043a\u043e\u043d\u0444\u0438\u0433\u0435 kubernetes \u0437\u0430\u0434\u0430\u0451\u0442\u0441\u044f \u0430\u043d\u043d\u043e\u0442\u0430\u0446\u0438\u044f, \u043a\u043e\u0442\u043e\u0440\u0430\u044f \u0441\u043e\u043e\u0431\u0449\u0430\u0435\u0442 \u0441\u0438\u0441\u0442\u0435\u043c\u0435 prometheus \u043f\u043e\u0440\u0442 \u0438 \u0440\u0443\u0447\u043a\u0443 \u0434\u043b\u044f \u043e\u043f\u0440\u043e\u0441\u0430<\/p>\n<h2>Grafana<\/h2>\n<p>\u041d\u0430\u043a\u043e\u043d\u0435\u0446, \u043f\u043e\u043a\u0430\u0436\u0443 \u043f\u0440\u043e\u0441\u0442\u0435\u043d\u044c\u043a\u0438\u0439 \u0434\u0430\u0448\u0431\u043e\u0440\u0434 <a href=\"https:\/\/grafana.com\/\" rel=\"noopener noreferrer nofollow\">grafana <\/a>\u0434\u043b\u044f \u043f\u0440\u043e\u0441\u043c\u043e\u0442\u0440\u0430 \u0433\u0440\u0430\u0444\u0438\u043a\u043e\u0432<\/p>\n<p>\u041f\u043e\u0441\u043b\u0435 \u0441\u043e\u0437\u0434\u0430\u043d\u0438\u044f \u0434\u0430\u0448\u0431\u043e\u0440\u0434\u0430 \u0441\u0440\u0430\u0437\u0443 \u0438\u0434\u0451\u043c \u0432 Dashboard settings, \u0441\u043e\u0437\u0434\u0430\u0451\u043c \u043f\u0435\u0440\u0435\u043c\u0435\u043d\u043d\u0443\u044e<\/p>\n<figure class=\"\"><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/habrastorage.org\/r\/w1560\/getpro\/habr\/upload_files\/460\/fe1\/5b6\/460fe15b66f3a325a842a35121f97e1a.png\" width=\"507\" height=\"460\" data-src=\"https:\/\/habrastorage.org\/getpro\/habr\/upload_files\/460\/fe1\/5b6\/460fe15b66f3a325a842a35121f97e1a.png\"\/><figcaption><\/figcaption><\/figure>\n<figure class=\"full-width\"><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/habrastorage.org\/r\/w1560\/getpro\/habr\/upload_files\/940\/8ed\/c42\/9408edc4268fdf9fedc7a4e0e4a56cc1.png\" width=\"957\" height=\"746\" data-src=\"https:\/\/habrastorage.org\/getpro\/habr\/upload_files\/940\/8ed\/c42\/9408edc4268fdf9fedc7a4e0e4a56cc1.png\"\/><figcaption><\/figcaption><\/figure>\n<pre><code>Query: ifOutOctets{ap_name=~\".+\"} Regex: \/ap_name=\"([^\"]+)\"\/<\/code><\/pre>\n<p>\u0441\u043c\u044b\u0441\u043b \u044d\u0442\u043e\u0439 \u043f\u0435\u0440\u0435\u043c\u0435\u043d\u043d\u043e\u0439 \u0432 \u0442\u043e\u043c, \u0447\u0442\u043e \u043c\u044b \u0432\u044b\u0431\u0438\u0440\u0430\u0435\u043c \u0432\u0441\u0435 \u0443\u043d\u0438\u043a\u0430\u043b\u044c\u043d\u044b\u0435 \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u044f ap_name, \u0447\u0442\u043e\u0431\u044b \u0434\u0430\u043b\u044c\u0448\u0435 \u044d\u0442\u043e \u043c\u043e\u0436\u043d\u043e \u0431\u044b\u043b\u043e \u0432\u044b\u0431\u0438\u0440\u0430\u0442\u044c \u0438\u0437 \u0441\u043f\u0438\u0441\u043a\u0430:<\/p>\n<figure class=\"\"><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/habrastorage.org\/r\/w1560\/getpro\/habr\/upload_files\/968\/dbe\/913\/968dbe9132019378308e76d98e857988.png\" width=\"386\" height=\"262\" data-src=\"https:\/\/habrastorage.org\/getpro\/habr\/upload_files\/968\/dbe\/913\/968dbe9132019378308e76d98e857988.png\"\/><figcaption><\/figcaption><\/figure>\n<p>\u0442\u0435\u043f\u0435\u0440\u044c \u0441\u043e\u0437\u0434\u0430\u0451\u043c \u0433\u0440\u0430\u0444\u0438\u043a \u0438 \u043f\u0438\u0448\u0435\u043c \u0442\u0430\u043c \u0444\u043e\u0440\u043c\u0443\u043b\u044b<\/p>\n<figure class=\"full-width\"><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/habrastorage.org\/r\/w1560\/getpro\/habr\/upload_files\/b1e\/813\/f11\/b1e813f110897049f85a16eef57e6a88.png\" width=\"1323\" height=\"900\" data-src=\"https:\/\/habrastorage.org\/getpro\/habr\/upload_files\/b1e\/813\/f11\/b1e813f110897049f85a16eef57e6a88.png\"\/><figcaption><\/figcaption><\/figure>\n<pre><code>A: irate(ifOutOctets{ap_name=~\"[[ap_name]]\"}[5m])*8 A.Legend: {{ap_name}} {{ap_ip}} {{ifDescr}} out  B: irate(ifInOctets{ap_name=~\"[[ap_name]]\"}[5m])*-8 B.Legend: {{ap_name}} {{ap_ip}} {{ifDescr}} in<\/code><\/pre>\n<p>\u0443\u043c\u043d\u043e\u0436\u0435\u043d\u0438\u0435 \u043d\u0430 8 \u043d\u0435\u043e\u0431\u0445\u043e\u0434\u0438\u043c\u043e \u043f\u043e \u0442\u043e\u0439 \u043f\u0440\u0438\u0447\u0438\u043d\u0435, \u0447\u0442\u043e ifOutOctets &#8212; \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u0435 \u0432 \u0431\u0430\u0439\u0442\u0430\u0445, \u0430 \u043d\u0430\u043c \u043d\u0443\u0436\u0435\u043d \u0433\u0440\u0430\u0444\u0438\u043a \u0432 \u043c\u0435\u0433\u0430\u0431\u0438\u0442\/\u0441\u0435\u043a<\/p>\n<p>\u0443\u043c\u043d\u043e\u0436\u0435\u043d\u0438\u0435 \u043d\u0430 -8 \u0434\u0435\u043b\u0430\u0435\u043c \u0447\u0442\u043e\u0431\u044b \u0432\u0445\u043e\u0434\u044f\u0449\u0438\u0439 \u0442\u0440\u0430\u0444\u0438\u043a \u043e\u0442\u043e\u0431\u0440\u0430\u0437\u0438\u043b\u0441\u044f \u0432\u043d\u0438\u0437, \u0434\u0430, \u044f \u0437\u043d\u0430\u044e, \u0447\u0442\u043e \u0435\u0441\u0442\u044c \u0442\u0440\u0430\u043d\u0441\u0444\u043e\u0440\u043c\u0430\u0446\u0438\u0438, \u043d\u043e \u0443 \u043d\u0430\u0441 \u044d\u0442\u043e \u043e\u0442\u0440\u0430\u0431\u043e\u0442\u0430\u043b\u043e \u043a\u0430\u043a-\u0442\u043e \u043a\u0440\u0438\u0432\u043e, \u0433\u0440\u0430\u0444\u0438\u043a \u043f\u0440\u043e\u043f\u0430\u043b \u0441\u043e\u0432\u0441\u0435\u043c, \u0442\u0430\u043a \u0438 \u043d\u0435 \u043f\u043e\u043d\u044f\u043b\u0438 \u0432 \u0447\u0451\u043c \u0434\u0435\u043b\u043e<\/p>\n<p>\u0438 \u043d\u0430 \u0432\u044b\u0445\u043e\u0434\u0435 \u043f\u043e\u043b\u0443\u0447\u0430\u0435\u043c \u0432\u043e\u0437\u043c\u043e\u0436\u043d\u043e\u0441\u0442\u044c \u043f\u0440\u043e\u0441\u043c\u0430\u0442\u0440\u0438\u0432\u0430\u0442\u044c \u0433\u0440\u0430\u0444\u0438\u043a \u043f\u043e \u043b\u044e\u0431\u043e\u0439 \u0438\u0437 \u0442\u043e\u0447\u0435\u043a \u0434\u043e\u0441\u0442\u0443\u043f\u0430:<\/p>\n<figure class=\"full-width\"><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/habrastorage.org\/r\/w1560\/getpro\/habr\/upload_files\/f8f\/0e6\/eaa\/f8f0e6eaac29de2ef7bd65d1ebb630aa.png\" width=\"1092\" height=\"685\" data-src=\"https:\/\/habrastorage.org\/getpro\/habr\/upload_files\/f8f\/0e6\/eaa\/f8f0e6eaac29de2ef7bd65d1ebb630aa.png\"\/><figcaption><\/figcaption><\/figure>\n<\/div>\n<\/div>\n<\/div>\n<div class=\"v-portal\" style=\"display:none;\"><\/div>\n<\/div>\n<p> <!----> <!----><br \/> \u0441\u0441\u044b\u043b\u043a\u0430 \u043d\u0430 \u043e\u0440\u0438\u0433\u0438\u043d\u0430\u043b \u0441\u0442\u0430\u0442\u044c\u0438 <a href=\"https:\/\/habr.com\/ru\/post\/658863\/\"> https:\/\/habr.com\/ru\/post\/658863\/<\/a><\/p>\n","protected":false},"excerpt":{"rendered":"<div><\/div>\n<div id=\"post-content-body\">\n<div>\n<div class=\"article-formatted-body article-formatted-body_version-2\">\n<div xmlns=\"http:\/\/www.w3.org\/1999\/xhtml\">\n<p>\u0412\u0441\u0435\u043c \u043f\u0440\u0438\u0432\u0435\u0442! \u041d\u0430 \u0434\u043d\u044f\u0445 \u0437\u0430\u0445\u043e\u0442\u0435\u043b\u043e\u0441\u044c \u0441\u0434\u0435\u043b\u0430\u0442\u044c \u0433\u0440\u0430\u0444\u0438\u043a\u0438 \u043f\u043e \u0432\u0441\u0435\u043c \u043d\u0430\u0448\u0438\u043c \u0442\u043e\u0447\u043a\u0430\u043c \u0434\u043e\u0441\u0442\u0443\u043f\u0430, \u0443 \u043d\u0430\u0441 \u0438\u0445 \u043c\u043d\u043e\u0433\u043e, \u0447\u0430\u0441\u0442\u044c \u043d\u0430 \u0431\u0430\u0437\u0435 Mikrotik \u0438 \u0441 \u043d\u0438\u043c\u0438 \u043d\u0435\u0442 \u043f\u0440\u043e\u0431\u043b\u0435\u043c, \u043e\u043d \u043b\u0435\u0433\u043a\u043e \u043e\u043f\u0440\u0430\u0448\u0438\u0432\u0430\u0435\u0442\u0441\u044f \u043f\u043e SNMP \u0438 \u043e\u0442\u0434\u0430\u0451\u0442 \u0441\u0442\u0430\u0442\u0438\u0441\u0442\u0438\u043a\u0443 \u0441\u0440\u0430\u0437\u0443 \u043f\u043e \u0432\u0441\u0435\u043c \u0442\u043e\u0447\u043a\u0430\u043c, \u0430 \u0432\u043e\u0442 \u0441 Unifi \u0432\u0441\u0451 \u0441\u043b\u043e\u0436\u043d\u0435\u0439, \u043d\u0443\u0436\u043d\u043e \u043e\u043f\u0440\u0430\u0448\u0438\u0432\u0430\u0442\u044c \u043a\u0430\u0436\u0434\u0443\u044e \u0442\u043e\u0447\u043a\u0443 \u0434\u043e\u0441\u0442\u0443\u043f\u0430 \u043e\u0442\u0434\u0435\u043b\u044c\u043d\u043e, \u0430 \u043e\u043d\u0438 \u0443 \u043d\u0430\u0441 \u0438\u043d\u043e\u0433\u0434\u0430 \u043c\u0435\u043d\u044f\u044e\u0442, \u0441\u043e\u043e\u0442\u0432\u0435\u0442\u0441\u0442\u0432\u0435\u043d\u043d\u043e, \u043d\u0443\u0436\u043d\u043e \u043a\u0430\u043a\u043e\u0435-\u0442\u043e \u0440\u0435\u0448\u0435\u043d\u0438\u0435, \u043a\u043e\u0442\u043e\u0440\u043e\u0435 \u0431\u0443\u0434\u0435\u0442 \u043e\u0442\u0441\u043b\u0435\u0436\u0438\u0432\u0430\u0442\u044c \u044d\u0442\u0438 \u0438\u0437\u043c\u0435\u043d\u0435\u043d\u0438\u044f \u0430\u0432\u0442\u043e\u043c\u0430\u0442\u0438\u0447\u0435\u0441\u043a\u0438. \u041d\u0430 \u043f\u0440\u043e\u0441\u0442\u043e\u0440\u0430\u0445 \u0418\u043d\u0442\u0435\u0440\u043d\u0435\u0442 \u043d\u0435 \u043d\u0430\u0448\u043b\u043e\u0441\u044c \u043d\u0438\u0447\u0435\u0433\u043e \u0433\u043e\u0442\u043e\u0432\u043e\u0433\u043e, \u043f\u043e\u044d\u0442\u043e\u043c\u0443 \u0440\u0435\u0448\u0438\u043b\u0438 \u043d\u0430\u043f\u0438\u0441\u0430\u0442\u044c \u043e\u0447\u0435\u0440\u0435\u0434\u043d\u043e\u0439 &#171;\u0432\u0435\u043b\u043e\u0441\u0438\u043f\u0435\u0434&#187;, \u043d\u043e \u0445\u043e\u0442\u0435\u043b\u043e\u0441\u044c \u0441\u0434\u0435\u043b\u0430\u0442\u044c \u043c\u0430\u043a\u0441\u0438\u043c\u0430\u043b\u044c\u043d\u043e \u0441\u043e\u0432\u043c\u0435\u0441\u0442\u0438\u043c\u043e, \u0447\u0442\u043e\u0431\u044b \u044d\u0442\u0438\u043c \u043c\u043e\u0433\u043b\u0438 \u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c\u0441\u044f \u0434\u0440\u0443\u0433\u0438\u0435.<\/p>\n<h2>\u041d\u0430\u0448 \u043f\u043e\u0434\u0445\u043e\u0434<\/h2>\n<p>\u041c\u044b \u0440\u0435\u0448\u0438\u043b\u0438, \u0447\u0442\u043e \u043d\u0430\u043f\u0438\u0448\u0435\u043c \u043f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u0435\/\u0434\u0435\u043c\u043e\u043d, \u043a\u043e\u0442\u043e\u0440\u043e\u0435 \u043c\u043e\u0436\u0435\u0442 \u0430\u0432\u0442\u043e\u0440\u0438\u0437\u043e\u0432\u0430\u0442\u044c\u0441\u044f \u0432 \u043a\u043e\u043d\u0442\u0440\u043e\u043b\u043b\u0435\u0440\u0435 Unifi, \u043f\u043e\u043b\u0443\u0447\u0438\u0442\u044c \u0441\u043f\u0438\u0441\u043e\u043a \u0442\u043e\u0447\u0435\u043a \u0434\u043e\u0441\u0442\u0443\u043f\u0430, \u0430 \u0434\u0430\u043b\u044c\u0448\u0435 \u043f\u043e \u0437\u0430\u043f\u0440\u043e\u0441\u0443 \u0432 \u0440\u0443\u0447\u043a\u0443 \/metrics \u0431\u0443\u0434\u0435\u0442 \u043e\u0431\u0440\u0430\u0449\u0430\u0442\u044c\u0441\u044f \u043a\u043e \u0432\u0441\u0435\u043c \u0442\u043e\u0447\u043a\u0430\u043c \u0434\u043e\u0441\u0442\u0443\u043f\u0430 \u043f\u043e snmp \u0438 \u043e\u0442\u0434\u0430\u0432\u0430\u0442\u044c \u0440\u0435\u0437\u0443\u043b\u044c\u0442\u0430\u0442 \u043d\u0430\u0440\u0443\u0436\u0443 \u0432 \u0444\u043e\u0440\u043c\u0430\u0442\u0435 prometheus<\/p>\n<h2>\u0420\u0435\u0430\u043b\u0438\u0437\u0430\u0446\u0438\u044f<\/h2>\n<p>\u041f\u043e\u0434\u0440\u043e\u0431\u043d\u043e \u043e\u0441\u0442\u0430\u043d\u0430\u0432\u043b\u0438\u0432\u0430\u0442\u044c\u0441\u044f \u043d\u0430 \u0434\u0435\u0442\u0430\u043b\u044f\u0445 \u0440\u0435\u0430\u043b\u0438\u0437\u0430\u0446\u0438\u0438 \u043f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u044f \u043d\u0435 \u0431\u0443\u0434\u0443, \u0432\u0441\u0451 \u0437\u0430\u043b\u0438\u043b <a href=\"https:\/\/github.com\/maetx777\/unifi-prometheus-exporter\" rel=\"noopener noreferrer nofollow\">\u043d\u0430 github<\/a> \u0438 \u043f\u043e\u0434\u0440\u043e\u0431\u043d\u043e \u0437\u0430\u0434\u043e\u043a\u0443\u043c\u0435\u043d\u0442\u0438\u0440\u043e\u0432\u0430\u043b. \u0415\u0441\u0442\u044c \u0442\u0430\u043a\u0436\u0435 <a href=\"https:\/\/hub.docker.com\/r\/maetx777\/unifi-prometheus-exporter\" rel=\"noopener noreferrer nofollow\">docker-\u043e\u0431\u0440\u0430\u0437<\/a>.<\/p>\n<p>\u041e\u043f\u0438\u0448\u0443 \u043d\u0435\u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u043f\u043e\u0434\u0445\u043e\u0434\u044b, \u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u0431\u044b\u043b\u0438 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043d\u044b:<\/p>\n<ul>\n<li>\n<p>\u044f\u0437\u044b\u043a \u0440\u0430\u0437\u0440\u0430\u0431\u043e\u0442\u043a\u0438 <a href=\"https:\/\/go.dev\/\" rel=\"noopener noreferrer nofollow\">Golang <\/a><\/p>\n<\/li>\n<li>\n<p>\u0434\u043b\u044f \u043e\u0431\u0440\u0430\u0431\u043e\u0442\u043a\u0438 cli-\u0430\u0440\u0433\u0443\u043c\u0435\u043d\u0442\u043e\u0432 \u0438 \u043f\u0435\u0440\u0435\u043c\u0435\u043d\u043d\u044b\u0445 \u043e\u043a\u0440\u0443\u0436\u0435\u043d\u0438\u044f \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043d \u0444\u0440\u0435\u0439\u043c\u0432\u043e\u0440\u043a <a href=\"https:\/\/github.com\/urfave\/cli\" rel=\"noopener noreferrer nofollow\">urfave\/cli\/v2<\/a><\/p>\n<\/li>\n<li>\n<p>\u0432 \u043a\u0430\u0447\u0435\u0441\u0442\u0432\u0435 \u0440\u043e\u0443\u0442\u0435\u0440\u0430 http-\u0437\u0430\u043f\u0440\u043e\u0441\u043e\u0432 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043b\u0438 <a href=\"https:\/\/github.com\/gorilla\/mux\" rel=\"noopener noreferrer nofollow\">gorilla\/mux<\/a><\/p>\n<\/li>\n<li>\n<p>\u0434\u043b\u044f \u043e\u0433\u0440\u0430\u043d\u0438\u0447\u0435\u043d\u0438\u044f \u043e\u0434\u043d\u043e\u0432\u0440\u0435\u043c\u0435\u043d\u043d\u043e\u0433\u043e \u043e\u043f\u0440\u043e\u0441\u0430 \u0442\u043e\u0447\u0435\u043a \u0434\u043e\u0441\u0442\u0443\u043f\u0430 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043d \u043f\u0440\u0438\u043c\u0438\u0442\u0438\u0432 \u0441\u0438\u043d\u0445\u0440\u043e\u043d\u0438\u0437\u0430\u0446\u0438\u0438 &#171;<a href=\"https:\/\/ru.wikipedia.org\/wiki\/%D0%A1%D0%B5%D0%BC%D0%B0%D1%84%D0%BE%D1%80_(%D0%BF%D1%80%D0%BE%D0%B3%D1%80%D0%B0%D0%BC%D0%BC%D0%B8%D1%80%D0%BE%D0%B2%D0%B0%D0%BD%D0%B8%D0%B5)\" rel=\"noopener noreferrer nofollow\">\u0441\u0435\u043c\u0430\u0444\u043e\u0440<\/a>&#171;<\/p>\n<\/li>\n<li>\n<p>\u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043b\u0438 <a href=\"https:\/\/ru.wikipedia.org\/wiki\/%D0%9C%D1%8C%D1%8E%D1%82%D0%B5%D0%BA%D1%81\" rel=\"noopener noreferrer nofollow\">mutex<\/a> \u0434\u043b\u044f \u0441\u0438\u043d\u0445\u0440\u043e\u043d\u0438\u0437\u0430\u0446\u0438\u0438 \u0441\u043f\u0438\u0441\u043a\u0430 \u0442\u043e\u0447\u0435\u043a \u0434\u043e\u0441\u0442\u0443\u043f\u0430 \u043c\u0435\u0436\u0434\u0443 \u0433\u043e\u0440\u0443\u0442\u0438\u043d\u0430\u043c\u0438<\/p>\n<\/li>\n<li>\n<p>\u0434\u043b\u044f \u043e\u043f\u0440\u043e\u0441\u0430 \u0442\u043e\u0447\u0435\u043a \u0434\u043e\u0441\u0442\u0443\u043f\u0430 \u043f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u0435 \u043e\u0431\u0440\u0430\u0449\u0430\u0435\u0442\u0441\u044f \u043a \u0441\u0442\u043e\u0440\u043e\u043d\u043d\u0435\u0439 \u0440\u0435\u0430\u043b\u0438\u0437\u0430\u0446\u0438\u0438 <a href=\"https:\/\/github.com\/prometheus\/snmp_exporter\" rel=\"noopener noreferrer nofollow\">snmp-exporter<\/a><\/p>\n<\/li>\n<\/ul>\n<h2>\u041d\u0430\u0441\u0442\u0440\u043e\u0439\u043a\u0430 \u043e\u043a\u0440\u0443\u0436\u0435\u043d\u0438\u044f<\/h2>\n<p>\u041d\u0430\u043c \u043d\u0443\u0436\u043d\u043e \u043d\u0430\u0441\u0442\u0440\u043e\u0438\u0442\u044c \u0434\u0432\u0435 \u043f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u044c\u043a\u0438:<\/p>\n<ul>\n<li>\n<p>snmp-exporter &#8212; \u0434\u0435\u043c\u043e\u043d, \u0432 \u043a\u043e\u0442\u043e\u0440\u043e\u0433\u043e \u043c\u044b \u0431\u0443\u0434\u0435\u043c \u043e\u0431\u0440\u0430\u0449\u0430\u0442\u044c\u0441\u044f \u0438\u0437 \u043d\u0430\u0448\u0435\u0439 \u043f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u044c\u043a\u0438<\/p>\n<\/li>\n<li>\n<p>unifi-prometheus-exporter &#8212; \u043d\u0430\u0448\u0430 \u043f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u044c\u043a\u0430<\/p>\n<\/li>\n<\/ul>\n<p>\u042f \u0441\u0440\u0430\u0437\u0443 \u0441\u043a\u0430\u0436\u0443, \u0447\u0442\u043e \u044f \u0447\u0435\u0441\u0442\u043d\u043e \u0437\u0430\u043a\u043e\u043f\u0430\u043b\u0441\u044f \u0432 \u043a\u043e\u0434 snmp-exporter, \u0432 \u043d\u0430\u0434\u0435\u0436\u0434\u0435, \u0447\u0442\u043e \u043c\u043e\u0436\u043d\u043e \u0431\u0443\u0434\u0435\u0442 \u0438\u043c\u043f\u043e\u0440\u0442\u0438\u0440\u043e\u0432\u0430\u0442\u044c \u043a\u043e\u0434 \u0438 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c \u0435\u0433\u043e \u0444\u0443\u043d\u043a\u0446\u0438\u0438 \u043d\u0430\u0442\u0438\u0432\u043d\u043e, \u043d\u043e \u0442\u0430\u043c \u0432\u0441\u0451 \u043d\u0435 \u043e\u0447\u0435\u043d\u044c \u0445\u043e\u0440\u043e\u0448\u043e, \u043a\u043e\u0434 \u043d\u0435 \u043c\u043e\u0434\u0443\u043b\u044c\u043d\u044b\u0439, \u0435\u0433\u043e \u043d\u0435\u043b\u044c\u0437\u044f \u0438\u043c\u043f\u043e\u0440\u0442\u0438\u0440\u043e\u0432\u0430\u0442\u044c, \u043f\u043e\u044d\u0442\u043e\u043c\u0443 \u043f\u0440\u0438\u0434\u0451\u0442\u0441\u044f \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c \u0434\u0432\u0435 \u043f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u044c\u043a\u0438.<\/p>\n<h3>Snmp-exporter<\/h3>\n<p>\u0414\u043b\u044f \u043d\u0430\u0447\u0430\u043b\u0430 \u043d\u0430\u0434\u043e \u0437\u0430\u043f\u0443\u0441\u0442\u0438\u0442\u044c snmp-exporter, \u043a \u043a\u043e\u0442\u043e\u0440\u043e\u043c\u0443 \u043c\u044b \u0431\u0443\u0434\u0435\u043c \u043e\u0431\u0440\u0430\u0449\u0430\u0442\u044c\u0441\u044f \u0434\u043b\u044f \u043e\u043f\u0440\u043e\u0441\u0430 \u043d\u0430\u0448\u0438\u0445 \u0442\u043e\u0447\u0435\u043a \u0434\u043e\u0441\u0442\u0443\u043f\u0430, \u043f\u043e\u043a\u0430\u0436\u0443 \u043a\u0430\u043a \u044d\u0442\u043e \u043c\u043e\u0436\u043d\u043e \u0437\u0430\u043f\u0443\u0441\u0442\u0438\u0442\u044c \u0432 docker-compose \u0438 \u0432 kubernetes. \u0423\u0441\u0442\u0430\u043d\u043e\u0432\u043a\u0443 docker-compose \u0438 kubernetes \u0442\u0443\u0442 \u0440\u0430\u0441\u0441\u043c\u0430\u0442\u0440\u0438\u0432\u0430\u0442\u044c \u043d\u0435 \u0431\u0443\u0434\u0443, \u044d\u0442\u043e \u043d\u0435 \u044f\u0432\u043b\u044f\u0435\u0442\u0441\u044f \u0446\u0435\u043b\u044c\u044e \u0434\u0430\u043d\u043d\u043e\u0433\u043e \u043f\u043e\u0441\u0442\u0430.<\/p>\n<p>\u042d\u043a\u0441\u043f\u043e\u0440\u0442\u0435\u0440 \u0441\u043b\u0443\u0448\u0430\u0435\u0442 \u043d\u0430 \u043f\u043e\u0440\u0442\u0443 9116, \u0447\u0442\u043e\u0431\u044b \u043e\u043f\u0440\u043e\u0441\u0438\u0442\u044c \u0443\u0434\u0430\u043b\u0451\u043d\u043d\u044b\u0439 \u0443\u0437\u0435\u043b \u043f\u043e snmp, \u0434\u043e\u0441\u0442\u0430\u0442\u043e\u0447\u043d\u043e \u043f\u043e\u0441\u043b\u0430\u0442\u044c \u0432 \u044d\u043a\u0441\u043f\u043e\u0440\u0442\u0435\u0440 http-\u0437\u0430\u043f\u0440\u043e\u0441 \u0432 \u0440\u0443\u0447\u043a\u0443 \/snmp c \u043f\u0430\u0440\u0430\u043c\u0435\u0442\u0440\u0430\u043c\u0438 module (\u043f\u043e \u0443\u043c\u043e\u043b\u0447\u0430\u043d\u0438\u044e if_mib) \u0438 target (\u0447\u0442\u043e \u043e\u043f\u0440\u0430\u0448\u0438\u0432\u0430\u0435\u043c), \u043d\u0430\u043f\u0440\u0438\u043c\u0435\u0440:<\/p>\n<pre><code>curl http:\/\/127.0.0.1:9116\/snmp?target=10.0.0.1<\/code><\/pre>\n<h4>docker-compose<\/h4>\n<pre><code>version: \"2\"  services:   nexus:     image: prom\/snmp-exporter     ports:       - \"9116:9116\"<\/code><\/pre>\n<h4>kubernetes<\/h4>\n<pre><code>--- apiVersion: apps\/v1 kind: Deployment metadata:   name: snmp-exporter   labels:     app: snmp-exporter spec:   replicas: 1   selector:     matchLabels:       app: snmp-exporter   strategy:     rollingUpdate:       maxSurge: 1       maxUnavailable: 0     type: RollingUpdate   template:     metadata:       labels:         app: snmp-exporter     spec:       containers:       - image: prom\/snmp-exporter         imagePullPolicy: IfNotPresent         name: exporter         ports:         - containerPort: 9116 --- apiVersion: v1 kind: Service metadata:   name: snmp-exporter spec:   ports:   - port: 9116     protocol: TCP     targetPort: 9116     name: snmp-exporter   selector:     app: snmp-exporter<\/code><\/pre>\n<h3>unifi-prometheus-exporter<\/h3>\n<p>\u0442\u0435\u043f\u0435\u0440\u044c \u0437\u0430\u043f\u0443\u0441\u043a\u0430\u0435\u043c \u043d\u0430\u0448\u0443 \u043f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u044c\u043a\u0443, \u0443 \u043d\u0435\u0451 \u0435\u0441\u0442\u044c \u0440\u044f\u0434 cli-\u0430\u0440\u0433\u0443\u043c\u0435\u043d\u0442\u043e\u0432, \u043f\u0440\u043e\u0434\u0443\u0431\u043b\u0438\u0440\u043e\u0432\u0430\u043d\u043d\u044b\u0445 \u043f\u0435\u0440\u0435\u043c\u0435\u043d\u043d\u044b\u043c\u0438 \u043e\u043a\u0440\u0443\u0436\u0435\u043d\u0438\u044f:<\/p>\n<pre><code>NAME:    exporter - \u044d\u043a\u0441\u043f\u043e\u0440\u0442\u0435\u0440 snmp-\u043c\u0435\u0442\u0440\u0438\u043a \u043e\u0442 \u0442\u043e\u0447\u0435\u043a \u0434\u043e\u0441\u0442\u0443\u043f\u0430 unifi  USAGE:    exporter [global options] command [command options] [arguments...]  COMMANDS:    help, h  Shows a list of commands or help for one command  GLOBAL OPTIONS:    --controller-login value               \u043b\u043e\u0433\u0438\u043d \u043e\u0442 unifi-\u043a\u043e\u043d\u0442\u0440\u043e\u043b\u043b\u0435\u0440\u0430 [$CONTROLLER_LOGIN]    --controller-password value            \u043f\u0430\u0440\u043e\u043b\u044c \u043e\u0442 unifi-\u043a\u043e\u043d\u0442\u0440\u043e\u043b\u043b\u0435\u0440\u0430 [$CONTROLLER_PASSWORD]    --controller-address value             \u0430\u0434\u0440\u0435\u0441 unifi-\u043a\u043e\u043d\u0442\u0440\u043e\u043b\u043b\u0435\u0440\u0430 (default: \"https:\/\/127.0.0.1:8443\") [$CONTROLLER_ADDRESS]    --snmp-exporter-address value          \u0430\u0434\u0440\u0435\u0441 snmp-\u044d\u043a\u0441\u043f\u043e\u0440\u0442\u0435\u0440\u0430 (default: \"http:\/\/snmp-exporter:9116\") [$SNMP_EXPORTER_ADDRESS]    --access-points-update-interval value  \u0438\u043d\u0442\u0435\u0440\u0432\u0430\u043b \u043e\u0431\u043d\u043e\u0432\u043b\u0435\u043d\u0438\u044f \u0441\u043f\u0438\u0441\u043a\u0430 \u0442\u043e\u0447\u0435\u043a (default: 1h0m0s) [$ACCESS_POINTS_UPDATE_INTERVAL]    --listen-port value                    \u043f\u043e\u0440\u0442 \u043f\u0440\u043e\u0441\u043b\u0443\u0448\u043a\u0438 http-\u0441\u0435\u0440\u0432\u0435\u0440\u0430 (default: 8080) [$LISTEN_PORT]    --parallel value                       \u043a\u043e\u043b\u0438\u0447\u0435\u0441\u0442\u0432\u043e \u043f\u043e\u0442\u043e\u043a\u043e\u0432 \u0434\u043b\u044f \u043e\u043f\u0440\u043e\u0441\u0430 \u0442\u043e\u0447\u0435\u043a-\u0434\u043e\u0441\u0442\u0443\u043f\u0430 (default: 10) [$PARALLEL]    --poll-timeout value                   \u0442\u0430\u0439\u043c\u0430\u0443\u0442 \u0434\u043b\u044f \u043e\u043f\u0440\u043e\u0441\u0430 \u0442\u043e\u0447\u0435\u043a \u0434\u043e\u0441\u0442\u0443\u043f\u0430 (default: 15s) [$POLL_TIMEOUT]    --help, -h                             show help (default: false)<\/code><\/pre>\n<p>\u0432 \u043f\u0440\u0438\u043d\u0446\u0438\u043f\u0435, \u0442\u0443\u0442, \u043d\u0430 \u043c\u043e\u0439 \u0432\u0437\u0433\u043b\u044f\u0434, \u0432\u0441\u0451 \u043f\u043e\u043d\u044f\u0442\u043d\u043e. \u0437\u0430\u043f\u0443\u0441\u043a\u0430\u0435\u043c \u0432 docker-compose\/kubernetes<\/p>\n<h4>docker-compose<\/h4>\n<pre><code>version: \"2\"  services:   nexus:     image: maetx777\/unifi-prometheus-exporter     environment:     - CONTROLLLER_LOGIN=admin     - CONTROLLER_PASSWORD=123456     ports:       - \"9116:9116\"<\/code><\/pre>\n<h4>kubernetes<\/h4>\n<pre><code>--- apiVersion: apps\/v1 kind: Deployment metadata:   name: unifi-snmp-exporter   labels:     app: unifi-snmp-exporter spec:   replicas: 1   selector:     matchLabels:       app: unifi-snmp-exporter   strategy:     rollingUpdate:       maxSurge: 1       maxUnavailable: 0     type: RollingUpdate   template:     metadata:       labels:         app: unifi-snmp-exporter       annotations:         prometheus.io\/scrape: 'true'         prometheus.io\/port: '8080'         prometheus.io\/path: '\/metrics'     spec:       containers:       - image: maetx777\/unifi-prometheus-exporter         name: exporter         ports:         - containerPort: 8080         env:         - name: CONTROLLER_LOGIN           value: admin         - name: CONTROLLER_PASSWORD           value: 123456       restartPolicy: Always --- apiVersion: v1 kind: Service metadata:   name: unifi-prometheus-exporter spec:   ports:   - port: 8080     protocol: TCP     targetPort: 8080     name: unifi-prometheus-exporter   selector:     app: unifi-prometheus-exporter      <\/code><\/pre>\n<p>\u043e\u0441\u0442\u0430\u043d\u043e\u0432\u043b\u044e\u0441\u044c \u043d\u0430 \u043d\u044e\u0430\u043d\u0441\u0430\u0445<\/p>\n<ul>\n<li>\n<p><strong>CONTROLLER_LOGIN<\/strong> &#8212; \u043f\u0440\u0438 \u043d\u0435\u043e\u0431\u0445\u043e\u0434\u0438\u043c\u043e\u0441\u0442\u0438 \u043c\u0435\u043d\u044f\u0435\u043c<\/p>\n<\/li>\n<li>\n<p><strong>CONTROLLER_PASSWORD<\/strong> &#8212; \u043f\u0440\u0438 \u043d\u0435\u043e\u0431\u0445\u043e\u0434\u0438\u043c\u043e\u0441\u0442\u0438 \u043c\u0435\u043d\u044f\u0435\u043c \ud83d\ude42<\/p>\n<\/li>\n<li>\n<p><strong>CONTROLLER_ADDRESS<\/strong> &#8212; \u043c\u0435\u043d\u044f\u0435\u043c \u043d\u0430 \u0430\u0434\u0440\u0435\u0441 unifi-\u043a\u043e\u043d\u0442\u0440\u043e\u043b\u043b\u0435\u0440\u0430 \u0441 \u0443\u043a\u0430\u0437\u0430\u043d\u0438\u0435\u043c \u043f\u0440\u043e\u0442\u043e\u043a\u043e\u043b\u0430 \u0438 \u043f\u043e\u0440\u0442\u0430, \u043d\u0430\u043f\u0440\u0438\u043c\u0435\u0440 https:\/\/1.2.3.4:8443<\/p>\n<\/li>\n<li>\n<p><strong>SNMP_EXPORTER_ADDRESS<\/strong> &#8212; \u043c\u0435\u043d\u044f\u0435\u043c \u043d\u0430 \u0430\u0434\u0440\u0435\u0441 snmp-\u044d\u043a\u0441\u043f\u043e\u0440\u0442\u0435\u0440\u0430, \u0447\u0442\u043e \u0437\u0430\u043f\u0443\u0441\u0442\u0438\u043b\u0438 \u0440\u0430\u043d\u0435\u0435, \u043c\u043e\u0436\u043d\u043e \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c dns-\u0438\u043c\u044f<\/p>\n<\/li>\n<li>\n<p>\u043f\u0435\u0440\u0435\u0434\u0430\u0432\u0430\u0442\u044c <strong>\u0441\u0435\u043a\u0440\u0435\u0442\u044b<\/strong> \u0432 kubernetes \u0443\u043a\u0430\u0437\u0430\u043d\u043d\u044b\u043c \u0441\u043f\u043e\u0441\u043e\u0431\u043e\u043c <strong>\u043f\u043b\u043e\u0445\u043e<\/strong>, \u0434\u043b\u044f \u044d\u0442\u043e\u0433\u043e \u0435\u0441\u0442\u044c \u0441\u043f\u0435\u0446\u0438\u0430\u043b\u044c\u043d\u044b\u0439 \u0440\u0435\u0441\u0443\u0440\u0441 <strong>Secret<\/strong>, \u043d\u043e \u0437\u0434\u0435\u0441\u044c \u044d\u0442\u043e \u043d\u0435 \u0440\u0430\u0441\u0441\u043c\u0430\u0442\u0440\u0438\u0432\u0430\u0435\u0442\u0441\u044f, \u043a\u0430\u0436\u0434\u044b\u0439 <strong>\u0441\u0430\u043c<\/strong> \u043f\u043e\u0434 \u0441\u0435\u0431\u044f \u0434\u043e\u043f\u0438\u043b\u0438\u0442<\/p>\n<\/li>\n<\/ul>\n<h2>\u041f\u043e\u0441\u043b\u0435 \u0437\u0430\u043f\u0443\u0441\u043a\u0430<\/h2>\n<p>\u041f\u043e\u0441\u043b\u0435 \u0437\u0430\u043f\u0443\u0441\u043a\u0430 \u043c\u044b \u0443\u0432\u0438\u0434\u0438\u043c \u0432 \u043b\u043e\u0433\u0430\u0445 unifi-prometheus-controller \u043d\u0435\u0447\u0442\u043e \u043f\u043e\u0434\u043e\u0431\u043d\u043e\u0435<\/p>\n<pre><code>INFO[0000] Daemon start INFO[0000] Start http server INFO[0000] Start fatals catcher INFO[0000] Start signals catcher INFO[0000] Start access points updater INFO[0001] Http client authorized INFO[0001] Update access points list INFO[0001] Access point name Room1, ip 10.0.0.10 INFO[0001] Access point name Room2, ip 10.0.0.20<\/code><\/pre>\n<p>\u0442\u0435\u043f\u0435\u0440\u044c \u043c\u043e\u0436\u043d\u043e \u043e\u0431\u0440\u0430\u0442\u0438\u0442\u044c\u0441\u044f \u043a \u043d\u0430\u0448\u0435\u043c\u0443 \u043a\u043e\u043d\u0442\u0440\u043e\u043b\u043b\u0435\u0440\u0443 \u0447\u0442\u043e\u0431\u044b \u043f\u043e\u043b\u0443\u0447\u0438\u0442\u044c \u043c\u0435\u0442\u0440\u0438\u043a\u0438 \u043d\u0430\u0439\u0434\u0435\u043d\u043d\u044b\u0445 \u0442\u043e\u0447\u0435\u043a<\/p>\n<pre><code># curl -s http:\/\/127.0.0.1:8080\/metrics|grep ifOutOctets ifOutOctets{ap_name=\"Room1\",ap_ip=\"10.0.0.10\",ifAlias=\"\",ifDescr=\"ath0\",ifIndex=\"6\",ifName=\"ath0\"} 0 ifOutOctets{ap_name=\"Room1\",ap_ip=\"10.0.0.10\",ifAlias=\"\",ifDescr=\"ath1\",ifIndex=\"7\",ifName=\"ath1\"} 3.319545249e+09 ifOutOctets{ap_name=\"Room1\",ap_ip=\"10.0.0.10\",ifAlias=\"\",ifDescr=\"br0\",ifIndex=\"9\",ifName=\"br0\"} 2.7572029e+07 ifOutOctets{ap_name=\"Room1\",ap_ip=\"10.0.0.10\",ifAlias=\"\",ifDescr=\"eth0\",ifIndex=\"2\",ifName=\"eth0\"} 4.93001573e+08 ifOutOctets{ap_name=\"Room1\",ap_ip=\"10.0.0.10\",ifAlias=\"\",ifDescr=\"eth1\",ifIndex=\"3\",ifName=\"eth1\"} 0 ifOutOctets{ap_name=\"Room1\",ap_ip=\"10.0.0.10\",ifAlias=\"\",ifDescr=\"lo\",ifIndex=\"1\",ifName=\"lo\"} 3572 ifOutOctets{ap_name=\"Room1\",ap_ip=\"10.0.0.10\",ifAlias=\"\",ifDescr=\"teql0\",ifIndex=\"5\",ifName=\"teql0\"} 0 ifOutOctets{ap_name=\"Room1\",ap_ip=\"10.0.0.10\",ifAlias=\"\",ifDescr=\"vwire2\",ifIndex=\"8\",ifName=\"vwire2\"} 0 ifOutOctets{ap_name=\"Room2\",ap_ip=\"10.0.0.20\",ifAlias=\"\",ifDescr=\"ath0\",ifIndex=\"6\",ifName=\"ath0\"} 0 ifOutOctets{ap_name=\"Room2\",ap_ip=\"10.0.0.20\",ifAlias=\"\",ifDescr=\"ath1\",ifIndex=\"7\",ifName=\"ath1\"} 6.28150693e+08 ifOutOctets{ap_name=\"Room2\",ap_ip=\"10.0.0.20\",ifAlias=\"\",ifDescr=\"br0\",ifIndex=\"9\",ifName=\"br0\"} 2.7178302e+07 ifOutOctets{ap_name=\"Room2\",ap_ip=\"10.0.0.20\",ifAlias=\"\",ifDescr=\"eth0\",ifIndex=\"2\",ifName=\"eth0\"} 4.95262026e+08 ifOutOctets{ap_name=\"Room2\",ap_ip=\"10.0.0.20\",ifAlias=\"\",ifDescr=\"eth1\",ifIndex=\"3\",ifName=\"eth1\"} 0 ifOutOctets{ap_name=\"Room2\",ap_ip=\"10.0.0.20\",ifAlias=\"\",ifDescr=\"lo\",ifIndex=\"1\",ifName=\"lo\"} 8180 ifOutOctets{ap_name=\"Room2\",ap_ip=\"10.0.0.20\",ifAlias=\"\",ifDescr=\"teql0\",ifIndex=\"5\",ifName=\"teql0\"} 0 ifOutOctets{ap_name=\"Room2\",ap_ip=\"10.0.0.20\",ifAlias=\"\",ifDescr=\"vwire2\",ifIndex=\"8\",ifName=\"vwire2\"} 0 ifOutOctets{ap_name=\"Room2\",ap_ip=\"10.0.0.20\",ifAlias=\"\",ifDescr=\"wifi0\",ifIndex=\"4\",ifName=\"wifi0\"} 0<\/code><\/pre>\n<p>\u0437\u0430\u043f\u0440\u043e\u0441 \u0437\u0430\u043d\u0438\u043c\u0430\u0435\u0442 \u043a\u0430\u043a\u043e\u0435-\u0442\u043e \u0432\u0440\u0435\u043c\u044f, \u0447\u0435\u043c \u0431\u043e\u043b\u044c\u0448\u0435 \u0442\u043e\u0447\u0435\u043a &#8212; \u0442\u0435\u043c \u0434\u043e\u043b\u044c\u0448\u0435 \u0431\u0443\u0434\u0435\u0442 \u0440\u0430\u0431\u043e\u0442\u0430\u0442\u044c \u0437\u0430\u043f\u0440\u043e\u0441, \u043d\u043e \u043e\u043f\u0440\u043e\u0441 \u043f\u0440\u043e\u0438\u0441\u0445\u043e\u0434\u0438\u0442 \u0430\u0441\u0438\u043d\u0445\u0440\u043e\u043d\u043d\u043e \u0432 \u043c\u043d\u043e\u0433\u043e\u043f\u043e\u0442\u043e\u0447\u043d\u043e\u043c \u0440\u0435\u0436\u0438\u043c\u0435, \u0442\u0430\u043a \u0447\u0442\u043e \u043e\u0431\u044b\u0447\u043d\u043e \u043e\u043d \u0443\u043a\u043b\u0430\u0434\u044b\u0432\u0430\u0435\u0442\u0441\u044f \u0432 \u043f\u0440\u0438\u0435\u043c\u043b\u0435\u043c\u043e\u0435 \u0432\u0440\u0435\u043c\u044f (\u0443 \u043d\u0430\u0441 10 \u0442\u043e\u0447\u0435\u043a \u043e\u043f\u0440\u0430\u0448\u0438\u0432\u0430\u0435\u0442\u0441\u044f \u0437\u0430 10 \u0441\u0435\u043a\u0443\u043d\u0434)<\/p>\n<p>\u0442\u0430\u043a\u0436\u0435 \u043c\u0435\u0442\u0440\u0438\u043a\u0438 &#171;\u043e\u0431\u043e\u0433\u0430\u0449\u0430\u044e\u0442\u0441\u044f&#187; \u0442\u0435\u0433\u0430\u043c\u0438 \u0441 \u0438\u043c\u0435\u043d\u0435\u043c (ap_name) \u0438 ip-\u0430\u0434\u0440\u0435\u0441\u043e\u043c (ap_ip) \u043e\u043f\u0440\u043e\u0448\u0435\u043d\u043d\u044b\u0445 \u0442\u043e\u0447\u0435\u043a<\/p>\n<h2>Prometheus<\/h2>\n<p>\u041a\u0430\u043a \u0443\u0441\u0442\u0430\u043d\u0430\u0432\u043b\u0438\u0432\u0430\u0442\u044c prometheus \u044f \u0442\u0443\u0442 \u043f\u0438\u0441\u0430\u0442\u044c \u043d\u0435 \u0431\u0443\u0434\u0443, \u044d\u0442\u043e \u043d\u0435 \u044f\u0432\u043b\u044f\u0435\u0442\u0441\u044f \u0446\u0435\u043b\u044c\u044e \u0434\u0430\u043d\u043d\u043e\u0439 \u0441\u0442\u0430\u0442\u044c\u0438, \u0443 \u043d\u0430\u0441 \u044d\u0442\u043e \u0434\u0435\u043b\u043e \u0440\u0430\u0431\u043e\u0442\u0430\u0435\u0442 \u043d\u0430 \u0431\u0430\u0437\u0435 <a href=\"https:\/\/prometheus.io\/docs\/prometheus\/latest\/configuration\/configuration\/#kubernetes_sd_config\" rel=\"noopener noreferrer nofollow\">kubernetes_sd_config<\/a>, \u0432 \u043f\u0440\u0435\u0434\u0441\u0442\u0430\u0432\u043b\u0435\u043d\u043d\u043e\u043c \u043a\u043e\u043d\u0444\u0438\u0433\u0435 kubernetes \u0437\u0430\u0434\u0430\u0451\u0442\u0441\u044f \u0430\u043d\u043d\u043e\u0442\u0430\u0446\u0438\u044f, \u043a\u043e\u0442\u043e\u0440\u0430\u044f \u0441\u043e\u043e\u0431\u0449\u0430\u0435\u0442 \u0441\u0438\u0441\u0442\u0435\u043c\u0435 prometheus \u043f\u043e\u0440\u0442 \u0438 \u0440\u0443\u0447\u043a\u0443 \u0434\u043b\u044f \u043e\u043f\u0440\u043e\u0441\u0430<\/p>\n<h2>Grafana<\/h2>\n<p>\u041d\u0430\u043a\u043e\u043d\u0435\u0446, \u043f\u043e\u043a\u0430\u0436\u0443 \u043f\u0440\u043e\u0441\u0442\u0435\u043d\u044c\u043a\u0438\u0439 \u0434\u0430\u0448\u0431\u043e\u0440\u0434 <a href=\"https:\/\/grafana.com\/\" rel=\"noopener noreferrer nofollow\">grafana <\/a>\u0434\u043b\u044f \u043f\u0440\u043e\u0441\u043c\u043e\u0442\u0440\u0430 \u0433\u0440\u0430\u0444\u0438\u043a\u043e\u0432<\/p>\n<p>\u041f\u043e\u0441\u043b\u0435 \u0441\u043e\u0437\u0434\u0430\u043d\u0438\u044f \u0434\u0430\u0448\u0431\u043e\u0440\u0434\u0430 \u0441\u0440\u0430\u0437\u0443 \u0438\u0434\u0451\u043c \u0432 Dashboard settings, \u0441\u043e\u0437\u0434\u0430\u0451\u043c \u043f\u0435\u0440\u0435\u043c\u0435\u043d\u043d\u0443\u044e<\/p>\n<figure class=\"\"><figcaption><\/figcaption><\/figure>\n<figure class=\"full-width\"><figcaption><\/figcaption><\/figure>\n<pre><code>Query: ifOutOctets{ap_name=~\".+\"} Regex: \/ap_name=\"([^\"]+)\"\/<\/code><\/pre>\n<p>\u0441\u043c\u044b\u0441\u043b \u044d\u0442\u043e\u0439 \u043f\u0435\u0440\u0435\u043c\u0435\u043d\u043d\u043e\u0439 \u0432 \u0442\u043e\u043c, \u0447\u0442\u043e \u043c\u044b \u0432\u044b\u0431\u0438\u0440\u0430\u0435\u043c \u0432\u0441\u0435 \u0443\u043d\u0438\u043a\u0430\u043b\u044c\u043d\u044b\u0435 \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u044f ap_name, \u0447\u0442\u043e\u0431\u044b \u0434\u0430\u043b\u044c\u0448\u0435 \u044d\u0442\u043e \u043c\u043e\u0436\u043d\u043e \u0431\u044b\u043b\u043e \u0432\u044b\u0431\u0438\u0440\u0430\u0442\u044c \u0438\u0437 \u0441\u043f\u0438\u0441\u043a\u0430:<\/p>\n<figure class=\"\"><figcaption><\/figcaption><\/figure>\n<p>\u0442\u0435\u043f\u0435\u0440\u044c \u0441\u043e\u0437\u0434\u0430\u0451\u043c \u0433\u0440\u0430\u0444\u0438\u043a \u0438 \u043f\u0438\u0448\u0435\u043c \u0442\u0430\u043c \u0444\u043e\u0440\u043c\u0443\u043b\u044b<\/p>\n<figure class=\"full-width\"><figcaption><\/figcaption><\/figure>\n<pre><code>A: irate(ifOutOctets{ap_name=~\"[[ap_name]]\"}[5m])*8 A.Legend: {{ap_name}} {{ap_ip}} {{ifDescr}} out  B: irate(ifInOctets{ap_name=~\"[[ap_name]]\"}[5m])*-8 B.Legend: {{ap_name}} {{ap_ip}} {{ifDescr}} in<\/code><\/pre>\n<p>\u0443\u043c\u043d\u043e\u0436\u0435\u043d\u0438\u0435 \u043d\u0430 8 \u043d\u0435\u043e\u0431\u0445\u043e\u0434\u0438\u043c\u043e \u043f\u043e \u0442\u043e\u0439 \u043f\u0440\u0438\u0447\u0438\u043d\u0435, \u0447\u0442\u043e<\/p>\n<\/div>\n<\/div>\n<\/div>\n<\/div>\n","protected":false},"author":1,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[],"tags":[],"class_list":["post-331445","post","type-post","status-publish","format-standard","hentry"],"_links":{"self":[{"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=\/wp\/v2\/posts\/331445","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=%2Fwp%2Fv2%2Fcomments&post=331445"}],"version-history":[{"count":0,"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=\/wp\/v2\/posts\/331445\/revisions"}],"wp:attachment":[{"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=%2Fwp%2Fv2%2Fmedia&parent=331445"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=%2Fwp%2Fv2%2Fcategories&post=331445"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=%2Fwp%2Fv2%2Ftags&post=331445"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}