背景
我们都知道filebeat在采集的时候可以在主配置里面进行设置后就会采集上主机上的hostname作为一个字段,可是实际生产环境经常会遇到一个集群中的节点的hostname都是一样的,如果恰巧不方便修改hostname或者就想知道具体是哪个ip的机器采集上来的日志该怎么办呢,其实很好办我们只需要在每个应用的filebeat配置中写死一个额外的变量如hostip即可。
添加额外的变量有两种方式,其中一种方式经常会导致elasticsearch采集上来的每个hit里面的字段缺少你要额外加的这个变量,但是又不是每条日志都会这样,很随机,我就不介绍这种方式了。
解决方法
其实很简单,把如下添加到你的应用的yml配置中即可,下面我们以hostip字段为例哦,
1 2 3 4 5 |
processors: - add_fields: target: '' fields: hostip: '192.168.1.1' |
其中target字段为空字符串表示把这个额外的hostip字段独立为和默认的message字段同一级在es rest api返回的json串中,你可以根据你们公司的实际业务需求改动这个target的值。
由于yaml这种配置文件的格式极易出错引起不适对我而言,下面把完整的配置贴出来,以免大家弄到生产上出现啥奇怪问题。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 |
- 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' |