微服务从代码到k8s部署应有尽有系列(十三、服务监控)
我们用一个系列来讲解从需求到上线、从代码到k8s部署、从日志到监控等各个方面的微服务完整实践。
整个项目使用了go-zero开发的微服务,基本包含了go-zero以及相关go-zero作者开发的一些中间件,所用到的技术栈基本是go-zero项目组的自研组件,基本是go-zero全家桶了。
实战项目地址:https://github.com/Mikaelemmmm/go-zero-looklook
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 支持我们!
微信交流群
关注『微服务实践』公众号并点击 交流群 获取社区群二维码。
微服务从代码到k8s部署应有尽有系列(十三、服务监控)的更多相关文章
- 微服务从代码到k8s部署应有尽有系列(一)
从本篇文章开始,我们用一个系列来讲解从需求到上线.从代码到k8s部署.从日志到监控等各个方面的微服务完整实践. 实战项目地址:https://github.com/Mikaelemmmm/go-zer ...
- 微服务从代码到k8s部署应有尽有系列(二、网关)
我们用一个系列来讲解从需求到上线.从代码到k8s部署.从日志到监控等各个方面的微服务完整实践. 整个项目使用了go-zero开发的微服务,基本包含了go-zero以及相关go-zero作者开发的一些中 ...
- 微服务从代码到k8s部署应有尽有系列(三、鉴权)
我们用一个系列来讲解从需求到上线.从代码到k8s部署.从日志到监控等各个方面的微服务完整实践. 整个项目使用了go-zero开发的微服务,基本包含了go-zero以及相关go-zero作者开发的一些中 ...
- 微服务从代码到k8s部署应有尽有系列(四、用户中心)
我们用一个系列来讲解从需求到上线.从代码到k8s部署.从日志到监控等各个方面的微服务完整实践. 整个项目使用了go-zero开发的微服务,基本包含了go-zero以及相关go-zero作者开发的一些中 ...
- 微服务从代码到k8s部署应有尽有系列(五、民宿服务)
我们用一个系列来讲解从需求到上线.从代码到k8s部署.从日志到监控等各个方面的微服务完整实践. 整个项目使用了go-zero开发的微服务,基本包含了go-zero以及相关go-zero作者开发的一些中 ...
- 微服务从代码到k8s部署应有尽有系列(六、订单服务)
我们用一个系列来讲解从需求到上线.从代码到k8s部署.从日志到监控等各个方面的微服务完整实践. 整个项目使用了go-zero开发的微服务,基本包含了go-zero以及相关go-zero作者开发的一些中 ...
- 微服务从代码到k8s部署应有尽有系列(十四、部署环境搭建)
我们用一个系列来讲解从需求到上线.从代码到k8s部署.从日志到监控等各个方面的微服务完整实践. 整个项目使用了go-zero开发的微服务,基本包含了go-zero以及相关go-zero作者开发的一些中 ...
- 微服务从代码到k8s部署应有尽有系列(七、支付服务)
我们用一个系列来讲解从需求到上线.从代码到k8s部署.从日志到监控等各个方面的微服务完整实践. 整个项目使用了go-zero开发的微服务,基本包含了go-zero以及相关go-zero作者开发的一些中 ...
- 微服务从代码到k8s部署应有尽有系列(八、各种队列)
我们用一个系列来讲解从需求到上线.从代码到k8s部署.从日志到监控等各个方面的微服务完整实践. 整个项目使用了go-zero开发的微服务,基本包含了go-zero以及相关go-zero作者开发的一些中 ...
- 微服务从代码到k8s部署应有尽有系列(九、事务精讲)
我们用一个系列来讲解从需求到上线.从代码到k8s部署.从日志到监控等各个方面的微服务完整实践. 整个项目使用了go-zero开发的微服务,基本包含了go-zero以及相关go-zero作者开发的一些中 ...
随机推荐
- elasticsearch查询之大数据集分页性能测试
一.测试环境 python 3.7 elasticsearch 6.8 elasticsearch-dsl 7 安装elasticsearch-dsl pip install elasticsearc ...
- Uwl.Admin.Core开源框架(二) 使用QuartzNet
Uwl.Admin.Core中使用QuartzNet定时任务模块: 本文负责讲解RabbitMQ的使用 Uwl.Admin.Core使用的技术有: *.Async和Await 异步编程 *.Repos ...
- 线程池与Callable接口
定义: 一个容纳多个线程的容器,其中的线程可以反复使用,省去了频繁创建线程对象的操作,无需反复创建线程而消耗过多资源. 使用方法 public void lockDemo() throws Inter ...
- 自定义ASP.NET MVC Html标签辅助方法
原文:https://blog.csdn.net/a497785609/article/details/50184779 在ASP.NET MVC中,Html辅助方法给我们程序员带来很多方便,其重要性 ...
- winSCP上传文件到服务器失败,提示permission denied,返回码3
1.查看sftp服务在你服务器的路径 cat /etc/ssh/sshd_config | grep sftp 2.在winSCP进行连接设置 设置好你的主机名.端口.用户名和密码,然后点击高级,点击 ...
- ansible学习(二)- 清单配置详解
出处:http://www.zsythink.net/archives/2509 上一篇文章介绍了ansible的基本概念,以及相关的基础配置,我们已经知道,如果想要管理受管主机,则需要将受管主机添加 ...
- php include,require,include_once,require_once 的区别
include(),require(),include_once(),require_once()作用都是包含并运行指定文件,但是使用场景又有很大区别. 1.include()和require()的区 ...
- Ubuntu下Java JDK安装
1.仓库安装 待更新 2.手动安装 1.下载linux平台sdk. 官网:https://www.oracle.com/technetwork/java/javase/downloads/index. ...
- NSSet和NSMutableSet - By吴帮雷
1.NSSet的使用 [NSSet setWithSet:(NSSet *)set]; 用另外一个set对象构造 [NSSet setWithArray:(NSArray *)array];用数组构造 ...
- shell——eval exec
eval # cat test.sh echo \$$# eval "echo \$$#" # sh test.sh a b c $3 c shell的内建命令exec将并不启动新 ...