阿里云日志服务(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日志并进行多维度分析。
相关文章
|
1月前
|
SQL Java Serverless
实时计算 Flink版操作报错合集之在写入SLS(Serverless Log Service)时出现报错,该如何排查
在使用实时计算Flink版过程中,可能会遇到各种错误,了解这些错误的原因及解决方法对于高效排错至关重要。针对具体问题,查看Flink的日志是关键,它们通常会提供更详细的错误信息和堆栈跟踪,有助于定位问题。此外,Flink社区文档和官方论坛也是寻求帮助的好去处。以下是一些常见的操作报错及其可能的原因与解决策略。
|
6天前
|
SQL 存储 JSON
更快更强,SLS 推出高性能 SPL 日志查询模式
从海量的日志数据中,按照各种灵活的条件进行即时查询搜索,是可观测场景下的基本需求。本文介绍了 SLS 新推出的高性能 SPL 日志查询模式,支持 Unix 风格级联管道式语法,以及各种丰富的 SQL 处理函数。同时通过计算下推、向量化计算等优化,使得 SPL 查询可以在数秒内处理亿级数据,并支持 SPL 过滤结果分布图、随机翻页等特性。
220 65
|
21天前
|
监控 数据管理 关系型数据库
数据管理DMS使用问题之是否支持将操作日志导出至阿里云日志服务(SLS)
阿里云数据管理DMS提供了全面的数据管理、数据库运维、数据安全、数据迁移与同步等功能,助力企业高效、安全地进行数据库管理和运维工作。以下是DMS产品使用合集的详细介绍。
|
1月前
|
Linux 测试技术 数据安全/隐私保护
阿里云Linux os copilot 运维助手初体验
阿里云Linux os copilot 初体验
355 1
阿里云Linux os copilot 运维助手初体验
|
4天前
|
存储 Kubernetes Java
阿里泛日志设计与实践问题之在写多查少的降本场景下,通过SLS Scan方案降低成本,如何实现
阿里泛日志设计与实践问题之在写多查少的降本场景下,通过SLS Scan方案降低成本,如何实现
|
4天前
|
弹性计算 监控 索引
阿里泛日志设计与实践问题之SLS Scan服务的稳定性和可用性如何保证
阿里泛日志设计与实践问题之SLS Scan服务的稳定性和可用性如何保证
|
4天前
|
存储 SQL JSON
阿里泛日志设计与实践问题之SLS Scan的语法该如何定义
阿里泛日志设计与实践问题之SLS Scan的语法该如何定义
|
1月前
|
弹性计算 运维 Linux
阿里云Linux os copilot 运维助手初体验
摘要(Markdown格式): 在阿里云ECS上体验了Linux编程助手OS Copilot,步骤包括申请账户、开通ECS、安装Copilot。Copilot准确解释代码、快速响应问答、辅助编程,尤其在代码生成和注解上表现出色。作为运维人员,认为其简化了工作,给出8分评价,并愿意推荐给他人。期望它能支持更多操作系统,优化代码直接运行功能,并与更多阿里云产品集成。目前只体验了Copilot的基础功能,未与其他类似产品对比。
|
3天前
|
机器学习/深度学习 编解码 人工智能
阿里云gpu云服务器租用价格:最新收费标准与活动价格及热门实例解析
随着人工智能、大数据和深度学习等领域的快速发展,GPU服务器的需求日益增长。阿里云的GPU服务器凭借强大的计算能力和灵活的资源配置,成为众多用户的首选。很多用户比较关心gpu云服务器的收费标准与活动价格情况,目前计算型gn6v实例云服务器一周价格为2138.27元/1周起,月付价格为3830.00元/1个月起;计算型gn7i实例云服务器一周价格为1793.30元/1周起,月付价格为3213.99元/1个月起;计算型 gn6i实例云服务器一周价格为942.11元/1周起,月付价格为1694.00元/1个月起。本文为大家整理汇总了gpu云服务器的最新收费标准与活动价格情况,以供参考。
阿里云gpu云服务器租用价格:最新收费标准与活动价格及热门实例解析
|
6天前
|
云安全 弹性计算 安全
阿里云服务器基础安全防护简介,云服务器基础安全防护及常见安全产品简介
在使用云服务器的过程中,云服务器的安全问题是很多用户非常关心的问题,阿里云服务器不仅提供了一些基础防护,我们也可以选择其他的云安全类产品来确保我们云服务器的安全。本文为大家介绍一下阿里云服务器的基础安全防护有哪些,以及阿里云的一些安全防护类云产品。
阿里云服务器基础安全防护简介,云服务器基础安全防护及常见安全产品简介

相关产品

  • 日志服务