日本熟妇hd丰满老熟妇,中文字幕一区二区三区在线不卡 ,亚洲成片在线观看,免费女同在线一区二区

使用SQL語句查詢分析日志

當您需要使用SQL查詢和分析日志服務中的數據時,可以通過JDBC、Python MySQLdb、MySQL命令行工具等方式連接日志服務來實現。本文主要為您介紹JDBC、Python MySQLdb、MySQL命令行工具連接日志服務的操作步驟。

使用限制

  • 目前日志服務僅支持JDBC 5.1.49版本。

  • 使用Java的JDBC、Python的MySQL Connector等庫在程序中訪問日志服務時,目前僅支持私網服務入口(阿里云經典網絡和VPC網絡的訪問域名)。更多信息,請參見服務入口。否則會出現連接超時報錯com.mysql.jdbc.exceptions.jdbc4.CommunicationsException: Communications link failure,Caused by: java.net.ConnectException: Connection timed out: connect

前提條件

  • 已創建阿里云賬號或RAM用戶的AccessKey。具體操作,請參見訪問密鑰

    如果使用RAM用戶的AccessKey,則RAM用戶必須是當前Project所屬阿里云賬號的RAM用戶,且具備Project級別的讀權限。如何授權,請參見配置權限助手

  • 已采集數據到源Logstore。具體操作,請參見數據采集概述

背景信息

MySQL是當前流行的關系型數據庫,很多軟件支持通過MySQL傳輸協議和SQL語法獲取MySQL數據。因此,為了滿足不同業務場景、不同系統查詢和分析日志的需求,日志服務也可以被視為MySQL數據庫來使用。您可以使用標準MySQL連接工具連接到日志服務,使用標準的SQL語法計算和分析日志。支持MySQL傳輸協議的客戶端包括MySQL client,JDBC和MySQL Connector/Python。日志服務查詢分析語句轉換成SQL語句請參見查詢和分析語法

使用場景:

  • 在可視化工具中(如DataV、Tableau或Grafana等)將日志服務作為數據源進行可視化分析。

  • 在Java(或Python)程序中,需要查詢、分析或使用日志服務中的數據時,可以通過Java的JDBC(或MySQL Connector/Python)等方式連接日志服務。

日志服務和MySQL數據庫對比:

日志服務

MySQL

Project

數據庫(database)

Logstore

表(table)

索引

表字段

重要

日志服務使用SQL語句查詢分析日志不支持分頁。

通過JDBC訪問日志服務

  1. 創建一個Maven項目,在POM依賴中添加JDBC依賴(目前日志服務僅支持JDBC 5.1.49版本),示例代碼如下所示。

    <dependency>
     <groupId>mysql</groupId>
     <artifactId>mysql-connector-java</artifactId>
     <version>5.1.49</version>
    </dependency>
  2. 您可以在任何一個支持MySQL connector的程序中使用MySQL語法連接日志服務。例如JDBC、Python MySQLdb,此處以JDBC為例:

    重要

    在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

    /**
    * 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 CollectTest {
     public static void main(String args[]){
         // 包括Project名稱和日志服務經典網絡或VPC網絡的訪問域名,請根據實際情況替換。
         final String endpoint = "trip-demo.cn-hangzhou-intranet.log.aliyuncs.com"; 
         // 通過JDBC訪問時,默認使用10005端口。
         final String port = "10005"; 
         // 日志服務Project名稱。
         final String project = "trip-demo"; 
         // 日志服務Logstore名稱。
         final String logstore = "ebike";
         // 本示例從環境變量中獲取AccessKey ID和AccessKey Secret。
         final String accessKeyId = System.getenv("ALIBABA_CLOUD_ACCESS_KEY_ID");  
         final String accessKey = System.getenv("ALIBABA_CLOUD_ACCESS_KEY_SECRET");  
         Connection conn = null;
         Statement stmt = null;
         try {
             // 步驟1 :加載JDBC驅動。
             Class.forName("com.mysql.jdbc.Driver");
             // 步驟2 :創建一個鏈接。
             conn = DriverManager.getConnection("jdbc:mysql://"+endpoint+":"+port+"/"+project+"?useSSL=false",accessKeyId,accessKey);
             // 步驟3 :創建statement。
             stmt = conn.createStatement();
             // 步驟4 :定義查詢語句,查詢2017年10月11日全天日志中滿足條件op = "unlock"的日志條數。
             String sql = "select count(1) as pv 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);
             // 步驟6 :提取查詢結果。
             while(rs.next()){
                 // Retrieve by column name
                 System.out.print("pv:");
                 // 獲取結果中的pv。
                 System.out.print(rs.getLong("pv"));
                 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();
                 }
             }
         }
     }
    }

    參數

    描述

    是否必選

    示例值

    project

    目標Project。

    trip-demo

    endpoint

    阿里云私網。

    cn-hangzhou-intranet.log.aliyuncs.com

    port

    端口號。

    10005

    accessId

    標識用戶。

    LT*******************KX

    accessKey

    用戶用于加密簽名字符串和日志服務用來驗證簽名字符串的密鑰。

    aaw************************Qf

  3. 查詢數據。

    image

通過MySQL Connector/Python訪問日志服務

  1. 在命令行工具中,以管理員身份執行如下安裝命令安裝mysql-connector-python。

    pip install mysql-connector-python #python2 命令
    pip3 install mysql-connector-python #python3 命令
  2. 創建mysqlQuery.py文件,按實際填寫以下參數。

    重要

    在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

    import mysql.connector
    import os
    
    
    def main():
        # 用戶名
        user = os.environ.get('ALIBABA_CLOUD_ACCESS_KEY_ID', '')
        # 密碼
        password = os.environ.get('ALIBABA_CLOUD_ACCESS_KEY_SECRET', '')
        # endpoint
        host = 'cn-chengdu-intranet.log.aliyuncs.com'
        # 數據庫名
        project = 'aliyun-test-project'
        # 端口號
        port = 10005
        # 表名
        logstore = 'logstore-test'
        print("collect database start ")
        # 連接數據庫
        cnx = mysql.connector.connect(host=host, user=user, password=password, database=database, port=port)
        print("collect database success ")
        # 創建一個游標對象
        cursor = cnx.cursor()
    
        # 執行一個查詢
        query = "select count(1) as pv from " + logstore + " where __date__  >=  '2024-05-27 00:00:00' and  __date__  <   '2024-05-31 00:00:00'"
        print("query data success")
        cursor.execute(query)
        print("query data success")
        # 獲取查詢結果
        for (column1) in cursor:
            print("{}".format(column1))
    
        # 關閉游標和連接
        cursor.close()
        cnx.close()
    
    
    if __name__ == '__main__':
        main()
    

    參數

    描述

    是否必選

    示例值

    project

    目標Project。

    trip-demo

    logstore

    目標logstore

    logtore-test

    endpoint

    阿里云私網。

    cn-hangzhou-intranet.log.aliyuncs.com

    port

    端口號,固定為10005。

    10005

    user

    阿里云AccessKey ID。建議使用RAM用戶的AccessKey。

    LT*******************KX

    password

    阿里云AccessKey Secret。建議使用RAM用戶的AccessKey。

    aaw************************Qf

  3. 輸入以下命令查詢數據。

    python mysqlQuery.py #python2 命令
    python3 mysqlQuery.py #python3 命令

    image

通過ECS服務器訪問日志服務

  1. 連接日志服務。

    mysql -h my-project.host -uuser -ppassword -P port

    示例:

    mysql -h my-project.cn-hangzhou-intranet.log.aliyuncs.com -ubq****mo86kq -p4f****uZP -P 10005

    參數

    說明

    host

    日志服務訪問域名,必須添加Project名稱,即格式為Project名稱.私網服務入口。例如my-project.cn-hangzhou-intranet.log.aliyuncs.com。

    目前僅支持私網服務入口(阿里云經典網絡和VPC網絡的訪問域名)。更多信息,請參見私網

    port

    默認使用10005。

    user

    阿里云AccessKey ID。建議使用RAM用戶的AccessKey。

    password

    阿里云AccessKey Secret。建議使用RAM用戶的AccessKey。

    my-project

    日志服務Project名稱。

    重要

    一個數據庫同時只支持連接一個Project。

  2. 進入當前項目。

    use my-project;
  3. 查詢數據。

    重要

    在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

    select count(1) as pv from my-logstore where __date__  >=  '2024-05-27 00:00:00' and  __date__  <   '2024-05-31 00:00:00'

    連接示例

    • ①、②處配置為您的Project。

    • ③處配置為您的Logstore。

查詢和分析語法

  • 過濾語法

    說明

    在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

    where過濾語法說明如下表所示。

    語義

    示例

    說明

    字符串搜索

    key = "value"

    查詢的是分詞之后的結果。

    字符串模糊搜索

    • key has 'valu*'

    • key like 'value_%'

    查詢的是分詞之后模糊匹配的結果。

    數值比較

    num_field > 1

    比較運算符包括>、>=、=、<和<=。

    邏輯運算

    and or not

    例如a = "x" and b ="y"a = "x" and not b ="y"

    全文搜索

    __line__ ="abc"

    如果使用全文索引搜索,需使用特殊的key(__line__)。

  • 計算語法

    支持計算操作符。更多信息,請參見分析語法

  • SQL92語法

    過濾語法和計算語法組合成為SQL92語法。

    status>200 |select avg(latency),max(latency) ,count(1) as c GROUP BY  method  ORDER BY c DESC  LIMIT 20

    您可以將上述查詢和分析語句中的分析語句與時間條件組合成為查詢條件,變成標準SQL92語法,如下所示:

    select avg(latency),max(latency) ,count(1) as c from sample-logstore where status>200 and __time__>=1500975424 and __time__ < 1501035044 GROUP BY  method  ORDER BY c DESC  LIMIT 20