当前位置: 首页 > 面试题库 >

使用filebeat,logstash和elasticsearch将json格式的日志发送到kibana?

厉高逸
2023-03-14
问题内容

我有这样的日志:

{"logId":"57aaf6c8d32fb","clientIp":"127.0.0.1","time":"03:11:29 pm","uniqueSubId":"57aaf6c98963b","channelName":"JSPC","apiVersion":"v1","modulName":null,"actionName":"apiRequest","typeOfError":"","statusCode":"","message":"In Auth","exception":"In Auth","logType":"Info"}

{"logId":"57aaf6c8d32fb","clientIp":"127.0.0.1","time":"03:11:29 pm","uniqueSubId":"57aaf6c987206","channelName":"JSPC","apiVersion":"v2","modulName":null,"actionName":"performV2","typeOfError":"","statusCode":"","message":"in inbox api v2 5","exception":"in inbox api v2 5","logType":"Info"}

我想把他们推到kibana。我正在使用filebeat通过以下配置将数据发送到logstash:

filebeat.yml

 ### Logstash as output
logstash:
# The Logstash hosts
hosts: ["localhost:5044"]

# Number of workers per Logstash host.
#worker: 1

现在使用以下配置,我想更改编解码器类型:

input {

     beats {
     port => 5000
     tags => "beats"
     codec => "json_lines"
     #ssl  => true
     #ssl_certificate => "/opt/filebeats/logs.example.com.crt"
     #ssl_key => "/opt/filebeats/logs.example.com.key"
     }


     syslog {
        type => "syslog"
        port => "5514"

    }

}

但是,我仍然以字符串格式获取日志:

“ message”:“ {\” logId \“:\” 57aaf6c96224b \“,\” clientIp \“:\” 127.0.0.1
\“,\” time \“:\” 03:11:29 pm \“,\ “ channelName \”:\“ JSPC \”,\“ apiVersion
\”:null,\“ modulName \”:null,\“ actionName \”:\“ 404 \”,\“ typeOfError
\”:\\“ EXCEPTION \” ,\“ statusCode \”:0,\“ message \”:\“ 404页面遇到了http:\ / \
/ localjs.com \ / uploads \ / NonScreenedImages \ / profilePic120 \ / 16 \ /
29 \ /
15997002iicee52ad041fed55e952d4e4e4d163d5972ii4c41f8845105429abbe11d330 “,\”
logType \“:\”错误\“}”,

请帮我解决这个问题。


问题答案:

要解析Logstash中从Filebeat发送的JSON日志行,您需要使用json过滤器而不是编解码器。这是因为Filebeat将其数据作为JSON发送,并且您的日志行的内容包含在该message字段中。

Logstash配置:

input {
  beats {
    port => 5044
  }   
}

filter {
  if [tags][json] {
    json {
      source => "message"
    }   
  }   
}

output {
  stdout { codec => rubydebug { metadata => true } } 
}

Filebeat配置:

filebeat:
  prospectors:
    - paths:
        - my_json.log
      fields_under_root: true
      fields:
        tags: ['json']
output:
  logstash:
    hosts: ['localhost:5044']

在Filebeat配置中,我向事件添加了“ json”标签,以便可以有条件地将json过滤器应用于数据。

Filebeat 5.0能够在不使用Logstash的情况下解析JSON,但是目前它仍是Alpha版本。这篇标题为“
使用Filebeat进行结构化日志记录”的博客文章演示了如何使用Filebeat 5.0解析JSON。



 类似资料:
  • 我是docker和所有这些日志记录的新手,所以可能我犯了一个stuipd错误,所以提前感谢您的帮助。我让麋鹿通过Dockerfile行运行docker容器(6.2.2): 在一个单独的容器中,我通过folling Dockerfile行安装并运行Filebeat: 我的Filebeat配置是: 正如你所看到的,我试图在elasticsearch中创建一个自定义索引,但现在我只是想先让默认索引正常工

  • 我在Mac OSX上运行filebeat以及sebp/elk docker镜像。当我在具有完全相同配置的Windows机器上尝试相同的操作时,日志从Filebeat无缝地传送到Logstash。在windows上,当我在启动elk docker容器之前运行filebeat时,它会不断重试以建立与Logstash的连接。在Mac上,filebeat正在启动任何连接。它甚至不会尝试连接到在端口5044

  • 我的ec2实例上运行了几个Docker容器。 我想将这些容器中的日志直接保存到Logstash(弹性云)。 当我试图手动安装Filebeat时,一切正常。我使用 我把它拆开,换了文件。yml配置到 这很好,我可以在Kibana中搜索应用程序“myapp”后找到我的日志。 然而,当我试图从Docker运行Filebeat时,没有成功。 这是我的docker compose中的filebeat部分。y

  • 问题内容: 我有一个测试的Kubernetes集群,我在AWS上创建了elasticsearch,其中包括用于日志管理的Kibana。 端点:https : //search-this-is-my-es- wuktx5la4txs7avvo6ypuuyri.ca-central-1.es.amazonaws.com 据我谷歌搜索,我必须从流利发送日志。然后,我尝试使用本文来实现DaemonSet

  • 在我通过Windows 10上的“Windows子系统Linux 2”运行Ubuntu18.04的本地机器上,我运行的是Elastic 7.3、Kibana 7.3和Elastic 7.3 docker容器。 设置成功,Filebeat似乎可以正确监控容器。但是,Kibana没有显示任何日志。 安装程序 要设置Elastic和Kibana,我使用以下命令 在这两个命令之后,容器Kibana日志显示

  • 我使用的是Spring Boot(1.5.4)。我希望通过RabbitMQ以JSON格式而不是纯文本将服务中的日志发送到Logstash。这将使我不必在Logstash端设置过滤器,以便可以在应用程序端控制格式化(使用Logback编码器)。 我知道RabbitMQ的Spring logback AMQP Appender,但是它使用的是布局(纯文本),而不是格式化的JSON。我想使用LogSta