zoukankan      html  css  js  c++  java
  • logstash grok 日志格式书写方法

    elk环境

     Elasticsearch + Logstash + Kibana +Redis +Filebeat

    客户端filebeat收集日志存到redis,logstash消费redis日志(按需要的格式)存储到elasticsearch,kibana读取elasticsearch索引数据。

    正则表达式

    1.正则表达式

    普通正则表达式

    . 任意一个字符

    * 前面一个字符出现0次或者多次

    [abc] 中括号内任意一个字符

    [^abc] 非中括号内的字符

    [0-9] 表示一个数字

    [a-z]   小写字母

    [A-Z] 大写字母

    [a-zA-Z] 所有字母

    [a-zA-Z0-9] 所有字母+数字

    [^0-9] 非数字

    ^xx 以xx开头

    xx$ 以xx结尾

    d 任何一个数字

    s 任何一个空白字符

    扩展正则表达式,在普通正则符号再进行了扩展

    ? 前面字符出现0或者1次

    + 前面字符出现1或者多次

    {n} 前面字符匹配n次

    {a,b} 前面字符匹配a到b次

    {,b} 前面字符匹配0次到b次

    {a,} 前面字符匹配a或a+次

    (string1|string2) string1或string2

    在Kibana的grokdebugger上进行测试

    当写入logstash.conf之前可在Kibana的grokdebugger上进行测试:

    192.168.237.1 - - [24/Feb/2019:17:48:47 +0800] "GET /shijiange HTTP/1.1" 404 571 “http://www.baidu.com/tieba/wooo” "Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/71.0.3578.98 Safari/537.36"

    那么可以按照正则表达式和grok语法在grokdebugger进行如下测试:

     (?<clientip>[0-9]{1,3}.[0-9]{1,3}.[0-9]{1,3}.[0-9]{1,3}) - - [(?<requesttime>[^ ]+ +[0-9]+)] "(?<requesttype>[A-Z]+) (?<requesturl>[^ ]+) HTTP/d.d" (?<status>[0-9]+) (?<bodysize>[0-9]+) "(?<http_referer>[^" ]+)" "(?<ua>[^"]+)

    *注意: 当Simulate没有输出时,先查看log出输出的格式,一定要注意字段之间的空格。

    (?<字段名>正则)表示将匹配的内容提取为字段,其他不用提取为字段的地方原样写上或者用正则匹配即可。

    可以参考nginx日志格式

    log_format nginx         '$http_x_forwarded_for - $remote_user [$time_local] "$request" '
                                        '$status $body_bytes_sent "$http_referer" '
                                        '"$http_user_agent"';

    注意换行” ‘之间的空格。 

    最后再写入到logstash.conf.

    input {
        redis {
                host => "192.168.3.9"
                port => 6379
                key => "messages"
                data_type => "list"
                db => 0
         }
    }

    filter{
           grok {
                     match => {
    "message" => '(?<clientip>[0-9]{1,3}.[0-9]{1,3}.[0-9]{1,3}.[0-9]{1,3}) - - [(?<requesttime>[^ ]+ +[0-9]+)] "(?<requesttype>[A-Z]+) (?<requesturl>[^ ]+) HTTP/d.d" (?<status>[0-9]+) (?<bodysize>[0-9]+) "(?<http_referer>[^" ]+)" "(?<ua>[^"]+)'

          }
                     remove_field => ["message"]
    }
                      geoip {
                              source => ["ip"]
                              target => ["geoip"]
                              fields => ["city_name","region_name","country_name","ip"]
        }

    }
    output {
          if [fields][log_source] == 'messages' {
               elasticsearch {
                    hosts => ["http://127.0.0.1:9200"]
                    index => "filebeat-message-%{+YYYY.MM.dd}"
                    user => "elastic"
                    password => "123456"
              }
          }
    }

    参考链接:https://www.cnblogs.com/yanshaoshuai/p/11386442.html

  • 相关阅读:
    [转]WordPress 主题教程 #2:模板文件和模板
    [转]经验分享:微信小程序外包接单常见问题及流程
    [转]为什么软件开发,人多,事少,还会工作量大?
    [转]Reporting Service部署之访问权限
    [转]SQL Server 2008 如何配置报表管理器
    [转]Reporting Services 中的身份验证类型
    [转]Microsoft SQL SERVER 2008 R2 REPORT SERVICE 匿名登录
    [转]EasyUI 日期格式
    chartjs
    [转]分布式中Redis实现Session终结篇
  • 原文地址:https://www.cnblogs.com/rutor/p/12803105.html
Copyright © 2011-2022 走看看