返回顶部
首页 > 资讯 > 服务器 >[开发]Python实现运维监控服务器硬
  • 400
分享到

[开发]Python实现运维监控服务器硬

服务器Python 2023-01-31 02:01:40 400人浏览 安东尼
摘要

      今天通过使用python开发针对服务器硬件运行状态的监控,简单了解下在虚拟环境中的运维监控的实现,算是给全面研究云计算开一个头。 1.先准备环境,软件配置如下: 虚拟环境:     Vmware 10 操作系统:     l

      今天通过使用python开发针对服务器硬件运行状态的监控,简单了解下在虚拟环境中的运维监控的实现,算是给全面研究云计算开一个头。

1.先准备环境,软件配置如下:
虚拟环境:     Vmware 10
操作系统:     linux ubuntu-14.04-server-amd64
数据库   :     Mysql
开发语言:     python 2.7
可视化   :     Highcharts
2.省略安装软件的步骤,开始创建数据库
     
创建数据库“flacon” 
CREATE DATABASE flacon;

创建表“stat”
          
CREATE TABLE stat (

  `id` int(11) unsigned NOT NULL AUTO_INCREMENT,

  `host` varchar(256) DEFAULT NULL,

  `mem_free` int(11) DEFAULT NULL,

  `mem_usage` int(11) DEFAULT NULL,

  `mem_total` int(11) DEFAULT NULL,

  `load_avg` varchar(128) DEFAULT NULL,

  `time` bigint(11) DEFAULT NULL,

  PRIMARY KEY (`id`),

  KEY `host` (`host`(255))

) ENGINE=InnoDB AUTO_INCREMENT=0 DEFAULT CHARSET=utf8;


在开发之前注意创建文件工程目录
--templates
   --mon.html
--flask_web.py
--monItems.py

3.用Python开发后台服务flask_web.py,用于将查询到的数据存入数据库,并相应前端页面的展示请求

<span style="font-size:14px;">import mysqldb as mysql
import JSON
from flask import Flask, request, render_template
app = Flask(__name__)
db = mysql.connect(user="root", passwd="root", \
        db="falcon", charset="utf8")
db.autocommit(True)
c = db.cursor()

@app.route("/", methods=["GET", "POST"])
def hello():
    sql = ""
    if request.method == "POST":
        data = request.json
        try:
            sql = "INSERT INTO `stat` (`host`,`mem_free`,`mem_usage`,`mem_total`,`load_avg`,`time`) VALUES('%s', '%d', '%d', '%d', '%s', '%d')" % (data['Host'], data['MemFree'], data['MemUsage'], data['MemTotal'], data['LoadAvg'], int(data['Time']))
            ret = c.execute(sql)
        except mysql.IntegrityError:
            pass
        return "OK"
    else:
        return render_template("mon.html")

@app.route("/data", methods=["GET"])
def getdata():
    c.execute("SELECT `time`,`mem_usage` FROM `stat`")
    ones = [[i[0]*1000, i[1]] for i in c.fetchall()]
    return "%s(%s);" % (request.args.get('callback'), json.dumps(ones))
    

if __name__ == "__main__":
    app.run(host="0.0.0.0", port=8888, debug=True)</span>



注:服务通过ip:8888/和ip:8888/data两个请求url,用于相应不同的请求。根节点实现了两个方法,post方法用于将操作系统的监控数据接收并存储到mysql数据库中;get方法则返回mon.html页面。
     /data的url用于相应客户端页面提交的查询最新的数据的请求,这里根据查询条件的不同可以查询到不同的信息,这里没有实现查询全部属性而是默认了mem_usage。
     运行服务之后,效果如下:
4.用Python开发查询系统资源的服务moniItems.py

import inspect
import time
import urllib, urllib2
import json
import Socket

class mon:
    def __init__(self):
        self.data = {}

    def getTime(self):
        return str(int(time.time()) + 8 * 3600)

    def getHost(self):
        return socket.gethostname()

    def getLoadAvg(self):
        with open('/proc/loadavg') as load_open:
            a = load_open.read().split()[:3]
            return ','.join(a)
    
    def getMemTotal(self):
        with open('/proc/meminfo') as mem_open:
            a = int(mem_open.readline().split()[1])
            return a / 1024
    
    def getMemUsage(self, noBufferCache=True):
        if noBufferCache:
            with open('/proc/meminfo') as mem_open:
                T = int(mem_open.readline().split()[1])
                F = int(mem_open.readline().split()[1])
                B = int(mem_open.readline().split()[1])
                C = int(mem_open.readline().split()[1])
                return (T-F-B-C)/1024
        else:
            with open('/proc/meminfo') as mem_open:
                a = int(mem_open.readline().split()[1]) - int(mem_open.readline().split()[1])
                return a / 1024
    
    def getMemFree(self, noBufferCache=True):
        if noBufferCache:
            with open('/proc/meminfo') as mem_open:
                T = int(mem_open.readline().split()[1])
                F = int(mem_open.readline().split()[1])
                B = int(mem_open.readline().split()[1])
                C = int(mem_open.readline().split()[1])
                return (F+B+C)/1024
        else:
            with open('/proc/meminfo') as mem_open:
                mem_open.readline()
                a = int(mem_open.readline().split()[1])
                return a / 1024
    
    def runAllGet(self):
        #自动获取mon类里的所有getXXX方法,用XXX作为key,getXXX()的返回值作为value,构造字典
        for fun in inspect.getmembers(self, predicate=inspect.ismethod):
            if fun[0][:3] == 'get':
                self.data[fun[0][3:]] = fun[1]()
        return self.data

if __name__ == "__main__":
    while True:
        m = mon()
        data = m.runAllGet()
        print data
        req = urllib2.Request("Http://localhost:8888", json.dumps(data), {'Content-Type': 'application/json'})
        f = urllib2.urlopen(req)
        response = f.read()
        print response
        f.close()
        time.sleep(2)


4.最后开发前端展示图表

<title>运维原型</title>
<!DOCTYPE HTML>
<html>
    <head>
        <meta http-equiv="Content-Type" content="text/html; charset=utf-8">
        <title>运维原型</title>

        <script type="text/javascript" src="http://code.Jquery.com/jquery.min.js"></script>
        <style type="text/CSS">
${demo.css}
        </style>
        <script type="text/javascript">
$(function () {
    $.getJSON('/data?callback=?', function (data) {

        // Create the chart
        $('#container').highcharts('StockChart', {

            rangeSelector: {
                inputEnabled: $('#container').width() > 480,
                selected: 1
            },

            title: {
                text: '运维原型'
            },

            series: [{
                name: '运维原型',
                data: data,
                type: 'spline',
                tooltip: {
                    valueDecimals: 2
                }
            }]
        });
    });
});
        </script>
    </head>
    <body>
<script src="http://cdnjs.cloudflare.com/ajax/libs/highstock/2.0.4/highstock.js"></script>
<script src="http://code.highcharts.com/modules/exporting.js"></script>


<div id="container" style="height: 400px"></div>
    </body>

</html>

注:顶一个div,命名为container,用于存放统计图表。页面通过向/data目录提交请求获得监控数据的查询结果,在回调函数中展示。通过访问url:http://ip:8888可以看到展现效果,如下:
5.总结
     通过这个例子的开发,可以了解通过Python进行运维监控的基本方法,关键问题是要从操作系统的/proc/meminfo和/proc/loadavg文件查询操作系统内存使用数据和CPU的负载信息。以下blog可以帮助详细了解memnifo文件的内容和/proc目录其他文件的介绍。
http://blog.csdn.net/cnctloveyu/article/details/4074892
http://blog.csdn.net/kevinx_xu/article/details/8178746
     


     





--结束END--

本文标题: [开发]Python实现运维监控服务器硬

本文链接: https://lsjlt.com/news/186820.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

猜你喜欢
  • [开发]Python实现运维监控服务器硬
          今天通过使用Python开发针对服务器硬件运行状态的监控,简单了解下在虚拟环境中的运维监控的实现,算是给全面研究云计算开一个头。 1.先准备环境,软件配置如下: 虚拟环境:     Vmware 10 操作系统:     L...
    99+
    2023-01-31
    服务器 Python
  • 用Python实现多站点运维监控
    在小型公司里如果产品线单一的话,比如就一个app, 一般1~2个运维就够用了。如果产品过于庞大,就需要多个运维人员。 但对于多产品线的公司来说,运维人员就要必须分多个人负责,因为超过200个站点让1个人维护,那工作量是巨大的,就单单给开发...
    99+
    2023-01-30
    站点 Python
  • linux服务监控及运维
    目录一, 安装psutil 包二,找到操作系统中所有的服务的name和pid三,找到需要监控但没有启动的服务四,监控服务,如果没有开启则自动开启,[并发邮件通知工作人员]  一, 安装psutil 包 1.1、...
    99+
    2022-06-04
    linux服务监控 linux服务运维
  • 预防性维护的秘诀:服务器硬件监控的最佳实践
    服务器硬件监控对于保证服务器性能、可靠性和可用性至关重要。通过主动监控关键指标,可以及早发现问题并采取预防措施,从而避免代价高昂的停机和数据丢失。 最佳实践 1. 持续监控关键指标 中央处理器 (CPU) 使用率和温度 内存使用率和错误...
    99+
    2024-04-02
  • Python实现定时发送监控邮件
    目录一、自动定时任务运行详情二、开启POP3/SMTP服务三、发送邮件1 导入库2 设置邮件内容3 添加附件4 发送邮件5 邮件发送效果四、设置定时任务1 设置定时任务的具体步骤2 ...
    99+
    2024-04-02
  • 服务器硬件监控软件有哪些
    常用的服务器硬件监控软件包括:1. Nagios:一款免费的开源软件,可监控服务器的CPU、内存、磁盘、网络等硬件资源。2. Zab...
    99+
    2023-06-08
    服务器硬件监控 服务器
  • 如何实现Linux服务器硬件运行状态及故障邮件提醒的监控脚本
    小编给大家分享一下如何实现Linux服务器硬件运行状态及故障邮件提醒的监控脚本,相信大部分人都还不怎么了解,因此分享这篇文章给大家参考一下,希望大家阅读完这篇文章后大有收获,下面让我们一起去了解一下吧!监控硬件运行状况shell 监控cpu...
    99+
    2023-06-09
  • SpringBootAdmin+actuator实现服务监控
    SpringBootAdmin可以监控SpringBoot单击或集群项目,提供详细的健康信息、内存信息、JVM系统和环境属性、垃圾回收信息、日志设置和查看、定时任务查看、Spring...
    99+
    2024-04-02
  • python监控服务器状态
    主要监控域名能否访问,还有redis服务是否正常# coding: utf-8 __author__ = 'www.py3study.com' import os impor...
    99+
    2023-01-30
    状态 服务器 python
  • Python实现监控一个程序的运行情况
    目录一、前言二、使用psutil库和subprocess库介绍1.psutil 库2.subprocess 库三、使用psutil库和subprocess库示例程序四、多进程通信一、...
    99+
    2023-05-12
    Python监控程序运行情况 Python监控程序 Python监控
  • 云计算开发技术Python自动化运维开发实战二
    云计算开发技术Python方面的知识少不了,Python编程博大精深,知识点众多,需要先整体上了解python的一些基本用法之后再去对每一个知识点细细研究,这样学习的速度会快很多。所以下面就先看一些python事先需要知道的基本知识。交互模...
    99+
    2023-06-03
  • Python监控服务器利器--psuti
    服务器的监控通过安装一些常用的监控软件之外,有时也需要运行一些shell或Python脚本;shell下可以使用系统自带的ps/free/top/df等shell命令,Python可以调用subprocess等模块来运行shell命令,不过...
    99+
    2023-01-31
    利器 服务器 Python
  • 智控服务器:远程管理开启运维新时代
    随着企业数字化转型进程的不断加速,IT基础设施变得越来越复杂,对运维人员提出了更高的要求。传统的人工运维模式已无法满足企业的需求,智能运维成为企业运维的必然选择。 智控服务器作为智能运维的重要组成部分,以其强大的智能化、自动化管理功能,...
    99+
    2024-02-10
    智控服务器 远程管理 运维自动化 智能运维
  • PHP 微服务容器化的敏捷开发与运维
    答案: php 微服务采用 helm charts 部署进行敏捷开发,并使用 docker container 容器化以实现隔离和可扩展性。详细描述:使用 helm charts 自动部...
    99+
    2024-05-08
    php 微服务 docker composer
  • Python自动化运维开发中的流程控制是怎样的
    这期内容当中小编将会给大家带来有关Python自动化运维开发中的流程控制是怎样的,文章内容丰富且以专业的角度为大家分析和叙述,阅读完这篇文章希望大家可以有所收获。Python自动化运维开发实战流程控制。Python条件语句是通过一条或多条语...
    99+
    2023-06-04
  • Python怎么实现定时发送监控邮件
    这期内容当中小编将会给大家带来有关Python怎么实现定时发送监控邮件,文章内容丰富且以专业的角度为大家分析和叙述,阅读完这篇文章希望大家可以有所收获。不管是在信贷领域还是支付领域,作为一个风控人员,我们都需要对部署的策略模型进行监控,信贷...
    99+
    2023-06-22
  • Shell开发实践:服务器的磁盘、CPU、内存的占用监控
    🏆作者简介,黑夜开发者,CSDN领军人物,全栈领域优质创作者✌,CSDN博客专家,阿里云社区专家博主,2023年6月CSDN上海赛道top4。 🏆数年电商行业从业...
    99+
    2023-09-05
    服务器 linux 运维 shell 磁盘监控 原力计划
  • PHP 开发中 Elasticsearch 实现实时日志监控与报警
    随着互联网的普及和数据量的不断增长,日志的实时监控和报警成为了很多系统开发中必备的功能。在PHP开发中,我们可以利用Elasticsearch这个强大的搜索引擎和分析工具来实现实时日志监控与报警功能。本文将详细介绍如何使用PHP开发,利用E...
    99+
    2023-10-21
    elasticsearch 实时监控 报警
  • 使用php开发Websocket,实现实时车辆监控功能
    标题:使用PHP开发WebSocket,实现实时车辆监控功能引言:随着信息科技的不断发展,实时监控系统在各个领域越来越被广泛应用。在交通管理领域,实时车辆监控功能对于提高交通安全和管理效率起到了重要的作用。本文将介绍如何使用PHP开发Web...
    99+
    2023-12-09
    PHP websocket 实时监控
  • 云计算开发技术,Python自动化运维开发实战三部分
    导语:python常用的有3种文件类型 源代码    py 字节代码 pyc 优化代码 pyo源代码:python源代码的文件以”py"为扩展名,由python程序解释,...
    99+
    2023-06-04
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作