我在docker容器中运行本地服务器,该容器被设置为使用fluentd作为日志驱动程序。我有docker组合文件,可以在他们自己的容器中运行fluentd,nginx,elasticsearch和kibana。因此,fluentd从我的服务器获取日志,将其传递给elasticsearch并显示在Kibana上。
我的问题是,如何在fluentd (elasticsearch或kibana,如果在fluentd中不可能)解析我的日志来创建新的标签,这样我就可以对它们进行排序并更容易导航。
这是在Kibana中显示的当前日志。现在我想把这个日志字符串‘分解’成新的标签。在这种情况下:
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文件,不包含解析,只是简单的转发
type forward
type elasticsearch
host elasticsearch
logstash_format true
flush_interval 10s我尝试使用正则表达式,这里我尝试解析出logType
@type forward
type stdout
@type parser
format /(?\[([^\)]+)\])/
key_name log
reserve_data false我尝试了其他配置,但都不能解析我的日志。
发布于 2017-02-06 17:27:24
对于任何有类似问题的人,我找到了一个适合我的解决方案。
在fluent.conf文件中新建过滤器将添加标记。例如,如果我想创建一个名为严重性第一步是用regex记录它。示例如下DEBU。
@type record_transformer
enable_ruby
severity ${record["log"].scan(/\[([^\)]+)\]/).last}然后从原始消息中删除:
@type record_transformer
enable_ruby
log ${record["log"].gsub(/\[([^\)]+)\]/, '')}主要部分是:
severity ${record["log"].scan(/\[([^\)]+)\]/).last}其中,severity是新字段record的名称“日志”是原始日志字符串,其中通过regex找到字符串并将其附加到新字段。
log ${record["log"].gsub(/\[([^\)]+)\]/, '')}此命令修改字段日志其中regex被替换为空字符串- deleted。
注意:顺序很重要,因为我们首先必须追加到新字段,然后从原始日志消息中删除字符串(如果需要)。
发布于 2017-01-06 23:15:08
首先,使用以下命令标记您的源代码tag。其次,在match部分包含您的标记键:
include_tag_key true tag_key fluentd_key
这对我很有效。日志将按以下方式进行分类fluentd_key。
发布于 2021-02-25 20:00:14
我们可以使用记录_变压器选项。如下配置所示:
@type record_transformer
enable_ruby true
container_name ${record["kubernetes"]["container_name"]}
namespace ${record["kubernetes"]["namespace_name"]}
pod ${record["kubernetes"]["pod_name"]}
host ${record["kubernetes"]["host"]}这样我们就有了容器_名称、命名空间、pod和host作为标签/标签。然后我们可以进一步使用它。下面是一个示例用例。
@type elasticsearch
host "#{ENV['FLUENT_ELASTICSEARCH_HOST']}"
port "#{ENV['FLUENT_ELASTICSEARCH_PORT']}"
logstash_format true
logstash_prefix ${namespace}_${container_name}
@type file
path /var/log/${container_name}/app.loghttps://stackoverflow.com/questions/41466048
复制相似问题