介绍

简介

Logstash 是一款强大的数据处理工具,它可以实现数据传输,格式处理,格式化输出,还有
强大的插件功能,常用于日志处理。官网地址: https://www.elastic.co/products/logstash

框架说明

Logstash工作原理示意图:

logstash_structure.png

  • 输入,以下是常见得输入内容
    • file:从文件系统上的文件读取,与UNIX命令非常相似 tail -0F
    • syslog:在已知端口上侦听syslog消息进行解析
    • redis:使用redis通道和redis列表从redis服务器读取。Redis通常用作集中式Logstash安装中的“代理”,该安装将Logstash事件从远程Logstash“托运人”排队。
    • beats:处理 Beats发送的事件,beats包括filebeat、packetbeat、winlogbeat。
  • 过滤,以下是常见得过滤器
    • grok:解析并构造任意文本。Grok是目前Logstash中将非结构化日志数据解析为结构化和可查询内容的最佳方式。Logstash内置了120种模式,您很可能会找到满足您需求的模式!
    • mutate:对事件字段执行常规转换。您可以重命名,删除,替换和修改事件中的字段。
    • drop:完全删除事件,例如调试事件。
    • clone:制作事件的副本,可能添加或删除字段。
    • geoip:添加有关IP地址的地理位置的信息(也在Kibana中显示惊人的图表!)
  • 输出,以下是常见得输出内容
    • elasticsearch:将事件数据发送给Elasticsearch。如果您计划以高效,方便且易于查询的格式保存数据…… Elasticsearch是您的最佳选择
    • file:将事件数据写入磁盘上的文件。
    • graphite:将事件数据发送到graphite,这是一种用于存储和绘制指标的流行开源工具。http://graphite.readthedocs.io/en/latest/
    • statsd:将事件数据发送到statsd,这是一种“侦听统计信息,如计数器和定时器,通过UDP发送并将聚合发送到一个或多个可插入后端服务”的服务。如果您已经在使用statsd,这可能对您有用!
  • 编解码器
    编解码器基本上是流过滤器,可以作为输入或输出的一部分运行。使用编解码器可以轻松地将消息传输与序列化过程分开。流行的编解码器包括json, multiline等。
    • json:以JSON格式编码或解码数据。
    • multiline:将多行文本事件(例如java异常和堆栈跟踪消息)合并到一个事件中

优点

  • 可伸缩性
    • 支持一组Logstash节点之间进行负载平衡,建议至少使用两个Logstash节点以实现高可用性。
    • 每个Logstash节点只部署一个Beats输入是很常见的,但每个Logstash节点也可以部署多个Beats输入,以便为不同的数据源公开独立的端点。
  • 弹性
    • Logstash持久队列提供跨节点故障的保护。对于Logstash中的磁盘级弹性,确保磁盘冗余非常重要。对于内部部署,建议您配置RAID。在云或容器化环境中运行时,建议您使用具有反映数据SLA的复制策略的永久磁盘。
  • 可过滤
    • 对事件字段执行常规转换。您可以重命名,删除,替换和修改事件中的字段。
  • 可扩展插件生态系统,提供超过200个插件,以及创建和贡献自己的灵活性。

缺点

Logstash耗资源较大,运行占用CPU和内存高。另外没有消息队列缓存,存在数据丢失隐患。

下载安装

安装包模式

Docker模式

  • 下载镜像
  1. docker pull docker.elastic.co/logstash/logstash:6.6.1

启动服务

命令行方式运行

  • 在logstash解压目录下,新建test.conf
    • `vim test.conf```` input { stdin {} }

output { stdout{codec=>rubydebug} }

  1. - logstash测试,执行命令:
  2. ```shell
  3. bin/logstash -f test.conf
  • logstash将会输出日志:
  1. The stdin plugin is now waiting for input:
  2. [2019-02-22T15:30:39,021][INFO ][logstash.agent ] Successfully started Logstash API endpoint {:port=>9600}
  • 输入任意字符串,如test后,控制台将输出处理后的数据:
  1. {
  2. "@version" => "1",
  3. "host" => "gannyee",
  4. "@timestamp" => 2017-09-15T07:30:41.894Z,
  5. "message" => "test"
  6. }
  • 至此,表示logstash已经安装成功了

Docker模式运行

  • 执行命令:
    • -e关键参数:环境变量,定义日志的输入/输出/过滤等的配置信息,和命令行模式下.conf文件作用一样
    • -it: 交互模式运行
  1. docker run -it --rm docker.elastic.co/logstash/logstash:6.6.1 -e 'input { stdin { } } output { stdout { } }'
  • 输入任意字符串,如test后,控制台将输出处理后的数据:
  1. {
  2. "@version" => "1",
  3. "host" => "gannyee",
  4. "@timestamp" => 2017-09-15T07:30:41.894Z,
  5. "message" => "test"
  6. }
  • 至此,表示docker模式logstash已经成功运行

功能使用

配置语法讲解

  • 最基本的配置文件定义,必须包含input 和 output。
    • 修改logstash.conf文件,如下:
  1. # 最基本的配置文件定义,必须包含input 和 output。
  2. input{
  3. stdin{ }
  4. }
  5. output{
  6. stdout{
  7. codec=>rubydebug
  8. }
  9. }
  10. # 如果需要对数据进操作,则需要加上filter段
  11. input{
  12. stdin{ }
  13. }
  14. filter{
  15. # 里面可以包含各种数据处理的插件,如文本格式处理 grok、键值定义 kv、字段添加、
  16. # geoip 获取地理位置信息等等...
  17. }
  18. output{
  19. stdout{
  20. codec=>rubydebug
  21. }
  22. }
  23. # 可以定义多个输入源与多个输出位置
  24. input{
  25. stdin{ }
  26. file{
  27. path => ["/var/log/message"]
  28. type => "system"
  29. start_position => "beginning"
  30. }
  31. }
  32. output{
  33. stdout{
  34. codec=>rubydebug
  35. }
  36. file {
  37. path => "/var/datalog/mysystem.log.gz"
  38. gzip => true
  39. }
  40. }

常见问题

参考资料