parsing日志fluentd

我有本地服务器在docker容器中运行,它被设置为使用fluentd作为日志驱动程序。 我有docker撰写文件,在自己的容器中运行fluentd,nginx,elasticsearch和kibana。 所以fluentd从我的服务器取得日志,传递给elasticsearch并显示在Kibana上。

我的问题是,如何parsing我的日志fluentd(elasticsearch或kibana如果不可能在fluentd中)来制作新的标签,所以我可以对它们进行sorting,并且更容易导航。

这是Kibana中显示的当前日志。 现在我想把这个日志string'破解'成新的标签。 在这种情况下:

2017/01/04 13:26:56.574909 UTC (Example deployment.web) [INFO] [GET] /api/device/ 200 10.562379ms 

 date: 2017/01/04 time: 13:26:56.574909 UTC message: (Example deployment.web) logType: [INFO] other: [GET] /api/device/ 200 10.562379ms 

我的docker-compose.yml

 version: "2" services: fluentd: image: fluent/fluentd:latest ports: - "24224:24224" volumes: - ./fluentd/etc:/fluentd/etc command: /fluentd/etc/start.sh networks: - lognet elasticsearch: image: elasticsearch ports: - "9200:9200" - "9300:9300" volumes: - /usr/share/elasticsearch/data:/usr/share/elasticsearch/data networks: - lognet kibana: image: kibana restart: always ports: - "5601:5601" environment: - ELASTICSEARCH_URL=http://localhost:9200 networks: - lognet nginx: image: nginx ports: - "8084:80" logging: driver: fluentd networks: - lognet networks: lognet: driver: bridge 

我的fluent.conf文件,不包含parsing,只是简单的向前

 <source> type forward </source> <match *.*> type elasticsearch host elasticsearch logstash_format true flush_interval 10s </match> 

我尝试与正则expression式,在这里我尝试parsinglogType了

 <source> @type forward </source> <match *.*> type stdout </match> <filter docker.**> @type parser format /(?<logType>\[([^\)]+)\])/ key_name log reserve_data false </filter> 

我尝试了其他configuration,但没有导致parsing我的日志。

对于有类似问题的人,我find了适合我的解决scheme。

在fluent.conf文件中添加新的filter标签。 例如,如果我想创build一个名为severity的新字段,那么第一步是用正则expression式来logging它。

例子是[DEBU]

 <filter *.*> @type record_transformer enable_ruby <record> severity ${record["log"].scan(/\[([^\)]+)\]/).last} </record> </filter> 

然后从原始邮件中删除:

 <filter *.*> @type record_transformer enable_ruby <record> log ${record["log"].gsub(/\[([^\)]+)\]/, '')} </record> </filter> 

主要部分是:

 severity ${record["log"].scan(/\[([^\)]+)\]/).last} 

其中严重性是新字段的名称,record [“log”]是原始日志string,其中通过正则expression式的string被find并附加到新字段。

 log ${record["log"].gsub(/\[([^\)]+)\]/, '')} 

这个命令修改正则expression式被replace为空string的字段日志 – 被删除。

注意:顺序很重要,因为我们首先必须追加到新字段,然后从原始日志消息中删除string(如果需要)。

首先,使用tag标记您的来源。 其次,在比赛部分包括你的标签键:

include_tag_key true tag_key fluentd_key

这对我有用。 日志将被fluentd_key分类。