咱们用一个系列来解说从需要到上线、从代码到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-zerostar 反对咱们!

微信交换群

关注『微服务实际』公众号并点击 交换群 获取社区群二维码。