# prophet
**Repository Path**: cloud-discovery/prophet
## Basic Information
- **Project Name**: prophet
- **Description**: No description available
- **Primary Language**: Python
- **License**: MulanPubL-2.0
- **Default Branch**: main
- **Homepage**: None
- **GVP Project**: No
## Statistics
- **Stars**: 0
- **Forks**: 0
- **Created**: 2022-01-27
- **Last Updated**: 2022-01-27
## Categories & Tags
**Categories**: Uncategorized
**Tags**: None
## README

资源自动采集分析工具集,云迁移/云灾备必备的调研工具
--------------------------
- [ENGLISH](https://github.com/Cloud-Discovery/prophet/blob/master/docs/README_EN.md)
## 目录
- [项目说明](#项目说明)
- [安装说明](#安装说明)
- [使用说明](#使用说明)
- [如何贡献](#如何贡献)
- [贡献者](#贡献者)
- [协议说明](#协议说明)
## 项目说明
prophet是一个自动化采集、分析的工具集,目前支持对物理机、VMware环境的采集和分析,未来将扩展至云平台资源、存储、网络等多种资源。目前主要应用与云迁移与云灾备前期技术调研,主要对源端主机的基本情况进行采集,通过技术指标的比对,确保被调研的源端主机能够正确被工具正确迁移或灾备,同时根据数据量,预测数据传输时间。该项目目前已经在多个实际的云迁移和云灾备项目中得到验证,可以放心使用。
该项目未来发展的愿景是提供一站式调研平台,包括但不限于如下资源:各种云平台资源使用状况、文件存储、对象存储、容器平台、大数据平台、中间件、数据库等。同时也将提供蓝图画板,方便在项目前期进行方案编写使用,降低云迁移与云灾备过于冗长的前期调研周期。
目前prophet主要有以下功能组成:
* 通过nmap指令扫描全网存活的主机,并尽量通过包信息分析主机的基本情况
* (稳定)通过VMWare API接口采集主机的详细信息,包含计算、存储和网络等与主机迁移
* (稳定)通过Ansible获取Linux主机的详细信息,包含计算、存储和网络等与主机相关信息
* (稳定)通过Windows WMI接口采集Windows主机的详细信息,包含计算、存储和网络等与主机相关信息
* (稳定)将采集后的结果以yaml格式进行打包和压缩,并进行脱敏处理(移除用户相关信息)
* (稳定)对采集后的结果进行分析,得出最终的技术调研结论
## 安装说明
### 源码安装
#### 前提条件
- Python环境运行版本
python3 以上版本,安装python3 pbr的开发包
- 依赖包安装
- RHEL & CentOS
提前安装配置epel仓库源,在执行安装依赖包指令,目前暂时只提供RHEL&CentOS版本,后续持续更新
```
yum install -y epel-release
cd prophet/
yum install -y nmap sshpass
```
#### 源码下载安装
```
git clone https://github.com/Cloud-Discovery/prophet
cd prophet
virtualenv venv
source venv/bin/activate
pip install -U pip
pip install -r requirements.txt
pip install .
# 安装远程 windows 执行所需wmi模块
yum install -y ./tools/wmi-1.3.14-4.el7.art.x86_64.rpm
```
### 容器方式
目前该项目每次提交后都会自动进行构建并推送到国内容器源中,可以直接使用,首先确保本地运行环境已经安装docker环境。
- 下载prophet容器镜像
```
docker pull registry.cn-beijing.aliyuncs.com/oneprocloud-opensource/cloud-discovery-prophet:latest
```
- 运行prophet容器服务
```
docker run -d -ti --name prophet registry.cn-beijing.aliyuncs.com/oneprocloud-opensource/cloud-discovery-prophet:latest
```
- 访问prophet容器
容器运行后,即可访问到容器内容进行后续操作使用
```
docker exec -ti prophet bash
prophet-cli {scan,collect,report}
```
## 使用说明
### 基本使用流程
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_hosts.csv --output-path /tmp
```
#### 采集结果说明
采集目录结构
```
hosts_collection
|-- LINUX -> Linux主机采集信息
|-- VMWARE -> VMWare主机采集信息
`-- WINDOWS -> Windows主机采集信息
|-- prophet.log -> 采集过程中的日志,便于对于未知场景分析
|-- scan_hosts.csv -> 采集的主机文件,含开放端口信息
```
另外在输出目录中会生成hosts_collection_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/hosts_collection_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版](http://license.coscl.org.cn/MulanPubL-2.0)
## 贡献者
感谢以下贡献者为本项目做出的贡献