背景
我们都知道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'