prometheus 打点实现

        Prometheus 是一个开源的系统监控和告警工具包,最开始是在 2012 年左右的时候由谷歌的工程师研发,设计用于对时间序列数据的收集和处理,特别适合于云原生环境的监控。后来在 2016 年 5 月的时候加入了云原生计算基金会,成为继 Kubernetes 之后的第二个 CNCF 托管项目。它的优势在于简单、灵活和云原生环境的适应性,配合 grafana 可视化监控平台展示的各项度量指标,使其成为各个互联网公司业务监控告警的首选工具。

        Prometheus 系统有许多优势,首先它易于管理,极大的简化了部署和管理过程,同时采用灵活的多维数据模型,每个时间序列数据由键值对组成,查询非常高效;其次它支持强大的查询语言,支持复杂查询和聚合函数,方便提取各种信息;另外它可扩展、易于集成、高可用低成本,特别是它的高性能,轻松应对百万级指标和 10 万 QPS 的数据上报。

  • java 实现
import java.net.URL;
import io.prometheus.client.Gauge;
import io.prometheus.client.Counter;
import io.prometheus.client.CollectorRegistry;
import io.prometheus.client.exporter.PushGateway;
import org.apache.commons.configuration.PropertiesConfiguration;


public class FrzcPrometheus {
    private static String               job;                    // Job 名称
    private static PushGateway          pushGateway;            // Gateway 实例
    private static CollectorRegistry    collectorRegistry;      // Registry 实例

    /**
     * 初始资源
     */
    public static void initFrzcPrometheus(PropertiesConfiguration propertiesConfiguration) {
        try {
            collectorRegistry = new CollectorRegistry();
            job = propertiesConfiguration.getString("prometheus.job");
            pushGateway = new PushGateway(new URL(propertiesConfiguration.getString("prometheus.url")));
        } catch (Exception e) {
            e.printStackTrace();
        }
    }

    /**
     * 测量器注册
     */
    public static Gauge registerGauge(String name, String help) {
        return Gauge.build().name(name).help(help).register(collectorRegistry);
    }

    /**
     * 计数器注册
     */
    public static Counter registerCounter(String name, String help) {
        return Counter.build().name(name).help(help).register(collectorRegistry);
    }

    /**
     * 计时器注册
     */
    public static Gauge.Timer registerGaugeTimer(String name, String help) {
        Gauge gauge = registerGauge(name, help);
        return gauge.startTimer();
    }

    /**
     * 计数器提交
     */
    public static void inc(Counter counter) {
        try {
            counter.inc();
            pushGateway.pushAdd(collectorRegistry, job);
        } catch (Exception e) {
            e.printStackTrace();
        }
    }

    /**
     * 计时器复位
     */
    public static Gauge.Timer reset(Gauge gauge) {
        return gauge.startTimer();
    }

    /**
     * 计时器提交
     */
    public static void timer(Gauge.Timer timer) {
        try {
            timer.setDuration();
            pushGateway.pushAdd(collectorRegistry, job);
        } catch (Exception e) {
            e.printStackTrace();
        }
    }
}
  • python 实现
import os
from prometheus_client.core import CollectorRegistry
from prometheus_client import Counter, Summary, push_to_gateway

url = os.getenv("PROMETHEUS_URL")
job = os.getenv("PROMETHEUS_JOB")

registry = CollectorRegistry(auto_describe=False)
flow_timer = Summary('flow_timer', 'flow_timer 耗时', registry=registry)
flow_error = Counter("flow_error", "flow_error 错误数", registry=registry)
flow_request = Counter("flow_request", "flow_request 请求数", registry=registry)
flow_response = Counter("flow_response", "flow_response 应答数", registry=registry)


class Workflow:
    @staticmethod
    @flow_timer.time()
    def check_workflow(text):
        flow_request.inc()
        // 业务处理
        flow_response.inc()
        push_to_gateway(url, job, registry=registry)
        return 'very good'
  • golang 实现
package prometheus

import (
	"github.com/prometheus/client_golang/prometheus"
	"github.com/prometheus/client_golang/prometheus/promauto"
	"github.com/prometheus/client_golang/prometheus/push"
	"./pkg/config"
	"time"
)

var DefaultPrometheus *Prometheus

type Prometheus struct {
	pusher *push.Pusher
}

func NewPrometheus() *Prometheus {
	registry := prometheus.NewRegistry()
	cfg := config.NewConfig("prometheus.json")
	pusher := push.New(cfg.GetString("prometheus.url"), cfg.GetString("prometheus.job")).Gatherer(registry)
	return &Prometheus{
		pusher: pusher,
	}
}

// NewPrometheusGauge 测量器注册
func NewPrometheusGauge(name, help string) prometheus.Gauge {
	return promauto.NewGauge(
		prometheus.GaugeOpts{
			Name: name,
			Help: help,
		},
	)
}

// NewPrometheusCounter 计数器注册
func NewPrometheusCounter(name, help string) prometheus.Counter {
	return promauto.NewCounter(
		prometheus.CounterOpts{
			Name: name,
			Help: help,
		},
	)
}

// Collector 收集器执行
func (p *Prometheus) Collector(c prometheus.Collector) {
	p.pusher.Collector(c)
}

// Collectors 收集器执行
func (p *Prometheus) Collectors(cs ...prometheus.Collector) {
	for _, c := range cs {
		p.pusher.Collector(c)
	}
}

// Inc 计数器提交
func (p *Prometheus) Inc(counter prometheus.Counter) error {
	counter.Inc()
	return p.pusher.Add()
}

// Timer 计时器提交
func (p *Prometheus) Timer(gt prometheus.Gauge, tm time.Time) error {
	//tm := time.Now()
	gt.Set(time.Since(tm).Seconds())
	return p.pusher.Add()
}

func init() {
	DefaultPrometheus = NewPrometheus()
}

        上面给了 java、python 和 golang 三种语言的基础实现,供参考。

  • 6
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
VR(Virtual Reality)即虚拟现实,是一种可以创建和体验虚拟世界的计算机技术。它利用计算机生成一种模拟环境,是一种多源信息融合的、交互式的三维动态视景和实体行为的系统仿真,使用户沉浸到该环境中。VR技术通过模拟人的视觉、听觉、触觉等感觉器官功能,使人能够沉浸在计算机生成的虚拟境界中,并能够通过语言、手势等自然的方式与之进行实时交互,创建了一种适人化的多维信息空间。 VR技术具有以下主要特点: 沉浸感:用户感到作为主角存在于模拟环境中的真实程度。理想的模拟环境应该使用户难以分辨真假,使用户全身心地投入到计算机创建的三维虚拟环境中,该环境中的一切看上去是真的,听上去是真的,动起来是真的,甚至闻起来、尝起来等一切感觉都是真的,如同在现实世界中的感觉一样。 交互性:用户对模拟环境内物体的可操作程度和从环境得到反馈的自然程度(包括实时性)。例如,用户可以用手去直接抓取模拟环境中虚拟的物体,这时手有握着东西的感觉,并可以感觉物体的重量,视野中被抓的物体也能立刻随着手的移动而移动。 构想性:也称想象性,指用户沉浸在多维信息空间中,依靠自己的感知和认知能力获取知识,发挥主观能动性,寻求解答,形成新的概念。此概念不仅是指观念上或语言上的创意,而且可以是指对某些客观存在事物的创造性设想和安排。 VR技术可以应用于各个领域,如游戏、娱乐、教育、医疗、军事、房地产、工业仿真等。随着VR技术的不断发展,它正在改变人们的生活和工作方式,为人们带来全新的体验。
VR(Virtual Reality)即虚拟现实,是一种可以创建和体验虚拟世界的计算机技术。它利用计算机生成一种模拟环境,是一种多源信息融合的、交互式的三维动态视景和实体行为的系统仿真,使用户沉浸到该环境中。VR技术通过模拟人的视觉、听觉、触觉等感觉器官功能,使人能够沉浸在计算机生成的虚拟境界中,并能够通过语言、手势等自然的方式与之进行实时交互,创建了一种适人化的多维信息空间。 VR技术具有以下主要特点: 沉浸感:用户感到作为主角存在于模拟环境中的真实程度。理想的模拟环境应该使用户难以分辨真假,使用户全身心地投入到计算机创建的三维虚拟环境中,该环境中的一切看上去是真的,听上去是真的,动起来是真的,甚至闻起来、尝起来等一切感觉都是真的,如同在现实世界中的感觉一样。 交互性:用户对模拟环境内物体的可操作程度和从环境得到反馈的自然程度(包括实时性)。例如,用户可以用手去直接抓取模拟环境中虚拟的物体,这时手有握着东西的感觉,并可以感觉物体的重量,视野中被抓的物体也能立刻随着手的移动而移动。 构想性:也称想象性,指用户沉浸在多维信息空间中,依靠自己的感知和认知能力获取知识,发挥主观能动性,寻求解答,形成新的概念。此概念不仅是指观念上或语言上的创意,而且可以是指对某些客观存在事物的创造性设想和安排。 VR技术可以应用于各个领域,如游戏、娱乐、教育、医疗、军事、房地产、工业仿真等。随着VR技术的不断发展,它正在改变人们的生活和工作方式,为人们带来全新的体验。
基于GPT-SoVITS的视频剪辑快捷配音工具 GPT, 通常指的是“Generative Pre-trained Transformer”(生成式预训练转换器),是一个在自然语言处理(NLP)领域非常流行的深度学习模型架构。GPT模型由OpenAI公司开发,并在多个NLP任务上取得了显著的性能提升。 GPT模型的核心是一个多层Transformer解码器结构,它通过在海量的文本数据上进行预训练来学习语言的规律。这种预训练方式使得GPT模型能够捕捉到丰富的上下文信息,并生成流畅、自然的文本。 GPT模型的训练过程可以分为两个阶段: 预训练阶段:在这个阶段,模型会接触到大量的文本数据,并通过无监督学习的方式学习语言的结构和规律。具体来说,模型会尝试预测文本序列中的下一个词或短语,从而学习到语言的语法、语义和上下文信息。 微调阶段(也称为下游任务训练):在预训练完成后,模型会被应用到具体的NLP任务中,如文本分类、机器翻译、问答系统等。在这个阶段,模型会使用有标签的数据进行微调,以适应特定任务的需求。通过微调,模型能够学习到与任务相关的特定知识,并进一步提高在该任务上的性能。 GPT模型的优势在于其强大的生成能力和对上下文信息的捕捉能力。这使得GPT模型在自然语言生成、文本摘要、对话系统等领域具有广泛的应用前景。同时,GPT模型也面临一些挑战,如计算资源消耗大、训练时间长等问题。为了解决这些问题,研究人员不断提出新的优化方法和扩展模型架构,如GPT-2、GPT-3等,以进一步提高模型的性能和效率。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

厉力文武

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值