logstash:使用logshark来调试logstash及filebeatpipelines(代码片段)

Elastic中国社区官方博客 Elastic中国社区官方博客     2022-12-30     619

关键词:

我们知道 Logstash 及 Filebeat 在 Elasticsearch 数据摄入及清理中起到非常大的作用。它们是常用的工具用来对数据进行处理。我们可以运用 Logstash 丰富的过滤器来处理数据,我们也可以使用 Filebeat 的 processors 来处理数据。

使用这些工具(和其他工具)对管道进行编码是一个高度迭代的过程,特别是在处理 grok 模式以解析非结构化日志时:你获得一些示例数据,将其提供给 input,然后你将重复: 

  • 对管道逻辑进行编码( Logstash 中的过滤器和 Filebeat 中的处理器)
  • 检查输出,直到日志被正确解析。

我一直觉得这个改变管道和检查输出的迭代周期有点慢 — 确保你在 Logstash 和 Filebeat 中都有控制台输出,但你最终会混合这些程序的输出和你的输出,你会肯定会滚动很多。 当然,这两种工具都有文件输出,但在处理包含数百个字段的文档时很容易迷失方向,因为每个文档都写在一行中,没有漂亮的打印。

我们需要一种方法来立即判断我们的管道输出是否正确,打印漂亮且可导航的输出是我的主要要求,如果我们有的话,我们的开发迭代会快得多! 这样的工具不存在。幸运的是,一个开源的项目 Logshark (灵感来自流行的网络检查工具 Wireshark)应运而生。

 

它是一个带有用 Go 编写的终端 UI 的 CLI 应用程序。它通过启动一个小型网络服务器来工作,该服务器通过接受 _bulk 请求模仿 Elasticsearch 的行为,因此你需要做的就是将 Logstash/Filebeat elasticsearch 输出重定向到该工具。

这个工具在更改生产管道时特别方便,因为你可以向管道添加第二个 elasticsearch 输出以检查事件,默认情况下它会收集它看到并接受的前 100 个事件,但丢弃其余的,你可以检查下一个通过点击 r (reset)来刷新它。

它还会告诉您每秒发生的事件数和平均文档大小,当你需要通过调整 bulk/batch 大小来优化吞吐量时,这些信息非常方便,如果你正在从南半球的机器收集日志,这就非常重要发送到北部的 Elasticsearch 集群。

你可以直接使用二进制文件 (<5mb) 或在 docker 上运行它。 UI 可以用于任何可以模拟终端的东西,比如你的常规 Linux 终端、iTerm、tmux、PuTTY 甚至 VSCode。

上手

启动服务器

我们可以参考网站 GitHub - ugosan/logshark: Logshark is a debugger for JSON logs. 下载最新的发布版。

二进制

./logshark --host 0.0.0.0 --port 9200 --max 1000

上述命令将启动一个服务器。它侦听 9200 端口,也就是 Elasticsearch 运行的端口。我们需要停止自己的 Elasticsearch 运行,你运行 Logshark 和 Elasticsearch 在同一个机器上的话。我们使用如下的命令来检查侦听 9200 的端口。

$ sudo lsof -i -P | grep LISTEN | grep 9200
Password:
logshark  69585          liuxg   10u  IPv6 0xe92fabcdd6634ab3      0t0    TCP *:9200 (LISTEN)

docker

docker run -p 9200:9200 -it ugosan/logshark -host 0.0.0.0 -port 9200

docker-compose.yml

version: "3.2"
services:

  logshark:
    image: ugosan/logshark
    tty: true
    stdin_open: true

注意:你不应使用 “docker-compose up”,而应使用 “docker-compose run logshark sh”,因为 docker-compose 不会附加到带有 “up” 的容器。 docker-compose run -p 9200:9200 logshark -port 9200

将的 Logstash 管道的输出指向它

就像普通的 elasticsearch 输出一样。针对 docker 的情况:

input 

filter 

output 
  elasticsearch 
    hosts => ["http://host.docker.internal:9200"]
  
   

使用 docker 时,你可以使用 host.docker.internal 从另一个容器访问 logshark 容器,例如 docker run --rm byrnedo/alpine-curl -v -XPOST -d '"hello":"test"' http:/ /host.docker.internal:9200。

针对非 docker 部署,我们可以使用如下的 logstash.conf 来进行测试:

logstash.conf

input 
    stdin  


filter 

output 
   stdout  codec => rubydebug 

   elasticsearch 
     hosts => ["http://localhost:9200"]
   

在上面,我使用 stdin 来输入我们的文档。我们使用如下的命令来启动 Logstash:

./bin/logstash -f logstash.conf

我们在 console 中打入一些我们喜欢的文字:

我们切换到 Logshark 所在的 terminal:

 

我们可以输入 l 来改变布局:

 我们可以清楚地看到每个输出。它对我们调试 pipeline 非常有用。 

logstash-2-插件配置

配置语法: Logstash必须有一个input和一个output1,处理输入的input 1),从文件录入logstash使用一个名为filewatch的rubygem库来监听文件变化,这个库记录一个.sincedb的数据文件跟踪监听日志文件的当前位置input{file{path=>["/var/log/*.log","... 查看详情

elasticsearch-logstash-kibana(三)配置优化

...,nginx日志格式往往使用的是自定义的格式,我们需要把logstash中的message结构化后再存储,方便kibana的搜索和统计,因此需要对message进行解析。本文采用grok过滤器,使用match正则表达式解析,根据自己的log_format定制。nginx日志格... 查看详情

使用filebeat替换logstash

参考技术Alogstash功能虽然强大,但是基于ruby的配置语法、依赖jdk、消耗系统资源等弊端,使得考虑其他方式来替换logstash,filebeat则是一个完美的替代者配置解释:filebeat.prospectors:定义数据原型input_type:log,指定数据原型为log类... 查看详情

Logstash - grok 使用消息以外的字段

】Logstash-grok使用消息以外的字段【英文标题】:Logstash-grokuseafieldotherthanmessage【发布时间】:2014-09-1505:55:01【问题描述】:我正在使用Logstash转发器从远程服务器接收Log4j生成的日志文件。日志事件的字段包括一个名为“文件”... 查看详情

springboot在docker中无法输出日志到logstash

...的无关)开发webapp,作为container运行在docker容器里,写入Logstash失败,但是本机运行调试的日志都可以写入。因为docker的日志似乎必须使用dockerlogs指令来查看,记录到container目录下,也不知道为什么就是写入不了Logstash。=======202... 查看详情

logstash-配置

参考技术A配置Logstash,你需要创建一个配置文件来指定想要使用的插件和每个插件的设置。可以引用配置中的事件字段,并在事件满足某些条件时使用条件来处理它们。运行logstash时使用-f指定配置文件。每种类型的插件都有一... 查看详情

elk日志处理之使用logstash收集log4j日志

介绍一下如何从Java工程中导出log4J日志到Logstash。一、log4j基础不能免俗的官方介绍:Log4j是一个使用Java语言编写的,可靠、快速、灵活的日志框架(API),使用ApacheSoftwareLicense授权。它被移植到C、C++、C#、Perl、Python、Ruby和Eiffel... 查看详情

logstash grok 模式来监控 logstash 本身

】logstashgrok模式来监控logstash本身【英文标题】:logstashgrokpatterntomonitorlogstashitself【发布时间】:2016-05-0316:07:48【问题描述】:我想将logstash.log日志添加到我的ELK堆栈中,但我总是遇到grokparsefailure。我的模式在http://grokconstructor.a... 查看详情

使用log4jsudp发送数据到logstash

...以完成这个工作的,但今天发现log4js(1.1.1版本)的模块logstashUDP支持通过UDP直接发送数据到logstash,这就更自由了,这样就不用在每台机器上跑fileb 查看详情

开始使用filebeat(代码片段)

...代理的形式安装,并将来自成百上千台机器的数据发送到Logstash或Elasticsearch。(画外音:通俗地理解,就是采集数据,并上报到Logstash或Elasticsearch)Beats对于收集数据非常有用。它们位于你的服务器上,将数据集中在Elasticsearch中... 查看详情

docker安装logstash(代码片段)

使用同版本镜像7.4.11、下载Logstash镜像dockerpulllogstash:7.4.1#查看镜像dockerimages 2、编辑logstash.yml配置文件logstash.yml配置文件放在宿主机/data/elk/logstash目录下,内容如下:path.config:/usr/share/logstash/conf.d/*.confpath.logs:/var/log/logstash ... 查看详情

logstash收集日志,多台机器,必须要多台机器安装部署吗

不是的,logstash有两种模式,一种是server,另一种是client,client就是把当前主机当做日志输入,需要每台都装,而server模式不需要,它是请求远程主机输入日志,也就是当java程序发现有logstash连接上时,就会把日志输进logstash参... 查看详情

jmeter-显示调试日志log

...志记录。如果从GUI运行测试计划,请选择测试元素,然后使用“Help”菜单 Enable loggingorDisablelogging记录。帮助菜单还具有显示GUI和测试元素类名称的选项。您可以使用它们来确定更改日志记录级别的正确属性设置。... 查看详情

如何使用android中的logcat调试程序

...tem.out输出和printStackTrace()输出都在Logcat中,Android开发,建议使用android提供的Log工具类来打印信息。找到Logcat视图的方式:1.Eclipse点击Window。2.ShowView会出来一个对话框。3.点击最下面的other...选项。4.在弹出的界面中点开Android,在列... 查看详情

logstash:通过使用logstash的dns查找来丰富数据(代码片段)

我今天看了一篇文章“ElasticsearchDataEnrichmentwithLogstash:AFewSecurityExamples”。它里面有介绍Logstash的DNS过滤器。感觉是一个很不错的过滤器。但是使用起来不是很直接明了。你可以在Elastic测官方网站DNSfilterplugin来详细查看它的使用方... 查看详情

logstash:通过使用logstash的dns查找来丰富数据(代码片段)

我今天看了一篇文章“ElasticsearchDataEnrichmentwithLogstash:AFewSecurityExamples”。它里面有介绍Logstash的DNS过滤器。感觉是一个很不错的过滤器。但是使用起来不是很直接明了。你可以在Elastic测官方网站DNSfilterplugin来详细查看它的使用方... 查看详情

beats:运用logstash来加工metricbeat数据(代码片段)

在我之前的教程“Logstash:Logstash入门教程(二)”,我详述了如何使用Logstash来处理数据。在那个教程的最后的部分,我也讲述了如何使用Filebeat把数据送到Logstash并对数据进行加工。在今天的教程中,我... 查看详情

在我的代码中使用 Log.d() 或 Log.e()

】在我的代码中使用Log.d()或Log.e()【英文标题】:UsingLog.d()orLog.e()inmycode【发布时间】:2011-11-1023:20:52【问题描述】:我在整个安卓应用程序中都使用了Log.d()和Log.e()来进行调试。我想知道如果我这样发布我的应用程序,用户会看... 查看详情