每日一库:Prometheus
什么是 Prometheus
Prometheus 是一个开源的系统监控和警报工具,最初由 SoundCloud 开发,并于 2012 年发布为开源项目。它是一个非常强大和灵活的工具,用于监控应用程序和系统的性能,并根据预定义的规则触发警报。以下是对 Prometheus 的详细介绍:
特点和优势:
- 多维数据模型: Prometheus 使用多维数据模型来存储时间序列数据。每个时间序列都由一组键值对唯一标识,这使得数据非常灵活且容易查询。
- 灵活的查询语言: Prometheus 使用一种称为 PromQL(Prometheus Query Language)的查询语言,允许用户执行复杂的查询和数据分析操作。你可以使用 PromQL 从存储的度量数据中提取有价值的信息。
- 内置 Web UI: Prometheus 提供了一个内置的 Web 用户界面,用于查询和可视化度量数据。这个用户界面使得用户能够更直观地查看数据,而无需编写查询语言。
- 持久性存储: Prometheus 使用本地存储引擎来保存时间序列数据,这使得它能够高效地存储大量数据,并且不需要依赖外部数据库。它还支持数据快照和备份。
- 警报和通知: Prometheus 具有强大的警报功能,允许用户定义警报规则,当某些条件满足时触发警报。警报可以发送到各种通知渠道,如电子邮件、Slack 等。
- 自动发现: Prometheus 支持服务自动发现,可以自动发现并监控新的目标(如容器、虚拟机等)。这使得在动态环境中维护监控系统变得更容易。
- 社区支持和生态系统: Prometheus 拥有一个活跃的社区,以及丰富的插件和集成,可与其他工具和服务(如Grafana、Alertmanager、Kubernetes等)集成。
Prometheus 架构:
Prometheus 由以下几个核心组件组成:
- Prometheus 服务器(Prometheus Server): 这是主要的后端组件,负责抓取和存储时间序列数据,执行查询和计算度量数据。
- Exporters: 这些是用于将应用程序和系统度量数据公开为 Prometheus 可以抓取的时间序列的代理。Prometheus 社区维护了许多 Exporter,用于监控各种常见的服务和应用程序。
- Client Libraries: Prometheus 提供各种语言的客户端库,允许应用程序开发者轻松将度量数据暴露给 Prometheus。这些库可用于记录自定义应用程序指标。
- Alertmanager: 这是用于处理警报的组件。它负责根据预定义的规则管理和分发警报,可以将警报发送到不同的通知渠道。
Prometheus 工作流程:
- 数据抓取: Prometheus 定期轮询配置的目标,如应用程序和 Exporters,以获取度量数据。这些数据以时间序列的形式存储在 Prometheus 内部数据库中。
- 数据存储: Prometheus 使用内置的本地存储引擎将时间序列数据持久化存储在本地磁盘上。存储数据的持久性使得用户可以访问历史数据以进行分析。
- 查询和分析: 用户可以使用 PromQL 查询语言执行各种查询和分析操作,以从存储的度量数据中提取有用的信息。查询结果可以在 Prometheus Web 用户界面中查看。
- 警报和通知: 用户可以定义警报规则,当某些条件满足时,Prometheus 将触发警报。Alertmanager
使用 Prometheus 监控应用程序
下面是关于如何在 Go 中使用 Prometheus 的详细介绍:
步骤1:安装 Prometheus
首先,你需要安装和配置 Prometheus 服务器。你可以从 Prometheus 的官方网站下载适合你操作系统的二进制文件,并根据官方文档配置 Prometheus 服务器。安装完成后,启动 Prometheus 服务器。
步骤2:引入 Prometheus Go 客户端库
Prometheus 提供了一个用于 Go 应用程序的客户端库,你需要引入这个库以便在应用程序中生成度量数据。你可以使用 Go 模块来引入 Prometheus Go 客户端库:
go get github.com/prometheus/client_golang/prometheus
go get github.com/prometheus/client_golang/promhttp
步骤3:创建度量指标
在你的 Go 应用程序中,你需要创建要监控的度量指标。Prometheus 支持多种度量类型,包括计数器(Counter)、测量仪(Gauge)和直方图(Histogram)等。以下是一些示例:
创建计数器(Counter):
import (
"github.com/prometheus/client_golang/prometheus"
)
var requestsTotal = prometheus.NewCounter(
prometheus.CounterOpts{
Name: "myapp_requests_total",
Help: "Total number of requests",
},
)
func init() {
prometheus.MustRegister(requestsTotal)
}
创建测量仪(Gauge):
import (
"github.com/prometheus/client_golang/prometheus"
)
var freeMemory = prometheus.NewGauge(
prometheus.GaugeOpts{
Name: "myapp_free_memory",
Help: "Free memory in bytes",
},
)
func init() {
prometheus.MustRegister(freeMemory)
}
步骤4:导出度量数据
要使 Prometheus 能够收集应用程序生成的度量数据,你需要创建一个 HTTP 处理程序来暴露这些数据。通常,Prometheus 使用 /metrics
路径来获取度量数据。
import (
"net/http"
"github.com/prometheus/client_golang/promhttp"
)
func main() {
http.Handle("/metrics", promhttp.Handler())
http.ListenAndServe(":8080", nil)
}
步骤5:生成和导出度量数据
在你的应用程序中,使用创建的度量指标来生成和更新度量数据。例如,如果你想增加请求数计数器的值,可以执行以下操作:
requestsTotal.Inc()
Prometheus 会定期轮询你的应用程序的 /metrics
路径,以获取最新的度量数据。
步骤6:配置 Prometheus 服务器
在 Prometheus 服务器的配置文件中,添加你的应用程序的终端(即要抓取度量数据的地址):
scrape_configs:
- job_name: 'myapp'
static_configs:
- targets: ['your_app_host:8080']
步骤7:查询和可视化
启动 Prometheus 服务器后,你可以访问 Prometheus Web UI(默认地址为 http://localhost:9090 ),使用 PromQL 查询语言来查询和可视化度量数据。
步骤8:设置报警规则
Prometheus 还支持设置报警规则,以便在达到某些条件时触发警报。你可以在 Prometheus 配置文件中定义这些规则。
以上就是使用 Prometheus 在 Go 应用程序中进行监控的基本步骤。通过创建自定义的度量指标并将其导出到 Prometheus,你可以轻松地监控和分析你的应用程序性能。同时,Prometheus 提供了丰富的查询和可视化工具,可以帮助你更好地理解应用程序的行为和趋势。
声明:本作品采用署名-非商业性使用-相同方式共享 4.0 国际 (CC BY-NC-SA 4.0)进行许可,使用时请注明出处。
Author: mengbin
blog: mengbin
Github: mengbin92
cnblogs: 恋水无意
每日一库:Prometheus的更多相关文章
- Go 每日一库之 flag
缘起 我一直在想,有什么方式可以让人比较轻易地保持每日学习,持续输出的状态.写博客是一种方式,但不是每天都有想写的,值得写的东西. 有时候一个技术比较复杂,写博客的时候经常会写着写着发现自己的理解有偏 ...
- Go 每日一库之 viper
简介 上一篇文章介绍 cobra 的时候提到了 viper,今天我们就来介绍一下这个库. viper 是一个配置解决方案,拥有丰富的特性: 支持 JSON/TOML/YAML/HCL/envfile/ ...
- Go 每日一库之 fsnotify
简介 上一篇文章Go 每日一库之 viper中,我们介绍了 viper 可以监听文件修改进而自动重新加载. 其内部使用的就是fsnotify这个库,它是跨平台的.今天我们就来介绍一下它. 快速使用 先 ...
- Go 每日一库之 go-flags
简介 在上一篇文章中,我们介绍了flag库.flag库是用于解析命令行选项的.但是flag有几个缺点: 不显示支持短选项.当然上一篇文章中也提到过可以通过将两个选项共享同一个变量迂回实现,但写起来比较 ...
- Go 每日一库之 go-homedir
简介 今天我们来看一个很小,很实用的库go-homedir.顾名思义,go-homedir用来获取用户的主目录. 实际上,使用标准库os/user我们也可以得到这个信息: package main i ...
- Go 每日一库之 go-ini
简介 ini 是 Windows 上常用的配置文件格式.MySQL 的 Windows 版就是使用 ini 格式存储配置的. go-ini是 Go 语言中用于操作 ini 文件的第三方库. 本文介绍g ...
- Go 每日一库之 cobra
简介 cobra是一个命令行程序库,可以用来编写命令行程序.同时,它也提供了一个脚手架, 用于生成基于 cobra 的应用程序框架.非常多知名的开源项目使用了 cobra 库构建命令行,如Kubern ...
- go每日一库 [home-dir] 获取用户主目录
关于我 我的博客|文章首发 顾名思义,go-homedir用来获取用户的主目录.实际上,通过使用标准库os/user我们也可以得到内容,使用以下方式 标准库使用 package main import ...
- Go 每日一库之 go-carbon,优雅的golang日期时间处理库
Carbon 是一个轻量级.语义化.对开发者友好的 golang 时间处理库,支持链式调用. Carbon 已被 awesome-go 收录, 如果您觉得不错,请给个 star 吧. github.c ...
- Golang每日一库之bcrypt
本文 官方文档: https://pkg.go.dev/golang.org/x/crypto/bcrypt 前言 之前讲过JWT Token https://www.cnblogs.com/zich ...
随机推荐
- ASP.NET Core 6框架揭秘实例演示[36]:HTTPS重定向
HTTPS是确保传输安全最主要的手段,并且已经成为了互联网默认的传输协议.不知道读者朋友们是否注意到当我们利用浏览器(比如Chrome)浏览某个公共站点的时候,如果我们输入的是一个HTTP地址,在大部 ...
- Galaxy 平台下 LEfSe 安装与使用教程
LEfSe (Linear discriminant analysis Effect Size) 是一种用于发现和解释高维度数据生物标识(基因.通路和分类单元等)的分析工具,可以进行两个或多个分组的比 ...
- 手把手教你如何在 Linux 上源码安装最新版本 R
如果你使用的 Linux 系统 GCC 版本太低,又没有 root 权限(即使有 root 权限又担心升级 GCC 带来的风险):同时你又不想额外多安装多一个 Anaconda 或者 Minicond ...
- P1585 魔法阵 题解
题意: 题目传送门 可以看做一个人手中有一些宝石,并将宝石分成两组,一组的编号为 1 至 n×m/2,二组为 n×m/2+1 至 n×m+1.当两组两个宝石编号相差为 n×m/2 为一对.现在要遍历一 ...
- mysql concat函数的用法
mysql中的这个函数非常强大,可以对查出的参数进行拼接,其实这个方法在java中也有api可以进行调用. 那么什么时候进行使用呢?例如,你老大叫你做一个数据库的数据采集,需要整理成文档,那么这个时候 ...
- UE5打包SDK未正确安装的问题
正文 Windows(笔者之前用的电脑是windows10,最新电脑使用的是windows11)下UE5打包项目的需要安装Visual Studio. 而且安装的时候需要选择上C++ 游戏开发相关模块 ...
- VSCode 编辑器的基本配置
VSCode 编辑器的基本配置 在正式开始本文的内容之前,请允许我先做一些自我介绍: 严格来说,我是个自由职业者,经常会参与一些计算机专著的写作与翻译工作(主要作品如下图所示),业余偶尔也会有一些机会 ...
- border属性之border-radius
border-radius - 指定每个圆角 如果你在 border-radius 属性中只指定一个值,那么将生成 4 个 圆角. 但是,如果你要在四个角上一一指定,可以使用以下规则: 四个值: 第一 ...
- 博客代码托管网站个人体会及感受(GitHub、Coding、Netlity、阿里云弹性web托管)
GitHub 免费 部署 github上,服务器在国外,访问速度一般,稳定性比较好,网站知名,操作方便,部署简单,域名不需要备案. Coding 免费 coding 支持 PHP + mysql 的动 ...
- debezium之mysql配置
实验环境 全部部署于本地虚拟机 1 mysql 参考 官方文档 和 根据官方示例镜像(debezium/example-mysql,mysql版本为8.0.32) 1.1 创建用户 官方镜像里一共有三 ...