【问题标题】:Ruby expression to check for a string in fluentd filter用于检查流利过滤器中的字符串的 Ruby 表达式
【发布时间】:2021-09-19 22:00:45
【问题描述】:

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

<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>

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

我也尝试过使用扫描。

<filter **>
  @type record_transformer
  enable_ruby true  
  <record>
   status ${record["log"].scan(/^.* ([[:<:]]error[[:>:]]|[[:<:]]ok[[:>:]]):.*$/i).first.compact} 
  </record>  
</filter>

【问题讨论】:

    标签: regex ruby fluentd qregexp


    【解决方案1】:

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

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

    我怀疑您的 sn-p 上的 puts 是否有效。所以我有点改变了代码。如果这是您正在寻找的东西,请告诉我。

    【讨论】:

    • 谢谢,我会试试这个。但我读过的地方包括?不适用于有空格的字符串。真的吗?我还尝试了使用正则表达式的替代方法。我粘贴在上面。但这也不起作用。
    • 我尝试了上面的代码,但似乎不起作用。有效的是 *> @type record_transformer enable_ruby true status ${record["log"].scan(/^. ([[:<:> :]]|[[:<:>:]]):.*$/i).first.compact} 唯一的问题是它给出未定义方法的流畅错误对于紧凑型为零
    • 您能否分享一个可能存在于记录['log'] 中的日志示例,以便我了解更多上下文。
    • 它将是通用日志,如2021-03-31 12:12:05.856 LOG : Message eRror: &lt;checked [abc]&gt; 2021-03-31 12:12:05.856 LOG : Message Error: &lt;checked [abc]&gt; 2021-03-31 12:12:05.856 LOG : Message &gt; 2021-03-31 12:12:05.856 LOG : Message ok: &lt;checked [abc]&gt;
    • 嘿,对不起!我不确定我能在这方面提供多大帮助。正则表达式是我的噩梦。由于某些日志根本不匹配,您的正则表达式扫描可能会返回 null 吗?也许试试.first&amp;.compact,看看事情是否按预期显示?
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2022-07-22
    • 1970-01-01
    • 2020-05-01
    • 1970-01-01
    • 2012-10-13
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多