1、 背景
记录一次Prometheus存储位置修改,准生产环境部署的Prometheus隔了一段时间发现服务挂掉了,排查发现存储磁盘空间爆满导致的,Prometheus是一个时序数据库,所以采集到的数据建议存储位置相对给较大些!
2、排查
# 查看日志信息
systemctl status prometheus
journalctl -u prometheus.service -f
发现日志最后几行存在明显的错误信息(不能够打开目录,设备上没有剩余空间):
"opening storage failed: lock DB directory: open /data/lock: no space left on device"
这里我的Prometheus安装位置在/dcos下,相应的也挂载了400G的磁盘,由于没有指定存储位置,默认应该在dcos/prometheus/data/
目录下才合适
怀疑:可能是由于生产环境下部署的位置在
/data
目录下,而准生产环境为了方便直接将生产环境的所有内存拷贝过来一份导致服务启动时加载了之前的位置
由此可见两套环境完全一直还是很有必要的也很重要的,这次生产环境和准生产环境直接的目录挂在(甚至,生产环境中k8s节点间的数据挂载目录都不一样),给这次项目上云带来了一些的麻烦(没办法底层基础设施是别人搞得)
3、处理方法
- 将
/data/
目录下的所有Prometheus文件剪切到/dcos/prometheus/data
目录下(好在/data
目录下没有其他服务的问文件,全是Prometheus的存储文件) - 如果不想要以前的数据也可以直接删了不要
- 修改Prometheus启动命令,指定存储位置
--storage.tsdb.path="/dcos/prometheus/data/"
# 重启服务并检查
systemctl daemon-reload
systemctl start prometheus