1. logstash简介
Logstash是一个开源数据收集引擎,具有实时管道功能。Logstash可以动态地将来自不同数据源的数据统一起来,并将数据标准化到你所选择的目的地。
Logstash是一个开源的服务器端数据处理管道,可以同时从多个数据源获取数据,并对其进行转换,然后将其发送到你最喜欢的“存储”。(当然,我们最喜欢的是Elasticsearch)
1.1 输入
- 输入:采集各种样式、大小和来源的数据
数据往往以各种各样的形式,或分散或集中地存在于很多系统中。Logstash 支持各种输入选择 ,可以在同一时间从众多常用来源捕捉事件。能够以连续的流式传输方式,轻松地从您的日志、指标、Web 应用、数据存储以及各种 AWS 服务采集数据.
1.2 过滤器
- 过滤器:实时解析和转换数据
数据从源传输到存储库的过程中,Logstash 过滤器能够解析各个事件,识别已命名的字段以构建结构,并将它们转换成通用格式,以便更轻松、更快速地分析和实现商业价值。
1.3 输出
- 输出:选择你的存储,导出你的数据
尽管 Elasticsearch 是我们的首选输出方向,能够为我们的搜索和分析带来无限可能,但它并非唯一选择。 Logstash 提供众多输出选择,您可以将数据发送到您要指定的地方,并且能够灵活地解锁众多下游用例。
2. logstash安装
# 下载包
wget https://artifacts.elastic.co/downloads/logstash/logstash-5.6.1.tar.gz -o /opt/logstash-5.6.1.tar.gz
# 解压
tar xf /opt/logstash-5.6.1.tar.gz -C /usr/local
- 验证
cd /usr/local/logstash-5.6.1
./bin/logstash -e 'input { stdin{} } output { stdout{} } '
如果展示的一下就为正常,手动输入字符串会打印出来一定格式的数据:
3. logstash几种使用
运行logstash的时候可以指定加载的文件:
./bin/logstash -f xxxx.conf
3.1 标准
- 创建文件 demo01.conf
input {
stdin {
}
}
output {
stdout{
}
}
输入:采用标准的控制台输入, 输出:将采集的日志输出到控制台
- 运行
./bin/logstash -f demo01.conf
3.2 读取文件
- 创建文件 demo03_file.conf
input {
file {
path => "/var/log/nginx/host.access.log"
}
}
output {
stdout{}
}
输入:实时读取nginx的日子文件, 输出:将采集的日志输出到控制台
- 运行
./bin/logstash -f demo03_file.conf
3.3 读取数据库数据
-
需要下载mysql-connector-java-8.0.16.jar repo1.maven.org/maven2/mysq…
-
创建文件 demo04_jdbc.conf
input {
jdbc {
jdbc_connection_string => "jdbc:mysql://node03.xhiteam.com:3306/test?useSSL=false&characterEncoding=utf-8"
jdbc_user => "root"
jdbc_password => "xxxxxx"
jdbc_driver_library => "/data/logstash-7.15.1/config/conf/mysql-connector-java-8.0.16.jar"
jdbc_driver_class => "com.mysql.jdbc.Driver"
statement => "select * from user"
schedule => "* * * * *"
}
}
output{
stdout{}
}
输入:每分钟执行sql语句读取数据库中的数据, 输出:将采集的日志输出到控制台
3.4 读取myqsl中增量数据
- 创建文件 demo05_jdbc.conf
input {
jdbc {
jdbc_connection_string => "jdbc:mysql://node03.xhiteam.com:3306/test?useSSL=false&characterEncoding=utf-8"
jdbc_user => "root"
jdbc_password => "xxxxxx"
jdbc_driver_library => "/data/logstash-7.15.1/config/conf/mysql-connector-java-8.0.16.jar"
jdbc_driver_class => "com.mysql.jdbc.Driver"
schedule => "* * * * *"
jdbc_paging_enabled => "true"
jdbc_page_size => "500"
use_column_value => true
tracking_column => "create_time"
tracking_column_type => "numeric"
last_run_metadata_path => "/data/logstash-7.15.1/config/conf/station.txt"
clean_run => false
statement => "select * from user where create_time > :sql_last_value order by create_time asc"
}
}
output{
stdout{}
}
输入:每分钟执行sql语句,并读取的数据根据create_time判断增量数据, 输出:将采集的日志输出到控制台
3.5 输出json格式的数据
- 创建文件 demo06_out_stdout.conf
input {
file {
path => "/var/log/nginx/host.access.log"
}
}
output {
stdout {
codec => json
id => "id1"
}
}
输入:实时读取nginx的日志文件, 输出:将采集的日志采用json的格式输出到控制台
3.6 将查询的mysql数据,输出到es中
- 创建文件 demo07_out_es.conf
input {
jdbc {
jdbc_connection_string => "jdbc:mysql://node03.xhiteam.com:3306/test?useSSL=false&characterEncoding=utf-8"
jdbc_user => "root"
jdbc_password => "xxxxxx"
jdbc_driver_library => "/data/logstash-7.15.1/config/conf/mysql-connector-java-8.0.16.jar"
jdbc_driver_class => "com.mysql.jdbc.Driver"
schedule => "* * * * *"
jdbc_paging_enabled => "true"
jdbc_page_size => "500"
use_column_value => true
tracking_column => "create_time"
tracking_column_type => "numeric"
last_run_metadata_path => "/data/logstash-7.15.1/config/conf/station.txt"
clean_run => false
statement => "select * from user where create_time > :sql_last_value order by create_time asc"
}
}
output {
stdout {
}
elasticsearch {
action => "index"
hosts=>["192.168.64.129:9200"]
user=>"elastic"
password=>"elastic"
index=>"log_demo07"
document_id=>"%{id}"
}
}
输入:每分钟执行sql语句读取数据, 输出:将采集的日志输出到es中,并且es中的文档id采用数据id
3.7 添加filter
- 创建文件 demo08_filter_grok.conf
input{ stdin{} }
filter{
grok{
match => { "message" => "%{IP:remote_address}" }
}
}
output{
stdout{}
}
输入:标准输入, 输出:标准输出。 过滤器:采用grok插件只要输入的中匹配到了IP格式的文本,则在输出的数据中添加字段remote_address
3.8 自定义过滤器的匹配规则
- 创建文件 demo09_filter_grok2.conf
input{ stdin{} }
filter{
grok{
match => { "message" => "(?<email>([A-Za-z0-9])+\@([A-Za-z0-9\.])+\.([A-Za-z]{2,4}))" }
}
}
output{
stdout{}
}
输入:标准输入, 输出:标准输出。 过滤器:采用grok插件只要输入的中匹配到了自定义的正则规则,则在输出的数据中添加字段email字段
3.8 自定义过滤器加载规则文件
-
创建规则文件夹 patterns
-
进入patterns ,创建文件my_patterns 文件my_patterns的内容如下:
MYEMAIL ([A-Za-z0-9])+\@([A-Za-z0-9\.])+\.([A-Za-z]{2,4})
- 创建文件 demo10_filter_grok2.conf
input{ stdin{} }
filter{
grok{
patterns_dir => ["/data/logstash-7.15.1/config/conf/patterns"]
match => { "message" => "%{IP:remote_address} %{MYEMAIL:my_email}" }
}
}
output{ stdout{} }
过滤器:采用加载自定义的正则规则文件夹,则在输出的数据中添加字段email字段