【原创】大叔经验分享(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

原文地址:https://www.cnblogs.com/barneywill/p/11566676.html

时间: 2024-11-02 11:44:31

【原创】大叔经验分享(82)logstash一个实例运行多个配置文件的相关文章

Sqlserver Sql Agent Job 只能同时有一个实例运行

Sqlserver Sql Agent中的Job默认情况下只能有一个实例在运行,也就是说假如你的Sql Agent里面有一个正在运行的Job叫"Test Job",如果你现在再去启动一次"Test Job"就会报错,因为Sqlserver规定在一个Sqlserver账号下,Sql Agent不能同时启动相同的Job两次,只有前一次启动执行完成后,才能够再次启动该Job. 那么随之而来的问题是如何用sql语句检测Job是否已经执行完毕了呢?下面有一个语句可以作为参考:

WPF程序只有一个实例运行

WPF程序只运行一个实例: 下面的代码还 尝试,如果窗体最小化的时候,让窗体还原 public partial class App : Application { private static Semaphore singleInstanceWatcher; private static bool createdNew; static App() { // Ensure other instances of this application are not running. singleInst

【原创】大叔经验分享(23)hive metastore的几种部署方式

hive及其他组件(比如spark.impala等)都会依赖hive metastore,依赖的配置文件位于hive-site.xml hive metastore重要配置 hive.metastore.warehouse.dirhive2及之前版本默认为/user/hive/warehouse/,创建数据库或表时会在该目录下创建对应的目录 javax.jdo.option.ConnectionURLjavax.jdo.option.ConnectionDriverNamejavax.jdo.o

【原创】大叔经验分享(39)spark cache unpersist级联操作

问题:spark中如果有两个DataFrame(或者DataSet),DataFrameA依赖DataFrameB,并且两个DataFrame都进行了cache,将DataFrameB unpersist之后,DataFrameA的cache也会失效,官方解释如下: When invalidating a cache, we invalid other caches dependent on this cache to ensure cached data is up to date. For

【原创】大叔经验分享(52)ClouderaManager修改配置报错

Cloudera Manager中修改配置可能报错: Incorrect string value: '\xE7\xA8\x8B\xE5\xBA\x8F...' for column 'MESSAGE' at row 1 这是一个mysql的字符集问题,极有可能创建scm数据库时使用默认的latin1编码导致,涉及的表为: CREATE TABLE `REVISIONS` ( `REVISION_ID` bigint(20) NOT NULL, `OPTIMISTIC_LOCK_VERSION`

【原创】大叔经验分享(71)docker容器中使用jvm工具

java应用中经常需要用到jvm工具来进行一些操作,如果java应用部署在docker容器中,如何使用jvm工具? 首先要看使用的docker镜像, 比如常用的openjdk镜像分为jdk和jre,只有jdk版本才有jvm工具,所以可以直接使用jdk版本的openjdk: 比如常用的tomcat镜像则没有jdk和jre选择,默认使用都是jre,所以没有jvm工具,tomcat镜像中的jdk目录如下: # ls /usr/lib/jvm/java-1.8-openjdk bin jre lib #

【原创】大叔经验分享(100)Atlas导入hive元数据

首先要有HIVE_HOME环境变量, 如果是apache,直接配置为解压目录:如果是CDH,设置如下: # export HIVE_HOME=/opt/cloudera/parcels/CDH-5.16.1-1.cdh5.16.1.p0.3/lib/hive 执行导入 # bin/import-hive.sh...Failed to import Hive Meta Data!!! 报错,查看日志 # more logs/import-hive.log 2020-01-11 14:42:38,9

【原创】大叔经验分享(102)lua cjson数字处理成科学计数法

在处理json时,有一个字段是数字并且位数很长,结果被处理为科学计数法 ...,"tradeId":101200111072902276000243,... 经过json.decode之后取到的tradeId是1.012001110729e+23 尝试各种方法之后只能通过字符串替换解决,利用正则表达式 if not (string.find(str, '"tradeId"') == nil) then str=string.gsub(str, '("tra

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

建表语句 CREATE EXTERNAL TABLE `my_lzo_table`(`something` string)ROW FORMAT DELIMITED FIELDS TERMINATED BY '\t' STORED AS INPUTFORMAT 'com.hadoop.mapred.DeprecatedLzoTextInputFormat' OUTPUTFORMAT 'org.apache.hadoop.hive.ql.io.HiveIgnoreKeyTextOutputForma