大家好!
在本文中,我想谈一谈我如何选择存档器来压缩前台系统的日志。
我工作的部门负责开发和维护银行的统一前台系统。 我负责其维护,监视和DevOps。
我们的系统是一个高负载的应用程序,每天为5,000多个唯一用户提供服务。 如今,它已成为具有其优点和缺点的“整体”。 但是现在,将功能转移到微服务的过程正在积极进行。
每天,我们的系统都会生成130 GB以上的原始日志,尽管事实上我们使用ENG堆栈(Elasticsearch Nxlog Graylog),但文件日志包含更多信息(例如,堆栈跟踪错误),因此需要归档和存储。
由于存储位置有限,因此出现了一个问题:“以及哪个归档程序将最好地完成此任务。”
为了解决此问题,我编写了一个PowerShell脚本来为我执行分析。
该脚本的任务是调用具有不同压缩参数的rar,7z和zip存档器,以计算存档形成的速度以及所使用的磁盘空间。
准备工作:
我们会更详细地分析
$table|Sort-Object -Property "Size %","Result %"|Format-Table -AutoSize
$table|Sort-Object -Property "Result %","Size %","Time %"|Format-Table -AutoSize
结果:
就磁盘空间而言,最经济的是7z,压缩比为-mx = 8和-mx = 9

最快的归档文件创建时间为7z,压缩比为-mx = 1

最佳速度和占用空间为7z,压缩比为-mx = 3

我们选择压缩率为-mx = 8的7z,因为归档文件的大小为-mx 9,但是它的工作速度更快。
太好了,选择了存档器和压缩率,现在让我们存档日志!
我们需要解决以下问题:
- 避免在操作过程中增加服务器负载。
- 使用子文件夹日志处理所有文件夹。
- 删除超过30天的归档文件(以免磁盘空间用完)。
- 每天创建档案,具体取决于修改文件的时间。
在这里,我不会绘制脚本的每一行(在注释中进行描述),而是仅停留在Set-MMTCore函数上,该函数使我们能够计算7z的线程数,以便不将处理器加载到服务器上:
Function Set-MMTCore {
不使用Set-MMTCore函数
可以看出,CPU处于100%静止状态。 这意味着我们将不可避免地在服务器上引起问题,并从监视系统收到警报。

使用Set-MMTCore函数时
可以看出,CPU为30-35%。 这意味着使用Set-MMTCore函数可以在不影响服务器操作的情况下存档文件。

备份脚本的结果:
归档前的文件夹:

归档后的文件夹:

在归档过程中创建的文件:

档案中的文件:

