如何使用Logstash创建基于不同应用程序的不同索引模式

时间:2019-04-11 12:38:18

标签: elasticsearch logstash kibana filebeat

我有一个正在运行的Java应用程序,它将根据本教程http://www.andrew-programming.com/2018/09/18/integrate-springboot-application-with-elk-and-filebeat/

将其日志发送到logstash。

我的问题是,是否要将日志与不同的应用程序分开,我想为每个应用程序使用不同的索引模式,而不是将它们全部放在同一应用程序中。

这是我的logstash配置文件,其中index =>“ app-%{+ YYYY.MM.dd}”是模式的名称。

我尝试了诸如%{type}%{tags} [tags] [type]之类的东西,但是它们都不打印与应用程序相关的任何变量。我可以在索引模式中使用host,但不希望使用ip可能会改变索引的位置。

input {
  tcp {
  port => 4560
  codec => json_lines
  }
  beats {
    host => "127.0.0.1"
    port => "5044"
  }
}
output{
  stdout { codec => rubydebug }
  elasticsearch {
  hosts => ["localhost:9200"]
  index => "app-%{+YYYY.MM.dd}"  
  document_type => "%{[@metadata][type]}"
  }
}

2 个答案:

答案 0 :(得分:0)

将以下内容添加到logback.spring.xml

<encoder charset="UTF-8" class="net.logstash.logback.encoder.LogstashEncoder">
  <customFields>{"appname":"auxiliary-service-application"}</customFields>
</encoder>

在logstash.conf文件中使用了该参数。

output{
  stdout { codec => rubydebug }
  elasticsearch {
  hosts => ["localhost:9200"]
  index => "%{appname}-%{+YYYY.MM.dd}"   
  document_type => "%{[@metadata][type]}"
  }
}

答案 1 :(得分:0)

我认为这会有所帮助

例如:

result = sorted(my_dict.items(), key=itemgetter(1), reverse=True)
for item in result[:self.top]:
    # How wide I want my spacing
    total_space = 50

    # the length of the key
    x_space = len(item[0])

    # the length of the value, string first so I can count how many digits
    y_space = len(str(item[1]))

    # The space left over
    remaining_space = total_space - x_space - y_space

    # the character to fill the space, could use - or . or _
    gap = ' ' * remaining_space
    print(f'{item[0]}{gap}{item[1]}')

    # Output

.py                                              2
.csv                                             1