阿里云日志服务(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:

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


相关实践学习
通过日志服务实现云资源OSS的安全审计
本实验介绍如何通过日志服务实现云资源OSS的安全审计。
相关文章
|
4月前
|
自然语言处理 监控 安全
阿里云发布可观测MCP!支持自然语言查询和分析多模态日志
阿里云可观测官方发布了Observable MCP Server,提供了一系列访问阿里云可观测各产品的工具能力,包含阿里云日志服务SLS、阿里云应用实时监控服务ARMS等,支持用户通过自然语言形式查询
480 0
阿里云发布可观测MCP!支持自然语言查询和分析多模态日志
|
6月前
|
存储 消息中间件 缓存
MiniMax GenAI 可观测性分析 :基于阿里云 SelectDB 构建 PB 级别日志系统
基于阿里云SelectDB,MiniMax构建了覆盖国内及海外业务的日志可观测中台,总体数据规模超过数PB,日均新增日志写入量达数百TB。系统在P95分位查询场景下的响应时间小于3秒,峰值时刻实现了超过10GB/s的读写吞吐。通过存算分离、高压缩比算法和单副本热缓存等技术手段,MiniMax在优化性能的同时显著降低了建设成本,计算资源用量降低40%,热数据存储用量降低50%,为未来业务的高速发展和技术演进奠定了坚实基础。
256 1
MiniMax GenAI 可观测性分析 :基于阿里云 SelectDB 构建 PB 级别日志系统
|
6月前
|
监控 Java 应用服务中间件
Tomcat log日志解析
理解和解析Tomcat日志文件对于诊断和解决Web应用中的问题至关重要。通过分析 `catalina.out`、`localhost.log`、`localhost_access_log.*.txt`、`manager.log`和 `host-manager.log`等日志文件,可以快速定位和解决问题,确保Tomcat服务器的稳定运行。掌握这些日志解析技巧,可以显著提高运维和开发效率。
456 13
|
6月前
|
缓存 Java 编译器
|
6月前
|
域名解析 应用服务中间件 网络安全
阿里云个人博客外网访问中断应急指南:从安全组到日志的七步排查法
1. 检查安全组配置:确认阿里云安全组已开放HTTP/HTTPS端口,添加规则允许目标端口(如80/443),授权对象设为`0.0.0.0/0`。 2. 本地防火墙设置:确保服务器防火墙未阻止外部流量,Windows启用入站规则,Linux检查iptables或临时关闭防火墙测试。 3. 验证Web服务状态:检查Apache/Nginx/IIS是否运行并监听所有IP,使用命令行工具确认监听状态。 4. 测试网络连通性:使用外部工具和内网工具测试服务器端口是否开放,排除本地可访问但外网不可的问题。 5. 排查DNS解析:确认域名A记录指向正确公网IP,使用`ping/nslookup`验证解析正
210 2
|
6月前
|
SQL 存储 关系型数据库
简单聊聊MySQL的三大日志(Redo Log、Binlog和Undo Log)各有什么区别
在MySQL数据库管理中,理解Redo Log(重做日志)、Binlog(二进制日志)和Undo Log(回滚日志)至关重要。Redo Log确保数据持久性和崩溃恢复;Binlog用于主从复制和数据恢复,记录逻辑操作;Undo Log支持事务的原子性和隔离性,实现回滚与MVCC。三者协同工作,保障事务ACID特性。文章还详细解析了日志写入流程及可能的异常情况,帮助深入理解数据库日志机制。
594 0
|
6月前
|
存储 监控 安全
网络安全视角:从地域到账号的阿里云日志审计实践
网络安全视角:从地域到账号的阿里云日志审计实践
124 0
|
7月前
|
SQL 分布式计算 Serverless
基于阿里云 EMR Serverless Spark 版快速搭建OSS日志分析应用
基于阿里云 EMR Serverless Spark 版快速搭建OSS日志分析应用
143 0
|
10月前
|
XML 安全 Java
【日志框架整合】Slf4j、Log4j、Log4j2、Logback配置模板
本文介绍了Java日志框架的基本概念和使用方法,重点讨论了SLF4J、Log4j、Logback和Log4j2之间的关系及其性能对比。SLF4J作为一个日志抽象层,允许开发者使用统一的日志接口,而Log4j、Logback和Log4j2则是具体的日志实现框架。Log4j2在性能上优于Logback,推荐在新项目中使用。文章还详细说明了如何在Spring Boot项目中配置Log4j2和Logback,以及如何使用Lombok简化日志记录。最后,提供了一些日志配置的最佳实践,包括滚动日志、统一日志格式和提高日志性能的方法。
2825 31
【日志框架整合】Slf4j、Log4j、Log4j2、Logback配置模板
|
9月前
|
监控 安全 Apache
什么是Apache日志?为什么Apache日志分析很重要?
Apache是全球广泛使用的Web服务器软件,支持超过30%的活跃网站。它通过接收和处理HTTP请求,与后端服务器通信,返回响应并记录日志,确保网页请求的快速准确处理。Apache日志分为访问日志和错误日志,对提升用户体验、保障安全及优化性能至关重要。EventLog Analyzer等工具可有效管理和分析这些日志,增强Web服务的安全性和可靠性。
243 9

相关产品

  • 日志服务