文档章节

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

鸿弟
 鸿弟
发布于 2016/11/03 22:55
字数 723
阅读 368
收藏 19
点赞 1
评论 0

运维经常在维护服务器的时候会有人问服务器的配置是怎么样子的,有些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数据库中,界面中可再提供录入数据库、更新数据库的功能。功能还会再进行完善,

© 著作权归作者所有

共有 人打赏支持
鸿弟
粉丝 65
博文 51
码字总数 33082
作品 0
杭州
运维
flask使用SQLAlchemy操作mysql

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

鸿弟 ⋅ 2016/11/09 ⋅ 0

实例讲解基于 Flask+React 的全栈开发和部署

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

funhacks ⋅ 2017/11/29 ⋅ 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 ⋅ 2017/11/15 ⋅ 0

Flask-RESTful构建小型REST服务

Flask-RESTful构建小型REST服务 2015年6月18日 by debugo · Leave a comment REST是web services和APIs的标准架构,很多APP的架构基本上是使用RESTful的形式了。诸如docker daemon等服务都是...

openthings ⋅ 2016/04/19 ⋅ 0

盛大游戏是如何做到远程服务器的自动管理的?

盛大游戏是中国领先的网络游戏开发商、运营商和发行商,有着上万台的服务器,面对如此大量的服务器,盛大是如何做到远程服务器的自动管理的? 服务器一般是基于应用层的运维,硬件层面如何管...

English0523 ⋅ 2016/05/24 ⋅ 0

使用Flask结合python实现多台服务的内存监控

使用Flask结合python实现多台服务的内存监控 简介:使用flask结合python可以很好的实现服务资源的监控,而且Flask是一个使用 Python 编写的轻量级 Web 应用框架。其 WSGI 工具箱采用 Werkze...

听雨x ⋅ 2017/11/29 ⋅ 0

使用 GitHub 和 Python 实现持续部署

借助 GitHub 的网络钩子webhook,开发者可以创建很多有用的服务。从触发一个 Jenkins 实例上的 CI(持续集成) 任务到配置云中的机器,几乎有着无限的可能性。这篇教程将展示如何使用 Python...

作者: Clément Verna ⋅ 04/15 ⋅ 0

vscode 远程调试python(20171130)

实验环境 远程服务器:京东云,1核2G,centos7.3 64bit 本地环境配置 安装vscode,实验用的版本是1.10.2 vscode配置python插件,实验用的python插件版本是0.7.0 vscode配置python远程调试环境...

yubang ⋅ 2017/11/30 ⋅ 0

使用 ipmitool 实现 Linux 系统下对服务器的 ipmi 管理

IPMI 是一种可扩展的标准,它定义了如何监控硬件和传感器、控制系统部件以及记录重大事件,随着 ipmi 技术在服务器中的应用,利用 ipmi 的众多优势就成为服务器管理特别是集群管理中不可缺少...

camyd ⋅ 2015/08/21 ⋅ 0

Python进阶(五十)-解析Flask运行原理

Python进阶(五十)-解析Flask运行原理   在学习Python Web开发过程中,掌握了Flask的开发方法。经过一段时间的视频学习,回过头来对Flask的运行原理做一简要解析,以增强自己对Flask的了解。...

sunhuaqiang1 ⋅ 2017/05/30 ⋅ 0

没有更多内容

加载失败,请刷新页面

加载更多

下一页

MySQL主从复制原理、半同步操作步骤及原理

1.1 企业Linux运维场景数据同步方案 1.1.1 文件级别的异机同步方案 1、scp/sftp/nc 命令可以实现远程数据同步。 2、搭建ftp/http/svn/nfs 服务器,然后在客户端上也可以把数据同步到服务器。...

xiaomin0322 ⋅ 17分钟前 ⋅ 0

Oracle10g 数据及文件迁移过程[原]

QL*Plus: Release 10.2.0.1.0 - Production on 星期三 5月 11 10:22:35 2011 Copyright (c) 1982, 2005, Oracle. All rights reserved. 连接到: Oracle Database 10g Enterprise Edition Re......

harrypotter ⋅ 23分钟前 ⋅ 0

nginx安装

1:安装工具包 wget、vim和gcc yum install -y wget yum install -y vim-enhanced yum install -y make cmake gcc gcc-c++ 2:下载nginx安装包 wget http://nginx.org/download/nginx-1......

壹丶贰 ⋅ 26分钟前 ⋅ 0

ideaVim安装及配置

1.安装插件 File-Settings-Plugins,Browse Repositories,输入ideavim,安装。 重启后,在Tools-Vim Emulator启用。 2.快捷键设置 ideaViim键与idea快捷键有冲突,可以在Settings-Other Se...

Funcy1122 ⋅ 30分钟前 ⋅ 0

MySQL中B+Tree索引原理

B+树索引是B+树在数据库中的一种实现,是最常见也是数据库中使用最为频繁的一种索引。B+树中的B代表平衡(balance),而不是二叉(binary),因为B+树是从最早的平衡二叉树演化而来的。在讲B...

浮躁的码农 ⋅ 44分钟前 ⋅ 0

两道面试题,带你解析Java类加载机制

在许多Java面试中,我们经常会看到关于Java类加载机制的考察,例如下面这道题: class Grandpa{ static { System.out.println("爷爷在静态代码块"); }} cl...

1527 ⋅ 48分钟前 ⋅ 0

SpringCloud(Data Flow)

dataflow-server

赵-猛 ⋅ 59分钟前 ⋅ 0

深入理解Java虚拟机

这本书我读到第8章,之后就是在读不下去了。 读到后面是一种痛苦的体验,太多的东西是不全面的,大量的专有名词是没有解释的,读到最后很多东西仅仅是一个侧面,所以我觉得,这本书不适合初学...

颖伙虫 ⋅ 今天 ⋅ 0

NanoPi NEO core/ Ubuntu16.04单网卡配置3个IP地址(2个静态,1个动态)

配置 root@NanoPi-NEO-Core:/etc/network# cat interfacesauto loiface lo inet loopbackallow-hotplug eth0iface eth0 inet static address 172.31.188.249 netmask 255.......

SamXIAO ⋅ 今天 ⋅ 0

三步为你的App集成LivePhoto功能

摘要:LivePhoto是iOS9新推出的一种拍照方式,类似于拍摄Gif图或录制视频片段生成图片。如果没有画面感,可以联想《哈利波特》霍格沃茨城堡的壁画,哈哈,很炫酷有木有,但坑爹的是只有iphone6S以...

壹峰 ⋅ 今天 ⋅ 0

没有更多内容

加载失败,请刷新页面

加载更多

下一页

返回顶部
顶部