首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >将字符串转换为JSON,以便在Kibana/Elasticsearch中搜索

将字符串转换为JSON,以便在Kibana/Elasticsearch中搜索
EN

Stack Overflow用户
提问于 2020-08-14 13:17:28
回答 1查看 2.5K关注 0票数 2

我让ElasticsearchFilebeatKibana在Windows机器上运行。Filebeat日志有一个正确的日志文件,并且正在侦听路径。当我查看Kibana中的数据时,它看起来很好。

我的问题是,message字段是一个字符串。

一个日志行的示例:

代码语言:javascript
运行
复制
12:58:09.9608 Trace {"message":"No more Excel rows found","level":"Trace","logType":"User","timeStamp":"2020-08-14T12:58:09.9608349+02:00","fingerprint":"226fdd2-e56a-4af4-a7ff-724a1a0fea24","windowsIdentity":"mine","machineName":"NAME-PC","processName":"name","processVersion":"1.0.0.1","jobId":"957ef018-0a14-49d2-8c95-2754479bb8dd","robotName":"NAME-PC","machineId":6,"organizationUnitId":1,"fileName":"GetTransactionData"}

所以我现在想要的是转换成JSON的字符串,这样就可以在Kibana中搜索,例如level字段。

我已经看过Filebeat了。在那里,我试图启用LogStash。但是,数据不再提供给Elasticsearch。此外,日志文件也不会生成到LogStash文件夹中。

然后我通过安装指南下载了安装指南,但不幸的是我收到了这样的消息:

代码语言:javascript
运行
复制
C:\Users\name\Desktop\logstash-7.8.1\bin>logstash.bat 
Sending
Logstash logs to C:/Users/mine/Desktop/logstash-7.8.1/logs which
is now configured via log4j2.properties ERROR: Pipelines YAML file is
empty. Location:
C:/Users/mine/Desktop/logstash-7.8.1/config/pipelines.yml usage:  
bin/logstash -f CONFIG_PATH [-t] [-r] [] [-w COUNT] [-l LOG]  
bin/logstash --modules MODULE_NAME [-M
"MODULE_NAME.var.PLUGIN_TYPE.PLUGIN_NAME.VARIABLE_NAME=VALUE"] [-t]
[-w COUNT] [-l LOG]   bin/logstash -e CONFIG_STR [-t] [--log.level
fatal|error|warn|info|debug|trace] [-w COUNT] [-l LOG]   bin/logstash
-i SHELL [--log.level fatal|error|warn|info|debug|trace]   bin/logstash -V [--log.level fatal|error|warn|info|debug|trace]  
bin/logstash --help
[2020-08-14T15:07:51,696][ERROR][org.logstash.Logstash    ]
java.lang.IllegalStateException: Logstash stopped processing because
of an error: (SystemExit) exit

编辑:

我试着只使用Filebeat。我在这里说:

代码语言:javascript
运行
复制
processors:
  - add_host_metadata: ~
  - add_cloud_metadata: ~
  - add_docker_metadata: ~
  - add_kubernetes_metadata: ~
  - dissect: 
      tokenizer: '"%{event_time} %{loglevel} %{json_message}"' 
      field: "message" 
      target_prefix: "dissect"
  - decode_json_fields: 
      fields: ["json_message"]

但这给了我:

dissect_parsing_error

删除“at tokenizer”的提示起到了帮助作用。然后我得到了:

我只是刷新了索引,消息就消失了。好的。

但现在的问题是,如何过滤新领域中的某些内容?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2020-08-15 08:38:08

消息说,您的管道配置为空。似乎您还没有配置任何管道。Logstash可以完成这个任务(JSON滤波器插件),但是Filebeat在这里就足够了。如果您不想引入其他服务,这是更好的选择。

它有decode_json_fields选项将事件中包含JSON的特定字段转换为。这是文档

对于将来的情况,您的整个事件都是JSON,在配置json.message_key和相关的json.*选项时,可能会进行解析。

编辑添加的文件节拍片段作为日志行的处理器示例,将其分成三个字段(event_time、loglevel、json_message)。之后,最近提取的字段json_message (其值是以字符串编码的JSON对象)将被破译转换为JSON结构:

代码语言:javascript
运行
复制
 ... 

filebeat.inputs: 
  - type: log 
    paths: 
      - path to your logfile
  
processors: 
  - dissect: 
      tokenizer: '%{event_time} %{loglevel} %{json_message}' 
      field: "message" 
      target_prefix: "dissect"

  - decode_json_fields: 
      fields: ["dissect.json_message"]
      target: ""

  - drop_fields:
      fields: ["dissect.json_message"]


 ... 

如果您想要实践文件拍处理器,请尝试设置正确的事件时间戳,该时间戳取自编码的json,并使用时间戳处理器写入@时间戳。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/63413555

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档