1、logstash一般整体工作流程:
{ 各种数据源 } ==>input {输入} ==>filter {过滤器} ==>output {输出} ==>{ ES等数据输出端}
说明:就是需要在logstash中添加不同的插件,通过各种插件的组合来实现读取不同来源数据、过滤处理数据功能、输出数据到不同地方。
(1)定义.conf配置文件:
Logstash读取什么数据来源、进行如何过滤、将过滤后数据输出到什么地方,都是通过.conf格式配置文件进行定义的,.conf格式配置文件名称自己设置,默认文件保存的地方在logstash/bin中,如果放置的位置发生变化,需要在logstash.yml配置文件中通过path.config参数进行配置
注意:logstash中conf格式文件中缩进一律使用tab进行严格缩进,conf格式文件使用notepad++修改文件格式为unix格式:
要想实现多少个logstash处理数据的功能,一般就会有多少个对应的配置文件。
(2)查看logstash已安装插件:
在logstash/bin/中的logstash-plugin命令通过list进行查看:
logstash-plugin.bat list结果如下图所示:
(3)安装logstash插件:
根据.conf配置文件的功能,并且根据查看logstash中已安装插件的情况,决定是否需要安装实现.conf配置功能对应的各种插件。
(4)执行logstash命令:
Logstash可执行脚本在logstash/bin/中的logstash
执行logstash语法:
Logstash.bat -f 对应.conf配置文件的绝对路径或相对路径
(5)查看执行结果数据:
根据.conf配置文件中配置的功能需求,到对应的结果输出地方查看logstash执行完毕的结果数据是否正确。
2、Logstash的codec(通用)插件:
logstash-codec-collectd
logstash-codec-dots
logstash-codec-edn
logstash-codec-edn_lines
logstash-codec-es_bulk
logstash-codec-fluent
logstash-codec-graphite
logstash-codec-json
logstash-codec-json_lines
logstash-codec-line
logstash-codec-msgpack
logstash-codec-multiline
logstash-codec-netflow
logstash-codec-oldlogstashjson
logstash-codec-plain
logstash-codec-rubydebug
3、Logstash的input(数据来源)插件:
logstash-input-beats
logstash-input-couchdb_changes
logstash-input-elasticsearch
logstash-input-eventlog
logstash-input-exec
logstash-input-file
logstash-input-ganglia
logstash-input-gelf
logstash-input-generator
logstash-input-graphite
logstash-input-heartbeat
logstash-input-http
logstash-input-http_poller
logstash-input-imap
logstash-input-irc
logstash-input-jdbc
logstash-input-kafka
logstash-input-log4j
logstash-input-lumberjack
logstash-input-pipe
logstash-input-rabbitmq
logstash-input-redis
logstash-input-s3
logstash-input-snmptrap
logstash-input-sqs
logstash-input-stdin
logstash-input-syslog
logstash-input-tcp
logstash-input-twitter
logstash-input-udp
logstash-input-unix
logstash-input-xmpp
logstash-input-zeromq
4、Logstash的filter(数据过滤)插件:
logstash-filter-anonymize
logstash-filter-checksum
logstash-filter-clone
logstash-filter-csv
logstash-filter-date
logstash-filter-dns
logstash-filter-drop
logstash-filter-fingerprint
logstash-filter-geoip
logstash-filter-grok
logstash-filter-json
logstash-filter-kv
logstash-filter-metrics
logstash-filter-multiline
logstash-filter-mutate
logstash-filter-ruby
logstash-filter-sleep
logstash-filter-split
logstash-filter-syslog_pri
logstash-filter-throttle
logstash-filter-urldecode
logstash-filter-useragent
logstash-filter-uuid
logstash-filter-xml
5、Logstash的output(数据输出)插件:
logstash-output-cloudwatch
logstash-output-cloudwatch
logstash-output-csv
logstash-output-elasticsearch
logstash-output-email
logstash-output-exec
logstash-output-file
logstash-output-ganglia
logstash-output-gelf
logstash-output-graphite
logstash-output-hipchat
logstash-output-http
logstash-output-irc
logstash-output-juggernaut
logstash-output-kafka
logstash-output-lumberjack
logstash-output-nagios
logstash-output-nagios_nsca
logstash-output-null
logstash-output-opentsdb
logstash-output-pagerduty
logstash-output-pipe
logstash-output-rabbitmq
logstash-output-redis
logstash-output-s3
logstash-output-sns
logstash-output-sqs
logstash-output-statsd
logstash-output-stdout
logstash-output-tcp
logstash-output-udp
logstash-output-xmpp
logstash-output-zeromq
logstash-patterns-core // 这个是过滤匹配块
6、logstash配置文件实例demo:
input {
jdbc {
# mysql数据库连接驱动jar包地址
jdbc_driver_library => "E:\JavaSoft\logstash\connect_jar\mysql-connector-java-5.1.46-bin.jar"
# mysql驱动类
jdbc_driver_class => "com.mysql.jdbc.Driver"
# mysql连接地址
jdbc_connection_string => "jdbc:mysql://127.0.0.1:3306/test"
# mysql用户名
jdbc_user => "root"
# mysql密码
jdbc_password => "123456"
# 设置当前时区,所有时间类型字段插入es中,存储为0时区时间,读取出来格式化为当前时区,时间字段不会出问题
jdbc_default_timezone => "Asia/Shanghai"
# 处理中文乱码问题
codec => plain { charset => "UTF-8"}
# mysql数据抽取sql语句,按照时间字段增量,那么一定按照增量时间字段升序排列,因为logstash会将最后一条记录时间记录下来作为增量时间分割点
statement => "select * from test_one where insert_time >= :sql_last_value order by insert_time asc"
# 增量同步数据配置开始
# 每次运行是否清除last_run_metadata_path 的记录,如果为true,那么每次都相当于从头开始查询所有的数据库记录
clean_run => false
# 是否记录上次执行结果, 如果为真,将会把上次执行到的 tracking_column 字段的值记录下来,保存到 last_run_metadata_path 指定的文件中
record_last_run => true
# 使用字段值
use_column_value => true
# 追踪字段名称,该字段在Mysql中类型必须为timestamp类型,即带有时区的时间
tracking_column => "insert_time"
# 追踪字段类型
tracking_column_type => "timestamp"
# 上一次运行数据保存路径,建议文件名命名规则:.数据库类型_sync_表名_增量时间字段,文件名强烈添加.前缀,这样在linux中为隐藏文件,不容易被删除。
last_run_metadata_path => "E:\JavaSoft\logstash\logstash-6.5.0\config\.mysql_sync_test_one_insert_time"
# 增量同步数据配置结束
# 数据存储到es中type名称
type => "test"
}
}
output {
elasticsearch {
# 数据存储在es中index名称,从input中传递过来的参数中配置好了
index => "test_one_index"
# 数据存储在es中index内type名称,从input中传递过来的参数中配置好了
document_type => "%{type}"
# 数据存储在es中每条数据的document_id唯一标识符,强烈建议使用mysql数据中主键ID,这样可以实现es中数据更新效果
document_id => "%{id}"
# 访问es地址
hosts => "127.0.0.1:9200"
}
}