华为云LTS云日志服务实战:采集ECS日志与快速检索告警
一、背景:为什么需要集中式日志
业务部署到弹性云服务器(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. 创建日志组与日志流
- 登录华为云控制台,在服务列表中搜索并进入“云日志服务 LTS”。
- 在“日志管理”页面点击“创建日志组”,名称填写
lg-demo,日志存储时间按需设置,测试环境建议 7 天以节省费用。 - 进入
lg-demo,点击“创建日志流”,分别创建ls-nginx-access和ls-nginx-error两个日志流。
按日志类型拆分日志流,后续做结构化和告警会更清晰。
2. 在 ECS 上安装 ICAgent
- 在 LTS 控制台左侧选择“主机管理”,点击“安装ICAgent”。
- 系统选择 Linux,安装方式选择对应的 CPU 架构,按页面提示获取安装命令。安装需要使用 IAM 用户的访问密钥(AK/SK)完成认证,建议为采集专门创建一个仅具备 LTS 权限的 IAM 子用户,不要使用主账号密钥。
- 以 root 身份登录 ECS,粘贴控制台生成的安装命令执行,看到安装成功提示即可。
- 安装完成后回到“主机管理”,稍等一两分钟,主机状态显示为“运行”即表示 ICAgent 已正常上报心跳。
可以在 ECS 上确认进程是否存在:
ps -ef | grep -i icagent | grep -v grep
提示:如果主机较多,可以先在一台主机上安装成功,再通过控制台的“继承安装”批量部署到同 VPC 的其他主机,避免逐台登录。
3. 创建主机组
- 在“主机管理 → 主机组”中点击“创建主机组”,名称填写
hg-nginx。 - 类型选择“IP”,勾选刚才安装好 ICAgent 的 ECS。
如果后续接入弹性伸缩,可以改用“自定义标识”类型的主机组:在镜像中写入同一个标识,新扩容的实例启动后会自动加入主机组,无需手工维护。
4. 配置日志接入
- 在左侧选择“日志接入”,点击“云主机 ECS - 文本日志”。
- 选择日志组
lg-demo、日志流ls-nginx-access。 - 选择主机组
hg-nginx。 - 采集配置中填写路径:
/var/log/nginx/access.log
- 日志格式选择“单行日志”;如果是 Java 异常栈这类多行日志,则选择“多行日志”,并用正则指定每条日志的首行特征,例如以日期开头:
^\d{4}-\d{2}-\d{2}
- 按同样方法为
/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 访问日志是一整行文本,要统计状态码分布、接口耗时,就需要先做结构化。
- 在日志流详情中进入“设置 → 云端结构化解析”。
- 选择“Nginx”模板或“正则分析”,以如下常见的 Nginx 日志格式为例:
log_format main '$remote_addr - $remote_user [$time_local] "$request" '
'$status $body_bytes_sent "$http_referer" '
'"$http_user_agent" $request_time';
- 解析出
remote_addr、request、status、body_bytes_sent、request_time等字段,并为status、request_time设置合适的字段类型(如 long、float)。 - 结构化生效后,新上报的日志就可以在“可视化”页签用 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 错误突增时第一时间收到通知。
- 先在“消息通知服务 SMN”中创建主题,例如
topic-ops,并添加邮件或短信订阅,确认订阅生效。 - 回到 LTS,选择“告警 → 告警规则 → 创建”,规则类型选择“关键词告警”或“SQL告警”。
- 以关键词告警为例:
- 日志流选择
ls-nginx-access; - 查询语句填写
status >= 500(结构化后字段可直接引用),或在未结构化时使用关键词" 500 " OR " 502 " OR " 504 "; - 查询时间范围:最近 5 分钟;条件:命中条数大于等于 10;
- 检查频率:每 5 分钟;
- 告警级别:重要。
- 日志流选择
- 在通知配置中关联 SMN 主题
topic-ops,可使用消息模板自定义告警内容。
保存后可在“告警列表”中查看告警历史与恢复记录。对于 error.log,也可以配置“出现 upstream timed out 即告警”的规则,快速发现后端超时问题。
八、费用与常见问题
费用优化建议:
- 按需设置日志存储时间,测试环境 3~7 天即可;
- 只采集真正需要的日志路径,避免把调试级别的大日志全量上报;
- 需要长期留存审计日志时,可配置“日志转储”到对象存储服务 OBS,LTS 中只保留近期热数据。
常见问题排查:
- 主机状态为“离线”:检查 ECS 安全组和网络 ACL 出方向是否放通,ICAgent 进程是否存活,AK/SK 对应用户是否被禁用。
- 日志流中看不到日志:确认采集路径与实际路径一致、日志文件有读权限,且文件有新内容写入(ICAgent 默认从文件末尾开始采集)。
- 多行日志被拆成多条:检查多行模式的首行正则是否正确匹配每条日志的开头。
- SQL 查询报字段不存在:结构化只对配置生效后的新日志起作用,历史日志不会被重新解析。
九、总结
通过云日志服务 LTS,我们把分散在 ECS 上的日志统一采集到云端:用 ICAgent 和主机组完成批量接入,用关键词检索快速定位问题,用结构化与 SQL 分析统计访问情况,再结合 SMN 实现异常告警。搭配云监控服务 CES 的指标监控,基本可以构成一套轻量的可观测体系。建议从一个核心应用开始接入,逐步沉淀查询语句和告警规则,让排障从“登录服务器翻日志”变成“打开控制台看结论”。
- 点赞
- 收藏
- 关注作者
评论(0)