influxdb数据旁路一份到prometheus后,prometheus的图有时延时很大,主要是在业务忙的 时候,闲的时候是可以处理到数据的。而influxdb的数据是可以正常显示的。而且这时牛逼 的google并帮不了忙,各种关键字去搜索都找不到相关的问题。

架构

调试过程

  1. 先去prometheus的web控制台看图。初看这个图感觉是没有问题的,数据是连续的。 prometheus_pic 仔细看,其实直线那段是没有数据有。用grafana配到同一个prometheus来看一下grafana的 图长这样 grafana_pic 在grafana是可以明显看到中间是丢了一段时间的。而且prometheus的图却是连续的。最开始我没有看出来。

  2. 把生产环境的docker部到自己的电脑,看控制台是没有问题的。所以猜想是生产环境的 数据量过大,prometheus没处理过来引起的。 上去生产环境抓包, 先找一下prometheus和influxdb_exporter的ip。

    1
    docker exec -it prometheus ip addr show

输出如下: prometheus用了eth0端口,ip:172.17.0.102

同样找出influxdb_exporter的ip:172.17.0.99

我们只抓这两台机器的包,免得其他的干扰:

1
tcpdump -i docker0 host 172.17.0.102 and 172.17.0.99

在13:32:28.162的时候prometheus发起握手,完了之后,发请求到influxdb_exporter拉数据
在13:32:32.112的时候influxdb_exporter发了数据包。然后prometheus接着就回了一下 rst的包了。后面influxdb_exporter应该是还没收到prometheus的rst包,继续发第二段包。 所以这个包prometheus是没有收到的。

找到prometheus的配置:

scrape_configs:

  • job_name: ‘prometheus’
    scrape_interval: 5s
    static_configs:
    • targets:
      • “influxdb_exporter:9122”

配置了5s去influxdb_exporter抓一次数据。而prometheus发rst包的时候,差不多在4s的时 间隔上。prometheus的5s配置包括了收包前后的处理和收包的过程,在13:32:32.112的时候 就回rst,以免雪崩。
把配置改成10s,重新拉起服务。可以看数据正常了。