elasticsearch - Logstash JDBC:更新行问题
问题描述
我在 Logstash 中使用以下 JDBC 代码来更新 Elasticsearch 中已经存在的索引,而无需复制行或将更新的行添加为另一个新行。版本:Elasticsearch、Logstash 和 Kibana 是 v7.1.0。
input {
jdbc {
jdbc_connection_string => "jdbc:sqlserver://DB01:1433;databasename=testdb;integratedSecurity=true"
jdbc_driver_class => "com.microsoft.sqlserver.jdbc.SQLServerDriver"
jdbc_driver_library => "C:\Program Files\sqljdbc_6.2\enu\mssql-jdbc-6.2.2.jre8.jar"
jdbc_user => nil
statement => "SELECT * from data WHERE updated_on > :sql_last_value ORDER BY updated_on"
use_column_value =>true
tracking_column =>updated_on
tracking_column_type => "timestamp"
}
}
output {
elasticsearch { hosts => ["localhost:9200"]
index => "datau"
action=>update
document_id => "%{id}"
doc_as_upsert =>true}
stdout { codec => rubydebug }
}
当我在logstash(logstash -f myfile.conf)中运行上述内容时,出现以下错误。
[2019-08-21T10:46:33,864][ERROR][logstash.outputs.elasticsearch] Failed to insta ll template. {:message=>"Got response code '400' contacting Elasticsearch at URL 'http://localhost:9200/_template/logstash'", :class=>"LogStash::Outputs::Elasti cSearch::HttpClient::Pool::BadResponseCodeError", :backtrace=>["D:/ELK 6.4.0/log stash-6.4.0/logstash-6.4.0/vendor/bundle/jruby/2.3.0/gems/logstash-output-elasti csearch-9.2.0-java/lib/logstash/outputs/elasticsearch/http_client/manticore_adap ter.rb:80:in `perform_request'", "D:/ELK 6.4.0/logstash-6.4.0/logstash-6.4.0/ven dor/bundle/jruby/2.3.0/gems/logstash-output-elasticsearch-9.2.0-java/lib/logstas h/outputs/elasticsearch/http_client/pool.rb:291:in `perform_request_to_url'"...
我哪里错了?
解决方案
}
从此行中删除:
doc_as_upsert =>true}
推荐阅读
- c# - 在 Entity Framework Core 中的第二级过滤
- lua - 尝试使用 HumanoidRootPart 索引布尔值
- javascript - React 中的 Fetch 在 url 之前添加 localhost
- java - 在 CoroutineDispatcher 中调用 CoroutineDispatcher 时应用程序冻结
- swift - 如何知道集合视图大纲何时展开?
- java - 使用没有范围的 RxJava 调用协程
- c++ - 如何从缓冲区创建接收器写入器?
- c# - 如何从 EventActivity 处理程序或除 OnMessageActivityAsync 之外的任何处理程序调用新对话框?
- assembly - Armv8 程序集 cmp 在运行时冻结
- javascript - 集合与有序集合