• 在 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. Windows 下 OpenSSH 安装使用

    OpenSSH 是安全 Shell (SSH) 工具的开放源代码版本,Linux 及其他非 Windows 系统的管理员使用此类工具跨平台管理远程系统. OpenSSH 在 2018 年秋季已添加至 ...

  2. 【离线数仓】Day02-用户行为数据仓库:分层介绍、环境搭建(hive、tez)、LZO压缩、建表查询导入加索引、编写脚本

    一.数仓分层概念 1.为什么要分层 ODS:原始数据层 DWD层:明细数据层 DWS:服务数据层 ADS:数据应用层 2.数仓分层 3.数据集市与数据仓库概念 4.数仓命名规范 ODS层命名为odsD ...

  3. 《HTTP权威指南》– 7.缓存

    Web缓存的概念 Web缓存是可以自动保存常见文档副本的HTTP设备. 使用缓存的优点: 减少了数据的数据传输,节省了网络费用: 缓解了网络瓶颈的问题,不需要更多的带宽就能更快地加载页面: 降低了原始 ...

  4. vue 单独封装分页组件

    一.在components文件夹下新建 pagination.vue <template> <div class="page-wrap"> <ul&g ...

  5. 利用Git同步思源笔记

    旧文章从语雀迁移过来,原日期为2022-10-22 思源笔记是一款优秀的本地优先的双链大纲笔记软件,拥有强大的笔记编辑功能且都是免费,唯一付费的就是云同步等一些服务了.但如果暂时还用不着云同步的,我们 ...

  6. A. Greatest Convex【Codeforces Round #842 (Div. 2)】

    A. Greatest Convex You are given an integer \(k\). Find the largest integer \(x\), where \(1≤x<k\ ...

  7. Codeforces Gym 104059B - Breeding Bugs

    简要题意 Virtual Judge 传送门 | Codeforces Gym 传送门 给出一个长度为 \(n\) 的序列 \(a\),你需要从中选出一些数,使其两两相加不为质数.输出最大可以选择多少 ...

  8. 使用Dapr和.NET 6.0进行微服务实战:Dapr简介

    大家好,我是张飞洪,感谢您的阅读,我会不定期和你分享学习心得,希望我的文章能成为你成长路上的垫脚石,让我们一起精进. 本文是<使用Dapr和.NET 6.0进行微服务实战>的第2篇Dapr ...

  9. Java基础学习笔记-类与对象

    对象 名称唯一 属性.数据区(值) 方法.功能 类 在软件中,类是一个模板,定义了一类事物的状态和行为 类是一种抽象的复合数据类型 类与对象的关系,这个跟JS也差不多 类和对象之间是抽象和具体的关系. ...

  10. 流程概述与顺序结构-选择结构_单if语句

    流程概述与顺序结构 概述 在一个程序执行的过程中,各条语句的执行顺序对程序的结果是有直接影响的.也就是说,程序的流程对运行结果 有直接的影响.所以,我们必须清楚每条语句的执行流程.而且,很多时候我们要 ...