Prometheus 的安装与使用

2024/01/04 更新 1 次 更新于 2026/08/08 Linux 共 5962 字,约 18 分钟

Prometheus + Grafana 开源监控和报警系统搭建。

1、安装 Prometheus

Prometheus 是一个监控平台,通过从被监控目标的 HTTP 指标端点抓取指标来收集数据。

官网地址:https://prometheus.io/download,下面使用二进制安装包进行搭建

# 创建目录
mkdir -p /data/monitor

# 安装包下载
wget https://github.com/prometheus/prometheus/releases/download/v2.48.1/prometheus-2.48.1.linux-amd64.tar.gz

# 解压到指定目录
tar -zxvf prometheus-2.48.1.linux-amd64.tar.gz -C /data/monitor
mv /data/monitor/prometheus-2.48.1.linux-amd64 /data/monitor/prometheus

# 查看默认配置,按需修改
grep -vE "^$|^[\t| ]*#" prometheus.yml

image-20240104154717369

  • global:全局配置

    scrape_interval:设置 prometheus 守护进程拉取 agent 信息时间间隔

    evaluation_interval:设置根据后面 rule_files 字段定义的规则计算的时间间隔

  • alerting:告警配置

    用于配置告警信息,需要通过 alertmanagers 插件实现,这里暂时未配置

  • rule_files:规则配置

    主要用于触发告警,默认为空

  • scrape_configs:抓取目标机器配置

    job_name:标识这条记录,也就是这个配置内的记录都会添加上该字段

    targets:设置目标机地址,默认监控本机

增加访问 Prometheus web 端页面基本身份验证:vim web-config.yml

# web-config.yml,可选项,建议配置
basic_auth_users:
  admin: $2y$10$Ti2NIcA3apMg9OBxWjqHk.tmROYrpaDD77YHtkPp5pVsF7g9retra
  guest:$2y$10$X0h1gDsPszWURQaxFh.zoubFi6DXncSjhoQNJgRrnGs7EsimhC7zG

使用 htpasswd 生成 bcrypt 密码,参考:About bcrypt

yum -y install httpd-tools
htpasswd -nBC 10 "" | tr -d ':\n'

配置开机自启

# 启动 Prometheus
nohup /data/monitor/prometheus/prometheus --config.file=/data/monitor/prometheus/prometheus.yml --web.config.file=/data/monitor/prometheus/web-config.yml --storage.tsdb.retention.time=30d --web.listen-address=:9090 &

# 或者使用 systemctl 管理服务来启动
cat > /usr/lib/systemd/system/prometheus.service <<EOF
[Unit]
Description=prometheus
After=network.target

[Service]
ExecStart=/data/monitor/prometheus/prometheus --config.file=/data/monitor/prometheus/prometheus.yml --web.config.file=/data/monitor/prometheus/web-config.yml --storage.tsdb.retention.time=30d
ExecReload=/bin/kill -s HUP $MAINPID
Restart=on-failure

[Install]
WantedBy=multi-user.target
EOF

# 配置开机自启并启动服务
systemctl enable prometheus
systemctl start prometheus

修改 prometheus.yml 配置后对于普通用户 nohup 启动的有两种热加载方式使配置生效

# 用 kill 命令发送 HUP 信号
kill -s SIGHUP `pidof prometheus`

# 开启 web.enable-lifecycle 选项后使用 curl 命令
curl -X POST http://localhost:9090/-/reload

访问 web 页面:http://192.168.1.140:9090/targets

image-20240104160000695

2、安装 node_exporter

使用 node_exporter 采集客户端服务器信息

# 安装包下载
wget https://github.com/prometheus/node_exporter/releases/download/v1.7.0/node_exporter-1.7.0.linux-amd64.tar.gz

# 解压到指定目录下
tar -zxvf node_exporter-1.7.0.linux-amd64.tar.gz -C /data/monitor
mv /data/monitor/node_exporter-1.7.0.linux-amd64 /data/monitor/node_exporter

# nohup 启动
nohup /data/monitor/node_exporter &

# 或者使用 systemctl 管理服务来启动
cat > /usr/lib/systemd/system/node_exporter.service <<EOF
[Unit]
Description=node_exporter
After=network.target

[Service]
ExecStart=/data/monitor/node_exporter/node_exporter
ExecReload=/bin/kill -s HUP $MAINPID
Restart=on-failure

[Install]
WantedBy=multi-user.target
EOF

# 配置开机自启并启动服务
systemctl enable node_exporter
systemctl start node_exporter

客户端配置完成,最后在服务端 prometheus.yml 文件中增加配置

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"]
  # 增加配置
  - job_name: "192.168.1.100"
    static_configs:
      - targets: ["192.168.1.100:9100"]

  - job_name: "192.168.1.110"
    static_configs:
      - targets: ["192.168.1.110:9100"]

使用热加载方式重载 Prometheus 配置,刷新 targets 页面

image-20240104162135133

3、安装 Grafana

数据可视化平台,支持多种数据源(如 Prometheus),通过丰富的仪表盘展示监控数据。

# 安装包下载
wget https://dl.grafana.com/enterprise/release/grafana-enterprise-10.2.3.linux-amd64.tar.gz

# 解压到指定目录
tar -zxvf grafana-enterprise-10.2.3.linux-amd64.tar.gz -C /data/monitor
mv /data/monitor/grafana-v10.2.3 /data/monitor/grafana

# 按需修改默认配置后启动服务
cd /data/monitor/grafana/bin && nohup ./grafana-server &

# 修改默认配置
vim /data/monitor/grafana/conf/defaults.ini

建议修改默认配置,修改内容如下:

# 默认端口修改
http_port = 8888

# 本机 ip 修改
domain = 192.168.1.140

# url 访问路径修改
root_url = %(protocol)s://%(domain)s:%(http_port)s/grafana

# 开启子路径访问
serve_from_sub_path = true

# 配置 Grafana Live 功能的跨域请求白名单,防止连接被劫持,未修改时网页 WebSocket 连接会失败 (403 错误)
allowed_origins = http://192.168.1.140, http://192.168.1.140:8888

访问 web 页面:http://192.168.1.140:8888/grafana,首次登录时会要求修改密码

在首页 Data Sources 添加 Prometheus 数据源,Settings->Connection 处填写地址,保存后可以在 Settings 右侧的 Dashboards 导入自带的图标模板

image-20240104163606507

在 Dashboards 页面可以看到已导入的模板:http://192.168.1.140:8888/grafana/dashboards,点击对应模板查看监控信息

image-20240104163943737

image-20240104164305853

导入 node exporter 模板:Dashboards -> New -> Importhttps://grafana.com/grafana/dashboards/16098

4、增加进程监控

process-exporter 用以检测所选进程的状态信息

# 安装包下载
wget https://github.com/ncabatoff/process-exporter/releases/download/v0.7.10/process-exporter-0.7.10.linux-amd64.tar.gz

# 解压到指定目录
tar -zxvf process-exporter-0.7.10.linux-amd64.tar.gz -C /data/monitor
mv /data/monitor/process-exporter-0.7.10 /data/monitor/process-exporter

# nohup 方式启动
nohup /data/monitor/process-exporter/process-exporter -config.path=process160.yml &

# 或者使用 systemctl 管理服务来启动
cat > /usr/lib/systemd/system/process_exporter.service << EOF
[Unit]
Description=process_exporter
Documentation=https://github.com/ncabatoff/process-exporter
After=network.target

[Service]
Type=simple
ExecStart=/data/monitor/process-exporter/process-exporter -config.path=/data/monitor/process-exporter/process160.yaml -web.config.file=/data/monitor/process-exporter/web-config.yml
Restart=always

[Install]
WantedBy=multi-user.target
EOF

# 配置开机自启并启动服务
systemctl enable process_exporter
systemctl start process_exporter

process160.yml 配置文件格式及规则参考:https://github.com/ncabatoff/process-exporter

# 监控主机上某个进程
process_names:
 - name: "{{.Matches}}"
   cmdline:
   - 'testjava1.jar'

 - name: "{{.Matches}}"
   cmdline:
   - 'testjava2.jar'

{{.Comm}} 包含原始可执行文件的基本名称,即 /proc//stat

{{.ExeBase}} 包含可执行文件的基本名称

{{.ExeFull}} 包含可执行文件的标准路径

{{.Username}} 包含有效用户的用户名

{{.Matches}} 包含所有由于应用 cmdline 正则表达式而产生的匹配项

{{.PID}} 包含过程的 PID。请注意,使用 PID 意味着该组将仅包含一个进程

{{.StartTime}} 包含过程的开始时间。与 PID 结合使用时,这很有用,因为 PID 会随着时间的推移而被重用

web-config.yml 配置账号密码验证

basic_auth_users:
  prometheus: $2b$10$Ulj5uZntk3fw4keeqjFpnuQQPeJWWaAA1olIWGguh85HhhhD56iDG
 # 进程停止告警规则
 namedprocess_namegroup_num_procs{groupname!~"map.*(query|sidecar)."} < 1

 # 启动时间小于三分钟,意味着发生过重启
 (time() - namedprocess_namegroup_oldest_start_time_seconds{groupname!~"map.*(query|sidecar)."})/60 < 3

在 Prometheus 配置文件 prometheus.yml 中添加 process-exporter 信息后使用热加载方式重载配置

  - job_name: "process160"
    basic_auth:
      username: prometheus
      password: "yourpassword"
    static_configs:
      - targets: ['192.168.1.160:9256']

导入模板:https://grafana.net/dashboards/8378

Search

    Table of Contents