elasticsearch logstash在我的索引中只放了一个条目,elasticsearch,logstash,elasticsearch,Logstash" /> elasticsearch logstash在我的索引中只放了一个条目,elasticsearch,logstash,elasticsearch,Logstash" />

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}的回答。您可以通过根据文档更改小写的列名称设置来更改大小写行为。