共计 3313 个字符,预计需要花费 9 分钟才能阅读完成。
咱们用一个系列来解说从需要到上线、从代码到 k8s 部署、从日志到监控等各个方面的微服务残缺实际。
整个我的项目应用了 go-zero 开发的微服务,根本蕴含了 go-zero 以及相干 go-zero 作者开发的一些中间件,所用到的技术栈根本是 go-zero 项目组的自研组件,根本是 go-zero 全家桶了。
实战我的项目地址:https://github.com/Mikaelemmm…
1、概述
好的服务肯定是能够被及时监控的,在 go-zero-looklook 中咱们应用目前比拟风行的 prometheus 来作为监控工具,而后应用 grafana 来显示
go-zero 曾经在代码中给咱们集成好了 prometheus
// StartAgent starts a prometheus agent.
func StartAgent(c Config) {if len(c.Host) == 0 {return}
once.Do(func() {enabled.Set(true)
threading.GoSafe(func() {http.Handle(c.Path, promhttp.Handler())
addr := fmt.Sprintf("%s:%d", c.Host, c.Port)
logx.Infof("Starting prometheus agent at %s", addr)
if err := http.ListenAndServe(addr, nil); err != nil {logx.Error(err)
}
})
})
}
无论当咱们启动 api、rpc 都会额定启动一个 goroutine 提供 prometheus 的服务
【注】如果像咱们之前 order-mq 这种应用 serviceGroup 治理的服务,在启动文件 main 中要显式调用一下才能够,api、rpc 不须要,配置都一样
package main
.....
func main() {
....
// log、prometheus、trace、metricsUrl.
if err := c.SetUp(); err != nil {panic(err)
}
......
}
2、实现
2.1 配置 prometheus 与 grafana
在我的项目下的 docker-compose-env.yml 文件中
咱们来 deploy/prometheus/server/prometheus.yml 看看 prometheus 配置文件
global:
scrape_interval:
external_labels:
monitor: 'codelab-monitor'
# 这里示意抓取对象的配置
scrape_configs:
- job_name: 'prometheus'
scrape_interval: 5s #重写了全局抓取间隔时间,由 15 秒重写成 5 秒
static_configs:
- targets: ['127.0.0.1:9090']
- job_name: 'order-api'
static_configs:
- targets: ['order-api:9091']
labels:
job: order-api
app: order-api
env: dev
- job_name: 'order-rpc'
static_configs:
- targets: ['order-rpc:9091']
labels:
job: order-rpc
app: order-rpc
env: dev
- job_name: 'order-mq'
static_configs:
- targets: ['order-mq:9091']
labels:
job: order-mq
app: order-mq
env: dev
- job_name: 'usercenter-api'
static_configs:
- targets: ['usercenter-api:9091']
labels:
job: usercenter-api
app: usercenter-api
env: dev
- job_name: 'usercenter-rpc'
static_configs:
- targets: ['usercenter-rpc:9091']
labels:
job: usercenter-rpc
app: usercenter-rpc
env: dev
- job_name: 'travel-api'
static_configs:
- targets: ['travel-api:9091']
labels:
job: travel-api
app: travel-api
env: dev
- job_name: 'travel-rpc'
static_configs:
- targets: ['travel-rpc:9091']
labels:
job: travel-rpc
app: travel-rpc
env: dev
- job_name: 'payment-api'
static_configs:
- targets: ['payment-api:9091']
labels:
job: payment-api
app: payment-api
env: dev
- job_name: 'payment-rpc'
static_configs:
- targets: ['payment-rpc:9091']
labels:
job: payment-rpc
app: payment-rpc
env: dev
- job_name: 'mqueue-rpc'
static_configs:
- targets: ['mqueue-rpc:9091']
labels:
job: mqueue-rpc
app: mqueue-rpc
env: dev
- job_name: 'message-mq'
static_configs:
- targets: ['message-mq:9091']
labels:
job: message-mq
app: message-mq
env: dev
- job_name: 'identity-api'
static_configs:
- targets: ['identity-api:9091']
labels:
job: identity-api
app: identity-api
env: dev
- job_name: 'identity-rpc'
static_configs:
- targets: ['identity-rpc:9091']
labels:
job: identity-rpc
app: identity-rpc
env: dev
2.2 业务配置
实现上咱们业务也不须要增加任何代码(除了 serviceGroup 治理的服务)
咱们只须要在业务配置文件中配置即可,咱们拿 usercenter 来举例
1)api
2)rpc
3)mq(serviceGroup)
【注】(再强调一次)如果像咱们之前 order-mq 这种应用 serviceGroup 治理的服务,在启动文件 main 中要显示调用一下才能够,api、rpc 不须要
package main
.....
func main() {
....
// log、prometheus、trace、metricsUrl.
if err := c.SetUp(); err != nil {panic(err)
}
......
}
2.3 查看
拜访 http://127.0.0.1:9090/,点击下面菜单“Status”,再点击 Targets , 蓝色的就是启动成了,红色就是没启动胜利
2.4 配置 grafana
拜访 http://127.0.0.1:3001,默认账号、明码都是 admin
配置数据源是 prometheus
而后配置
【注】这里是在 docker 中配置的,所以 http 的 url 不能写 127.0.0.1
查看是否配置胜利
配置 dashboard
而后点击第一个
咱们增加一个 cpu 指标,在下方输出 cpu 抉择
而后咱们就能够看到咱们想要看的监控指标
3、结尾
这里只演示了一个指标,其余想看的指标本人配置就能够了,同时你也能够在 grafana 增加 alert 报警配置,这个就不作为演示了自行整顿
我的项目地址
https://github.com/zeromicro/go-zero
欢送应用 go-zero
并 star 反对咱们!
微信交换群
关注『微服务实际 』公众号并点击 交换群 获取社区群二维码。