878
技術社區[雲棲]
使用jdbc統計和可視化日誌
簡介
mysql作為非常流行的關係型數據庫,很多軟件支持通過mysql傳輸協議和sql語法獲取mysql數據。用戶隻需要對sql語法熟悉,即可完成對接。日誌服務提供了mysql協議查詢和分析日誌數據。用戶可以使用標準mysql客戶端連接到日誌服務,使用標準的sql語法計算和分析日誌。支持mysql傳輸協議的客戶端包括,mysql client,jdbc, Python MySQLdb。例如,我們使用tableau,通過mysql協議連接日誌服務,讀取日誌數據。有兩種場景使用jdbc:
- 使用可視化類工具,例如dataV, Tableau, Kibana來通過mysql協議連接日誌服務。
- 使用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名稱。
2. 創建視圖
視圖中選擇好業務的模板,然後點擊大屏中的任何一個視圖,右側點擊修改數據,修改視圖的數據源。
如圖,數據源選擇上文創建的數據庫,輸入查詢的SQL,在上邊的字段映射中,輸入查詢結果和視圖字段的映射關係。
3. 預覽視圖並發布
點擊預覽,可以查看預覽效果:
最後更新:2017-10-16 13:33:26