ELK 能否取 path 里面值的 IP 作为一个字段?

2017-03-22 16:50:03 +08:00
 wildcat007

例如: path:/opt/audit_logs/mysql-audit/10.3.5.50_142xxxxx.log
日志中没有数据库的 IP 字段。所以把日志命名成 IP+时间戳.log

我想取 10.3.5.50 作为 IP , logstah 如何操作呢?

1470 次点击
所在节点    问与答
4 条回复
huangzxx
2017-03-22 16:54:49 +08:00
格式统一的话, filter 里用 grok 正则匹配就行了吧。

举个例子:

```
grok {
match => { "http_x_forwarded_for" => "((?<client_ip>[0-9\.]+),?.*)" }
}

```

再复杂的话,直接写 ruby 。
wildcat007
2017-03-22 17:02:07 +08:00
@huangzxx
先感谢
比如我的日志是 root,query,127.0.0.1,select * from test.test
这个 IP127.0.0.1 是操作这条 sql 的主机 IP 。但是我不知道这个日志是哪个服务器的,所以日志的命名是 10.3.5.50_20170322.log
所以我现在想去取 日志的 文件名的一部分,就是 IP 这个一部分 作为一个字段,方便 elk 去搜索。

grok 不知道能不能正则 文件名。
wklken
2017-03-22 17:14:07 +08:00
两种
- 如果采集时可以控制, 采集 agent 将 agent_ip 灌入到发送的 json 里面就行, logstash/filebeat 都 ok
- 如果文件名已有, 在 path 里面, grok 直接解析到一个字段
wildcat007
2017-03-22 17:39:53 +08:00
@huangzxx
@wklken
已解决,比较简单.
直接对 path 进行正则即可··太丢脸,这么简单。(捂脸)

input {
file { type => "test"
path => ["/opt/test/*"]
}
}

filter {
grok {
match => {"path" => "%{IPV4:source_ip}" }
}
}


output {
stdout {
codec => plain
}
elasticsearch {
hosts => ["127.0.0.1:9200"]

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/349502

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX