# 下载源码
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