K8s 场景下 Logtail 组件可观测方案升级-Logtail 事件监控发布

背景

随着K8s和云的普及,越来越多的公司将业务系统部署到云上,并且使用K8s来部署应用。Logtail是SLS提供的日志采集Agent,能够非常好的适应K8s下各种场景的日志采集,支持通过DaemonSet方式和Sidecar方式采集Kubernetes集群的容器标准输出或者文件日志。Logtail作为一个K8s场景下非常重要一个组件,其自身运行状态需要有更好的可观测方案。

K8s中Logtail管控原理

K8s场景下,除了控制台管控之外,Logtail还提供了环境变量和CRD两种配置方式,用来配置容器日志采集。

环境变量方式

环境变量的配置方式,参考文档

环境变量方式管控原理:

  • Logtail会去扫描所有的容器信息,并获取容器中的环境变量信息
  • 过滤其中包含aliyun_logs_前缀的字段,然后组合成采集配置信息,Logtail同时会用改环境变量作为采集配置中容器过滤的条件
  • Logtail端收到采集配置的变化后,会调整本地的采集配置,从而实现整个控制流程的闭环。

CRD方式

CRD方式创建采集配置流程,参考文档。

CRD配置原理如上图所示:

  • K8S内部会注册自定义资源(CRD,CustomResourceDefinition)AliyunLogConfig,并部署alibaba-log-controller
  • CR对象创建/变化/删除之后,alibaba-log-controller会监听到CR对象的变化,从而对CR对象中指定的logstore、采集配置进行相应的操作
  • Logtail端收到采集配置的变化后,会调整本地的采集配置,从而实现整个控制流程的闭环。

无论是环境变量的配置方式,还是CRD的配置方式,Logtail的状态都是比较难观测的。

  • 环境变量配置之后,无论配置的是否正确,都不会影响业务容器的正常运行。但是logtail是否读到了环境变量里的配置并且进行了正确的处理,这个用户只能看到最终的结果。如果配置错了,用户也不能拿到及时的反馈,只能看到SLS控制台上,logstore没有创建出来或者采集配置没有创建出来,中间到底哪一个步骤报错了,用户也无法感知。
  • 一个CR配置之后,从K8s的角度来看,只能看到CR对象创建成功了。但是CRD对象创建成功之后,alibaba-log-controller内的处理流程,对于用户来讲,就像黑盒一样。如果出现异常,用户并不清楚究竟是中间哪一步出了问题。

基于以上的问题,SLS针对Logtail本身以及Logtail的管控组件alibaba-log-controller,采用K8s事件的方式,将处理流程中的关键事件透出,从而让用户能够更清楚的感知其中发生的异常。

Logtail事件监控实战

限制说明

  • alibaba-log-controller版本大于等于0.3.2
  • logtail版本大于等于1.1.2
  • logtail中目前涵盖的事件
  • 创建project、创建logstore、创建采集配置
  • alibaba-log-controller中涵盖的事件
  • 创建project、创建logstore、创建采集配置、创建索引、创建ingress日志中心、checkpoint写入

开启Logtail事件监控

未开启过K8s事件中心

步骤一:创建K8s事件中心

  1. 登录日志服务控制台。

  1. 在日志应用区域的云产品Lens页签中,单击K8s事件中心。
  2. 在事件中心管理页面,单击添加。
  3. 在添加事件中心页面,配置相关参数。
  • 如果选择已有Project,则从Project下拉框中选择已创建的Project,用于管理K8s事件中心相关资源(Logstore、仪表盘等)。
  • 如果选择从容器服务选择K8s集群,则从K8s集群下拉框中选择已创建的K8s集群。通过此方式创建K8s事件中心,日志服务默认创建一个名为k8s-log-{cluster-id}的Project,用于管理K8s事件中心相关资源(Logstore、仪表盘等)。

  1. 单击下一步

步骤二:部署eventer和node-problem-detector

您需要在Kubernetes集群中配置eventer和node-problem-detector后才能正常使用K8s事件中心。

  • 阿里云Kubernetes配置方式阿里云Kubernetes应用市场中的ack-node-problem-detector已集成eventer和node-problem-detector功能,您只需要部署该组件即可,该组件详细部署请参见事件监控。
  1. 登录容器服务控制台。
  2. 在左侧导航栏中,选择运维管理 > 组件管理,日志与监控下,单击ack-node-problem-detector。

  1. 单击安装、确认。

  • 自建Kubernetes配置方式
  1. 部署eventer。更多信息,请参见采集Kubernetes事件。
  2. 部署node-problem-detector。更多信息,请参见Github。

已开启过K8s事件中心

由于Logtail事件监控依赖了比较新的索引,因此可以在K8s事件中心页面,点击版本升级的选项,里面有一个索引更新的按钮,点击之后,即可以开启新的索引字段。

Logtail事件监控大盘

Logtail事件监控大盘将各个步骤的结果完整展示出来,并且以时间轴的方式,展示各个事件的先后顺序,同时支持用Project、Logstore、采集配置名参数进行过滤。

针对异常的事件,Logtail事件监控大盘会把异常事件的详情展示出来:

详情字段含义
time事件发生的时间
source事件来源,主要有alibaba-log-controller和logtail
resourceName主要针对CRD场景下,CRD的名字
configName采集配置的名字
project采集配置所属的project
logstore采集配置所属的logstore
reason事件产生的原因
message事件的详细信息
errorCode异常步骤的错误码
errorMessage异常步骤的报错信息
requestId异常步骤的请求标识

针对采集配置的创建、变更、删除操作,Logtail事件监控提供了相关的记录,用于进行操作审计

详情字段含义
time事件发生的时间
source事件来源,主要有alibaba-log-controller和logtail
action创建、变更或者删除
levelnormal或者warning
configName采集配置的名字
project采集配置所属的project
logstore采集配置所属的logstore
logtailconfig采集配置详情

应用案例

场景1: 通过CRD配置,logstore数量超过quota限制

一个CRD配置如下:

apiVersion: log.alibabacloud.com/v1alpha1
kind: AliyunLogConfig
metadata:name: simple-index-crd-example-0909-no-1
spec:logstore: logstore-quota-test-0909-no-1logtailConfig:inputType: pluginconfigName: simple-index-crd-example-0909-no-1inputDetail:plugin:inputs:-type: service_docker_stdoutdetail:Stdout: trueStderr: trueIncludeEnv:collect_crd_index_out: true

apply之后发现CRD已经创建成功,但是logstore没有创建出来。

通过限制Project、Logstore和采集配置名的条件

打开异常事件详情列表,可以清楚看到创建logstore步骤的异常情况,错误码是ProjectQuotaExceed,报错详情是:project k8s-log-c4551a67027d248bfb049765de783e647, shard count quota exceed。由此,可以直接找到SLS值班的同学,提升quota,从而解决这个问题

场景2: 通过CRD配置,关键参数填写错误

一个CRD配置如下:

apiVersion: log.alibabacloud.com/v1alpha1
kind: AliyunLogConfig
metadata:name: simple-index-crd-example-0909-mock-4
spec:logstore: logstore-quota-test-0909-mock-4logtailConfig:inputType: pluginssconfigName: simple-index-crd-example-0909-mock-4inputDetail:plugin:inputs:-type: service_docker_stdoutdetail:Stdout: trueStderr: trueIncludeEnv:collect_crd_index_out: true

apply之后发现CRD已经创建成功,但是logstore和采集配置也都是没有创建出来。

通过限制Project、Logstore和采集配置名的条件

打开异常事件详情列表,可以清楚看到创建采集配置步骤的异常情况,错误信息里提示:invalid input type : pluginss

由此可以知道原来是CRD里inputType字段的取值有问题,通过采集配置事件详情列表里的记录,也可以清楚看到通过CRD转换之后的采集配置数据。

场景3: 通过环境变量和CRD方式针对同一个Project/Logstore采集配置进行变更,导致的配置冲突

在多人维护一个K8s集群的时候,有可能两个人针对同一份采集配置,通过不同的配置方式进行了修改,这样的问题排查起来往往很麻烦。

我们模拟这样一个场景:

  1. 部署一个测试的Pod,环境变量配置如下:

可以看到logstore和采集配置已经创建成功

  1. CRD配置如下:
apiVersion: log.alibabacloud.com/v1alpha1
kind: AliyunLogConfig
metadata:name: taiye-test-0707
spec:logstore: taiye-test-0707logtailConfig:inputType: pluginconfigName: taiye-test-0707inputDetail:plugin:inputs:-type: service_docker_stdoutdetail:Stdout: trueStderr: trueIncludeEnv:conflict-test: true

apply之后发现CRD已经创建成功,采集配置也被覆盖掉了。

通过Logtail事件大盘里的事件时间轴,我们可以清楚的看到两次配置变更操作,一次是通过Logtail产生的,一次是通过alibaba-log-controller产生的。

通过事件详情,我们也可以看到两次变更的配置参数是不一样的,有了这样的监控数据,能够知道什么时间的配置变更导致了冲突。

通过命令行查看实时事件

K8s event在K8s中默认只保留一小时,在进行命令行操作的时候,可以通过kubectl命令直接查看实时的事件

kubectl get event -A

这样可以得到当前集群中实时的事件列表,如果想查看事件的详细信息,可以使用如下命令,输出json格式的事件,里面包含了详细的信息

kubectl get events -o json

原文链接

本文为阿里云原创内容,未经允许不得转载

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/510377.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

一图看懂,阿里云飞天企业版如何支持政企数智创新

杭州,2022年11月5日 – 今日,在云栖大会专有云技术和应用实践论坛,阿里云重磅发布飞天企业版在建云、管云、用云方面的全面升级,并邀请行业专家、政企客户代表和合作伙伴面向未来十年共话新一代政企IT发展趋势,分享阿里…

关于HTTPDNS,你知道多少?

什么是HTTPDNS? HTTPDNS是面向多端应用(移动端APP,PC客户端应用)的域名解析服务,具有域名防劫持、精准调度、实时解析生效的特性。 HTTPDNS工作流程 客户端直接访问HTTPDNS接口,获取业务在域名配置管理系…

当大火的文图生成模型遇见知识图谱,AI画像趋近于真实世界

导读 用户生成内容(User Generated Content,UGC)是互联网上多模态内容的重要组成部分,UGC数据级的不断增长促进了各大多模态内容平台的繁荣。在海量多模态数据和深度学习大模型的加持下,AI生成内容(AI Gen…

使用 EasyCV Mask2Former 轻松实现图像分割

导言 图像分割(Image Segmentation)是指对图片进行像素级的分类,根据分类粒度的不同可以分为语义分割(Semantic Segmentation)、实例分割(Instance Segmentation)、全景分割(Panoptic Segmentation)三类。图像分割是计算机视觉中的主要研究方向之一,在医…

八皇后问题详解(最短代码)

八皇后问题算法分析: 分析1:八皇后由一个64格的方块组成,那么把八个皇后放入不考虑其他情况利用穷举法,有8^64种 可能。 分析2:显然任意一行有且仅有1个皇后,使用数组queen[0->7]表示第i行的皇后位于哪一…

5个编写技巧,有效提高单元测试实践

1. 什么是单元测试 “在计算机编程中,单元测试又称为模块测试,是针对程序模块来进行正确性检验的测试工作。程序单元是应用的最小可测试部件。在过程化编程中,一个单元就是单个程序、函数、过程等;对于面向对象编程,最…

谈谈我工作中的23个设计模式

序 从基础的角度看,设计模式是研究类本身或者类与类之间的协作模式,是进行抽象归纳的一个很好的速成思路。后面阅读设计模式后,为了加深理解,对相关图片进行了描绘和微调。 从技术的角度已经有很多好的总结,本文会换…

OpenSergo 流量路由:从场景到标准化的探索

流量路由,顾名思义就是将具有某些属性特征的流量,路由到指定的目标。流量路由是流量治理中重要的一环,多个路由如同流水线一样,形成一条路由链,从所有的地址表中筛选出最终目的地址集合,再通过负载均衡策略…

传统 Web 框架部署与迁移

与其说 Serverless 架构是一个新的概念,不如说它是一种全新的思路,一种新的编程范式。 但是原生的 Serverless 开发框架却非常少。以 Web 框架为例,目前主流的 Web 框架“均不支持 Serverless 模式部署”,因此我们一方面要尝试接…

三款“非主流”日志查询分析产品初探

前言 近些年在开源领域,用于构建日志系统的软件有两类典型: Elasticsearch:基于 Lucene 构建倒排索引提供搜索功能,DocValue 存储支持了其统计分析能力。Clickhouse:列式存储是其优秀 OLAP 性能的保障。 这里把上述系…

CIPU落地专有云:是“小众需求”还是“机会之门”?

引言:2022年11月,云栖大会主论坛,阿里巴巴集团副总裁、阿里云智能基础产品事业部负责人蒋江伟分享了阿里云专有云的一项新进展 —— CIPU落地飞天企业版。在分析师峰会上,阿里巴巴集团研究员、阿里云专有云总经理刘国华也向分析师…

基于开源 PolarDB-X 打造中正智能身份认证业务数据基座

一、公司及业务介绍 中正智能是全球领先的生物识别和身份认证公司之一。我们曾负责公安部指纹算法国家标准的起草、编写,具备从算法、终端、平台、设计、生产、交付全域自研的能力,拥有多项自主知识产权的产品,并积极与高校合作开展基础研发。…

如何开发一个标准的云原生应用?

从几个数字开始说 IDC 预计到 2024 年,由于采用了微服务、容器、动态编排和 DevOps 等技术,新增的生产级云原生应用在新应用的占比将从 2020 年的 10% 增加到 60%,其中微服务的 workload 在企业内将超过 80% 。上面的四点是云原生时代所代表…

Higress实战: 30行代码写一个Wasm Go插件

前言 在11月15号的直播 《Higress 开源背后的发展历程和上手 Demo 演示》中,为大家演示了 Higress 的 Wasm 插件如何面向 Ingress 资源进行配置生效,本文对当天的 Demo 进行一个回顾,并说明背后的原理机制。 本文中 Demo 运行的前提&#x…

Serverless 的前世今生

从云计算到 Serverless 架构 大家好,我是阿里云 Serverless 产品经理刘宇,很高兴可以和大家一起探索 Serverless 架构的前世今生。 从云计算到云原生再到 Serverless 架构,技术飞速发展的轨迹都有一定规律可循,那么 Serverless 架…

eunomia-bpf 项目重磅开源!eBPF 轻量级开发框架来了

近日,在 2022 云栖大会龙蜥峰会 eBPF & Linux 稳定性专场上,来自 eBPF 技术探索 SIG Maintainer 、浙江大学的郑昱笙分享了《eunomia-bpf:eBPF 轻量级开发框架》技术演讲,以下为本次演讲内容: 大家好!…

一文看懂分布式链路监控系统

背景 传统的大型单体系统随着业务体量的增大已经很难满足市场对技术的需求,通过对将整块业务系统拆分为多个互联依赖的子系统并针对子系统进行独立优化,能够有效提升整个系统的吞吐量。在进行系统拆分之后,完整的业务事务逻辑所对应的功能会…

深度 | 新兴软件研发范式崛起,云计算全面走向 Serverless 化

11月3日,2022 杭州 云栖大会上,阿里云智能总裁张建锋表示,以云为核心的新型计算体系正在形成,软件研发范式正在发生新的变革,Serverless 是其中最重要的趋势之一,阿里云将坚定推进核心产品全面 Serverless…

适用场景全新升级!扩展 Dragonfly2 作为分布式缓存系统架构

Dragonfly2 简介 Dragonfly 作为龙蜥社区的镜像加速标准解决方案,是一款基于 P2P 的智能镜像和文件分发工具。它旨在提高大规模文件传输的效率和速率,最大限度地利用网络带宽。在应用分发、缓存分发、日志分发和镜像分发等领域被大规模使用。 现阶段 D…

sdut 最长公共子序列问题

Problem Description 从一个给定的串中删去(不一定连续地删去)0个或0个以上的字符,剩下地字符按原来顺序组成的串。例如:“ ”,“a”,“xb”,“aaa”,“bbb”,“xabb”&a…