ELK Stack - Elasticsearch 索引创建 (logstash)
ELK Stack - Elasticsearch index creation (logstash)
我正在试验使用 ELK 来分析我们的日志文件。按照可用文档,设法在我的电脑中设置堆栈。现在我面临着创建弹性搜索索引的问题。以前我使用 filebeat -> logstash -> elasticsearch -> kibana 组合并使用以下 logstash.conf 文件能够将数据发送到 elasticsearch
input {
beats {
port => 5044
type => "log"
}
}
output {
elasticsearch {
hosts => "localhost:9200"
manage_template => false
index => "%{[@metadata][beat]}-%{+YYYY.MM.dd}"
document_type => "%{[@metadata][type]}"
}
}
弹性搜索中的索引被评估为
"filebeat-*"
来自表达式
index => "%{[@metadata][beat]}-%{+YYYY.MM.dd}"
现在我将 logstash.conf 更改为基于我的实际日志文件
input {
file
{
path => "C:\logs\application.log"
start_position => "beginning"
codec =>
multiline {
charset => "ISO-8859-1"
pattern => "^%{TIMESTAMP_ISO8601}"
max_lines => 1000
negate => true
what => "previous"
}
}
}
filter {
mutate {
gsub => [ "message", "\r", "" ]
}
grok {
patterns_dir => "./patterns"
match => {"message" => "%{TIMESTAMP_ISO8601:timestamp} %{LOGLEVEL1:loglevel} %{THREAD:thread} %{IP5:remoteipaddress} %{JAVA:logclass} %{GREEDYDATA:details}"}
add_field => [ "received_at", "%{@timestamp}" ]
add_field => [ "received_from", "%{host}" ]
}
date {
match => [ "timestamp", "yyyy-MM-dd HH:mm:ss,SSS" ]
remove_field => [ "timestamp" ]
}
}
output {
elasticsearch {
hosts => "localhost:9200"
manage_template => false
index => "%{[@metadata][beat]}-%{+YYYY.MM.dd}"
document_type => "%{[@metadata][type]}"
}
file {
path => "C:\logs\output.txt"
}
}
在这种情况下,logstash 对 conf 文件很满意,但是我为弹性搜索建议的索引没有被正确评估。
如果我使用 head 插件检查弹性搜索,
http://localhost:9200/_plugin/head/
索引显示为
%{[@metadata][beat]}-
我不确定为什么现在不计算索引表达式。任何解决此问题的建议都会有所帮助。
提前致谢,
三
某些 logstash 插件利用元数据来传输您不想存储在文档中的字段。在您的第一个示例中,beats 输入正在设置稍后在 elasticsearch 输出中用于设置索引和类型的某些元数据。由于文件输入没有设置这些元数据字段,logstash 将输出变量名而不是空字符串,因此它设置索引“%{[@metadata][beat]}-2016.04.05”,日期已知,但元数据字段节拍未知。
如果您将 elasticsearch 输出保留为默认值,它应该可以正常工作:
elasticsearch {
hosts => "localhost:9200"
}
如果您将 manage_template 保留为 false,它也不会应用 logstash-
模板并且字段映射可能有点偏离,所以我建议将其保留为默认值(真)再次。
既然你知道索引应该叫什么,就把它放在elasticsearch输出中:
Since you know what the index should be called, just put it in the `elasticsearch` output:
output {
elasticsearch {
hosts => "localhost:9200"
manage_template => false
index => "filebeat-%{+YYYY.MM.dd}"
document_type => "whatever_type_filebeat_put_in"
}
}
我正在试验使用 ELK 来分析我们的日志文件。按照可用文档,设法在我的电脑中设置堆栈。现在我面临着创建弹性搜索索引的问题。以前我使用 filebeat -> logstash -> elasticsearch -> kibana 组合并使用以下 logstash.conf 文件能够将数据发送到 elasticsearch
input {
beats {
port => 5044
type => "log"
}
}
output {
elasticsearch {
hosts => "localhost:9200"
manage_template => false
index => "%{[@metadata][beat]}-%{+YYYY.MM.dd}"
document_type => "%{[@metadata][type]}"
}
}
弹性搜索中的索引被评估为
"filebeat-*"
来自表达式
index => "%{[@metadata][beat]}-%{+YYYY.MM.dd}"
现在我将 logstash.conf 更改为基于我的实际日志文件
input {
file
{
path => "C:\logs\application.log"
start_position => "beginning"
codec =>
multiline {
charset => "ISO-8859-1"
pattern => "^%{TIMESTAMP_ISO8601}"
max_lines => 1000
negate => true
what => "previous"
}
}
}
filter {
mutate {
gsub => [ "message", "\r", "" ]
}
grok {
patterns_dir => "./patterns"
match => {"message" => "%{TIMESTAMP_ISO8601:timestamp} %{LOGLEVEL1:loglevel} %{THREAD:thread} %{IP5:remoteipaddress} %{JAVA:logclass} %{GREEDYDATA:details}"}
add_field => [ "received_at", "%{@timestamp}" ]
add_field => [ "received_from", "%{host}" ]
}
date {
match => [ "timestamp", "yyyy-MM-dd HH:mm:ss,SSS" ]
remove_field => [ "timestamp" ]
}
}
output {
elasticsearch {
hosts => "localhost:9200"
manage_template => false
index => "%{[@metadata][beat]}-%{+YYYY.MM.dd}"
document_type => "%{[@metadata][type]}"
}
file {
path => "C:\logs\output.txt"
}
}
在这种情况下,logstash 对 conf 文件很满意,但是我为弹性搜索建议的索引没有被正确评估。
如果我使用 head 插件检查弹性搜索,
http://localhost:9200/_plugin/head/
索引显示为
%{[@metadata][beat]}-
我不确定为什么现在不计算索引表达式。任何解决此问题的建议都会有所帮助。
提前致谢, 三
某些 logstash 插件利用元数据来传输您不想存储在文档中的字段。在您的第一个示例中,beats 输入正在设置稍后在 elasticsearch 输出中用于设置索引和类型的某些元数据。由于文件输入没有设置这些元数据字段,logstash 将输出变量名而不是空字符串,因此它设置索引“%{[@metadata][beat]}-2016.04.05”,日期已知,但元数据字段节拍未知。
如果您将 elasticsearch 输出保留为默认值,它应该可以正常工作:
elasticsearch {
hosts => "localhost:9200"
}
如果您将 manage_template 保留为 false,它也不会应用 logstash-
模板并且字段映射可能有点偏离,所以我建议将其保留为默认值(真)再次。
既然你知道索引应该叫什么,就把它放在elasticsearch输出中:
Since you know what the index should be called, just put it in the `elasticsearch` output:
output {
elasticsearch {
hosts => "localhost:9200"
manage_template => false
index => "filebeat-%{+YYYY.MM.dd}"
document_type => "whatever_type_filebeat_put_in"
}
}