当前位置:网站首页>在Perl程序中暴露Prometheus指标
在Perl程序中暴露Prometheus指标
2022-07-27 06:10:00 【TechForGeek】
SLI 与 SLO
SLI(服务质量指标) 指的是一个服务的某项服务质量的一个具体量化指标(如请求延迟、错误率、QPS)。
SLO(服务质量目标) 则是服务的某个 SLI 的目标值,例如,我们可以定义一个SLO,要求 95% 的请求的延迟小于 100ms。
SLI与SLO是传统运维转型SRE绕不过的主题,它们是SRE实践的核心。传统运维通常追求 100% 的可用性,但这个目标是不可能实现的,通过实施SLO,可以带来如下好处:
监控应用程序的行为,以便更好地改进应用程序
确定工作优先级,即开发新特性还是保障服务稳定性
作为控制手段使用,通过比较SLI与SLO,决定某项操作是否执行
建立用户预期
定义 SLI
要实施 SLO,首先要定义出来 SLI,而 Prometheus 监控则是定义 SLI 的一种很好的工具,下面将介绍在 Perl 程序中暴露 Prometheus Metric 来定义 SLI。
在 Perl 程序中暴露 Prometheus Metric
在 Perl 程序中暴露 Prometheus Metric,我们用到了两个模块:
Dancer2 [1]:Perl 的一款轻量级Web应用程序框架。
Net::Prometheus [2]: Perl 的 Prometheus 客户端库
下面借助这两个模块,我们在 Perl 应用程序中统计 '/login' 接口的调用次数:
#!/usr/bin/perl
use strict;
use warnings;
use Dancer2;
use Net::Prometheus;
# 使用 Time::HiRes 模块中的 time 函数获取毫秒级的 Epoch 时间
use Time::HiRes qw/time/;
set host => '0.0.0.0';
set port => 3678;
# 初始化 Prometheus 客户端
my $client = Net::Prometheus->new;
# 设置 counter 类型的 metric,并指定 metric 的 name, help, labels 信息
my $counter = $client->new_counter(
name => "requests_count",
help => "Number of received requests",
labels => ['path']
);
post '/login' => sub {
# counter 加1,设置 label 为 path=login
# $counter->inc({path => 'login'}); 或
$counter->inc(('login'));
# do something else
};
get '/metrics' => sub {
if(request->user_agent =~ /curl|prometheus/i) {
$client->render
} else {
"<pre>" . $client->render . "</pre>"
}
};运行上面的 Perl 程序,并打开浏览器,输入地址:
http://SERVER-IP:3678/metrics其中,SERVER-IP 为 Perl 程序所在服务器的 IP。
在浏览器打开上述地址后,就可以看到输出的 Prometheus metrics 了:
# HELP perl_heap_arenas Number of arenas in the Perl heap
# TYPE perl_heap_arenas gauge
perl_heap_arenas 713
# HELP perl_heap_svs Number of SVs in the Perl heap
# TYPE perl_heap_svs gauge
perl_heap_svs 120441
...
# HELP requests_count Number of received requests
# TYPE requests_count counter但是,我们并没有看到我们自己定义的 requests_count 指标,只看到了这个指标的注释信息:
# HELP requests_count Number of received requests
# TYPE requests_count counter这是由于 '/login' 这个接口还没有被访问过,尝试访问 '/login' 这个接口后,刷新浏览器后再次查看 Prometheus Metrics 就可以看到我们定义的指标了:
# HELP requests_count Number of received requests
# TYPE requests_count counter
requests_count{path="login"} 1到这里,我们已经成功地为我们的 Perl 应用程序暴露了 Prometheus Metrics。
有了 Counter 类型的指标 requests_count,我们可以借助 Prometheus 的 rate() 函数[3] 来计算访问 '/login' 接口的 QPS,这样我们就定义好了一个 SLI。
Net::Prometheus 模块除了支持 counter 类型的 metric,还支持 gauge,summary,histogram 类型的 metric,使用方法都类似,详细的使用说明可以参考 Net::Prometheus 的文档[2]。
参考
[1]: https://metacpan.org/pod/Dancer2
[2]: https://metacpan.org/pod/Net::Prometheus
[3]: https://prometheus.io/docs/prometheus/latest/querying/functions/#rate
一如既往,如果你对文章中的内容有任何疑问,或者是发现文章中有任何错误,都可以通过留言告诉我;如果你喜欢我的文章,欢迎关注我的微信公众号 Tech For Geek。

边栏推荐
- 算法--斐波那契数列(Kotlin)
- Please ask the big guys a question. The pgsqlcdc task can't monitor changes after running for a period of time. Just restart it. What should I do
- 美联储SR 11-7:模型风险管理指南(Guidance on Model Risk Management)-万字收藏
- sql-labs SQL注入平台-第1关Less-1 GET - Error based - Single quotes - String(基于错误的GET单引号字符型注入)
- 【QT】无法在QT创建者中打开包含文件pcap.h(C1083)
- 35. Search insert position
- Music website management system based on SSM
- DDD Domain Driven Design Notes
- 12. Integer to Roman
- C# 常用功能整合-3
猜你喜欢

Internal class -- just read this article~

Drools (5): drools basic syntax (3)

Drools(5):Drools基础语法(3)

美联储SR 11-7:模型风险管理指南(Guidance on Model Risk Management)-万字收藏

李沐动手学深度学习V2-transformer和代码实现

docker安装MySQL8.0.28

C语言程序设计 | 程序编译与预处理

如何借助自动化工具落地DevOps|含低代码与DevOps应用实践

The possibility of metauniverse from the perspective of technical principles: how Omniverse "built" Mars

C# Winfrom 常用功能整合-2
随机推荐
零号培训平台课程-2、SSRF基础
Golang encapsulates the packages involved in MySQL and the differences between sqlx and Gorm
C# 常用功能整合-2
pre-commit install 时 CalledProcessError
Common problems in converting pytorch to onnx
Sort increment with typescript
[Vani有约会]雨天的尾巴
tableau prep连接maxcompute,只是书写很简单的sql,为啥报这个错误呢?
py2exe qt界面风格变成了win98解决方案
Student status management system based on SSM
优炫数据库主要线程有哪些?
Perl: 将要执行的外部命令拆分为多行
Quartus: an error is reported when adding a.V file to someone else's project
(posted) comparison of Eureka, consumer and Nacos 2
Gbase 8C - SQL reference 6 SQL syntax (15)
Book borrowing management system based on SSM
MySQL limit paging query optimization practice
Drools(5):Drools高级语法
sql-labs SQL注入平台-第1关Less-1 GET - Error based - Single quotes - String(基于错误的GET单引号字符型注入)
35. Search Insert Position 搜索插入位置