prometheus+grafana
的系统监控方式用起来很不错,最近开始使用它来监控haipproxy和weibospider。由于网上相关的中文资料比较少,所以在使用它们的时候还是遇到很多坑。这篇文章主要提一下自己遇到的几个小坑。
1.如何显示对人类友好的时间?
有这么一个场景,我想对定时任务调度器下次调度任务的时间进行监控,Prometheus
中存储了下次调度的时间戳,数据类型是Gauge
,但是到了grafana
中通过options
中的unit
选项使用date&time
展示出来就是1970-01-01 xxxx
了,这个时间明显不对。后来在github上找到了work around的方法: 如果用的Graphite
作为数据源,那么可以直接进行使用scale
函数让时间戳扩大1000倍,就可以显示出正确的时间;但是prometheus
作为数据源没这个函数,还好prometheus
自带有一个time()
函数,可以返回表达式计算时的时间戳,因此我显示的是举例下次任务运行的倒计时,表达式为time()-(process_start_time_seconds)
。注意对于Gauge
的值的选择,应该选择current
,默认是 average
2.通过非本机访问grafana,数据一直加载失败?
这个问题困扰了我一个中午。我通过非grafana服务器访问grafana的服务的时候,prometheus的数据一直渲染不出来,如下图所示
grafana无法加载数据
但是通过直接在本机访问prormetheus和查询prometheus又没问题,手足无措的时候突然想到使用f12看看浏览器的资源加载情况,发现了一个问题
prometheus路径不对
从上图可以看出,这里取prometheus的数据是去的localhost:9090
,所以问题就出在这里,我们应该在grafana的配置面板配置data source
的时候,填写prometheus对外暴露的ip
这样就可以访问了。注意,这个过程我还遇到一个坑,就是URL
路径末尾不能加/
,即不能写成http://192.168.1.11:9090/
,否则还是无法加载数据,通过追踪它的网络请求可以发现已经被301重定向了,并且会抛出blocked by CORS policy
错误
网友评论