trx
Published on 2025-12-05 / 6 Visits
0

vmware_exporter构建docker镜像

# 下载源码
wget https://github.com/pryorda/vmware_exporter/releases/download/v0.18.4/vmware_exporter-0.18.4.tar.gz

# 解压
tar zxvf vmware_exporter-0.18.4.tar.gz

# 进入解压后的目录,编写Dockerfile文件
cd vmware_exporter-0.18.4
cat >> Dockerfile << EOF
# Dockerfile
FROM openeuler/openeuler:25.03

# 设置工作目录
WORKDIR /app

# 复制所有文件到容器
COPY . /app

# 安装系统依赖
RUN dnf update -y && \
    dnf install -y \
    python3 \
    python3-pip \
    python3-devel \
    gcc \
    gcc-c++ \
    openssl-devel \
    && dnf clean all \
    && rm -rf /var/cache/dnf/*

# 安装 Python 依赖
# 如果有 setup.py,可以使用 pip install .
RUN pip3 install --no-cache-dir --upgrade pip && \
    pip3 install --no-cache-dir . || \
    pip3 install --no-cache-dir -r requirements.txt && \
    pip3 install --no-cache-dir requests

# 创建非 root 用户
RUN groupadd -r exporter && \
    useradd -r -g exporter -s /bin/false exporter && \
    chown -R exporter:exporter /app

USER exporter

# 暴露端口
EXPOSE 9272

# 健康检查
HEALTHCHECK --interval=30s --timeout=10s --start-period=5s --retries=3 \
    CMD curl -f http://localhost:9272/ || exit 1

# 默认使用 config.yml 启动
CMD ["python3", "-m", "vmware_exporter.vmware_exporter", "-c", "config.yml"]
EOF

# 编写配置文件
cat >> config.yml << EOF
# config-prod.yml
default:
  vsphere_host: "1.1.1.1"
  vsphere_user: "administrator@vsphere.local"
  vsphere_password: "123456"
  ignore_ssl: true
  specs_size: 15000
  max_metrics: 300
  
  fetch_custom_attributes: true
  fetch_tags: true
  fetch_alarms: true
  
  collect_only:
    vms: true
    vmguests: true
    datastores: true
    hosts: true
    snapshots: true
    resourcepools: true
    clusters: true
  
  collectors:
    vm_perf:
      enabled: true
      metrics:
        - cpu.usage.average
        - cpu.usagemhz.average
        - cpu.ready.summation
        - mem.usage.average
        - mem.consumed.average
        - disk.usage.average
        - disk.read.average
        - disk.write.average
        - net.usage.average
    
    host_perf:
      enabled: true
      metrics:
        - cpu.usage.average
        - cpu.usagemhz.average
        - mem.usage.average
        - disk.usage.average
        - net.usage.average
  
  filter:
    vms:
      exclude:
        - "Template*"
        - "*Snapshot*"
  
  request_timeout: 300
  batch_size: 1000
  thread_pool_size: 30
EOF

# 编写编译脚本
cat >> build.sh << EOF
#!/bin/bash
# build.sh

# 设置变量
IMAGE_NAME="vmware-exporter"
IMAGE_TAG="0.18.4-openeuler"
CONTAINER_NAME="vmware-exporter"

echo "正在构建 Docker 镜像..."
echo "镜像名称: ${IMAGE_NAME}:${IMAGE_TAG}"

# 构建镜像
docker build -t ${IMAGE_NAME}:${IMAGE_TAG} .

if [ $? -eq 0 ]; then
    echo "✅ 镜像构建成功: ${IMAGE_NAME}:${IMAGE_TAG}"
    echo "使用以下命令运行:"
    echo "  docker run -d -p 9272:9272 --name ${CONTAINER_NAME} ${IMAGE_NAME}:${IMAGE_TAG}"
else
    echo "❌ 镜像构建失败"
    exit 1
fi
EOF