###⓪事前準備
AWS aurora(別のエンジンでもOK)・EC2(OS:Amazon Linux、IAMロール→セキュリティグループは適宜お願いします)・OpensearchをAWSコンソールで作成
###①EC2にSSHログイン
###②EC2にmysqlコネクタをインストール
参考:https://qiita.com/ponsuke0531/items/3ae69a9d477809c00917
###③データベースとテーブルをEC2経由で作成
※以下を実行する前にEC2にcsvファイルをインポートすること
mysql -h (データベースのエンドポイント) -P 3306 -u admin -p --enable-local-infile
CREATE DATABASE sampledb;
use sampledb;
SET character_set_database=utf8mb4;
SET character_set_server=utf8mb4;
create table sampledb (name varchar(10), type varchar(10), resource varchar(10), place varchar(10), sub varchar(10));
load data local infile "/home/ec2-user/sampledataset.csv" into table sampletable fields terminated by ',';
SELECT * FROM sampletable;
###④jdbcコネクタ
wget https://dev.mysql.com/get/Do wnloads/Connector-J/mysql-connector-java-8.0.27.tar.gz
tar xvzf mysql-connector-java-8.0 .27.tar.gz
###⑤logstashとプラグインのインストール(inputプラグインはもともとついてた)
※念のためソースを共有
https://opensearch.org/downloads.html
$wget https://artifacts.opensearch .org/logstash/logstash-oss-with-opensearch-output-plugin-7.16 .2-linux-x64.tar.gz
$tar xvzf logstash-oss-with-opensearch-output-plugin-7.16.2-linux-x64.tar.gz
$logstash-7.16.2/bin/logstash-plugin install logstash-output-opensearch
$logstash-7.16.2/bin/logstash-plugin list | grep -E "jdbc|opensearch"
OpenJDK 64-Bit Server VM warning: Option UseConcMarkSweepGC was deprecated in version 9.0 and will likely be removed in a future release.
logstash-integration-jdbc
tqq logstash-input-jdbc
tqq logstash-filter-jdbc_streaming
mqq logstash-filter-jdbc_static
logstash-output-opensearch
###⑥設定ファイル作成
outputの設定のopensearchドメインエンドポイントの後に443ポートを指定しないとデフォルトで9020ポートに接続してしまうので指定必須
input {
jdbc {
jdbc_driver_library => "/home/ec2-user/mysql-connector-java-8.0.27/mysql-connector-java-8.0.27.jar"
jdbc_driver_class => "com.mysql.jdbc.Driver"
jdbc_connection_string => "jdbc:mysql://(データベースのエンドポイント):3306/sampledb?useSSL=false"
jdbc_user => "admin"
jdbc_password => "password"
schedule => "* * * * *"
statement => "SELECT * FROM sampletable"
jdbc_validate_connection => true
}
}
output {
opensearch {
hosts => ["https://(opensearchドメインエンドポイント):443/"]
user => "user"
password => "password"
index => "sample-%{+yyyy.MM.dd}"
}
}
###⑦データ同期実行
sudo logstash-7.16.2/bin/logstash -f logstash_datapipeline.conf
この手順で基本的にはkibanaのindexに反映されるはず
##エラーメモ
####再度bin/logstash -f logstash_datapipeline.confを実行するとエラーになる
→ プロセスがすでに立ち上がっているため
(エラー:Failed to execute action)
ps ax | grep logstash
sudo kill -9 25831
####コマンド実行できない
→ パスミスってるかサービス立ち上がっていない
sudo systemctl start logstash
sudo systemctl status logstash
####Couldn't find any output plugin named 'opensearch'. Are you sure this is correct?
→ プラグインミスってる
$logstash-7.16.2/bin/logstash-plugin list | grep -E "jdbc|opensearch"
OpenJDK 64-Bit Server VM warning: Option UseConcMarkSweepGC was deprecated in version 9.0 and will likely be removed in a future release.
logstash-integration-jdbc
tqq logstash-input-jdbc
tqq logstash-filter-jdbc_streaming
mqq logstash-filter-jdbc_static
logstash-output-opensearch →これがないと上のエラーになる
####[ERROR] Failed to install template. {:message=>"Got response code '403' contacting Elasticsearch at URL 'https://(opensearchドメインエンドポイント):443/(存在しない何か)'
→ 設定ファイルのjdbc_connection_stringが多分間違えているので要確認
###参考リンク
実現したいことに近い例:
https://www.elastic.co/jp/blog/how-to-keep-elasticsearch-synchronized-with-a-relational-database-using-logstash
https://aws.amazon.com/jp/premiumsupport/knowledge-center/opensearch-connect-filebeat-logstash/
logstash-output-opensearch:
https://opensearch.org/docs/latest/clients/logstash/index/#install-logstash
logstash-integration-jdbc:
https://www.elastic.co/guide/en/logstash/current/plugins-inputs-jdbc.html
jdbcドライバー::
https://dev.mysql.com/downloads/connector/j/
logstashインストールパッケージ:
https://www.elastic.co/jp/downloads/logstash