ちぐログ

メモ書きです

SQLServerからLogstashを使ってElasticsearchにデータを投げ込む

今回はSQLServerからElasticsearchにデータを入れていきます。

Elasticsearch1.XではJDBC River Pluginを使用する例をよく見かけますが、Elasticsearch2.0ではRiverが使用できない為、Logstashを使います。

手順

1.Microsoft JDBC Driver 4.2 for SQL Serverをダウンロード

JavaSQLServerに接続する為にJDBCを使う為、下記サイトよりダウンロード。

Download Microsoft JDBC Driver 4.2 for SQL Server、Microsoft JDBC Driver 4.1 for SQL Server、および Microsoft JDBC Driver 4.0 for SQL Server from Official Microsoft Download Center

ダウンロード時に選択肢がでてくるので、sqljdbc_4.2.6420.100_jpn.exeを選択。
実行後の解凍先のパスは後で使用するため覚えておく。

2.Logstashにプラグインをインストール

Logstashがない場合は下記サイトからダウンロードして、適当な場所に解凍。

www.elastic.co

LogstashにJDBCからの入力用プラグインをインストール。

bin\plugin install logstash-input-jdbc

3.Logstash実行用の設定ファイルを作成

今回はlogstash.confというファイル名で作成します。

input {
  jdbc {
    jdbc_driver_library => "C:\Tools\sqljdbc_4.2\jpn\sqljdbc42.jar"
    jdbc_driver_class => "com.microsoft.sqlserver.jdbc.SQLServerDriver"
    jdbc_connection_string => "jdbc:sqlserver://127.0.0.1:1433;user=USER;password=PASSWORD;"
    jdbc_user => "USER"
    jdbc_password => "PASSWORD"
    statement => "SELECT * FROM [ESTest].[dbo].[User]"
  }
}
filter {
}
output {
  elasticsearch {
    hosts => "localhost"
    index => "estest"
    document_type => "user"
  }
  stdout { codec => rubydebug }
}

中身は環境に合わせて書き換えます。

jdbc_driver_library:手順1で解凍したJDBC Driverの中にあるファイルのパス
jdbc_connection_string jdbc_user jdbc_passwordSQLServerの接続情報
statementSQLServerからデータを取得するクエリ
hosts:Elasticsearchの場所
index:Elastcsearchのインデックス名
document_type:Elasticsearchのタイプ名

4.Logstashへデータ投入

今回投入するSQLServerのデータ(1000件)

f:id:chiguniiita:20151119234002j:plain

Elasticsearchを起動した後、Logstashを実行。

bin\logstash -f logstash.conf

実行してしばらくするとデータが取り込まれていく。 下は1000件取り込み終わった状態。

f:id:chiguniiita:20151119235159p:plain

出力にデータの中身が見えるのは、Logstash.confにてstdout { codec => rubydebug }としている為。

5.結果確認

http://localhost:9200/estest/user/_search?pretty

にアクセスすると、Elasticsearchにデータが投入されているのが分かる。
(10件が取得される)

{
  "took" : 120,
  "timed_out" : false,
  "_shards" : {
    "total" : 5,
    "successful" : 5,
    "failed" : 0
  },
  "hits" : {
    "total" : 1000,
    "max_score" : 1.0,
    "hits" : [ {
      "_index" : "estest",
      "_type" : "user",
      "_id" : "AVEgP6FCqw5FrA9tFpKe",
      "_score" : 1.0,
      "_source":{"userid":"2B7CC8B5-C983-4E6D-8618-0CA8CBD8BDE3","name":"Name2","birthday":"2015-11-19 00:00:00 +0900","@version":"1","@timestamp":"2015-11-19T14:56:56.507Z"}
    }, {
 ・
 ・
 ・
    }, {
      "_index" : "estest",
      "_type" : "user",
      "_id" : "AVEgP6FCqw5FrA9tFpLR",
      "_score" : 1.0,
      "_source":{"userid":"8A35BD90-510A-4729-A778-E21D77FBB004","name":"Name53","birthday":"2016-01-09 00:00:00 +0900","@version":"1","@timestamp":"2015-11-19T14:56:57.715Z"}
    } ]
  }
}