使用 Grafana 监测服务状态

近期得知有些产品没有监控,导致几天后才发现出了问题,所以学习下做个技术储备,本文以一个简单的服务可用来进行服务保活监控。

先准备一个 docker 网络环境

docker network create server-network

一,暴露服务状态

提供状态数据

每秒发送一个心跳包 图1

暴露 metrics 接口

prometheus 会来访问 /metrics 定期同步数据

http.Handle("/metrics", promhttp.Handler())

打包发布

FROM golang
RUN mkdir server
WORKDIR server
COPY . .

RUN go build -o server
RUN chmod +x server

CMD [ "./server" ]
docker build --rm -t server .
docker run -d --network=server-network -p 8080:8080 --name=server server

二,配置 Prometheus

部署

创建一个配置文件 prometheus.yaml 后通过 docker 部署

scrape_configs:
- job_name: monitor
  scrape_interval: 10s
  static_configs:
  - targets:
    - server:8080
docker run -d --name prometheus --network=server-network -p 9090:9090 -v ~/code/docker/prometheus/prometheus.yaml:/etc/prometheus/prometheus.yml prom/prometheus

运行状态

进入 http://localhost:9090,点击菜单中的 Status -> Targets 即可看到下图中的页面。
图2

进入 Grapth 页面也可以看到一些简单的数据,不过很明显不能满足我们的需求,所以接下来是 Grafana

三,配置 Grafana

部署

docker run -d --network=server-network --name=grafana -p 3000:3000 grafana/grafana

配置

数据源

第一步添加数据源,数据源支持很多这种,我们这里使用 Prometheus 即可。
图3

图4

报警通知渠道

自然不可能放个人在那里一直盯着面板(真见过配置了监控不看的,就是拿来当摆饰的),配置好报警渠道,发生符合配置的规则时自动发送通知。 图5

监控面板

其实很多看上去不明觉历的图标就是用 Grafana 配置的,接下来我们也配置一个面板。 截屏2021-06-12 下午9.12.38.png

在新建面板的右下角选择我们前面配置的数据源,Metrics browser 选择我们定义的 Topic,此时上方折线图就会出现数据了。 这时候还不会自动报警,途中红色线段部分代表没有读取到数据。 截屏2021-06-12 下午9.16.28.png

报警规则

如图所示,当没有得到数据时将会触发报警,还有条件中每 5 秒检测一次数据是否小于 1,这里其实没有用到,因为如果存活目前拿到的都是 1,不存活则不会得到任何数据。 截屏2021-06-12 下午9.20.49.png

报警这里也有一个注意点,一个相同的报警在服务恢复前会被堵塞住。

最终运行的三个容器
截屏2021-06-12 下午9.30.30.png


四,统计时间段内请求次数

上次一直没找到这个,每个博主都说支持统计每秒错误次数,但就是不做,今天又试了下,发现使用 Counter 类型就可以,然后在查询的时候分割。

irate(http_request_count[1m])*6

这段代码里其实也不太懂,但看到的数据是最符合真实情况的,*6 猜测是因为每十秒一个区间。 截屏2021-06-15 18.08.01.png

本文链接:https://note.lilonghe.net/post/use-grafana-to-monitor-service-status.html

-- EOF --