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