前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >【玩转腾讯云】记一次容器服务日志处理过程

【玩转腾讯云】记一次容器服务日志处理过程

原创
作者头像
KaliArch
修改2021-04-25 10:49:26
7010
修改2021-04-25 10:49:26
举报
文章被收录于专栏:KaliArchKaliArchKaliArch

一、项目背景

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
  • 挂载日常存储的COScosfs your-bucketname your-mount-point -ourl=cos-domain-name -odbglevel=infoyour-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客户支持,大概两天才内部测试完成后给出了模板,希望后续可以完善一些产品的细节文档,文档完善才能使用户更好的使用产品。
  • 通过此次方式,是使用cos将数据持久化存储来减轻CKafka的压力,分业务适合用对日志数据不是非常及时的后期分析及处理消费场景。

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 一、项目背景
    • 1.1 项目痛点
      • 1.2 名称解释:
      • 二、问题分析
      • 三、问题解决
        • 3.1 容器服务配置
          • 3.3 消费终端CVM配置
            • 3.4 进行简单消费测试
            • 四、反思总结
            相关产品与服务
            消息队列 CKafka 版
            消息队列 CKafka 版(TDMQ for CKafka)是一个分布式、高吞吐量、高可扩展性的消息系统,100%兼容开源 Kafka API 2.4、2.8、3.2 版本。CKafka 基于发布/订阅模式,通过消息解耦,使生产者和消费者异步交互,无需彼此等待。CKafka 具有高可用、数据压缩、同时支持离线和实时数据处理等优点,适用于日志压缩收集、监控数据聚合、流式数据集成等场景。
            领券
            问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档