V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
V2EX 提问指南
wildcat007
V2EX  ›  问与答

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

  •  
  •   wildcat007 · 2017-03-22 16:50:03 +08:00 · 1469 次点击
    这是一个创建于 2804 天前的主题,其中的信息可能已经有所发展或是发生改变。

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

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

    4 条回复    2017-03-22 17:39:53 +08:00
    huangzxx
        1
    huangzxx  
       2017-03-22 16:54:49 +08:00   ❤️ 1
    格式统一的话, filter 里用 grok 正则匹配就行了吧。

    举个例子:

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

    ```

    再复杂的话,直接写 ruby 。
    wildcat007
        2
    wildcat007  
    OP
       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
        3
    wklken  
       2017-03-22 17:14:07 +08:00   ❤️ 1
    两种
    - 如果采集时可以控制, 采集 agent 将 agent_ip 灌入到发送的 json 里面就行, logstash/filebeat 都 ok
    - 如果文件名已有, 在 path 里面, grok 直接解析到一个字段
    wildcat007
        4
    wildcat007  
    OP
       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"]
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   6088 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 23ms · UTC 06:12 · PVG 14:12 · LAX 22:12 · JFK 01:12
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.