平凡也就两个字: 懒和惰;
成功也就两个字: 苦和勤;
优秀也就两个字: 你和我。
跟着我从0学习JAVA、spring全家桶和linux运维等知识,带你从懵懂少年走向人生巅峰,迎娶白富美!
关注微信公众号【 IT特靠谱 】,每天都会分享技术心得~
1.安装Prometheus
官方提供了三种安装方式:
(1)根据二进制包安装
(2)对源码进行编译后安装
(3)通过Docker容器安装
详见官网:Installation | Prometheus
Tip1: 对源码进行编译后可得到二进制安装包,由于二进制安装包的方式安装较简单(步骤1:下载二进制包;步骤2:解压二进制包;步骤3:./prometheus启动),因此本文不采用此方式。
Tip2:下面以“通过Docker容器安装”方式为例,分别采用Docker和Docker-Compose两种部署方式,对Prometheus的安装步骤进行指导!此两种部署的结果完全一样,视实际情况任选一即可!
Tip3:截止目前,最新的prometheus镜像TAG为:v2.50.0-rc.1。本文基于此镜像进行操作演示。
Tip4:本教程是基于Docker和Docker-compose进行安装的,因此需要在服务器上提前安装好Docker和Docker-compose,本教程略。
Tip5:执行本文中的命令时,应先把所有注释去掉后执行。注释仅仅是为了说明每行命令的作用。
1.1.Docker容器化部署Prometheus
1.1.1.官方镜像
镜像仓库地址:prometheus DockerHub
Tips:镜像启动后,Prometheus默认暴露9090端口(启动时可以通过“--web.listen-address="0.0.0.0:9090"”命令行参数修改其配置)。
1.1.2.前期准备
(1)创建prometheus的配置和数据存放目录:mkdir -p /myPrometheus/data
(2)修改数据目录权限为777:chmod -R 777 /myPrometheus/data/
1.1.3.获取prometheus自带的配置文件
若您已经有prometheus.yml配置文件了,则忽略此操作步骤!
此步骤的目的:将prometheus的镜像运行为容器后,将容器内自带的prometheus.yml配置文件拷贝到宿主机中。后面我们就可以将容器中的prometheus.yml配置文件挂载宿主机的prometheus.yml配置文件,便于开发或运维人员进行参数配置。
(1)启动prometheus
docker run \
-p 19090:9090 \
prom/prometheus:v2.50.0-rc.1
(2)将容器内的配置文件拷贝到宿主机中
# 将容器中自带的prometheus.yml配置文件拷贝到宿主机的“/myPrometheus”目录下
docker cp 容器id:/etc/prometheus/prometheus.yml /myPrometheus
(3)停止prometheus容器
docker stop 容器id
到此为止,我们拿到了prometheus默认的prometheus.yml配置文件了。存放在了“/myPrometheus”目录下。
1.1.4.编写配置文件
编写prometheus.yml、rule.yml和basic_auth.yml配置文件。并放到“/myPrometheus”目录下。
(1)prometheus.yml配置文件
# 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:
- "/etc/prometheus/rule.yml"
# - "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"
basic_auth:
username: admin
password: abc123
# metrics_path defaults to '/metrics'
# scheme defaults to 'http'.
static_configs:
- targets: ["localhost:9090"]
- job_name: other-prometheus-job
honor_timestamps: true
scrape_interval: 15s
scrape_timeout: 10s
metrics_path: /metrics
scheme: http
basic_auth:
username: admin
password: abc123
follow_redirects: true
static_configs:
- targets:
- 10.17.0.80:39093
labels:
instance: other-prometheus
(2)rule.yml规则配置文件
groups:
# 报警组组名称
- name: hostStatsAlert
#报警组规则
rules:
#告警名称,需唯一
- alert: target_down_alert
#promQL表达式
expr: sum_over_time(up[1m]) == 0
#满足此表达式持续时间超过for规定的时间才会触发此报警
for: 1m
labels:
#严重级别
severity: page
annotations:
#发出的告警标题
summary: "摘要:实例 {{ $labels.instance }} 宕机了"
#发出的告警内容
description: "描述:实例{{ $labels.instance }} 宕机了"
- alert: hostCpuUsageAlert
#promQL表达式
expr: sum(avg without (cpu)(irate(node_cpu_seconds_total{mode!='idle'}[5m]))) by (instance) > 0.85
#满足此表达式持续时间超过for规定的时间才会触发此报警
for: 1m
labels:
#严重级别
severity: page
annotations:
#发出的告警标题
summary: "实例 {{ $labels.instance }} CPU 使用率过高"
#发出的告警内容
description: "实例{{ $labels.instance }} CPU 使用率超过 85% (当前值为: {{ $value }})"
- alert: hostMemUsageAlert
expr: (node_memory_MemTotal_bytes - node_memory_MemAvailable_bytes)/node_memory_MemTotal_bytes > 0.85
for: 1m
labels:
severity: page
annotations:
summary: "实例 {{ $labels.instance }} 内存使用率过高"
description: "实例 {{ $labels.instance }} 内存使用率 85% (当前值为: {{ $value }})"
- alert: hostDiskUsageAlert
expr: ((node_filesystem_size_bytes - node_filesystem_free_bytes ) / node_filesystem_size_bytes ) > 0.30
for: 5m
labels:
severity: middle
annotations:
summary: "实例 {{ $labels.instance }} 磁盘空间使用率过高"
description: "实例 {{ $labels.instance }},挂载点:{{ $labels.mountpoint }} 磁盘空间使用率 30% (当前值为: {{ $value }})"
(3)basic_auth.yml基础认证配置文件
basic_auth_users:
# 定义一个admin用户,密码为:abc123
admin: $2a$12$7BanjRgbITIOzEf6pTIULebHs9Ypt0wZAAKxySHjFHNpEHLaPRLYG
1.1.5.通过docker再次启动prometheus服务
(1) 创建名为monitor的网络
#创建名为monitor的网络,默认为bridge模式
docker network create monitor

(2)启动prometheus
由于prometheus对系统时间比较敏感,因此启动容器后要保证容器时间的准确性,因此在启动prometheus服务时应将docker容器中的/etc/localtime时间文件挂载到宿主机的时间文件上。
docker run -di \
#指定prometheus容器名称
--name=myPrometheus \
#将prometheus容器的9090端口绑定到宿主机的19090端口
-p 19090:9090 \
#将宿主机的prometheus.yml配置文件挂载到容器中
-v /myPrometheus/prometheus.yml:/etc/prometheus/prometheus.yml \
#将宿主机的prometheus.yml配置文件挂载到容器中
-v /myPrometheus/basic_auth.yml:/etc/prometheus/basic_auth.yml \
#将宿主机的/prometheus/data数据目录挂载到容器的/prometheus
-v /myPrometheus/data:/prometheus \
#挂载时间文件,可保证docker容器的时间与宿主机时间一致
-v /etc/localtime:/etc/localtime:ro \
#指定连接的网络名称为monitor
--network=monitor \
#指定镜像
prom/prometheus:v2.50.0-rc.1 \
#指定命令行参数,会替代Dockerfile中的CMD。指定prometheus的配置文件路径、tsdb数据目录路径、指定基础认证配置文件路径、指定其它命令行参数的值
"--config.file=/etc/prometheus/prometheus.yml" "--storage.tsdb.path=/prometheus" "--web.config.file=/etc/prometheus/basic_auth.yml" "--query.max-concurrency=30"
实际在docker容器中执行的是如下命令来启动的prometheus服务:
#启动prometheus服务
./bin/prometheus --config.file=/etc/prometheus/prometheus.yml --storage.tsdb.path=/prometheus --web.config.file=/etc/prometheus/basic_auth.yml --query.max-concurrency=30
1.1.6.验证prometheus服务
#查看容器启动日志
docker logs 容器id
查看容器启动日志,若有出现如下日志信息,则表示安装成功。

1.1.7.访问prometheus图形化界面
prometheus自带了一个Web UI界面,访问地址:http://ip:19090/graph,其中ip根据自己的服务器ip进行调整。
通过Web UI界面,我们可以:查看prometheus中配置的告警规则、正则告警的记录、查询采集的指标并通过图表可视化显示、查看prometheus服务的命令行参数值和配置信息、查看targets、tsdb的状态等。
1.1.8.查看command-flags,验证命令行参数值是否修改成功
访问地址:http://ip:19090/flags,其中ip根据自己的服务器ip进行调整。
从下面截图可以看到,“--query.max-concurrency”命令行参数的值成功由20调整为了30。

1.2.Docker-Compose容器化部署Prometheus
1.2.1.官方镜像
镜像仓库地址:prometheus DockerHub
Tips:镜像启动后,Prometheus默认暴露9090端口(启动时可以通过“--web.listen-address="0.0.0.0:9090"”命令行参数修改其配置)。
1.2.2.前期准备
(1)创建prometheus的配置和数据存放目录:mkdir -p /myPrometheus/data
(2)修改数据目录权限为777:chmod -R 777 /myPrometheus/data/
1.2.3.获取prometheus自带的配置文件
若您已经有prometheus.yml配置文件了,则忽略此操作步骤!
此步骤的目的:将prometheus的镜像运行为容器后,将容器内自带的prometheus.yml配置文件拷贝到宿主机中。后面我们就可以将容器中的prometheus.yml配置文件挂载宿主机的prometheus.yml配置文件,便于开发或运维人员进行参数配置。
(1)启动prometheus
docker run \
-p 19090:9090 \
prom/prometheus:v2.50.0-rc.1
(2)将容器内的配置文件拷贝到宿主机中
# 将容器中自带的prometheus.yml配置文件拷贝到宿主机的“/myPrometheus”目录下
docker cp 容器id:/etc/prometheus/prometheus.yml /myPrometheus
(3)停止prometheus容器
docker stop 容器id
到此为止,我们拿到了prometheus默认的prometheus.yml配置文件了。存放在了“/myPrometheus”目录下。
1.2.4.编写配置文件
编写prometheus.yml、rule.yml和basic_auth.yml配置文件。并放到“/myPrometheus”目录下。
(1)prometheus.yml配置文件
# 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:
- "/etc/prometheus/rule.yml"
# - "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"
basic_auth:
username: admin
password: abc123
# metrics_path defaults to '/metrics'
# scheme defaults to 'http'.
static_configs:
- targets: ["localhost:9090"]
- job_name: other-prometheus-job
honor_timestamps: true
scrape_interval: 15s
scrape_timeout: 10s
metrics_path: /metrics
scheme: http
basic_auth:
username: admin
password: abc123
follow_redirects: true
static_configs:
- targets:
- 10.17.0.80:39093
labels:
instance: other-prometheus
(2)rule.yml规则配置文件
groups:
# 报警组组名称
- name: hostStatsAlert
#报警组规则
rules:
#告警名称,需唯一
- alert: target_down_alert
#promQL表达式
expr: sum_over_time(up[1m]) == 0
#满足此表达式持续时间超过for规定的时间才会触发此报警
for: 1m
labels:
#严重级别
severity: page
annotations:
#发出的告警标题
summary: "摘要:实例 {{ $labels.instance }} 宕机了"
#发出的告警内容
description: "描述:实例{{ $labels.instance }} 宕机了"
- alert: hostCpuUsageAlert
#promQL表达式
expr: sum(avg without (cpu)(irate(node_cpu_seconds_total{mode!='idle'}[5m]))) by (instance) > 0.85
#满足此表达式持续时间超过for规定的时间才会触发此报警
for: 1m
labels:
#严重级别
severity: page
annotations:
#发出的告警标题
summary: "实例 {{ $labels.instance }} CPU 使用率过高"
#发出的告警内容
description: "实例{{ $labels.instance }} CPU 使用率超过 85% (当前值为: {{ $value }})"
- alert: hostMemUsageAlert
expr: (node_memory_MemTotal_bytes - node_memory_MemAvailable_bytes)/node_memory_MemTotal_bytes > 0.85
for: 1m
labels:
severity: page
annotations:
summary: "实例 {{ $labels.instance }} 内存使用率过高"
description: "实例 {{ $labels.instance }} 内存使用率 85% (当前值为: {{ $value }})"
- alert: hostDiskUsageAlert
expr: ((node_filesystem_size_bytes - node_filesystem_free_bytes ) / node_filesystem_size_bytes ) > 0.30
for: 5m
labels:
severity: middle
annotations:
summary: "实例 {{ $labels.instance }} 磁盘空间使用率过高"
description: "实例 {{ $labels.instance }},挂载点:{{ $labels.mountpoint }} 磁盘空间使用率 30% (当前值为: {{ $value }})"
(3)basic_auth.yml基础认证配置文件
basic_auth_users:
# 定义一个admin用户,密码为:abc123
admin: $2a$12$7BanjRgbITIOzEf6pTIULebHs9Ypt0wZAAKxySHjFHNpEHLaPRLYG
1.2.5.编写docker-compose配置文件
编写docker-compose-prometheus.yml配置文件,用于编排管理prometheus的docker服务。
由于prometheus对系统时间比较敏感,因此启动容器后要保证容器时间的准确性,因此在启动prometheus服务时应将docker容器中的/etc/localtime时间文件挂载到宿主机的时间文件上。
(1)docker-compose-prometheus.yml配置文件内容:
version: '3'
services:
prometheus:
restart: always
#指定prometheus的镜像版本
image: prom/prometheus:v2.50.0-rc.1
#容器名称
container_name: myPrometheus
volumes:
#将宿主机的prometheus.yml配置文件挂载到容器中
- /myPrometheus/prometheus.yml:/etc/prometheus/prometheus.yml
#将宿主机的basic_auth.yml配置文件挂载到容器中
- /myPrometheus/basic_auth.yml:/etc/prometheus/basic_auth.yml
#将宿主机的/prometheus/data数据目录挂载到容器的/prometheus目录
- /myPrometheus/data:/prometheus
#挂载时间文件,可保证docker容器的时间与宿主机时间一致
- /etc/localtime:/etc/localtime:ro \
#将容器中的9090端口绑定到宿主机的19090端口
ports:
- 19090:9090
#指定容器启动的命令行参数
command:
#指定prometheus的配置文件路径
- --config.file=/etc/prometheus/prometheus.yml
#指定prometheus的tsdb数据目录路径
- --storage.tsdb.path=/prometheus
#指定prometheus的基础认证配置文件路径
- --web.config.file=/etc/prometheus/basic_auth.yml
#指定其它命令行参数的值
- --query.max-concurrency=30
#指定容器网络
networks:
- monitor
#声明网络。网络名称为monitor,bridge桥接驱动模式
networks:
monitor:
driver: bridge
1.2.6.通过docker-compose启动prometheus服务
启动prometheus服务:
# docker-compose方式启动prometheus
docker-compose -f docker-compose-prometheus.yml up -d
若需要停止prometheus容器服务,则执行下面命令:
# docker-compose方式停止prometheus
docker-compose -f docker-compose-prometheus.yml down
实际在docker容器中执行的是如下命令来启动的prometheus服务:
#启动prometheus服务
./bin/prometheus --config.file=/etc/prometheus/prometheus.yml --storage.tsdb.path=/prometheus --web.config.file=/etc/prometheus/basic_auth.yml --query.max-concurrency=30
1.2.7.验证prometheus服务
#查看容器启动日志
docker-compose -f docker-compose-prometheus.yml logs
查看容器启动日志,若有出现如下日志信息,则表示安装成功。

1.2.8.访问prometheus图形化界面
prometheus自带了一个Web UI界面,访问地址:http://ip:19090/graph,其中ip根据自己的服务器ip进行调整。
通过Web UI界面,我们可以:查看prometheus中配置的告警规则、正则告警的记录、查询采集的指标并通过图表可视化显示、查看prometheus服务的命令行参数值和配置信息、查看targets、tsdb的状态等。
1.2.9.查看command-flags,验证命令行参数值是否修改成功
访问地址:http://ip:19090/flags,其中ip根据自己的服务器ip进行调整。
从下面截图可以看到,“--query.max-concurrency”命令行参数的值成功由20调整为了30。


5139



被折叠的 条评论
为什么被折叠?



