Skip to content

exporter-监控案例

node_expoter

安装插件

bash
# 下载包
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 抓取指标

bash
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

创建监控用户

sql
create user mysql_monitor@'localhost' identified by '123456';
GRANT PROCESS,REPLICATION CLIENT,SELECT ON *.* TO mysql_monitor@'localhost';
FLUSH PRIVILEGES;

安装插件

bash
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 抓取指标

yaml
- targets:
  - '192.168.80.143:9104'
  labels:
  yunjisuan: mysql

配置Grafana仪表盘

  • 进入 Grafana,点击 "Dashboards" -> "Import"
  • 输入仪表盘 ID(推荐 7362 这些是社区提供的热门 MySQL监控仪表盘),点击 Load
  • 选择对应的 Prometheus 数据源,点击 Import。

监控 Redis

安装插件

bash
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

yaml
scrape_configs:
  - job_name: 'redis'
    static_configs:
      - targets: ['localhost:9121']  # Redis Exporter 的地址和端口

重启 Prometheus 或发送 SIGHUP 信号使其重载配置

配置 Grafana 仪表盘

  • 进入 Grafana,点击 "Dashboards" -> "Import"
  • 输入仪表盘 ID(推荐 76311835,这些是社区提供的热门 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 模块能提供基础的状态信息。首先确保它已启用并配置好

bash
nginx -V 2>&1 | grep -o with-http_stub_status_module

配置监控项

nginx
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 可读取的格式

bash
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,添加一个抓取任务

yaml
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的选项功能

bash
/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_stateGaugename, state, type服务单元状态(0/1表示状态)
node_systemd_unitsGaugestate各状态服务数量统计
node_systemd_system_runningGauge-系统整体运行状态(1表示正常运行)
node_systemd_service_restart_totalCountername服务的重启次数
node_systemd_timer_last_trigger_secondsGaugename定时器最后一次触发的时间戳
node_systemd_socket_accepted_connections_totalCountername套接字服务接受的总连接数
node_systemd_socket_current_connectionsGaugename套接字服务的当前连接数
node_systemd_socket_refused_connections_totalCountername套接字服务拒绝的连接数

仪表盘查看

打开你的 Grafana 仪表盘,点击顶部的 "Add" 按钮,然后选择 "Add new panel"

bash
node_systemd_unit_state{name="docker.service", state="inactive"}

JMX Exporter

下载 JMX Exporter Agent

bash
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)。初期为了测试,可以使用一个简单的配置收集所有指标

bash
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: GAUGE
  • startDelaySeconds:延迟开始收集指标的时间(秒)。
  • lowercaseOutputName, lowercaseOutputLabelNames:将指标名称和标签名称转换为小写,符合 Prometheus 规范。
  • rules:定义如何匹配和转换 JMX MBean 的规则。pattern: ".*" 表示匹配所有 MBean。

启动应用并集成 JMX Exporter

推荐的方式是将 JMX Exporter 作为 Java Agent 运行,与你的 Java 应用程序在同一个 JVM 进程中启动

bash
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.jar
  • 8088: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

yaml
scrape_configs:
  - job_name: 'jvm'  # 任务名称,可根据应用自定义
    static_configs:
      - targets: ['<你的应用主机IP>:8088']  # JMX Exporter 暴露的地址和端口
    scrape_interval: 15s  # 抓取间隔,可根据需要调整

配置后,重启 Prometheus 或向其发送 SIGHUP 信号以重载配置。

在 Grafana 中可视化 JVM 指标

数据被 Prometheus 采集后,可以通过 Grafana 进行强大的可视化展示。

  1. 添加数据源:在 Grafana 中,添加你的 Prometheus 服务器作为数据源(URL 通常是 http://<prometheus-server>:9090)。
  2. 导入仪表盘:Grafana 社区提供了丰富的现成 JVM 监控仪表盘模板。
  3. 进入 Grafana → Dashboards → Import
  4. 输入仪表盘 ID(例如 47018563),点击 Load。
  5. 选择对应的 Prometheus 数据源,点击 Import。