共计 4636 个字符,预计需要花费 12 分钟才能阅读完成。
1、学习课程
带你十天轻松搞定 Go 微服务系列(八)- 服务监控
明天是学习 go 微服务的第八天,咱们持续接着昨天的步骤,搭建服务监控
2、增加服务
2.1 增加 user api 服务 Prometheus 配置
$ vim mall/service/user/api/etc/user.yaml
Name: User
Host: 0.0.0.0
Port: 8000
...
Prometheus:
Host: 0.0.0.0
Port: 9080
Path: /metrics
2.2 增加 user rpc 服务 Prometheus 配置
$ vim mall/service/user/rpc/etc/user.yaml
Name: user.rpc
ListenOn: 0.0.0.0:9000
...
Prometheus:
Host: 0.0.0.0
Port: 9090
Path: /metrics
2.3 增加 product api 服务 Prometheus 配置
$ vim mall/service/product/api/etc/product.yaml
Name: Product
Host: 0.0.0.0
Port: 8001
...
Prometheus:
Host: 0.0.0.0
Port: 9081
Path: /metrics
2.4 增加 product rpc 服务 Prometheus 配置
$ vim mall/service/product/rpc/etc/product.yaml
Name: product.rpc
ListenOn: 0.0.0.0:9001
...
Prometheus:
Host: 0.0.0.0
Port: 9091
Path: /metrics
2.5 增加 order api 服务 Prometheus 配置
$ vim mall/service/order/api/etc/order.yaml
Name: Order
Host: 0.0.0.0
Port: 8002
...
Prometheus:
Host: 0.0.0.0
Port: 9082
Path: /metrics
2.6 增加 order rpc 服务 Prometheus 配置
$ vim mall/service/order/rpc/etc/order.yaml
Name: order.rpc
ListenOn: 0.0.0.0:9002
...
Prometheus:
Host: 0.0.0.0
Port: 9092
Path: /metrics
2.7 增加 pay api 服务 Prometheus 配置
$ vim mall/service/pay/api/etc/pay.yaml
Name: Pay
Host: 0.0.0.0
Port: 8003
...
Prometheus:
Host: 0.0.0.0
Port: 9083
Path: /metrics
2.8 增加 pay rpc 服务 Prometheus 配置
$ vim mall/service/pay/rpc/etc/pay.yaml
Name: pay.rpc
ListenOn: 0.0.0.0:9003
...
Prometheus:
Host: 0.0.0.0
Port: 9093
Path: /metrics
提醒:配置批改后,须要重启服务才会失效。
3、批改 Prometheus 配置
在 第一章 环境搭建 中咱们集成了 Prometheus 服务,在 prometheus 目录下有个 prometheus.yml 的配置文件,咱们当初须要批改这个配置文件。
# my global config
global:
scrape_interval: 15s # Set the scrape interval to every 15 seconds. Default is every 1 minute.
evaluation_interval: 15s # Evaluate rules every 15 seconds. The default is every 1 minute.
# scrape_timeout is set to the global default (10s).
# Alertmanager configuration
alerting:
alertmanagers:
- static_configs:
- targets:
# - alertmanager:9093
# Load rules once and periodically evaluate them according to the global 'evaluation_interval'.
rule_files:
# - "first_rules.yml"
# - "second_rules.yml"
# A scrape configuration containing exactly one endpoint to scrape:
# Here it's Prometheus itself.
scrape_configs:
# The job name is added as a label `job=<job_name>` to any timeseries scraped from this config.
- job_name: "prometheus"
# metrics_path defaults to '/metrics'
# scheme defaults to 'http'.
static_configs:
- targets: ["localhost:9090"]
# 咱们本人的商城我的项目配置
- job_name: 'mall'
static_configs:
# 指标的采集地址
- targets: ['golang:9080']
labels:
# 自定义标签
app: 'user-api'
env: 'test'
- targets: ['golang:9090']
labels:
app: 'user-rpc'
env: 'test'
- targets: ['golang:9081']
labels:
app: 'product-api'
env: 'test'
- targets: ['golang:9091']
labels:
app: 'product-rpc'
env: 'test'
- targets: ['golang:9082']
labels:
app: 'order-api'
env: 'test'
- targets: ['golang:9092']
labels:
app: 'order-rpc'
env: 'test'
- targets: ['golang:9083']
labels:
app: 'pay-api'
env: 'test'
- targets: ['golang:9093']
labels:
app: 'pay-rpc'
env: 'test'
4、重启容器
配置文件批改好后,须要重启服务容器能力失效。
systemctl restart docker
5、启动所有服务
通过 exec 命令对指定的容器执行 bash,我是
docker exec -it 13258ded6d62 /bin/bash
而后在容器内开启所有服务
cd mall/service/user/rpc
go run user.go -f etc/user.yaml
cd mall/service/user/api
go run user.go -f etc/user.yaml
cd mall/service/product/rpc
go run product.go -f etc/product.yaml
cd mall/service/product/api
go run product.go -f etc/product.yaml
cd mall/service/order/rpc
go run order.go -f etc/order.yaml
cd mall/service/order/api
go run order.go -f etc/order.yaml
cd mall/service/pay/rpc
go run pay.go -f etc/pay.yaml
cd mall/service/pay/api
go run pay.go -f etc/pay.yaml
6、拜访 Prometheus 可视化界面
在 第一章 环境搭建 中咱们集成了 Prometheus 服务,并为其端口号 9090 做了宿主机端口 3000 的映射关系,所以在浏览器中输出 http:// 你的 IP:3000/ 拜访 Prometheus 界面。
抉择 Status -> Targets 菜单,即可看到咱们配置的采集指标的状态和自定义的标签。
咱们屡次拜访 api 服务的接口后,抉择 Graph 菜单,在查问输入框中输出 {path=”api 接口地址 ”} 或者 {method=”rpc 接口办法 ”} 指令,即可查看监控指标。
7、应用 Grafana 可视化 Prometheus 指标数据
7.1 增加 Prometheus 数据源
在 第一章 环境搭建 中咱们集成了 Grafana 服务,并为其端口号 3000 做了宿主机端口 4000 的映射关系,所以在浏览器中输出 http:// 你的 IP:4000/ 拜访 Grafana 界面。 登录的账号密码都是 admin,点击左侧边栏 Configuration -> Data Source -> Add data source 进行数据源增加。
而后抉择 Prometheus 数据源
填写 HTTP 配置中 URL 地址(我这里的 IP 地址 是 Prometheus 所在容器的 IP 地址)
而后点击 Save & test 按钮,上方会提醒 Data source is working,阐明咱们数据源增加胜利且失常工作。
7.2 增加 Variables 用于服务筛选
点击左侧边栏 Dashboard 抉择右上角 Dashboard settings 按钮,在 Settings 页面抉择 Variables -> Add variable 增加变量,不便针对不同的标签进行过滤筛选。
别离增加 api_app、API 服务名称,rpc_app、RPC 服务名称等 变量,用于不同服务的筛选。变量数据源抉择 Prometheus 数据源,应用正则表达式提取出对应的 app 标签。
7.3 增加 api 接口 qps 仪表盘
回到 Dashboard 页面抉择右上角 Add panel 按钮,而后再抉择 Add an empty panel 增加一个空的面板。
面板编辑页,批改面板题目为 API 接口 QPS,在 Metrics 中输出 sum(rate(http_server_requests_duration_ms_count{app="$api_app"}[5m])) by (path)
以 path 维度统计 api 接口的 qps
7.4 增加 rpc 接口 Qps 仪表盘
再新建一个面板,批改面板题目为 RPC 接口 QPS,在 Metrics 中输出 sum(rate(rpc_server_requests_duration_ms_count{app="$rpc_app"}[5m])) by (method)
以 method 维度统计 rpc 接口的 qps
7.5 增加 api 接口状态码仪表盘
再新建一个面板,批改面板题目为 API 接口状态码 ,在 Metrics 中输出 sum(rate(http_server_requests_code_total{app="$api_app"}[5m])) by (code)
以 code 维度统计 api 接口的状态码
7.6 增加 rpc 接口状态码仪表盘
再新建一个面板,批改面板题目为 RPC 接口状态码,在 Metrics 中输出 sum(rate(rpc_server_requests_code_total{app="$rpc_app"}[5m])) by (code)
以 code 维度统计 rpc 接口的状态码
7.7 保留仪表盘
调整下面板地位,抉择右上角 Save dashboard 按钮保留仪表盘。
8、测试
在 postman 测试用户注册接口,每次进行操作仪表盘就会反馈