背景

我们都知道filebeat在采集的时候可以在主配置里面进行设置后就会采集上主机上的hostname作为一个字段,可是实际生产环境经常会遇到一个集群中的节点的hostname都是一样的,如果恰巧不方便修改hostname或者就想知道具体是哪个ip的机器采集上来的日志该怎么办呢,其实很好办我们只需要在每个应用的filebeat配置中写死一个额外的变量如hostip即可。

添加额外的变量有两种方式,其中一种方式经常会导致elasticsearch采集上来的每个hit里面的字段缺少你要额外加的这个变量,但是又不是每条日志都会这样,很随机,我就不介绍这种方式了。

解决方法

其实很简单,把如下添加到你的应用的yml配置中即可,下面我们以hostip字段为例哦,

processors:
  - add_fields:
      target: ''
      fields:
        hostip: '192.168.1.1'

其中target字段为空字符串表示把这个额外的hostip字段独立为和默认的message字段同一级在es rest api返回的json串中,你可以根据你们公司的实际业务需求改动这个target的值。

由于yaml这种配置文件的格式极易出错引起不适对我而言,下面把完整的配置贴出来,以免大家弄到生产上出现啥奇怪问题。

- type: log
  enabled: true

  paths:
    - /var/log/nginx/*.log
  fields:
    type: nginx-access

  fields_under_root: true
  encoding: utf-8
  exclude_files: [".gz"]
  ignore_older: 3h

  processors:
  - add_fields:
      target: ''
      fields:
        hostip: '192.168.1.1'
最后修改:2021 年 02 月 27 日 08 : 41 AM