- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我正在为 grok 过滤器创建一个测试套件。
一些日志通过 logstash 而非 rspec 测试正确丰富。为了对此进行测试,我启动了一个带有 stdin/stdout 和 json 的 logstash 实例用于输入和输出。这是示例日志(nginx 访问):
10.7.0.78 - - [14/Jan/2016:16:39:36 +0000] "GET /v1/swagger.json HTTP/1.1" 200 3720 "-" "python-requests/2.8.1"
Logstash 配置:
input {
stdin { codec => "json"
}
}
output {
stdout {
codec => "json"
}
}
filter {
if [file] =~ "nginx" {
grok {
match => {
"message" => [
# Access log
"%{TRAX_HTTP_LOG}"
]
}
patterns_dir => ["/files/trax_patterns"]
break_on_match => true
add_tag => ["nginx"]
tag_on_failure => ["nginx", "_trax_fail_parsing"]
}
} else {
grok {
match => {
message => ["%{GREEDYDATA}"]
}
add_tag => ["logfile_unknown", "_trax_fail_parsing"]
}
}
}
神交模式:
TRAX_HTTP_LOG (%{IPORHOST:clientip} )?%{USER:ident} %{USER:auth} \[%{HTTPDATE:timestamp}\] "(?:%{WORD:verb} %{NOTSPACE:request}(?: HTTP/%{NUMBER:httpversion})?|%{DATA:rawrequest})" %{NUMBER:response} (?:%{NUMBER:bytes}|-) %{QS:referrer} %{QS:agent}
logstash 的输入(格式化):
{
"message": "10.7.0.78 - - [14\/Jan\/2016:16:39:36 +0000] \"GET \/v1\/swagger.json HTTP\/1.1\" 200 3720 \"-\" \"python-requests\/2.8.1\"",
"file": "nginx.access.log"
}
Logstash 的输出(格式化):
{
"message": "10.7.0.78 - - [14\/Jan\/2016:16:39:36 +0000] \"GET \/v1\/swagger.json HTTP\/1.1\" 200 3720 \"-\" \"python-requests\/2.8.1\"",
"file": "nginx.access.log",
"@version": "1",
"@timestamp": "2016-02-11T08:59:31.835Z",
"host": "5fcb39cab546",
"clientip": "10.7.0.78",
"ident": "-",
"auth": "-",
"timestamp": "14\/Jan\/2016:16:39:36 +0000",
"verb": "GET",
"request": "\/v1\/swagger.json",
"httpversion": "1.1",
"response": "200",
"bytes": "3720",
"referrer": "\"-\"",
"agent": "\"python-requests\/2.8.1\"",
"tags": [
"nginx"
]
}
所有字段和标签都已正确设置。
这是我的 rspec 脚本:
require 'spec_helper'
require 'logstash/filters/grok'
if RUBY_VERSION =~ /1.9/
Encoding.default_external = Encoding::UTF_8
Encoding.default_internal = Encoding::UTF_8
end
file = File.open("/tmp/logstash-process.conf", "rb")
contents = file.read
describe LogStash::Filters::Grok do
describe "Nginx files" do
config contents
# Access log
message = '10.7.0.78 - - [14/Jan/2016:16:39:36 +0000] "GET /v1/swagger.json HTTP/1.1" 200 3720 "-" "python-requests/2.8.1"'
sample("message" => message, "file" => "nginx.access.log") do
puts subject.to_json
puts subject['message']
insist { subject['tags'] }.include?("nginx")
reject { subject['tags'] }.include?("_trax_fail_parsing")
insist { subject['clientip'] } == "10.7.0.78"
end
end
end
file.close
哪些输出:
./bin/rspec /tests/test.rb ; date
Using Accessor#strict_set for specs
Run options: exclude {:redis=>true, :socket=>true, :performance=>true, :couchdb=>true, :elasticsearch=>true, :elasticsearch_secure=>true, :export_cypher=>true, :integration=>true, :windows=>true}
..{"message":"10.7.0.78 - - [14/Jan/2016:16:39:36 +0000] \"GET /v1/swagger.json HTTP/1.1\" 200 3720 \"-\" \"python-requests/2.8.1\"","file":"nginx.access.log","@version":"1","@timestamp":"2016-02-11T09:10:07.507Z","tags":["nginx"]}
10.7.0.78 - - [14/Jan/2016:16:39:36 +0000] "GET /v1/swagger.json HTTP/1.1" 200 3720 "-" "python-requests/2.8.1"
F
Failures:
1) LogStash::Filters::Grok Nginx files "{"message":"10.7.0.78 - - [14/Jan/2016:16:39:36 +00..." when processed
Failure/Error: insist { subject['clientip'] } == "10.7.0.78"
Insist::Failure:
Expected "10.7.0.78", but got nil
# ./vendor/bundle/jruby/1.9/gems/insist-1.0.0/lib/insist/assert.rb:8:in `assert'
# ./vendor/bundle/jruby/1.9/gems/insist-1.0.0/lib/insist/comparators.rb:14:in `=='
# /tests/test.rb:24:in `(root)'
# ./vendor/bundle/jruby/1.9/gems/rspec-wait-0.0.8/lib/rspec/wait.rb:46:in `(root)'
# ./lib/bootstrap/rspec.rb:11:in `(root)'
Finished in 1.21 seconds (files took 0.915 seconds to load)
3 examples, 1 failure
Failed examples:
rspec /tests/test.rb:18 # LogStash::Filters::Grok Nginx files "{"message":"10.7.0.78 - - [14/Jan/2016:16:39:36 +00..." when processed
Randomized with seed 33767
如您所见,我打印了 Logstash::Event 对象,但缺少字段,测试失败。
关于此行为的任何线索?
谢谢!
最佳答案
在第一行添加#encoding: utf-8
,为我解决了这个问题
关于rspec - 使用 rspec 的 Logstash grok 测试有不同的行为吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35335445/
我有一个 GROK 模式,我正尝试在 Logstash 中使用它,它在 GROK 调试器中工作 website但不在日志存储中。我尝试了不同的配置但没有成功。我希望有人可以帮助我确定为什么这不起作用。
以下是事件消息的示例: { "timestamp":"2016-03-29T22:35:44.770750-0400", "flow_id":45385792, "in_iface":"eth1",
我有一个像这样的日志字符串: 2018-08-02 12:02:25.904 [http-nio-8080-exec-1] WARN o.s.w.s.m.s.DefaultHandlerExcept
以下是事件消息的示例: { "timestamp":"2016-03-29T22:35:44.770750-0400", "flow_id":45385792, "in_iface":"eth1",
我有一个像这样的日志字符串: 2018-08-02 12:02:25.904 [http-nio-8080-exec-1] WARN o.s.w.s.m.s.DefaultHandlerExcept
我的问题是关于如何使用 Grok 模式。 我知道给定的现有 Grok 模式,我可以使用以下语法将值分配给字段: %{DATESTAMP_RFC822:timestamp} 我也知道我可以创建自己的自定
我正在尝试为 Java 应用程序设置 ELK。 tomcat 日志是使用 log4j 生成的。要编写测试模式,我使用 Grok Debugger .但是在调试器上它总是显示 Compile ERROR
我正在尝试使用某种 grok 模式来使用以下日志记录格式: *Sun 07:05:18.372 INFO [main] [userID] perf - 0ms - select x from y 我
我正在尝试学习如何第一次使用 logstash 的 grok 过滤器捕获日志文件中的不同字段,但无法正确解析它。我正在使用 https://grokdebug.herokuapp.com/来测试我的工
这是我的 grok 模式 2017-09-25 08:58:17,861 p=14774 u=ec2-user | 14774 1506329897.86160:检查 any_errors_fatal
我有一个 200 MB 的日志文件。我将日志文件输入logstash,需要几个小时才能完成工作。 我想知道是否有办法加快速度?也许以并行模式运行它? 最佳答案 您可以看看here关于如何加快速度。 T
在 Logstash 2.3.3 中,grok 过滤器不适用于最后一个字段。 要重现该问题,请创建 test.conf,如下所示: input { file { path => "/Use
我是 logstash 和 grok 的新手,对模式有疑问。我正在尝试为我的 apache 错误日志创建一个 grok 模式。但是我对以下行为有点困惑。 如果我在 http://grokdebug.h
以下是我的日志 # Time: 2017-11-02T07:41:22.631956Z# User@Host: root[root] @ localhost [] Id: 我无法为单词 ro
2012 年 9 月 27 日星期四 15:30:27 BST:- 无效 token $_POST[custom],指示金额、用户 ID 这是来 self 尝试使用 grok 解析 logstash
我有一个类似于以下的输入 2015-12-02T12:39:57.546461+08:00 222.55.201.19 c): start_time="2015-12-02 ...some other
我是 logstash 和 grok 的新手,对模式有疑问。我正在尝试为我的 apache 错误日志创建一个 grok 模式。但是我对以下行为有点困惑。 如果我在 http://grokdebug.h
我有这些日志,我试图使用 grok 从每一行中提取多个信息。但似乎有些匹配没有被考虑在内,尽管它们对我来说似乎很好。 这是一个示例行: "#wtb# GetSP ok. Referer:http://
我有来自 kafka 的数据,我想将它们发送到 ElasticSearch。我有一个这样的带有标签的日志: APPLI_A|PRF|ENV_1|003 我试图用 grok 解析它使用 grok 调试器
几周来我一直在做这件事,但我似乎无法理解这有什么问题。 我试图让所有这些行适应与 grok 的多行匹配,但它只选择最后一行,甚至丢弃行开头的数字。 11:31:03.936 5: Loa
我是一名优秀的程序员,十分优秀!