原创大叔经验分享(82)logstash一个实例运行多个配置文件

Posted barneywill

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了原创大叔经验分享(82)logstash一个实例运行多个配置文件相关的知识,希望对你有一定的参考价值。

logstash一个实例运行多个配置文件,将所有配置文件放到以下目录即可

/usr/share/logstash/pipeline

但是默认行为不是每个配置文件独立运行,而是作为一个整体,每个input会匹配所有的filter,然后匹配所有的output,可能会导致数据被错误的处理以及发送到错误的地方;

 

解决方法一:

在input中设置一个变量,在filter和output中判断该变量,实现每个配置文件独立运行,不会相互影响,使用哪个变量呢?

input默认有很多通用参数,但是只有type可用,官方描述如下:

Add a type field to all events handled by this input.

Types are used mainly for filter activation.

The type is stored as part of the event itself, so you can also use the type to search for it in Kibana.

input中的type参数会被添加到event中,所以后续在filter和output中都可以使用,其他参数就不行了,配置如下:

input 
  jdbc 
    ...
    type => "some_type"
  

filter 
  if [type] == "some_type" 
    ...
  

output 
  if [type] == "some_type" 
    ...
  

如果一切正常,恭喜你,如果还有问题,有可能是你的event里本来就有type字段,然后又赋值一个,会出现一个type数组(追加而不是覆盖),这时有两个问题:

1)filter和output中的if判断失效,你的数据压根就不会处理也不会发送出去;

2)你的数据中的type字段被改乱了;

 

解决方法二:

在event中手工添加一个变量,比如my_type,配置如下:

input 
  jdbc 
    ...
    statement => "select *, ‘some_type‘ my_type from my_table where update_time > :sql_last_value"
    ...
  

filter 
  if [my_type] == "some_type" 
    ...
  

output 
  if [my_type] == "some_type" 
    ...
  

 

还有其他解决方法详见下边引用的官方文档,包括各种if判断以及@metadata变量的使用; 

 

参考:

jdbc input

https://www.elastic.co/guide/en/logstash/6.3/plugins-inputs-jdbc.html

event dependent configuration

https://www.elastic.co/guide/en/logstash/6.7/event-dependent-configuration.html

以上是关于原创大叔经验分享(82)logstash一个实例运行多个配置文件的主要内容,如果未能解决你的问题,请参考以下文章

原创大叔经验分享(105)常用快捷键

原创大叔经验分享(99)Atlas简介安装

原创大叔经验分享(35)lzo格式支持

原创大叔经验分享(76)confluence配置

原创大叔经验分享(109)emacs使用

原创大叔经验分享(111)mac修改Terminal主题