You need to enable JavaScript to run this app.
日志服务

日志服务

复制全文
检索分析
检索分析 JSON 日志
复制全文
检索分析 JSON 日志

本文以电商平台的订单系统日志为例,介绍 JSON 格式日志的典型检索分析场景及示例。

背景信息

某电商公司的订单系统每天需要处理成千上万笔的交易请求,并生成海量的 JSON 格式日志。这些 JSON 日志详细记录了每个订单的详细信息,例如用户信息(用户 ID、用户地址、用户昵称等)、购买信息(商品 ID、商品名称、商品价格、商品数量)、订单信息(订单 ID、订单总价、订单状态、支付方式、快递时间等)等。
面对电商公司订单系统产生的复杂 JSON 日志,日志服务不仅是一个存储仓库,更是一个强大的分析平台。日志服务提供 JSON 类型的索引配置,极大增强了对 JSON 日志的结构化管理效率,实现复杂结构中的字段内容也能被精准索引。日志服务还内置了丰富的 JSON 函数,支持高效的日志解析和内容提取。

前提条件

  • 已创建日志项目和日志主题。具体操作,请参考创建资源
  • 已根据日志字段创建索引。具体操作,请参考配置索引

日志样例

下述罗列了订单系统 JSON 日志样例。

{
    "timestamp": "2024-05-14T12:30:45Z",
    "order_id": "ODR123456789",
    "customer": {
        "customer_id": "CUST987654321",
        "name": "John Doe",
        "email": "john.doe@example.com",
        "address": {
            "street": "123 Main St",
            "city": "Anytown",
            "state": "NY",
            "zip": "12345",
            "country": "USA"
        }
    },
    "items": [
        {
            "product_id": "PROD001",
            "name": "Widget",
            "quantity": 2,
            "price": 9.99,
            "total_price": 19.98
        },
        {
            "product_id": "PROD002",
            "name": "Gadget",
            "quantity": 1,
            "price": 14.99,
            "total_price": 14.99
        }
    ],
    "subtotal": 34.97,
    "tax": 2,
    "total": 36.97,
    "status": "shipped",
    "shipping_method": "express",
    "payment_method": "credit_card",
    "shipping_address": {
        "street": "456 Oak St",
        "city": "Othertown",
        "state": "CA",
        "zip": "54321",
        "country": "USA"
    },
    "billing_address": {
        "street": "456 Oak St",
        "city": "Othertown",
        "state": "CA",
        "zip": "54321",
        "country": "USA"
    },
    "shipping_cost": 10,
    "payment_status": "paid",
    "payment_amount": 36.97,
    "shipping_status": "delivered",
    "shipping_date": "2024-05-15",
    "notes": "此订单客户要求24小时内尽快发货"
}

索引样例

本案例基于上述日志样例创建了如下索引配置。索引配置的具体操作及注意事项,请参考配置索引。
其中,customer 字段是 JSON 对象,日志服务支持对 customer 字段内的子字段设置索引,并支持字段检索分析。关于 JSON 数据类型索引的详细说明及注意事项请参考json 类型
图片

典型检索分析场景

通过 JSON 日志介绍 JSON 字段的检索分析示例和 JSON 函数的使用示例。

场景 1:根据用户 ID 精准查询相关订单

  • 场景:查询 CUST987654321 用户所有订单的详细信息。

  • 检索语句

    customer.customer_id:CUST987654321
    
  • 检索结果

场景 2:根据用户 ID 模糊查询相关订单

  • 场景:查询用户 ID 以 CUST98 开头的所有订单的详细信息。

  • 检索语句

    customer.customer_id:CUST98*
    

    使用模糊查询时,需在关键词中添加通配符星号(*)或者问号(?)。详细说明请参考日志检索

  • 检索结果

场景 3:根据某个关键词查询相关订单

  • 场景:查询用户地址为 Guangzhou 的所有请求信息。

  • 检索分析语句

    customer.address: Guangzhou
    

    customer.address 字段已配置键值索引并开启分词符功能,因此日志服务会基于分词符将字段值拆分为多个关键词,并支持上述键值查询。

  • 检索分析结果

场景 4:根据多个关键字查询相关订单

  • 场景:查询用户地址包含 123 Main St 街道的所有请求信息。

  • 检索分析语句

    customer.address:"123 Main St"
    

    其中,123 Main St为三个关键字包含空格,因此通过 123 Main St 进行检索时需使用双引号("")包裹。

  • 检索分析结果

场景 5:使用 JSON 函数提取 JSON 字段值

  • 场景:查看某用户在指定订单中购买的第二件商品。

  • 检索分析语句

    说明

    在 SQL 语句中,需要使用单引号('')包裹代表字符串的字符,无符号包裹或被双引号("")包裹的字符为字段名或列名。其中,JSON 字段(例如 customer.customer_id),必须使用双引号("")包裹。

    *|SELECT JSON_EXTRACT_SCALAR(JSON_ARRAY_GET(JSON_PARSE(items), 0), '$.product_id') AS "商品ID" WHERE "customer.customer_id" = 'CUST987654321' AND order_id = 'ODR123456792'
    

    其中:

    • JSON_PARSE 函数用于将 JSON 格式的字符串(items 字段的值)转化成 JSON 类型,详细说明请参考JSON_PARSE 函数
    • JSON_ARRAY_GET 函数用于提取 items 字段值中的第一个元素(例如 **** "product_id":"PROD001"),详细说明请参考JSON_ARRAY_GET 函数
    • JSON_EXTRACT_SCALAR 函数用于从上述提取到的元素(例如"product_id":"PROD001")中提取 product_id 字段的值,详细说明请参考JSON_EXTRACT_SCALAR 函数
  • 检索分析结果

场景 6:分组统计订单数量

  • 场景:统计最近一个月各个用户的订单数量。

  • 检索分析语句

    说明

    在 SQL 语句中,需要使用单引号('')包裹代表字符串的字符,无符号包裹或被双引号("")包裹的字符为字段名或列名。其中,JSON 字段(例如 customer.customer_id),必须使用双引号("")包裹。

    *| SELECT "customer.customer_id", COUNT(*) AS "订单数量" GROUP BY "customer.customer_id"
    
  • 检索分析结果

场景 7:分组统计支付费用

  • 场景:统计支付费用 TOP 10 的城市。

  • 检索分析语句

    说明

    在 SQL 语句中,需要使用单引号('')包裹代表字符串的字符,无符号包裹或被双引号("")包裹的字符为字段名或列名。其中,JSON 字段(例如 customer.customer_id),必须使用双引号("")包裹。

    *| SELECT JSON_EXTRACT_SCALAR("customer.address", '$.city') AS "城市", SUM(payment_amount) AS "支付费用" GROUP BY "城市" ORDER BY "支付费用" DESC LIMIT 10
    

    其中:

    • JSON_EXTRACT_SCALAR 函数用于从 JSON 形式的字符串中提取到 city 字段的值,详细说明请参考JSON_EXTRACT_SCALAR 函数
    • GROUP BY "城市" 子句用于按照城市分组来统计各个城市的支付费用。
  • 检索分析结果
    图片

相关文档

最近更新时间:2024.06.04 14:11:41
这个页面对您有帮助吗?
有用
有用
无用
无用