配置文件本身非常脆弱!所以修改配置文件自然会引入部署失败的风险。如果能够对配置文件进行自动化测试将会极大的降低这种风险。本文将介绍一个可以自动化测试 logstash 配置文件的工具,让大家可以像写单元测试用例一样为 logstash 配置文件创建测试 case,并以快速迭代的方式变更 logstash 配置文件。
噩梦在很多真实环境中,变更 logstash 的配置文件几乎是个噩梦。日志不是结构化的格式(甚至是乱七八糟!),导致我们几乎必须一个一个地处理日志,并对解析什么和不解析什么做出逻辑判定。这会导致我们在 logstash 的配置文件中写出复杂的日志处理逻辑。更加悲催的是,我们编写的仅仅是一个配置文件,大多数时候你找不到像 VisualStudio 那样豪华的带有拼写检查和语法检查的编辑工具。所以我们迫切的需要一个可以对 logstash 的配置文件做单元测试的工具,让我们更好的控制变更、执行迭代。
logstash-test-runnerlogstash-test-runner 就是这样一个可以让我们应用 DevOps 原则来解决这个问题的工具。它具有下面几个特点:
它是一个测试框架
非常容易写测试用例
不用学习一个新的 DSL(Domain-Specific-Language)
能够快速的获得反馈
logstash-test-runner 的作者应该是饱受 logstash 的配置文件蹂躏之后创建的这个工具,所以这是一个写给自己用的工具,在使用的时候你能够切身体会到它的便利!
前提条件运行 logstash-test-runner 依赖于下面三个条件:
Docker
NodeJS > v8
Bash > v4
其中 logstash 的测试用例是在 docker 容器中运行的,默认使用的镜像中 logstash 的版本为 5.5.1,我们可以通过第二个命令行参数指定其它的版本。
NodeJS 程序用来对比实际运行的输出结果与期望的输出结果。
logstash-test-runner 其实就是一个 Bash 脚本,把上面的工具组织起来完成任务。
在运行 logstash-test-runner 前请确保你的环境满足上述条件。然后从这里克隆 logstash-test-runner。如果你确定你要运行的 logstash 的版本,最好是提前先把对应的容器镜像拉下来,比如笔者最常用的是 logstash 6.2.4:
$ docker pull docker.elastic.co/logstash/logstash:6.2.4