全部产品
Search
文档中心

日志服务:存储目标Logstore无数据怎么处理?

更新时间:May 23, 2024

您将数据加工结果分发至存储目标Logstore后,如果目标Logstore中无数据,可参见本文解决。

场景一:加工语句中的存储目标与创建数据加工任务页面中的存储目标不一致

名为website_log的Logstore中有5000条数据,其中SourceIP为192.0.2.54的数据有1000条,SourceIP为192.0.2.28的数据有1000条,SourceIP为192.0.2.136的数据有1000条,SourceIP为其他值的日志有2000条。现对这些数据进行加工,分发到不同的目标Logstore(54_log_target、28_log_target、136_log_target)中。

  • 加工需求

    • 将SourceIP为192.0.2.54的数据分发至名为54_log_target的Logstore中。

    • 将SourceIP为192.0.2.28的数据分发至名为28_log_target的Logstore中。

    • 将SourceIP为192.0.2.136的数据分发至名为136_log_target的Logstore中。

    • 将其他不符合加工条件的数据全部丢弃。

  • 加工语句

    三个目标Logstore名称分别为54_log、28_log、136_log。

    e_if(e_search("SourceIP==192.0.2.54"),    
      e_output(name="54-target",
                 project="sls-test",
                 logstore="54_log"))
    e_if(e_search("SourceIP==192.0.2.28"),
        e_output(name="28-target",
                 project="sls-test",
                 logstore="28_log"))
    e_if(e_search("SourceIP==192.0.2.136"),
        e_output(name="136-target",
                 project="sls-test",
                 logstore="136_log"))
    e_drop()
  • 存储目标

    三个目标Logstore分别为54_log_target、28_log_target、136_log_target。

    存储目标

  • 加工结果

    名称为54_log_target、28_log_target、136_log_target的Logstore中无数据。

  • 原因分析

    在数据加工语句的e_output函数中设置了project(目标Project名称)和logstore(目标Logstore名称),同时在创建数据加工任务面板中设置不同的目标Project目标库,此时以数据加工语句的存储目标为准。

    即在本案例中,加工结果被分发至数据加工语句中设置的三个Logstore中:54_log、28_log、136_log。

  • 解决方案

    • 在e_output函数和e_coutput函数中只配置name参数,则加工结果输出到创建数据加工任务面板中设置的存储目标。

    • 如果在e_output函数和e_coutput函数中配置Project参数Logstore参数,则必须和创建数据加工任务面板中设置的存储目标一致。更多信息,请参见e_output、e_coutput

      说明

      设置了加工语句且设置多个存储目标时,如果未使用e_drop()语句,则所有通过加工处理但不符合条件且未被丢弃的数据,都被分发至第一个存储目标中。

      e_if(e_search("SourceIP==192.0.2.54"),    
        e_output(name="54-target",
                   project="sls-test",
                   logstore="54_log_target"))
      e_if(e_search("SourceIP==192.0.2.28"),
          e_output(name="28-target",
                   project="sls-test",
                   logstore="28_log_target"))
      e_if(e_search("SourceIP==192.0.2.136"),
          e_output(name="136-target",
                   project="sls-test",
                   logstore="136_log_target"))
      e_drop()

场景二:未设置加工语句或仅设置e_drop()语句

  • 加工语句

  • 存储目标未设置加工语句

  • 加工结果

    只有名称为54_log_target的Logstore中有数据。

  • 原因分析

    • 在数据加工页面没有设置加工语句,但在创建数据加工任务面板:

      • 设置一个存储目标,源Logstore的数据会被复制到存储目标中。

      • 设置多个存储目标,所有的数据只被分发到存储目标1的Logstore中,不会被转发到其他Logstore。

    • 在数据加工页面仅设置e_drop()语句,所有的日志数据都被丢弃,存储目标Logstore中无数据。

场景三:加工延迟

如果您确保您的加工任务设置正确,而目标Logstore中仍无数据,可能是因为加工延迟。

参考性能指南,建议在部署加工作业之前,从三个层面进行规划:

  • 源Logstore,根据数据量调整Shard数目(readwrite状态),满足一定的加工并发度。

  • 加工DSL代码逻辑优化,例如优化正则表达式、合理做条件剪枝、数据过滤尽量前置。

  • 目标Logstore设置足够的Shard数目(readwrite状态),避免加工写出数据受阻。