我正在尝试从logstash 1.repositories#create 2。\" repo \":\" username / reponame \" 。请分享您的想法,从这个outpput grep特定的信息,并将其分配给另一个变量
"消息" => "< 190> 11月01日20:35:15 10-254-128-66 github_audit:{\" actor_ip \":\" 192.168.1.1 \" ,\"从\":\"储存库#创建\" \"演员\":\" myuserid \" ,\"回购\":\"用户名/ reponame \" \"操作\":\" staff.repo_route \&# 34; \" created_at \":1516286634991,\" repo_id \":44743,\" actor_id \":1033,\"数据\":{\" actor_location \":{\"位置\":{\" LAT \":空,\& #34; LON \":空}}}}",
我正在使用此syslog.conf文件来获取输出。
input {
tcp {
port => 8088
type => syslog
}
udp {
port => 8088
type => syslog
}
}
filter {
if [type] == "syslog" {
grok {
match => { "message" => "%{SYSLOGTIMESTAMP:syslog_timestamp}"
}
grep {
match => { "message" => "repositories#create" }
}
}
}
output {
elasticsearch { host => localhost }
stdout { codec => rubydebug }
}
我无法为您的回复添加我的评论,非常感谢您的回复。
请您分享您的想法以获取用户名:和repo:仅从此输出中,我尝试从此特定输出中分配值,再次感谢
消息:" github_audit:{" actor_ip":" 192.168.1.1","来自":"存储库#create&# 34;,"演员":"用户名""回购":"用户名/ logstashrepo""使用者&#34 ;: "用户名"" created_at":1416299104782,"动作":" repo.create"" USER_ID":1033 " repo_id":44744" actor_id":1033,"数据" {" actor_location" {"位置&#34 ;:{" LAT":空," LON":空}}}}&#34 ;, @version:" 1", @timestamp:" 2014-11-18T08:25:05.427Z", 主持人:" 15-274-145-63", 键入:" syslog", syslog5424_pri:" 190", 时间戳:" 11月18日00:25:05", actor_ip:" 10.239.37.185", 来自:"存储库#create", 演员:"用户名", repo:" username / logstashrepo", 用户:"用户名", created_at:1416299104782, 行动:" repo.create", user_id:1033, repo_id:44744, actor_id:1033,
答案 0 :(得分:1)
使用grok filter将JSON有效内容提取到单独的字段中,然后使用json filter从JSON对象中提取字段。以下示例有效,但仅从前缀为“github_audit:”的消息中提取JSON有效内容。我还猜测时间戳之后的字段是一个主机名,它应该覆盖当前“主机”字段中的任何内容。不要忘记添加date filter来将“timestamp”字段中的字符串解析为“@timestamp”。
filter {
grok {
match => [
"message",
"%{SYSLOG5424PRI}%{SYSLOGTIMESTAMP:timestamp} %{HOSTNAME:host} %{GREEDYDATA:message}"
]
overwrite => ["host", "message"]
}
if [message] =~ /^github_audit: / {
grok {
match => ["message", "^github_audit: %{GREEDYDATA:json_payload}"]
}
json {
source => "json_payload"
remove_field => "json_payload"
}
}
}