• 在 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的更多相关文章

  1. ios游戏开发 Sprite Kit教程:初学者 1

    注:本文译自Sprite Kit Tutorial for Beginners 目录 Sprite Kit的优点和缺点 Sprite Kit vs Cocos2D-iPhone vs Cocos2D- ...

  2. Sprite Kit教程:初学者

    作者:Ray Wenderlich 原文出处:点击打开链接 http://www.raywenderlich.com/42699/spritekit-tutorial-for-beginners 转自 ...

  3. iOS Sprite Kit教程之滚动场景

    iOS Sprite Kit教程之滚动场景 滚动场景 在很多的游戏中,场景都不是静止的,而是滚动的,如在植物大战僵尸的游戏中,它的场景如图2.26所示. 图2.26  植物大战僵尸 在图2.26中,用 ...

  4. iOS Sprite Kit教程之场景的切换

    iOS Sprite Kit教程之场景的切换 Sprite Kit中切换场景 每一个场景都不是单独存在的.玩家可以从一个场景中切换到另外一个场景中.本小节,我们来讲解场景切换.在每一个游戏中都会使用到 ...

  5. iOS Sprite Kit教程之场景的设置

    iOS Sprite Kit教程之场景的设置 Sprite Kit中设置场景 在图2.8所示的效果中,可以看到新增的场景是没有任何内容的,本节将讲解对场景的三个设置,即颜色的设置.显示模式的设置以及测 ...

  6. iOS Sprite Kit教程之真机测试以及场景的添加与展示

    iOS Sprite Kit教程之真机测试以及场景的添加与展示 IOS实现真机测试 在进行真机测试之前,首先需要确保设备已经连在了Mac(或者Mac虚拟机)上,在第1.9.1小节开始,设备就一直连接在 ...

  7. iOS Sprite Kit教程之申请和下载证书

    iOS Sprite Kit教程之申请和下载证书 模拟器虽然可以实现真机上的一些功能,但是它是有局限的.例如,在模拟器上没有重力感应.相机机等.如果想要进行此方面的游戏的开发,进行程序测试时,模拟器显 ...

  8. iOS Sprite Kit教程之使用帮助文档以及调试程序

    iOS Sprite Kit教程之使用帮助文档以及调试程序 IOS中使用帮助文档 在编写代码的时候,可能会遇到很多的方法.如果开发者对这些方法的功能,以及参数不是很了解,就可以使用帮助文档.那么帮助文 ...

  9. iOS Sprite Kit教程之编写程序以及Xcode的介绍

    iOS Sprite Kit教程之编写程序以及Xcode的介绍 Xcode界面介绍 一个Xcode项目由很多的文件组成,例如代码文件.资源文件等.Xcode会帮助开发者对这些文件进行管理.所以,Xco ...

  10. iOS Sprite Kit教程之编敲代码以及Xcode的介绍

    iOS Sprite Kit教程之编敲代码以及Xcode的介绍 Xcode界面介绍 一个Xcode项目由非常多的文件组成,比如代码文件.资源文件等.Xcode会帮助开发人员对这些文件进行管理.所以,X ...

随机推荐

  1. 数据结构高阶--AVL(平衡二叉树)(图解+实现)

    AVL树(平衡二叉树) 概念 二叉搜索树虽可以缩短查找的效率,但如果数据有序或接近有序二叉搜索树将退化为单支树,查找元素相当于在顺序表中搜索元素,效率低下.因此为了解决这个问题,两位俄罗斯的数学家发明 ...

  2. 【kafka】JDBC connector进行表数据增量同步过程中的源表与目标表时间不一致问题解决

    〇.参考资料 一.现象 1.Oracle源表数据 2.PG同步后的表数据 3.现象 时间不一致,差了8个小时 4.查看对应的connector信息 (1)source { "connecto ...

  3. 【每日一题】【回溯】2021年12月29日-93. 复原 IP 地址

    有效 IP 地址 正好由四个整数(每个整数位于 0 到 255 之间组成,且不能含有前导 0),整数之间用 '.' 分隔. 例如:"0.1.2.201" 和 "192.1 ...

  4. 教你用JavaScript实现乘法游戏

    案例介绍 欢迎来的我的小院,我是霍大侠,恭喜你今天又要进步一点点了!我们来用JavaScript编程实战案例,做一个乘法积分游戏.乘法游戏主要通过用户输入的数值和程序计算的数值进行对比,正确积一分,错 ...

  5. Spring中使用@RequestBody注解接收的实体类中的某些参数为null

    1.问题描述 我写完一个接口,在用postman测试的时候,发现其中有一个参数cEnterpriseId明明是有值的,但接口controller接收到的该参数为null,但其他参数都不为null的. ...

  6. vivo 服务端监控体系建设实践

    作者:vivo 互联网服务器团队- Chen Ningning 本文根据"2022 vivo开发者大会"现场演讲内容整理而成. 经过几年的平台建设,vivo监控平台产品矩阵日趋完善 ...

  7. CSP-S2022 游记

    Day 998244350 模拟赛场场被学弟吊打.最后几天写了一堆随机化乱搞题以及奇怪的搜索,都是 CSP 不曾考的玩意(书接下文). 点分治已经敲烂了.最后两场每场一个. Day 499122175 ...

  8. 基于Udp通讯的Java局域网群聊小程序

    /**基于Udp通讯的Java局域网群聊小程序 */package com.UdpDemo; import java.net.*; import java.awt.*; import java.awt ...

  9. centos7.6在防火墙放开端口

    假设要在centos7.6防火墙上开启443端口 前言:文章内容可能会因环境不同而有所差异,所谓集思广益说不定灵感就来了呢; 文章初衷旨在交流学习.记录个人成长,如果能帮助到您,那就点个赞噢. 1.查 ...

  10. Ubuntu 22.04 显示检测到窗口系统采用wayland协议

    解决方法 sudo vim /etc/gdm3/custom.conf #WaylandEnable=false 的注释井号去掉 sudo service gdm3 restart 参考资料 http ...