给路由器写一个prometheus的exporter

作者 : 开心源码 本文共1713个字,预计阅读时间需要5分钟 发布时间: 2022-05-13 共806人阅读

简介

最近忽然想给路由器做一个监控,最主要就是监控cpu,内存和进出流量什么的,得益于prometheus的灵活性,所以就想给路由器写一个prometheus的exporter来采集路由器上面的这些指标,而后放在grafana上展现。

代码地址

bboysoulcn/tp-link-exporter

路由器型号TL-ER5120G

欢迎star fork watch

思路

其实思路很简单,就是直接登录路由器抓取路由器上的这些接口来采集,所以第一个问题就是要登录路由器,而登录路由器最重要的是获取两个参数一个是获取登录之后的cookie还有就是链接上的stock参数,登录之后直接使用路由器的相关接口获取内存等值即可以了。

下面是路由器的登录接口

登录需要上传的参数

也就是上传账号和密码,密码是加密过的,看了网页的源代码,不知道是使用什么方式去加密的,所以我在代码中就直接传入这个加密之后的密码了,由于加密之后的值是固定的所以我就不理他了

登陆之后响应头会返回一个set-cookie的值,这个;path之前就是登陆之后的cookie

stok是登陆时候response回来的

之后就是获取路由器状态的接口

这个是获取cpu状态的,连接上带了登陆时候返回的stok这个参数

登陆获取数据代码

res = requests.post("http://"+ router_ip +"/cgi-bin/luci/;stok=/login?form=login",headers=header,data=data)

这个地方是登陆的操作

    cpu_usage_res = requests.post("http://"+router_ip+"/cgi-bin/luci/;stok=" + stok + "/admin/sys_status?form=cpu_usage",                      headers=header2, data=data2)    mem_usage_res = requests.post("http://"+router_ip+"/cgi-bin/luci/;stok=" + stok + "/admin/sys_status?form=mem_usage",                      headers=header2, data=data2)    ifstat_res = requests.post("http://"+router_ip+"/cgi-bin/luci/;stok=" + stok + "/admin/ifstat?form=list",                                  headers=header2, data=data2)

这里是获取数据

写prometheus相关的接口

prometheus的exporter有四个基本数据类型分别是

  • Counter 计数器,只增不减,在prometheus重启时候归零
  • Gauge 计量器, 比方cpu内存网络流量这些值,可增可减的就是这种类型
  • Histogram 柱状图,用于统计少量数据分布的情况。比方100ms-200ms请求的个数,300ms-400ms请求的个数,这些用于统计少量数据分布的情况,用于计算在肯定范围内的分布情况可以用到
  • Summary Summary摘要和Histogram柱状图比较相似,主要用于计算在肯定时间窗口范围内度量指标对象的总数以及所有对量指标值的总和。

所以对于我们来说有用的就是Gauge这个数据类型,下面是初始化内存,cpu和网络的代码

    cpu_usage_prom = Gauge("CPU", "TL-ER5120G cpu value", ["cpunum"])    mem_usage_prom = Gauge("MEM", "TL-ER5120G mem value", ["mem"])    speed_prom = Gauge("interface", "TL-ER5120G interface value", ["interface"])

对于不同cpu和网络的值的值我们可以为他们打上标签来区分,比方

cpu_usage_prom.labels("cpu1").set(cpu1_usage)

最后就是运行脚本,而后把数据加入prometheus,对接到grafana上

欢迎关注Bboysoul的博客www.bboy.app

Have Fun

说明
1. 本站所有资源来源于用户上传和网络,如有侵权请邮件联系站长!
2. 分享目的仅供大家学习和交流,您必须在下载后24小时内删除!
3. 不得使用于非法商业用途,不得违反国家法律。否则后果自负!
4. 本站提供的源码、模板、插件等等其他资源,都不包含技术服务请大家谅解!
5. 如有链接无法下载、失效或广告,请联系管理员处理!
6. 本站资源售价只是摆设,本站源码仅提供给会员学习使用!
7. 如遇到加密压缩包,请使用360解压,如遇到无法解压的请联系管理员
开心源码网 » 给路由器写一个prometheus的exporter

发表回复