elasticsearch - Fluent-bit - 将 json 日志拆分为 Elasticsearch 中的结构化字段

标签 elasticsearch logging fluentd fluent-bit

我试图在 Fluent-bit 配置中找到一种方法来告诉/强制 ES 以结构化的方式存储纯 json 格式的日志( 日志 位低于来自 docker stdout/stderror) - 请参见图片底部以获得更好的解释。例如,除了(或连同)将日志存储为 log 下的纯 json 条目之外字段,我想单独存储每个属性,如 所示红色 .

过滤器和解析器的文档真的很差而且不清楚。最重要的是 forward输入没有“解析器”选项。我试过 json/docker/regex解析器,但没有运气。我的正则表达式是 here如果我必须使用正则表达式。目前使用 ES (7.1)、Fluent-bit (1.1.3) 和 Kibana (7.1) - 而不是 Kubernetes。

如果有人可以指导我举一个例子或举一个例子,我将不胜感激。

谢谢

{
  "_index": "hello",
  "_type": "logs",
  "_id": "T631e2sBChSKEuJw-HO4",
  "_version": 1,
  "_score": null,
  "_source": {
    "@timestamp": "2019-06-21T21:34:02.000Z",
    "tag": "php",
    "container_id": "53154cf4d4e8d7ecf31bdb6bc4a25fdf2f37156edc6b859ba0ddfa9c0ab1715b",
    "container_name": "/hello_php_1",
    "source": "stderr",
    "log": "{\"time_local\":\"2019-06-21T21:34:02+0000\",\"client_ip\":\"-\",\"remote_addr\":\"192.168.192.3\",\"remote_user\":\"\",\"request\":\"GET / HTTP/1.1\",\"status\":\"200\",\"body_bytes_sent\":\"0\",\"request_time\":\"0.001\",\"http_referrer\":\"-\",\"http_user_agent\":\"curl/7.38.0\",\"request_id\":\"91835d61520d289952b7e9b8f658e64f\"}"
  },
  "fields": {
    "@timestamp": [
      "2019-06-21T21:34:02.000Z"
    ]
  },
  "sort": [
    1561152842000
  ]
}

谢谢

配置文件

[SERVICE]
    Flush        5
    Daemon       Off
    Log_Level    debug
    Parsers_File parsers.conf

[INPUT]
    Name   forward
    Listen 0.0.0.0
    Port   24224

[OUTPUT]
    Name  es
    Match hello_*
    Host  elasticsearch
    Port  9200
    Index hello
    Type  logs
    Include_Tag_Key On
    Tag_Key tag

ssss

最佳答案

解决方法如下。

[SERVICE]
    Flush        5
    Daemon       Off
    Log_Level    debug
    Parsers_File parsers.conf

[INPUT]
    Name         forward
    storage.type filesystem
    Listen       my_fluent_bit_service
    Port         24224

[FILTER]
    Name         parser
    Parser       docker
    Match        hello_*
    Key_Name     log
    Reserve_Data On
    Preserve_Key On

[OUTPUT]
    Name            es
    Host            my_elasticsearch_service
    Port            9200
    Match           hello_*
    Index           hello
    Type            logs
    Include_Tag_Key On
    Tag_Key         tag
[PARSER]
    Name         docker
    Format       json
    Time_Key     time
    Time_Format  %Y-%m-%dT%H:%M:%S.%L
    Time_Keep    On
    # Command      |  Decoder | Field | Optional Action
    # =============|==================|=================
    Decode_Field_As   escaped_utf8    log    do_next
    Decode_Field_As   json       log

关于elasticsearch - Fluent-bit - 将 json 日志拆分为 Elasticsearch 中的结构化字段,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56841754/

相关文章:

Kubernetes:仅将 Fluentd 安装到命名空间

Spring Boot 向 fluentd 发送日志不起作用

elasticsearch - ElasticsearchTemplate-为什么对某些操作隐式使用indexName而对其他操作则隐式使用

c# - 通知 ui wpf 中另一个线程发生了什么的最佳方法?

linux - 如何将控制台打印记录到带有时间戳的文件中

logging - 我在heroku中的日志文件在哪里?

regex - 我的正则表达式是错误的还是 td-agent 的格式行为中存在错误行为?

docker - 使用 Docker 连接到 ElasticSearch 时出现 Kibana 错误 - 无法恢复连接

elasticsearch - Elasticsearch:此映射将是什么样的示例文档?

elasticsearch - Elasticsearch.Net和NEST同时搜索标签的字符串和数组