windows中logstash配置文件执行出错,版本是7.17.3。我使用的命令:D:\Logstash\logstash-7.17.3\bin>logstash -f logstash.conf -t
错误信息:
[2024-02-08T16:35:23,163][FATAL][logstash.runner ] The given configuration is invalid. Reason: Expected one of [ \t\r\n], "#", "=>" at line 49, column 8 (byte 1526) after output {
elasticsearch {
hosts => ["http://localhost:9200"]
index => "info"
document_id => "%{p_id}"
doc_as_upsert => true
action => "update"
if
[2024-02-08T16:35:23,165][FATAL][org.logstash.Logstash ] Logstash stopped processing because of an error: (SystemExit) exit
错误信息,大概说的是我output里ES里最后那个if格式的问题,不知道哪里错了,去网上找了很多if的写法格式,都不对。
这是我的配置文件(mysql密码脱敏):
input {
jdbc {
jdbc_driver_library => "D:\Maven\mavenRespo\mysql\mysql-connector-java\5.1.39\mysql-connector-java-5.1.39.jar"
jdbc_driver_class => "com.mysql.jdbc.Driver"
jdbc_connection_string => "jdbc:mysql://localhost:3306/school?useSSL=false"
jdbc_user => "root"
jdbc_password => "xxxxxx"
schedule => "* * * * *"
statement => "SELECT * FROM t_user"
type => "user"
}
jdbc {
jdbc_driver_library => "D:\Maven\mavenRespo\mysql\mysql-connector-java\5.1.39\mysql-connector-java-5.1.39.jar"
jdbc_driver_class => "com.mysql.jdbc.Driver"
jdbc_connection_string => "jdbc:mysql://localhost:3306/school?useSSL=false"
jdbc_user => "root"
jdbc_password => "xxxxxx"
schedule => "* * * * *"
statement => "SELECT * FROM t_pub"
type => "info"
}
jdbc {
jdbc_driver_library => "D:\Maven\mavenRespo\mysql\mysql-connector-java\5.1.39\mysql-connector-java-5.1.39.jar"
jdbc_driver_class => "com.mysql.jdbc.Driver"
jdbc_connection_string => "jdbc:mysql://localhost:3306/school?useSSL=false"
jdbc_user => "root"
jdbc_password => "xxxxxx"
schedule => "* * * * *"
statement => "SELECT * FROM t_comment"
type => "comment"
}
}
filter {
ruby {
code => "event.set('json_data', event.to_hash.to_json)"
}
}
output {
elasticsearch {
hosts => ["http://localhost:9200"]
index => "info"
document_id => "%{p_id}"
doc_as_upsert => true
action => "update"
if [type] == "info"{
# 占位注释,可以为空
}
}
elasticsearch {
hosts => ["http://localhost:9200"]
index => "comment"
document_id => "%{commentId}"
doc_as_upsert => true
action => "update"
if [type] == "comment"{
# 占位注释,可以为空
}
}
redis {
host => "localhost"
port => 6379
key => "user:%{user_id}"
data_type => "string"
codec => json
if [type] == "user"{
# 占位注释,可以为空
}
}
redis {
host => "localhost"
port => 6379
key => "user:%{username}"
data_type => "list"
codec => plain {
format => "%{user_id}"
}
if [type] == "user"{
# 占位注释,可以为空
}
}
redis {
host => "localhost"
port => 6379
key => "info:%{p_id}"
data_type => "string"
codec => json
if [type] == "info"{
# 占位注释,可以为空
}
}
redis {
host => "localhost"
port => 6379
key => "info:userId:%{userId}"
data_type => "list"
codec => plain {
format => "%{p_id}"
}
if [type] == "info"{
# 占位注释,可以为空
}
}
redis {
host => "localhost"
port => 6379
key => "comment:%{commentId}"
data_type => "string"
codec => json
if [type] == "comment"{
# 占位注释,可以为空
}
}
redis {
host => "localhost"
port => 6379
key => "comment:pubId:%{pubId}"
data_type => "list"
codec => plain {
format => "%{commentId}"
}
if [type] == "comment"{
# 占位注释,可以为空
}
}
}
有朋友可以看看是怎么回事吗?我是要把mysql三张表的数据同步到redis和ES中,三张表都要同步到redis,其中两张表(info表和comment表)同步到ES。mysql中的数据是结构化的普通数据,redis和es中是json格式的数据,redis中还保存了一张表中某些字段和主键的映射。