9.【go-kit教程】go-kit集成Prometheus
在 Go kit 中集成 Prometheus 进行 API 监控可以帮助开发人员更好地了解系统的性能和行为,提高系统的可观察性和可靠性。下面是一个简单的示例,演示如何在 Go kit 中集成 Prometheus 进行 API 监控:
package main import (
"net/http" "github.com/go-kit/kit/log"
"github.com/go-kit/kit/metrics/prometheus"
"github.com/go-kit/kit/metrics/provider"
"github.com/go-kit/kit/transport"
httptransport "github.com/go-kit/kit/transport/http"
"github.com/prometheus/client_golang/prometheus/promhttp"
) func main() {
// 创建 Prometheus 监控器
fieldKeys := []string{"method", "error"}
requestCount := prometheus.NewCounterFrom(provider.NewProvider(), prometheus.CounterOpts{
Namespace: "my_api",
Name: "request_count",
Help: "Number of requests received.",
}, fieldKeys)
requestLatency := prometheus.NewSummaryFrom(provider.NewProvider(), prometheus.SummaryOpts{
Namespace: "my_api",
Name: "request_latency",
Help: "Total duration of requests in microseconds.",
}, fieldKeys) // 创建 endpoint
helloEndpoint := func() string {
return "Hello, World!"
}
helloEndpoint = transport.NewServer(
helloEndpoint,
func(ctx context.Context, r *http.Request) (interface{}, error) {
return nil, nil
},
func(ctx context.Context, w http.ResponseWriter, response interface{}) error {
w.Header().Set("Content-Type", "text/plain; charset=utf-8")
fmt.Fprint(w, response.(string))
return nil
},
transport.ServerErrorLogger(log.NewNopLogger()),
transport.ServerErrorEncoder(errorEncoder),
transport.ServerBefore(prometheus.HTTPToContext()),
).Endpoint() // 创建 HTTP server
r := mux.NewRouter()
r.Handle("/hello", httptransport.NewServer(
helloEndpoint,
httpDecodeRequest,
httpEncodeResponse,
httptransport.ServerBefore(prometheus.HTTPToContext()),
httptransport.ServerErrorLogger(log.NewNopLogger()),
httptransport.ServerErrorEncoder(errorEncoder),
httptransport.ServerBefore(prometheus.HTTPToContext()),
)).Methods("GET")
r.Handle("/metrics", promhttp.Handler()) fmt.Println("listening on :8080...")
http.ListenAndServe(":8080", r)
} func httpDecodeRequest(_ context.Context, r *http.Request) (interface{}, error) {
return nil, nil
} func httpEncodeResponse(_ context.Context, w http.ResponseWriter, response interface{}) error {
w.Header().Set("Content-Type", "text/plain; charset=utf-8")
fmt.Fprint(w, response.(string))
return nil
} func errorEncoder(_ context.Context, err error, w http.ResponseWriter) {
w.Header().Set("Content-Type", "text/plain; charset=utf-8")
w.WriteHeader(http.StatusBadRequest)
fmt.Fprint(w, err.Error())
}
9.【go-kit教程】go-kit集成Prometheus的更多相关文章
- ios游戏开发 Sprite Kit教程:初学者 1
注:本文译自Sprite Kit Tutorial for Beginners 目录 Sprite Kit的优点和缺点 Sprite Kit vs Cocos2D-iPhone vs Cocos2D- ...
- Sprite Kit教程:初学者
作者:Ray Wenderlich 原文出处:点击打开链接 http://www.raywenderlich.com/42699/spritekit-tutorial-for-beginners 转自 ...
- iOS Sprite Kit教程之滚动场景
iOS Sprite Kit教程之滚动场景 滚动场景 在很多的游戏中,场景都不是静止的,而是滚动的,如在植物大战僵尸的游戏中,它的场景如图2.26所示. 图2.26 植物大战僵尸 在图2.26中,用 ...
- iOS Sprite Kit教程之场景的切换
iOS Sprite Kit教程之场景的切换 Sprite Kit中切换场景 每一个场景都不是单独存在的.玩家可以从一个场景中切换到另外一个场景中.本小节,我们来讲解场景切换.在每一个游戏中都会使用到 ...
- iOS Sprite Kit教程之场景的设置
iOS Sprite Kit教程之场景的设置 Sprite Kit中设置场景 在图2.8所示的效果中,可以看到新增的场景是没有任何内容的,本节将讲解对场景的三个设置,即颜色的设置.显示模式的设置以及测 ...
- iOS Sprite Kit教程之真机测试以及场景的添加与展示
iOS Sprite Kit教程之真机测试以及场景的添加与展示 IOS实现真机测试 在进行真机测试之前,首先需要确保设备已经连在了Mac(或者Mac虚拟机)上,在第1.9.1小节开始,设备就一直连接在 ...
- iOS Sprite Kit教程之申请和下载证书
iOS Sprite Kit教程之申请和下载证书 模拟器虽然可以实现真机上的一些功能,但是它是有局限的.例如,在模拟器上没有重力感应.相机机等.如果想要进行此方面的游戏的开发,进行程序测试时,模拟器显 ...
- iOS Sprite Kit教程之使用帮助文档以及调试程序
iOS Sprite Kit教程之使用帮助文档以及调试程序 IOS中使用帮助文档 在编写代码的时候,可能会遇到很多的方法.如果开发者对这些方法的功能,以及参数不是很了解,就可以使用帮助文档.那么帮助文 ...
- iOS Sprite Kit教程之编写程序以及Xcode的介绍
iOS Sprite Kit教程之编写程序以及Xcode的介绍 Xcode界面介绍 一个Xcode项目由很多的文件组成,例如代码文件.资源文件等.Xcode会帮助开发者对这些文件进行管理.所以,Xco ...
- iOS Sprite Kit教程之编敲代码以及Xcode的介绍
iOS Sprite Kit教程之编敲代码以及Xcode的介绍 Xcode界面介绍 一个Xcode项目由非常多的文件组成,比如代码文件.资源文件等.Xcode会帮助开发人员对这些文件进行管理.所以,X ...
随机推荐
- 数据结构高阶--AVL(平衡二叉树)(图解+实现)
AVL树(平衡二叉树) 概念 二叉搜索树虽可以缩短查找的效率,但如果数据有序或接近有序二叉搜索树将退化为单支树,查找元素相当于在顺序表中搜索元素,效率低下.因此为了解决这个问题,两位俄罗斯的数学家发明 ...
- 【kafka】JDBC connector进行表数据增量同步过程中的源表与目标表时间不一致问题解决
〇.参考资料 一.现象 1.Oracle源表数据 2.PG同步后的表数据 3.现象 时间不一致,差了8个小时 4.查看对应的connector信息 (1)source { "connecto ...
- 【每日一题】【回溯】2021年12月29日-93. 复原 IP 地址
有效 IP 地址 正好由四个整数(每个整数位于 0 到 255 之间组成,且不能含有前导 0),整数之间用 '.' 分隔. 例如:"0.1.2.201" 和 "192.1 ...
- 教你用JavaScript实现乘法游戏
案例介绍 欢迎来的我的小院,我是霍大侠,恭喜你今天又要进步一点点了!我们来用JavaScript编程实战案例,做一个乘法积分游戏.乘法游戏主要通过用户输入的数值和程序计算的数值进行对比,正确积一分,错 ...
- Spring中使用@RequestBody注解接收的实体类中的某些参数为null
1.问题描述 我写完一个接口,在用postman测试的时候,发现其中有一个参数cEnterpriseId明明是有值的,但接口controller接收到的该参数为null,但其他参数都不为null的. ...
- vivo 服务端监控体系建设实践
作者:vivo 互联网服务器团队- Chen Ningning 本文根据"2022 vivo开发者大会"现场演讲内容整理而成. 经过几年的平台建设,vivo监控平台产品矩阵日趋完善 ...
- CSP-S2022 游记
Day 998244350 模拟赛场场被学弟吊打.最后几天写了一堆随机化乱搞题以及奇怪的搜索,都是 CSP 不曾考的玩意(书接下文). 点分治已经敲烂了.最后两场每场一个. Day 499122175 ...
- 基于Udp通讯的Java局域网群聊小程序
/**基于Udp通讯的Java局域网群聊小程序 */package com.UdpDemo; import java.net.*; import java.awt.*; import java.awt ...
- centos7.6在防火墙放开端口
假设要在centos7.6防火墙上开启443端口 前言:文章内容可能会因环境不同而有所差异,所谓集思广益说不定灵感就来了呢; 文章初衷旨在交流学习.记录个人成长,如果能帮助到您,那就点个赞噢. 1.查 ...
- Ubuntu 22.04 显示检测到窗口系统采用wayland协议
解决方法 sudo vim /etc/gdm3/custom.conf #WaylandEnable=false 的注释井号去掉 sudo service gdm3 restart 参考资料 http ...