阿里云日志服务(SLS)初体验

本文涉及的产品
日志服务 SLS,月写入数据量 50GB 1个月
简介: 通过日志服务(SLS)官方文档指导进行了第一次的SLS服务体验,最终实现了SLS日志服务在所在项目上通过内嵌的方式进行日志仪表盘可视化的展示。本文通过这次开发中学习和理解的一些重点内容,进行了一次体验分享。

背景

随着IT数字化发展,企业级业务量不断增加,产生的日志量也逐渐加大,由此产生的问题定位也越来越复杂。为了快捷完成日志数据采集、消费、投递以及查询分析等功能,提升运维、运营效率,建立DT时代海量日志处理能力。阿里云日志服务(Log Service,简称SLS)应运而生。

日志服务的典型应用场景包括:数据采集与消费、数据清洗与流计算 (ETL/Stream Processing)、数据仓库对接(Data Warehouse)、日志实时查询与分析。本文将围SLS日志服务中“日志实时查询与分析”的一些基础操作做一些技术分享。

日志实时查询与分析

实时查询分析(LogAnalytics)可以实时索引LogHub中数据,提供关键词、模糊、上下文、范围、SQL聚合等丰富查询手段。

  • 实时性强:写入后即可查询。
  • 海量低成本:支持PB/Day索引能力,成本为自建方案15%。
  • 分析能力强:支持多种查询手段,及SQL进行聚合分析,并提供可视化及报警功能。

p2372.png

基本概念

日志(Log)

日志(Log)是系统在运行过程中变化的一种抽象,其内容为指定对象的某些操作和其操作结果按时间的有序集合。文件日志(LogFile)、事件(Event)、数据库日志(BinLog)、度量(Metric)数据都是日志的不同载体。在文件日志中,每个日志文件由一条或多条日志组成,每条日志描述了一次单独的系统事件,是日志服务中处理的最小数据单元。

日志组(LogGroup)

日志组(LogGroup)是一组日志的集合,写入与读取的基本单位。

日志主题(Topic)

一个日志库内的日志可以通过日志主题(Topic)来划分。用户可以在写入时指定日志主题,并在查询时指定查询的日志主题。

项目(Project)

项目(Project)是日志服务中的资源管理单元,用于资源隔离和控制。您可以通过项目来管理某一个应用的所有日志及相关的日志源。它管理着用户的所有日志库(Logstore),采集日志的机器配置等信息,同时它也是用户访问日志服务资源的入口。

日志库(Logstore)

日志库(Logstore)是日志服务中日志数据的收集、存储和查询单元。每个日志库隶属于一个项目,且每个项目可以创建多个日志库。

分区(Shard)

每个日志库分若干个分区(Shard),每个分区由MD5左闭右开区间组成,每个区间范围不会相互覆盖,并且所有的区间的范围是MD5整个取值范围。

索引

索引是一种存储结构,用于对日志数据中的一列或多列进行排序。您只有配置索引后,才能进行查询和分析操作。不同的索引配置,会产生不同的查询和分析结果,请根据您的需求,合理配置索引。


常用SLS-SQL语法

基本语法

example:

student_type : freshman or junior |SELECT time_series(__time__,'1d','%Y-%m-%d','0')ASTime, student_type,count(*)as PV GROUPBYTime, student_type ORDERBYTimeASC, student_type ASC

查询语句和分析语句以竖线(|)分割

(|)前的部分表示查询语句,指定日志查询时的过滤规则,返回符合条件的日志。查询语句可以为关键词、数值、数值范围、空格、星号(*)等。 如果为空或星号(*),表示无过滤条件;

(|)后的部分表示分析语句,用于对查询结果或全量数据进行计算和统计。

获取日志聚类结果

*|select a.pattern, a.count,a.signature, a.origin_signaturesfrom(select log_reduce(3)as a from log)limit1000

字符串函数

使用问号(?)拆分request_uri字段的值并返回第一个子串

*|SELECTcount(*)AS PV, split_part(request_uri,'?',1)AS Path GROUPBY Path ORDERBY pv DESCLIMIT3

同比环比函数

计算当前1小时和昨天同时段的访问PV比值:

*|SELECT compare(PV,86400)FROM(SELECTcount(*)AS PV FROM log)

返回结果如下图所示:

p230658.png

结果共有三个参数

  • 第一个参数表示当前时间范围的结果。
  • 第二个参数表示n秒前(例子中表示86400秒,即一天前),当前时间范围的结果。
  • 第三个参数表示当前时间范围和n秒前该时间范围,结果的比值。

当您需要分列显示分析结果时,可执行如下查询和分析语句:

*|SELECT diff[1]AS today, diff[2]AS yesterday, diff[3]AS ratio FROM(SELECT compare(PV,86400)AS diff FROM(SELECTcount(*)AS PV FROM log))

IP地理函数

统计请求总数Top10的省份

*|SELECTcount(*)as PV, ip_to_province(client_ip)AS province GROUPBY province ORDERBY PV descLIMIT10

client_ip:日志中表示IP的字段;

ip_to_province(client_ip) :分析目标IP地址所属省份,返回结果为省份的中文名称。


技术细节

Maven依赖

<dependency><groupId>com.aliyun</groupId><artifactId>aliyun-java-sdk-sts</artifactId><version>3.0.0</version></dependency><dependency><groupId>com.aliyun</groupId><artifactId>aliyun-java-sdk-core</artifactId><version>3.5.0</version></dependency><dependency><groupId>org.apache.httpcomponents</groupId><artifactId>httpclient</artifactId><version>4.5.5</version></dependency><dependency><groupId>com.alibaba</groupId><artifactId>fastjson</artifactId><version>1.2.47</version></dependency>

创建日志服务Client

String accessId = "your_access_id";    //阿里云访问密钥AccessKey ID。更多信息,请参见访问密钥。阿里云主账号AccessKey拥有所有API的访问权限,风险很高。强烈建议您创建并使用RAM账号进行API访问或日常运维。
String accessKey = "your_access_key";  //阿里云访问密钥AccessKey Secret。
String host = "cn-hangzhou-intranet.log.aliyuncs.com";  //日志服务的域名。更多信息,请参见服务入口。此处以杭州为例,其它地域请根据实际情况填写。
Client client = new Client(host, accessId, accessKey);   //创建日志服务Client。

开启SLS日志服务

请求语法

POST https://sls.aliyuncs.com/
?AccessKeyId=yourAccessKeyId
&Action=OpenSlsService
&Format=Format
&SignatureMethod=HMAC-SHA1
&SignatureNonce=SignatureNonce
&SignatureVersion=SignatureVersion
&Timestamp=Timestamp
&Version=Version
&Signature=Signature

创建Project

请求语法

POST / HTTP/1.1
Authorization: LOG yourAccessKeyId:yourSignature 
x-log-bodyrawsize: 0
User-Agent: UserAgent
x-log-apiversion: 0.6.0
Host: ProjectName.Endpoint
x-log-signaturemethod: hmac-sha1
Date: GMT Date
Content-Type: application/json
Content-MD5: Content-MD5
Content-Length: ContentLength
Connection: Keep-Alive
{
  "projectName": ProjectName,
  "description": Description
}

创建LogStore

请求语法

POST /logstores HTTP/1.1
x-log-bodyrawsize: 0
Content-Type: application/json
Content-Length: 140
Content-MD5: F3EFCA28442BEEC487451FAD30D78650
x-log-apiversion: 0.6.0
x-log-signaturemethod: hmac-sha1
Host: ProjectName.Endpoint
Date: GMT Date
Authorization: LOG yourAccessKeyId:yourSignature,
x-log-date: Fri, 27 Nov 2020 08:25:10 GMT
{
    "logstoreName" : logStoreName,
    "ttl": ttl,
    "shardCount": shardCount,
    "enable_tracking": enable_tracking,
    "autoSplit": autoSplit,
    "maxSplitShard": maxSplitShard,
    "appendMeta": appendMeta
}

其中,host由Project名称和日志服务Endpoint构成,您需要在host中指定Project。

创建EtlJob

该步骤由SLS团队创建,用来绑定项目的分发规则,配合本地创建的EtlMeta使用。

创建EtlMeta

// 创建metaValue对象, 指定创建etlMeta的必要参数JSONObjectmetaValueJsonObject=newJSONObject();
metaValueJsonObject.put("projectName", "projectName");
metaValueJsonObject.put("logStoreName", "logStoreName");
metaValueJsonObject.put("role", "role");
...
// 创建etlMeta对象, 用来配合etlJob进行日志分发EtlMetaetlMeta=newEtlMeta();
etlMeta.setEnable(true);
etlMeta.setMetaKey("metaKey");
etlMeta.setMetaName("metaName");
etlMeta.setMetaTag("metaTag");
etlMeta.setMetaValue(metaValueJsonObject);
client.createEtlMeta("projectName", etlMeta);

可视化

仪表盘创建

通过SLS日志分析语句,可以绑定对应的图表,完成分析结果的可视化展示

Dingtalk_20210424165025.jpg

控制台内嵌

p6443.png

1.获取STS临时AK和Token;

2.使用获得的临时AK和Token获取securityToken;

3.生成免登录链接。

http://signin.aliyun.com/federation?Action=Login                            &LoginUrl=<登录失效跳转的地址,一般配置为自建Web配置302跳转的URL。>                            &Destination=<实际访问日志服务页面,支持查询页面和仪表盘页面。如果有参数,则需要使用encodeURL对参数进行转码。>                            &SigninToken=<获取的登录Token>


PS:

以上为这次开发过程中,通过不断的学习和尝试梳理的一些重点流程,如果有纠正或者补充,欢迎讨论。


相关实践学习
日志服务之使用Nginx模式采集日志
本文介绍如何通过日志服务控制台创建Nginx模式的Logtail配置快速采集Nginx日志并进行多维度分析。
相关文章
|
19天前
|
SQL 数据采集 DataWorks
DataWorks产品使用合集之pyodps的线程限制是什么意思
DataWorks作为一站式的数据开发与治理平台,提供了从数据采集、清洗、开发、调度、服务化、质量监控到安全管理的全套解决方案,帮助企业构建高效、规范、安全的大数据处理体系。以下是对DataWorks产品使用合集的概述,涵盖数据处理的各个环节。
|
19天前
|
DataWorks 数据可视化 安全
DataWorks产品使用合集之SLS日志中新增了存在iotId这个字段,同步的时候怎么手动增加
DataWorks作为一站式的数据开发与治理平台,提供了从数据采集、清洗、开发、调度、服务化、质量监控到安全管理的全套解决方案,帮助企业构建高效、规范、安全的大数据处理体系。以下是对DataWorks产品使用合集的概述,涵盖数据处理的各个环节。
|
1天前
|
SQL 运维 关系型数据库
|
1天前
|
存储 关系型数据库 MySQL
|
1天前
|
存储 关系型数据库 MySQL
|
17天前
|
运维 Serverless API
Serverless 应用引擎产品使用合集之sls日志告警调用函数计算,出现抛出的结果异常,是什么原因
阿里云Serverless 应用引擎(SAE)提供了完整的微服务应用生命周期管理能力,包括应用部署、服务治理、开发运维、资源管理等功能,并通过扩展功能支持多环境管理、API Gateway、事件驱动等高级应用场景,帮助企业快速构建、部署、运维和扩展微服务架构,实现Serverless化的应用部署与运维模式。以下是对SAE产品使用合集的概述,包括应用管理、服务治理、开发运维、资源管理等方面。
|
22小时前
|
监控 网络协议 Linux
技术好文共享::Linux系统日志管理日志转储
技术好文共享::Linux系统日志管理日志转储
|
2天前
|
XML Java 程序员
一篇文章讲明白Log日志框架的学习五.正确使用日志的10个技巧(转载)
一篇文章讲明白Log日志框架的学习五.正确使用日志的10个技巧(转载)
|
2天前
|
XML Java 程序员
一篇文章讲明白Log日志框架的学习五.正确使用日志的10个技巧(转载)
一篇文章讲明白Log日志框架的学习五.正确使用日志的10个技巧(转载)
|
8天前
|
Java API
SpringBoot系列之切换log4j日志框架
SpringBoot系列之切换log4j日志框架

相关产品

  • 日志服务