简介
日志服务 (Log Service, 简称 LOG) 是针对日志类数据的一站式服务, 无需开发就能快捷完成日志数据采集, 消费, 投递以及查询分析等功能, 提升运维, 运营效率, 建立 DT 时代海量日志处理能力.
关键定义
日志(Log)
日志服务采用半结构数据模式定义一条日志. 该模式中包含:
主题(Topic),
时间(Time),
内容(Content),
来源(Source)
标签(Tags)
其中 Content 是 K/V 对, 里面存放的是具体的内容
日志组(LogGroup)
日志组 (LogGroup) 是一组日志的集合, 是 API/SDK 写入与读取数据的基本单位, 使用 LogGroup 主要目的是最大限度地减少读取与写入次数, 提高业务效率.
一个 LogGroup 中的数据包含相同 Meta(IP,Source 等信息), 这个 Meta 信息即为主题, 来源和标签内容.
项目(Project)
项目 (Project) 是日志服务中的资源管理单元, 用于资源隔离和控制. 你可以把它看作是一个文件夹.
日志库(Logstore)
日志库 (Logstore) 是日志服务中日志数据的采集, 存储和查询单元. 你可以把它看作文件夹里面的文件.
分区(Shard)
Logstore 读写日志必定保存在某一个分区 (Shard) 上. 每个日志库 (Logstore) 分若干个分区, 每个分区由 MD5 左闭右开区间组成, 每个区间范围不会相互覆盖, 并且所有的区间的范围是 MD5 整个取值范围.
分区的目的是为了提高写入效率, 数据写入时会根据不同的 md5 值写入不同的分区.
运转流程
简单来讲, 主要包括数据收集, 查询分析和其他操作. 其他操作有包括可视化, 告警, 实时消费等. 其中最基本的需求是收集和查询.
数据收集
阿里提供了多种数据采集方式, 支持客户端, 网页, 协议, SDK/API 等多种日志无损采集方式, 所有采集方式均基于 Restful API 实现.
操作系统级别:
Logtail
语言:
其中主流的语言都支持
不支持的小众语言可以根据 API 自己写
数据库:
- MySQL Binlog
- JDBC Select
移动端:
iOS/Android SDK
网页 JS/web Tracking
智能 IoT C Producer Library
查询分析
特别注意查询与分析是两部分, 格式为
$Search |$Analytics
实例:
- status>200 |
- select avg(latency),max(latency) ,count(1) as c
- GROUP BY method
- ORDER BY c DESC LIMIT 20
建立索引:
索引分为两种: 全文索引和指定字段查询. 一般情况下建议开启全文索引, 结构化的数据建议指定字段查询. 查询时默认先按字段查询, 查询不到会再按全文索引查询. 如图所示 content 是 JSON 结构的字段, 这儿注意 headers.remoteip 是 2 级的, 即解析这种结构{content: {remote:{ip:'127.0.0.1'}}}
索引建立完成后, 可以在快速分析看到:
其他操作
可视化分析:
统计图表, 可以接合分析查看一些简单的图表
对接 Jaeger, 实现跟踪相关功能
对接阿里 DataV, 实现实时大屏
对接 grafana, 实现可视化查看
告警:
根据需要, 把日志分析和统计图表结合, 设定警戒线, 超过时, 发出告警信息.
实时消费:
可实现类似 kafka 的功能, 作为日志的消息队列
数据投递:
实现把数据投递到其他阿里产品, 实现相关功能
来源: https://yq.aliyun.com/articles/701315