文档章节

flask获取远程服务器的硬件信息

实践哥
 实践哥
发布于 2016/11/03 22:55
字数 836
阅读 398
收藏 19

运维经常在维护服务器的时候会有人问服务器的配置是怎么样子的,有些cmdb做得比较好的,能在系统中直接查看,但目前公司还没做这样子的系统,经常要手动登录服务器进行查询,因此,用flask写了个能在系统中直接查询服务器配置。效果如下:

前端代码如下,用户可输入多个ip,然后获取的信息有服务器ip,主机名,cpu内存信息,ulimit设置,系统版本,selinux的状态,可以自己再进行添加:

<form role="form" class="form-inline" method="post" action="/display_server_info">
    <textarea class="form-control" rows="1" name="searchip" placeholder="请输入ip"></textarea>
    <button type="submit" class="btn btn-default">提交</button>
</form>
<table class="table table-bordered">
    <thead>
    <tr>
        <th>服务器ip</th>
        <th>主机名</th>
        <th>cpu内存</th>
        <th>负载</th>
        <th>资源数限制</th>
        <th>系统版本</th>
        <th>selinux状态</th>
    </tr>
    </thead>
    <tbody>
    {% for my_ip in ip %}
        <tr>
            <td>{{ my_ip }}</td>
            <td>{{ info[loop.index0]['hostname'] }}</td>
            <td>{{ info[loop.index0]['cpuinfo'] }}核{{ info[loop.index0]['meminfo'] }}M</td>
            <td>{{ info[loop.index0]['loadavg'] }}</td>
            <td>{{ info[loop.index0]['ulimit'] }}</td>
            <td>{{ info[loop.index0]['release'] }}</td>
            <td>{{ info[loop.index0]['getenforce'] }}</td>
        </tr>
    {% endfor %}
    </tbody>
</table>

 

view的代码如下,前端提交到后台进行处理,其中/etc/server.ini为默认去查询的ip,如果有前端提交过来,则用前端提交过来的ip去进行查询。查出来的信息放入info中,info为列表,每个元素中含有字典。

#查看服务器信息
@app.route('/display_server_info', methods=['GET', 'POST'])
def display_server_info():
    ip = []
    p = re.compile(r'(?:(?:25[0-5]|2[0-4]\d|[01]?\d\d?)\.){3}(?:25[0-5]|2[0-4]\d|[01]?\d\d?)')
    if request.method == 'POST'and p.findall(request.form['searchip']):
        ip = p.findall(request.form['searchip'])
    else:
        for line in open('/etc/server.ini'):
            temp = line.replace('\n', '')
            ip.append(temp)
    info = []
    for i in range(0, len(ip)):
        info.append(collect_info(ip[i], 'root', 'xxxxx', 22))
    return render_template('display_server_info.html',info = info, ip = ip)

 

其中使用的collect_info方法如下,使用到了paramiko去远程服务器采集信息,这个方法使用的密钥登录到远程主机进行信息的查询(密钥的路径写好),然后以字典的形式返回查询到的信息(这里应该改成一个类,目前对python还不是很熟悉):

#获取远程服务器的信息,主机名等
def collect_info(ip, user, pkey, port):
    info = {}
    ip = ip
    user = user
    pkey = pkey
    port = port

    key = paramiko.RSAKey.from_private_key_file(pkey)
    ssh = paramiko.SSHClient()
    ssh.load_system_host_keys()

    ssh.connect(ip, port, user, pkey=key)
    (stdin, stdout, stderr) = ssh.exec_command('hostname')
    hostname = stdout.read()
    (stdin, stdout, stderr) = ssh.exec_command('cat /proc/cpuinfo |grep "processor"|wc -l')
    cpuinfo = stdout.read()
    (stdin, stdout, stderr) = ssh.exec_command("free -m|grep 'Mem:'|awk '{print $2}'")
    meminfo = stdout.read()
    (stdin, stdout, stderr) = ssh.exec_command("uptime |awk -F':' '{print $NF}'")
    loadavg = stdout.read()
    (stdin, stdout, stderr) = ssh.exec_command("getenforce")
    getenforce = stdout.read()
    (stdin, stdout, stderr) = ssh.exec_command("ulimit -n")
    ulimit = stdout.read()
    (stdin, stdout, stderr) = ssh.exec_command("cat /etc/redhat-release")
    release = stdout.read()
    ssh.close()
    info['hostname'] = hostname
    info['cpuinfo'] = cpuinfo
    info['meminfo'] = meminfo
    info['getenforce'] = getenforce
    info['ulimit'] = ulimit
    info['loadavg'] = loadavg
    info['release'] = release
    return info

 

相关的信息可以进行收集并录入mysql数据库中,界面中可再提供录入数据库、更新数据库的功能。功能还会再进行完善,

 

最后附上本人的网络课堂地址,如有兴趣请点击: 实践哥

© 著作权归作者所有

共有 人打赏支持
实践哥
粉丝 66
博文 51
码字总数 35897
作品 0
杭州
运维
私信 提问
flask使用SQLAlchemy操作mysql

注意:看这篇博客需要先看我之前写的一篇博客,在 https://my.oschina.net/zhuangweihong/blog/780913 (flask获取远程服务器的硬件信息) 这篇博客中有提到,获取远程服务器的硬件信息可以入...

just_do_itit
2016/11/09
0
0
实例讲解基于 Flask+React 的全栈开发和部署

简介 我有时在 Web 上浏览信息时,会浏览 Github Trending, Hacker News 和 稀土掘金 等技术社区的资讯或文章,但觉得逐个去看很费时又不灵活。后来我发现国外有一款叫 Panda 的产品,它聚合...

funhacks
2017/11/29
0
0
Python全栈 Web(Flask框架、安装、应用)

Flask 轻量级WEB框架 静态网页: 不能与服务器交互的网页都是静态网页 动态网页: 能够与服务器进行交互的网页 WEB:浏览器 网页(前端三剑客) 服务器: 能够给用户提供服务的机器就是服务器...

巴黎香榭
2018/09/20
0
0
jenkins自动化发布python flask模拟流程

一、前提步骤 1、安装gitlab yum -y install policycoreutils openssh-server openssh-clients postfix wget https://mirrors.tuna.tsinghua.edu.cn/gitlab-ce/yum/el6/gitlab-ce-8.17.0-ce.......

yhwei89
2018/06/28
0
0
Python全栈 Web(Flask框架、应用配置, request, response)

修改配置: app = Flask(name, template_folder="模板目录", staticurlpath="静态文件路径", static_path="文件存储路径") template_folder: 设置模板的保存路径 staticurlpath: 设置静态文件......

巴黎香榭
2018/09/25
0
0

没有更多内容

加载失败,请刷新页面

加载更多

给windows server中的“未识别的网络”或“无法识别的网络”设置网络位置类型

在windows server中,如果网络没有被正确的识别,那么就需要手工设置一下网络位置类型。 将“公用网络”指定设置为“专用网络“ 【控制面板】--【系统和安全】--【管理工具】--【本地安全策略...

gugudu
46分钟前
1
0
阿里强制要求的21条Java开发规范,可以避免很多坑

1. 【强制】避免通过一个类的对象引用访问此类的静态变量或静态方法,无谓增加编译器解析成本,直接用类名来访问即可。 2. 【强制】所有的覆写方法,必须加@Override注解。 说明:getObject...

天王盖地虎626
今天
6
0
oracle dg 备库未设置convert参数导致ORA-01111,ORA-01110

查看trace 文件: MRP0: Background Managed Standby Recovery process started (amls) started logmerger process Sun Jan 20 07:55:53 2019 Managed Standby Recovery starting Real Time ......

hnairdb
今天
2
0
乱入Linux界的我是如何学习的

欢迎来到建哥学Linux,咳!咳!咳!开个玩笑哈,我是一个IT男,IT界的入门选手,正在学习Linux。 在之前,一直想进军IT界,学习IT技术,但是苦于没有人指导,也不知道学什么,最开始我自己在...

linux-tao
今天
2
0
乱入Linux界的我是如何学习的

欢迎来到建哥学Linux,咳!咳!咳!开个玩笑哈,我是一个IT男,IT界的入门选手,正在学习Linux。 在之前,一直想进军IT界,学习IT技术,但是苦于没有人指导,也不知道学什么,最开始我自己在...

linuxprobe16
今天
9
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部