logstash介绍


介绍

Logstash是一个数据同步工具,在ELK(Elasticsearch + Logstash + Kibana)技术栈中解决数据同步问题。日常项目中数据主要存储在MYSQL、日志文件中,通过Logstash可以将MYSQL、日志文件、redis等多种数据源的数据同步到ES,这样就可以通过ES搜索数据。

MYSQL同步数据到Elasticsearch,主要有下面几种策略:

  • 双写策略,更新MYSQL数据的同时通过ES API直接写入数据到ES (同步方式)
  • 通过Logstash同步数据到ES (异步方式)
  • 通过订阅MYSQL Binlog,将数据同步到ES (异步方式)

这里主要介绍Logstash如何同步数据。

安装

环境依赖

依赖Java 8 或者 Java 11环境,可以是更高的版本。

压缩包安装

通过下面地址下载最新版本的压缩包(linux/mac系统下载tar.gz, windows下载zip)

https://www.elastic.co/cn/downloads/logstash

将压缩包解压到自定义目录即可。

docker 安装

下载镜像

docker pull logstash:7.5.1

启动

docker run -d --name=logstash logstash:7.5.1

拷贝数据,授予权限

docker cp logstash:/usr/share/logstash /data/elk7/
mkdir /data/elk7/logstash/config/conf.d
chmod 777 -R /data/elk7/logstash

测试

# 切换到安装目录
cd logstash-7.7.1
# 执行命令
bin/logstash -e 'input { stdin { } } output { stdout {} }'

等一会,logstash启动后在控制台输入tizi365.com 按回车,可以看到类似下面的输出

tizi365.com
{
    "@timestamp" => 2020-06-09T15:45:38.147Z,
       "message" => "tizi365.com",
      "@version" => "1",
          "host" => "jogindembp"
}

配置文件

可以将Logstash的配置都写入一个配置文件中,下面是配置文件的格式,主要有三部分组成

# 输入插件配置, 主要配置需要同步的数据源,例如:MYSQL
input {
}
# 过滤器插件配置, 主要用于对输入的数据进行过滤,格式化操作,filter是可选的。
filter {
 }
# 输出插件配置,主要配置同步数据的目的地,例如同步到ES
output {
}

提示:logstash的input、filter、output都是由各种插件组成。

示例1:

input {
    stdin {}
}
output {
    stdout { codec => rubydebug }
}

说明:

这个配置文件的意思是,从控制台标准输入(stdin)接收输入,然后直接将结果在控制台标准输出(stdout)打印出来。

通过配置文件启动logstash

bin/logstash -f test.conf

同步nginx日志到ES

下面是将Nginx的访问日志同步到ES中的配置

配置文件名:logstash-nginx-log.conf

input {
    # 实时监控日志文件的内容,类似tail -f 命令的作用
    file {
        # nginx日志文件路径
        path => [ "/data/nginx/logs/nginx_access.log" ]
        start_position => "beginning"
        ignore_older => 0
    }
}
# 配置过滤器对日志文件进行格式化
filter {
    # 使用grok插件对日志内容进行格式化,提取日志内容,方便转换成json格式
    # %COMBINEDAPACHELOG 是grok插件内置的apache日志内容处理模板,其实就是一些表达式,用来格式日志文本内容,也可以格式化Nginx日志
    grok {
        match => {
            "message" => "%{COMBINEDAPACHELOG}"
        }
    }
}
# 配置输出目的地,这里配置同步到ES中
output {
    elasticsearch {
        # es服务器地址
        hosts => ["127.0.0.1:9200"]
        # 目标索引
        index => "nginx-access"
    }
}

启动logstash

bin/logstash -f logstash-nginx-log.conf

Logstash 工作原理

Logstash同步数据,主要有三个核心环节:inputs → filters → outputs,流程如下图。

inputs模块负责收集数据,filters模块可以对收集到的数据进行格式化、过滤、简单的数据处理,outputs模块负责将数据同步到目的地,Logstash的处理流程,就像管道一样,数据从管道的一端,流向另外一端。

提示:inputs/filters/outputs是通过插件机制扩展各种能力。

inputs

inputs可以收集多种数据源的数据,下面是常见的数据源:

  • file - 扫描磁盘中的文件数据,例如: 扫描日志文件。
  • mysql - 扫描Mysql的表数据
  • redis
  • Filebeat - 轻量级的文件数据采集器,可以取代file的能力。
  • 消息队列kafka、rabbitmq等 - 支持从各种消息队列读取数据。

filters

filters是一个可选模块,可以在数据同步到目的地之前,对数据进行一些格式化、过滤、简单的数据处理操作。

常用的filters功能:

  • grok - 功能强大文本处理插件,主要用于格式化文本内容。
  • drop - 丢弃一些数据

outputs

Logstatsh的最后一个处理节点,outputs负责将数据同步到目的地。

下面是常见的目的地:

  • elasticsearch
  • file - 也可以将数据同步到一个文件中

Codecs

codecs就是编码器,负责对数据进行序列号处理,主要就是json和文本两种编码器。

参考

[1] Logstash 教程

[2] docker安装logstash

[3] Logstash 工作原理



文章作者: Alex
版权声明: 本博客所有文章除特別声明外,均采用 CC BY 4.0 许可协议。转载请注明来源 Alex !
  目录