一架梯子,一头程序猿,仰望星空!

Logstash 教程


1.简介

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

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

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

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

2.安装

2.1.环境依赖

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

2.2.安装方式

2.2.1. centos

更新key

sudo rpm --import https://artifacts.elastic.co/GPG-KEY-elasticsearch

创建文件 /etc/yum.repos.d/logstash.repo 内容如下

[logstash-7.x]
name=Elastic repository for 7.x packages
baseurl=https://artifacts.elastic.co/packages/7.x/yum
gpgcheck=1
gpgkey=https://artifacts.elastic.co/GPG-KEY-elasticsearch
enabled=1
autorefresh=1
type=rpm-md

安装Logstash

sudo yum install logstash

2.2.2. ubuntu

按顺序执行下面命令

wget -qO - https://artifacts.elastic.co/GPG-KEY-elasticsearch | sudo apt-key add -

sudo apt-get install apt-transport-https

echo "deb https://artifacts.elastic.co/packages/7.x/apt stable main" | sudo tee -a /etc/apt/sources.list.d/elastic-7.x.list

sudo apt-get update && sudo apt-get install logstash

2.2.3. 通过压缩包安装

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

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

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

linux系统例子:

tar -zxvf logstash-7.7.1.tar.gz

3.测试安装

下面验证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"
}

添加config.reload.automatic命令参数,自动加载配置,不需要重新启动logstash

bin/logstash -f tizi.conf --config.reload.automatic

4.配置文件

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

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

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

例子:

创建一个tizi.conf配置文件,内容如下:

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

说明:

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

通过配置文件启动logstash

bin/logstash -f tizi.conf

5.同步nginx日志到ES

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

配置文件名:tizi.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 tizi.conf