zoukankan      html  css  js  c++  java
  • 自动化运维与传统运维

    自动化运维与传统运维的比较

    • 企业中,项目的开发流程
    产品经理调研需求 ----》三方开会讨论(开发,产品,运维,测试) -----> 开发进行开发产品  ----> 测试流程 (黑盒和白盒测试) -----> 上线
    
    • 传统的上线流程
    SVN 开发将代码压缩一下发给运维,运维拿到代码之后,然后将代码解压缩,部署到服务器上,启动服务  
    
    优点:流程比较简单
    缺点:服务器多的话,部署就非常的慢,影响上线的进度
    
    • 自动化运维的流程
    搞一个web的系统,勾选发布的机器,上传代码, 进行发布
    # 注:上述系统需要知道服务器的基本信息(元信息)
    
    • 监控系统
    比如:需要监控服务器的CPU使用率,磁盘大小(>90%,报警),内存使用率
    # 注:上述系统需要知道服务器的基本信息(元信息)
    

    结论

    所以我们要想做自动化运维的话,我们首先的知道基本信息,由此我们就引出了CMDB项目
    CMDB:Configure Manage Database  中文叫 配置管理数据库,主要用来收集服务器的基础信息
    

    CMDB 的概念图

    CMDB的架构图(实现方案)

    第一种agent方案

    Agent方式,可以将服务器上面的Agent程序作定时任务,定时将资产信息提交到指定API录入数据库
    

    其本质就是在各个服务器上执行subprocess.getoutput()命令,然后将每台机器上执行的结果,返回给主机API,然后主机API收到这些数据之后,放入到数据库中,最终通过web界面展现给用户
    

    优点:速度快

    缺点:需要为每一天服务器部署一个Agent程序

    • agent 方案简单演示
    import subprocess, json
    
    res = subprocess.getoutput('ipconfig')
    # print(res)
    
    info = res[12:23]   # 假设可以这一步是可以从信息中获取我们想要的ip
    
    import requests
    
    requests.post('http://127.0.0.1:8000/api/', data=json.dumps(info))
    
    • server
    from django.shortcuts import render, HttpResponse
    
    # Create your views here.
    
    
    def asset(request):
    
        print(request.body)
    
        return HttpResponse('OK')
    
    问:如何使用Python代码来执行linux的命令?
    答:subprocess模块来执行linux命令
    
    问:为啥post中没有收到数据,而body中有
    答:django根据你http协议的头信息来判断,
    如果 content-type: application/form-url-encode的话,django会将body中的数据付给post。如果 content-type: application/json的话,django不会将body中的数据付给post
    

    第二种ssh类(基于Paramiko模块)

    中控机通过Paramiko(py模块)登录到各个服务器上,然后执行命令的方式去获取各个服务器上的信息
    

    优点:不需要在每一个服务器上都部署代码,只需通过中控机连接

    缺点:因为是通过网络连接,所以速度会慢点

    所以如果在服务器较少的情况下可以应用次方法

    • ssh类方法
    """
    pip install paramiko
    """
    
    import paramiko
    
    # 创建SSH对象
    ssh = paramiko.SSHClient()
    # 允许连接不在know_hosts文件中的主机
    ssh.set_missing_host_key_policy(paramiko.AutoAddPolicy())
    # 连接服务器
    ssh.connect(hostname='10.0.0.200', port=22, username='root', password='123456')
    
    # 执行命令
    stdin, stdout, stderr = ssh.exec_command('ifconfig')
    # 获取命令结果
    result = stdout.read()
    print(result)
    
    # 关闭连接
    ssh.close()
    

    链接:
    https://lupython.gitee.io/2018/05/05/CMDB介绍/

  • 相关阅读:
    数据结构-连续子数组的最大和
    数据结构-并查集
    nginx开启代理后,出现net::ERR_CONTENT_LENGTH_MISMATCH 200 (OK)错误
    计算出n阶乘中尾部零的个数
    常见的加密方式总结
    idea中lombok不生效
    纯真ip地址数据库使用
    go mod使用
    exec: "gcc": executable file not found in %PATH%解决办法
    java多线程系列1-初识多线程多线程4种实现方式
  • 原文地址:https://www.cnblogs.com/yafeng666/p/12568940.html
Copyright © 2011-2022 走看看