django搭建一个小型的服务器运维网站-查看服务器中的日志与前端的datatable的利用...

news/2024/4/29 2:27:47/文章来源:https://blog.csdn.net/weixin_34409703/article/details/88832414

目录

  1. 项目介绍和源码;
  2. 拿来即用的bootstrap模板;
  3. 服务器SSH服务配置与python中paramiko的使用;
  4. 用户登陆与session;
  5. 最简单的实践之修改服务器时间;
  6. 查看和修改服务器配置与数据库的路由;
  7. 基于websocket的实时日志实现;
  8. 查看服务器中的日志与前端的datatable的利用;
  9. 重启服务器进程。

前言

  除了能够支持实时的日志之外,小项目还需要增加一个回看日志的页面,页面的效果如图1所示。这个页面的作用是按用户的需求(日志的日期、日志内容的时间、日志的内容)筛选出需要的日志并且展示到这个datatable的动态表格中,它的实现原理很简单,但是具有一定的局限性。但是可以满足一些本身不多的日志的查看,如错误日志、测试日志、服务器日志这些。

图1 页面效果

功能内容

显示页面

  页面由一个Datatable和自己写的一些input组件组成,其html脚本如下。

{% extends "./base.html" %}{% block othercss %}
<link href="https://cdn.datatables.net/1.10.16/css/jquery.dataTables.min.css" rel="stylesheet" />
{% endblock %}
{% block title %}{{ title }}{% endblock %}
{% block log %}{{ title }}{% endblock %}
{% block username %}{{ username }}{% endblock %}{% block mainbody %}
<section class="wrapper site-min-height"><h3><i class="fa fa-angle-right"></i> 查找日志 <i class="fa fa-desktop"></i></h3><div class="row mt"><div class="form-panel"><div class="col-lg-12 row mt"><div class="col-sm-6"><h4 class="mb" style="float:left;dispaly:block;">查找日志</h4></div><div class="col-sm-5 search"><input type="text" class="form-control" id='contentkey' placeholder='关键内容或日志名(可填)'><input type="text" class="form-control" id="date"><div class="row"><div class="col-sm-8"><input type="text" class="form-control" id="time" placeholder='选择时间段(必填)'></div><div class="col-sm-4"><button type="button" class="btn btn-theme02" id='searchlog' style="float:right;">查找日志</button></div></div></div></div><div><div class="progress progress-striped active" style="display:none" id="loading"><div class="progress-bar" role="progressbar" aria-valuenow="100" aria-valuemin="0" aria-valuemax="100" style="width: 100%"></div></div><table id="logtable" class="table-striped dataTable table-advance table-hover" style="word-break:break-all;"><thead><tr><th style="width:25%;">日志时间</th><th style="width:15%;">名字</th><th>日志内容</th></tr></thead><tbody id="log"></tbody></table></div></div></div>
</section>
{% endblock %}

  控制这个html界面的javascript代码如下,代码中laydate组件的作用是针对图2中的蓝框中的时间选择器,它的引用在文章最简单的实践之修改服务器时间中提到过,具体的使用方法可以移步文章layDate 日期与时间组件, $('#logtable').DataTable({...})用来初始化一个定制的动态响应表格,后文中会具体说说它的使用。当用户填好内容之后点击查找日志按钮,会执行$("#searchlog").click(function(){...})函数,它会依次判断日期、时间段是否已经填写,由于筛选日志时候用的是时间段,所以还会判断一下首尾时间是否相等。

图2 时间选择界面

{% block scripts %}
<script>
// 获取当前的日期,在用户选择日期的时候input栏默认显示为当前日期
var formatDate = function (date) {  var y = date.getFullYear();  var m = date.getMonth() + 1;  m = m < 10 ? '0' + m : m;  var d = date.getDate();  d = d < 10 ? ('0' + d) : d;  return y + '-' + m + '-' + d;  
};  $(document).ready(function (){$('#logtable').DataTable({"scrollCollapse": true,'columnDefs':[{'targets' : [0,1,2],    //除时间列以外都不排序'orderable' : false}],"order": [[0 , "asc" ]],"oLanguage": {"sZeroRecords": "无结果!","sSearch": "日志过滤:",},});laydate.render({theme: 'molv',elem: '#date',// input栏默认当前日期value: formatDate(new Date())});// 时间范围laydate.render({theme: 'molv',elem: '#time',type: 'time',format: 'H点',range: true});
});
$("#searchlog").click(function(){keycontent = $("#contentkey").val();date = $("#date").val();if(date == ''){swal('', '请选择日期!', 'error')return ;}time = $("#time").val();if(time == ''){swal('', '请填写时间段!', 'error')return ;}// 判定首尾时间是否相等,由于是取时间段,首尾时间相等时是不允许的_time = time.split("-");begin_time = _time[0].replace(/\s/ig,'');end_time = _time[1].replace(/\s/ig,'');if(begin_time == end_time){swal('', '首位时间相等,请重新输入!', 'error')return ;}var table = $('#logtable').DataTable().clear().draw();table.clear().draw();$.ajax({url:"searchlog",type:'POST',data:{'keycontent':keycontent, 'date':date, 'time':time},success: function(arg){ret = eval(arg);logs = ret.logs;for(j = 0,len = logs.length; j < len; j++) {logtime = logs[j][0];logname = logs[j][1];logcontent = logs[j][2];table.row.add([logtime,logname,logcontent]).draw(true);}}});
});
</script>
<script src="/templates/servermaterial/assets/laydate/laydate.js"></script>
<script src="https://cdn.datatables.net/1.10.16/js/jquery.dataTables.min.js"></script>
{% endblock %}

  添加server/urls.py中的url函数url(r'^searchlog', views.searchlog)
  在server/views.py中添加页面渲染函数log和由url请求过来的searchlog功能函数:

# -*- coding: utf-8 -*-
from __future__ import unicode_literalsfrom django.contrib.auth import logout
from django.shortcuts import render_to_response
from django.http import JsonResponse
from django.contrib.auth.decorators import login_required
import json
import time'''以下这些函数是渲染前端模板的函数'''
# 服务器的名字
htmltitle = '服务器工具'# 页面渲染函数
@login_required(login_url='/loginpage')
def log(request):username = request.session.get('username')pagedict = {'title': htmltitle, 'username': username}return render_to_response("servermaterial/log.html", pagedict)# 查找日志
def searchlog(request):ret = {'status': False, 'logs': ''}if request.method == 'POST':from WebTool.functions import get_filter_log# 关键内容keycontent = request.POST.get('keycontent')# 日志日期logdate = request.POST.get('date')# 日志筛选的时间段logtime = request.POST.get('time')filter_list = [keycontent, logdate, logtime]logs = get_filter_log(filter_list)ret['status'] = Trueret['logs'] = logsreturn JsonResponse(ret)

  searchlog中的get_filter_log函数是根据服务器中日志的形式单独定制的,所以在前面的文章中没有写过它的实现,下面的服务器中的日志内容中会实现一个get_filter_log函数。

服务器中的日志内容

  • 服务器中日志格式

  如图3,服务器中的日志名字规律用log-(日期)的格式存放着,每个txt日志的文档内容都形如图4所示,日志中会记录条目生成的时间,名字和内容。

图3 日志的格式

图4 日志内容格式

  • paramiko实现get_filter_log函数

  根据日志的名字规律和格式可以单独写一个paramiko函数如下,写好的函数放在Webtool/Webtool中的functions文件中。用到了一些简单的Linux命令行。
  'find /home/logs -name *' + filter_date + '*.txt'用来在日志文件夹下查找给定日期的日志文件。
  | xargs cat将查找到的结果执行cat。
  grep -E \'' + filter_time + '\' | grep -i ' + filter_content用来在cat的结果中查找符合时间段和内容的结果。
  可以看出这里,查找日志的方式是使用cat一步到位的,所以对于日志内容很大的情况,需要很长一段时间,特别是还要传递到前端的datatable中显示。

# 获得服务器的日志
def get_filter_log(filter_list):ssh = login_server_by_pwd()# 筛选日志的时期filter_date = filter_list[1].replace('-', '')_filter_date = filter_list[1]# 筛选日志的时间filter_content = filter_list[0]# 筛选日志的时间范围time_range = filter_list[2]beg_time, end_time = re.findall("\d+", time_range)beg_time = int(beg_time)end_time = int(end_time)if beg_time > end_time:beg_time, end_time = end_time, beg_time# 根据首尾时间生成每个单独时间用于日志帅选time_list = ["%02d" % num for num in range(beg_time, end_time)]filter_time = ''# 可被Linux执行的命令行for _time in time_list:filter_time += (_filter_date + ' ' + _time + ':|')filter_time = filter_time[:-1]# 检查是否存在该天的日志stdin, stdout, stderr = ssh.exec_command('find /home/logs -name *' + filter_date + '*.txt')istxt = bool(len(stdout.read()))# 如果存在改天的日志if istxt:# 如果有需要进一步筛选内容if filter_content:filter_command = 'find /home/logs -name "*' \+ filter_date + '*.txt" | xargs cat | grep -E \'' \+ filter_time + '\' | grep -i ' + filter_contentelse:filter_command = 'find /home/logs -name "*' \+ filter_date + '*.txt" | xargs cat | grep -E \'' + filter_time + '\''print filter_commandstdin, stdout, stderr = ssh.exec_command(filter_command)raw_log = stdout.read()log = re.findall("\[(.*?)\]\[(.*?)\],({.*})", raw_log)return log

Datatable的使用

  关于Datatable的使用可以参考的文章很多,这里只是说下这个页面中dataatable的使用。它的javascript函数很简单,如下:

$('#logtable').DataTable({"scrollCollapse": true,'columnDefs':[{'targets' : [1,2],    // 除时间列以外都不排序,0列为时间,1列为名字,2列为内容'orderable' : false}],"order": [[0 , "asc" ]],  // 时间列默认按升序排列"oLanguage": {            "sZeroRecords": "无结果!",   // 表格没有内容的时候显示无结果!,如图5红色框"sSearch": "日志过滤:",      // 搜索栏的提示,如图5蓝色框},
});

图5

  下面的javascript代码通过ajax请求到后台之后,将后台传递上来的日志结果一个个增加到表格中,table.row.add([logtime,logname,logcontent]).draw(true)这个函数用来向datatable中增加数据。

$.ajax({url:"searchlog",type:'POST',data:{'keycontent':keycontent, 'date':date, 'time':time},success: function(arg){ret = eval(arg);logs = ret.logs;for(j = 0,len = logs.length; j < len; j++) {logtime = logs[j][0];logname = logs[j][1];logcontent = logs[j][2];table.row.add([logtime,logname,logcontent]).draw(true);}}});

结语

  这里说了下怎么实现查看服务器已经存在的日志,但是这个方法本身是存在缺陷的,它只适用于比较小的日志文件的显示,大文件需要很长一段时间。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.luyixian.cn/news_show_732496.aspx

如若内容造成侵权/违法违规/事实不符,请联系dt猫网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Docker学习之路05:五分钟用docker compose搭建一个自己的个人博客网站!

五分钟用docker compose搭建一个自己的个人博客网站&#xff01; Docker学习路线传送门&#xff1a; Docker学习之路01&#xff1a;Docker的安装 Docker学习之路02&#xff1a;阿里云镜像加速器 Docker学习之路03&#xff1a;Docker的常用命令 Docker学习之路04&#xff1a;创…

R语言与数据分析练习:使用ARIMA模型预测网站访问量

R语言与数据分析练习&#xff1a;使用ARIMA模型预测网站访问量 使用ARIMA模型预测网站访问量 一、实验背景&#xff1a; 随着流量的增大&#xff0c;某网站的数据信息量也在以一定的幅度增长 基于该网站2016年9月~2017年2月每天的访问量&#xff0c;使用ARIMA模型预测网站未来…

R语言与数据分析练习:使用协同过滤算法实现网站的智能推荐

R语言与数据分析练习&#xff1a;使用协同过滤算法实现网站的智能推荐 使用ARIMA模型预测网站访问量 一、实验背景&#xff1a; 基于实验1中某网站2016年9月每天的访问数据,使用基于内容的协同过滤算法实现网站的智能推荐&#xff0c;帮助客户发现他们感兴趣但很难发现的网页…

R语言与数据分析练习:使用Apriori算法实现网站的关联分析

R语言与数据分析练习&#xff1a;使用Apriori算法实现网站的关联分析 使用ARIMA模型预测网站访问量 一、实验背景&#xff1a; 基于某网站的访问数据&#xff0c;使用Apriori算法对网站进行关联分析 二、实验目的&#xff1a; 预测网站访问量 三、实验设计方案和流程图&am…

大型网站技术架构(四)网站的高性能架构

2019独角兽企业重金招聘Python工程师标准>>> 网站性能是客观的指标&#xff0c;可以具体体现到响应时间、吞吐量、并发数、性能计数器等技术指标。 1、性能测试指标 1.1 响应时间 指应用执行一个操作需要的时间&#xff0c;指从发出请求到最后收到响应数据所需要的时…

官网分析(英雄传奇)(如何设计网站前端)

官网分析&#xff08;英雄传奇&#xff09;&#xff08;如何设计网站前端&#xff09; 一、总结 一句话总结&#xff1a;最开始以仿为主&#xff0c;仿的多了&#xff0c;自己就会了。分块&#xff0c;留白&#xff0c;简洁&#xff0c;图片找好&#xff0c;字体找好&#xff0…

eyoucms 怎么使用网站地图?

网站无论大小&#xff0c;单独的网站地图页面都是必需的&#xff0c;通过网站地图&#xff0c;不仅用户可以对网站的所有内容一幕了然&#xff0c;搜索引擎也可以跟踪链接爬行到网站的主要部分。一般来说&#xff0c;网站地图有两种形式&#xff1a; 一种是HTML&#xff0c;称为…

大型网站背后的高性能系统架构设计

1. 性能测试1.1. 性能指标网站性能测试的主要指标有&#xff1a;响应时间 - 响应时间(RT)是指从客户端发一个请求开始计时&#xff0c;到客户端接收到从服务器端返回的响应结果结束所经历的时间&#xff0c;响应时间由请求发送时间、网络传输时间和服务器处理时间三部分组成。并…

细数国内几个比较牛的网站UED博客

发现国内一些有创新精神的网站的UED部门很活跃&#xff0c;也很有共享精神。他们有的在网站建立了自己的团队博客&#xff0c;在里面分享他们的设计经验&#xff0c;很值得一看。其实&#xff0c;团队开博客不仅仅有利于促进团队之间的良好氛围&#xff0c;更有利于宣传网站的文…

HTTPS通信中的身份认证机制_网站劫持检测

当你访问一个网站时&#xff0c;有没有想过这个问题&#xff1a;如何保证我的访问能直达目标网站&#xff0c;而没有被中间人攻击和劫持。想要解决这个问题&#xff0c;就得依靠HTTPS中的身份认证机制。 网站劫持检测 1、检测网站是否被劫持2、域名是否被墙3、DNS污染检测4、网…

5 个在线的网站测试和验证工具

网站上线前的测试和验证是非常重要的一个环节&#xff0c;验证的意思是检查网站的页面和其他数据是否符合标准规范&#xff0c;设计规范的网站在各种浏览器上表现会一致而且良好。 为了帮助你执行这些测试和验证&#xff0c;今天我们列表了 5 个在线的工具。 Pingdom Tools Pin…

mai模板html,纯PC网站模板改为自适应模板方法

随着互联网WEB前端技术的发展&#xff0c;各项技术诞生&#xff0c;BS架构、HTML5、CSS3、JQ各种新的技术出现在我们的面前&#xff0c;今天我们就分享下只有PC站情况下&#xff0c;如何快速做成自适应结构&#xff0c;满足移动端用户体验。网站自适应结构很多人认为很麻烦&…

svn同步到网站服务器,svn hook同步更新svn到web服务器

转到SVN项目的hooks目录下面新建post-commit文件.内容如下export LANGzh_CN.UTF-8WEB/www/vhostsvn update $WEB --username user --password passwd --no-auth-cache需要注意就是必须指定字符集还有运行 svn update 需要提供用户名密码且不要缓存用户认证令牌export LANGzh_CN…

学成在线网站首页_呕心整理!最全无版权图片网站都在这了,赶紧收藏!

在亚马逊上&#xff0c;买家大多数需要靠图片和文字来了解商品&#xff0c;而买家在搜索产品时&#xff0c;最先看到的是产品图片。可以说商品的主图是决定点击率的重要因素之一&#xff0c;而listing的图片是否具有吸引力是卖家能够为自己的Listing带来更高的转化率的另一个重…

用R语言进行网站评论文本挖掘聚类

对于非结构化的网站中文评论信息&#xff0c;r的中文词频包可能是用来挖掘其潜在信息的好工具&#xff0c;要分析文本内容&#xff0c;最常见的分析方法是提取文本中的词语&#xff0c;并统计频率。频率能反映词语在文本中的重要性&#xff0c;一般越重要的词语&#xff0c;在文…

oa办公系统含手机版源码_贵阳投资控股集团召开OA协同办公系统(含网站)建设项目启动大会...

为提高集团公司办公信息资源的利用效率&#xff0c;2020年1月7日&#xff0c;贵阳投资控股集团召开OA协同办公系统(含网站)建设项目启动大会。集团党委委员、副总经理付洪伟出席会议并讲话&#xff0c;信息科技部部长周康主持会议&#xff0c;上海泛微网络科技股份有限公司贵州…

scrapy爬虫框架和selenium的使用:对优惠券推荐网站数据LDA文本挖掘

介绍 最近我们被客户要求撰写关于爬虫的研究报告&#xff0c;包括一些图形和统计输出。 每个人都喜欢省钱。我们都试图充分利用我们的资金&#xff0c;有时候这是最简单的事情&#xff0c;可以造成最大的不同。长期以来&#xff0c;优惠券一直被带到超市拿到折扣&#xff0c;…

7个设计师必备的国际顶尖设计网站

成为dA&#xff08;deviantart&#xff09;的忠实用户有很多理由——dA是最大的艺术社区&#xff1b;成为dA用户简直是设计新手的必经之路。但是&#xff0c;这些都不妨碍你加入其他专业的网站来展现你的才华。 创立于12年前的dA现在拥有最多的艺术爱好者受众。然而&#xff0c…

追踪服务器的网站,网站Tracert路由追踪|在线Tracert工具—卡卡网 www.webkaka.com

Tracert是一个dos下的网络命令&#xff0c;主要作用是对路由进行跟踪。它是一个简单的网络诊断工具&#xff0c;可以列出分组经过的路由节点&#xff0c;以及它在IP 网络中每一跳的延迟。(这里的延迟是指&#xff1a;分组从信息源发送到目的地所需的时间&#xff0c;延迟也分为…

大型分布式网站架构技术总结

出处&#xff1a;ITFLY8 网址&#xff1a;http://www.cnblogs.com/itfly8/p/4967966.html 本文是学习大型分布式网站架构的技术总结。对架构一个高性能&#xff0c;高可用&#xff0c;可伸缩&#xff0c;可扩展的分布式网站进行了概要性描述&#xff0c;并给出一个架构参考。一…