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

本文涉及的产品
日志服务 SLS,月写入数据量 50GB 1个月
简介:

  确实有些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 ([^[]*)([09\.]+)
    ", 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.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

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

3.jpg



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

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

  1. import CairoPlot
  2. help(CairoPlot.pie_plot)
复制代码


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

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

本文来自云栖社区合作伙伴“Linux中国”

相关实践学习
日志服务之使用Nginx模式采集日志
本文介绍如何通过日志服务控制台创建Nginx模式的Logtail配置快速采集Nginx日志并进行多维度分析。
目录
打赏
0
0
0
0
325
分享
相关文章
|
29天前
|
Websoft9:为开发者打造的高效 Linux 服务器面板
Websoft9 是一款以开源应用部署与管理为核心的服务器面板,采用“环境即服务”模式。它通过运行环境标准化、自动化配置、安全融合和资源管理四个方面实现平台与环境的深度协同。支持多语言框架预集成、云原生组件整合,提供 200+ 应用模板一键部署,并具备全流程安全防护和统一资源监控能力,助力开发者高效管理和扩展应用环境。
50 0
|
8天前
|
使用Python实现multipart/form-data文件接收的http服务器
至此,使用Python实现一个可以接收 'multipart/form-data' 文件的HTTP服务器的步骤就讲解完毕了。希望通过我的讲解,你可以更好地理解其中的逻辑,另外,你也可以尝试在实际项目中运用这方面的知识。
100 69
【Azure App Service】分享使用Python Code获取App Service的服务器日志记录管理配置信息
本文介绍了如何通过Python代码获取App Service中“Web服务器日志记录”的配置状态。借助`azure-mgmt-web` SDK,可通过初始化`WebSiteManagementClient`对象、调用`get_configuration`方法来查看`http_logging_enabled`的值,从而判断日志记录是否启用及存储方式(关闭、存储或文件系统)。示例代码详细展示了实现步骤,并附有执行结果与官方文档参考链接,帮助开发者快速定位和解决问题。
51 22
在Linux服务器中遇到的立即重启后的绑定错误:地址已被使用问题解决
总的来说,解决"地址已被使用"的问题需要理解Linux的网络资源管理机制,选择合适的套接字选项,以及合适的时间点进行服务重启。以上就是对“立即重启后的绑定错误:地址已被使用问题”的全面解答。希望可以帮你解决问题。
48 20
|
16天前
|
Linux系统管理:服务器时间与网络时间同步技巧。
以上就是在Linux服务器上设置时间同步的方式。然而,要正确运用这些知识,需要理解其背后的工作原理:服务器根据网络中的其他机器的时间进行校对,逐步地精确自己的系统时间,就像一只犹豫不决的啮齿动物,通过观察其他啮齿动物的行为,逐渐确定自己的行为逻辑,既简单,又有趣。最后希望这个过程既能给你带来乐趣,也能提高你作为系统管理员的专业素养。
68 20
Linux云服务器如何搭建LNMP环境
LNMP环境是Linux系统中常用的Web服务架构,由Linux、Nginx、MySQL/MariaDB和PHP组成,适用于高效托管动态网站。本文以CentOS 7为例,详细介绍了LNMP环境的搭建步骤,包括Nginx、MariaDB和PHP的安装与配置,以及最终通过创建`index.php`文件验证环境是否成功部署。具体操作涵盖配置YUM仓库、安装服务、编辑配置文件、启动服务等关键步骤,确保用户能够顺利搭建并运行LNMP环境。
59 1
Linux云服务器如何搭建LNMP环境
Java||Springboot读取本地目录的文件和文件结构,读取服务器文档目录数据供前端渲染的API实现
博客不应该只有代码和解决方案,重点应该在于给出解决方案的同时分享思维模式,只有思维才能可持续地解决问题,只有思维才是真正值得学习和分享的核心要素。如果这篇博客能给您带来一点帮助,麻烦您点个赞支持一下,还可以收藏起来以备不时之需,有疑问和错误欢迎在评论区指出~
Java||Springboot读取本地目录的文件和文件结构,读取服务器文档目录数据供前端渲染的API实现
深度体验阿里云系统控制台:SysOM 让 Linux 服务器监控变得如此简单
作为一名经历过无数个凌晨三点被服务器报警电话惊醒的运维工程师,我对监控工具有着近乎苛刻的要求。记得去年那次大型活动,我们的主站流量暴增,服务器内存莫名其妙地飙升到90%以上,却找不到原因。如果当时有一款像阿里云 SysOM 这样直观的监控工具,也许我就不用熬通宵排查问题了。今天,我想分享一下我使用 SysOM 的亲身体验,特别是它那令人印象深刻的内存诊断功能。
Linux服务器部署docker windows
在当今软件开发中,Docker成为流行的虚拟化技术,支持在Linux服务器上运行Windows容器。流程包括:1) 安装Docker;2) 配置支持Windows容器;3) 获取Windows镜像;4) 运行Windows容器;5) 验证容器状态。通过这些步骤,你可以在Linux环境中顺利部署和管理Windows应用,提高开发和运维效率。
122 1
docker运维查看指定应用log文件位置和名称
通过本文的方法,您可以更高效地管理和查看Docker容器中的日志文件,确保应用运行状态可控和可监测。
198 28