Elasticsearchクラスターのデータベースデータのリアルタイム同期(mysql)

ヘルプドキュメント:
jdbc入力プラグイン
https://www.elastic.co/guide/en/logstash/current/plugins-inputs-jdbc.html
リアルタイム同期
https://www.elastic.co/cn/blog/logstash-jdbc -input-plugin#
https://segmentfault.com/a/1190000014387486
出力プラグイン:
https //www.elastic.co/guide/en/logstash/current/output-plugins.html#output-plugins

ESまたはその他のデータ分析処理でデータの低遅延検索を実現します。

Logstashmysqlは準リアルタイムでelasticsearchmysqlと同期されます。
成熟した安定したデータ永続化ソリューションとして、さまざまな分野で広く使用されていますが、データ分析では少し不十分です。Elasticsearchは、データ分析のリーダーとして、これを補うことができます。十分ではありません。mysqlのデータをelasticsearchに同期するだけで、logstashはそれをサポートできます。必要なのは、構成ファイルを書き込むことだけです。

logstashをインストールします。
ここではescluster 6.0.1を使用しているため、logstashも6.0.1です。

wget https://artifacts.elastic.co/downloads/logstash/logstash-6.0.1.zip
unzip logstash-6.2.3.zip && cd logstash-6.0.1

jdbcとelasticsearchプラグインをインストールします

bin/logstash-plugin install logstash-input-jdbc
bin/logstash-plugin install logstash-output-elasticsearch

jdbc mysqlドライバーの
アドレスを取得します:https://dev.mysql.com/downloads/connector/j/3.1.html

wget https://cdn.mysql.com//Downloads/Connector-J/mysql-connector-java-5.1.46.zip
unzip mysql-connector-java-5.1.46.zip

構成ファイルを編集します。logstash-input-jdbcプラグインを使用して、logstash
のconfigディレクトリにある
mysqlデータを読み取ります。このプラグインの動作原理は比較的単純です。SQLを定期的に実行し、SQL実行の結果をストリームに書き込みます。金額の取得方法はbinlogで同期されていませんが、クエリの条件としてインクリメンタルフィールドが使用され、毎回現在のクエリ位置が記録されます。インクリメンタルな性質のため、この期間中は現在のクエリよりも大きいレコードのみを取得できます。 AUTO_INCREMENTのプライマリキーIDとONUPDATE CURRENT_TIMESTAMPのupdate_timeフィールドの2つの一般的な増分フィールドがあります。idフィールドは、挿入されて更新されないテーブルにのみ適用されます。Update_timeの方が一般的です。mysqlテーブルで設計することをお勧めします。毎回update_timeフィールドを追加します

input {
    
    
  jdbc {
    
    
    jdbc_driver_library => "/usr/local/mysql-connector-java-5.1.48/mysql-connector-java-5.1.48-bin.jar"
    jdbc_driver_class => "com.mysql.jdbc.Driver"
    jdbc_connection_string => "jdbc:mysql://192.168.2.16:3306/user?useSSL=false"
    jdbc_user => "root"
    jdbc_password => "Zksw@2019"
    schedule => "* * * * *"
    statement => "SELECT * FROM contacts"
    #statement => "SELECT * FROM table WHERE update_time >= :sql_last_value"
    jdbc_validate_connection => true
    #use_column_value => true
    #tracking_column_type => "timestamp"
    #tracking_column => "t_user"
    #last_run_metadata_path => "syncpoint_table"
  }
}
output {
    
    
       #stdout { codec => json_lines }
       elasticsearch {
    
    
                hosts => "0.0.0.0:9200"
                document_type => "contact"
                #user => "elasticsearch"
                #password => "123456"
                index => "contacts"
                document_id => "%{uid}"
        }
}

フィールドの説明:
jdbc_driver_library jdbcmysqlドライバーのパス。
jdbc_driver_class:ドライバークラスの名前、mysqlはcom.mysql.jdbc.Driverを入力します
jdbc_connection_string:mysqlアドレス
jdbc_user:mysqlユーザー
jdbc_password:mysqlパスワード
スケジュール:sqlの実行タイミング、crontabスケジューリング
ステートメントと同様:実行されるsql、「 : "最初に定義された変数があります。これはパラメーターで設定できます。ここで、sql_last_valueは組み込み変数であり、最後のSQL実行でのupdate_timeの値を表します。
use_column_value:インクリメンタル列の値を使用
tracking_column_type:インクリメンタルフィールドのタイプ、numericは数値タイプを表し、timestampはタイムスタンプタイプを表します
tracking_column:インクリメンタルフィールドの名前、ここではupdate_time列を使用し、この列のタイプはタイムスタンプです
last_run_metadata_path:同期ポイントファイル、これこのファイルは最後の同期ポイントを記録します。このファイルは再起動時に読み取られます。このファイルは手動で変更できます
jdbc_validate_connection:接続プールの構成。使用する前に接続を確認してください。
OUPUT:
ホスト:esクラスターアドレス
ユーザー:esユーザー名
パスワード:esパスワード
index:esにインポートされたインデックスの名前。
document_id:esにインポートされたドキュメントのID(更新されたプライマリキーID)。これをプライマリキーとして設定する必要があります。そうしないと、同じレコードが更新された後に2つのレコードがesに表示されます。%{id}はmysqlテーブルのidフィールドの値を参照します。
document_type:Typeイベント。出力ドキュメントのtpyeタイプを設定するために使用されます。デフォルトのログ

作成されたデータベースはuserと呼ばれ、テーブルはcontactsと呼ばれます。

create table contacts (
    uid serial,
    email VARCHAR(80) not null,
    first_name VARCHAR(80) NOT NULL,
    last_name VARCHAR(80) NOT NULL
);
INSERT INTO contacts(email, first_name, last_name) VALUES('[email protected]', 'Jim', 'Smith');
INSERT INTO contacts(email, first_name, last_name) VALUES(null, 'John', 'Smith');
INSERT INTO contacts(email, first_name, last_name) VALUES('[email protected]', 'Carol', 'Smith');
INSERT INTO contacts(email, first_name, last_name) VALUES('[email protected]', 'Sam', null);

実行:
rootユーザーを使用して実行しないように注意してください。

../bin/logstash -f ./sync_table.cfg

ここに写真の説明を挿入
esビュー:
ここに写真の説明を挿入
更新と挿入をテストして、esがデータベースをリアルタイムで同期するかどうかを確認します。

UPDATE contacts SET last_name = 'Smith' WHERE email = '[email protected]';
UPDATE contacts SET email = '[email protected]' WHERE uid = 3;
INSERT INTO contacts(email, first_name, last_name) VALUES('[email protected]', 'New', 'Smith');

マルチテーブル同期:
logstashインスタンスは、パイプラインメカニズムを使用して複数のテーブルを同期でき、複数の構成ファイルを書き込むだけです。2つの構成ファイルsync_table1.cfgとsync_table2.cfgに対応する2つのテーブルtable1とtable2があるとします。

在 config/pipelines.yml 中配置
- pipeline.id: table1
  path.config: "config/sync_table1.cfg"
- pipeline.id: table2
  path.config: "config/sync_table2.cfg"
直接 bin/logstash 启动即可

@timestampフィールド
デフォルトでは、@ timestampフィールドはlogstash-input-jdbcによって追加されたフィールドです。デフォルトは現在の時刻です。このフィールドはデータ分析に非常に役立ちますが、データ内の特定のフィールドを使用してこのフィールドを指定したい場合があります。現時点では、filter.dateを使用できます。このプラグインは@timestampフィールドを設定するために特に使用されます。たとえば
、@ timestampを表すフィールドtimesliceがあります。Timesliceは%Y%m%d%Hの形式の文字列です。 %M

filter {
    
    
  date {
    
    
    match => [ "timeslice", "yyyyMMddHHmm" ]
    timezone => "Asia/Shanghai"
  }
}

この構成をsync_table.cfgに追加します。これで、@ timestampはタイムスライスと一致します。

キバナでのデータの検索:
一部のデータをElasticsearchに移行する際の重要な機能は、キバナを使用して洞察力のある優れた視覚化を生成できることです。
インストールヘルプドキュメント:https://www.elastic.co/guide/cn/kibana/current/targz.html#targz-configuringConfiguration
ヘルプドキュメント:https://www.elastic.co/guide/cn/kibana/current /settings.html
kibanaヘルプドキュメント:https://www.elastic.co/guide/cn/kibana/current/createvis.html
ダウンロードしてインストール:

wget https://artifacts.elastic.co/downloads/kibana/kibana-6.0.1-linux-x86_64.tar.gz
sha1sum kibana-6.0.1-linux-x86_64.tar.gz
tar -zxf kibana-6.0.1-linux-x86_64.tar.gz 
cd kibana-6.0.1-linux-x86_64/

下载darwin包
wget https://artifacts.elastic.co/downloads/kibana/kibana-6.0.1-darwin-x86_64.tar.gz
tar -zxf kibana/kibana-6.0.1-darwin-x86_64.tar.gz
cd kibana/kibana-6.0.1-darwin-x86_64/

コマンドラインからキバナを起動

./bin/kibana

デフォルトでは、Kibanaはフォアグラウンドで開始し、ログを標準出力(stdout)に出力します。これは、Ctrl-Cコマンドで終了できます。

.tar.gzファイルディレクトリ
.tar.gzパッケージ全体が独立しています。デフォルトでは、すべてのファイルとディレクトリは$ KIBANA_HOME(パッケージが解凍されたときに作成されたディレクトリ)にあります。Kibanaを使用するためにディレクトリを作成する必要がないため、これは非常に便利です。Kibanaをアンインストールするには、$ KIBANA_HOMEディレクトリを削除するだけです。ただし、重要なデータが削除されないように、構成ファイルとデータディレクトリを変更することをお勧めします。

home
Kibana home 目录或 $KIBANA_HOME 。
解压包时创建的目录
bin
二进制脚本,包括 kibana 启动 Kibana 服务和 kibana-plugin 安装插件。
$KIBANA_HOME\bin
config
配置文件,包括 kibana.yml 。
$KIBANA_HOME\config
data
Kibana 和其插件写入磁盘的数据文件位置。
$KIBANA_HOME\data
optimize
编译过的源码。某些管理操作(如,插件安装)导致运行时重新编译源码。
$KIBANA_HOME\optimize
plugins
插件文件位置。每一个插件都有一个单独的二级目录。
$KIBANA_HOME\plugins

設定しkibana設定ファイル:
Kibanaは、デフォルトでは$ KIBANA_HOME /設定/ kibana.ymlから設定ファイルをロードします。
ここに写真の説明を挿入
server.port:5601
kibanaによって開かれたポートserver.host: "0.0.0.0" kibanaリスニングアドレスelasticsearch.url
: "http://192.168.10.181:9200"は、
elasticsearchとの接続を確立しますkibana.index: ".kibana" Elasticsearchに.kibanaインデックスを追加します

ブラウザログイン:http:// ip address:5621
最初のログインにelasticsearchインデックスを追加する必要があります
ここに写真の説明を挿入

おすすめ

転載: blog.csdn.net/ZhanBiaoChina/article/details/105430871
おすすめ