前置 安装es和logstash 同时es已经建立对应的索引
1、下载再 logstash 目录下后使用 bin/logstash-plugin install logstash-input-jdbc 命令安装jdbc的数据连接插件
2、放入lib下面 mysql-connector-java-5.1.38.jar 依赖
3、新建 last_run_metadata_path 所需要文件(这个文件不同sql使用不同文件)建议放在 conf/run_metadata.d 文件夹下面
4、书写 jdbc.conf 同步数据文档 建议放在conf下面
input
{
stdin {
}
#event - stats
jdbc {
jdbc_connection_string =>
"jdbc:mysql://127.0.0.1:3306/test?autoReconnect=true&useUnicode=true&characterEncoding=UTF-8&zeroDateTimeBehavior=convertToNull"
jdbc_user =>"root"
jdbc_password =>"***"
jdbc_driver_class =>"com.mysql.jdbc.Driver"
#数据库连接jar
jdbc_driver_library =>"/usr/local/server/ucenter-elk/logstash-5.2.2/lib/mysql-connector-java-5.1.38.jar"
#分页同步 开启
jdbc_paging_enabled =>"true"
jdbc_page_size =>"50000"
#基本配置
use_column_value =>true
clean_run =>"false"
#开启增量同步操作
record_last_run =>true
#定时字段 各字段含义(由左至右)分、时、天、月、年,全部为 * 默认含义为每分钟都更新
schedule =>"*/1 * * * *"
jdbc_default_timezone =>"Asia/Shanghai"
#记录的最后同步列 将值赋值给 sql_last_value
tracking_column =>"id"
#记录同步的数值 最后文件名称为数据库加表名
last_run_metadata_path =>
"/usr/local/server/ucenter-elk/logstash-5.2.2/config/run_metadata.d/zcd_event_statistics"
#sql 语句
statement =>"select * from zcd_event_statistics where id > :sql_last_value"
#设定ES索引类型
add_field =>{"[@metadata][type]" =>"event-stats"}
}
}
filter
{
json {
source =>"message"
remove_field => ["message"]
}
mutate {
#过滤传输到ES字段 logstash会默认生成这两个
remove_field => ["@timestamp", "@version"]
}
}
output
{
if[@metadata][type] =="event-stats" {
elasticsearch {
#ESIP地址与端口 hosts 映射方式
hosts =>"172.20.4.76:9250"
#ES索引名称(自己定义的)
index =>"event-stats"
#ES类型名称
document_type =>"event-stats"
#自增ID编号
document_id =>"%{id}"
}
}
stdout {
#以JSON格式输出
codec =>json_lines
}
}
5、启动
bin/logstash -f config/ucenter_es_jdbc.conf
守护后台启动
nohup bin/logstash -f config/ucenter_es_jdbc.conf >>/dev/null 2>&1 &
启动之后会有error 报出
直接bin/logstash 启动的时候,有个plugin要从stdin里面读数据
而一旦用了nohup,表明stdin就是空了,自然会报 bad file descriptor这个错。
解决的方法,一个是把logstash安装成服务,另外一个在启动时加个参数
nohup bin/logstash -f config.d/ucenter_es_jdbc.conf 0</dev/null >>/dev/null 2>&1 &