ELK从入门到精通(一)——基于Docker使用Logstash


Logstash是什么

Elasticsearch是当前主流的分布式大数据存储和搜索引擎,可以为用户提供强大的全文本检索能力,广泛应用于日志检索,全站搜索等领域。Logstash作为Elasicsearch常用的实时数据采集引擎,可以采集来自不同数据源的数据,并对数据进行处理后输出到多种输出源,是Elastic Stack 的重要组成部分。本文从Logstash的工作原理,使用示例,部署方式及性能调优等方面入手,为大家提供一个快速入门Logstash的方式。

Logstash的工作原理

处理过程

Logstash的数据处理过程主要包括:Inputs, Filters, Outputs 三部分, 另外在Inputs和Outputs中可以使用Codecs对数据格式进行处理。这四个部分均以插件形式存在,用户通过定义pipeline配置文件,设置需要使用的input,filter,output, codec插件,以实现特定的数据采集,数据处理,数据输出等功能

  • (1)Inputs:用于从数据源获取数据,常见的插件如file, syslog, redis, beats 等[详细参考]
  • (2)Filters:用于处理数据如格式转换,数据派生等,常见的插件如grok, mutate, drop, clone, geoip等[详细参考]
  • (3)Outputs:用于数据输出,常见的插件如elastcisearch,file, graphite, statsd等[详细参考]
  • (4)Codecs:Codecs不是一个单独的流程,而是在输入和输出等插件中用于数据转换的模块,用于对数据进行编码处理,常见的插件如json,multiline[详细参考]

执行模型

  • (1)每个Input启动一个线程,从对应数据源获取数据
  • (2)Input会将数据写入一个队列:默认为内存中的有界队列(意外停止会导致数据丢失)。为了防止数丢失Logstash提供了两个特性:
    Persistent Queues:通过磁盘上的queue来防止数据丢失
    Dead Letter Queues:保存无法处理的event(仅支持Elasticsearch作为输出源)
  • (3)Logstash会有多个pipeline worker, 每一个pipeline worker会从队列中取一批数据,然后执行filter和output(worker数目及每次处理的数据量均由配置确定)

安装Logstash

1、下载Logstash镜像

docker pull logstash:7.4.1

2、编辑logstash.yml配置文件

logstash.yml配置文件放在宿主机/data/elk/logstash目录下,内容如下:

1
2
path.config: /usr/share/logstash/conf.d/*.conf
path.logs: /var/log/logstash

3、编辑test.conf文件

test.conf文件放在宿主机/data/elk/logstash/conf.d目录下,内容如下:

1
2
3
4
5
6
7
input {
stdin {}
}

output {
stdout {}
}

4、创建内部网络

docker network create elknetwork

5、启动logstash

1
docker run -dti --restart=always --net elknetwork --log-driver json-file --log-opt max-size=100m --log-opt max-file=2 -p 5044:5044 --name logstash -v /data/elk/logstash/logstash.yml:/usr/share/logstash/config/logstash.yml -v /data/elk/logstash/conf.d/:/usr/share/logstash/conf.d/ logstash:7.4.1

6、查看容器运行状态

docker ps
docker logs -f logstash

7、控制台输入测试

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
hello logstash
/usr/share/logstash/vendor/bundle/jruby/2.5.0/gems/awesome_print-1.7.0/lib/awesome_print/formatter
s/base_formatter.rb:31: warning: constant ::Fixnum is deprecated{
"@version" => "1",
"message" => "hello logstash",
"@timestamp" => 2020-07-22T01:19:17.069Z,
"host" => "0715c3185df9"
}
hello world
{
"@version" => "1",
"message" => "hello world",
"@timestamp" => 2020-07-22T01:19:49.997Z,
"host" => "0715c3185df9"
}

Logstash优势与劣势

优势

Logstash 主要的有点就是它的灵活性,主要因为它有很多插件,详细的文档以及直白的配置格式让它可以在多种场景下应用。我们基本上可以在网上找到很多资源,几乎可以处理任何问题。

劣势

Logstash 致命的问题是它的性能以及资源消耗(默认的堆大小是 1GB)。尽管它的性能在近几年已经有很大提升,与它的替代者们相比还是要慢很多的。这里有 Logstash 与 rsyslog 性能对比以及Logstash 与 filebeat 的性能对比。它在大数据量的情况下会是个问题。

另一个问题是它目前不支持缓存,目前的典型替代方案是将 Redis 或 Kafka 作为中心缓冲池:


文章作者: KavenRan
版权声明: 本博客所有文章除特別声明外,均采用 CC BY 4.0 许可协议。转载请注明来源 KavenRan !
 上一篇
ELK从入门到精通(二)——Logstash 集成 Filebeat 日志采集 ELK从入门到精通(二)——Logstash 集成 Filebeat 日志采集
ELK架构Filebeat 日志数据采集,Logstash 过滤,Elasticsearch 存储,Kibana 展示 Fliebeat日志采集Logstash 致命的问题是它的性能以及资源消耗。Filebeat 是一个轻量级的日志传
2020-08-07
下一篇 
深入浅出了解 OKR(下) 深入浅出了解 OKR(下)
深入浅出了解 OKR(六):复盘是 OKR 的强大引擎 个人 OKR 复盘中,需要对季度的工作进行回顾: 团队 OKR 复盘中,需要关注的点为: 团队 OKR 复盘会也是非常好的文化建设节点,要关注的核心内容为: 组织层级的 OKR 复
2020-06-24
  目录