1.web开发(Django,flask, tornado)。
2.自动化运维(CMDB项目)。
3.爬虫 和 数据分析。
4.自动化测试。
4.人工智能,机械学习, 算法
```
CMDB 项目:
自动化运维:
运维:管理服务器的
ps: 分为基础运维,应用运维
为什么需要自动化运维?
1.项目上线:
流程:产品经理调研(画出原型图)------定需求----------三方会谈(产品经理,研发,老大)-----定日期-------测试项目--------最终上线--------应用运维
目前:是把代码打包给运维,运维解压上线
问题:随着机器数量的线性增加,运维的工作量也是线性增加,重复而且是无意义的劳动
解决:
1,写一个shell脚本,进行部署
2,搞一个自动化代码上线系统
必要条件:
服务器的各种信息(主机名,CPU,硬盘大小等)
2.监控系统:
检测服务器的各种信息(硬盘是否满,CPU的使用率,内存的使用率,网站服务运行是否正常)
问题:之前写简单的脚本,检测服务器的信息,比较麻烦
解决:想将服务器的各种信息,以图标的形式展示在web界面上(可视化)
必要条件:
服务器的各种信息(主机名,CPU,硬盘大小等)
3.自动装机系统:
问题:人工工作量大(ps要人一台台装)
解决:搞一个装机系统(一键装机),cobbler软件
必要条件:服务器的各种信息(主机名,CPU等)
4.Excel表格审计管理资产
cmdb系统:
配置管理系统:
运维自动化无法实现
cmdb实现的核心:
目标:收集服务器的信息(CPU,内存,网卡,硬盘等)
实现方式:
1.linux命令获取CPU,内存
2.python执行linux的命令:
subprocess模块, getoutput函数
```
```
df -h内存信息
cat /proc/cpuinfo IP信息
4种实现方案: agent方案: 其本质上就是在各个服务器上执行subprocess.getoutput()命令,然后将每台机器上执行的结 果,通过request模块返回给主机API,然后主机API收到这些数据之后,放入到数据库中,然后 通过web界面将数据展现给用户 缺点:需要在每一台服务器上进行部署 优点:速度快 使用场景:服务器比较多的时候
ssh类方案: 中控机通过parmiko(py模块)登录到各个服务器上,然后执行命令的方式去获取各个服务器上的信息 API从数据库中获取到未采集的机器列表后发送到中控机服务器中,中控机服务器通过parmiko模块登录到服务器上,进行信息的采集,服务器采集完后再将结果返回给中控机,仍后将从服务器中得到 的信息通过 request模块发送给API,API通过主机名和SN作为唯一标识,将信息录入到数据中,然后通过web界面将数据展现给用户 paramiko模块 缺点: 1:网络有延迟,有一个中控机,网络有延迟,速度较第一种要慢一些(有其是数据比较大的时候更加明显) 优点:不用每台都部署 使用场景: 服务器比较少的时候
salt-stack方式: 中控机从API中获取未采集的资产信息后通过队列发送命令给服务器执行。服务器执行完后将结果放到入另一个队列中,中控机将获取到的服务信息结果发送到API进而录入数据库。然后通过web界面将数据展现给用户
使用场景:公司已经使用salt-stack软件 优点:速度快,开发成本低 缺点:过于依赖salt-stack软件 安装salt-master: yum install salt -master 配置配置文件: interface: 本机IP service salt-master start#(ps启动) 安装 salt-minion yum install salt-minion 配置文件配置: master:10.0.0.51 salt -ket -L:列出所有的minion主机 salt "主机名“ cmd.run "命令"
puppet方式:(不用特别学习)
rubby写的
分为三大部分: 1.服务器数据采集 目标: 实现上述三种方案,然后通过配置,可以任意的切换方案。 规划采集项目: bin:启动文件 conf:配置 lib:库文件或公共文件 src:源代码 test:测试目录 配置文件的管理: django的全局配置文件: 管理一些不常用的默认的配置 比如:语言, email配置等。 核心点: setattr, getattr, dir 的用法 代码: class Settings(): def init(self)
核心点:
setattr, getattr, dir 的用法
代码:
class Settings():
def __init__(self):
## 整合全局配置文件
for k in dir(global_settings):
if k.isupper():
v = getattr(global_settings, k)
setattr(self, k, v)
## 整合自定义配置文件
for k in dir(config):
if k.isupper():
v = getattr(config, k)
setattr(self, k, v)
settings = Settings()
2.API获取数据并清洗入DB
3.web界面的展示 ```