华为云日志服务LTS完全对接指南:从零搭建生产级日志分析平台
1. 云日志服务LTS概述
云日志服务(Log Tank Service,简称LTS)是华为云提供的日志数据一站式管理平台。它用于收集来自主机和云服务的日志数据,通过海量日志数据的分析与处理,可以将云服务和应用程序的可用性和性能最大化,为您提供实时、高效、安全的日志处理能力,帮助您快速高效地进行实时决策分析、设备运维管理、用户业务趋势分析等。
LTS的核心能力涵盖日志采集、存储、搜索分析、可视化、告警和转储等全链路功能。具体来说,LTS支持40多种华为云服务一键接入,如ELB、VPC、APIG、CTS、WAF等;提供百亿级日志秒级搜索能力,支持千亿条日志的迭代搜索;支持正则、JSON、分隔符、Nginx和结构化模板五种日志结构化方式;内置标准SQL查询语法,支持100多种SQL函数;提供多种可视化图表和开箱即用的仪表盘模板;支持关键词或SQL语句实时告警,可通过短信、邮件、钉钉、企业微信、HTTP等多种渠道通知;支持将日志转储至对象存储服务OBS、数据接入服务DIS或分布式消息服务DMS中长期保存。
LTS采用按需计费模式,计费项包括日志读写流量、日志索引流量、日志存储量(标准存储和冷存储)、日志转储流量等。新用户每月享有500MB的免费额度。LTS还提供包年/包月的资源包模式,适合对资源需求稳定且希望降低成本的用户。
需要先登录华为云控制台,点击:华为云控制台,还没有账号,点击:注册并关联,已有账号点击:登录后关联
2. LTS核心概念与架构
在使用LTS之前,需要理解几个核心概念:日志组、日志流、主机组和ICAgent。
2.1 日志组
日志组是LTS进行日志管理的基本单位。每个账号下最多可以创建100个日志组。日志组主要用于设置日志存储时间和对日志流进行归类管理。在实际使用中,通常按照项目、应用或环境来划分日志组,例如按开发环境、测试环境、生产环境分别创建不同的日志组。
2.2 日志流
日志流是日志读写的基本单位。每个日志组中最多可以创建100个日志流。日志流用于将不同类型的日志分类存储,方便对日志进一步分类管理。例如,可以将操作日志、访问日志、错误日志等接入不同的日志流,查询日志时可以进入对应的日志流快速查看。
2.3 ICAgent
ICAgent是LTS进行日志采集的工具,运行在需要采集日志的主机中。它是一款轻量级的日志采集代理,支持无侵入式采集主机文本日志和容器日志。ICAgent安装完成后,会将主机待采集日志的路径配置到日志流中,将多条日志进行打包,以日志流为单位发往LTS。
2.4 主机组
主机组是为了便于分类管理、提升配置多个主机日志采集的效率,对主机进行虚拟分组的单位。LTS支持通过一个接入配置来采集多台主机上的日志,您可以将这些主机加入到同一个主机组,并将该主机组关联至对应的接入配置中。当用户扩容主机时,只需在主机组中添加主机,该主机会自动继承关联的日志路径,无需为每台主机重复配置路径。
3. 日志接入方式详解
LTS提供多种日志接入方式,满足不同场景的日志采集需求。主要包括:ICAgent插件采集、云服务接入、API接入、SDK接入、数据导入、跨IAM账号接入、标准Kafka协议接入等。
3.1 ICAgent插件采集ECS主机文本日志
这是最常用的日志接入方式,适用于采集部署在ECS上的应用程序日志、系统日志等文本文件。
3.1.1 前置条件
在开始接入之前,需要完成以下准备工作:
- 为用户添加LTS的操作权限,至少需要LTS FullAccess权限
- 准备好需要采集日志的ECS主机
- 已创建日志组和日志流
3.1.2 安装ICAgent
ICAgent是云日志服务的日志采集工具,运行在需要采集日志的云主机中。首次使用云日志服务采集主机的日志时,需要安装ICAgent。
安装步骤:
- 登录云日志服务控制台
- 在左侧导航栏选择"主机管理 > 主机",进入"主机"页面
- 单击右上角"安装ICAgent",进入安装页面
- 选择主机类型(区域内主机或区域外主机)和安装系统(Linux)
- 选择安装方式(获取AK/SK凭证),获取访问密钥AK/SK
- 单击"复制命令",复制ICAgent安装命令
- 登录ECS主机,执行复制的安装命令
安装ICAgent前,请确保本地浏览器的时间、时区与主机的时间、时区一致。
3.1.3 配置日志接入
ICAgent安装完成后,需要配置日志接入规则:
- 登录管理控制台,选择"管理与部署 > 云日志服务 LTS",进入"日志管理"页面
- 左侧导航选择"接入 > 接入中心"进入日志接入页面
- 选择"云主机 ECS - 文本日志",进行接入日志配置
- 选择日志流:单击"所属日志组"和"所属日志流"的目标框,选择或新建日志组和日志流
- 选择主机组:在主机组列表中选择一个或多个需要采集日志的主机组
- 配置采集路径:设置日志文件的采集路径,支持通配符,如/var/log/*.log
- 配置索引:设置字段索引,以便后续对日志进行查询和分析
- 单击"提交",接入配置完成
日志大约每隔5秒钟上报一次,在日志消息区域,最多需要等待5秒钟左右即可查看实时上报的日志。
3.1.4 采集配置的约束
需要注意以下采集规则:
- 相同主机的同一个日志采集路径,如果在AOM进行了配置,则不能在LTS重复配置
- 新文件(首次采集):若文件最后修改时间与当前时间相差超过6小时,则不采集
- 旧文件(非首次采集):若文件最后修改时间与当前时间相差超过3分钟,则不采集
3.2 云服务一键接入
LTS支持40多种华为云服务一键接入,如ELB、WAF、APIG、CFW、CTS等。操作非常简单:
- 登录云日志服务控制台
- 在左侧导航栏中选择"日志接入 > 接入中心"
- 在类型下方选择"云服务"
- 鼠标悬浮在对应的云服务卡片上,单击"接入日志(LTS)"进入配置页面
- 按照界面提示完成配置即可
3.3 SDK接入
LTS提供多种语言的SDK,包括Java、Go、C++、Python、.Net、鸿蒙、Web、iOS、Android、小程序等。通过封装SDK直接进行二次开发,可以提升开发效率。
3.3.1 Python SDK示例
以下是使用Python SDK上报日志到LTS的示例代码:
# 安装LTS Python SDK
# pip install huaweicloudsdklts
from huaweicloudsdkcore.auth.credentials import BasicCredentials
from huaweicloudsdkcore.http.http_config import HttpConfig
from huaweicloudsdklts.v2 import LtsClient, CreateLogGroupRequest, CreateLogStreamRequest
# 配置认证信息
credentials = BasicCredentials(ak='your_ak', sk='your_sk', project_id='your_project_id')
# 配置HTTP
http_config = HttpConfig.get_default_config()
# 创建客户端
client = LtsClient.new_builder() \\
.with_credentials(credentials) \\
.with_http_config(http_config) \\
.with_region('cn-north-4') \\
.build()
# 上报日志的代码逻辑
# 注意:通过SDK上报日志到LTS的时间相距当前时间不超过2天
3.3.2 Web SDK示例
对于Web前端应用,可以使用Web SDK上报日志。使用Web SDK上报日志到LTS的场景下,需要开启日志流的匿名写入功能。
// NPM方式安装SDK
// npm install lts-web-sdk
const LTS_WEB_SDK = require('lts-web-sdk').default;
// 初始化SDK
const weblog = new LTS_WEB_SDK({
region: 'cn-north-4', // 上报region
projectId: 'your_project_id', // 项目ID
url: 'https://lts.cn-north-4.myhuaweicloud.com', // 上报地址
groupId: 'your_log_group_id', // LTS日志组ID
streamId: 'your_log_stream_id', // LTS日志流ID
debug: 'error', // 调试日志等级
cacheThreshold: 10, // 上报条数阈值
timeInterval: 3 // 上报时间阈值(秒)
});
// 立即上报单条带标签日志
weblog.reportImmediately({ 'name': 'xiaoming', 'age': 18 }, { 'key': 'value' });
// 立即上报单条不带标签日志
weblog.reportImmediately([{ key: 'value', number: 1 }]);
3.4 API接入
通过调用LTS提供的REST风格API将日志上报到LTS。LTS提供两个日志上报接口:
- 上报日志接口:上报在相近时间点且按顺序产生的日志
- 上报高精度日志接口:上报在不同时间且非顺序产生的日志
接入点IP可在LTS控制台安装ICAgent的安装命令中获取,端口为8102。
3.4.1 API调用示例
# 使用curl调用LTS上报日志接口示例
# 实际使用时需要替换为正确的接入点IP、端口和认证信息
curl -X POST \\
http://{access_ip}:8102/v2/{project_id}/lts/groups/{log_group_id}/streams/{log_stream_id}/tenant/logs \\
-H 'Content-Type: application/json' \\
-H 'X-Auth-Token: {token}' \\
-d '{
"logs": [
{
"content": "{\"level\":\"INFO\",\"message\":\"Application started\"}",
"labels": {
"service": "order-service",
"env": "production"
}
}
]
}'
3.5 标准Kafka协议接入
您可以通过标准Kafka协议将日志上报到云日志服务。这种方式仅依赖于Kafka协议,支持各类Kafka Producer SDK或采集工具。例如,如果您正在使用Flume、Logstash、Beats等开源采集工具,可以通过Kafka协议将日志上报到LTS。
3.6 跨IAM账号接入
通过创建委托,您可以将委托账号的日志流映射到被委托方账号的日志流下。这种方式适用于多账号统一日志管理的场景。
3.7 自建ELK日志导入LTS
如果您正在使用自建的ELK(Elasticsearch + Logstash + Kibana)日志系统,可以将其迁移到LTS。最佳实践是使用自定义Python脚本和LTS采集器ICAgent,协助将日志从Elasticsearch迁移到LTS中。具体做法是基于ECS机器安装ICAgent来采集日志文件,实现Elasticsearch日志导入云日志服务。
4. 日志查询与分析
日志接入LTS后,就可以进行查询和分析操作。
4.1 索引配置
索引是一种存储结构,用于对日志数据进行查询。通过配置索引后,可对日志进行查询和分析操作。LTS支持全文索引和字段索引两种方式。
- 全文索引:配置全文索引后,日志服务根据您设置的分词符将整条日志拆分成多个词
- 字段索引:配置字段索引后,可以指定字段名称和字段值进行查询
LTS默认的分词符为, ';=()[]{}@<>/:\\?\n\t\r。如果设置分词符为空,则字段值将被当成一个整体,只能通过完整日志内容或模糊搜索查找对应的日志。
4.2 日志搜索
LTS提供一套搜索语法用于设置搜索条件。查询语句用来指定日志查询时的过滤规则,返回符合条件的日志。根据查询精确程度可分为精确查询和模糊查询。
- 精确查询:使用完整的词进行查询。例如 region:r1 表示查询region字段值精确匹配r1的日志
- 模糊查询:在词的中间或者末尾加上星号(*)或问号(?)。星号代表匹配多个字符,问号代表匹配1个字符
- 短语查询:使用 #"abc def" 可以保证关键词出现的顺序
4.3 日志结构化
日志结构化是将原始日志按照指定规则拆分成键值对的过程。结构化后的日志可以使用SQL语法进行查询与分析。
LTS目前支持五种日志结构化方式:
- 正则分析:使用正则表达式提取字段,适用于每行内容为一条原始日志的场景
- JSON:适用于日志格式为JSON的场景
- 分隔符:适用于使用特定分隔符(如空格、逗号等)分隔字段的日志
- Nginx:专门针对Nginx访问日志的结构化解析
- 结构化模板:使用预定义模板进行结构化
配置结构化的步骤:
- 在"日志搜索"页面,单击右上角的日志设置
- 在弹出的页面中选择"云端结构化解析"
- 选择日志提取方法(正则、JSON、分隔符、Nginx或结构化模板)
- 输入日志样例,配置提取规则
- 保存配置
4.4 SQL查询分析
对原始日志结构化后,等待1-2分钟左右即可对结构化后的日志进行SQL查询与分析。LTS SQL提供了查询日志流中结构化数据的语句。
4.4.1 SQL基本语法
SQL基本查询语句格式:
SELECT [ ALL | DISTINCT ] { * | exprs }
FROM { <subquery> }
[ WHERE where_condition ]
[ GROUP BY [ col_name_list ] [ HAVING expr ] ]
[ ORDER BY expr [ ASC | DESC ], expr [ ASC | DESC ], ... ]
[ LIMIT limit ]
[ OFFSET offset ]
SQL语法中,字符必须被单引号('')包裹,无符号或双引号("")包裹的为字段或表名称。
4.4.2 SQL查询示例
-- 标准查询
SELECT "field" WHERE "field" = 'value'
-- 统计行数
SELECT count(*)
-- 列的别名
SELECT count(*) AS "pv"
-- 去重查询
SELECT DISTINCT("field")
-- 分组统计
SELECT host, count(*) AS pv WHERE visitCount > 0 GROUP BY host
-- 分组后过滤
SELECT host, count(*) AS pv GROUP BY host HAVING pv > 10
-- 排序查询
SELECT host, count(*) AS pv GROUP BY host ORDER BY pv DESC
-- 分页查询
SELECT "field" LIMIT 100
-- 时间范围查询
SELECT * WHERE __time > '2026-07-01 00:00:00' AND __time < '2026-07-02 00:00:00'
一次查询最多返回100000条结构化日志。如果不使用LIMIT语句,默认返回查询结果中最新的100条数据。
4.4.3 管道符搜索分析
LTS支持搜索和SQL分析联动,由搜索语句和SQL分析语句组成,两者通过管道符 | 联动。例如统计日志中包含error关键词的日志有多少条:
error | select count(*) as error_count
4.5 可视化仪表盘
仪表盘是一种数据可视化工具,它汇总并呈现关键性能指标、重要数据和分析结果。LTS提供多种仪表盘模板,用户可以直接使用LTS提供的仪表盘模板展示日志数据,或者将查询分析结果的统计图表同步保存到仪表盘中进行展示。
创建仪表盘的步骤:
- 在LTS控制台左侧导航栏中选择"仪表盘"
- 单击"添加仪表盘",配置相关参数
- 在"添加图表"区域中,单击"开始添加图表"
- 选择目标日志流,勾选需要展示的图表
- 调整图表布局,保存设计
LTS提供40多种开箱即用的仪表盘模板。其他云服务日志只要接入LTS即可直接使用仪表盘模板。
5. 日志告警配置
LTS支持对日志数据进行监控,通过配置告警规则,定时查询日志数据。当设置的匹配条数或条件表达式满足时,将告警进行上报。目前每个账号最多可以创建200个关键词告警。
5.1 告警类型
LTS支持以下统计类型的告警规则:
- 关键词统计告警:通过统计日志中关键词出现的次数来触发告警
- SQL统计告警:使用SQL语句查询结构化日志,根据查询结果触发告警
- 搜索分析告警:使用管道符(搜索|分析)方式配置告警
5.2 创建关键词告警规则
配置关键词告警的步骤:
- 登录云日志服务控制台
- 左侧导航选择"日志告警"
- 单击"告警规则"标签页
- 单击"创建",在界面右侧弹出"新建告警规则"页面
- 填写基本信息,选择日志组和日志流
- 在"关键词"输入框中输入要监控的关键词,支持精确匹配和模糊匹配
- 设置统计周期和触发条件
- 配置告警通知方式(短信、邮件、钉钉、企业微信、HTTP等)
- 单击"确定",完成创建
6. 日志转储
日志转储基于复制的转储机制,将需要长期存储的日志数据转储至对象存储服务OBS、数据接入服务DIS或分布式消息服务DMS中长期保存。
6.1 转储至OBS
配置日志转储至OBS的步骤:
- 登录云日志服务控制台
- 左侧导航选择"日志转储"
- 在"日志转储"页面右上角,单击"配置转储"
- 在"配置转储"页面,设置转储日志相关参数
- 选择需要转储的日志组和日志流
- 选择目标OBS桶和路径
- 设置转储周期(实时转储或周期性转储)
- 单击"确定",完成配置
- 日志读写流量:日志写入LTS和从LTS读取的流量费用
- 日志索引流量:为日志建立索引的流量费用
- 日志存储量:包括标准存储和冷存储的费用
- 日志转储流量:包括日志基础转储流量和日志高级转储流量
- 利用免费额度:新用户每月享有500MB的免费额度
- 冷热分层存储:热存储用于高性能查询,冷存储用于低成本长期保存
- 合理设置存储周期:根据业务需求设置合理的日志存储时间,及时老化过期日志
- 使用资源包:对于日志量稳定的场景,购买包年/包月资源包可以降低成本
- 优化索引策略:只对需要查询的字段建立索引,减少索引流量费用
- 按应用或服务划分日志组和日志流,便于管理和查询
- 使用主机组管理多台ECS的日志采集,提高运维效率
- 合理配置采集路径,避免采集不必要的日志文件
- 使用RAM子账号进行最小权限授权,避免主账号密钥泄露
- 开启日志流的匿名写入功能时注意安全风险
- 参考LTS安全配置建议,持续评估LTS的安全状态
- 利用同区域ECS内网访问LTS,免流量费用
- 合理设置日志上报的条数阈值和时间阈值,平衡实时性和网络开销
- 使用批量上报方式减少API调用次数
- 刚完成接入配置则需要等待1-5分钟,日志才会开始上报
- 检查ICAgent是否已安装
- 检查采集路径配置是否正确
- 检查LTS控制台上的"配置中心 > ICAgent采集开关"是否开启
- 排查相同主机的同一个日志采集路径是否已在AOM进行了配置
- 检查时间范围是否正确
- 检查索引配置是否正确
- 检查查询语句是否符合语法规范
- 确认日志是否已成功上报到LTS
如果需要周期性转储日志,推荐使用LTS的日志转储功能将当前日志实时转储到OBS桶中长期保存。
7. 成本优化与计费管理
7.1 计费项说明
LTS的计费项包含以下部分:
LTS按需计费模式按小时计费,每小时整点结算一次费用(以UTC+8时间为准)。当云日志服务不再上报日志时,流量费用停止计费;存储的日志全部老化后,日志存储量的费用才会停止计费。
7.2 成本优化建议
8. 最佳实践与常见问题
8.1 最佳实践建议
8.1.1 日志采集规划
8.1.2 安全与权限
8.1.3 性能优化
8.2 常见问题排查
8.2.1 日志无法上报
如果主机接入LTS后无法采集到日志,请按如下方法进行排查:
8.2.2 权限不足
配置LTS日志时如果提示权限不足,需要添加LTS FullAccess权限。主账号可以为子账号授予LTS FullAccess权限。
8.2.3 日志查询不到
9. 总结
华为云云日志服务LTS提供了从日志采集、存储、检索、分析到告警、转储的全链路日志管理能力。通过ICAgent插件、云服务接入、SDK接入、API接入等多种方式,可以灵活地将各类日志数据接入LTS。结合结构化解析和SQL查询分析功能,可以实现对海量日志的高效检索和深度分析。配合仪表盘可视化和告警功能,能够实时监控系统运行状态。
在实际使用中,建议根据业务场景合理规划日志组和日志流的结构,选择合适的接入方式,配置必要的索引和告警规则,同时关注成本优化和安全管理。通过本文的详细介绍,相信读者已经掌握了华为云LTS的对接使用方法,可以快速构建生产级的日志分析平台。
问答环节
问1:LTS和传统的ELK日志系统有什么区别?
答:LTS是华为云提供的全托管日志服务,无需关心底层资源的扩缩容和运维。而ELK需要自行搭建和维护Elasticsearch集群、Logstash和Kibana,运维成本较高。LTS提供40多种云服务的一键接入,而ELK需要自行配置各类数据源。LTS支持冷热分层存储,可以平衡查询性能和存储成本。
问2:如何将自建ELK的日志迁移到LTS?
答:华为云提供了最佳实践方案。使用自定义Python脚本和LTS采集器ICAgent,将日志从Elasticsearch迁移到LTS中。具体做法是在ECS上安装ICAgent,配置采集路径指向Elasticsearch的日志导出目录,即可实现日志迁移。
问3:LTS的日志存储时间是多久?可以永久保存吗?
答:日志存储时间由日志组的配置决定,可以在创建日志组时设置。如果需要永久保存,可以将日志转储至对象存储服务OBS。转储后的日志不会在LTS中被删除,可以长期保存。
问4:LTS如何收费?有免费额度吗?
答:LTS按需计费,计费项包括日志读写流量、日志索引流量、日志存储量、日志转储流量。新用户每月享有500MB的免费额度。按需计费按小时结算。对于日志量稳定的用户,可以购买包年/包月资源包以降低成本。
问5:LTS支持哪些编程语言的SDK?
答:LTS提供Java、Go、C++、Python、.Net、鸿蒙、Web、iOS、Android、小程序等多种语言的SDK。各语言SDK功能对齐,降低多端适配成本。用户可以根据自己的技术栈选择合适的SDK进行二次开发。
问6:LTS的日志查询性能如何?
答:LTS支持百亿级日志的秒级搜索。通过合理的索引配置和结构化解析,可以实现对海量日志的高效检索。一次查询最多返回100000条结构化日志。如果不使用LIMIT语句,默认返回查询结果中最新的100条数据。


