华为云LTS云日志服务实战:采集ECS日志与快速检索告警

举报
yd_235631729 发表于 2026/11/01 21:59:45 2026/11/01
【摘要】 本文以ECS上的Nginx为例,详解华为云云日志服务LTS的日志组与日志流创建、ICAgent安装、主机组与日志接入配置、关键词检索、结构化SQL分析及SMN关键词告警,并给出费用优化与常见排障建议。

一、背景:为什么需要集中式日志

业务部署到弹性云服务器(ECS)之后,排查问题时最常见的动作就是 SSH 登录服务器,执行 tail -f 或 grep 翻日志。机器少的时候还能应付,一旦应用扩展到多台 ECS、接入了弹性负载均衡和弹性伸缩,日志就会分散在不同主机上:实例被缩容释放后日志随之丢失,多台机器之间的请求链路也很难串起来。

华为云 云日志服务 LTS(Log Tank Service) 提供日志的实时采集、集中存储、快速检索、结构化分析和告警能力。本文以一台运行 Nginx 的 ECS 为例,手把手完成“安装 ICAgent → 配置采集 → 关键词检索 → 结构化与 SQL 分析 → 关键字告警”的完整流程,并分享一些费用和排障经验。

二、核心概念

在动手之前,先理清 LTS 中的几个对象:

概念 说明
日志组 日志的管理单元,通常按项目或环境划分,例如 lg-prod
日志流 日志读写的基本单元,挂在日志组下,例如 ls-nginx-access
ICAgent 部署在主机上的采集器,负责读取日志文件并上报到 LTS
主机组 一组安装了 ICAgent 的主机,采集配置以主机组为对象下发
日志接入 定义“从哪些主机、采集哪些路径、写入哪个日志流”的配置
日志存储时间 日志在 LTS 中保留的天数,到期自动删除

一条日志的流转路径是:ECS 日志文件 → ICAgent → 日志流 → 检索/分析/告警/转储。

三、实验准备

  • 区域:任选一个区域,例如“华北-北京四”,下文所有资源都在同一区域内创建;
  • 一台 ECS(Linux,CentOS/Huawei Cloud EulerOS/Ubuntu 均可),已安装 Nginx;
  • ECS 能访问华为云内网服务(默认 VPC 内即可,无需绑定弹性公网IP);
  • 账号具备 LTS 相关权限(如 LTS FullAccess)。

Nginx 默认访问日志路径为 /var/log/nginx/access.log,错误日志为 /var/log/nginx/error.log。

四、操作步骤

1. 创建日志组与日志流

  1. 登录华为云控制台,在服务列表中搜索并进入“云日志服务 LTS”。
  2. 在“日志管理”页面点击“创建日志组”,名称填写 lg-demo,日志存储时间按需设置,测试环境建议 7 天以节省费用。
  3. 进入 lg-demo,点击“创建日志流”,分别创建 ls-nginx-access 和 ls-nginx-error 两个日志流。

按日志类型拆分日志流,后续做结构化和告警会更清晰。

2. 在 ECS 上安装 ICAgent

  1. 在 LTS 控制台左侧选择“主机管理”,点击“安装ICAgent”。
  2. 系统选择 Linux,安装方式选择对应的 CPU 架构,按页面提示获取安装命令。安装需要使用 IAM 用户的访问密钥(AK/SK)完成认证,建议为采集专门创建一个仅具备 LTS 权限的 IAM 子用户,不要使用主账号密钥。
  3. 以 root 身份登录 ECS,粘贴控制台生成的安装命令执行,看到安装成功提示即可。
  4. 安装完成后回到“主机管理”,稍等一两分钟,主机状态显示为“运行”即表示 ICAgent 已正常上报心跳。

可以在 ECS 上确认进程是否存在:

ps -ef | grep -i icagent | grep -v grep

提示:如果主机较多,可以先在一台主机上安装成功,再通过控制台的“继承安装”批量部署到同 VPC 的其他主机,避免逐台登录。

3. 创建主机组

  1. 在“主机管理 → 主机组”中点击“创建主机组”,名称填写 hg-nginx。
  2. 类型选择“IP”,勾选刚才安装好 ICAgent 的 ECS。

如果后续接入弹性伸缩,可以改用“自定义标识”类型的主机组:在镜像中写入同一个标识,新扩容的实例启动后会自动加入主机组,无需手工维护。

4. 配置日志接入

  1. 在左侧选择“日志接入”,点击“云主机 ECS - 文本日志”。
  2. 选择日志组 lg-demo、日志流 ls-nginx-access。
  3. 选择主机组 hg-nginx。
  4. 采集配置中填写路径:
/var/log/nginx/access.log
  1. 日志格式选择“单行日志”;如果是 Java 异常栈这类多行日志,则选择“多行日志”,并用正则指定每条日志的首行特征,例如以日期开头:
^\d{4}-\d{2}-\d{2}
  1. 按同样方法为 /var/log/nginx/error.log 创建接入配置,写入 ls-nginx-error。

路径支持通配符,例如 /var/log/myapp/*.log,适合按天滚动生成新文件的场景。

5. 产生测试日志

在 ECS 上执行几次请求,制造一些正常和异常访问:

for i in $(seq 1 20); do curl -s -o /dev/null http://127.0.0.1/; done
for i in $(seq 1 5); do curl -s -o /dev/null http://127.0.0.1/not-exist-$i; done

大约几秒到十几秒后,在日志流 ls-nginx-access 中就能看到实时上报的日志。

五、快速检索日志

进入日志流后,在检索框输入关键词即可查询,常用写法如下:

404
GET AND 404
error OR timeout
"/not-exist-1"
NOT 200

几点使用经验:

  • 关键词检索依赖分词,默认分词符包含空格、斜杠、引号等常见符号,路径类内容可以用双引号做短语查询;
  • 右上角选择时间范围,查询越精确、时间范围越小,返回越快;
  • 点击任意一条日志的“上下文”,可以查看该日志在原始文件中的前后若干行,排查异常栈非常方便;
  • 常用的查询条件可以“另存为快速查询”,下次一键调用。

六、结构化与 SQL 分析

原始 Nginx 访问日志是一整行文本,要统计状态码分布、接口耗时,就需要先做结构化。

  1. 在日志流详情中进入“设置 → 云端结构化解析”。
  2. 选择“Nginx”模板或“正则分析”,以如下常见的 Nginx 日志格式为例:
log_format main '$remote_addr - $remote_user [$time_local] "$request" '
                '$status $body_bytes_sent "$http_referer" '
                '"$http_user_agent" $request_time';
  1. 解析出 remote_addr、request、status、body_bytes_sent、request_time 等字段,并为 status、request_time 设置合适的字段类型(如 long、float)。
  2. 结构化生效后,新上报的日志就可以在“可视化”页签用 SQL 分析,例如统计各状态码数量:
SELECT status, COUNT(*) AS cnt
GROUP BY status
ORDER BY cnt DESC

查询平均耗时最高的请求:

SELECT request, AVG(request_time) AS avg_rt, COUNT(*) AS pv
GROUP BY request
ORDER BY avg_rt DESC
LIMIT 10

查询结果可以一键切换为柱状图、饼图、折线图,并添加到仪表盘,形成简单的访问监控大盘。

七、配置日志告警

光能查还不够,我们希望 5xx 错误突增时第一时间收到通知。

  1. 先在“消息通知服务 SMN”中创建主题,例如 topic-ops,并添加邮件或短信订阅,确认订阅生效。
  2. 回到 LTS,选择“告警 → 告警规则 → 创建”,规则类型选择“关键词告警”或“SQL告警”。
  3. 以关键词告警为例:
    • 日志流选择 ls-nginx-access;
    • 查询语句填写 status >= 500(结构化后字段可直接引用),或在未结构化时使用关键词 " 500 " OR " 502 " OR " 504 ";
    • 查询时间范围:最近 5 分钟;条件:命中条数大于等于 10;
    • 检查频率:每 5 分钟;
    • 告警级别:重要。
  4. 在通知配置中关联 SMN 主题 topic-ops,可使用消息模板自定义告警内容。

保存后可在“告警列表”中查看告警历史与恢复记录。对于 error.log,也可以配置“出现 upstream timed out 即告警”的规则,快速发现后端超时问题。

八、费用与常见问题

费用优化建议:

  • 按需设置日志存储时间,测试环境 3~7 天即可;
  • 只采集真正需要的日志路径,避免把调试级别的大日志全量上报;
  • 需要长期留存审计日志时,可配置“日志转储”到对象存储服务 OBS,LTS 中只保留近期热数据。

常见问题排查:

  1. 主机状态为“离线”:检查 ECS 安全组和网络 ACL 出方向是否放通,ICAgent 进程是否存活,AK/SK 对应用户是否被禁用。
  2. 日志流中看不到日志:确认采集路径与实际路径一致、日志文件有读权限,且文件有新内容写入(ICAgent 默认从文件末尾开始采集)。
  3. 多行日志被拆成多条:检查多行模式的首行正则是否正确匹配每条日志的开头。
  4. SQL 查询报字段不存在:结构化只对配置生效后的新日志起作用,历史日志不会被重新解析。

九、总结

通过云日志服务 LTS,我们把分散在 ECS 上的日志统一采集到云端:用 ICAgent 和主机组完成批量接入,用关键词检索快速定位问题,用结构化与 SQL 分析统计访问情况,再结合 SMN 实现异常告警。搭配云监控服务 CES 的指标监控,基本可以构成一套轻量的可观测体系。建议从一个核心应用开始接入,逐步沉淀查询语句和告警规则,让排障从“登录服务器翻日志”变成“打开控制台看结论”。

【声明】本内容来自华为云开发者社区博主,不代表华为云及华为云开发者社区的观点和立场。转载时必须标注文章的来源(华为云社区)、文章链接、文章作者等基本信息,否则作者和本社区有权追究责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0)

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。