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

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

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 页面

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 导入自带的图标模板

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


导入 node exporter 模板:Dashboards -> New -> Import ,https://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
- 本文作者:Nine
- 本文链接:https://blog.nine.gt.tc/2024/01/04/linux-install-prometheus/
- 版权声明:自由转载-非商用-非衍生-保持署名(创意共享3.0许可证)