LogServiceからApsaraDB for ClickHouseへデータ連携する方法
LogServiceからApsaraDB for ClickHouseへデータ連携する方法
本記事では、LogServiceからApsaraDB for ClickHouseへデータ連携する方法をご紹介します。
LogServiceは、AlibabaCloudが提供する低コストでリアルタイムログ収集から各種ログの一元管理を行うプラットフォームです。
ClickHouseとは
ClickHouseは非集計データを含む大量のデータを安定的かつ継続しながら集計といったリアルタイム分析を支える列指向の分散型データベースサービスです。 トラフィック分析、広告およびマーケティング分析、行動分析、リアルタイム監視などのビジネスシナリオで幅広く 使用されています。
少し前になりますが、LogServiceについての資料をSlideShareへアップロードしていますので、こちらも参考になればと思います。
LogService - ApsaraDB for ClickHouse データ連携について
LogService - ClickHouseのデータ連携方法を記載します。LogServiceのログ配信機能を使用して、LogServiceからClickHouseにデータをインポートします。構成図は次の通りです。
前提条件
- Alibaba Cloudのアカウントを持っている
- 同一リージョンにある LogService とApsaraDB for ClickHouse を有効化している
- ApsaraDB for ClickHouse でテーブルが作成できる状態になってる
1.ClickHouseを準備する
1-1.ClickHouseインスタンスを準備する
この手法は過去の記事でも記載していますが、再掲として記載します。
https://sbopsv.github.io/cloud-tech/usecase-ClickHouse/ACH_002_clickhouse-quick-start
1)まずはApsaraDB for ClickHouseインスタンスを作成します。
①VPCを作成
②ClickHouseインスタンスを作成
著者は以下のインスタンススペックでインスタンスを作成しています。
ClickHouse version:20.8.7.15 Edition:Single-replica Edition
2)ClickHouseの登録アカウントを作成
インスタンスをクリックし、左側にアカウント管理画面で、アカウントを作成します
3)ClickHouseクラスターにDMSで接続
①ClickHouseのインスタンスをクリックし、トップメニューの「Log On to Database」をクリックします
② DBアカウントとパスワードを入力し、ClickHouseへログイン
③DMS画面でClickHouseのインスタンスが表示されます
2.LogServiceでデータ蓄積ら準備をします
2-1.LogServiceのプロジェクト作成
1)AlibabaCloudサイトをログインし、コンソール画面にLogServiceをクリックします。
2)プロジェクトを作成
①LogServiceコンソール上から「プロジェクト作成」をクリックします。
②Clickhouseと同じリージョンを設定します。
③プロジェクトを作成完了します
ここで、project名は logclickhouse
にしています。
3)Logstoreを作成
Logstore名は ch-logstore
にしています。
①「OK」をクリックすると、Logstore設定画面が表示されます
②Web Trackingを「ON」にすることで、Logstoreが作成されます
4)DataImportを設定します
①Web TrackingImportを選択します
②データソースを確認します
③Queryと分析を確認します
④ DataImportを作成完了します
⑤LogStoreを確認します
2-2.ログをLogstoreにアップロードする場合について
1)HTTPGetを使ってログデータをLogStoreにアップロードする場合
①HTTPGetのフォーマットは次の通りになります
curl --request GET 'http://${project}.${host}/logstores/${logstore}/track?APIVersion=0.6.0&key1=val1&key2=val2'
・hostはプロジェクトの概要画面に確認することができます
①ECSをログインし、下記curl.shスクリプトを作成します
for i in {1..20}docurl --request GET "http://logclickhouse.ap-northeast-1.log.aliyuncs.com/logstores/ch-logstore/track?APIVersion=0.6.0&__topic__=testforclickhouse&key1=centos&key2=$i"done
②下記curl.shを実行し、ログデータを生成します
# sh curl.sh
③ログデータを確認する
3.LogServiceのデータをClickHouseへインポート
3-1.ClickHouseでターゲットテーブルを作成します
1)DMSでClickhouseへ接続します
2)データベースを作成します
create database if not exists log_clickhouse_demo ON CLUSTER default;
3)ローカルテーブルを作成します
CREATE TABLE log_clickhouse_demo.log_single_local on cluster default(`time` Nullable(DATETIME),`__source__` IPv4,`__tag__:__client_ip__` IPv4,`__receive_time__` Nullable(String),`__topic__` String,`key1` String,`key2` String)ENGINE = MergeTree()ORDER BY __source__ SETTINGS index_granularity = 8192;
4)分散テーブルを作成します
CREATE TABLE log_single_distributeON CLUSTER default as log_clickhouse_demo.log_single_localENGINE = Distributed(default,log_clickhouse_demo,log_single_local,rand());
3-1.ClickHouseでLog Deliveryタスクを作成します
Log Deliveryは、LogServiceからClickHouseへログを配信する機能です。
https://www.alibabacloud.com/cloud-tech/doc-detail/170130.htm
1)Log Deliveryタスクを作成します
①Clickhouseインスタンスをクリックし、Log Deliveryというメニューをクリックします
②「CreateLogDeliveryTask」メニューをクリックします
③LogDeliveryTaskを設定します
2)Step 2-2を繰り返し、ログをLogstoreに再度アップロードします
①下記curl.shを実行し、ログデータを生成します
# sh curl.sh
②ログデータを確認します
3-2.ClickHouseでログデリバリーを確認します
①ログデータを確認します
SELECT*FROM `log_single_distribute`LIMIT 20;
SELECT*FROM `log_single_local`LIMIT 20;
最後に
ここまで、LogService - ClickHouseのデータ連携方法を紹介しました。
ApsaraDB for ClickHouseはAlibaba Cloudの様々なプロダクトサービスとシームレスに連携することが出来るので、LogServiceでデータを収集し、ClickHouseで圧縮しながら可視化するのも有効だと思います。(その方が、LogService側でデータを保持するよりずっと安く抑えられます)