go-kit 微服务 服务监控(prometheus 实现)
prometheus
相关介绍使用请看文章《docker安装prometheus(普罗米修斯)》
Prometheus 的四种数据类型
Counter(计数器) 它是一个只能递增的数值,重启进程后会被重置 (例如记录:请求次数、任务完成数、错误发生次数)
Gauge(测量器) 它表示一个既可以递增, 又可以递减的值,重启进程后,会被重置 (例如 温度变化、CPU,内存,网络使用变化)
Histogram(柱状图)
每个采样点进行统计,打到各个分类值中(bucket)
对每个采样点值累计和(sum)
对采样点的次数累计和(count)
例如:请求耗时、响应大小。
Summary 类似histogram柱状图,summary是采样点分位图统计
有一个quantiles的功能,可以按%比划分跟踪的结果。例如:quantile取值0.85,表示取采样值里面的85%数据。
例如:请求耗时、响应大小。
具体区别可看文档histogram和summaries
定义统计服务中间件
创建metricsMiddlewareServer结构体
type metricsMiddlewareServer struct {
next Service
counter metrics.Counter
histogram metrics.Histogram
}
创建NewMetricsMiddlewareServer把统计对象嵌入中间件(其实就是对Service添加了一层装饰)
func NewMetricsMiddlewareServer(counter metrics.Counter, histogram metrics.Histogram) NewMiddlewareServer {
return func(service Service) Service {
return metricsMiddlewareServer{
next: service,
counter: counter,
histogram: histogram,
}
}
}
让metricsMiddlewareServer实现Service中的全部方法
func (l metricsMiddlewareServer) Login(ctx context.Context, in *pb.Login) (out *pb.LoginAck, err error) {
defer func(start time.Time) {
method := []string{"method","login"}
l.counter.With(method...).Add(1)//统计请求次数
l.histogram.With(method...).Observe(time.Since(start).Seconds())//统计请求耗时
}(time.Now())
out, err = l.next.Login(ctx, in)
return
}
定义prometheus (Counter 与 Histogram)
count := metricsprometheus.NewCounterFrom(prometheus.CounterOpts{
Subsystem: "user_agent",
Name: "request_count",
Help: "Number of requests",
}, []string{"method"})
histogram := metricsprometheus.NewHistogramFrom(prometheus.HistogramOpts{
Subsystem: "user_agent",
Name: "request_consume",
Help: "Request consumes time",
}, []string{"method"})
实现 prometheus http服务
utils.GetLogger().Info("[user_agent] prometheus run " + *prometheusAddr)
m := http.NewServeMux()
m.Handle("/metrics", promhttp.Handler())
quitChan <- http.ListenAndServe(*prometheusAddr, m)
编写prometheus配置文件
global:
scrape_interval: 15s
external_labels:
monitor: 'codelab-monitor'
scrape_configs:
- job_name: 'user_agent'
metrics_path: "/metrics"
scrape_interval: 5s
static_configs:
- targets: ['192.168.2.28:10001']
运行
运行 TestNewUserAgentClient 方法 (调用Login接口20次)
我们登录 http://127.0.0.1:9090/ prometheus后台查询信息
结语
prometheus的用法还有很多,这里只展示简单的统计接口请求量和请求耗时,还有监控mysql,redis等
欢迎添加QQ一起讨论
联系 QQ: 3355168235