【ClickHouse連載】LogService - ApsaraDB for ClickHouse データ連携方法

Hi, データエンジニアの大原です。
今回はAlibaba Cloudの国際サイトで提供している ClickHouse で 早速使ってみたい方向けに、クイックスタートとして LogServiceとデータ連携する方法をご紹介します。
LogServiceは、AlibabaCloudが提供する低コストでリアルタイムログ収集から各種ログの一元管理を行うプラットフォームです。

f:id:sbc_ohara:20210714233458p:plain

ClickHouseとは

ClickHouseは非集計データを含む大量のデータを安定的かつ継続しながら集計といったリアルタイム分析を支える列指向の分散型データベースサービスです。 トラフィック分析、広告およびマーケティング分析、行動分析、リアルタイム監視などのビジネスシナリオで幅広く 使用されています。
ApsaraDB for ClickHouseの概要として、詳しいことはこの記事にてまとめています。

www.sbcloud.co.jp

clickhouse.tech

少し前になりますが、LogServiceについての資料をSlideShareへアップロードしていますので、こちらも参考になればと思います。

www.slideshare.net

LogService - ApsaraDB for ClickHouse データ連携について

LogService - ClickHouseのデータ連携方法を記載します。LogServiceのログ配信機能を使用して、LogServiceからClickHouseにデータをインポートします。

前提条件

・Alibaba Cloudのアカウントを持っている
・同一リージョンにある LogService とApsaraDB for ClickHouse を有効化している
・ApsaraDB for ClickHouse でテーブルが作成できる状態になってる


1

1.ClickHouseを準備する

1-1.ClickHouseインスタンスを準備する

この手法は過去の記事でも記載していますが、再掲として記載します。

www.sbcloud.co.jp

1)まずはApsaraDB for ClickHouseインスタンスを作成します。
①VPCを作成

f:id:sbc_ohara:20210716155036p:plain

f:id:sbc_ohara:20210716155113p:plain

②ClickHouseインスタンスを作成
著者は以下のインスタンススペックでインスタンスを作成しています。

ClickHouse version:20.8.7.15
Edition:Single-replica Edition

f:id:sbc_ohara:20210716155212p:plain

f:id:sbc_ohara:20210716155220p:plain

f:id:sbc_ohara:20210716155231p:plain

2)ClickHouseの登録アカウントを作成 インスタンスをクリックし、左側にアカウント管理画面で、アカウントを作成します

f:id:sbc_ohara:20210716155256p:plain

3)ClickHouseクラスターにDMSで接続 ①ClickHouseのインスタンスをクリックし、トップメニューの「Log On to Database」をクリックします

f:id:sbc_ohara:20210716155315p:plain

② DBアカウントとパスワードを入力し、ClickHouseへログイン

f:id:sbc_ohara:20210716155334p:plain

③DMS画面でClickHouseのインスタンスが表示されます

f:id:sbc_ohara:20210716155401p:plain

2.LogServiceでデータ蓄積ら準備をします

2-1.LogServiceのプロジェクト作成

1)AlibabaCloudサイトをログインし、コンソール画面にLogServiceをクリックします。
f:id:sbc_ohara:20210721151619p:plain

2)プロジェクトを作成 ①LogServiceコンソール上から「プロジェクト作成」をクリックします。
f:id:sbc_ohara:20210721151608p:plain

②Clickhouseと同じリージョンを設定します。
f:id:sbc_ohara:20210721151558p:plain

③プロジェクトを作成完了します ここで、project名は logclickhouse にしています。
f:id:sbc_ohara:20210721151723p:plain

3)Logstoreを作成 Logstore名は ch-logstore にしています。

①「OK」をクリックすると、Logstore設定画面が表示されます
f:id:sbc_ohara:20210721151754p:plain

②Web Trackingを「ON」にすることで、Logstoreが作成されます
f:id:sbc_ohara:20210721151805p:plain

4)DataImportを設定します

①Web TrackingImportを選択します
f:id:sbc_ohara:20210721151818p:plain

②データソースを確認します
f:id:sbc_ohara:20210721151833p:plain

③Queryと分析を確認します
f:id:sbc_ohara:20210721151845p:plain

f:id:sbc_ohara:20210721151854p:plain

④ DataImportを作成完了します
f:id:sbc_ohara:20210721151919p:plain

⑤LogStoreを確認します
f:id:sbc_ohara:20210721151931p:plain

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はプロジェクトの概要画面に確認することができます
f:id:sbc_ohara:20210721151945p:plain

①ECSをログインし、下記curl.shスクリプトを作成します

for i in {1..20}
do
    curl --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

f:id:sbc_ohara:20210721153056p:plain

②下記curl.shを実行し、ログデータを生成します

# sh curl.sh

f:id:sbc_ohara:20210721152016p:plain

③ログデータを確認する f:id:sbc_ohara:20210721152027p:plain

3.LogServiceのデータをClickHouseへインポート

3-1.ClickHouseでターゲットテーブルを作成します

1)DMSでClickhouseへ接続します
f:id:sbc_ohara:20210721152042p:plain

f:id:sbc_ohara:20210721152051p:plain

f:id:sbc_ohara:20210721152101p:plain

f:id:sbc_ohara:20210721152113p:plain

2)データベースを作成します

create database if not exists log_clickhouse_demo ON CLUSTER default;  

f:id:sbc_ohara:20210721152132p:plain

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;

f:id:sbc_ohara:20210721152149p:plain

4)分散テーブルを作成します

CREATE TABLE log_single_distribute 
    ON CLUSTER default as log_clickhouse_demo.log_single_local 
    ENGINE = Distributed(default,log_clickhouse_demo,log_single_local,rand());

f:id:sbc_ohara:20210721152206p:plain

3-1.ClickHouseでLog Deliveryタスクを作成します

Log Deliveryは、LogServiceからClickHouseへログを配信する機能です。

www.alibabacloud.com

1)Log Deliveryタスクを作成します
①Clickhouseインスタンスをクリックし、Log Deliveryというメニューをクリックします
f:id:sbc_ohara:20210721152219p:plain

②「CreateLogDeliveryTask」メニューをクリックします
f:id:sbc_ohara:20210721152230p:plain

③LogDeliveryTaskを設定します
f:id:sbc_ohara:20210721152244p:plain

f:id:sbc_ohara:20210721152254p:plain

f:id:sbc_ohara:20210721152304p:plain

f:id:sbc_ohara:20210721152313p:plain

f:id:sbc_ohara:20210721152321p:plain

2)Step 2-2を繰り返し、ログをLogstoreに再度アップロードします

①下記curl.shを実行し、ログデータを生成します

# sh curl.sh

f:id:sbc_ohara:20210721152335p:plain

②ログデータを確認します f f:id:sbc_ohara:20210721152344p:plain

3-2.ClickHouseでログデリバリーを確認します

①ログデータを確認します

SELECT 
    * 
FROM `log_single_distribute` 
LIMIT 20;

f:id:sbc_ohara:20210721152355p:plain

SELECT 
    * 
FROM `log_single_local` 
LIMIT 20;

f:id:sbc_ohara:20210721152407p:plain


最後に

ここまで、LogService - ClickHouseのデータ連携方法を紹介しました。
ApsaraDB for ClickHouseはAlibaba Cloudの様々なプロダクトサービスとシームレスに連携することが出来るので、LogServiceでデータを収集し、ClickHouseで圧縮しながら可視化するのも有効だと思います。(その方が、LogService側でデータを保持するよりずっと安く抑えられます)

Special Thanks, Nancy