LogHub新增公网IP/服务端到达时间标签

简介

日志服务LogHub功能新增加了两种默认标签:日志写入客户端的公网IP地址和服务端接受日志的时间。客户端公网IP可以用于统计客户端的位置分布。服务端到达时间可以统计日志的实际到达服务端的时间。

用户开通之后,使用SDK,WebTracking等方式写入日志时,日志服务会记录客户端IP地址和日志到达服务端的时间,并作为如下标签保存到Tag字段中,如图1所示:

  • __client_ip___: 客户端的公网IP地址;
  • __receive_time___: 服务端接受日志的时间,格式为Unix时间戳,如1537145311。

LogHub新增公网IP/服务端到达时间标签

图1 添加标签

如何开通

用户只需在LogStore上打开记录外网IP。新创建LogStore时,开关默认打开,如图2所示。对于已经存在的LogStore,用户也可以通过修改页面开通。
LogHub新增公网IP/服务端到达时间标签

图2 开通记录外网IP

注意

  1. 日志服务只会添加公网IP到标签中,如果客户端IP是内网IP,则不会出现在标签中。
  2. 暂不支持Logtail客户端。使用Logtail采集日志时,客户端IP已经包含在source字段中。

如何消费

查询分析中消费

用户可以像使用其他自定义标签一样对这两个标签进行消费和在控制台上查询。查询tag中的字段时,需要添加 “__tag__” 前缀。如查询IP地址为220.111.23.88的客户端写入的日志:

__tag__:__client_ip__:  220.111.23.88

标签字段同样支持模糊查询:

__tag__:__client_ip__:  220.*

同时日志服务也提供了大量的IP地理函数,如根据IP查询客户端所在城市:

* | SELECT ip_to_city("__tag__:__client_ip__") as city

将IP地理函数和可视化图表结合,将客户端分布在地图上可视化展示,例如统计每个地点写入的日志条数:

LogHub新增公网IP/服务端到达时间标签


图3 写入日志客户端分布

查询语句为:

* | SELECT count(1) as count, ip_to_geo("__tag__:__client_ip__") as geo GROUP BY geo

查看全部地理函数

日志到达服务端时间戳也可以用于查询,如查询到达时间戳为1537090887的日志:

__tag__:__receive_time__: 1537090887

通过SDK或消费组消费

当使用SDK或者消费组消费时,可以通过LogGroup对象的Tag属性中获取客户端IP和到达时间。以使用Java SDK为例,可以通过如下方式获取到客户端IP和日志到达服务端时间:

BatchGetLogRequest request = new BatchGetLogRequest(...);
BatchGetLogResponse response = client.BatchGetLog(request);
for (LogGroupData data : response.GetLogGroups()) {
    Logs.LogGroup logGroup = data.GetLogGroup();
    for (Logs.LogTag tag : logGroup.getLogTagsList()) {
        if (tag.getKey().equals("__client_ip__")) {
            // 写入日志的客户端IP地址
            String clientIp = tag.getValue();
            // ...
        } else if (tag.getKey().equals("__receive_time__")) {
            // 日志到达服务端时间戳
            String timestamp = tag.getValue();
            // ...
        }
    }
}

流计算消费

日志服务支持多种流计算平台将其作为流式数据输入,以使用Blink消费日志为例,假设用户的原始日志数据为如下格式:

{
    "a": 1000,
    "b": 1234,
    "c": "li"
}

为了能够从日志服务消费数据,用户需要创建如下DDL:

create table sls_stream(
    a int,
    b int,
    c varchar
) with (
    type ='sls',
    endPoint ='http://cn-hangzhou-corp.sls.aliyuncs.com',
    accessId ='your access key id',
    accessKey ='your access key',
    startTime = '2017-07-05 00:00:00',
    project ='ali-cloud-streamtest',
    logStore ='stream-test',
    consumerGroup ='consumerGroupTest1'
);

除type外的各项参数用户需要根据实际情况替换。开通记录外网IP后,用户可以使用如下DDL在Blink消费新增的__client_ip__ 和__receive_time__ 标签:

create table sls_stream(
    __client_ip__  varchar HEADER,
    __receive_time__ varchar HEADER,
    a int,
    b int,
    c varchar
) with (
    type ='sls',
    endPoint ='http://cn-hangzhou-corp.sls.aliyuncs.com',
    accessId ='xxxxxxxxxxx',
    accessKey ='xxxxxxxxxxxxxxxxxxxxxxxxxxxx',
    startTime = '2017-07-05 00:00:00',
    project ='ali-cloud-streamtest',
    logStore ='stream-test',
    consumerGroup ='consumerGroupTest1'
);

MaxCompute/OSS等存储

  1. OSS: 预计10月底支持投递标签功能。
  2. MaxCompute: DataWorks 9月底上线投递标签功能,上线之后用户可以选择使用DataWorks投递。

控制台使用演示:

相关资料

  1. 消费组消费
  2. 日志格式
  3. 操作LogStore
  4. IP地理函数
上一篇:DataBase Index


下一篇:GRYZ20211104 Simulation problem solving report