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
分类。