LogServiceをDataVのデータソースに登録する

こんにちは、エンジニアのななみんです!
みなさん、DataVのデータソースとしてLogServieが選択できることをご存知でしょうか?
2018年時点でLogServiceをDataVのデータソースとして使用することはできていたようなのですが、
連携方法が見当たらなかったため、連携方法をご紹介したいと思います!

DataVとは

DataVは様々なプロダクトと連携し、データを可視化することができるツールです。
Alibaba Cloudのプロダクト以外とも連携できることから、とても便利なツールとなっています!
DataVの活用方法については、過去記事をご参照ください。

www.sbcloud.co.jp

LogServiceとは

LogServiceは、大量のログデータを収集・分析するツールです。
LogServiceの活用方法については、過去記事をご参照ください。

www.sbcloud.co.jp

www.sbcloud.co.jp

DataVのデータソースとしてLogServiceを登録してみる

さっそく登録していきましょう!

構成

このブログでは、FunctionComputeからデータをLogServiceに送り、
LogServiceをDataVのデータソースとして登録していきます。
f:id:sbc_na234:20200408175501p:plain

LogServiceのデータ準備

事前に、LogServiceでプロジェクトとログストアを作成します。

プロジェクト名 ログストア名
techb-log techb-logstore

LogServiceにデータを送るFunctionComputeのコードは以下です。

# -*- coding: utf-8 -*-
import logging
import json
import datetime
import time 
import random as rd
import os
from aliyun.log.logitem import LogItem
from aliyun.log.logclient import LogClient
from aliyun.log.getlogsrequest import GetLogsRequest
from aliyun.log.putlogsrequest import PutLogsRequest
from aliyun.log.listlogstoresrequest import ListLogstoresRequest
from aliyun.log.gethistogramsrequest import GetHistogramsRequest

def handler(environ, context):
    logger = logging.getLogger()

    endpoint = 'ap-northeast-1.log.aliyuncs.com' 
    accessKeyId = 'アクセスキーIDを入力' 
    accessKey = 'アクセスキーシークレットを入力'
    project ='techb-log'  #logserviceのプロジェクト名を入力
    logstore = 'techb-logstore' #logserviceのログストア名を入力
   
    client = LogClient(endpoint, accessKeyId, accessKey)
    topic = ""
    source = ""
    logitemList = []
   
    for i in range(10):
        rd_loc = [rd.randint(0,10),rd.randint(0,10),rd.randint(0,10),rd.randint(0,10),rd.randint(0,10),rd.randint(0,10),rd.randint(0,10),rd.randint(0,10),rd.randint(0,10),rd.randint(0,10),]
        for j in range(10):
            #location = location[j]
            status = str(rd_loc[j])
            location = "location"+str(j+1)
            location.encode()
            contents = [("location", location),("status",status)]

            print(contents)
            logItem = LogItem()
            logItem.set_time(int(time.time()))
            logItem.set_contents(contents)
            logitemList.append(logItem)
            req = PutLogsRequest(project, logstore, topic, source, logitemList)
            res = client.put_logs(req)
            res.log_print()

この関数ではlocationと、statusという値をLogServiceに送っています。
location1~10に対応して、statusが0~9でランダムに発生します。
この関数を実行し、LogServiceをみてみましょう!

f:id:sbc_na234:20200408164134p:plain

確かにデータが入っていることがわかりました。
今回は、status=0の時を異常とし、location毎に異常件数を集計したいと思います。
対象データを取るためのクエリは以下です。クエリを実行すると円グラフが表示されました。
クエリの記載方法については公式ドキュメントをご参照ください。

status = 0  | SELECT location as "場所", count(1) as "異常件数" GROUP BY location order by location

f:id:sbc_na234:20200408170730p:plain

jp.alibabacloud.com

DataVと連携

次に、DataVのデータソースとしてLogServiceを登録していきます。
データソースタイプでSLS(LogService)を選択し、必要な情報を入力します。
EndPointには、http://またはhttps://をつける必要があることにご注意ください!

f:id:sbc_na234:20200409110118j:plain

データソースの登録が完了したら、ダッシュボード編集をしていきます。
円グラフを選択し、データを先ほど登録したものに変更していきます。
LogServiceのプロジェクトのどの部分のデータを使用するかを指定するために、
データタブでクエリを記入する必要があります。
from、toでデータのreceive_timeを記入し、グラフに表示するデータを指定しています。
query部分は、先ほどLogServiceで入力したものを参考に記載していきます。

{
  "projectName": "techb-log",
  "logStoreName": "techb-logstore",
  "topic": "",
  "from": "1586323367",
  "to": "1586330207",
  "query": "status = 0  | SELECT location as x, count(1) as y GROUP BY location order by location",
  "line": 100,
  "offset": 0
}

f:id:sbc_na234:20200408181949p:plain

DataVでLogServiceのデータを表示することができました!

LogServiceのダッシュボード機能とDataV

ご存知の方も多いかと思いますが、LogServiceにはダッシュボード機能があります。
LogServiceにダッシュボードがあるのであれば、わざわざDataVで表示する必要がないのではないか
という感想をお持ちの方もいらっしゃるのではないでしょうか?

LogServiceのダッシュボード機能

このブログでは、DataVのデータソースとしてLogServiceを登録する方法をご紹介するため、簡単なグラフを使いましたが、
LogServiceはログの収集・分析ツールです。ダッシュボードを作成することで、収集したログを可視化することが可能です。
また、ドリルダウン機能があり、より詳細なデータを見ることができます。

www.sbcloud.co.jp


DataV

DataVは、RDSやTableStore,OSSなどのLogService以外のデータソースのデータや、Alibaba Cloud以外のデータと連携し、
同じダッシュボード上に表示することができます。

使用できるグラフの種類が多いことや、グラフの色を簡単に変更することができることから、表現力の高いダッシュボードと言えます。

www.sbcloud.co.jp


このような特性の違いから、
ドリルダウン分析などを使って詳細なデータを見たい方はLogServiceが、
様々なデータを、高い表現力で1枚のダッシュボードから視覚的に把握したい方はDataVが向いています。

LogServiceのダッシュボード機能とDataVを使い分けることで、必要なデータを必要としている人に伝えることができるのではないでしょうか!

最後に

LogServiceをDataVのデータソースとして使用する方法をご紹介しましたが、いかがでしたか?
プロダクトごとの強み、弱みを理解しうまく組み合わせることが大切ですね!
最後まで読んでいただき、ありがとうございました。