/prophet

Prophet is a toolset to collect resources and generate report for cloud migration, cloud backup and disaster recovery.

Primary LanguagePythonOtherNOASSERTION

Prophet

资源自动采集分析工具集,云迁移/云灾备必备的调研工具

 release Stars


目录

项目说明

prophet是一个自动化采集、分析的工具集,目前支持对物理机、VMware环境的采集和分析,未来将扩展至云平台资源、存储、网络等多种资源。目前主要应用与云迁移与云灾备前期技术调研,主要对源端主机的基本情况进行采集,通过技术指标的比对,确保被调研的源端主机能够正确被工具正确迁移或灾备,同时根据数据量,预测数据传输时间。该项目目前已经在多个实际的云迁移和云灾备项目中得到验证,可以放心使用。

该项目未来发展的愿景是提供一站式调研平台,包括但不限于如下资源:各种云平台资源使用状况、文件存储、对象存储、容器平台、大数据平台、中间件、数据库等。同时也将提供蓝图画板,方便在项目前期进行方案编写使用,降低云迁移与云灾备过于冗长的前期调研周期。

目前prophet主要有以下功能组成:

  • 通过nmap指令扫描全网存活的主机,并尽量通过包信息分析主机的基本情况
  • (稳定)通过VMWare API接口采集主机的详细信息,包含计算、存储和网络等与主机迁移
  • (稳定)通过Ansible获取Linux主机的详细信息,包含计算、存储和网络等与主机相关信息
  • (稳定)通过Windows WMI接口采集Windows主机的详细信息,包含计算、存储和网络等与主机相关信息
  • (稳定)将采集后的结果以yaml格式进行打包和压缩,并进行脱敏处理(移除用户相关信息)
  • (稳定)对采集后的结果进行分析,得出最终的技术调研结论

安装说明

源码安装

git clone https://github.com/Cloud-Discovery/prophet

cd prophet
virtualenv venv
source venv/bin/activate

pip install -r requirements.txt
pip install .

容器方式

目前该项目每次提交后都会自动进行构建并推送到国内容器源中,可以直接使用

docker pull registry.cn-beijing.aliyuncs.com/oneprocloud-opensource/cloud-discovery-prophet:latest

使用说明

基本使用流程

  1. 扫描指定的IP地址段
  2. 在扫描结果的csv中,填写需要获取详情的主机鉴权信息
  3. 批量采集
  4. 分析, 得到结果

(稳定)功能一:扫描全网运行的实例

功能说明

通过网络扫描发现某一网段内存活的主机,并进行记录,可以作为后续更详细信息采集的输入。扫描完成后,将自动在指定路径下生成scan_results.csv文件,用于存储信息。

***** 注意:为了防止对生产环境造成较大压力,扫描时采用单进程方式,所以扫描进度较慢,经过测算扫描一个子网掩码为24的子网所需要30分钟左右的时间。**

usage: prophet-cli scan [-h] --host HOST [--arg ARG] --output-path OUTPUT_PATH
                        [--report-name REPORT_NAME]

optional arguments:
  -h, --help            show this help message and exit
  --host HOST           Input host, example: 192.168.10.0/24, 192.168.10.1-2
  --arg ARG             Arguments for nmap, for more detailed, please check
                        nmap document
  --output-path OUTPUT_PATH
                        Generate initial host report path
  --report-name REPORT_NAME
                        Scan report csv name

示例一: 获取子网主机

扫描192.168.10.0/24所有存活主机信息,并将csv文件生成在/tmp目录中。

prophet-cli scan --host 192.168.10.0/24 --output-path /tmp/

示例二: 获取指定IP网段主机

扫描192.168.10.2-192.168.10.50所有存活主机信息,并将csv文件生成在/tmp目录中。

prophet-cli scan --host 192.168.10.2-50 --output-path /tmp/

csv结构说明

字段名称 字段说明
hostname 主机名,可以为空
ip 用户IP地址,必须
username 用户名,如果为VMware,则为ESXi或者vCenter的用户名
password 密码,如果为VMware,则为ESXi或者vCenter的用户名
ssh_port Linux,该字段为ssh端口VMware ESXi或vCenter则为连接端口,默认为443Windows则默认为空
key_path 如果为密钥登陆,需要指定密钥的绝对路径,否则为空
mac 主机MAC地址,可以为空
vendor 生产厂商,可以为空,如果是VMware运行的虚拟机则为VMware
check_status 是否需要采集详细信息, 如果需要则设置为check,否则工具将自动跳过
os 操作系统类型,目前支持的类型为:Linux/Windows/VMware,大小写敏感
version 操作系统的版本,可以为空
tcp_ports 对外开放的端口,可以为空
do_status 详细信息采集状态,表示是否完成采集或者失败,默认为空

(稳定)功能二:详细信息采集

功能说明

用户在模板填入鉴权信息后,进行进一步详细扫描。

注意:

  • 如果是VMware的虚拟机,则只会通过所在的ESXi主机进行扫描
  • 如果是Windows主机,需要Administrator用户进行扫描
  • 采集主机如果成功,则再次运行脚本时不会再进行采集,除非用户指定force-check参数
  • 采集失败的主机在下一次采集时,会重新采集
  • 最终生产的压缩包,一切与用户鉴权相关的敏感信息都已经被移除
  • (稳定)目前VMware采集部分是稳定的
  • (测试)目前Linux和Windows采集部分仍然是测试版本
usage: prophet-cli collect [-h] --host-file HOST_FILE --output-path
                           OUTPUT_PATH [-f] [--package-name PACKAGE_NAME]

optional arguments:
  -h, --help            show this help message and exit
  --host-file HOST_FILE
                        Host file which generated by network scan
  --output-path OUTPUT_PATH
                        Output path for batch collection
  -f, --force-check     Force check all hosts
  --package-name PACKAGE_NAME
                        Prefix name for host collection package

示例:执行采集

首先需要在生成的scan_results.csv中更新要采集主机的鉴权信息,在项目中的examples路径包含(scan_results.csv)[https://github.com/Cloud-Discovery/prophet/blob/master/examples/scan_results.csv]样例。

hostname ip username password ssh_port key_path mac vendor check_status os version tcp_ports do_status
192.168.10.2 administrator@vsphere.local your_vcenter_password 00:50:56:9f:03:f0 check Windows Microsoft Windows 7 or Windows Server 2012 80,88,135,139,389,443,445,514,636,2020,3389,8088,9009,9090
192.168.10.6 root your_esxi_password 443 0c:c4:7a:e5:5d:20 check VMware VMware ESXi Server 4.1 22,80,427,443,902,5988,5989,8000,8080,8100,8300
192.168.10.185 Administrator your_windows_password 00:50:56:9a:6d:2e check Windows Microsoft Windows Server 2003 SP1 or SP2 135,139,445,1028,3389
192.168.10.201 root your_linux_password 22 ac:1f:6b:27:7f:e4 check Linux Linux 2.6.32 - 3.9 22,80,3306,4567,5000,5900,5901,5902,5903,5904,5906,5907,5910,5911,5915,8022,8080,9100
prophet-cli collect --host-file /tmp/scan_results.csv --output-path /tmp

采集结果说明

采集目录结构

host_collection_info
|-- LINUX -> Linux主机采集信息
|-- VMWARE -> VMWare主机采集信息
`-- WINDOWS -> Windows主机采集信息
|-- prophet.log -> 采集过程中的日志,便于对于未知场景分析
|-- scan_results.csv -> 采集的主机文件,含开放端口信息

另外在输出目录中会生成host_collection_info_xxxxxxx.zip文件,该文件为最终用于分析的压缩文件。

(重构中)功能三: 分析并输出报告

功能说明

将采集后的结果进行分析,并输出最终的可迁移性报告,该部分可以根据需求扩展。

usage: prophet-cli report [-h] --package-file PACKAGE_FILE --output-path
                          OUTPUT_PATH [--report-name REPORT_NAME] [--clean]

optional arguments:
  -h, --help            show this help message and exit
  --package-file PACKAGE_FILE
                        Investigate package file which is genreated by
                        prophet-collect
  --output-path OUTPUT_PATH
                        Generate report path
  --report-name REPORT_NAME
                        Generate report name
  --clean               Clean temp work dir or not, by default is not

示例:分析并输出报告

prophet-cli -d -v report --package-file /tmp/host_collection_info_20211215202459.zip --output-path /tmp

示例:分析报告

平台类型 主机名 VMware主机名 IP Mac 操作系统类型 操作系统版本 操作系统位数 操作系统内核版本 启动方式 CPU CPU核数 内存 总内存(GB) 剩余内存(GB) 磁盘数量 磁盘总容量(GB) 磁盘信息 分区信息 网卡数量 网卡信息 虚拟化类型 虚拟化版本 ESXi服务器
Physical compute201 192.168.10.201 ac:1f:6b:27:7f:e4 CentOS 7.5.1804 x86_64 3.10.0-862.el7.x86_64 bios Intel(R) Xeon(R) CPU E5-2630 v4 @ 2.20GHz 40 62.65 5.35 7 5467004.78 sda|56266.78|ATA|SuperMicro SSD sdb|213212.97|ATA|INTEL SSDSC2BB24 sdc|1039505.00|SEAGATE|ST1200MM0007 sdd|1039505.00|SEAGATE|ST1200MM0007 sde|1039505.00|SEAGATE|ST1200MM0007 sdf|1039505.00|TOSHIBA|AL15SEB120NY sdg|1039505.00|TOSHIBA|AL15SEB120NY /dev/sda2|62245572608|58963365888|0.95|xfs /dev/sda1|1063256064|922746880|0.87|xfs /dev/sdc1|1199655976960|1141407465472|0.95|xfs 4 eno1|0c:c4:7a:a5:29:3a|True|1500|10000|10.0.100.201|255.255.255.0|10.0.100.0|10.0.100.255|fe80::ec4:7aff:fea5:293a ens2f3|ac:1f:6b:27:7f:e7|True|1500|1000|None|None|None|None|fe80::ae1f:6bff:fe27:7fe7 ens2f0|ac:1f:6b:27:7f:e4|True|1500|1000|192.168.10.201|255.255.255.0|192.168.10.0|192.168.10.255|192.168.10.1|fe80::ae1f:6bff:fe27:7fe4 ens2f1|ac:1f:6b:27:7f:e5|True|1500|1000|172.16.100.201|255.255.255.0|172.16.100.0|172.16.100.255|fe80::ae1f:6bff:fe27:7fe5
Physical compute202 192.168.10.202 0c:c4:7a:e5:5c:f8 CentOS 7.5.1804 x86_64 3.10.0-862.el7.x86_64 bios Intel(R) Xeon(R) CPU E5-2630 v4 @ 2.20GHz 40 62.65 13.27 7 5467004.78 sda|56266.78|ATA|SuperMicro SSD sdb|213212.97|ATA|INTEL SSDSC2BB24 sdc|1039505.00|SEAGATE|ST1200MM0007 sdd|1039505.00|SEAGATE|ST1200MM0007 sde|1039505.00|SEAGATE|ST1200MM0007 sdf|1039505.00|TOSHIBA|AL15SEB120NY sdg|1039505.00|TOSHIBA|AL15SEB120NY /dev/sda2|62245572608|52926242816|0.85|xfs /dev/sda1|1063256064|922746880|0.87|xfs 4 eno1|0c:c4:7a:a5:2e:d0|True|1500|10000|10.0.100.202|255.255.255.0|10.0.100.0|10.0.100.255|fe80::ec4:7aff:fea5:2ed0 ens2f3|0c:c4:7a:e5:5c:fb|True|1500|1000|None|None|None|None|fe80::ec4:7aff:fee5:5cfb ens2f0|0c:c4:7a:e5:5c:f8|True|1500|1000|192.168.10.202|255.255.255.0|192.168.10.0|192.168.10.255|192.168.10.1|fe80::ec4:7aff:fee5:5cf8 ens2f1|0c:c4:7a:e5:5c:f9|True|1500|1000|172.16.100.202|255.255.255.0|172.16.100.0|172.16.100.255|fe80::ec4:7aff:fee5:5cf9
VMware node01 00:50:56:9a:49:b7 CentOS 4/5/6/7 CentOS 4/5/6/7 64-bit efi Intel(R) Xeon(R) CPU E5-2680 0 @ 2.70GHz 4 8192.00 1 51200.00 [10.3-4T-5] centos7.4_node_139/centos7.4_node_139.vmdk|51200.00 1 VM Network|00:50:56:9a:49:b7 VMware ESX Server VMware ESXi 6.0.0 build-2715440 192.168.10.3
VMware master03 00:50:56:9a:63:a0 CentOS 4/5/6/7 CentOS 4/5/6/7 64-bit efi Intel(R) Xeon(R) CPU E5-2680 0 @ 2.70GHz 4 4096.00 1 51200.00 [10.3-4T-5] centos7.2_132/centos7.2_132.vmdk|51200.00 1 VM Network|00:50:56:9a:63:a0 VMware ESX Server VMware ESXi 6.0.0 build-2715440 192.168.10.3
VMware master02 00:50:56:9a:06:ad CentOS 4/5/6/7 CentOS 4/5/6/7 64-bit efi Intel(R) Xeon(R) CPU E5-2680 0 @ 2.70GHz 4 4096.00 1 51200.00 [10.3-4T-5] centos7.3_131/centos7.3_131.vmdk|51200.00 1 VM Network|00:50:56:9a:06:ad VMware ESX Server VMware ESXi 6.0.0 build-2715440 192.168.10.3
Physical COMPUTER-PC 192.168.10.62 00:0c:29:9a:59:73 Microsoft Windows 7 旗舰版 Microsoft Windows 7 旗舰版 64-bit 6.1.7600 bios Intel(R) Xeon(R) CPU E5-2680 0 @ 2.70GHz 4 Physical Memory 8191.55 4.83 2 255996.72 0|51199.34|VMware Virtual disk SCSI Disk Device|VMware Virtual disk SCSI Disk Device 1|204797.37|VMware Virtual disk SCSI Disk Device|VMware Virtual disk SCSI Disk Device C:|53580132352|4455071744|0.08|NTFS D:|109887614976|109790175232|1.0|NTFS E:|104857595904|104760311808|1.0|NTFS 1 [00000007] Intel(R) PRO/1000 MT Network Connection|00:0c:29:9a:59:73|192.168.10.1|192.168.10.62|255.255.255.0

如何贡献

TODO: 开发者文档待完成

协议说明

本项目采用木兰公共许可证,第2版

贡献者

感谢以下贡献者为本项目做出的贡献