logstash docker安装
最简单的安装方法,未做数据挂载等,需额外添加参数
- 拉取logstash镜像 (需要与es版本对应)
docker pull logstash:7.9.0
-
构建logstash容器
docker run -d --name logstash --network host --privileged=true logstash:7.9.0
-
使用root用户进入logstash容器内部安装 jdbc 和 elasticsearch 插件
# 使用root用户进入,避免权限问题
docker exec -it --user root logstash bash
# 高版本自带插件,可以先用 logstash-plugin list 查看
# 连接数据库的驱动
logstash-plugin install logstash-input-jdbc
#安装数据输出到es的插件
logstash-plugin install logstash-output-elasticsearch
-
下载jdbc的mysql-connection.jar包
# 创建存放的文件夹,下载并重命名: mkdir -p /usr/share/logstash/package wget -O ./package/mysql-connector-java.jar https://repo1.maven.org/maven2/mysql/mysql-connector-java/8.0.24/mysql-connector-java-8.0.24.jar
-
修改容器内部配置
# 更改logstash.yml文件 vi config/logstash.yml # 修改es节点信息 xpack.monitoring.elasticsearch.hosts: [ "http://127.0.0.1:9200" ]
-
配置文件
vi /usr/share/logstash/pipeline/logstash.conf
input {
stdin { }
jdbc {
# mysql 数据库配置信息
jdbc_connection_string => "jdbc:mysql://192.168.2.104:3306/test"
jdbc_user => "root"
jdbc_password => "root"
# 数据库重连尝试
connection_retry_attempts => "3"
# 数据库连接可用校验超时时间,默认为3600s
jdbc_validation_timeout => "3600"
# 刚刚下载的mysql-connector-java.jar路径
jdbc_driver_library => "/usr/share/logstash/package/mysql-connector-java.jar"
jdbc_driver_class => "com.mysql.jdbc.Driver"
# 开启分页查询(默认是false)
jdbc_paging_enabled => "true"
# 单次分页查询条数(默认100000,字段较多的话,可以适当调整这个数值)
jdbc_page_size => "50000"
# 执行的sql语句
# statement_filepath => "xxx.sql"
# 不复杂的sql也可以直接写sql
statement => "SELECT * FROM data_table"
# 需要记录查询结果某字段的值时,此字段为true,否则默认tracking_colum为timestamp的值
# use_column_value => true
# 是否将字段名转为小写,默认为true(如果具备序列化或者反序列化,建议设置为false)
# lowercase_column_names => false
# 需要记录的字段,同于增量同步,需要是数据库字段
# tracking_column => id
# 记录字段的数据类型
# tracking_column_type => numeric
# 上次数据存放位置
# record_last_run => true
# 上一个sql_last_value的存放路径,必须在文件中指定字段的初始值
# last_run_metadata_path => "/etc/logstash/pipeline/cache/products.txt"
# 是否清除last_run_metadata_path的记录,需要增量同步这个字段的值必须为false
# clean_run => false
# 同步的频率(分 时 天 月 年)默认为每分钟同步一次
schedule => "* * * * *"
}
}
output {
# JSON格式输出
stdout {
codec => json_lines
}
elasticsearch {
# es配置信息
hosts => "192.168.213.128:9200"
# es索引(先创建索引)
index => "my_index"
# 7.x 版本移除了 type,type 相关的所有内容全部变成 Deprecated
# 为了兼容升级和过渡,所有的 7.x 版本 es 数据写入后 type 字段都默认被置为 “_doc”
# document_type => "_doc"
# 主键名称(类似数据库主键)
document_id => "%{rid}"
}
}
- 执行(要先创建索引)
./bin/logstash -f /usr/share/logstash/pipeline/logstash.conf
# LogStash 错误:Logstash could not be started because there is already another instance usin
ll -a data/.lock
rm -rf data/.lock