Prometheus安装、配置、维护及日常使用

一、Prometheus快速部署

1、服务器信息
Linux操作系统版本:CentOS Linux release 7.5.1804(Core)x86_64。
主机IP地址:172.16.60.63。
Prometheus选择下载版本:prometheus-2.44.0.linux-amd64.tar.gz。

2、软件下载

在官方网站下载页面地址https://prometheus.io/download/中找到Prometheus下载列表。在这里可以下载适用于各平台的二进制文件最新版本。

3、 使用二进制文件快速部署

1)官网下载Prometheus完成后,获取软件包的哈希值:

# sha256sum prometheus-2.44.0.linux-amd64.tar.gz

与官网提供的软件包类表中“SHA256 Checksum”列里的哈希值进行核对,保证下载的Prometheus软件包的完整性。

2)解压缩二进制软件包到指定的安装目录,运行Prometheus,操作如下:
# tar -zxvf prometheus-2.4.0.linux-amd64.tar.gz -C /data
# 这里安装在/data目录下
# cd /data    # 注意核对个人安装目录
# chown -R root:root prometheus-2.4.0.linux-amd64
# ln -sv prometheus-2.4.0.linux-amd64 prometheus

3)启动Prometheus。

# cd /data/prometheus # 进入安装目录下找到prometheus服务程序
# ./prometheus # 先在终端界面直接启动prometheus服务

可以看到以下输出信息,由于篇幅缘故,这里只截取了Prometheus启动时输出日志的部分内容,
ts=2023-05-22T06:16:59.289Z caller=main.go:531 level=info msg="No time or size retention was set so using the default time retention" duration=15d
ts=2023-05-22T06:16:59.289Z caller=main.go:575 level=info msg="Starting Prometheus Server" mode=server version="(version=2.44.0, branch=HEAD, revision=1ac5131f698ebc60f13fe2727f89b115a41f6558)"
ts=2023-05-22T06:16:59.289Z caller=main.go:580 level=info build_context="(go=go1.20.4, platform=linux/amd64, user=root@739e8181c5db, date=20230514-06:18:11, tags=netgo,builtinassets,stringlabels)"
ts=2023-05-22T06:16:59.289Z caller=main.go:581 level=info host_details="(Linux 3.10.0-693.el7.x86_64 #1 SMP Tue Aug 22 21:09:27 UTC 2017 x86_64 promethus (none))"
ts=2023-05-22T06:16:59.289Z caller=main.go:582 level=info fd_limits="(soft=4096, hard=4096)"
ts=2023-05-22T06:16:59.289Z caller=main.go:583 level=info vm_limits="(soft=unlimited, hard=unlimited)"
ts=2023-05-22T06:16:59.293Z caller=web.go:562 level=info component=web msg="Start listening for connections" address=0.0.0.0:9090
ts=2023-05-22T06:16:59.294Z caller=main.go:1016 level=info msg="Starting TSDB ..."
ts=2023-05-22T06:16:59.298Z caller=tls_config.go:232 level=info component=web msg="Listening on" address=[::]:9090
ts=2023-05-22T06:16:59.298Z caller=tls_config.go:235 level=info component=web msg="TLS is disabled." http2=false address=[::]:9090
ts=2023-05-22T06:16:59.300Z caller=head.go:588 level=info component=tsdb msg="Replaying on-disk memory mappable chunks if any"
ts=2023-05-22T06:16:59.300Z caller=head.go:669 level=info component=tsdb msg="On-disk memory mappable chunks replay completed" duration=5.382µs
ts=2023-05-22T06:16:59.300Z caller=head.go:677 level=info component=tsdb msg="Replaying WAL, this may take a while"
ts=2023-05-22T06:16:59.300Z caller=head.go:748 level=info component=tsdb msg="WAL segment loaded" segment=0 maxSegment=0
ts=2023-05-22T06:16:59.300Z caller=head.go:785 level=info component=tsdb msg="WAL replay completed" checkpoint_replay_duration=18.178µs wal_replay_duration=446.57µs wbl_replay_duration=300ns total_replay_duration=497.453µs
ts=2023-05-22T06:16:59.301Z caller=main.go:1037 level=info fs_type=XFS_SUPER_MAGIC
ts=2023-05-22T06:16:59.301Z caller=main.go:1040 level=info msg="TSDB started"
ts=2023-05-22T06:16:59.301Z caller=main.go:1220 level=info msg="Loading configuration file" filename=prometheus.yml
ts=2023-05-22T06:16:59.304Z caller=main.go:1257 level=info msg="Completed loading of configuration file" filename=prometheus.yml totalDuration=2.292321ms db_storage=2.615µs remote_storage=3.003µs web_handler=665ns query_engine=918ns scrape=1.94575ms scrape_sd=31.408µs notify=40.726µs notify_sd=10.054µs rules=3.103µs tracing=16.347µs
ts=2023-05-22T06:16:59.304Z caller=main.go:1001 level=info msg="Server is ready to receive web requests."
ts=2023-05-22T06:16:59.304Z caller=manager.go:995 level=info component="rule manager" msg="Starting rule manager..."
 

从截取的日志中,我们找到加粗标记字体的信息,可以看到prometheus服务已经成功启动,且默认监听端口9090已经开启,如果想更换默认监控端口,需要启动时添加配置参数信息,例如,--
web.listen-address="0.0.0.0:端口号",更多方法可以使用./prometheus-h查看相关帮助信息。

4)添加Prometheus为系统服务开机启动。
此时,当终端关闭或按下Ctrl+C时,Prometheus服务会自动关闭,这不是我们想要的工作方式。我们要对进程执行关闭、重新启动、查看进程状态等操作时,还需配合各种Linux命令才能完成。这里为了方便,将Prometheus添加为系统服务且开机自启动。

可以使用CentOS Linux release 7操作系统中的命令systemctl来管理守护进程Prometheus服务。在/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" \
--storage.tsdb.path "/data/prometheus/data" \
--storage.tsdb.retention=15d \
--web.console.templates="/data/prometheus/consoles" \
--web.console.libraries="/data/prometheus/console_libraries" \
--web.max-connections=512 \
--web.external-url"http://172.16.60.63:9090" \
--web.listen-address "0.0.0.0:9090"
Restart=on-failure

[Install]
WantedBy=multi-user.target

最后,配置文件完成且保存退出,需要通知systemd重新加载配置文件:

# systemctl daemon-reload # 通知systemd重新加载配置文件
# systemctl enable prometheus.service # 设置为开机自启动
# systemctl disable prometheus.service # 如果不想设置为开机自启动,可以关闭
# systemctl start prometheus.service # 开启服务
# systemctl status prometheus.service # 查看状态为Active: active (running)

# systemctl restart prometheus.service # 重启服务
# systemctl stop prometheus.service # 停止服务

4、Prometheus Web UI登录

在浏览器中输入http://IP:9090格式便可进行访问,如下图

 最后,通过访问http://172.16.60.63:9090/targets地址,可以查看页面中的Targets信息。示例中使用默认配置文件,仅仅对Prometheus本机进行监控,如图所示。

 Prometheus内部默认提供许多metric(指标)用于监控操作,这些指标都可以在Web UI中输入查询。如果将Prometheus默认配置文件中的“localhost”修改为主机IP地址,我们直接点击图2-6中提供的链接即可访问Metrics信息,但示例中是默认配置文件,需要在浏览器中输入示例地址http://172.16.60.63:9090/metrics,才可以看到所有指标信息。由于内容比较多,这里仅展示部分输出信息:

# HELP go_gc_duration_seconds A summary of the GC invocation durations.
# TYPE go_gc_duration_seconds summary
go_gc_duration_seconds{quantile="0"} 0.000136642
go_gc_duration_seconds{quantile="0.25"} 0.000200511
……此处省略部分信息……
prometheus_build_info{branch="HEAD",goversion="go1.10.3",revision="068eaa
5dbfce6c08f3d05d3d3c0bfd96267cfed2",version="2.4.0"} 1
# HELP prometheus_config_last_reload_success_timestamp_seconds Timestamp
of the last successful configuration reload.
# TYPE prometheus_config_last_reload_success_timestamp_seconds gauge
prometheus_conf?ig_last_reload_success_timestamp_seconds
1.553934655140825e+09
# HELP prometheus_config_last_reload_successful Whether the last conf?
iguration reload attempt was successful.
# TYPE prometheus_config_last_reload_successful gauge
……此处省略部分信息……
# HELP promhttp_metric_handler_requests_in_f?light Current number of
scrapes being served.
# TYPE promhttp_metric_handler_requests_in_f?light gauge
promhttp_metric_handler_requests_in_f?light 1
# HELP promhttp_metric_handler_requests_total Total number of scrapes by
HTTP status code.
# TYPE promhttp_metric_handler_requests_total counter
promhttp_metric_handler_requests_total{code="200"} 72
promhttp_metric_handler_requests_total{code="500"} 0
promhttp_metric_handler_requests_total{code="503"} 0

二、Prometheus监控主机、服务

1、Linux主机监控

由于Linux操作系统自身并不直接支持Prometheus,所以Prometheus官方提供了Go语言编写的Node exporter来实现对Linux操作系统主机的监控数据采集。它提供了系统内几乎所有的标准指标,如CPU、内存、磁盘空间、磁盘I/O、系统负载和网络带宽。另外,它还提供了由内核公开的大量额外监控指标,从负载平均到主板温度等。

在安装之前,首先在官方下载页面https://prometheus.io/download/找到Node exporter列表,下载最新版本中特定平台的二进制文件。然后开始Nodeexporter的安装部署以及使用。

应用信息如下:
·被监控的Linux操作系统版本为CentOS Linux release 7.5.1804(Core)x86_64。
·主机IP地址为172.16.60.63。
·Node exporter选择下载版本是node_exporter-1.5.0.linuxamd64.tar.gz。

1.1 下载部署
大致步骤如下:
1)官网站下载Node exporter完成后,获取软件包的哈希值,与官网所提供的软件包类表中“SHA256 Checksum”列里的哈希值进行核对,确保下载的Node exporter软件包完整性。

2)解压缩软件包到指定的安装目录。由于Node exporter采用Go语言编写而成,不依赖于第三方,所以下载完成后,只需解压缩二级制软件包后运行node_exporter即可。

3)启动node_exporter,代码如下:

# ./node_exporter

这里,先在终端界面启动node_exporter,成功启动后可以看到默认监听端口是9100,其中“Enabled collectors”列是node_exporter默认情况下启用的功能。如果想更换默认监控端口,需要启动时添加参数--web.listen-address=":9200"即可,更多方法可以使用#./node_exporter-h查看相关帮助信息。

4)添加node_exporter为系统服务开机启动。此时,当终端关闭或按下Ctrl+C时,node_exporter服务会自动关闭,这不是我们想要的操作方式。我们要关闭进程、重新启动进程、查看进程状态时,还得配合各种Linux命令才能完成。为了方便操作,可以将node_exporter程序添加为系统服务且开机自启动。该系统服务启动时使用的配置文件node_exporter.service内容如下:

# vi /usr/lib/systemd/system/node_exporter.service # 参考内容如下:
[Unit]
Description=node_exporter
Documentation=https:// prometheus.io/
After=network-online.target
[Service]
Type=simple
User=root
Group=root
ExecStart=/data/node_exporter/node_exporter
Restart=on-failure
[Install]
WantedBy=multi-user.target

最后可以通过systemctl命令进行如下操作:

# systemctl daemon-reload # 通知systemd重新加载配置文件
# systemctl enable node_exporter.service # 设置为开机自启动
# systemctl start node_exporter.service # 启动服务
# systemctl status node_exporter.service # 状态为Active: active(running)时已正常启动
# systemctl restart node_exporter.service # 重启服务
# systemctl stop node_exporter.service # 停止服务

至此,我们完成了对node_exporter的下载安装,并对其进行了系统服务添加和开机自启动设置。

1.2 与Prometheus集成

当启动node_exporter在后台开始工作时,node_exporter和Prometheus还没有进行对接关联,此时,二者只是各自独立运行的应用程序。现在需要将已安装部署好的node_exporter添加到Prometheus服务器中。可以在Prometheus主机目录中,找到主配置文件,使用其中的静态配置功能static_configs来采集node_exporter提供的数据。

编辑prometheus.yml文件,添加job与node_exporter进行关联的参考配置内容如下:

# vi prometheus.yml
scrape_configs:
   - job_name: 'prometheus'
        static_configs:
       - targets: ['172.16.60.63:9090']
 - job_name: 'node_exporter'
       static_configs:
     - targets: ['172.16.60.63:9100']

配置完成后,需要我们重新启动prometheus或进行动态热加载操作,使修改后的配置文件加载生效。现在,可以在浏览器中输入Prometheus示例页面地址http://172.16.60.63:9090,访Prometheus web UI提供的页面内容,再点击“Status”中的“Targets”,如图所示。

 进入Targets页面后,可以在列表中看到刚才配置好的node_exporter的状态为“UP”,说明Prometheus最后一次从Nodeexporter中采集数据是成功的,此刻,被监控的服务器主机工作运行
状态是正常的

2、Windows主机监控

应用信息如下:
·被监控的Windows操作系统版本,Windows Server 2016 R2 Enterprise x86_64。
·Windows服务器主机IP地址,172.16.61.75。
·wmi_exporter选择下载版本,windows_exporter-0.22.0-amd64.msi。

1) 软件下载与部署
下载页面地址:
https://github.com/martinlindhe/wmi_exporter/releases。

选择当前最新版本:windows_exporter-0.22.0-amd64.msi 下载到被监控主机。

直接双击文件进行快速安装即可。wmi_exporter会自动安装到C:\Program Files\windows_exporter目录下。在命令提示符中输入命令:netstat-ab,可以看到windows_exporter.exe开启默认端口9182进行监听。此时,可以使用浏览器访问http://192.168.24.16:9182/metrics页面地址,若看到
windows_exporter各项采集指标,说明wmi_exporter已经成功安装

2)与Prometheus集成

在Prometheus的配置文件prometheus.yml中继续追加static_configs来采集wmi_exporter提供的数据。添加的参考配置内容如下:

- job_name: 'wmi_exporter'
  scrape_interval: 10s
  static_configs:
   - targets: ['172.16.61.75:9182']

配置完成后,需要我们重新启动Prometheus或动态热加载,使配置文件加载生效。现在,可以在浏览器中输入Prometheus示例页面地址http://172.16.60.63:9090来访问Prometheus Web UI
提供的页面内容。点击“Status”中的“Targets”后,在Targets页面列表中新增了windows_exporter显示项目,且windows_exporter状态为“UP”,如图所示。

3、MySQL数据库监控

应用信息如下:
·Linux操作系统版本,CentOS Linux release 7.5.1804(Core)
x86_64。
·MySQL主机IP地址,172.16.61.69。
·MySQL版本,mysql-5.7.20。
·mysqld_exporter选择下载版本,mysqld_exporter-0.11.0.linuxamd64.tar.gz。

3.1 软件下载与部署

在官方下载页面https://prometheus.io/download/中找到mysqld_exporter列表,下
载最新版本中特定平台的二进制文件

部署可分为以下6个步骤。
1)下载mysqld_exporter完成后,获取软件包的哈希值,与官网提供的软件包列表中“SHA256 Checksum”列里的哈希值进行核对,保证所下载的mysqld_exporter软件包的完整性。
2)解压缩软件包到指定的安装目录。
mysqld_exporter同样也采用Go语言编写而成,不依赖于第三方,
所以下载完成后,只需解压缩二级制软件包后运行mysqld_exporter即可。
3)创建MySQL授权用户。
连接到MySQL服务器,创建一个用户,例如
“mysqld_exporter”。该用户需要拥有PROCESS,SELECT,REPLICATION CLIENT授权,且为了避免有些高负载MySQL服务器过载,为用户设置最大连接限制。可以进行如下操作:

mysql>CREATE USER 'mysqld_exporter'@'localhost' IDENTIFIED BY
'YourStrongPassword' WITH \
MAX_USER_CONNECTIONS 2; #注意MySQL5.5版本时去掉MAX_USER_CONNECTIONS选

mysql>GRANT PROCESS, REPLICATION CLIENT, SELECT ON *.* TO
'mysqld_exporter'@'localhost';
mysql>FLUSH PRIVILEGES;
mysql> select Host,User from mysql.user; # 核查用户是否已经创建完成

4)配置数据库认证。
mysqld_exports需要连接数据库服务器的用户名和密码
在与“mysqld_exports”文件同目录下创建“.mysqld_exporter.cnf”文件,并添加如下内容:

# vi .mysqld_exporter.cnf
[client]
user=mysqld_exporter
password=YourStrongPassword

# tree -a mysqld_exporter # 查看mysqld_exporter目录
下内容
mysqld_exporter
├── LICENSE
├── .mysqld_exporter.cnf
├──mysqld_exporter
└── NOTICE

5)启动mysqld_exporter。
启动时需要指定配置文件路径
# ./mysqld_exporter --config.my-cnf=".mysqld_exporter.cnf" 

mysqld_exporter成功启动后,默认监听端口是9104,其中,“Enabled collectors”列是mysqld_exporter默认情况下启用的功能。

6)添加mysqld_exporter,为系统服务启动。
创建系统服务启动配置文件mysqld_exporter.service:

# vi /usr/lib/systemd/system/mysqld_exporter.service # 参考内容如下:

[Unit]
Description=Prometheus MySQL Exporter
After=network.target
User=root
Group=root

[Service]
Type=simple
Restart=always
ExecStart=/data/mysqld_exporter/mysqld_exporter \
--config.my-cnf=/data/mysqld_exporter/.mysqld_exporter.cnf \
--collect.global_status \
--collect.auto_increment.columns \
--collect.info_schema.processlist \
--collect.binlog_size \
--collect.info_schema.tablestats \
--collect.global_variables \
--collect.info_schema.innodb_metrics \
--collect.info_schema.query_response_time \
--collect.info_schema.userstats \
--collect.info_schema.tables \
--collect.perf_schema.tablelocks \
--collect.perf_schema.file_events \
--collect.perf_schema.eventswaits \
--collect.perf_schema.indexiowaits \
--collect.perf_schema.tableiowaits \
--collect.slave_status \
--web.listen-address=0.0.0.0:9104

[Install]
WantedBy=multi-user.target

最后可以通过systemctl命令进行各种操作,例如:

# systemctl daemon-reload # 通知systemd重新加载配置文件
# systemctl enable mysqld_exporter.service # 设置为开机自启动
# systemctl start mysqld_exporter.service # 开启服务
# systemctl status mysqld_exporter.service # 状态为Active: active(running)时已正常启动
# systemctl restart mysqld_exporter.service # 重启服务
# systemctl stop mysqld_exporter.service # 停止服务

7)与Prometheus集成

在Prometheus的配置文件prometheus.yml中的static_configs模块内,继续追加配置内容来采集mysqld_exporter提供的数据。添加的参考配置内容如下:

- job_name: 'mysqld_exporter'
    scrape_interval: 10s
    static_configs:
     - targets: ['172.16.61.69:9104']

配置完成后,需要重新启动Prometheus或进行动态热加载操作,可以在浏览器中输入Prometheus示例页面地址http://172.16.60.63:9090,访问Prometheus Web UI提供的内容,可以看到在Targets页面列表中已经新增了mysqld_exporter显示项,且mysqld_exporter状态为“UP”。

 

4、Redis数据库监控

应用信息如下:
·Linux操作系统版本为CentOS Linux release 7.5.1804(Core)x86_64。
·Redis主机IP地址为172.16.61.69。
·Redis版本为redis-4.0.9。
·redis_exporter选择下载版本为redis_exporter-v1.50.0.linux-amd64.tar

4.1 1.软件下载与部署
1)下载redis_exporter。
下载地址为https://github.com/oliver006/redis_exporter/releases。选择最新版本redis_exporter-v1.50.0.linux-amd64.tar

2)解压缩软件包到指定的安装目录:

# 进入安装目录下,在终端启动查看信息,成功启动,默认监听端口是9121。
# ./redis_exporter -redis.addr localhost:6379 -redis.password
YourStrongPassword

3)添加redis_exporter为系统服务开机启动配置文件
redis_exporter.service:

# vi /usr/lib/systemd/system/redis_exporter.service # 参考内容如下:
[Unit]
Description=Prometheus Redis Exporter
After=network.target
[Service]
Type=simple
Restart=always
ExecStart=/data/redis_exporter/redis_exporter \
-redis.addr localhost:6379 \
-redis.password YourStrongPassword \
[Install]
WantedBy=multi-user.target

最后可以通过systemctl命令进行各种操作,例如:

# systemctl daemon-reload # 通知systemd重新加载配置文件
# systemctl enable redis_exporter.service # 设置为开机自启动
# systemctl start redis_exporter.service # 开启服务
# systemctl status redis_exporter.service # 状态为Active: active(running)时已正常启动
# systemctl restart redis_exporter.service # 重启服务
# systemctl stop redis_exporter.service # 停止服务

4)与Prometheus集成

在Prometheus的配置文件prometheus.yml中的static_configs模块内,继续追加配置内容来采集redis_exporter提供的数据。参考配置内容如下:

- job_name: 'redis_exporter'
     scrape_interval: 10s
     static_conf?igs:
     - targets: ['172.16.61.69:9121']

配置完成后,需要重新启动Prometheus或动态热加载,对配置文件进行加载生效操作。现在,可以在浏览器中输入Prometheus示例页面地址http://172.16.60.63:9090,访问Prometheus Web UI提供的内容,可以看到在Targets页面列表中已经新增了redis_exporter显示项,且redis_exporter状态为“UP”。