需求:定期自动获取Vm在VCenter中对应的cluster、ESX、Datastore信息,同时将变化或者新增的数据上传到数据库中

解决思路分析:

1 首先使用VMware的powerCLI工具通过任务计划程序,定期抓取上述所需信息

2 然后通过文件比较差异,将新增或者修改了的数据提取出来

3 将差异结果放到指定位置,或者数据库中

详细解决步骤:

下面详细说一下我的解决步骤

1 通过PowerCLI抓取所需信息,并上传

1.1首先安装PowerCLI工具(在win7或者windows2008上安装,参考附录)

1.2然后编写自动获取数据的脚本,脚本VMInfo.ps1示例如下,对应这个脚本的解释 ,请参考附录

#这个脚本获取VMname,vmid,ESXname,ESXID,Cluster,Datastore
Connect-VIServer -server ip -user 用户名l -password 密码
Get-VM | Select Name,id,@{N="ESXIP";E={(Get-VMHost -VM $_).name}}, `
@{N="ESXID";E={(Get-VMHost -VM $_).id}}, `
@{N="Cluster";E={Get-Cluster -VM $_}}, `
@{N="Datastore";E={Get-Datastore -VM $_}},`
Time | Export-Csv -NoTypeInformation c:\VMInfo\"Export67VMinfo$(Get-Date -Format 'yyyyMMdd').csv"
Disconnect-VIServer -server * -force  -Confirm:$false

获取得到的数据格式如下:

我通过任务计划程序自动运行该脚本并将其上传至FTP服务器

1.3创建任务计划程序脚本CreateTask.bat

schtasks /create /ru system /tn :

1.4任务计划程序引用的脚本VMInfoBat.bat,这个脚本会调用PowershellCLI脚本,并输出日志

set datevar=%,%%,%%,%
echo -------------%datevar%-log------------- >> c:\VMInfo\Running.log
if exist c:\VMInfo\Export* del /q c:\VMInfo\Export*.csv
C:\Windows\System32\WindowsPowerShell\v1.\powershell.exe -psconsolefile >&
c:\VMInfo\runftp.bat >> c:\VMInfo\Running.log  >&

1.5使用FTP上传

::UploadFtp.bat,上传文件至FTP
open 10.200.169.2
用户名
密码
binary
cd VMdata
put C:\VMInfo\Export*.csv
bye

::runftp.bat通过命令执行上面的ftp脚本
ftp -s:c:\VMInfo\UploadFtp.bat

2 提前在数据库上创建好对应的表,注意一般都需要有主键列和时间列,免得后面再添加更改

--建表,表中uuid是主键,会顺序加1,IMTIME是每次插入的时间
CREATE  TABLE ARADMIN.VM_INFO_Dayly
   (UUID int  primary key,
   VMNAME ),
  VMID ),
  ESXIP ),
  ESXID ) ,
  CLUSTERNAME ),
  DATASTORE ),
  IMTIME date default sysdate not null,STATUS varchar2(128))
--建立序列
 START ;--或者如下建立序列
/*
create sequence VM_ID_SEQ
minvalue 1
maxvalue 9999999999999999999999999999
start with 1
increment by 1
nocache;
*/

 
--建立一个触发器:
 CREATE OR REPLACE TRIGGER TRG_VM
   BEFORE INSERT ON VM_INFO_Dayly
   FOR EACH ROW
 BEGIN
   SELECT VM_ID_SEQ.NEXTVAL INTO :NEW.UUID FROM DUAL;
 END TR_VM;

3 比对今天和昨天的文件,并将差异结果写入数据库

这个过程是在linux机器上完成的,毕竟linux命令毕竟熟悉一些

比较用到的命令是 :

grep -vxFf file1 file2 >a.txt  #比较存在于file2中而不在file1中的行
grep -xFf file1 file2 >b.txt  #比较file1 和file2 的交集,具体参考附录

数据上传使用的是sqlload

运行下面命令提前看一下数据库的字符集,并修改下面文件中的字符集,以便不出现乱码

select userenv('language') from dual;

1 脚本sqlload.sh

好了下面把我的脚本sqlload.sh放上来,这个脚本实现今日和昨日数据比较,并把差异放入数据库

 #!/bin/bash
 # Description:
 #    Program download the VMinfo csv data
 #      And then compair with yesterday's data
 #    At the End sqlload the diff to Oracle
 #--    lizhaoxian

 PATH=/bin:/sbin:/usr/bin:/usr/sbin:/usr/local/bin:/usr/local/sbin:~/bin
 ORACLE_HOME=/oracle/app/oracle/product/11.2.0.3/db_1
 export ORACLE_HOME
 export PATH=$PATH:$ORACLE_HOME/bin
 ddate=`date +%Y%m%d`
 ydate=`date --date='1 days ago' +%Y%m%d`
 yydate=`date --date='2 days ago' +%Y%m%d`

 # Log File
 LOGFILE=/Vminfo/Vminfo.log
 cat /dev/null > ${LOGFILE}

 # DownLoad From FTP
 echo ${ddate} >> ${LOGFILE}
 FileName=`echo "Export67VMinfo${ddate}.csv"`
 >&
 user administrator abcde@
 cd VMdata
 lcd /Vminfo
 binary
 mget ${FileName}
 bye
 !
 # 文件格式转换
 dos2unix /Vminfo/Export* >> ${LOGFILE} >&

 # 文件处理和比较
 sed -i 's/硬盘\ /Disk/g;s/\ Disk/;Disk/g' /Vminfo/Export67VMinfo${ddate}.csv
#里面可以提前把ipv6的地址都过滤掉awk 'NF>2{gsub(/fe80::[a-zA-Z0-9:]+/, " ", $0);gsub(/ +/, " ", $0); print $0;}' test.log
 grep -vxFf /Vminfo/Export67VMinfo${ydate}.csv /Vminfo/Export67VMinfo${ddate}.csv |sed  's/^\"/,/g' | sed 's/\"//g' > /Vminfo/Vmdata${ddate}.txt

 # sqlload导入数据库
 export ORACLE_SID=ARDB
 export NLS_LANG=american_america.AL32UTF8

 #数据库结构控制文件
 CTL_FILE=/Vminfo/Vmdata.ctl
 #sqlload输出日志文件
 LOG_FILE=/Vminfo/sqlload.log
 #数据文件
 DATA_FILE=/Vminfo/Vmdata${ddate}.txt

 sqlldr ARADMIN/clmAdm1n@10.200.243.85/ARDB control=${CTL_FILE} data=${DATA_FILE} log=${LOG_FILE}

 # Clean log files
 # clear yesterday's data
 rm -f /Vminfo/Vmdata${yydate}.txt /Vminfo/Vmdata${ydate}.bad /Vminfo/Export67VMinfo${yydate}.csv

3 都写好了,那就添加到crontab中,让系统自动运行吧

#备份系统crontab
crontab -u root -l > crontab.bak

#修改系统定时任务
crontab -e

#添加一行到文件末,每天八点,定时跑
  * * * /Vminfo/sqlload.sh

大功告成,查看下数据库有没有数据就行了

参考附录:

vSphere PowerCLI安装及命令

求一份比较2个文件内容相同和不同的shell脚本

PowerCLI: One-Liner to get VMs, Clusters, ESX Hosts and Datastores

powercli script to get cluster name, datastore name, total size & free space on DS for a VM

Oracle主键自增长及自动生成策略

PowerCLI: One-Liner to get VMs, Clusters, ESX Hosts and Datastores并导入数据库中的更多相关文章

  1. ESX/ESXi 主机上的每个插槽中安装了多少内存

    要确定在 ESX/ESXi 主机上的每个插槽中安装了多少内存,请执行以下操作: 1. 启动ssh服务 2. 登陆esxi主机查看 使用 SSH 客户端登录主机,以 root 用户身份运行以下命令之一: ...

  2. VMware PowerCLi 使用示例

    这几天研究PowerCLI,积累了几个例子,记下来,以便以后或者大家使用.部分例子来着网络,具体出处参考附录 1 获取vm 磁盘 和磁盘对应的datastore的信息 这个例子可以针对一台虚机有多个磁 ...

  3. 【exp/imp】将US7ASCII字符集的dmp文件导入到ZHS16GBK字符集的数据库中

    [exp/imp]将US7ASCII字符集的dmp文件导入到ZHS16GBK字符集的数据库中 1.1  BLOG文档结构图 1.2  前言部分 1.2.1  导读和注意事项 各位技术爱好者,看完本文后 ...

  4. 转-【exp/imp】将US7ASCII字符集的dmp文件导入到ZHS16GBK字符集的数据库中

    原帖地址:http://blog.csdn.net/lihuarongaini/article/details/71512116 1.2  前言部分 1.2.1  导读和注意事项 各位技术爱好者,看完 ...

  5. Python实现电子词典(图形界面)

    Python实现电子词典(图形界面) 终端电子词典:https://www.cnblogs.com/noonjuan/p/11341375.html 文件一览: .├── client.py├── d ...

  6. Vmware esx/esxi Vlan三种配置模式(VST、EST和VGT)

    在Vmware esx/esxi中使用虚拟Lan(Vlan)时,一般是指Vlan Trunk的使用,使用的Vlan配置还有其它三种类型: Virtual Switch Tagging(虚拟交换机标记, ...

  7. Oracle Real Application Clusters (RAC)

    Oracle Real Application Clusters — 概述 包含 Oracle Real Application Clusters (RAC) 选件的 Oracle 数据库允许依托一组 ...

  8. 基于PowerCli自动部署和配置vmvare虚拟机

    1 文档说明 2 Vsphere PowerCli安装和配置 3 PowerCli常用命令 4 创建自定义规范 5 虚拟机克隆与配置脚本 6 技术资料 1 文档说明 使用Vsphere管理虚拟机,在进 ...

  9. VCAP5-DCA – What’s new?

    see also: 韩国人的教材:http://ddii.pe.kr/ Section 1.1 – Implement and Manage complex storage Determine use ...

随机推荐

  1. Mac下安装ant(利用brew)

    安装ant最简单的方法就是通过brew.步骤如下:1. 安装brew(如果已经安装可以跳过这步). ruby -e "$(curl -fsSL https://raw.github.com/ ...

  2. java中碰到无法解决的问题:无法访问类的getter访问器

    大牛们来看看,俺这是咋了?因博问不让发图,发到这里求助: 以上两个方法都是从mysql中select数据,为嘛第二个出现辣鸡报错? 请注意: reslist.size() = 289 第二种方法已经获 ...

  3. 学习总结:gcc/g++ 编译与链接

    gcc/g++ 编译与链接 编译与链接的过程可以分解为四个步骤:预处理.编译.汇编.链接 预处理:源代码文件和相关的头文件,被预处理器cpp预处理成一个后缀为 .i 的文件(选项:-E) 编译:把预处 ...

  4. python Database Poll for SQL SERVER

    python连接SQL SERVER数据库: Python编程中可以使用SQL SERVER 进行数据库的连接及诸如查询/插入/更新等操作,但是每次连接SQL SERVER 数据库请求时,都是独立的去 ...

  5. python语言学习笔记整理

    什么是程序? 程序等于数据结构加算法,那么数据结构是一个静态的东西,算法是一个动态的东西,我们用一个新的语言编写这个程序,我们要考虑到语言也主要由数据结构和算法相关的东西,或静态或动态的东西来构成,所 ...

  6. spring 多线程 写入数据库 和 写入 xml文件

    最近工作中遇到一个需求 多线程先爬取页面 然后将爬取的结果持久化到数据库中 ,一些大文本的内容需要持久化到 xml文件中; 下面是运行后的结果: xml 文件写入结果: 数据库写入结果: 再来张项目结 ...

  7. 为什么会有OPTIONS请求

    在做项目时,很多时候发送一个post请求,是先发送一个option请求,然后再发送post请求,一直这么用之前也没有仔细思考,今天有时间,好好了解一下为什么会多一次请求. 疑问1:什么是options ...

  8. jQuery_serialize的用法

    jQuery_serialize(form表单序列化)用于在前端要传很多值往后端的时候: <!DOCTYPE html> <html lang="en"> ...

  9. 前端Web开发MVC模式-入门示例

    MVC概论起初来之桌面应用开发.其实java的structs框架最能体现MVC框架:model模型是理解成服务器端的模块程序:view为发送给客服端的内容:control为servlet程序控制跳转和 ...

  10. BZOJ:4333: JSOI2012 智者的考验

    4333: JSOI2012 智者的考验 Time Limit: 10 Sec  Memory Limit: 256 MBSubmit: 68  Solved: 18[Submit][Status][ ...