CairoPlot 让 Linux 服务器的日志文件更直观

  确实有些Linux服务器管理员很享受阅读及核对日志文件的艰辛过程,但为什么不创建一个美观的列表及图形体系来突出那些故障和问题,而非要受这份罪呢?试试这款优秀的工具——CairoPlot吧,它会提供给你美观且信息可视化的服务器日志文件分析途径。

作为一个需要整天跟数据打交道的从业者,我一直致力于寻找更好的方法来将纷繁复杂的数据显示为列表和图形,尤其是利用Python来实现这一目标。时下存在很多利用Python制作的整合软件包可供使用,但如果你希望输出的结果不会因为粗糙的视觉效果而遭到那些苹果使用者们的耻笑,那么我向你强力推荐CairoPlot。

CairoPlot并未像大多数发行版软件那样进行封包,但它的安装过程依然简便易行。目前在CairoPlot Launchpad page(CairoPlot官方主页)上提供的最新版本是1.1版。你可以在那里下载到cairoplot-1.1.tar.gz这个文件,或是根据你自己的喜好,从BZR上搜索(一旦1.2版本发布,CairoPlot项目可能会整体转移到Sourceforge.net上)。

解压压缩包:

  1. $ tar xvf cairoplot-1.1.tar.gz

复制代码

然后复制下面这个文件:cairoplot-1.1/CairoPlot.py,并粘贴到你要开发的Python脚本所在的目录下。

  用扇形图说明:谁在发送垃圾邮件?

展开测绘工作之前,找到一个良好的数据源永远是我们的首要任务。针对这个项目,让我们先来分析一个Postfix日志文件,/var/log/mail.info,借以观察一系列垃圾邮件的众多来源。

通过对文件的随机检查,我们会发现有许多提出接收请求的邮件都来自一个客观上根本不存在的地址,举例说明:

Mar 5 15:05:45 mailserver postfix/smtpd[29764]: NOQUEUE: reject: RCPT from 212.199.94.45.static。012.net.il[212.199.94.45]: 450 4.7.1 : Helo command rejected: Host not found; from=<> to=<aiglance@mydomain.com> proto=ESMTP helo=

我们的posifix服务器一般会拒绝这样的邮件,因为通常情况下它们都是垃圾邮件。配置正确的邮件服务器应该不会编造这些虚假的地址——当然在有些配置有误的服务器上是会发生这种状况。

但是这些虚假的接收请求从何而来?他们是否来自特定的一些国家?而在这些特定国家的垃圾邮件来源中,存在多少.com类型网站,又有多少.net类型网站?

为了找到答案,我将创建一个Python索引系统,然后使用CairoPlot工具来测绘出一幅扇形图。索引中的每个关键字都将涵盖一个顶级域,例如“.com”;而其数值则为从该类型域中发来的被拒收邮件的数量。

  剖析日志文件

要填充索引系统中的词条项目,意味着我们需要对/var/log/mail.info文件进行剖析。每封邮件的真正发出地址能够从RCPT中查询到;将结果应用到Python的re模块中。因为这一过程是针对CairoPlot的,因此我们不必遵循Python的描述方式,只需按照以下代码的形式表达:

  1. #! /usr/bin/env python
  2. import CairoPlot, re
  3. MAIL_INFO = "/var/log/mail.info"
  4. # Dictionary to store the results as (domain : number of rejects)
  5. rejected = {}
  6. # Parse mail.info to find all the 'NOQUEUE: reject' lines and
  7. # figure out what top-level domains (TLDs) they're coming from.
  8. f = open(MAIL_INFO)
  9. for line in f :
  10. if line.find('status=sent') > 0 :
  11. pass
  12. elif line.find('NOQUEUE: reject') > 0 :
  13. # An attempt we rejected. Look for a pattern like
  14. # RCPT from foo.example.com[nnn.nnn.nnn.nnn]
  15. rcpt = re.search("RCPT from ([^[]*)\[([0-9\.]+)\]", line)
  16. if not rcpt :
  17. continue
  18. # Now rcpt.group(1) is the reverse-DNS hostname (if any)
  19. # from the log file, rcpt.group(2) is the IP address.
  20. if rcpt.group(1) and rcpt.group(1) != 'unknown' :
  21. hostname = rcpt.group(1)
  22. else :
  23. hostname = None
  24. # Find the part after the last "."
  25. tld = "Unknown" # default there's no "." in the hostname
  26. if hostname :
  27. dot = hostname.rfind(".")
  28. if dot >= 0 :
  29. tld = hostname[dot+1:]
  30. if tld in rejected :
  31. # We've seen this TLD before; add 1.
  32. rejected[tld] += 1
  33. else :
  34. # First time we've seen this TLD.
  35. rejected[tld] = 1
  36. f.close()

复制代码

在结尾部分,通过以下内容将索引系统中的“拒收”标准传达给CairoPlot。

  1. {'ru': 3, 'ch': 1, 'ma': 2, 'rs': 2, 'it': 4, 'hu': 1, 'cz': 1, 'ar': 2, 'il': 35, 'br': 16, 'es': 1, 'co': 2, 'net': 4, 'com': 24, 'pl': 7, 'at': 2}

复制代码

创建扇形图

你要如何依据索引系统来创建一个扇形图?事实上一行命令即可实现:

  1. CairoPlot.pie_plot("piechart", rejected, 500, 500, None, True, False,
  2. None)

复制代码

CairoPlot将生成一个名为pie.svg的图形文件(如图一所示)。

1.jpg

  1. pie_plot(name,
  2.          data,
  3.          width, height,
  4.          background=None,
  5.          gradient=False, shadow=False,
  6.          colors=None)

复制代码

Name(名称)指文件名:如果你希望加入一个诸如.jpg之类的扩展名,那么CairoPlot将使用你所设定的格式来取代svg格式,因为在某些情况下你可能会需要一个IE用户能够通过页面正常浏览的图像。

Data(数据),当然了,代表索引系统中的数值。

Width(宽度)和Height(高度)代表你所希望的图形绘制尺寸。需要注意的是,CairoPlot预留给扇形图周边的空白区域是相当有限的,所以一定要注意整体规划。

Background(背景),你需要指定一种背景颜色,其选色方法为标准的RGB形式。因此,通过background=(0,1,0)这一指令,你将获得一个全绿的背景。你在这里也可以使用Cairo gradient(色阶)来进行设定.gradient(色阶)功能可以让你选择是否将你扇形图中的某一块显示出色彩渐变的效果,以使整个图形更加美观.shadow(阴影)功能将让你可以为整个扇形图增加底部阴影效果,并且如果你不喜欢系统默认的阴影颜色,也可以随意为其定义新的颜色。当然,阴影颜色同样即可以是单色也可以包含色阶。需要强调的是,所选颜色的数量必须与索引系统中的项目数量相同。

图一中的示例存在一个小问题:它显示绝大多数无效的接收请求来自根本无法解析的服务器地址,而表示状况的图形被压成极细小的一块,根本无法解读。而且显然你从那一大块“无法解析“的服务器来源中根本折腾不出什么有用的信息。在这种情况下,你可以在指令中if hostname:后面添加如下内容

  1. if hostname :
  2. dot = hostname.rfind(".")
  3. if dot >= 0 :
  4. ext = hostname[dot+1:]
  5. else :
  6. continue

复制代码

运行上述命令,这时扇形图变为如图二所示。很有意思吧。直到编写这个实例,我才意识到相比起其它国家,我从以色列和巴西收到了这么多的垃圾邮件。有时候一幅清晰的示意图绝对胜过千言万语。

2.jpg

条形图

CairoPlot也可以制作出很棒的条形图。但遗憾的是,CairoPlot的各种规则不太适合条形图数据的导入。条形图需要的是列表,而非索引。

这都不叫事儿!只要把上文中的索引系统转换为两个列表——一个包含标签信息,一个包含具体数据——再进行条形图绘制(如图三所示):

  1. h_labels = [ k for k in rejected.keys() ]
  2. rejlist = [ rejected[k] for k in rejected.keys() ]
  3. CairoPlot.bar_plot ('bars', rejlist, 500, 400,
  4. border=5, three_dimension=True,
  5. h_labels=h_labels)

复制代码

 

3.jpg

同制作扇形图一样,你可以导入一个颜色列表来使用自定义颜色,而且还有其它一些诸如背景、风格、圆滑边角、沙盘模型高度、象限体积以及必然具备的标签体积和标签高度等调节选项。

当然,CairoPlot同样可以制作其它类型的图形。这有一些实例文档,你也可以使用Python的交互式解析工具并输入如下内容:

  1. import CairoPlot
  2. help(CairoPlot.pie_plot)

复制代码

CairoPlot站点将很可能迁移至Sourceforge网站,并提供更加完备的访问页面。与此同时,如果你已经有过一些实践经验,你一定会深切体会到CairoPlot在制作美观艳丽的图形方面绝对称得上是顶尖工具之一。

原文发布时间为:2011-03-23

时间: 2024-11-03 14:10:21

CairoPlot 让 Linux 服务器的日志文件更直观的相关文章

《构建高可用Linux服务器 第3版》—— 1.4 Linux服务器的日志管理

1.4 Linux服务器的日志管理 从安全的角度来说,Linux服务器的日志非常重要,它记录了系统每天所发生的各种各样的事情,如果服务器受到攻击,就可以根据它来进行分析.同时,它更是很重要的排障依据,可以通过它来检查错误发生的原因,所以我们必须了解和熟悉其运作机制. 1.4.1 系统日志syslog.conf的配置详解 目前,Linux依旧使用syslog作为日志监控进程,对其进行必要的配置能减少很多麻烦,并且可更有效地从系统日志监控到系统的状态.理解并完善一个syslog的配置,对于系统管理员

解决-从linux服务器中读取文件数据

问题描述 从linux服务器中读取文件数据 现有一个需求: 在一台服务器上写日志文件,每当日志文件写到一定大小时,比如是1G,会将这个日志文件改名成另一个名字,并新建一个与原文件名相同的日志文件,再往这个新建的日志文件里写数据:要求写一个程序能实时地读取日志文件中的内容,并且不能写日志操作.重命名操作.不能修改日志文件的任何数据,保持日志文件的完整性. 首先,这个问题在windows下几乎无解,因为一个程序打开了一个文件,再要对文件重命名是不可能的:而在Linux下,可以得到完美解决.因为Lin

java如何修改linux服务器下txt文件,

问题描述 java如何修改linux服务器下txt文件, 在linux服务器下面,有个txt文件,里面有三条数据,如何修改指定的那一条数据,那如何定位到指定的数据?比如我想修改2 55 66 77这条数据怎么定位到这条数据?txt文件内容格式如下:1 22 33 442 55 66 773 88 99 781 yy uu pp2 jj kk hh1 rr tt ww2 ww qq ee3 qq ff gg 解决方案 http://blog.csdn.net/jiangxinyu/article/

如何让你的Web服务器日志文件更安全

什么是IIS IIS即因特网信息服务,作为当今流行的Web服务器之一,它提供了强大的Internet和Intranet服务功能.因此,现在采用IIS作为Web服务器软件的单位还是很多的.默认情况下,这些服务器必须允许公众访问其资源.但我们发现,许多单位在防御攻击上的时间花费甚至远远多于维护和提供Web服务的时间. IIS安全 不过,这里的攻击静悄悄.除非你单位的Web站点成为毁灭性攻击的受害者,或者受到某种恶意代码的注入,一般来说,黑客会以一种不易觉察的方式攻入你的服务器,这是由于服务器可能收到

从linux服务器中读取文件数据

问题描述 现有一个需求:在一台服务器上写日志文件,每当日志文件写到一定大小时,比如是1G,会将这个日志文件改名成另一个名字,并新建一个与原文件名相同的日志文件,再往这个新建的日志文件里写数据:要求写一个程序能实时地读取日志文件中的内容,并且不能写日志操作.重命名操作.不能修改日志文件的任何数据,保持日志文件的完整性.首先,这个问题在windows下几乎无解,因为一个程序打开了一个文件,再要对文件重命名是不可能的:而在Linux下,可以得到完美解决.因为Linux的文件系统有别于windows,L

linux系统apache日志文件配置详解

Linux系统下apache日志文件设置(每天单独生成一个日志文件) 引言: Apache默认安装下,日志记录只有一个文件,时间久了之后,这个文件会变的很大,管理员要想查看分析日志,光打开日志就要花费很长时间,甚至还会影响服务器运行. 下面教大家设置apache,让服务器每天单独生成一个日志文件,这样管理.分析日志会方便很多. vi /etc/httpd/conf/httpd.conf #编辑文件 #ErrorLog logs/error_log #注释此行,添加下面这行  ErrorLog "

使用scp获取远程linux服务器上的文件 linux远程拷贝文件_linux shell

一.scp是什么? scp是secure copy的简写,用于在Linux下进行远程拷贝文件的命令,和它类似的命令有cp,不过cp只是在本机进行拷贝不能跨服务器,而且scp传输是加密的.可能会稍微影响一下速度. 二.scp有什么用? 1.我们需要获得远程服务器上的某个文件,远程服务器既没有配置ftp服务器,没有开启web服务器,也没有做共享,无法通过常规途径获得文件时,只需要通过scp命令便可轻松的达到目的. 2.我们需要将本机上的文件上传到远程服务器上,远程服务器没有开启ftp服务器或共享,无

windows服务器mysql日志文件清理简单方法

mysql-bin.0000x是什么文件 mysql-bin.000001.mysql-bin.000002等文件是数据库的操作日志,例如UPDATE一个表,或者DELETE一些数据,即使该语句没有匹配的数据,这个命令也会存储到日志文件中,还包括每个语句执行的时间,也会记录进去的. 使用是什么 mysql-bin.00000x日志文件就是一个非常简单的用来记录我们mysql日志文件了,我们可以利用它来保证mysql数据完整性,如果数据库出问题了,而你之前有过备份,那么可以看日志文件,找出是哪个命

python 从远程服务器下载日志文件的程序_python

复制代码 代码如下: import osimport sysimport ftplibimport socket ################################################################### sign in the ftp server and download the log file. # 登陆生产服务器下载日志##############################################################