Why my Logstash work normal with an recursively error log

I have make my logstash conf as:

... ...
filter {
    grok {
        match => {
            "message" => [
                "\<时间: (?<timestamp>.*)\> \<进程号:(?<process>%{NUMBER}+)\>(?<body>.*$)",
                "\<时间:(?<timestamp>.*)\> \<进程号:\[(?<process>%{NUMBER}+)\]\>(?<body>.*$)",
                "\<时间:(?<timestamp>.*)\> \<进程号:\[(?<process>%{NUMBER}+)\]\>(?<body>.*$)",
                "\[(?<timetsmp>%{YEAR}-%{MONTHNUM}-%{MONTHDAY} %{HOUR}:%{MINUTE}:%{SECOND})\](?<body>.*$)",
                "\[(?<timestamp>%{MONTHNUM}%{MONTHDAY}-%{HOUR}%{MINUTE}%{SECOND}\.\d{6}) (?<thread>.*) [^\[\]]* [A-Z]+\]:(?<body>.*$)",
                "(?<timestamp>%{YEAR}-%{MONTHNUM}-%{MONTHDAY} %{HOUR}:%{MINUTE}:%{SECOND}\.\d{3})%{SPACE}*%{LOGLEVEL:level}%{SPACE}*\[%{DATA:feature}\]%{SPACE}*(?<body>.*$)",
                "(?<timestamp>%{YEAR}-%{MONTHNUM}-%{MONTHDAY} %{HOUR}:%{MINUTE}:%{SECOND}\.\d{3})%{SPACE}*%{LOGLEVEL:level}%{SPACE}*(?<body>.*$)"
            ]
        }
    }
    if [timestamp] != "" {
        date {
            match => [
                "timestamp",
                "yyyyMMdd HHmmss SSS",
                "yyyy-MM-dd HH:mm:ss",
                "MMdd-HHmmss.SSSSSS",
                "yyyy-MM-dd HH:mm:ss.SSS"
            ]
        }
    } else {
        ruby {
            code => "event.set('timestamp', event.get('@timestamp').time.localtime + 8*60*60)"
        }
    }
    ruby {
        code => "event.set('@timestamp', event.get('timestamp'))"
    }
    mutate {
        remove_field => [
            "tags",
            "host",
            "timestamp",
            "offset",
            "beat",
            "input",
            "log",
            "prospector",
            "@version"
        ]
    }
}
... ...

Logstash can work well with this conf file but output many error message in one same:

2023-08-24 13:21:53.120 ERROR [logstash.filters.ruby] Ruby exception occurred: wrong argument type String (expected LogStash::Timestamp) {:class=>"TypeError", :backtrace=>["org/logstash/ext/JrubyEventExtLibrary.java:95:in `set'", "(ruby filter code):2:in `block in filter_method'", "/usr/share/logstash/vendor/bundle/jruby/2.5.0/gems/logstash-filter-ruby-3.1.7/lib/logstash/filters/ruby.rb:93:in `inline_script'", "/usr/share/logstash/vendor/bundle/jruby/2.5.0/gems/logstash-filter-ruby-3.1.7/lib/logstash/filters/ruby.rb:86:in `filter'", "/usr/share/logstash/logstash-core/lib/logstash/filters/base.rb:143:in `do_filter'", "/usr/share/logstash/logstash-core/lib/logstash/filters/base.rb:162:in `block in multi_filter'", "org/jruby/RubyArray.java:1792:in `each'", "/usr/share/logstash/logstash-core/lib/logstash/filters/base.rb:159:in `multi_filter'", "org/logstash/config/ir/compiler/AbstractFilterDelegatorExt.java:115:in `multi_filter'", "(eval):172:in `block in filter_func'", "/usr/share/logstash/logstash-core/lib/logstash/pipeline.rb:358:in `filter_batch'", "/usr/share/logstash/logstash-core/lib/logstash/pipeline.rb:337:in `worker_loop'", "/usr/share/logstash/logstash-core/lib/logstash/pipeline.rb:304:in `block in start_workers'"]}

How can I resolve this?

timestamp is a string. I can see that you have attempted to ensure that it is, but it has not worked. I would suggest adding "puts timestamp" to the second ruby filter to see what it is, and maybe additional debugging code.

This topic was automatically closed 28 days after the last reply. New replies are no longer allowed.