【精选翻译】诚然,一些Linux服务器管理员享受阅读和检查日志文件的艰苦过程,但为什么不创建一个漂亮的列表和图形系统来突出显示那些失败和问题,而不是痛苦?试试这个出色的工具-CairoPlot,它将为您提供服务器日志文件分析的美观且信息丰富的可视化。作为一名整天与数据打交道的从业者,我一直在寻找更好的方法来将复杂数据显示为列表和图形,尤其是使用Python。有很多用Python做的集成包可用,但是如果你想输出的结果不会因为视觉效果粗糙而被那些苹果用户嘲笑,那么我强烈推荐CairoPlot给你。CairoPlot不像大多数分发软件那样打包,但它的安装过程仍然简单易行。CairoPlotLaunchpad页面(CairoPlot官方主页)上当前可用的最新版本是1.1版。可以在那里下载cairoplot-1.1.tar.gz文件,也可以根据自己的喜好在BZR上搜索(1.2版本发布后,CairoPlot项目可能会整体转移到Sourceforge.net)。解压压缩包:$tarxvfcairoplot-1.1.tar.gz然后复制以下文件:cairoplot-1.1/CairoPlot.py,粘贴到你要开发的Python脚本所在目录。用饼图来说明:谁在发送垃圾邮件?在开始映射工作之前,找到一个好的数据源始终是我们的首要任务。对于这个项目,让我们首先分析一个Postfix日志文件/var/log/mail.info,以观察一系列垃圾邮件的许多来源。随机检查文件显示,许多接收电子邮件的请求来自客观上不存在的地址,例如:Mar515:05:45mailserverpostfix/smtpd[29764]:NOQUEUE:reject:RCPTfrom212.199.94.45.static.012.net.il[212.199.94.45]:4504.7.1:Helo命令被拒绝:找不到主机;从=<>到=proto=ESMTPhelo=我们的posifix服务器通常会拒绝此类电子邮件,因为它们通常是垃圾邮件。正确配置的邮件服务器不应该能够伪造这些虚假地址——当然这可能发生在一些配置错误的服务器上。但是这些虚假的传入请求是从哪里来的呢?他们来自特定国家吗?在这些特定国家/地区,有多少.com类网站和多少.net类网站是垃圾邮件的来源?为了找出答案,我将创建一个Python索引系统,然后使用CairoPlot工具绘制饼图。索引中的每个关键词都会覆盖一个***域,比如“.com”;它的值将是来自该类型域的被拒绝电子邮件的数量。分析日志文件以填充索引系统中的条目项意味着我们需要分析/var/log/mail.info文件。每封邮件的实际发送地址可以在RCPT中查询;结果应用于Python的re模块。因为这个过程是针对CairoPlot的,所以我们不必按照Python的描述,直接用下面代码的形式表达即可:#!/usr/bin/envpythonimportCairoPlot,reMAIL_INFO="/var/log/mail.info"#Dictionarytostoretheresultsas(domain:numberofrejects)rejected={}#Parsemail.info以查找所有'NOQUEUE:reject'行并#找出它们是什么顶级域(TLD)来自.f=open(MAIL_INFO)forlineinf:ifline.find('status=sent')>0:passelifline.find('NOQUEUE:reject')>0:#我们拒绝的尝试。从foo.example.com[nnn.nnn.nnn.nnn]rcpt=re.search("RCPTfrom([^[]*)\[([0-9\.]+)\]",line)ifnotrcpt:continue#现在rcpt.group(1)是来自日志文件的反向DNS主机名(如果有的话)#,rcpt.group(2)是IP地址。如果rcpt.group(1)andrcpt.group(1)!='unknown':hostname=rcpt.group(1)else:hostname=None#找到最后一个"."tld="Unknown"#默认没有".“在主机名中ifhostname:dot=hostname.rfind(".")ifdot>=0:tld=hostname[dot+1:]iftldinrejected:#我们以前见过这个TLD;add1.rejected[tld]+=1else:#Firsttimewe'veseenthisTLD.rejected[tld]=1f.close()在结束部分,索引系统中的“拒绝”标准通过以下方式传达给CairoPlot{'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}#p#如何基于Indexing系统创建扇形图来创建饼图?事实上,一条命令就可以做到:CairoPlot.pie_plot("piechart",rejected,500,500,None,True,False,None)CairoPlot将生成一个名为pie.svg的图形文件(如图1所示)。图1的参数为:pie_plot(name,data,width,height,background=None,gradient=False,shadow=False,colors=None)name(名称)指的是文件名:如果要添加文件例如.jpg扩展名,那么CairoPlot将使用您设置的格式而不是svg格式,因为在某些情况下您可能需要一个IE用户可以正常浏览页面的图像。当然,数据代表索引系统中的一个值。Width(宽度)和Height(高度)代表你希望图形绘制的尺寸。需要注意的是,CairoPlot为扇形图预留的空白空间相当有限,一定要注意统筹。Background(背景),需要指定一种背景颜色,颜色选择方法是标准的RGB形式。因此,使用命令background=(0,1,0),您将获得全绿色背景。这里也可以使用开罗渐变来设置。Gradient(色阶)功能允许您选择是否在您的扇形图中的某个块上显示颜色渐变效果,从而使整个图形更加美观。阴影功能可以让你给整个饼图添加底部阴影效果,如果你不喜欢系统默认的阴影颜色,你也可以随意为其定义新的颜色。当然,阴影颜色也可以是单一颜色或包含色阶。需要强调的是,所选颜色的数量必须与索引系统中的项目数量相同。图1的例子有一个小问题:它表明绝大多数无效传入请求来自根本无法解析的服务器地址,表示情况的图被压缩成这么小的一块,无法解释.显然,您不能从那个“无法解析”的大服务器源中提取任何有用的信息。在这种情况下,你可以在命令ifhostname:dot=hostname.rfind(".")ifdot>=0:ext=hostname[dot+1:]else:continuetorunAfter上面的命令,扇形图将变成图2所示的样子。非常有趣。直到写这个例子,我才意识到与其他国家相比,我从以色列和巴西收到了如此多的垃圾邮件。有时一张清晰的图表绝对抵得上一千字。图2#p#条形图CairoPlot也可以制作出色的条形图。但遗憾的是,CairoPlot的各种规则并不是很适合柱状图数据的导入。条形图需要列表,而不是索引。这没什么好担心的!只需将上述索引系统转换成两个列表——一个包含标签信息,一个包含特定数据——然后绘制条形图(如图3所示):h_labels=[kforkinrejected.keys()]rejlist=[rejected[k]forkinrejected.keys()]CairoPlot.bar_plot('bars',rejlist,500,400,border=5,three_dimension=True,h_labels=h_labels)图3和做饼图一样,可以导入颜色列表使用自定义颜色,还有背景、样式、圆角、沙盘模型高度、象限体积,以及必要的标签体积和标签高度等调整选项。当然,CairoPlot也可以生成其他类型的图形。这里有一些示例文档,你也可以使用Python的交互式解析工具,输入以下内容:importCairoPlothelp(CairoPlot.pie_plot)CairoPlot站点可能会迁移到Sourceforge网站,并提供更完整的访问页面。同时,如果您已经有了一些实践经验,您一定会意识到CairoPlot绝对是制作精美多彩图形的最佳工具之一。原文地址:http://www.linuxplanet.com/linuxplanet/tutorials/7317/1/[.com翻译,转载请注明原文译者及出处。】【编辑推荐】使用ClusterSSH管理多台Linux服务器Linuxkernel2.6.38性能大幅提升THP有利于虚拟化通过dsh批量管理Linux服务器