Loading [MathJax]/jax/output/CommonHTML/config.js
前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >专栏 >通过DaemonSet-CRD方式采集TKE日志

通过DaemonSet-CRD方式采集TKE日志

原创
作者头像
tinkerli
发布于 2021-04-07 14:56:04
发布于 2021-04-07 14:56:04
1.2K10
代码可运行
举报
文章被收录于专栏:日志服务CLS日志服务CLS
运行总次数:0
代码可运行

在TKE中LogListener是以DaemonSet模式运行,可通过CRD方式创建采集配置采集TKE集群日志。本文介绍如何通过CRD方式创建采集配置。

前提条件

需要开启日志采集功能,详情请参考开启日志采集

创建采集配置

您只需要定义 LogConfig CRD 即可创建采集配置,LogListener 根据 LogConfig CRD 的变化修改相应的日志服务 CLS 日志主题,并设置绑定的机器组。CRD 的格式如下:

代码语言:yaml
AI代码解释
复制
apiVersion: cls.cloud.tencent.com/v1
   kind: LogConfig                          ## 默认值
metadata:
  name: test                                ## CRD资源名,在集群内唯一
spec:
  clsDetail:
    topicId: xxxxxx-xx-xx-xx-xxxxxxxx       ## CLS日志主题的ID,日志主题需要在CLS中提前创建,且没有被其它采集配置占用
    logType: minimalist_log                 ## 日志采集格式,json_log代表 json 格式,delimiter_log代表分隔符格式,minimalist_log代表单行全文格式,multiline_log代表多行全文格式,fullregex_log代表完全正则格式
    extractRule:                            ## 提取、过滤规则
      ...
  inputDetail:
    type: container_stdout                  ## 采集日志的类型,包括container_stdout(容器标准输出)、container_file(容器文件)、host_file(主机文件)

    containerStdout:                        ## 容器标准输出
      namespace: default                    ## 采集容器的kubernetes命名空间,如果不指定,代表所有命名空间
      allContainers: false                  ## 是否采集指定命名空间中的所有容器的标准输出
      container: xxx                        ## 满足includeLabels的Pod中的容器名,只有在指定includeLabels时使用
     includeLabels:                         ## 采集包含指定label的Pod
        k8s-app: xxx                        ## 只采pod标签中配置"k8s-app=xxx"的pod产生的日志,与workloads、allContainers=true不能同时指定
      workloads:                            ## 要采集的容器的Pod所属的kubernetes workload
      - namespace: prod                     ## workload的命名空间
        name: sample-app                    ## workload的名字
        kind: deployment                    ## workload类型,支持deployment、daemonset、statefulset、job、cronjob
        container: xxx                      ## 要采集的容器名,如果不指定,代表workload Pod中的所有容器

    containerFile:                          ## 容器内文件
      namespace: default                    ## 采集容器的kubernetes命名空间
      container: xxx                        ## 采集容器名
     includeLabels:                         ## 采集包含指定label的Pod
        k8s-app: xxx                        ## 只采pod标签中配置"k8s-app=xxx"的pod产生的日志,与workload不能同时指定
      workload:                             ## 要采集的容器的Pod所属的kubernetes workload
        name: sample-app                    ## workload的名字                  
        kind: deployment                    ## workload类型,支持deployment、daemonset、statefulset、job、cronjob
      logPath: /opt/logs                    ## 日志文件夹,不支持通配符
      filePattern: app_*.log                ## 日志文件名,支持通配符 * 和 ? ,* 表示匹配多个任意字符,? 表示匹配单个任意字符

    hostFile:                               ## 主机文件
      logPath: /opt/logs                    ## 日志文件夹,支持通配符
      filePattern: app_*.log                ## 日志文件名,支持通配符 * 和 ? ,* 表示匹配多个任意字符,? 表示匹配单个任意字符
      customLablels
        k1: v1

查看采集配置

  • 查看所有采集配置
代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
[root@VM-1-24-centos ~]# kubectl get logconfigs
NAME            AGE
cls-delimiter   48m
stdout-lgs      4h21m
www-nginx       75m

  • 查看采集配置的详细信息和状态
  1. 其中stdout-lgs 为配置的名称,可以根据实际情况进行替换;
  2. status字段值为Synced表示应用配置成功,否则表示应用配置失败。
代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
[root@VM-1-24-centos ~]# kubectl get logconfigs stdout-lgs -o yaml
apiVersion: cls.cloud.tencent.com/v1
kind: LogConfig
metadata:
  creationTimestamp: "2021-04-07T09:33:42Z"
  generation: 2
  managedFields:
  - apiVersion: cls.cloud.tencent.com/v1
  ......
  name: stdout-lgs
spec:
  clsDetail:
    extractRule:
      beginningRegex: (\S+)\s-[^-]+(\S+)\s\[([^\]]+)\]\s"(\w+)\s(\S+)\s([^"]+)"\s(\d+)\s(\d+)\s(\S+)[^-]+([^"]+)"\s"([^"]+)[^-]+([^"]+)"\s"([^"]+).*
      keys:
      - client_ip
      - remote_user
      - request_time
      - request_method
      - request_url
      - http_protocol
      - status_code
      - body_bytes_sent
      - handle_time
      - http_referer
      - http_user_agent
      - real_ip
      - log_time
      logRegex: (\S+)\s-[^-]+(\S+)\s\[([^\]]+)\]\s"(\w+)\s(\S+)\s([^"]+)"\s(\d+)\s(\d+)\s(\S+)[^-]+([^"]+)"\s"([^"]+)[^-]+([^"]+)"\s"([^"]+).*
    logType: fullregex_log
    topicId: 4511efaa-2cad-4c3c-8c7c-d3bb5a58d903
  inputDetail:
    containerStdout:
      includeLabels:
        k8s-app: tke-cls-nginx-std
      namespace: cls-wk
    type: container_stdout
status:
  status: Synced
  

采集示例

标准输出

  • 采集一个namespace是cls-wk,标签是tke-cls-nginx的所有容器的标准输出的配置
代码语言:yaml
AI代码解释
复制
apiVersion: cls.cloud.tencent.com/v1
kind: LogConfig
metadata:
    # 配置名称,集群唯一
    name: test123
spec:
    # 消费端配置
   clsDetail:
       # 消费的topic id
       topicId: 4224b4f3-9ee8-46e3-822a-xxxxxxxxx
       # 提取模式
       logType: minimalist_log
   inputDetail:
       # 采集类型
       type: container_stdout
       containerStdout:
           # 所属namespace
           namespace: cls-wk
           # 对应容器的标签
           includeLabels:
               k8s-app: tke-cls-nginx

  • 正则表达提取模式
代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
apiVersion: cls.cloud.tencent.com/v1
kind: LogConfig
metadata:
    # 配置名称,集群唯一
    name: stdout-lgs
spec:
    clsDetail:
        extractRule:
            beginningRegex: (\S+)\s-[^-]+(\S+)\s\[([^\]]+)\]\s"(\w+)\s(\S+)\s([^"]+)"\s(\d+)\s(\d+)\s(\S+)[^-]+([^"]+)"\s"([^"]+)[^-]+([^"]+)"\s"([^"]+).*
            # 提起的键值
            keys:
            - client_ip
            - remote_user
            - request_time
            - request_method
            - request_url
            - http_protocol
            - status_code
            - body_bytes_sent
            - handle_time
            - http_referer
            - http_user_agent
            - real_ip
            - log_time
            # 正则表达式,会根据()捕获组提取对应的value
            logRegex: (\S+)\s-[^-]+(\S+)\s\[([^\]]+)\]\s"(\w+)\s(\S+)\s([^"]+)"\s(\d+)\s(\d+)\s(\S+)[^-]+([^"]+)"\s"([^"]+)[^-]+([^"]+)"\s"([^"]+).*
        # 日志采集格式:完全正则提取模式
        logType: fullregex_log
        topicId: 4511efaa-2cad-4c3c-8c7c-xxxxxxxxx
    inputDetail:
        containerStdout:
            # pod 标签
            includeLabels:
                k8s-app: tke-cls-nginx-std
            namespace: cls-wk
        # 采集类型
        type: container_stdout

应用配置后,日志服务的数据格式如下:

容器文件

  • 采集deployment为nginx-logfile,容器名为nginx-logfile的日志文件,其中日志文件路径为/data/log/nginx,*.log结尾的文件。
代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
apiVersion: cls.cloud.tencent.com/v1
kind: LogConfig
metadata:
  # 配置名称,集群唯一
  name: www-nginx
spec:
  clsDetail:
    # 日志采集格式
    logType: minimalist_log
    topicId: 56a32d6f-77da-4c4a-a7d1-xxxxxxxxx
  inputDetail:
    containerFile:
      container: nginx-logfile
      # 文件名,支持通配符*和?
      filePattern: '*.log'
      logPath: /data/log/nginx
      namespace: cls-wk
      workload:
        kind: deployment
        name: nginx-logfile
    # 采集类型为容器文件
    type: container_file
  • 分隔符模式的日志文件
代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
apiVersion: cls.cloud.tencent.com/v1
kind: LogConfig
metadata:
  # 配置名称,集群唯一
  name: cls-delimiter
spec:
  clsDetail:
      # 分隔符
      delimiter: '::'
      # 提取的key
      keys:
      - remote_addr
      - remote_user
      - time_local
      - request
      - status
      - body_bytes_sent
      - request_time
      - http_referer
      - http_user_agent
      - http_x_forwarded_for
      - msec
      # 日志时间使用日志中字段时间
      timeFormat: '%d/%b/%Y %H:%M:%S'
      timeKey: time_local
    # 日志采集格式为分隔符模式
    logType: delimiter_log
    topicId: e850733e-f32b-4a8e-a246-xxxxxxxx
  inputDetail:
    containerFile:
      container: nginxdelimiter
      filePattern: '*.log'
      logPath: /data/log/nginx
      namespace: cls-wk
      workload:
        kind: deployment
        name: nginxdelimiter
    # 采集类型为容器文件
    type: container_file

应用配置后,日志服务的数据格式如下:

更多CLS和TKE日志采集相关请参考如下链接:

CLS日志服务

使用 CRD 配置日志采集

友情提醒:

  • 通过CRD的方式采集配置TKE日志,索引需要在日志控制台打开和相关配置;
  • 建议通过TKE控制台的方式配置,默认全文索引和部分键值索引打开的状态。

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

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

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

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

评论
登录后参与评论
1 条评论
热度
最新
很有帮助!学习了!
很有帮助!学习了!
回复回复点赞举报
推荐阅读
编辑精选文章
换一批
日志源解析|K8s 集群部署 CLS 日志服务原理及场景实现
kahing,腾讯云CLS产品经理,负责CLS云原生日志的云产品接入工作。 willyi,腾讯云高级开发工程师,负责CLS云原生日志服务云原生生态建设,致力于大规模云原生设施的落地和实践工作。 简介 日志服务 (Cloud Log Service, CLS)支持采集自建K8s集群上的日志,在进行日志采集前,需要在K8s自建集群上通过CRD定义日志采集配置(LogConfig),并部署安装Log-Provisoner,Log-Agent,以及LogListener。针对使用腾讯云容器服务(Tencent
腾讯云原生
2021/10/25
1.1K0
Kubernetes 集群日志监控 EFK 安装
Kubernetes 集群中会编排非常多的服务,各个服务不可能保证服务一定能稳定的运行,于是每个服务都会打印出各自的日志信息方便调试。由于服务的众多,每个服务挨个查看日志显然是一件非常复杂的事情,故而日志的统一收集、整理显得尤为重要。
高楼Zee
2021/03/16
1.7K0
Kubernetes中部署ELK Stack日志收集平台
ELK是Elasticsearch、Logstash、Kibana三大开源框架首字母大写简称。市面上也被称为Elastic Stack。其中Elasticsearch是一个基于Lucene、分布式、通过Restful方式进行交互的近实时搜索平台框架。像类似百度、谷歌这种大数据全文搜索引擎的场景都可以使用Elasticsearch作为底层支持框架,可见Elasticsearch提供的搜索能力确实强大,市面上很多时候我们简称Elasticsearch为es。Logstash是ELK的中央数据流引擎,用于从不同目标(文件/数据存储/MQ)收集的不同格式数据,经过过滤后支持输出到不同目的地(文件/MQ/redis/elasticsearch/kafka等)。Kibana可以将elasticsearch的数据通过友好的页面展示出来,提供实时分析的功能。
没有故事的陈师傅
2021/07/21
1.8K6
Logging Operator - 优雅的云原生日志管理方案 (二)
本文承接上文,主要讲解Logging Operator中除logging外的CRD应用。在开始之前,我们还是先看下Logging Operator对K8S中处理容器日志流向的逻辑图。
我是阳明
2021/04/26
2.4K2
Logging Operator - 优雅的云原生日志管理方案 (二)
EFK日志平台部署
日志收集方案是采用 Elasticsearch、Fluentd、Filebeat 和 Kibana(EFK)技术栈。 Fluented主要用来收集k8s组件和docker容器日志,Filebeat主要用来收集应用日志,主要因为目前项目中应用日志并未全部通过stdout方式输出到docker日志驱动中,导致flunted收集日志并不全面,需要通过Filebeat来将应用日志收集到es中,再由kibana来展示。
mikelLam
2022/10/31
1.1K0
EFK日志平台部署
【最佳实践&原理解析】K8S日志一键采集,快速分析
随着云计算技术的发展,越来越多的公司开始向业务更敏捷、成本更低、可伸缩、更灵活的云原生架构转变。而在云原生技术栈中,容器已经成为应用分发和交付的标准技术,将应用与底层运行环境进行解耦;其中 Kubernetes 已经成为容器编排的事实标准,被广泛用于自动部署、扩展和管理容器化应用。
日志服务CLS小助手
2022/08/02
2.1K5
VictoriaLogs初体验
前面我们介绍了 VictoriaMetrics 发布了其日志解决方案 VictoriaLogs,只是简单介绍了其特性,但是并没有介绍其使用方法,本文我们就来体验下 VictoriaLogs。
我是阳明
2023/08/21
1.2K0
VictoriaLogs初体验
Kubernetes-基于EFK进行统一的日志管理
通过应用和系统日志可以了解Kubernetes集群内所发生的事情,对于调试问题和监视集群活动来说日志非常有用。对于大部分的应用来说,都会具有某种日志机制。因此,大多数容器引擎同样被设计成支持某种日志机制。对于容器化应用程序来说,最简单和最易接受的日志记录方法是将日志内容写入到标准输出和标准错误流。 但是,容器引擎或运行时提供的本地功能通常不足以支撑完整的日志记录解决方案。例如,如果一个容器崩溃、一个Pod被驱逐、或者一个Node死亡,应用相关者可能仍然需要访问应用程序的日志。因此,日志应该具有独立于Node、Pod或者容器的单独存储和生命周期,这个概念被称为群集级日志记录。群集级日志记录需要一个独立的后端来存储、分析和查询日志。Kubernetes本身并没有为日志数据提供原生的存储解决方案,但可以将许多现有的日志记录解决方案集成到Kubernetes集群中。在Kubernetes中,有三个层次的日志:
菲宇
2019/06/12
1.3K0
Kubernetes-基于EFK进行统一的日志管理
使用filebeat采集TKE容器日志
当业务使用腾讯云容器服务TKE进行部署时,可以通过filebeat来采集TKE中各个pod的日志,写入到下游的Elasticsearch集群中,然后在kibana上进行日志的查询与分析。本文介绍如何使用filebeat daemonset的方式采集容器中的日志。
bellen
2021/07/21
2.9K1
使用filebeat采集TKE容器日志
TKE Serverless(eks)集群使用filebeat采集日志
该文档参考filebeat on k8s,在Serverless集群部署filebeat采集容器日志到ckafka(es),filebeat采集tke容器日志到es参考使用filebeat采集tke容器日志
williamji
2023/06/19
6051
基于AWS EKS的K8S实践 - 通过 Agent收集日志
基于AWS EKS的K8S实践系列文章是基于企业级的实战文章,一些设置信息需要根据公司自身要求进行设置,如果大家有问题讨论或咨询可以加我微信(公众号后台回复 程序员修炼笔记 可获取联系方式)。
shysh95
2023/08/23
4670
基于AWS EKS的K8S实践 - 通过 Agent收集日志
Kubernetes实战之部署ELK Stack收集平台日志
ELK是Elasticsearch、Logstash、Kibana三大开源框架首字母大写简称。市面上也被成为Elastic Stack。其中Elasticsearch是一个基于Lucene、分布式、通过Restful方式进行交互的近实时搜索平台框架。像类似百度、谷歌这种大数据全文搜索引擎的场景都可以使用Elasticsearch作为底层支持框架,可见Elasticsearch提供的搜索能力确实强大,市面上很多时候我们简称Elasticsearch为es。Logstash是ELK的中央数据流引擎,用于从不同目标(文件/数据存储/MQ)收集的不同格式数据,经过过滤后支持输出到不同目的地(文件/MQ/redis/elasticsearch/kafka等)。Kibana可以将elasticsearch的数据通过友好的页面展示出来,提供实时分析的功能。
没有故事的陈师傅
2019/12/11
5.7K0
【超级节点】使用 DS 注入能力收集容器业务日志示例
想要使用 filebeat 等第三方日志收集工具采集业务容器日志, 如何将业务容器的日志暴露给 filebeat ,可以通过超级节点注入 Daemonset 容器实现, 这里给出一个最小挂载配置的示例 YAML 供参考(注意日志收集逻辑需要业务自行配置)。
Jokey
2024/08/30
1601
使用fluent bit+ClickHouse 实现K8s日志采集
Fluent bit是一个用C写成的插件式、轻量级、多平台开源日志收集工具。它允许从不同的源收集数据并发送到多个目的地。完全兼容docker和kubernetes生态环境。
灵雀云
2021/12/28
2.8K0
使用fluent bit+ClickHouse 实现K8s日志采集
TKE之Traefik最佳实践
k8s的接入层有很多种,常见的7层负载均衡有nginx-ingress、traefik、kong等,还有每个云厂商为了对接自己的负载均衡产品所开发的控制器,tke集群现在默认是clb类型ingress,也支持组件安装nginx-ingress到集群内使用,其他类型的网关,需要自己在集群内部署才行,今天我们讲讲traefik在tke上的部署安装和一些使用实践。
聂伟星
2022/03/18
2.5K0
如何将TKE/EKS集群事件日志持久化
腾讯云上的tke集群和eks集群的事件日志默认只会保留一个小时,有的时候,服务出现了问题,需要根据历史事件日志来进行排查下,因为历史事件日志只有1个小时,这样给我们排查带来了极大不便。腾讯云上默认是支持将集群的事件日志采集到cls,但是cls是需要收费的,而且很多人习惯用Elasticsearch来查询日志。 下面我们通过开源的eventrouter来将日志采集到Elasticsearch,然后通过kibana来查询事件日志。 eventrouter介绍说明:https://github.com/heptiolabs/eventrouter
聂伟星
2022/04/30
1.3K9
TKE中部署EFK日志收集
通过DaemonSet在每一台Node节点上跑一个Filebeat或fluentd,然后通过挂载的形式将容器日志与该Pod关联,从而处理发送至后端存储;
蒋经纬
2020/06/19
6040
使用 Elastic Stack 构建 Kubernetes 全栈监控(3/4)
在本节中我们将要安装配置 Filebeat 来收集 Kubernetes 集群中的日志数据,然后发送到 ElasticSearch 去中,Filebeat 是一个轻量级的日志采集代理,还可以配置特定的模块来解析和可视化应用(比如数据库、Nginx 等)的日志格式。
我是阳明
2020/07/10
1.6K0
部署loki采集kubernetes容器日志
Grafana Loki is a set of components that can be composed into a fully featured logging stack. Unlike other logging systems, Loki is built around the idea of only indexing metadata about your logs: labels (just like Prometheus labels). Log data itself is then compressed and stored in chunks in object stores such as Amazon Simple Storage Service (S3) or Google Cloud Storage (GCS), or even locally on the filesystem. A small index and highly compressed chunks simplifies the operation and significantly lowers the cost of Loki.
锅总
2024/06/12
2670
部署loki采集kubernetes容器日志
《TKE学习》TKE服务中的日志采集 (九)
日志采集功能是容器服务为用户提供的集群内日志采集工具,可以将集群内服务或集群节点特定路径文件的日志发送至 Kafka、Elasticsearch或者腾讯云日志服务(CLS)。日志采集功能适用于需要对 Kubernetes 集群内服务日志进行存储和分析的用户。
baron
2019/11/27
2.1K0
《TKE学习》TKE服务中的日志采集 (九)
相关推荐
日志源解析|K8s 集群部署 CLS 日志服务原理及场景实现
更多 >
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
本文部分代码块支持一键运行,欢迎体验
本文部分代码块支持一键运行,欢迎体验