閱讀478 返回首頁    go 阿裏雲 go 技術社區[雲棲]


使用jdbc訪問日誌服務

簡介

一直以來,日誌服務提供了 以restfull API方式寫入、查詢日誌數據,管理自己的項目及日誌庫。現在日誌服務新增提供了mysql 接口,用戶可以使用jdbc連接到日誌服務,通過標準的sql語法進行查詢和計算。

使用方法

數據模型映射

日誌服務數據模型 SQL數據模型
project database
logstore table
accesskeyId user
accessKey password

支持的region

目前僅支持經典網絡內網訪問和VPC網絡訪問。各個地域的地址參考文檔。地址為內網域名和VPC域名,端口為10005。

帳號和權限

訪問jdbc接口,必須使用主賬號的ak或者子帳號的ak,子帳號必須是project owner的子帳號,同時子帳號具有project級別的讀權限。

查詢注意事項

在 where條件中必須包含__date__或__time__來限製查詢的時間範圍。__date__是timestamp類型 __time__是bigint類型。
例如

__date__  >  '2017-08-07 00:00:00' and  __date__ < '2017-08-08 00:00:00' 
__time__ > 1502691923  and __time__ < 1502692923

上述兩種條件必須出現一個。

支持的filter語法

  1. 字符串搜索:key = "value" ,查詢的是分詞之後的結果。
  2. 字符串模煳搜索: key = "valu*" , 查詢的是分詞之後模煳匹配的結果。
  3. 數值比較: num_field > 1, 支持的比較運算符包括> >= = < <=。
  4. 邏輯運算: and or not。例如 a = "x" and b ="y" 或 a = "x" and not b ="y"
  5. 如果使用全文索引搜索,需要使用特殊的key __line__ ,例如 __line__ ="abc"

支持的計算

支持的計算語法參見文檔

在程序中使用

開發者可以在任何一個支持mysql connector的程序中使用mysql語法連接日誌服務。例如使用jdbc或者python MySQLdb。

使用樣例

import com.mysql.jdbc.*;

import java.sql.*;
import java.sql.Connection;
import java.sql.ResultSetMetaData;
import java.sql.Statement;

public class testjdbc {
    public static void main(String args[]){

        Connection conn = null;
        Statement stmt = null;
        try {
            //STEP 2: Register JDBC driver
            Class.forName("com.mysql.jdbc.Driver");

            //STEP 3: Open a connection
            System.out.println("Connecting to a selected database...");

            conn = DriverManager.getConnection("jdbc:mysql://cn-shanghai-intranet.sls.aliyuncs.com:10005/shproject1","accessid","accesskey");
            System.out.println("Connected database successfully...");


            //STEP 4: Execute a query
            System.out.println("Creating statement...");
            stmt = conn.createStatement();

            String sql = "SELECT method,min(latency,10)  as c,max(latency,10) from sls_operation_log " +
                    "where  __time__>=1500975424 and __time__ < 1501035044  and __time__ < 1501035044 " +
                    "    and latency > 0  and latency < 6142629 and  not  (  method='Postlogstorelogs' or method='GetLogtailConfig') group by method " ;

            sql = "select count(1) ,max(latency),avg(latency), histogram(method),histogram(source),histogram(status),histogram(clientip),histogram(__source__) from  test10 where     __date__  >       '2017-07-20 00:00:00'   " +
                    " and  __date__ <     '2017-08-02 00:00:00'" +
                    " and     __line__='abc#def' and latency < 100000 and (method = 'getlogstorelogS' or method='Get**' and method <> 'GetCursorOrData' )";


            sql = "select count(1) from  sls_operation_log where     __date__  >       '2017-08-07 00:00:00'   " +
                    " and  __date__ <     '2017-08-08 00:00:00' limit 100";

            ResultSet rs = stmt.executeQuery(sql);

            //STEP 5: Extract data from result set
            while(rs.next()){
                //Retrieve by column name

                ResultSetMetaData data = rs.getMetaData();
                System.out.println(data.getColumnCount());
                for(int i = 0;i < data.getColumnCount();++i) {
                    String name = data.getColumnName(i+1);
                    System.out.print(name+":");
                    System.out.print(rs.getObject(name));
                }

                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();
                }
            }
        }

    }
}

使用mysql client連接

image

最後更新:2017-10-12 11:33:16

  上一篇:go  雲棲大會-雲HBase專場-大數據時代的結構化存儲,HBASE應用實踐與探索
  下一篇:go  CloudSort 阿裏雲 2016 奪冠,性價比高出 AWS 保持的世界記錄三倍