Artery平台的Logstash日志

Posted Artery平台

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Artery平台的Logstash日志相关的知识,希望对你有一定的参考价值。

Artery平台即将发布的1.3版本,相比Artery 1.2版本,新增了很多功能。其中一个重要的功能升级,就是引入了ELK日志分析和采集机制,通过Elasticsearch+Logstash+Kibana日志采集工具,对日志进行采集和分析,实现对日志更有效的管理。

本文阐述ELK日志管理工具中Logstash收集日志的工作原理,以及收集Artery平台上工作日志的方法。

Artery平台采用ELK日志管理的优势


Artery 1.3之前版本的不足


Artery1.3之前的版本,对日志的管理和打印,基本采用log4j.properties机制。该机制存在的缺陷如下:

1. 缺乏有效的管理机制,无法系统管理日志记录。

2. 缺乏有效的分析机制,无法通过对日志的分析判断系统的运行状态。

3. 缺乏有效的展示机制,日志输出展示比较困难。

项目组也曾因为客户对某些交易特殊要求,在日志的分析处理以及输出展示上花费了不少精力。所以亟待更有效的日志管理机制。


Artery 1.3引入ELK日志管理系统的优点


新的Artery1.3版本,对日志采集及分析功能,采用了Elasticsearch+Logstash+Kibana的日志管理模式,即ELK机制。主要工作原理是通过将采集的日志建立关键字段索引后,可通过UI进行分散日志的统一管理,并可根据某个索引字段进行汇总统计分析。

ELK日志采集和分析,主要是通过Logstash进行日志采集,并推送至Elasticsearch进行分析,最后在Kibana中进行图形化展示。其中数据分析是Elasticsearch与Kibana的核心模块,Elasticsearch提供分析功能,kibana提供图形渲染功能。

通过ELK日志采集分析系统,建立起了简单高效的对Artery平台的日志管理机制,使整体流程变得更为实用便捷,提高了日志管理的效率。


Logstash收集日志的工作原理


Logstash的插件组成


Logstash根据logstash.conf配置文件对数据源进行数据读取和清洗,并将清洗结果写入指定的目标文件,也可以在Elasticsearch上展示。其基本工作模式如下图所示。


Artery平台的Logstash日志

可以看出,Logstash由输入(Input)、清洗(Filter)和输出(Output)三部分插件构成,所以logstash的配置也分为Input、Filter和Output三部分。

1. Input插件

Input负责从logstash的数据来源中读取数据,并把读取到的数据传递给Filter插件进行过滤和解析。常用的Input插件主要有:

  • stdin——从标准输入中读取数据

  • file——从本地文件中读取数据

  • tcp——从网络中读取数据

  • log4j——从log4j发送过来的信息中数据。

2. Filter插件

Filter插件负责过滤和解析从Input中读取的数据,并将处理过后的数据传递给Output插件输出。常用的Filter插件主要有:

  • grok——通过正则解析任意文本,将非结构化日志数据弄成结构化和方便查询的结构。

  • date——从日志中解析时间,然后使用该时间作为logstash的事件时间戳。

  • mutate——提供了丰富的基础类型数据处理能力,包括类型转换,字符串处理和字段处理等。

  • json——在日志消息中提取和解析JSON 数据结构。

3. Output插件

Output插件负责将Filter处理过的数据输出,常用的Output插件主要有:

  • stdout——将数据输出到标准输出。

  • file——将数据输出到指定的文件中。

  • elasticsearch——将数据输出到Elasticsearch上展示。


Artery平台的Logstash日志

4. Codecs插件

codecs 是基于数据流的过滤器,它可以作为input,output的一部分配置。Codecs可以帮助你轻松的分割发送过来已经被序列化的数据。流行的codecs包括json,msgpack,plain(text)。

  • json——使用json格式对数据进行编码/解码

  • multiline——将汇多个事件中数据汇总为一个单一的行。比如:java异常信息和堆栈信息


要获取更多的配置信息,可以参考Logstash文档中 "plugin configuration"部分。


Logstash命令


Logstash命令,即为将input中定义的输入数据经过Filter定义的规则清洗过后输出到output定义的区域中。

执行比较简单的命令时,可以用logstash-e命令,不写任何配置文件直接执行,如下面两个简单的例子:

将标准输入的内容直接输出到控制台:

logstash -e 'input { stdin { } } output { stdout{} }'

输出效果如下:

Artery平台的Logstash日志

输出内容到Elasticsearch:

logstash -e 'input { stdin { } } output {elasticsearch { host => localhost:9200 } }'

输入与上面的例子相同,输出效果如下:(Elasticsearch默认端口为9200)

Artery平台的Logstash日志

但当配置参数较多时,则需要在bin目录下建立配置文件logstash.conf,在logstash.conf文件中配置Input、Filter和Output插件,并用logstash -f命令执行logstach.conf配置文件,便可按照logstash.conf中的配置收集数据。



Logstash收集Artery日志


要收集Artery平台上产生的日志,将Artery平台上产生的日志文件的路径写入logstash.conf配置文件中,Logstash便可自动手机该路径下的配置文件。示例如下:

Artery平台的Logstash日志

配置完毕后,进入Logstash安装目录的bin目录下,输入命令:

logstash -f logstash.conf

即可开始收集Artery的logs文件夹下产生的Artery工作日志,并传入Elasticsearch展示,如下图所示。

Artery平台的Logstash日志

可以看出,Logstash成功地抓取了Artery平台的日志记录,并将其通过Elasticsearch直观展示。Artery1.3通过引用ELK机制,实现了日志的展示,达到了预期的日志定制化的目的。

本文介绍了ELK日志管理工具中Logstash的工作原理以及收集Artery平台上日志的方法,未来还会进一步介绍如何使用Elasticsearch和Kibana进行日志处理与展示,敬请期待。






Artery平台




以上是关于Artery平台的Logstash日志的主要内容,如果未能解决你的问题,请参考以下文章

Logstash 基础入门

ELK日志分析系统(实例!!!)

ELK 日志分析系统

elk/elasticsearch+fluentd+kibana

Logstash 常用 filter 插件介绍

初探 ELK - 每天5分钟玩转 Docker 容器技术(89)