elasticsearch logstash在我的索引中只放了一个条目
我有以下日志存储配置文件:elasticsearch logstash在我的索引中只放了一个条目,elasticsearch,logstash,elasticsearch,Logstash,我有以下日志存储配置文件: input { jdbc { jdbc_driver_library => "C:\Program Files\Microsoft JDBC DRIVER 6.2 for SQL Server\sqljdbc_6.2\enu\mssql-jdbc-6.2.1.jre8" jdbc_driver_class => "com.microsoft.sqlserver.jdbc.SQLServerDriver" jdbc_connect
input {
jdbc {
jdbc_driver_library => "C:\Program Files\Microsoft JDBC DRIVER 6.2 for SQL Server\sqljdbc_6.2\enu\mssql-jdbc-6.2.1.jre8"
jdbc_driver_class => "com.microsoft.sqlserver.jdbc.SQLServerDriver"
jdbc_connection_string => "jdbc:sqlserver://TST-DBS-20;user=Elasticsearch;password=elastic123;"
jdbc_user => "Elasticsearch"
statement => "SELECT NewsID, HeadLine, BodyText, DateSubmitted, Approved, NULLIF(UserName,'') as UserName, NULLIF(Type,'') as NewsType, NULLIF(Caption,'') as caption, NULLIF(Author,'') as Author, NULLIF(Contact,'') as Contact, NULLIF(StaffID,'') as StaffID, SocialClubRegionID, DateCreated, CreatedBy, LastModifiedDate, ModifiedBy
FROM [News].[dbo].[News]"
}
}
filter {
}
output {
elasticsearch {
hosts => ["tst-sch-20:9200"]
index => "newsindex"
document_id => "%{id}"
user => "elastic"
password => elastic123
}
stdout { codec => json }
}
我创建了以下索引:
put newsindex
{
"settings" : {
"number_of_shards":3,
"number_of_replicas":2
},
"mappings" : {
"news": {
"properties": {
"NewsId": {
"type": "integer"
},
"newstype": {
"type": "text"
},
"bodytext": {
"type": "text"
}
}
}
}
}
运行上述脚本后,日志存储日志文件中没有任何条目表明发生了任何错误。如果我直接在SQL中运行SQL命令,那么奇怪的是,索引中的单个条目是select语句的最后一个条目,因此几乎就像脚本插入然后覆盖一样,最后我得到了一条记录。如果你查看加载到Elasticsearch中的记录的_id字段,你会看到它是%{id}因为您的查询没有id字段。您需要更改为document_id=>%{newsid}或任何基于您的查询有意义的内容。您知道这一点吗?我知道这些。在我最初的测试中,我没有使用这两种方法中的任何一种,我按照上面的方法使用,但是使用了一个测试DB,所有这些方法都有效。我在我的声明下面添加了跟踪栏,这并没有造成任何影响。有趣。现在,我添加了use_column_value和Bang index,其中填充了预期的记录量。查询数据库的计数与kibana中显示的计数相匹配。在我最初的测试数据库上,我创建了一个包含许多列的表,并用500条记录填充了该表。我用上面的格式编写了我的.conf文件,一切都正常。这里唯一的区别是,我正在运行最新版本的logstash,因此可能他们不知何故收紧了它。我注意到了这一点,并将文档id更改为与您的示例相同。我仍然只收到索引中的最后一条记录。在再次运行之前,我销毁并重新创建了索引,以确保运行干净,但这没有什么区别。加载的事件是什么样子的?它有一个newsid字段还是newsid?除非您设置了小写的列名称,否则默认的字段名称看起来是小写的。DB声明为newsid,但通过Kibana查看显示newsid更新了我对%{newsid}的回答。您可以通过根据文档更改小写的列名称设置来更改大小写行为。