当前位置:主页 > 查看内容

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

发布时间:2021-04-25 00:00| 位朋友查看

简介:背景 随着IT数字化发展 企业级业务量不断增加 产生的日志量也逐渐加大 由此产生的问题定位也越来越复杂。为了快捷完成日志数据采集、消费、投递以及查询分析等功能 提升运维、运营效率 建立DT时代海量日志处理能力。阿里云日志服务 Log Service 简称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 ) AS Time, student_type, count(*) as PV GROUP BY Time, student_type ORDER BY Time ASC , student_type ASC

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

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

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

获取日志聚类结果
* | select a.pattern, a.count,a.signature, a.origin_signatures from (select log_reduce(3) as a from log) limit 1000
字符串函数

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

* | SELECT count(*) AS PV, split_part(request_uri, ? , 1) AS Path GROUP BY Path ORDER BY pv DESC LIMIT 3
同比环比函数

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

* | SELECT compare(PV, 86400) FROM (SELECT count(*) 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 (SELECT count(*) AS PV FROM log))
IP地理函数

统计请求总数Top10的省份

* | SELECT count(*) as PV, ip_to_province(client_ip) AS province GROUP BY province ORDER BY PV desc LIMIT 10

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的必要参数
JSONObject metaValueJsonObject new JSONObject();
metaValueJsonObject.put( projectName , projectName );
metaValueJsonObject.put( logStoreName , logStoreName );
metaValueJsonObject.put( role , role );
// 创建etlMeta对象, 用来配合etlJob进行日志分发
EtlMeta etlMeta new EtlMeta();
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

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



本文转自网络,原文链接:https://developer.aliyun.com/article/783758
本站部分内容转载于网络,版权归原作者所有,转载之目的在于传播更多优秀技术内容,如有侵权请联系QQ/微信:153890879删除,谢谢!

推荐图文

  • 周排行
  • 月排行
  • 总排行

随机推荐