閱讀878 返回首頁    go 技術社區[雲棲]


使用jdbc統計和可視化日誌

簡介

mysql作為非常流行的關係型數據庫,很多軟件支持通過mysql傳輸協議和sql語法獲取mysql數據。用戶隻需要對sql語法熟悉,即可完成對接。日誌服務提供了mysql協議查詢和分析日誌數據。用戶可以使用標準mysql客戶端連接到日誌服務,使用標準的sql語法計算和分析日誌。支持mysql傳輸協議的客戶端包括,mysql client,jdbc, Python MySQLdb。例如,我們使用tableau,通過mysql協議連接日誌服務,讀取日誌數據。有兩種場景使用jdbc:

  1. 使用可視化類工具,例如dataV, Tableau, Kibana來通過mysql協議連接日誌服務。
  2. 使用java的jdbc,python的MySQLdb等庫在程序中訪問日誌服務,在程序中處理查詢結果。

本文將介紹如何使用mysql協議和sql語法來計算日誌。

數據樣例

以共享單車日誌為例,日誌內容包括用戶年齡,電量使用量,車輛id,性別,操作延時,緯度,鎖類型,經度,操作類型,操作結果,開鎖方式。數據保存在project:trip_demo的logstore:ebike中。在控製台給logstore的每一列開啟索引和分析功能 。project所在地域是cn-hangzhou

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  

JDBC統計

首先創建一個maven項目,在pom依賴中添加jdbc依賴。

<dependency>
    <groupId>mysql</groupId>
    <artifactId>mysql-connector-java</artifactId>
    <version>5.1.6</version>
</dependency>

新建一個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[]){

         //在這裏修改成你的配置
        final String endpoint = "cn-hangzhou-intranet.sls.aliyuncs.com";//日誌服務內網或VPC域名
        final String port = "10005"; //日誌服務mysql 協議端口
        final String project = "trip-demo";
        final String logstore = "ebike";
        final String accessKeyId = "";
        final String accessKey = "";

        Connection conn = null;
        Statement stmt = null;
        try {
            //步驟1 : 加載jdbc驅動
            Class.forName("com.mysql.jdbc.Driver");

            //步驟2 : 創建一個鏈接
            conn = DriverManager.getConnection("jdbc:mysql://"+endpoint+":"+port+"/"+project,accessKeyId,accessKey);

            //步驟3 : 創建statement
            stmt = conn.createStatement();

            //步驟4 : 定義查詢語句,查詢2017年10月11日全天日誌中滿足條件op = "unlock"的日誌條數,操作平均延時
            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'";

            //步驟5 : 執行查詢條件
            ResultSet rs = stmt.executeQuery(sql);

            //步驟5 : 提取查詢結果
            while(rs.next()){
                //Retrieve by column name

                System.out.print("pv:");
                //獲取結果中的pv
                System.out.print(rs.getLong("pv"));
                System.out.print(" ; avg_latency:");
                //獲取結果中的avg_latency
                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提供數據的展示功能,可以對接日誌服務讀取日誌數據,或展示日誌計算結果。

1. 創建數據源

數據源可以選擇mysql for RDS或者簡單日誌服務,根據自己的需求選擇對應的方式,這裏以mysql協議為例,展示如何接入。

如圖所示,選擇對應的地域,網絡選擇內網,用戶名和密碼填寫accesskey ,可以是主賬號的accessKey,也可以是有權限讀取日誌服務的子帳號accessKey。端口輸入10005,數據庫輸入project名稱。

image.png

2. 創建視圖

image.png

視圖中選擇好業務的模板,然後點擊大屏中的任何一個視圖,右側點擊修改數據,修改視圖的數據源。

image.png

如圖,數據源選擇上文創建的數據庫,輸入查詢的SQL,在上邊的字段映射中,輸入查詢結果和視圖字段的映射關係。

3. 預覽視圖並發布

image.png

點擊預覽,可以查看預覽效果:

image.png

最後更新:2017-10-16 13:33:26

  上一篇:go  【雲棲大會】AliOS Things宣布開源,支持物聯網設備快速上雲
  下一篇:go  這是一個測試信息