Node Exporter网络隔离环境:离线部署与内部镜像方案

Node Exporter网络隔离环境:离线部署与内部镜像方案

【免费下载链接】node_exporter prometheus/node_exporter: Node Exporter是一个 Prometheus 的数据采集器,它从目标机器上收集各种系统级别的指标,如CPU使用率、内存使用情况、磁盘空间、网络流量等,并将这些信息暴露为Prometheus能抓取的格式,便于监控系统的运行状态。 【免费下载链接】node_exporter 项目地址: https://gitcode.com/GitHub_Trending/no/node_exporter

引言:企业级监控的离线挑战

在企业级IT环境中,网络隔离是常见的安全要求。生产环境往往部署在严格的内网环境中,无法直接访问外部互联网资源。这种情况下,如何部署和维护Prometheus Node Exporter成为一个技术挑战。

传统在线部署方式在隔离网络中完全失效,您无法直接从公共镜像仓库或Quay.io拉取镜像,也无法使用包管理工具在线安装依赖。本文将为您提供一套完整的Node Exporter离线部署解决方案,涵盖从源码编译、依赖管理到内部镜像仓库建设的全流程。

离线部署架构设计

整体架构图

mermaid

核心组件说明

组件职责部署位置
内部镜像仓库存储Docker镜像,替代公共镜像仓库隔离网络内部
源码编译环境编译Node Exporter二进制文件开发/构建服务器
二进制包仓库存储编译好的二进制文件和RPM/DEB包文件服务器
配置管理管理启动参数和配置文件配置服务器

离线部署详细方案

方案一:源码编译部署

环境准备

在可访问互联网的环境中准备编译工具链:

# 安装Go语言环境
wget https://golang.org/dl/go1.23.0.linux-amd64.tar.gz
tar -C /usr/local -xzf go1.23.0.linux-amd64.tar.gz
echo 'export PATH=$PATH:/usr/local/go/bin' >> /etc/profile
source /etc/profile

# 安装编译依赖
yum install -y make gcc glibc-static  # CentOS/RHEL
# 或
apt-get install -y make gcc libc6-dev  # Ubuntu/Debian
源码编译过程
# 克隆源码(在可联网环境)
git clone https://gitcode.com/GitHub_Trending/no/node_exporter.git
cd node_exporter

# 编译二进制文件
make build

# 验证编译结果
./node_exporter --version

# 打包编译产物
tar czf node_exporter-1.8.0-offline.tar.gz \
    node_exporter \
    examples/systemd/node_exporter.service \
    examples/systemd/sysconfig.node_exporter \
    LICENSE NOTICE
离线安装脚本

创建安装脚本 install_node_exporter.sh

#!/bin/bash

set -e

NODE_EXPORTER_VERSION="1.8.0"
INSTALL_DIR="/usr/local/bin"
CONFIG_DIR="/etc/sysconfig"
SYSTEMD_DIR="/etc/systemd/system"
TEXTFILE_DIR="/var/lib/node_exporter/textfile_collector"

# 创建用户和目录
useradd --system --no-create-home --shell /sbin/nologin node_exporter
mkdir -p $TEXTFILE_DIR
chown node_exporter:node_exporter $TEXTFILE_DIR

# 安装二进制文件
cp node_exporter $INSTALL_DIR/
chmod +x $INSTALL_DIR/node_exporter

# 安装配置文件
cp sysconfig.node_exporter $CONFIG_DIR/node_exporter

# 安装systemd服务
cp node_exporter.service $SYSTEMD_DIR/
cp node_exporter.socket $SYSTEMD_DIR/

# 重载systemd配置
systemctl daemon-reload
systemctl enable node_exporter.socket
systemctl enable node_exporter.service

echo "Node Exporter $NODE_EXPORTER_VERSION 安装完成"

方案二:Docker镜像离线部署

构建自定义Docker镜像

创建 Dockerfile.offline

FROM alpine:3.18

ARG VERSION=1.8.0

# 添加编译好的二进制文件
COPY node_exporter /bin/node_exporter

# 创建非root用户
RUN adduser -D -u 1000 node_exporter

# 创建数据目录
RUN mkdir -p /host && chown node_exporter:node_exporter /host

USER node_exporter

EXPOSE 9100

ENTRYPOINT ["/bin/node_exporter"]
CMD ["--path.rootfs=/host"]
镜像构建和导出
# 构建镜像
docker build -f Dockerfile.offline -t internal-registry:5000/node-exporter:1.8.0-offline .

# 导出镜像
docker save internal-registry:5000/node-exporter:1.8.0-offline > node-exporter-1.8.0-offline.tar

# 在离线环境中导入镜像
docker load < node-exporter-1.8.0-offline.tar
Docker Compose离线部署配置

创建 docker-compose-offline.yml

version: '3.8'

services:
  node_exporter:
    image: internal-registry:5000/node-exporter:1.8.0-offline
    container_name: node_exporter
    command:
      - '--path.rootfs=/host'
      - '--collector.textfile.directory=/textfile'
    network_mode: host
    pid: host
    restart: unless-stopped
    volumes:
      - '/:/host:ro,rslave'
      - '/var/lib/node_exporter/textfile_collector:/textfile:ro'
    environment:
      - TZ=Asia/Shanghai

方案三:包管理方式部署

制作RPM包

创建 node_exporter.spec

Name: node_exporter
Version: 1.8.0
Release: 1%{?dist}
Summary: Prometheus Node Exporter
License: Apache-2.0
URL: https://github.com/prometheus/node_exporter

%description
Prometheus exporter for hardware and OS metrics exposed by *NIX kernels.

%prep
# 此处放置源码准备步骤

%build
make build

%install
mkdir -p %{buildroot}%{_bindir}
mkdir -p %{buildroot}%{_sysconfdir}/sysconfig
mkdir -p %{buildroot}%{_unitdir}
mkdir -p %{buildroot}/var/lib/node_exporter/textfile_collector

install -m 755 node_exporter %{buildroot}%{_bindir}/node_exporter
install -m 644 examples/systemd/sysconfig.node_exporter %{buildroot}%{_sysconfdir}/sysconfig/node_exporter
install -m 644 examples/systemd/node_exporter.service %{buildroot}%{_unitdir}/
install -m 644 examples/systemd/node_exporter.socket %{buildroot}%{_unitdir}/

%files
%{_bindir}/node_exporter
%{_sysconfdir}/sysconfig/node_exporter
%{_unitdir}/node_exporter.service
%{_unitdir}/node_exporter.socket
/var/lib/node_exporter/textfile_collector

%post
useradd --system --no-create-home --shell /sbin/nologin node_exporter || true
chown node_exporter:node_exporter /var/lib/node_exporter/textfile_collector
systemctl daemon-reload >/dev/null 2>&1 || true

%preun
systemctl stop node_exporter.service >/dev/null 2>&1 || true
systemctl stop node_exporter.socket >/dev/null 2>&1 || true

%postun
systemctl daemon-reload >/dev/null 2>&1 || true

内部镜像仓库建设

使用Harbor搭建私有仓库

# 下载Harbor离线安装包
wget https://github.com/goharbor/harbor/releases/download/v2.8.0/harbor-offline-installer-v2.8.0.tgz

# 解压并配置
tar xzf harbor-offline-installer-v2.8.0.tgz
cd harbor
cp harbor.yml.tmpl harbor.yml

# 编辑配置文件
vim harbor.yml

# 安装Harbor
./install.sh

镜像同步策略

手动同步方案
# 在联网环境拉取官方镜像
docker pull quay.io/prometheus/node-exporter:latest

# 重新打标签
docker tag quay.io/prometheus/node-exporter:latest internal-registry:5000/node-exporter:latest

# 推送到内部仓库
docker push internal-registry:5000/node-exporter:latest

# 导出镜像备份
docker save internal-registry:5000/node-exporter:latest > node-exporter-backup.tar
自动同步方案

使用Harbor的复制功能实现自动同步:

  1. 在Harbor管理界面创建复制规则
  2. 配置源 registry 为公共镜像仓库或Quay.io
  3. 设置目标项目为 node-exporter
  4. 配置触发模式为定时同步

配置管理和优化

离线环境配置模板

创建 node_exporter_offline.yml

# Node Exporter 离线部署配置
version: 1.8.0
deployment:
  method: binary  # 可选: binary, docker, package
  architecture: amd64
  checksum: sha256:abc123...

collectors:
  enabled_by_default:
    - cpu
    - meminfo
    - diskstats
    - filesystem
    - netdev
    - loadavg
  disabled:
    - perf  # 离线环境建议禁用高性能消耗收集器

flags:
  web:
    listen-address: ":9100"
  path:
    rootfs: "/host"  # Docker部署时使用
  textfile:
    directory: "/var/lib/node_exporter/textfile_collector"

systemd:
  service_template: "examples/systemd/node_exporter.service"
  socket_template: "examples/systemd/node_exporter.socket"
  sysconfig_template: "examples/systemd/sysconfig.node_exporter"

monitoring:
  scrape_interval: "1m"
  scrape_timeout: "10s"

性能优化配置

# 优化启动参数
--web.max-requests=40 \
--collector.disable-defaults \
--collector.cpu \
--collector.meminfo \
--collector.diskstats \
--collector.filesystem \
--collector.netdev \
--collector.loadavg \
--collector.textfile.directory=/var/lib/node_exporter/textfile_collector

验证和监控

健康检查脚本

创建 health_check.sh

#!/bin/bash

set -e

NODE_EXPORTER_URL="http://localhost:9100"
HEALTH_CHECK_TIMEOUT=10

# 检查进程是否存在
if ! pgrep -x "node_exporter" > /dev/null; then
    echo "ERROR: Node Exporter process not found"
    exit 1
fi

# 检查端口监听
if ! ss -tln | grep -q ":9100"; then
    echo "ERROR: Node Exporter not listening on port 9100"
    exit 1
fi

# 检查HTTP端点
if ! curl -s --max-time $HEALTH_CHECK_TIMEOUT "$NODE_EXPORTER_URL/metrics" | grep -q "node_"; then
    echo "ERROR: Node Exporter metrics endpoint not responding correctly"
    exit 1
fi

echo "SUCCESS: Node Exporter is healthy"
exit 0

监控指标说明

指标名称类型描述告警阈值
node_exporter_build_infoGauge版本构建信息-
node_scrape_collector_duration_secondsSummary收集器执行时间> 10s
node_scrape_collector_successGauge收集器执行状态0
process_cpu_seconds_totalCounterCPU使用时间-
process_resident_memory_bytesGauge内存使用量> 512MB

故障排除和维护

常见问题解决

mermaid

日志分析指南

# 查看实时日志
journalctl -u node_exporter -f

# 查看错误日志
journalctl -u node_exporter --since "1 hour ago" | grep -i error

# 性能分析
journalctl -u node_exporter --since "1 hour ago" | grep "duration_seconds"

安全加固措施

网络隔离配置

# 防火墙规则示例
firewall:
  rules:
    - direction: INGRESS
      port: 9100
      source: ["10.0.0.0/8"]  # 只允许内网访问
      action: ALLOW
    - direction: INGRESS
      port: 9100
      source: ["0.0.0.0/0"]
      action: DROP

权限最小化

# 创建专用用户
useradd --system --no-create-home --shell /sbin/nologin node_exporter

# 设置文件权限
chown root:node_exporter /usr/local/bin/node_exporter
chmod 750 /usr/local/bin/node_exporter

# 设置Capabilities(如果需要)
setcap cap_sys_time+ep /usr/local/bin/node_exporter

版本更新策略

离线更新流程

mermaid

总结

Node Exporter在离线环境的部署需要综合考虑源码编译、依赖管理、镜像仓库建设等多个方面。通过本文提供的方案,您可以在完全隔离的网络环境中建立稳定可靠的监控数据采集体系。

关键成功因素包括:

  1. 完善的准备工作:在联网环境完成所有依赖下载和编译工作
  2. 可靠的内部仓库:建设稳定的镜像和包管理仓库
  3. 严格的验证流程:确保每个版本在部署前经过充分测试
  4. 自动化运维:通过脚本和工具减少人工操作错误

通过实施这些方案,您的企业可以在保持网络隔离安全要求的同时,享受Prometheus生态带来的强大监控能力。

提示:在实际部署前,建议在测试环境充分验证所有步骤,确保离线部署流程的可靠性和稳定性。

【免费下载链接】node_exporter prometheus/node_exporter: Node Exporter是一个 Prometheus 的数据采集器,它从目标机器上收集各种系统级别的指标,如CPU使用率、内存使用情况、磁盘空间、网络流量等,并将这些信息暴露为Prometheus能抓取的格式,便于监控系统的运行状态。 【免费下载链接】node_exporter 项目地址: https://gitcode.com/GitHub_Trending/no/node_exporter

创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值