一、yum 安装 prometheus
1. 官网下载安装包
https://prometheus.io/download/
2. 解压
$ tar xvfz prometheus-2.32.0-beta.0.linux-amd64.tar.gz -C /home
3. 重命名
mv prometheus-2.32.0-beta.0.linux-amd64/ prometheus-2.32.0
4. 维护配置文件
prometheus.yml 是 Prometheus 的配置文件。配置信息详细介绍可查看官方文档:https://prometheus.io/docs/prometheus/latest/configuration/configuration/
prometheus.yml 部分配置信息如下:
# 全局配置
global:
scrape_interval: 15s # 设置每15s采集数据一次,默认1分钟
evaluation_interval: 15s # 每15秒计算一次规则,默认1分钟
# scrape_timeout:15s # 采集数据超时时间,默认10s。
# 告警配置
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"
# 在 scrape_config 中每个监控目标是一个job,但job的类型有很多种。可以是最简单的 static_config,即静态地指定每一个目标。
scrape_configs:
# 这是 prometheus 本机的一个监控节点
- job_name: "prometheus"
# metrics_path defaults to '/metrics'
# scheme defaults to 'http'.
static_configs:
# targets 配置要监控的节点,格式:机器名+端口号。配置完成后,prometheus就可以通过配置文件识别监控的节点,持续开始采集数据
# 可以并列写入多个节点,用逗号隔开
- targets: ["localhost:9090"]
- job_name: 'pushgateway'
static_configs:
- targets: ['xx.xx.xx.xx:9091']
honor_labels: true #作用:如果没有设置instance标签,Prometheus服务器也会附加标签,否则instance标签值会为空
指标说明:
- Prometheus 以 scrape_interval 规则周期性从监控目标上收集数据,然后将数据存储到本地(scrape_interval 可以设定全局也可以设定单个 metrics);
- Prometheus 以 evaluation_interval 规则周期性对告警规则做计算,然后更新告警状态(evaluation_interval 只设定在全局);
- global:全局配置;
- alerting:告警配置;
- rule_files:告警规则;
- scrape_configs:配置数据源,称为 target,每个 target 用 job_name 命名,又分为静态配置和服务发现。
二、使用 Prometheus
1. 启动 Prometheus
$ ./prometheus --config.file="/home/prometheus-2.32.0/prometheus.yml" &
2. 登录 prometheus
Prometheus启动端口为 9090,可通过 http://localhost:9090/graph 登录。
3. 查看配置
点击 status --> Configuration。
4. 查看 Targets
点击 status --> Targets:里面就是已经监控的节点。
5. 主机数据展示
访问 localhost:9090/metrics。
6. 监控一下 CPU 的运行情况
点击工具栏中的 Graph,进入如下界面,在搜索框输入要监控的目标。
点击右侧的 Execute,如下,有 Table 和 Graph 两种形式。
7. 停止 Prometheus
$ pkill prometheus
查看 9090 端口的占用情况
$ lsof -i:9090
或者
ss -naltp |grep 9090
三、docker 安装 Prometheus
1. 拉取 prometheus 镜像
docker pull public-docker-virtual.artnj.zte.com.cn/prom/prometheus:latest
2. 维护配置信息
2.1 创建安装 prometheus 的路径以及存储数据的路径
mkdir /var/demeter/monitor/install/prometheus
cd /var/demeter/monitor/install/prometheus
vim prometheus.yml
tips:要先创建好这些目录后,再执行下面的启动 prometheus 的命令,否则会有如下报错:
docker: Error response from daemon: OCI runtime create failed: container_linux.go:370: starting container process caused: process_linux.go:459: container init caused: rootfs_linux.go:59: mounting "/var/demeter/monitor/install/prometheus/prometheus.yml" to rootfs at "/var/lib/docker/overlay2/3bef52dbfbf62d1014b9c5b490bf850ceb07ebb4c522d28060230fd9ed0a14ed/merged/etc/prometheus/prometheus.yml" caused: not a directory: unknown: Are you trying to mount a directory onto a file (or vice-versa)? Check if the specified host path exists and is the expected type.
2.2 再加个 data 文件夹用于挂载 prometheus 的数据
mkdir /var/demeter/monitor/install/prometheus/data
将挂载目录权限设置为 777,防止 run 时候提示 data 没有权限创建文件目录
chmod 777 -R /var/demeter/monitor/install/prometheus/data
tips:如果没有修改权限,则启动容器失败,查看 log 会报如下错误:
# docker ps -a
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
df7eff73a483 public-docker-virtual.artnj.zte.com.cn/grafana/grafana:7.5.5 "/run.sh" About a minute ago Exited (1) About a minute ago grafana
086a917af8cc public-docker-virtual.artnj.zte.com.cn/prom/prometheus:latest "/bin/prometheus --c…" 15 minutes ago Exited (2) 15 minutes ago prometheus
[root@LIN-0ED66E909A6 monitor]# docker logs 086a917af8cc
ts=2022-01-28T07:55:57.514Z caller=main.go:406 level=info msg="No time or size retention was set so using the default time retention" duration=15d
ts=2022-01-28T07:55:57.515Z caller=main.go:444 level=info msg="Starting Prometheus" version="(version=2.31.1, branch=HEAD, revision=411021ada9ab41095923b8d2df9365b632fd40c3)"
ts=2022-01-28T07:55:57.515Z caller=main.go:449 level=info build_context="(go=go1.17.3, user=root@9419c9c2d4e0, date=20211105-20:35:02)"
ts=2022-01-28T07:55:57.515Z caller=main.go:450 level=info host_details="(Linux 4.19.112-2.el8.x86_64 #1 SMP Wed Jun 10 09:04:49 EDT 2020 x86_64 086a917af8cc (none))"
ts=2022-01-28T07:55:57.516Z caller=main.go:451 level=info fd_limits="(soft=1048576, hard=1048576)"
ts=2022-01-28T07:55:57.516Z caller=main.go:452 level=info vm_limits="(soft=unlimited, hard=unlimited)"
ts=2022-01-28T07:55:57.516Z caller=query_logger.go:87 level=error component=activeQueryTracker msg="Error opening query log file" file=/prometheus/queries.active err="open /prometheus/queries.active: permission denied"
panic: Unable to create mmap-ed active query log
goroutine 1 [running]:
github.com/prometheus/prometheus/promql.NewActiveQueryTracker({0x7fffd4bffee1, 0xb}, 0x14, {0x34442c0, 0xc0007e6370})
/app/promql/query_logger.go:117 +0x3d7
main.main()
/app/cmd/prometheus/main.go:491 +0x6bbf
3. 启动 Prometheus
docker run -d --privileged \
--env TZ=CST-08 \
-p 29090:9090 \
--name prometheus \
--volume /var/demeter/monitor/install/prometheus/prometheus.yml:/etc/prometheus/prometheus.yml \
--volume /var/demeter/monitor/install/data/:/prometheus \
public-docker-virtual.artnj.zte.com.cn/prom/prometheus:latest \
--config.file=/etc/prometheus/prometheus.yml \
--storage.tsdb.path=/prometheus \
--web.console.libraries=/usr/share/prometheus/console_libraries \
--web.console.templates=/usr/share/prometheus/consoles \
--web.enable-lifecycle
4. 查看是否启动成功
$ docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
984e19ae38dc public-docker-virtual.artnj.zte.com.cn/prom/prometheus:latest "/bin/prometheus --c…" 44 minutes ago Up 44 minutes 0.0.0.0:29090->9090/tcp prometheus