有什么方法可以提取字符串/句子的一部分,仅给出子字符串的起始位置和结束位置的起始索引和终止索引?例如:“这是一个例子00001。等等。” 我需要使用正则表达式从位置 10 到 15(即示例)获取子字符串。
在 Logstash 2.3.3 中,grok 过滤器不适用于最后一个字段。
要重现该问题,请创建test.conf如下:
input {
file {
path => "/Users/izeye/Applications/logstash-2.3.3/test.log"
}
}
filter {
grok {
match => { "message" => "%{DATA:id1},%{DATA:id2},%{DATA:id3},%{DATA:id4},%{DATA:id5}" }
}
}
output {
stdout {
codec => rubydebug
}
}
Run Code Online (Sandbox Code Playgroud)
跑步./bin/logstash -f test.conf
启动后,在另一个终端运行echo "1,2,3,4,5" >> test.log
我得到以下输出:
Johnnyui-MacBook-Pro:logstash-2.3.3 izeye$ ./bin/logstash -f test.conf
Settings: Default pipeline workers: 8
Pipeline main started
{
"message" => "1,2,3,4,5",
"@version" => "1",
"@timestamp" => "2016-07-07T07:57:42.830Z",
"path" => "/Users/izeye/Applications/logstash-2.3.3/test.log",
"host" => "Johnnyui-MacBook-Pro.local",
"id1" => …Run Code Online (Sandbox Code Playgroud) 这是我第一次使用 grok 和 elasticsearch。我正在尝试编写一个 grok 文件来解析以下行。
2017-07-25 10:48:23,477 [[api-my-app-v1-20.0.0].apiHttpListenerConfig.worker.58] INFO esb.api-my-app-v1.get-blah.http.response - transactionID=f61b8053-70d2-11e7-b274-3639cc5335d0 creationTime=2017-07-25T10:48:23.254+10:00 txnState=END timeTaken=11
Run Code Online (Sandbox Code Playgroud)
到目前为止,我已经写了这个 grok...
%{TIMESTAMP_ISO8601:timestamp}\s+%{DATA:thread}\s+%{LOGLEVEL:loglevel}\s+%{JAVACLASS:category}\s+-\s+%{GREEDYDATA:msgbody}
Run Code Online (Sandbox Code Playgroud)
它给了我这个......
{
"timestamp": [
[
"2017-07-25 10:48:23,477"
]
],
"YEAR": [
[
"2017"
]
],
"MONTHNUM": [
[
"07"
]
],
"MONTHDAY": [
[
"25"
]
],
"HOUR": [
[
"10",
null
]
],
"MINUTE": [
[
"48",
null
]
],
"SECOND": [
[
"23,477"
]
],
"ISO8601_TIMEZONE": [
[
null
]
],
"thread": [
[
"[[api-my-app-v1-20.0.0].apiHttpListenerConfig.worker.58]"
]
],
"loglevel": [ …Run Code Online (Sandbox Code Playgroud) 我是胶水新手,我正在尝试让爬虫功能从一些日志文件中提取数据库表。问题是文件的第一行不同。我定义了一个自定义 Grok 分类器,只要删除第一行,它就可以正常工作,但是当我使用原始日志文件时,它会停止工作并使用默认的粘合分类器(这显然对我不起作用)。我尝试将 'skip.header.line.count'=1 添加到表属性(并将爬网程序设置为不更新架构),但这也不起作用。有没有办法在 grok 模式中写“跳过第一行”?
amazon-web-services logstash-grok aws-glue aws-glue-data-catalog
我试图理解使用grok过滤我的apache错误日志.
我的错误日志文件如下所示:
[Thu Feb 27 13:22:44 2014] [error] [client 10.110.64.71] script not found or unable to stat: /var/www/cgi-bin/php4
Run Code Online (Sandbox Code Playgroud)
如何使用grok过滤?我到目前为止:
filter {
grok {
type => "apache-error"
pattern => "\[%{HTTPDATE:timestamp}\] \[%{WORD:class}\] \[%{WORD:originator} %{IP:clientip}\] %{GREEDYDATA:errmsg}"
}
}
Run Code Online (Sandbox Code Playgroud)
我尝试使用Grok调试器,但我几乎不知道我在做什么.我对logstash来说几乎是全新的.
我正在尝试通过logstash将数据从csv文件提供给elasticsearch.这些csv文件包含第一行作为列名.在解析文件时是否有任何特定方法可以跳过该行?是否有任何我可以使用的条件/过滤器,如果出现异常,它会跳到下一行?
我的配置文件看起来像:
input {
file {
path => "/home/sagnik/work/logstash-1.4.2/bin/promosms_dec15.csv"
type => "promosms_dec15"
start_position => "beginning"
sincedb_path => "/dev/null"
}
}
filter {
csv {
columns => ["Comm_Plan","Queue_Booking","Order_Reference","Generation_Date"]
separator => ","
}
ruby {
code => "event['Generation_Date'] = Date.parse(event['Generation_Date']);"
}
}
output {
elasticsearch {
action => "index"
host => "localhost"
index => "promosms-%{+dd.MM.YYYY}"
workers => 1
}
}
Run Code Online (Sandbox Code Playgroud)
我的csv文件的前几行看起来像
"Comm_Plan","Queue_Booking","Order_Reference","Generation_Date"
"","No","FMN1191MVHV","31/03/2014"
"","No","FMN1191N64G","31/03/2014"
"","No","FMN1192OPMY","31/03/2014"
Run Code Online (Sandbox Code Playgroud)
无论如何我可以跳过第一行吗?此外,如果我的csv文件以新行结尾,其中没有任何内容,那么我也会收到错误.如果它们位于文件末尾或者如果thre是2行之间的空行,我如何跳过这些新行?
我有这种格式的PHP日志
[Day Mon DD HH:MM:SS YYYY] [Log-Type] [client <ipv4 ip address>] <some php error type>: <other msg with /path/of/a/php/script/file.php and something else>
[Day Mon DD HH:MM:SS YYYY] [Log-Type] [client <ipv4 ip address>] <some php error type>: <other msg without any file name in it>
[Day Mon DD HH:MM:SS YYYY] [Log-Type] [client <ipv4 ip address>] <some msg with out semicolon in it but /path/of/a/file inside the message>
Run Code Online (Sandbox Code Playgroud)
这是我试图通过logstash处理后发送到Graylog2.在这里使用这篇文章,我能够开始.现在我想得到一些额外的字段,以便我的最终版本看起来像这样.
{
"message" => "<The entire error message goes here>", …Run Code Online (Sandbox Code Playgroud) 我正在创建一个logstash grok过滤器来从备份服务器中提取事件,我希望能够测试一个模式的字段,如果它匹配模式,则进一步处理该字段并提取其他信息.
为此,我在if声明中嵌入了一个声明grok.这导致测试失败Error: Expected one of #, =>后立即失败if.
这是过滤语句:
filter {
grok {
patterns_dir => "./patterns"
# NetWorker logfiles have some unusual fields that include undocumented engineering codes and what not
# time is in 12h format (ugh) so custom patterns need to be used.
match => [ "message", "%{NUMBER:engcode1} %{DATESTAMP_12H:timestamp} %{NUMBER:engcode2} %{NUMBER:engcode3} %{NUMBER:engcode4} %{NUMBER:ppid} %{NUMBER:pid} %{NUMBER:engcode5} %{WORD:processhost} %{WORD:processname} %{GREEDYDATA:daemon_message}" ]
# attempt to find completed savesets and pull that info from …Run Code Online (Sandbox Code Playgroud) (这与我的其他问题logstash grok过滤器的自定义日志有关)
我有一个日志文件,其行看起来像:
14:46:16.603 [http-nio-8080-exec-4] INFO METERING - msg=93e6dd5e-c009-46b3-b9eb-f753ee3b889a CREATE_JOB job=a820018e-7ad7-481a-97b0-bd705c3280ad data=71b1652e-16c8-4b33-9a57-f5fcb3d5de92
14:46:17.378 [http-nio-8080-exec-3] INFO METERING - msg=c1ddb068-e6a2-450a-9f8b-7cbc1dbc222a SET_STATUS job=a820018e-7ad7-481a-97b0-bd705c3280ad status=ACTIVE final=false
Run Code Online (Sandbox Code Playgroud)
我构建了一个与第一行匹配的模式:
%{TIME:timestamp} %{NOTSPACE:http} %{WORD:loglevel}%{SPACE}%{WORD:logtype} - msg=%{NOTSPACE:msg}%{SPACE}%{WORD:action}%{SPACE}job=%{NOTSPACE:job}%{SPACE}data=%{NOTSPACE:data}
Run Code Online (Sandbox Code Playgroud)
但很明显的是只适用于具有线data=在端部,相对于status=与final=在第二行,或其他线路的其他属性-值对结束了吗?如何设置一个模式,表示在某一点之后会有一foo=bar对我想识别并在输出中作为属性/值对输出的任意对?
我有两个URL(由于安全问题,我将使用虚拟解释)
a> https://xyz.company.com/ui/api/token
b> https://xyz.company.com/request/transaction?date=2016-01-21&token=<tokeninfo>
Run Code Online (Sandbox Code Playgroud)
当您点击'a'中提到的url时,它将生成一个令牌,让它成为一个包含16个字符的字符串
然后该令牌应该用于在令牌参数中进行点'b'的第二次请求
The second url response is important to me i.e is a JSON response, I need
to filter the json data and extract required data and output it to standard
output and elastic search.
Run Code Online (Sandbox Code Playgroud)
有没有办法在logstash中使用插件"http_poller"或任何其他插件.
注意:这些请求URL应该一个接一个地执行,即点"a"url应该首先执行,并且"b"url应该在接收到新令牌后执行.
请建议.