详情页标题前

阿里云日志服务SLS对接JDBC-云淘科技

详情页1

本文以实际案例演示如何使用JDBC连接日志服务、读取日志数据,及使用MySQL协议和SQL语法来计算日志。

前提条件

  • 已创建RAM用户并完成授权。具体操作,请参见创建RAM用户并完成授权。

  • 已配置环境变量ALIBABA_CLOUD_ACCESS_KEY_IDALIBABA_CLOUD_ACCESS_KEY_SECRET。具体操作,请参见配置环境变量。

    重要

    • 阿里云账号的AccessKey拥有所有API的访问权限,建议您使用RAM用户的AccessKey进行API访问或日常运维。

    • 强烈建议不要把AccessKey ID和AccessKey Secret保存到工程代码里,否则可能导致AccessKey泄露,威胁您账号下所有资源的安全。

  • 已为目标字段设置字段索引并开启统计功能。更多信息,请参见创建索引。

背景信息

MySQL是当前流行的关系型数据库,很多软件支持通过MySQL传输协议和SQL语法获取MySQL数据。您只需要对SQL语法熟悉,即可完成对接。日志服务提供了MySQL协议查询和分析日志数据。您可以使用标准MySQL客户端连接到日志服务,使用标准的SQL语法计算和分析日志。支持MySQL传输协议的客户端包括MySQL client,JDBC和Python MySQLdb。

JDBC的使用场景:

  • 使用可视化类工具,例如DataV、Tableau或Grafana通过MySQL协议连接日志服务。具体操作,请参见通过JDBC协议分析日志。

  • 使用Java的JDBC、Python的MySQLdb等库在程序中访问日志服务,在程序中处理查询结果。

日志示例

以共享单车日志为例,共享单车日志内容包括用户年龄、性别、电量使用量、车辆ID、操作延时、纬度、锁类型、经度、操作类型、操作结果和开锁方式。数据保存在名为project:trip_demo的Project下,名为Logstore:ebike的Logstore中。Project所在地域是cn-hangzhou。

日志示例如下:

Time :10-12 14:26:44
__source__: 192.168.0.0
__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统计

  1. 创建一个Maven项目,在POM依赖中添加JDBC依赖,示例代码如下所示。

    
     MySQL
     mysql-connector-java
     5.1.6
    
  2. 使用Java程序通过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

    重要

    使用Java的JDBC、Python的MySQLdb等库在程序中访问日志服务时,服务入口必须使用日志服务的经典网络或VPC网络访问域名,否则会出现连接超时报错com.mysql.jdbc.exceptions.jdbc4.CommunicationsException: Communications link failure,Caused by: java.net.ConnectException: Connection timed out: connect

    /**
    * 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[]){
         // 包括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,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);
             // 步骤6 :提取查询结果。
             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();
                 }
             }
         }
     }
    }

内容没看懂? 不太想学习?想快速解决? 有偿解决: 联系专家

阿里云企业补贴进行中: 马上申请

腾讯云限时活动1折起,即将结束: 马上收藏

同尘科技为腾讯云授权服务中心。

购买腾讯云产品享受折上折,更有现金返利:同意关联,立享优惠

转转请注明出处:https://www.yunxiaoer.com/166052.html

(0)
上一篇 2023年12月10日
下一篇 2023年12月10日
详情页2

相关推荐

  • 腾讯云容器服务基础监控相关同尘科技

    基础监控常见问题 节点 cpu/memory 分配量为什么会超出节点资源规格? 原因:node 层级的 cpu/memory 分配量指标依赖节点上各个 pod 的 cpu/memory request 来计算,在计算时没有把 failed 的 pod 排除。示例:节点规格是 4c8g,节点上目前运行3个 pod(资源 request 用量如下):pod1 正…

    腾讯云 2023年12月9日
  • 腾讯云TDSQL-C MySQL版关闭审计服务

    本文为您介绍通过控制台关闭审计服务相关操作。注意审计服务关闭后,将会停止对实例进行审计且历史审计日志将被清空。 前提条件 已 开通审计服务。 操作步骤 1. 登录 TDSQL-C MySQL 版控制台。2. 在左侧导航栏选择数据库审计。3. 在审计状态后单击已开启过滤出已开启审计服务的实例。4. 在审计实例列表里找到目标实例(也可在搜索框通过资源属性筛选快速…

    2023年12月9日
  • 阿里云RDS数据库自动故障转移和读写分离-云淘科技

    使用PostgreSQL的libpq或JDBC,您可以通过简单的配置实现自动故障转移(failover)和读写分离。 背景信息 从PostgreSQL 10开始,libpq驱动层开始支持简单的故障转移,JDBC驱动层则支持简单的故障转移和负载均衡。 libpq是PostgreSQL的C应用程序接口,包含一组库函数,允许客户端程序将查询请求发送给Postgre…

    阿里云数据库 2023年12月9日
  • 信息流广告,信息流部分建议宽度830px,只针对默认列表样式,顺序随机
  • 腾讯云云函数(SCF)示例说明-云淘科技

    实现概要 本示例主要演示:在 SCF 控制台上快速创建 API 网关触发器,由云函数实现 Web 后台。在云函数中,通过调用 AI 的接口,实现图像转文字处理。 实现步骤 1. 环境准备:在 文字识别控制台 开通通用印刷体识别功能。创建 COS Bucket。2. 在云函数控制台中,部署云函数,实现 AI 接口的调用,并配置 API 网关触发器。3. 在本地…

    腾讯云 2023年12月9日
  • 腾讯云容器服务资源规格同尘科技

    概述 使用 TKE Serverless 集群,您无需关心集群节点,但为了合理分配资源和准确核算,您需在部署工作负载时指定 Pod 申请的资源规格。腾讯云会根据您指定的规格为工作负载分配计算资源,也会根据此规格进行费用核算。当您使用 Kubernetes API 或 Kubectl 创建 TKE Serverless 集群工作负载时,可以通过 Annotat…

    腾讯云 2023年12月9日

联系我们

400-800-8888

在线咨询: QQ交谈

邮件:admin@example.com

工作时间:周一至周五,9:30-18:30,节假日休息

关注微信
本站为广大会员提供阿里云、腾讯云、华为云、百度云等一线大厂的购买,续费优惠,保证底价,买贵退差。