腾讯云日志服务CLS采集网站运行日志完全指南
引言:为什么网站需要统一的日志服务
网站运行过程中会产生大量日志数据,包括Web服务器的访问日志、应用程序的运行日志、数据库的慢查询日志等。这些日志分散在不同的服务器和容器中,传统的运维方式通常需要登录到每台机器上使用grep、awk等命令手工排查问题,当服务器规模扩大到数十台甚至上百台时,这种方式几乎不可行。腾讯云日志服务(Cloud Log Service,CLS)正是为解决这一痛点而设计的一站式日志服务平台,提供了从日志采集、日志存储到日志检索分析、实时消费、日志投递等多项服务。本文将以网站运行日志采集为核心场景,从零开始讲解如何使用腾讯云CLS构建一套完整的日志采集与分析体系。
需要先登录腾讯云控制台,点击:腾讯云控制台,还没有账号,点击:注册后再关联,已有账号点击:登录后再关联
一、认识腾讯云日志服务CLS
1.1 什么是CLS
日志服务(Cloud Log Service,CLS)是腾讯云提供的一站式日志数据解决方案,支持日志、指标数据的采集、ETL、检索分析、可视化及告警的一体化可观测SaaS服务。CLS的核心价值在于让用户无需关注资源扩容问题,五分钟便捷接入即可享受稳定可靠的日志服务。CLS采用高可用的分布式架构设计,对日志数据进行多冗余备份存储,防止单节点服务宕机导致数据不可用,提供达99.9%的服务可用性。
1.2 CLS的核心概念
在使用CLS之前,需要理解以下几个核心概念:
- 日志集(Logset):日志集是日志服务中的资源管理单元,用于资源隔离和控制,一个日志集可以理解为一个项目。
- 日志主题(Topic):日志主题是日志数据的收集、存储和查询单元,一个日志集可以包含多个日志主题,每个日志主题对应一类服务或一种日志类型。
- 机器组(Machine Group):机器组用于统一管理一组日志源机器,通过将服务器IP地址加入机器组,可以批量对多台机器进行日志采集配置。
- LogListener:LogListener是CLS提供的专用日志采集客户端,部署在日志源服务器上,可实现快速无侵入式地把日志数据采集到日志服务中。
1.3 CLS的计费模式
CLS默认采用按量计费方式,先使用后付费,按照各计费项的实际用量以天为单位进行计量、结算、扣费和出账。同时CLS也提供资源包这种优惠套餐,先购买后使用,资源包支持CLS所有计费项的抵扣,结算时系统将优先从资源包抵扣各计费项,超出部分按量计费。2022年9月5日后开通CLS的新用户可免费领取10U×3个月的资源包(价值30元),用于抵扣按量计费产生的费用。
二、开通CLS服务与准备工作
2.1 开通CLS服务
首先需要在腾讯云官网申请开通日志服务。登录腾讯云控制台后,在产品与服务中找到"日志服务"或直接搜索CLS,进入产品页面后单击"立即开通"即可。开通服务本身不产生费用,费用在后续使用日志采集和存储时才会产生。
2.2 创建日志集与日志主题
日志服务区分地域,为了降低网络延迟,应尽可能选择与服务邻近的地域创建日志资源。在CLS控制台左侧导航栏中单击"日志主题",进入日志主题管理页面。单击"创建日志主题",在弹出的窗口中填写以下信息:
- 日志主题名称:例如"website-access-log"或"nginx-error-log",建议根据日志类型命名以便后续管理。
- 日志集操作:可以选择现有日志集或新建日志集。如果是首次使用,建议选择"创建日志集"并输入日志集名称。
- 存储时间:支持1至3600天的有限保存,也可以选择永久保存。对于网站访问日志,通常建议保留30-90天;对于错误日志,可根据实际需要适当延长。
一个日志主题目前仅支持配置一类日志,例如业务日志和事件日志不可采用同一个日志主题,否则会产生覆盖情况。
2.3 准备API密钥
安装LogListener时需要用到API密钥。登录访问管理控制台,查看或创建密钥对,并确认密钥状态为启用。SecretId用于标识API调用者身份,SecretKey用于加密签名字符串和服务器端验证签名字符串。若主账号已授权协作者日志服务的读写权限,建议使用协作者密钥以提高安全性。
三、安装与配置LogListener采集客户端
3.1 网络连通性检查
安装LogListener要求日志源机器的网络与日志服务的可用地域网络互通。对于腾讯云服务器,默认可以通过内网访问日志服务。可以执行以下命令检查网络连通性,其中region为日志服务所在地域简称:
ping ap-guangzhou.cls.tencentyun.com如果网络不通,需要检查安全组规则是否放行了相应端口,或确认地域配置是否正确。
3.2 Linux环境下安装LogListener
LogListener支持主流Linux操作系统,包括TencentOS Server、CentOS(64位)、Ubuntu(64位)、Debian(64位)、openSUSE(64位)等。安装步骤如下:
首先下载loglistener_operator脚本。内网环境下使用以下命令:
wget https://mirrors.tencentyun.com/install/cls/script/loglistener/loglistener_operator && chmod u+x loglistener_operator外网环境下使用:
wget https://mirrors.tencent.com/install/cls/script/loglistener/loglistener_operator && chmod u+x loglistener_operator使用root用户执行安装命令。内网环境安装最新版本:
./loglistener_operator install -s ${secret_id} -k ${secret_key} -r ${region}外网环境安装最新版本:
./loglistener_operator install -s ${secret_id} -k ${secret_key} -r ${region} -n internet其中${secret_id}和${secret_key}替换为实际API密钥,${region}替换为日志服务所在地域。安装命令中-secret_id、-secret_key、-region为必填参数。执行安装指令后,LogListener将默认安装在相应目录下。
3.3 Windows环境下安装LogListener
LogListener仅支持64位Windows Server操作系统环境,包括Windows Server 2012R2、2016、2019、2022、2025等版本。以管理员身份运行Windows PowerShell,在解压缩后的路径下执行以下命令:
内网环境:
.\loglistener_installer.exe install --secret_id AKID******************************** --secret_key whHwQfjdLnzzCE1jIf09xxxxxxxxxxxx --region ap-xxxxxx --network intra外网环境:
.\loglistener_installer.exe install --secret_id AKID******************************** --secret_key whHwQfjdLnzzCE1jIf09xxxxxxxxxxxx --region ap-xxxxxx --network internet初始化命令中--secret_id、--secret_key、--region为必填参数。--region为日志服务区域,而非业务机器所在区域。云服务器与日志集同地域的情况下建议使用内网方式,不同地域则建议使用外网方式。
3.4 创建机器组并绑定服务器
完成LogListener安装并启动后,需要在日志服务控制台创建或选择已有机器组,并将服务器加入机器组中。操作步骤如下:
- 登录日志服务控制台,在左侧导航栏单击"机器组管理"。
- 在页面顶部选择合适的地域,单击"新建机器组"。
- 一个机器组可以填入多个机器IP地址(每行一个IP地址),若是腾讯云服务器CVM,直接填写内网IP地址即可。
- 创建完成后,在日志主题的采集配置中关联该机器组。
四、采集网站运行日志实战
4.1 采集Nginx访问日志
Nginx作为最常用的Web服务器和反向代理服务,在实际业务场景中处理大量服务请求,会产生海量的访问日志。将Nginx访问日志采集到CLS是网站日志采集最典型的场景。
4.1.1 配置Nginx日志格式
Nginx访问日志的格式可以通过log_format指令定义。标准的日志格式配置如下:
log_format main '$remote_addr - $remote_user [$time_local] '
'"$request" $status $body_bytes_sent '
'"$http_referer" "$http_user_agent"';各字段说明如下:
- remote_addr:客户端IP地址
- remote_user:客户端用户名
- time_local:服务器本地时间
- request:HTTP请求方法和URL
- status:HTTP请求状态码
- body_bytes_sent:发送给客户端的字节数
- http_referer:访问来源页面URL
- http_user_agent:客户端浏览器信息
在Nginx配置文件的http块或server块中配置上述log_format,并在access_log指令中引用:
access_log /var/log/nginx/access.log main;4.1.2 在CLS控制台配置Nginx日志采集
在CLS控制台中有两种方式配置Nginx日志采集:
方式一:使用快速集成。在CLS控制台的"概览"页面,找到"快速集成"区域,单击"服务器与应用"下的"Nginx日志",即可进入采集配置流程。
方式二:手动配置。在日志主题管理页面选择目标日志主题,单击其名称进入日志主题管理页面。选择"采集配置"页签,在LogListener采集配置中单击"新增"。在日志数据源选择页面,找到并单击"Nginx日志"。
配置采集路径时,Linux系统日志路径必须以/开头:
/var/log/nginx/access.log也支持通配符匹配,例如采集/var/log/nginx/目录下所有以.log结尾的文件:
/var/log/nginx/*.log4.1.3 配置索引与字段解析
采集到CLS的日志需要进行索引配置才能进行检索分析。索引配置的核心是对原始日志进行分词,以便快速根据特定检索条件检索日志。在索引配置中还可以针对特定字段开启统计,便于使用SQL对日志进行统计分析。
对于Nginx访问日志,建议为以下字段开启索引:
- remote_addr(客户端IP)
- status(状态码)
- request(请求URL)
- http_user_agent(用户代理)
4.2 采集Nginx错误日志
除了访问日志,Nginx的错误日志(error.log)同样重要,记录了服务器运行过程中的错误信息。采集错误日志的配置方法与访问日志类似,只需将采集路径设置为:
/var/log/nginx/error.log建议为错误日志单独创建一个日志主题(如"nginx-error-log"),与访问日志分开存储和管理,便于后续的故障排查和告警配置。
4.3 采集应用程序日志
对于Java Web应用程序,可以使用日志框架(如Log4j、Logback)将日志输出到指定文件,然后通过LogListener采集。常见的采集路径包括:
/opt/app/logs/*.log
/usr/local/tomcat/logs/*.log对于Python应用(如Django、Flask),可以将日志输出到/var/log/app/目录下;对于Node.js应用,可以使用winston或pino等日志库将日志写入文件。采集配置的关键是确保应用程序有权限写入日志文件,且LogListener有权限读取这些文件。
4.4 容器环境下的日志采集
在Kubernetes或Serverless容器环境中,CLS同样提供了完善的日志采集方案。操作步骤如下:
- 登录Serverless控制台或容器服务控制台。
- 在左侧导航中选择数据工程>工作流,或选择运维功能管理。
- 单击服务名称进入工作流详情,选择日志管理,单击新增采集配置。
采集类型支持容器标准输出和容器文件路径两种:
- 容器标准输出:仅支持Stderr和Stdout的日志,适用于采集容器标准输出流中的日志。
- 容器文件路径:支持采集容器内指定路径的日志文件,采集路径支持通配规则,例如/opt/logs/*.log。
日志源支持所有容器或指定Pod Labels。通过Pod Label可以精准采集带有特定标签的Pod日志,例如:
app=nginx
env=production采集策略支持全量或增量两种模式:
- 全量采集:从日志文件的开头开始采集,确保不丢失任何日志。
- 增量采集:从距离文件末尾1M处开始采集,适用于日志量极大的场景。
需要注意的是,"容器文件路径"不能为符号链接或硬链接,否则会导致采集失败。
五、日志检索与深度分析
5.1 检索语法基础
CLS的检索分析语句由检索条件和SQL语句组成,两者通过竖线|分割。如果只需要检索日志而不需要统计分析,可以省略管道符及SQL语句:
[检索条件] | [SQL 语句]CLS支持两种检索语法:
- CQL(CLS Query Language):CLS专用检索语法,专为日志检索设计,推荐使用。
- Lucene:开源Lucene语法,由于并非专为日志检索设计,不推荐作为首选。
5.2 常用检索示例
以下是一些常用的日志检索示例:
检索所有状态码大于400的请求:
status>400检索GET请求中状态码大于400的日志:
method:GET AND status>400检索特定客户端IP的访问记录:
remote_addr:192.168.1.100检索包含特定关键词的错误日志:
__CONTENT__:"OutOfMemoryError"5.3 SQL统计分析
开启索引统计功能后,可以使用SQL对日志进行深度统计分析。以下是一些常用的分析语句:
按状态码统计请求数量:
* | SELECT status, count(*) AS pv GROUP BY status ORDER BY pv DESC统计每小时请求量:
* | SELECT DATE_FORMAT(__TIMESTAMP__, '%Y-%m-%d %H:00:00') AS hour, count(*) AS requests GROUP BY hour ORDER BY hour统计TOP 10访问IP:
* | SELECT remote_addr, count(*) AS visits GROUP BY remote_addr ORDER BY visits DESC LIMIT 10统计平均响应时间(假设日志中有response_time字段):
* | SELECT AVG(response_time) AS avg_rt5.4 仪表盘可视化
CLS提供了仪表盘功能,可以将常用的统计分析结果以图表形式展示。对于Nginx日志,CLS预置了常见的Nginx日志统计仪表盘,可以快速了解当前Nginx运行状态和终端用户访问行为。用户也可以自定义仪表盘,将PV趋势、状态码分布、TOP URL、TOP IP等关键指标集中展示在一个面板上,实现运维监控的一站式可视化。
六、告警策略配置
6.1 创建告警策略
CLS支持基于日志的告警策略配置,当满足特定条件时自动发送告警通知。配置步骤如下:
- 登录CLS控制台,选择目标日志主题。
- 单击"告警策略",然后点击"新建策略"。
- 定义触发条件,支持字段过滤(如status==500)和统计聚合(如count(1)>100)。
6.2 典型告警场景
场景一:HTTP 5xx错误告警
当5分钟内5xx状态码超过一定阈值时触发告警:
status>=500 | SELECT count(*) AS error_count WHERE error_count > 50场景二:404错误突增告警
status=404 | SELECT count(*) AS not_found WHERE not_found > 100场景三:LogListener心跳告警
当LogListener与CLS服务的心跳中断时,可能意味着采集端异常,需要及时关注。
6.3 告警沉默与通知
为避免告警风暴,可以配置告警沉默时间。在告警策略的"高级设置"中,可以设置告警沉默周期,在同一周期内重复触发告警时不重复发送通知。告警通知渠道支持短信、邮件、微信、企业微信等多种方式,可以根据团队习惯灵活配置。
七、日志生命周期管理与成本优化
7.1 日志沉降与归档
CLS支持日志沉降功能,支持日志接入标准存储一段时间后,将数据从标准存储沉降到低频存储保存。在保证一定日志统计分析能力的基础上,可以大幅降低日志的存储成本。自动沉降策略基于时间或访问频率自动迁移数据,历史数据存储成本可降低67%。
配置方法:在日志主题的"存储配置"中,设置标准存储保留天数(如30天),超过该天数的日志将自动沉降到低频存储。低频存储的成本约为标准存储的三分之一。
7.2 缩短日志保留周期
日志存储周期越长,日志存储费用和索引存储费用越高。对于网站访问日志,建议根据实际业务需求设置合理的保留周期:
- 实时监控和故障排查:建议保留7-30天
- 安全审计和合规要求:可能需要保留90天以上
- 历史趋势分析:可以沉降到低频存储或投递到对象存储COS长期保存
7.3 索引优化
索引流量和索引存储费用通常是写流量和日志存储费用的数倍,主要因为它们是按未压缩的日志数据量计费的。如果希望降低索引费用,可以考虑:
- 仅对需要检索和统计的字段开启索引,避免全字段索引
- 关闭全文索引,改为仅对特定字段建立键值索引
- 定期清理不需要的索引字段
7.4 流量费用优化
如果流量费用占据绝大比例,可以考虑以下策略:
- 减少采集端日志的打印量,避免记录过多无用信息
- 通过数据加工过滤掉无用日志,只保留有价值的数据
- 确保云服务器与CLS服务在同一地域,使用内网传输避免外网流量费用
八、安全与权限管理
8.1 最小权限原则
在配置LogListener时,建议使用协作者密钥而非主账号密钥。在访问管理控制台中,可以为不同的子账号分配不同的CLS操作权限,例如:
- 日志采集权限:仅允许上传日志
- 日志检索权限:仅允许查询和分析日志
- 日志管理权限:允许创建和修改日志主题、机器组等
8.2 日志数据加密
CLS对存储的日志数据进行加密保护,确保日志数据在传输和存储过程中的安全性。对于敏感日志数据,可以在应用层进行脱敏处理后再上传。
8.3 访问日志审计
通过CLS的操作日志功能,可以记录谁在什么时间对哪些日志主题进行了什么操作,满足安全审计要求。
九、常见问题排查
9.1 日志采集不到
如果发现CLS控制台没有收到日志,按以下步骤排查:
- 检查机器组配置是否正确,确认服务器IP已加入机器组。
- 检查LogListener进程是否正常运行。
- 检查网络连通性,执行ping命令确认与CLS服务端网络可达。
- 检查日志采集路径是否正确,确认LogListener有读取权限。
- 检查日志主题的索引是否已开启。
9.2 检索不到日志
如果在"预览"中有数据但检索无结果,常见原因包括:
- 查询的字段未建立索引,CLS默认仅对部分字段建立索引。
- 检索语法错误,检查是否使用了正确的CQL或Lucene语法。
- 时间范围选择错误,确认检索的时间范围包含了目标日志所在时间段。
9.3 日志被截断
如果采集到CLS的日志被截断,通常是因为单条日志的大小超过了CLS的单条日志限制(一般为1MB)。解决方案包括:
- 检查应用程序日志输出,避免单行日志过长
- 将长日志拆分为多条短日志输出
- 对于超长的堆栈跟踪,考虑只记录关键信息
结语
通过本文的完整讲解,读者应该已经掌握了从开通腾讯云日志服务CLS、安装配置LogListener采集客户端、创建日志主题与机器组,到采集Nginx访问日志和错误日志、进行检索分析与SQL统计、配置告警策略、优化存储成本的全流程技能。CLS作为腾讯云提供的一站式日志服务平台,将日志采集、存储、检索、分析、告警、可视化等能力整合在一起,让运维工程师无需再登录每台服务器手工排查日志,而是可以在统一的控制台上快速定位问题、分析趋势、配置告警。对于正在从传统运维向云原生运维转型的团队来说,掌握CLS的使用是提升运维效率的重要一步。
常见问题问答
问1:CLS和SLS是什么关系?
CLS(Cloud Log Service)是腾讯云日志服务的官方产品名称。SLS(Log Service)是阿里云日志服务的产品名称。两者都是云原生日志服务平台,但属于不同云厂商。本文中所有采集配置均针对腾讯云CLS。
问2:LogListener采集日志会对服务器性能产生影响吗?
LogListener经过性能优化,资源占用较低。在正常负载下,CPU占用通常在1%-5%之间,内存占用通常在100MB以内。但如果日志量极大(每秒数万条),建议适当调整LogListener的配置参数或增加服务器资源。
问3:CLS支持采集哪些类型的日志?
CLS支持采集文本日志、JSON日志、系统日志、应用程序日志、容器日志等多种类型。通过LogListener可以采集服务器上的任意文本文件;通过API和SDK可以上传结构化日志数据;对于部分云产品(如CDN、负载均衡等),可以直接在云产品控制台开启日志投递到CLS。
问4:CLS中的日志可以保存多久?如何删除日志?
CLS支持1至3600天的有限保存,也可以选择永久保存。已经采集到CLS日志主题中的日志处于只读状态,不支持手动编辑或删除,只能在日志超出有效保存周期后被自动清理。用户可以在日志主题的基本信息中查看或修改日志保留时间。
问5:CLS的成本主要由哪些部分构成?如何省钱?
CLS的成本主要由写流量、日志存储、索引流量、索引存储、读流量等计费项构成。省钱策略包括:合理设置日志保留周期、开启日志沉降到低频存储、只对必要字段开启索引、使用内网传输避免外网流量、使用资源包抵扣用量。
问6:容器环境下的日志采集和传统服务器有什么不同?
容器环境下的日志采集主要区别在于:采集源是容器而非物理机或虚拟机,支持通过Pod Labels进行精准采集。采集类型支持容器标准输出和容器文件路径两种。在Kubernetes环境中,需要为集群开启日志采集功能,并通过CLS控制台配置采集规则。




