使用Grafana+ Prometheus 对 Go 应用程序进行监测

263 阅读3分钟

1、准备工作

测试场景:阿里轻量应用服务器(Ubuntu 18.04)部署go应用,利用Grapha和Prometheus进行监测。在本地Windows环境下使用SSH访问Linux服务器的浏览器页面来查看监测结果。 需要提前安装的有:

检测使用的go应用采用的是下面某位大佬写的example github.com/scotwells/p…,不过该项目中有些部分需要进行修改:

  • prometheus.Handler()在最新的prometheus版本中不再使用了,可以使用promhttp.Handler();
  • 在建议将prometheus.yaml中的'docker.for.mac.localhost:9009'改为'服务器公网ip:9009',以防出现prometheus无法获取指标数据的情况。

项目配置:

  • docker-compose.yaml
grafana:  
    image: grafana/grafana:latest  
    ports:  
    - 3000:3000   
    volumes:  
    - ./.docker/grafana:/var/lib/grafana  
prometheus:  
    image: prom/prometheus:latest  
    ports:  
    - 9090:9090  
    volumes:  
    - ./prometheus.yml:/etc/prometheus/prometheus.yml

该yaml文件中规定了grafana和prometheus,其中的端口需要注意一下,在后面验证应用是否被正常监测的时候需要使用。

2、监测实验流程

  1. 运行main.go

    $ go run job-processor/main.go
    
  2. 启动grafana和prometheus

    $ cd job-processor
    $ docker-compose up
    

在多次测试的时候,可能出现3030端口已被使用的情况,可以将grafana的服务停止之后再运行即可(service grafana-server stop)

  1. 在windows端使用Grafana查看监测结果

首先需要通过ssh来访问Linux端的浏览器页面:

ssh username@remote_address -L 127.0.0.1:8888:服务器ip:3030

8888是本地端口,3030是服务器上的Grafana的端口,username是服务器用户名,remote_address是服务器IP,进行上一步之后就可以在Windows的浏览器中通过http://127.0.0.1:8888 来访问Grafana查看监测数据情况。同理也可以查看prometheus的web界面

image.png

3、可能出现的问题

(1)not writeable,Permission denied

在docker-compose up的时候可能会出现以下情况 image.png 解决办法是先找到user的id:

id -u

在docker-compose.yaml做如下修改:

grafana:  
    image: grafana/grafana:latest  
    ports:  
    - 3000:3000  
    user: "0"  
    volumes:  
    - ./.docker/grafana:/var/lib/grafana 

(2)grafana没有数据显示

在进行实验的时候,访问http://127.0.0.1:8888 很可能就出现没有数据的情况,可以进行如下几个排查的思路:

  • 查看Grafana时间是否一致

grafana时间不一致.png

在遇到时间不一致的情况的时候,可以在setting中设置 ![image.png](https://p9-juejin.byteimg.com/tos-cn-i-k3u1fbpfcp/6f6b51fdd6a844fe9dfae41b26786c99~tplv-k3u1fbpfcp-watermark.image?)
  • 查看数据源是否有数据

在调整了时间之后还是无法获取数据的时候,需要看看数据源也就是prometheus是否监测到了数据,主要方法可以首先查看9090端口的matrics有无log输出来判断是否有数据监测到了。 image.png 如果正常则会有以下输出结果: image.png

  • 查看prometheus的web页面查看监听是否成功 image.png 如果state一般是up的话,基本上Grafana就可以显示数据了。如果state是Done的话,可以通过Error信息排查,在我的实验过程中出现了connect: connection refused的情况,通过将prometheus.yaml中改为公网IP之后得到了解决。可以参考博客blog.csdn.net/feikillyou/…