问题描述
我正在使用logstash从filebeat中读取日志并写入redis。我来到一种情况,我想过滤日志并存储在2个redis密钥中,其中一个密钥将存储日志的一部分,而另一个密钥将存储日志的其他部分。 这是我的日志格式
TRANSACTION::test_user::MsgiD-aa0313ea-2d26-47b1-a2c7-207d969a1298::{"message":[{"recipientType":"individual","recipient":"919876543210","xApiheader":"asdf","typeText":[],"typeTemplate":[{"name":"template_name","attributes":["testing","123"]}],"typeContact":[],"typeLocation":[]}],"username":"test_user","msgid":"aa0313ea-2d26-47b1-a2c7-207d969a1298"}::CLIENT_disPLAY_ID-gBEGkZmHmWIxAgk8BPgSu2GrihM
这是我的logstash代码
input {
beats {
port => 5044
}
}
filter
{
if "TRANSACTION::" in [message]
{
grok
{
match => [ "message","TRANSACTION::%{GREEDYDATA:username}::MsgiD-%{GREEDYDATA:messageId}::%{GREEDYDATA:messageJson}::ERRORCODE-%{GREEDYDATA:errorCode}::ERRORMESSAGE-%{GREEDYDATA:errorMessage}" ]
}
grok
{
match => [ "message","TRANSACTION::%{GREEDYDATA:username}::MsgiD-%{GREEDYDATA:messageId}::%{GREEDYDATA:messageJson}::CLIENT_disPLAY_ID-%{GREEDYDATA:clientMessageId}" ]
}
mutate
{
add_field => { "CLIENT" => "%{username}" }
add_field => { "INDEX_TYPE" => "MESSAGE" }
remove_field => "beat"
remove_field => "tags"
remove_field => "host"
remove_field => "prospector"
remove_field => "input"
remove_field => "Meta"
remove_field => "offset"
remove_field => "log"
}
}
}
output {
if [INDEX_TYPE] == "MESSAGE"
{
redis {
data_type => "list"
host => ["localhost:6379"]
key => "QUEUE_MESSAGE_TRANS"
}
}
#stdout { }
}
现在,此脚本将消息正确存储在Redis列表“ QUEUE_MESSAGE_TRANS”中。但是,现在我想从该日志中存储 xApiheader 到另一个密钥=>值对中的redis密钥中,例如:set XAPIHEADER_gBEGkZmHmWIxAgk8BPgSu2GrihM asdf
,其中 gBEGkZmHmWIxAgk8BPgSu2GrihM 是该日志中的CLIENT_disPLAY_ID。
解决方法
暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!
如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。
小编邮箱:dio#foxmail.com (将#修改为@)