关于filebieat和IngestNode的一些配置

最近在做项目的过程中,使用filebeat代替logstash做日志收集,用elasticsearch的ingestNode做字段的过滤相关。遇到了不少的坑,记录一下。

首先关于ingestNode代替logstash做字段的提取,请看另一篇博文《filebeat+elasticsearch从massage中提取字段》,地址:http://blog.csdn.net/spring_ming/article/details/62232331

在filebeat提取字段时,需要创建一个pipeline管道,可以在kibana中的devtool里建立新的管道,格式为:

PUT _ingest/pipeline/test-pipeline
{
    "description" : "test-pipeline",
    "processors" : []
}
问题1:不只一种规则的字段提取

在pipeline中提取massage中的字段,例如以下日志格式的提取:
日志示例:

55.3.244.1 GET /index.html 15824 0.043

提取管道格式:

{
  "description" : "test-pipeline",
  "processors" : [
    {
      "grok" :{
        "field" : "message",
        "patterns" :["%{IP:client} %{WORD:method} %{URIPATHPARAM:request} %{NUMBER:bytes} %{NUMBER:duration}"
        ]
      }
    }

  ]
}

当日志文件中不只有一个格式时,elasticsearch就会报错,日志解析就会失败,当我们有多个格式日志时,比如:

55.3.244.1 GET /index.html 15824 0.043
1.201.11.21 POST /index.html 2222 "aaa"

提取管道只需在后面加对应的格式即可:

{
  "description" : "test-pipeline",
  "processors" : [
    {
      "grok" :{
        "field" : "message",
        "patterns" :["%{IP:client} %{WORD:method} %{URIPATHPARAM:request} %{NUMBER:bytes} %{NUMBER:duration}",
        "%{IP:client} %{WORD:method} %{URIPATHPARAM:request} %{NUMBER:bytes} %{QUOTEDSTRING:desc}"
        ]
      }
    }

  ]
}
问题2:在ingestNode中如何使用条件分支

在项目过程中,需要将日志信息中的数字转化为应显示的汉字信息,这就要用到if…条件进行判断,在ingestNode中没有找到对应的管道配置,最好找到了script pipeline,具体配置如下:

{
  "description" : "test-pipeline",
  "processors" : [
    {   "script" : {

                "lang" : "painless",
                "inline" : "if(ctx.id == \"1\"){ctx.fruit = params.param_1}if(ctx.id == \"2\"){ctx.fruit = params.param_2}if(ctx.id == \"3\"){ctx.fruit = params.param_3}if(ctx.id == \"4\"){ctx.fruit = params.param_4},
                "params" : {
                    "param_1" :"苹果",
                    "param_2" :"香蕉",
                    "param_3" :"西瓜",
                    "param_4" :"葡萄"
                }
            }
        }

  ]
}

其中ctx.id是从日志信息中拿出id字段,如果id字段等于1,就添加一个字段fruit值为苹果。这样在最后的elasticsearch输出的信息中,每条日志信息会多出一个字段fruit,它的值为以上赋的值

问题3:在ingestNode中使用geoip解析ip的地理信息

在logstash中使用geoip,请看《kibana使用高德地图》,地址:http://blog.csdn.net/spring_ming/article/details/68060122
而在我们的项目中要只使用filebeat解析ip字段来获取地理位置。具体配置如下:
首先,安装geoip插件:

sudo bin/elasticsearch-plugin install ingest-geoip

其次,配置管道信息:

{
  "description" : "Add geoip info",
  "processors" : [
    {
      "geoip" : {
        "field" : "ip",
        "database_file" : "GeoLite2-City.mmdb.gz"
      }
    }
  ]
}

geoip的具体参数配置见官网:https://www.elastic.co/guide/en/elasticsearch/plugins/5.4/using-ingest-geoip.html

有时候在配置完后geoip在kibana的tilemap中无法使用,这是解析出来的字段不是geo_point格式导致的,简单的办法是将index前缀改为logstash-*,因为logstash默认模版geoip.location为geo_point类型,需要在filebeat.yml中配置:

output.elasticsearch:
index : "logstash-%{+yyyy.MM.dd}"
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值