2.5 快速安装并启动Prometheus
介绍完Prometheus的相关概念,接下来介绍如何在Mac电脑上迅速安装并启动Prometheus,对于Docker方式和Prometheus Operator方式,读者可以自行查阅官方文档。
在Prometheus的官方下载页面https://prometheus.io/download/中可以看到,Prometheus提供了独立的二进制文件的tar包,其中主要包括prometheus、alertmanager、blackbox_exporter、consul_exporter、graphite_exporter、haproxy_exporter、memcached_exporter、mysqld_exporter、node_exporter、Pushgateway、statsd_exporter等组件。
Prometheus组件主要支持Darwin、Linux、Windows等操作系统。本节介绍通过Darwin版本在Mac电脑上迅速安装并启动Prometheus的方法。
如图2-7所示,根据当前最新的软件版本,在Mac下选择Darwin版本下载。
图2-7 Prometheus下载
下载完成以后通过如下命令进行解压和启动。
tar xvfz prometheus-2.16.0.darwin-amd64.tar.gz cd prometheus-2.16.0.darwin-amd64.tar.gz ./prometheus -config.file=prometheus.yml
启动后的Prometheus端口号是9090,可以访问localhost:9090/metrics,该地址返回与Prometheus Server状态相关的监控信息,其返回数据如下所示。
# HELP go_gc_duration_seconds A summary of the GC invocation durations. # TYPE go_gc_duration_seconds summary go_gc_duration_seconds{quantile="0"} 1.2661e-05 go_gc_duration_seconds{quantile="0.25"} 1.8689e-05 go_gc_duration_seconds{quantile="0.5"} 3.466e-05 go_gc_duration_seconds{quantile="0.75"} 0.000183214 go_gc_duration_seconds{quantile="1"} 0.00082742
localhost:9090/graph是Prometheus的默认查询界面,界面截图如图2-8所示。
图2-8 Prometheus Graph页面
在Graph页面可以输入PromQL表达式,比如输入“up”,就可以查看监控的每个Job的健康状态,1表示健康,0表示不健康。如果prometheus.yml文件中配置的scrape_configs如下所示(其中8080的服务是没有启动的):
scrape_configs: - job_name: 'prometheus' static_configs: - targets: ['localhost:9090'] - job_name: 'springboot-demo' metrics_path: '/actuator/prometheus' static_configs: - targets: ['localhost:8080']
那么在Graph页面上就会得到图2-9所示的结果,这表示Prometheus服务是正常的,8080端口的服务是不正常的。
图2-9 在Prometheus Graph页面输入“up”命令
在Graph页面上还可以看到与告警相关的信息,在图2-9所示的Status菜单里,提供了Running&Build Information、Command-Line Flags、Configuration、Rules、Target、Service Discovery等与可视化功能相关的模块。
图2-10所示为与Command-Line Flags相关的信息。其中的信息在实际使用中大多数都是可配置的,需要用户根据实际的部署环境进行修改,部分配置项的选项及说明如表2-2所示[1],更多关于存储的参数配置可以参见第10章。
图2-10 Prometheus Graph命令行标志信息
表2-2 Prometheus可修改的配置选项及说明
在图2-10所示的参数中,web.enable-lifecycle在部署Spring Boot微服务的过程中是最常见的,它支持Prometheus通过Web端点动态更新配置。
./prometheus --config.file=prometheus.yml --web.enable-lifecycle
如果开启了这个命令行参数,每当prometheus.yml文件发生改变时,就不需要对Prometheus进行关闭再重新启动的操作了,而是可以通过如下命令让配置进行重新加载。
curl -X POST http:// localhost:9090/-/reload
注意
Prometheus中还可以通过--web.external-url使用外部URL和代理,或者通过--web.route-prefix等参数进行更精确的控制,例如:
./prometheus --web.external-url http:// localhost:19090/prometheus/ ./prometheus --web.external-url http:// localhost:19090/prometheus/ --web. route-prefix=/
如果用CTRL+Z等方式强制关闭了Prometheus在命令行窗口的进程,那么重新启动Prometheus时会出现如下错误。
level=error ts=2020-02-24T06:41:41.749Z caller=main.go:727 err="error starting web server: listen tcp 0.0.0.0:9090: bind: address already in use"
遇到这样的问题,解决方式是先通过lsof-i tcp:9090命令找到9090端口的占用情况。
prometheus-2.16.0.darwin-amd64 lsof -i tcp:9090 COMMAND PID USER FD TYPE DEVICE SIZE/OFF NODE NAME prometheu 3411 charles 10u IPv4 0xfedca3ddafcff0cb 0t0 TCP localhost:57498->localhost:websm (ESTABLISHED) prometheu 3411 charles 11u IPv6 0xfedca3dd8f43c783 0t0 TCP *:websm (LISTEN) prometheu 3411 charles 12u IPv6 0xfedca3dd8f43c1c3 0t0 TCP localhost:websm->localhost:57498 (ESTABLISHED) prometheu 3411 charles 13u IPv6 0xfedca3dd8f43b083 0t0 TCP localhost:57513->localhost:websm (ESTABLISHED) prometheu 3411 charles 39u IPv6 0xfedca3dd8f43cd43 0t0 TCP localhost:websm->localhost:57513 (ESTABLISHED)
如上所示,只要使用sudo kill-9 3411,就可以“杀掉”原有Prometheus进程,重新执行./prometheus-config.file=prometheus.yml命令就可以再次启动Prometheus。
注意
当终端关闭或按下Ctrl+C组合键时,Prometheus服务会自动关闭。在Linux中,可以直接执行命令nohup./prometheus&使其后台运行。但是如果对进程进行关闭、重启、查看进程状态等操作,还需要配合各种Linux命令才能完成。为方便起见,可以将Prometheus添加为系统服务且开机自启动。如在CentOS Linux release 7操作系统中可以用命令systemctl来管理守护进程,在/usr/lib/systemd/system目录下添加一个系统服务启动文件来配置prometheus.service,参考配置方式如下所示。
# vi /usr/lib/systemd/system/prometheus.service [Unit] Description=Prometheus server daemon After=network.target [Service] Type=simple User=root Group=root ExecStart=/data/prometheus/prometheus \ --config.file "/data/prometheus/prometheus.yml" \ --web.listen-address "0.0.0.0:9090" Restart=on-failure [Install] WantedBy=multi-user.agent
用户也可以使用和reload类似的HTTP的方式关闭Prometheus,从Prometheus 2.0开始必须开启--web.enable-lifecycle后才能使用这种方式,且要执行如下所示的命令才能关闭。
curl -X POST http:// localhost:9090/-/quit
上述命令除了在Prometheus自身的日志中会出现各个模块的关闭信息外,还会返回如下结果。
Requesting termination... Goodbye!
需要注意的是,告警及其阈值是在Prometheus中配置的,而不是在Alertmanager中配置的。以下是prometheus.yml文件配置各个部分的含义和功能的注释。
# global模块是全局配置信息,它定义的内容会被scrape_configs模块中的每个Job单独覆盖 global: scrape_interval: 15s # 抓取target的时间间隔,设置为15秒,默认值为1分钟。经验值为10~60s evaluation_interval: 15s #Prometheus计算一条规则配置的时间间隔,设置为15秒, #默认值为1分钟 # scrape_timeout # 抓取target的超时事件,默认值为10秒 # external_labels # 与外部系统通信时添加到任意时间序列或告警所用的外部标签 # 告警模块,Prometheus Server发送请求给Alertmanager之前也会触发一次relabel操作 # aler子模块下也可以配置alert_relabel_configs alerting: alertmanagers: - static_configs: # 静态配置Alertmanager的地址,也可以依赖服务发现动态识别 - targets: # 可以配置多个IP地址 - localhost:9093 # Prometheus自定义的rule主要分为Recording rule和Alerting rule两类 rule_files: - "alertmanager_rules.yml" - "prometheus_rules.yml" scrape_configs: # Job名称很重要,Prometheus会将该名称作为Label追加到抓取的每条时序中 - job_name: 'prometheus' # metrics_path defaults to '/metrics' # metrics_path默认值是/metrics # 可以自定义,表示抓取时序的http path # scheme defaults to 'http'. # scheme默认是http,表示抓取时序数据时使用的网络协议 # param 抓取时序的相关参数,可以自定义 static_configs: # 静态方式 - targets: ['localhost:9090'] - job_name: 'springboot-demo' # 第二个微服务Spring Boot作业 metrics_path: '/actuator/prometheus' static_configs: - targets: ['localhost:8080']
通过上述注释可知,scrape_configs主要用于配置采集数据节点的操作,它和global重合的配置部分会覆盖global部分,每一个采集配置的具体参数及说明如表2-3所示。
表2-3 scape_configs具体参数及说明
[1] 可以通过./prometheus-h命令查看帮助内容。