exporter-监控案例
node_expoter
安装插件
# 下载包
wget https://github.com/prometheus/node_exporter/releases/download/v1.9.1/node_exporter-1.9.1.linux-amd64.tar.gz
tar -xvf node_exporter-1.9.1.linux-amd64.tar.gz
mv node_exporter-1.9.1.linux-amd64/node_exporter /usr/local/bin
# 验证
node_exporter --version
# 创建程序用户
useradd -Ms /sbin/nologin prometheus
# 配置service管理文件
cat > /usr/lib/systemd/system/node_exporter.service <<"EOF"
[Unit]
Description=Node Exporter for Prometheus
Documentation=https://prometheus.io/docs/guides/node-exporter/
After=network.target
[Service]
Type=simple
User=prometheus
ExecStart=/usr/local/bin/node_exporter \
--web.listen-address=0.0.0.0:9100 \
--no-collector.ipvs
Restart=always
RestartSec=3
[Install]
WantedBy=multi-user.target
EOF
systemctl daemon-reload
systemctl enable node_exporter --now
# 验证
# 浏览器通过访问:http://localhost:9100/metrics配置 Prometheus 抓取指标
scrape_configs:
# The job name is added as a label `job=<job_name>` to any timeseries scraped from this config.
- job_name: "linux"
static_configs:
- targets: ["localhost:9090"]
labels:
app: "linux"
# 或者配置自动发现
scrape_configs:
file_sd_configs:
- files: ['/usr/local/prometheus/sd_configs/*.yaml']
refresh_interval: 5s配置 Grafana 仪表盘
- 进入 Grafana,点击 "Dashboards" -> "Import"
- 输入仪表盘 ID(推荐 8919 这些是社区提供的热门 Linux 监控仪表盘),点击 Load
- 选择对应的 Prometheus 数据源,点击 Import。
监控 MySQL
创建监控用户
create user mysql_monitor@'localhost' identified by '123456';
GRANT PROCESS,REPLICATION CLIENT,SELECT ON *.* TO mysql_monitor@'localhost';
FLUSH PRIVILEGES;安装插件
wget https://github.com/prometheus/mysqld_exporter/releases/download/v0.17.2/mysqld_exporter-0.17.2.linux-amd64.tar.gz
tar -xvf mysqld_exporter-0.17.2.linux-amd64.tar.gz
mv mysqld_exporter-0.17.2.linux-amd64/mysqld_exporter /usr/local/bin
# 创建程序用户
useradd -Ms /sbin/nologin prometheus
# 创建MySQL客户端连接信息
cat > /etc/mysqld_exporter.conf <<'EOF'
[client]
user=mysql_monitor
password=123456
EOF
chown prometheus:prometheus /etc/mysqld_exporter.conf
# 创建service管理文件
cat > /usr/lib/systemd/system/mysqld_exporter.service << 'EOF'
[Unit]
Description=MySQL Exporter
After=network.target
[Service]
User=prometheus
ExecStart=/usr/local/bin/mysqld_exporter --config.my-cnf=/etc/mysqld_exporter.conf
Restart=always
[Install]
WantedBy=multi-user.target
EOF
systemctl daemon-reload
systemctl enable mysqld_exporter --now
# 验证安装:访问 http://服务器IP:9104/metrics,若能看到 MySQL 相关指标配置Prometheus 抓取指标
- targets:
- '192.168.80.143:9104'
labels:
yunjisuan: mysql配置Grafana仪表盘
- 进入 Grafana,点击 "Dashboards" -> "Import"
- 输入仪表盘 ID(推荐 7362 这些是社区提供的热门 MySQL监控仪表盘),点击 Load
- 选择对应的 Prometheus 数据源,点击 Import。
监控 Redis
安装插件
wget https://github.com/oliver006/redis_exporter/releases/download/v1.76.0/redis_exporter-v1.76.0.linux-amd64.tar.gz
tar -xvf redis_exporter-v1.76.0.linux-amd64.tar.gz
mv redis_exporter-v1.76.0.linux-amd64/redis_exporter /usr/local/bin
# 创建程序用户
useradd -Ms /sbin/nologin prometheus
# 创建service管理文件
cat > /usr/lib/systemd/system/redis_exporter.service << 'EOF'
[Unit]
Description=Redis Exporter
After=network.target
[Service]
User=prometheus
ExecStart=/usr/local/bin/redis_exporter \
--redis.addr=redis://localhost:6379 \
--redis.password=your_redis_password
Restart=always
[Install]
WantedBy=multi-user.target
EOF
systemctl daemon-reload
systemctl enable redis_exporter --now
# 验证安装:访问 http://服务器IP:9121/metrics,若能看到 Redis 相关指标(如 redis_up、redis_connected_clients),说明启动成功配置 Prometheus 抓取指标
编辑 Prometheus 的配置文件 prometheus.yml,添加一个抓取 redis_exporter 数据的 job
scrape_configs:
- job_name: 'redis'
static_configs:
- targets: ['localhost:9121'] # Redis Exporter 的地址和端口重启 Prometheus 或发送 SIGHUP 信号使其重载配置
配置 Grafana 仪表盘
- 进入 Grafana,点击 "Dashboards" -> "Import"
- 输入仪表盘 ID(推荐 763 或 11835,这些是社区提供的热门 Redis 监控仪表盘),点击 Load
- 选择对应的 Prometheus 数据源,点击 Import。
关键监控指标
- 可用性:
redis_up(值为 1 表示正常)。 - 连接数:
redis_connected_clients(当前连接数)。 - 内存使用:
redis_used_memory(已用内存)、redis_used_memory_peak(内存使用峰值)。 - 命中率:
redis_keyspace_hits(命中数)、redis_keyspace_misses(未命中数),命中率 = hits/(hits+misses)。 - 持久化:
redis_rdb_last_save_time(最近 RDB 保存时间)
监控 Nginx
检测Nginx模块
Nginx 的 stub_status 模块能提供基础的状态信息。首先确保它已启用并配置好
nginx -V 2>&1 | grep -o with-http_stub_status_module配置监控项
server {
listen 80;
server_name localhost;
location /nginx_status {
stub_status on; # 启用状态模块
access_log off; # 可选:关闭此位置的访问日志
allow 127.0.0.1; # 允许本地访问,重要!
deny all; # 拒绝所有其他访问
}
}
# 重载 Nginx 配置:sudo nginx -s reload。
# 访问 http://你的服务器IP/nginx_status 验证是否输出状态数据。安装Nginx插件
nginx-prometheus-exporter 会抓取 /nginx_status 页面的数据并将其转换为 Prometheus 可读取的格式
wget https://github.com/nginxinc/nginx-prometheus-exporter/releases/download/v1.0.0/nginx-prometheus-exporter_1.0.0_linux_amd64.tar.gz
tar -xzf nginx-prometheus-exporter_1.0.0_linux_amd64.tar.gz -C /usr/local/bin/
# 检测
nginx-prometheus-exporter --version
# 创建程序用户
useradd -Ms /sbin/nologin prometheus
# 创建管理文件
cat > /usr/lib/systemd/system/nginx_exporter.service << 'EOF'
[Unit]
Description=NGINX Prometheus Exporter
After=network.target
[Service]
Type=simple
User=prometheus
ExecStart=/usr/local/bin/nginx-prometheus-exporter -nginx.scrape-uri http://localhost/nginx_status
Restart=always
[Install]
WantedBy=multi-user.target
EOF
sudo systemctl daemon-reload
sudo systemctl start nginx_exporter
sudo systemctl enable nginx_exporter配置 Prometheus 抓取指标
编辑 Prometheus 的配置文件 prometheus.yml,添加一个抓取任务
scrape_configs:
- job_name: 'nginx'
static_configs:
- targets: ['localhost:9113'] # nginx-exporter 的地址和端口
scrape_interval: 15s # 抓取间隔,可根据需要调整导入仪表盘
- 进入 Grafana,点击 "Dashboards" -> "Import"。
- 输入仪表盘 ID 12708(这是一个流行的 Nginx 仪表盘),点击 Load。
- 选择对应的 Prometheus 数据源,点击 Import。
监控systemd服务
启用Systemd 监控
监控服务状态,在启动node_exporter的时候要增加监控systemd的选项功能
/usr/local/bin/node_exporter \
--web.listen-address=0.0.0.0:9100 \
--no-collector.ipvs \
--collector.systemd \
--collector.systemd.unit-include=(nginx|httpd).service
# 对于通过 systemd 管理的 Node Exporter,修改其 service 文件(如 /etc/systemd/system/node_exporter.service)的 ExecStart 行
ExecStart=/usr/local/bin/node_exporter --collector.systemd
# --collector.systemd 开启systemd的监控
# --collector.systemd.unit-whitelist=".+" 增加需要监控的服务名单
# --collector.systemd.unit-include="(nginx|mysql|docker)" 只监控特定的服务单元,避免数据过多
# --collector.systemd.enable-task-metrics 监控服务的任务数
# --collector.systemd.enable-restarts-metrics # 记录服务的重启次数指标
| 指标名称 | 指标类型 | 核心标签 | 描述 |
|---|---|---|---|
node_systemd_unit_state | Gauge | name, state, type | 服务单元状态(0/1表示状态) |
node_systemd_units | Gauge | state | 各状态服务数量统计 |
node_systemd_system_running | Gauge | - | 系统整体运行状态(1表示正常运行) |
node_systemd_service_restart_total | Counter | name | 服务的重启次数 |
node_systemd_timer_last_trigger_seconds | Gauge | name | 定时器最后一次触发的时间戳 |
node_systemd_socket_accepted_connections_total | Counter | name | 套接字服务接受的总连接数 |
node_systemd_socket_current_connections | Gauge | name | 套接字服务的当前连接数 |
node_systemd_socket_refused_connections_total | Counter | name | 套接字服务拒绝的连接数 |
仪表盘查看
打开你的 Grafana 仪表盘,点击顶部的 "Add" 按钮,然后选择 "Add new panel"
node_systemd_unit_state{name="docker.service", state="inactive"}JMX Exporter
下载 JMX Exporter Agent
wget https://github.com/prometheus/jmx_exporter/releases/download/1.4.0/jmx_prometheus_javaagent-1.4.0.jar
# 或者
wget https://repo1.maven.org/maven2/io/prometheus/jmx/jmx_prometheus_javaagent/0.17.2/jmx_prometheus_javaagent-0.17.2.jar创建配置文件
MX Exporter 需要一个配置文件来定义要收集的指标。创建一个 YAML 文件(例如 config.yaml)。初期为了测试,可以使用一个简单的配置收集所有指标
startDelaySeconds: 0
lowercaseOutputName: true
lowercaseOutputLabelNames: true
rules:
# - pattern: ".*" # 匹配所有
- pattern: 'java.lang<type=Memory><>HeapMemoryUsage'
name: jvm_memory_heap_usage_bytes
help: JVM heap memory usage
type: GAUGEstartDelaySeconds:延迟开始收集指标的时间(秒)。lowercaseOutputName,lowercaseOutputLabelNames:将指标名称和标签名称转换为小写,符合 Prometheus 规范。rules:定义如何匹配和转换 JMX MBean 的规则。pattern: ".*"表示匹配所有 MBean。
启动应用并集成 JMX Exporter
推荐的方式是将 JMX Exporter 作为 Java Agent 运行,与你的 Java 应用程序在同一个 JVM 进程中启动
java -javaagent:/path/to/jmx_prometheus_javaagent-0.17.2.jar=<暴露端口>:<配置文件路径> -jar your_application.jar
# 示例
java -javaagent:./jmx_prometheus_javaagent-0.17.2.jar=8088:./config.yaml -jar myapp.jar8088:JMX Exporter 暴露指标的 HTTP 端口。config.yaml:你的配置文件路径。myapp.jar:你的应用程序 jar 包。
对于 Tomcat 等 Web 容器,需要修改其启动脚本(如 catalina.sh),在 JAVA_OPTS 环境变量中添加 -javaagent 参数
配置 Prometheus 抓取指标
JMX Exporter 启动并暴露指标后,接下来需要配置 Prometheus 来抓取这些数据。
编辑 Prometheus 的配置文件 prometheus.yml,在 scrape_configs 部分添加一个新的 job
scrape_configs:
- job_name: 'jvm' # 任务名称,可根据应用自定义
static_configs:
- targets: ['<你的应用主机IP>:8088'] # JMX Exporter 暴露的地址和端口
scrape_interval: 15s # 抓取间隔,可根据需要调整配置后,重启 Prometheus 或向其发送 SIGHUP 信号以重载配置。
在 Grafana 中可视化 JVM 指标
数据被 Prometheus 采集后,可以通过 Grafana 进行强大的可视化展示。
- 添加数据源:在 Grafana 中,添加你的 Prometheus 服务器作为数据源(URL 通常是
http://<prometheus-server>:9090)。 - 导入仪表盘:Grafana 社区提供了丰富的现成 JVM 监控仪表盘模板。
- 进入 Grafana → Dashboards → Import。
- 输入仪表盘 ID(例如 4701 或 8563),点击 Load。
- 选择对应的 Prometheus 数据源,点击 Import。
