使用elasticsearch管道将数组从ndjson数据集剥离

hmae6n7t  于 2023-03-29  发布在  ElasticSearch
关注(0)|答案(1)|浏览(122)

我从filebeat(7.3)向elasticsearch(目前使用7.3版本)发送了数据,日志是ndjson格式的。
数据的一部分格式为{"tagset": {"username": { "domain\\username": []}}数组在所有情况下都是空的。
(“domain”和“username”是域中用户的实际域\用户名。这意味着,在这个意义上,“username”对于每个日志条目总是不同的。)
“domain\username”实际上是“username”键的值。但是它在这个数据集中被视为数组,因此在elasticsearch中被错误地索引。
我试图剥离数组的“域\用户名”,并使“域\用户名”的值“用户名”(或另一个字段的值,可以作出/设置)。
目前,我没有使用logstash,而是尝试使用elasticsearch管道来处理这个问题(尽管,使用logstash也不是完全不可能)。我尝试过使用grok和其他方法来改变这个问题,但没有效果(也就是说,我可能做错了什么)。
提前感谢您的帮助。

6qfn3psc

6qfn3psc1#

下面的方法解决了这个问题。看起来很混乱,可能不是最好的解决方法,但它很有效:

PUT _ingest/pipeline/my_pipeline
{
    "description":"",
    "processors":[
    {
        "set":{
            "field":"user_name",
            "value":"{{ tagset.username }}"
        }
    },
    {
        "remove":{
            "field":"tagset.username",
            "ignore_failure":true
        }
    },
    {
        "convert":{
            "field":"user_name",
            "type":"string"
        }
    },
    {
        "gsub":{
            "field":"user_name",
            "pattern":"""\{DOMAIN\\\\""",
            "replacement":""
        }
    },
    {
        "gsub":{
            "field":"user_name",
            "pattern":"=\\[\\]\\}",
            "replacement":""
        }
    }]
}

这将生成一个值,即用户名减去域名、斜杠和方括号。

相关问题