腾讯云容器服务大容量日志的处理记录

一、项目背景

1.1 项目痛点

在目前小程序为主的大背景下,有客户大部分业务在腾讯云,使用的大部分为容器服务,在大规模的使用容器下,需要对容器内业务的日志采集及分析,在腾讯云对应容器服务的日志提供了两种消费方式:Kafka、日志服务CLS。
但是对应业务线众多,在腾讯云容器服务只能指定十条日志收集规则,完全满足不了大规模日志收集场景,客户已经指定分业务两种消费方式均使用了起来,Kafka&日志服务,但是在Ckafka查看日志发现最高每分钟20W条消息,尽管已经最大程度的提升了消费端的能力(消费端使用Logstash,然后重新将数据导入ELK集群中使用),但是在每分钟20w条的大数据下,查看CKafka内部有大量未消费条目存在,长此以往,CKafka性能及存量均无法满足,且和腾讯咨询发现目前该地域Ckafka已经售完,需要一周时间来底层扩容。

  • 客户痛点如下图:(来自同事的ppt)

1.2 名称解释:

  • 容器服务:腾讯云容器服务(Tencent Kubernetes Engine,TKE)基于原生 kubernetes 提供以容器为核心的、高度可扩展的高性能容器管理服务。腾讯云容器服务完全兼容原生 kubernetes API ,扩展了腾讯云的 CBS、CLB 等 kubernetes 插件,为容器化的应用提供高效部署、资源调度、服务发现和动态伸缩等一系列完整功能,解决用户开发、测试及运维过程的环境一致性问题,提高了大规模容器集群管理的便捷性,帮助用户降低成本,提高效率。容器服务提供免费使用,涉及的其他云产品另外单独计费。详细可参考:腾讯云容器服务
  • 对象存储:对象存储服务(Cloud Object Storage,COS)是面向企业和个人开发者提供的高可用,高稳定,强安全的云端存储服务。您可以将任意数量和形式的非结构化数据放入 COS,并在其中实现数据的管理和处理。COS 支持标准的 Restful API 接口,您可以快速上手使用,按实际使用量计费,无最低使用限制。详细可参考:腾讯云对象存储
  • 日志服务:日志服务(Cloud Log Service)提供一站式的日志数据解决方案。您无需关注扩缩容等资源问题,五分钟快速便捷接入,即可享受从日志采集、日志存储到日志内容搜索、统计分析等全方位稳定可靠的日志服务。帮助您轻松解决业务问题定位,指标监控、安全审计等日志问题。大大降低日志运维门槛。详细可参考腾讯云日志服务
  • 消息队列CKafka:CKafka(Cloud Kafka)是一个分布式的、高吞吐量、高可扩展性的消息系统,100% 兼容开源 Kafka API(0.9版本)。 Ckafka 基于发布/订阅模式,通过消息解耦,使生产者和消费者异步交互,无需彼此等待。 Ckafka 具有数据压缩、同时支持离线和实时数据处理等优点,适用于日志压缩收集、监控数据聚合等场景。腾讯云消息队列CKafka

二、问题分析

针对大量日志在Ckafka未消费,且腾讯无法开出Ckafka的背景下,先为客户提出三种解决方案:

  • 容器日志源选择指定容器,针对项目选择指定服务下的容器。然后消费端选择到ckafka下不同的topic,这样来分摊kafka压力。(一个规则只能指定一个topic,容器太多,10条规则无法满足)
  • 增加ckafka的消费能力(例如多增加几个logstash),kafka只是消息队列,消息得不到消费kafka就压力大。(根据和客户商讨,目前logstash的consumer_threads已经设置为topic的最大分区数,如果要增加logstash的实例,那么需要增加topic的partitions数,也无法满足)
  • 将容器日志消费端选择为cls的topic,然后在cls里将日志投递存放到cos,后面再从cos里取出来进行消费。(待确认,如果可以将数据通过cls存放到cos,后期在利用logstash来进行消费,那就可以解决此问题)

三、问题解决

3.1 容器服务配置

先进行简单容器服务创建测试应用

  • 测试的容器测试服务集群
  • 新建服务
    选择namespace,及服务所在的地域

    进行部署设置,可以选择公共容器,也可现在自定义容器,配置容器网络及逻辑卷等信息,最后配置端口映射。
  • 创建好后就可以通过公网负载均衡进行容器访问

  • 新建日志收集规则
  • 指定消费端

    3.2 日志服务投递配置

  • 创建日志集管理
  • 创建日志投递规则,将cls的内容投递到cos内
    在日志投递中,可以开启高级过滤功能,利用此功能可以将不同日志投递到不同bucket,或同一个bucket的不同目录下,来进行日志区分,以便后期消费。

例如日志格式:

__CONTENT__: {"docker":{"container_id":"894905ad526dd90f548bf35ece4b81f4d68359722d7ec719f3b81628da32fe20"},"kubernetes":{"container_name":"nginx","host":"172.16.9.11","labels":{"pod-template-hash":"1074266372","qcloud-app":"nginx"},"log":"default_nginx","master_url":"https://192.168.255.1:443","namespace_name":"default","pod_id":"5d4ae59f-9f6c-11e8-89c8-5254000e53ff","pod_name":"nginx-54c86bb7c6-wvm6z"},"log":"192.168.1.1 - - [25/Aug/2018:13:17:14 +0000] \"GET / HTTP/1.1\" 200 612 \"-\" \"Mozilla/5.0 (Windows NT 6.1; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/41.0.2272.89 Safari/537.36\" \"-\"\n","stream":"stdout","time":"2018-08-25T13:17:14.310411833Z"}
根据container_name来进行正则日志过滤:.*\"container_name\":\"([^\"]+)\".* 

注意:这里根据腾讯云官网给的仅有的一个实例进行测试无法通过,经过多次测试均为已经投递但是数据没有从cls到cos内部,经过后面自己测试结果如下:

  • key必须制定为索引__CONTENT__
  • 正则表达式:可以根据具体的容器分类来做,这里建议使用container_name便于区分
  • value为日志经过正则匹配到的内容,和value的相同及命中此条日志,从而将此条日志进行按照规则投递到cos内。


  • 查看COS内的日志投递信息


3.3 消费终端CVM配置

  • 安装COSFS工具

详细操作方法可参考:COSFS操作

sudo yum install automake gcc-c++ git libcurl-devel libxml2-devel fuse-devel make openssl-devel
git clone https://github.com/tencentyun/cosfs /usr/cosfs
cd /usr/cosfs
./autogen.sh
./configure
make
sudo make install

写入配置文件:

echo <bucketname>:<SecretId>:<SecretKey> > /etc/passwd-cosfs
chmod 640 /etc/passwd-cosfs
  • 挂载日常存储的COS

    cosfs your-bucketname your-mount-point -ourl=cos-domain-name -odbglevel=info

    your-bucketname 需要替换为用户真实的信息;
    your-mount-point 替换为本地需要挂载的目录(如 /mnt);
    cos-domain-name 为存储桶对应的访问域名,形式为 http://cos.<Region>.myqcloud.com (适用于XML API),其中 为地域简称,如: ap-guangzhou 、 eu-frankfurt 等.
    查看文件

input {
    file {
        path => "/cosdata/access-log2018/08/*"
    }
    }
output {
    elasticsearch {
        hosts => "127.0.0.1:9200"
    }
    stdout { codec => rubydebug }
}

3.4 进行简单消费测试

  • 查看ES中日志数据
    通过访问es的9200端口可以
  • 利用Kibana查看日志

四、反思总结

  • 我这在客户大量的数据下,腾讯的文档写的真的不是很全,在cls日志投递功能的高级过滤段,文档完全没介绍其中的正则改怎么写,自己尝试发现不行后,工单及VIP客户支持,大概两天才内部测试完成后给出了模板,希望后续可以完善一些产品的细节文档,文档完善才能使用户更好的使用产品。其次希望腾讯能对每个地域的线下IDC机房的资源进行更改的前期规划和后期扩容管理,以免像类似这种,需要等待一周时间才能某地域的某种云产品,这对于互联网公司的方案及业务有很大的影响。
  • 通过此次方式,是使用cos将数据持久化存储来减轻CKafka的压力,分业务适合用对日志数据不是非常及时的后期分析及处理消费场景。

原文地址:http://blog.51cto.com/kaliarch/2164385

时间: 2024-11-05 20:30:31

腾讯云容器服务大容量日志的处理记录的相关文章

腾讯云容器服务的滚动升级使用简介

版权声明:本文由腾讯云容器服务 原创文章,转载请注明出处: 文章原文链接:https://www.qcloud.com/community/article/216046001482723263 来源:腾云阁 https://www.qcloud.com/community 作者介绍:于广游 腾讯云后台开发工程师 欢迎加入腾讯云容器服务QQ交流群434653499  1.什么是滚动升级 滚动升级是一种多副本服务的升级方式,其特点是能够保证升级过程中服务不中断,对外界无感知.其原理大致为循环的执行以

在阿里云容器服务上开发基于Docker的Spring Cloud微服务应用

本文为阿里云容器服务Spring Cloud应用开发系列文章的第一篇. 一.在阿里云容器服务上开发Spring Cloud微服务应用(本文) 二.部署Spring Cloud应用示例 三.服务发现 四.服务间通信与集成 五.服务智能路由 六.集中配置管理 七.高可用和容错 八.监控和日志 九.服务的部署和发布策略 微服务概述 单体应用通常指在一个程序中满足多个业务或技术领域的需求,不同的需求领域内化为模块.假定我们要开发一个Web应用,通常的MVC模式可以满足要求.针对不同领域有不少代码生成工具

阿里云容器服务与 ASP.NET Core 的 Docker 部署:用 docker secrets 保存 appsettings.Production.json

这是我们使用阿里云容器服务基于 docker 容器部署 asp.net core 应用遇到的另一个问题 —— 如果将包含敏感信息的应用配置文件 appsettings.Production.json 传递给运行在容器中的 asp.net core 应用. Docker 针对这样的应用场景已经提供了解决方案 —— Docker Secrets,对应的 docker 命令是 docker secret .我们就用 docker secrets 解决了这个问题,在这篇随笔中分享一下. 首先在阿里云容器

品尝阿里云容器服务:初步尝试ASP.NET Core Web API站点的Docker自动化部署

部署场景是这样的,我们基于 ASP.NET Core 2.0 Preview 1 开发了一个用于管理缓存的 Web API ,想通过阿里云容器服务基于 Docker 部署为内网服务. 在这篇博文中分享一下经过实践验证的操作步骤: 一.创建与配置集群 1)首先创建一个 Swarm Mode 的集群(注意创建时不要选择“自动创建负载均衡”,因为我们部署的是内网服务,自动创建的是公网负载均衡,需要手动创建内网负载均衡并绑定到集群): 2)集群创建成功后,会在集群列表中显示下面的信息: 3)接着创建一个

品尝阿里云容器服务:用nginx镜像创建容器,体验基于域名的路由机制

在前一篇博文中我们了解了阿里云容器服务的路由机制: 请求 -> 负载均衡80端口 -> 容器主机9080端口 -> acsrouting路由容器80端口 --基于域名--> Web站点容器端口 在这篇博文中,我们用nginx镜像创建一个容器实际体验一下. 使用容器服务首先要创建一个集群(Cluster),比如这里我们创建一个名叫websites的集群(使用的是swarm mode): 创建好集群后,点击“管理”,进入集群管理页面 -> “负载均衡” -> “域名设置”,

腾讯云游戏服务平台CMatrix品牌全新升级为GameMatrix

近日,隶属腾讯互娱公共研发运营体系(下文称CROS)下的云游戏服务平台CMatrix宣布进行品牌升级,启用全新商标Tencent GameMatrix,将原先代表云服务的“C”替换成游戏的英文单词“Game”,意指更加聚焦游戏,赋能行业. 同时,CROS在原CMatrix团队和前沿技术中心云游技术团队的基础上, 联合音视频技术.网络优化.计算资源管理.智能运维.平台统一登陆.用户平台及游戏安全等相关技术团队,组建了一支更为强大的队伍,将内部资源进一步集中. 腾讯GameMatrix架构图 受益于

跑赢阿里云和百度,腾讯云凭啥刷新大数据国际记录?

2016年11月10日,具有计算奥运会之称的Sort Benchmark全球排序竞赛公布结果,其中,腾讯云用98.8秒完成100TB的数据排序,打破阿里云去年创造的329秒记录,以及更早前百度的716秒纪录,这引起了业界的关注. 众所周知,腾讯云直到最近几年才开始发力公有云和大数据业务,而阿里云早从2009年开始就已经大张旗鼓的发展云计算业务,进入2016年全力推进大数据业务.那么,腾讯云在2016年底刷新大数据国际比赛的纪录,是偶然事件还是确有过人之处?记者就此采访了腾讯云副总裁.腾讯数据平台

腾讯云主机 搭建lamp环境踩坑记录

手上有两台完全相同的腾讯云主机(CentOS6.5 64位), 第一台搭建环境正常, 第二台搭建完成之后就是不能访问 结果发现一台主机默认开放端口是22, 其它没有开放, 那么apache访问是需要80端口的, 所以才不能访问 解决方法:修改安全组,开放80端口

品尝阿里云容器服务:5个2核4G节点使用情况记载

使用5台2核4G非IO优化的ECS作为节点创建集群,节点操作系统是Ubuntu 16.04.2 LTS.创建后3个为mananger节点,2个为worker节点,每个节点默认会运行7个容器,其中3个system容器: acs-agent acsvolumedriver_volumedriver tunnel-agent 4个default容器: acslogging_logspout acslogging_logtail acsmonitoring_acs-monitoring-agent,ac