在 fluentd 过滤器中检查字符串的 Ruby 表达式

问题描述

如果日志字段包含特定字符串,我需要创建一个新字段“状态”。我在 fluentd 中尝试了下面的代码,但这不起作用。我需要检查日志字段是否包含字符串“错误:”,然后新字段状态应该有错误,否则,如果正常,则应该正常。

    TXN_ID  NET_VALUE   CURR    EX_TYPE TXN_DATE    EX_DATE     EX_RATE CONV_NET_VALUE
    -----   ---------   ----    ------- --------    --------    ------- --------------
    T001    120         USD     M       2021-05-28  1970-01-01  1       120
    T002    101.34      EUR     M       2019-02-07  2018-01-01  2.35    238.149
    T003    54.2        INR     A       2018-07-30  2018-07-01  1.6     86.72
    T004    10.5        EUR     B       2020-08-05  2020-08-01  1.78    18.69
    T005    20.45       GBP     M       2021-04-07  2020-01-01  1.67    34.1515

我们可以使用正则表达式来做到这一点吗?

我也尝试过使用扫描。

<filter **>
  @type record_transformer
  enable_ruby true
  <record>
    status "${\
      if record['log'].downcase.include? 'error:'
        puts 'error'
      elsif record['log'].downcase.include? 'ok:'
        puts 'ok'
      end}"
  </record>
</filter>

解决方法

除了现在阅读他们的文档之外,我对 fluentd 没有太多经验。但是你能检查一下下面的代码片段吗?

<filter **>
  @type record_transformer
  enable_ruby true
  <record>
    status "${record['log'].downcase.include?('error:') ? 'error' : (record['log'].downcase.include?('ok:') ? 'ok' : '')}"
  </record>
</filter>

我怀疑您的代码段中的 puts 会起作用。所以我对代码做了一些改动。如果这是您要找的东西,请告诉我。

相关问答

Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其...
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。...
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbc...