Prometheus Too many open file问题定位

用了快半年的Prometheus了.但是经常出现too many open file错误.基本上跑半个月就会出问题.之前一直以为是prometheus本身的问题,由于太忙了.再加上清理了它的存储文件之后又能跑半个月.所以暂时就放下了。但是昨天晚上又挂了.不能忍了·。废话不多说.直接谷歌。然后在github上找到了这个issue.https://github.com/prometheus/prometheus/issues/1873. 细细看完,发现这个问题是上古世纪的问题.官方已经解决了。但是我这为何还出现这么古老的问题(注意只是问题,不是bug哈。是我姿势不对没用好它)呢? 在issue中,作者给了排查意见.于是乎开启”大家一起找茬”之旅

这个问题原因在issue上有说,我简单概述下.这个问题是由于prometheus打开存储文件时如果打开文件数超过系统限制它的fd数量的话就会出现too many open file. 所以关键要确认fd数量的limit

定位问题

  1. 根据作者提示.我先去看了系统有没有限制文件打开数量: 发现系统级的数量是65535足够用.而prometheus上看的确实这样:
  2. 怎么回事?会不会是Prometheus本身的限制?这个问题我觉得基本可以不用考虑,因为之前已经说了这个问题出现在上古世纪,官方已经解决了。那是不是Prometheus的进程被限制了呢?验证一下:
  3. 发现确实进程上被限制了.然后查看了下同机器上部署的pushgateway发现:
  4. 为何它是正常的?后来一想,它们俩的启动方式不一样.pushgateway是root权限直接启动的.而prometheus是交给了systemd管理.那么问题会不会出在systemd? 说实话我对systemd不熟.所以继续谷歌.然后找到了这个http://smilejay.com/2016/06/centos-7-systemd-conf-limits 帖子.照着帖子上的说明.做了下尝试:

    systemctl reload prometheus
    syetemctl restart prometheus
    

    之后发现: 生效了! 然后去prometheus上看了看. ok!搞定。 然后剩下的事情就只有交给时间检验了。

    部分图片太小,请放大web再看·