Prometheus 是什么
简单来说就是一个携带了时序数据库存放指标并提供强大查询功能和可视化功能的开源解决方案。
它的安装部署非常简单,可以使用 docker 也可以不使用,直接就提供了常用的 Linux-AMD64 可执行文件,并且配置非常简单,就是 yaml 文件,没有依赖,直接二进制文件运行即可,同时也不需要配合 grafana 这种额外的可视化组件,现在自带可视化的折线图,不过 grafana 当然是提供了更多的图表选项,但是我认为只是普通的服务监控,则 Prometheus 自带的可视化图表已经足够好用。
启动 Prometheus
最好是跟着官方的 示例教程 走一遍。
首先从它的官网获得最新版本的二进制文件的 下载地址 ,下载对应机器的二进制文件压缩包(一般都是 linux-amd64 吧)。在本地解压:
┌[fredom@NUC 14:46:10] ~/programfiles/prometheus/prometheus-2.51.1.linux-amd64
└> ls
total 247M
drwxr-xr-x 2 fredom fredom 4.0K Mar 28 17:42 console_libraries/
drwxr-xr-x 2 fredom fredom 4.0K Mar 28 17:42 consoles/
drwxr-xr-x 4 fredom fredom 4.0K Apr 10 14:34 data/
-rw-r--r-- 1 fredom fredom 758 Apr 10 14:34 demo.yml
-rw-r--r-- 1 fredom fredom 12K Mar 28 17:42 LICENSE
-rw-r--r-- 1 fredom fredom 3.7K Mar 28 17:42 NOTICE
-rwxr-xr-x 1 fredom fredom 128M Mar 28 17:29 prometheus*
-rw-r--r-- 1 fredom fredom 934 Mar 28 17:42 prometheus.yml
-rw-r--r-- 1 fredom fredom 934 Apr 10 12:06 prometheus.yml.copy
-rwxr-xr-x 1 fredom fredom 120M Mar 28 17:29 promtool*
解压出来就是二进制文件、证书凭证、默认配置示例。Prometheus 在运行的时候,创建的时序数据库文件默认在当前二进制目录下的 data/
目录下,这点还是很友好的,不像之前的一些软件包,数据乱放在系统目录下(比如 /var/
还有 /tmp/
或者 /etc/
等)。
然后拷贝一份原来的示例启动配置文件作为备份,不要污染了。默认的配置 yaml 文件如下:
# my global config
global:
scrape_interval: 15s # Set the scrape interval to every 15 seconds. Default is every 1 minute.
evaluation_interval: 15s # Evaluate rules every 15 seconds. The default is every 1 minute.
# scrape_timeout is set to the global default (10s).
# Alertmanager configuration
alerting:
alertmanagers:
- static_configs:
- targets:
# - alertmanager:9093
# Load rules once and periodically evaluate them according to the global 'evaluation_interval'.
rule_files:
# - "first_rules.yml"
# - "second_rules.yml"
# A scrape configuration containing exactly one endpoint to scrape:
# Here it's Prometheus itself.
scrape_configs:
# The job name is added as a label `job=<job_name>` to any timeseries scraped from this config.
- job_name: "prometheus"
# metrics_path defaults to '/metrics'
# scheme defaults to 'http'.
static_configs:
- targets: ["localhost:9090"]
注意,scrape_configs
下的那个地址不是 Prometheus 提供的网页控制台地址,那个是查询提供 metrics 的地址。由于我的机器上有另外一个进程在使用 Prometheus 的默认端口 9090 了,所以我必须在启动的时候添加命令行参数:
./prometheus --config.file=demo.yml --web.listen-address ':9092'
根据 yaml 的两空格缩进块规则来看,不难看出默认配置文件提供的一些设置的意思。首先 Prometheus 将 metrics 查询的动作成为 scrape ,刚开始不是很明白为什么不直接叫做 query ,后来感觉其实也挺形象的,scrape 意思是“切削”,由于每个节点提供的时许数据都是在时间上连续的,是流式的数据,一条条很长的,所以每次取一段时间的数据就像从这一条数据上切下一段头部数据一样。时序数据库(Time Series DataBase)和普通的关系型数据库(Relational DataBase)不一样,专门针对这种追加写入大量顺序数据的场景做了优化。
scrape_configs
下就是 Prometheus 会去哪些节点上取时序数据的配置了,默认是取自己当前 Prometheus 这个主节点的一些 Prometheus 运行数据,注意这些数据默认暴露在本机的 9090 端口给开放查询,这个端口是暴露时序数据用的,不是 Prometheus 的控制台端口!同理,如果我们的集群中有多台机器需要监控,则每个机器都可以部署一个对应的监控机器资源的 node_exporter (后文再说这个是什么),在这个 scrape_configs
下就可以配置对应节点的 IP 地址和暴露时序数据的端口以供 Prometheus 从这些端口“切削”最新的时序数据。
node_exporter
其实意思是集群中节点机器资源数据导出的意思,Prometheus 官网已经预置了一些常见的指标时序数据抓取程序,这些程序应该是 Golang 写的然后编译为二进制文件,毕竟大多数 Linux 发行版应该是都有相同的内核参数的,因此可以提供一种通用的程序大家直接开箱即用检测集群中节点机器的资源状态。
node_exporter 也有官方的 示例教程,可以跟着过一遍,对于新手能更好的理解 scrape_configs
中的设置。下载好 node_exporter 的二进制文件,直接运行可以得到在 9100 端口上暴露的本机资源指标时序数据。这时候在 Prometheus 的 yml 配置文件中重新添加切削数据目标地址端口:
global:
scrape_interval: 15s
scrape_configs:
- job_name: node
static_configs:
- targets: ['localhost:9100']
重启 Prometheus 之后,会开始监听这个节点上通过 node_exporter 暴露出来的一些资源指标。在 Prometheus 的网页控制台中,可以通过可视化面板 graph 的方式看到,比如当前 CPU 各个核心的运行频率以及当前空闲的主存还有多少 MB 等。
官网默认的示例教程只是提供给了我们一个使用的方式和示例,看到 Prometheus 的可视化和查询可以做到什么程度,可是如何在自己的服务中添加这些 metrics 并暴露给外部进行获取是还未提及的。关于如何对自己的服务进行指标时序数据输出,可以参考对应语言下的 Prometheus 依赖包,比如我使用的业务语言是 Golang 那么就有 https://prometheus.io/docs/guides/go-application/ 。