MySQL は一般的なリレーショナルデータベースです。多くのソフトウェアは、MySQL 転送プロトコルと SQL 構文を使用して MySQL データを取得できます。SQL 構文が解れば、MySQL に接続できます。 Log Service は、ログを照会および分析するための MySQL プロトコルを提供します。 標準 MySQL クライアントを使用して Log Service に接続し、標準 SQL 構文を使用してログを処理および分析することができます。 MySQL 転送プロトコルをサポートするクライアントには、MySQL クライアント、 JDBC、および Python MySQLdb が含まれます。

本ドキュメントでは、自転車シェアリングのログを例として、 JDBC を使って Log Service に接続してログデータを読み取る方法、MySQL プロトコルと SQL 構文を使用してログを計算する方法、 DataV を使用してログデータや計算結果をダッシュボードで視覚化する方法について説明します。

JDBC の利用イメージ

  • MySQL プロトコルを使用して Log Service に接続するために、DataV、Tableau、あるいは Kibana などの可視化ツールを使用します。
  • Java の JDBC あるいは Python の MySQLdb などのライブラリを使用して、 Log Service にアクセスし、プログラム上でクエリ結果を処理します。

データの例

自転車シェアリングのログには、年齢、性別、バッテリー使用量、車両 ID、操作待ち時間、緯度、ロックタイプ、経度、操作タイプ、操作結果、ロック解除方法が含まれます。 データはproject:tripdemoLogstore:ebikeに格納されます。プロジェクトのリージョンは中国 (上海) です。

ログのサンプルは次のとおりです。
Time :10-12 14:26:44
__source__: 11.164.232.105 
__topic__: v1 
age: 55 
battery: 118497.673842 
bikeid: 36 
gender: male 
latency: 17 
latitude: 30.2931185245 
lock_type: smart_lock 
longitude: 120.052840484 
op: unlock 
op_result: ok 
open_lock: bluetooth 
userid: 292

前提条件

コンソールまたは API より、Logstore の各列のインデックスおよび分析機能が有効になっていること。

JDBC 統計

  1. Maven プロジェクトを作成し、pom 依存関係に JDBC ライブラリを追加します。
    <dependency>
     <groupId>MySQL</groupId>
     <artifactId>mysql-connector-java</artifactId>
     <version>5.1.6</version>
    </dependency>
  2. Java クラスを作成し、JDBC をクエリするコード。
    /**
    * Created by mayunlei on 2017/6/19.
    */
    import com.mysql.jdbc.*;
    import java.sql.*;
    import java.sql.Connection;
    import java.sql.Statement;
    /**
    * Created by mayunlei on 2017/6/15.
    */
    public class jdbc {
     public static void main(String args[]){
          //Input your configuration here.
         final String endpoint = "cn-hangzhou-intranet.sls.aliyuncs.com";//Log Service intranet or VPC domain name
         final String port = "10005"; //The MySQL protocol port of Log Service.
         final String project = "trip-demo";
         final String logstore = "ebike";
         final String accessKeyId = "";
         final String accessKey = "";
         Connection conn = null;
         Statement stmt = null;
         try {
             //Step 1: Load the JDBC driver.
             Class.forName("com.mysql.jdbc.Driver");
             //Step 2: Create a link.
             conn = DriverManager.getConnection("jdbc:mysql://"+endpoint+":"+port+"/"+project,accessKeyId,accessKey);
             //Step 3: Create a statement.
             stmt = conn.createStatement();
             //Step 4: Define query statements. Query the number of logs that are generated on October 11, 2017 and meet the condition op = "unlock", and query the average operation latency.
             String sql = "select count(1) as pv,avg(latency) as avg_latency from "+logstore+" " +
                     "where __date__ >= '2017-10-11 00:00:00' " +
                     " and __date__ < '2017-10-12 00:00:00'" +
                     " and op ='unlock'";
             //Step 5: Execute query conditions.
             ResultSet rs = stmt.executeQuery(sql);
             //Step 6: Extract the query result.
             while(rs.next()){
                 //Retrieve by column name
                 System.out.print("pv:");
                 //Obtain pv from the result.
                 System.out.print(rs.getLong("pv"));
                 System.out.print(" ; avg_latency:");
                 //Obtain avg_latency in the result.
                 System.out.println(rs.getDouble("avg_latency"));
                 System.out.println();
             }
             rs.close();
         } catch (ClassNotFoundException e) {
             e.printStackTrace();
         } catch (SQLException e) {
             e.printStackTrace();
         } catch (Exception e) {
             e.printStackTrace();
         } finally {
             if (stmt ! = null) {
                 try {
                     stmt.close();
                 } catch (SQLException e) {
                     e.printStackTrace();
                 }
             }
             if (conn ! = null) {
                 try {
                     conn.close();
                 } catch (SQLException e) {
                     e.printStackTrace();
                 }
             }
         }
     }
    }

DavaV でデータ表示

DataV ダッシュボードでデータを表示できます。Log Service に接続してログデータを読み取り、ログ処理結果を表示します。

  1. データソースの作成

    データソースに、MySQL for RDS または Log Service を選択できます。 次のセクションでは、MySQL を Log Service に接続する方法を説明します。

    図に示すように、リージョンとイントラネットを選択し、ユーザー名とパスワードの AccessKey を入力します。 AccessKey は、Log Service への読み取り権限があるメインアカウントまたはサブアカウントとなることができます。ポートは10005を指定し、データベースにはプロジェクト名を指定します。

    図 1. データのエディタ
  2. ビューの作成

    ビューのサービステンプレートを選択し、ダッシュボードで任意のビューをクリックします。 ビューを右クリックしてデータとデータソースを変更します。

    図に示すように、前の手順で作成したデータベースをデータソースとして選択し、クエリの SQL 文を入力し、上記のフィールドマッピングでは、クエリ結果とビューフィールドの間のマッピング関係を入力します。

    図 2. データベースの選択
  3. ビューのプレビューおよび公開

    プレビューをクリックして表示します。

    図 3. プレビュー