【问题标题】:How to decode JSON in ElasticSearch load pipeline如何在 ElasticSearch 加载管道中解码 JSON
【发布时间】:2021-03-14 19:25:51
【问题描述】:

我在 AWS 上设置了 ElasticSearch,并尝试将应用程序日志加载到其中。不同之处在于应用程序日志条目是 JSON 格式,例如

{"EventType":"MVC:GET:example:6741/Common/GetIdleTimeOut","StartDate":"2021-03-01T20:46:06.1207053Z","EndDate":"2021-03-01" ,"Duration":5,"Action":{"TraceId":"80001266-0000-ac00-b63f-84710c7967bb","HttpMethod":"GET","FormVariables":null,"UserName":"ZZZTHMXXN"} ...}

所以,我正在尝试解开它。 Filebeatdocs提示有decode_json_fields处理器;但是,我在 Kinbana 中将消息字段作为单个 JSON 字符串获取;什么都没有打开。

我是 ElasticSearch 的新手,但我不会以此为借口不先进行分析。仅作为解释,我不确定哪些信息有助于回答问题。

这里是filebeat.yml

filebeat.inputs:
- type: log
  enabled: true
  paths:
    - /var/opt/logs/**/*.json
processors:
  - add_host_metadata:
    when.not.contains.tags: forwarded
  - add_cloud_metadata: ~
  - add_docker_metadata: ~
  - add_kubernetes_metadata: ~
  - decode_json_fields:
    fields: ["message"]

output.logstash:
    hosts: ["localhost:5044"]

这里是 Logstash 配置文件:

input {
    beats {
        port => "5044"
    }
}
output {
    elasticsearch {
        hosts => ["https://search-blah-blah.us-west-2.es.amazonaws.com:443"]
        ssl => true
        user => "user"
        password => "password"
        index => "my-logs"
        ilm_enabled => false
    }
}

我仍在尝试了解 Logstash 的过滤和 grok 部分,但 似乎 它应该按原样工作。另外,我不确定实际的标签 messages 来自哪里(可能来自 Logstash 或 Filebeat),但它似乎也无关紧要。

更新:AWS documentation 没有给出仅通过 filebeat 加载而不使用 logstash 的示例。 如果我不使用 logstash(只是 FileBeat)并且在 filebeat.yml 中有以下部分:

output.elasticsearch:
    hosts: ["https://search-bla-bla.us-west-2.es.amazonaws.com:443"]

    protocol: "https"
    #index: "mylogs"

    # Authentication credentials - either API key or username/password.
    #api_key: "id:api_key"
    username: "username"
    password: "password"

我收到以下错误: 如果我使用index: "mylogs" - 如果修改了索引名称,则必须设置 setup.template.name 和 setup.template.pattern

如果我不使用索引(那么它会在 ES 中去哪里?)-

无法连接回退(elasticsearch(https://search-bla-bla.us-west-2.es.amazonaws.com:443)):连接标记为失败,因为 onConnect 回调失败:无法从 /_license 端点检索 elasticsearch 许可证,Filebeat 需要 Elasticsearch 的默认分发。请让 Filebeat 可以访问端点,以便它可以验证许可证。: 未经授权的访问,无法连接到 xpack 端点,验证您的凭据

【问题讨论】:

  • Filebeat 配置中的缩进似乎不正确。另外,你为什么需要 Logstash(如果你没有应用任何过滤器,它对你没用),你为什么不直接将数据从 Filebeat 发送到 Elasticsearch?
  • 另外,filebeat 在提供的示例 yml 中遗漏了一个输出部分
  • @AydinK。 - 我添加了 filebeat.yml 中的部分。对不起。 Val - 我修复了缩进(它是从复制到 SO),如果我只使用没有 logstash 的 filebeat,我添加了错误。 使用 logstash,问题似乎更容易了——一切都被加载了,只是没有被解析。没有logstash,问题看起来要复杂得多;)
  • 不知你的yml格式是否正确elastic.co/guide/en/beats/filebeat/current/…
  • Felix,如果通过 logstash 传输通常有效,请按照 Val 建议添加一个过滤器块并使用此 json 插件/过滤器:elastic.co/guide/en/logstash/current/plugins-filters-json.html - 它会自动将 json 解析为 elasticsearch 字段

标签: elasticsearch logstash filebeat aws-elasticsearch


【解决方案1】:

如果通过 logstash 传输通常有效,请添加一个过滤器块,如 cmets 中建议的 Val 并使用此 json 插件/过滤器:elastic.co/guide/en/logstash/current/plugins-filters-json.html - 它自动将json解析成elasticsearch字段

【讨论】:

    猜你喜欢
    • 2018-05-13
    • 1970-01-01
    • 2019-04-18
    • 2014-05-31
    • 2018-05-07
    • 2020-01-24
    • 1970-01-01
    • 2022-12-06
    • 1970-01-01
    相关资源
    最近更新 更多