CN112925695B - 一种自动化更新配置fluentd的配置文件的方法 - Google Patents

一种自动化更新配置fluentd的配置文件的方法 Download PDF

Info

Publication number
CN112925695B
CN112925695B CN202110331526.8A CN202110331526A CN112925695B CN 112925695 B CN112925695 B CN 112925695B CN 202110331526 A CN202110331526 A CN 202110331526A CN 112925695 B CN112925695 B CN 112925695B
Authority
CN
China
Prior art keywords
configuration
fluent
fluentdconfig
controller
event
Prior art date
Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
Active
Application number
CN202110331526.8A
Other languages
English (en)
Other versions
CN112925695A (zh
Inventor
白洋洋
江燕
于沈课
李珂
蔡卫卫
Current Assignee (The listed assignees may be inaccurate. Google has not performed a legal analysis and makes no representation or warranty as to the accuracy of the list.)
Inspur Cloud Information Technology Co Ltd
Original Assignee
Inspur Cloud Information Technology Co Ltd
Priority date (The priority date is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the date listed.)
Filing date
Publication date
Application filed by Inspur Cloud Information Technology Co Ltd filed Critical Inspur Cloud Information Technology Co Ltd
Priority to CN202110331526.8A priority Critical patent/CN112925695B/zh
Publication of CN112925695A publication Critical patent/CN112925695A/zh
Application granted granted Critical
Publication of CN112925695B publication Critical patent/CN112925695B/zh
Active legal-status Critical Current
Anticipated expiration legal-status Critical

Links

Images

Classifications

    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F11/00Error detection; Error correction; Monitoring
    • G06F11/30Monitoring
    • G06F11/3089Monitoring arrangements determined by the means or processing involved in sensing the monitored data, e.g. interfaces, connectors, sensors, probes, agents
    • G06F11/3093Configuration details thereof, e.g. installation, enabling, spatial arrangement of the probes
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F11/00Error detection; Error correction; Monitoring
    • G06F11/30Monitoring
    • G06F11/3003Monitoring arrangements specially adapted to the computing system or computing system component being monitored
    • G06F11/3006Monitoring arrangements specially adapted to the computing system or computing system component being monitored where the computing system is distributed, e.g. networked systems, clusters, multiprocessor systems
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F11/00Error detection; Error correction; Monitoring
    • G06F11/30Monitoring
    • G06F11/3065Monitoring arrangements determined by the means or processing involved in reporting the monitored data
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/44Arrangements for executing specific programs
    • G06F9/445Program loading or initiating
    • G06F9/44505Configuring for program initiating, e.g. using registry, configuration files

Abstract

本发明提供一种自动化更新配置fluentd的配置文件的方法,属于云计算领域,本发明基于kubernetes环境监听crd创建、删除事件,开启或关闭自动增删fluentd基本配置参数,从而动态的对这些应用日志进行收集,实现动态存储,实现自动更新fluentd配置文件。最终实现日志平台的灵活管理。

Description

一种自动化更新配置fluentd的配置文件的方法
技术领域
本发明涉及云计算领域,尤其涉及一种自动化更新配置fluentd的配置文件的方法。
背景技术
随着kubernetes越来越活跃,加入kubernetes的云原生应用越来越多,对集群的监控,日志的收集不断提出各种挑战,过去,日志收集整体环境比较直接,有限的静态物理服务器和虚拟机,以及有限数量的监控指标。但是随着容器技术,及微服务架构的广泛应用,要收集的日志的资源实体数量激增,且不确定性越来越强。对系统的灵活性和可伸缩性提出了更高的要求,尤其伴随kubernetes这样的协调器一起使用时,资源的变化更加多样,跟踪起来越发困难,环境的复杂性和分布的增加,也使得部署监控更加困难,短暂的环境此问题尤其突出。
日志管理平台有这样的需求:平台支持基于某些应用的开启或关闭自动增删fluentd基本配置参数,从而动态的对这些应用日志进行收集,实现动态存储。最终实现日志平台的灵活管理。
发明内容
为了解决以上技术问题,本发明提供了一种kubernetes环境监听crd(本文中的crd叫做FluentdConfig CRD)创建、删除事件,实现自动更新fluentd配置文件的一种方法,解决复杂多变环境下频繁变动fluentd的配置文件的问题,支持自动的增加或删除相应配置,从而大大降低了人工操作带来的风险,并且大大减少了工作量。
本发明的技术方案是:
一种自动化更新配置fluentd的配置文件的方法,包括如下步骤:
(1)建立FluentdConfig CR,并将需要增加或更改的配置写在FluentdConfig CR中;
(2)Controller监听创建FluentdConfig CR事件,并处理该事件,将其中的配置提取并加工;
(3)Controller与k8s apiserver交互获取fluentd的configmap,并将配置更新到该资源中;
(4)删除已存在的FluentdConfig CR;
(5)Controller监听删除FluentdConfig CR事件,并提取事件中的配置信息,将该配置从fluentd的配置中删除。
进一步的,
开始,租户侧创建k8s集群,部署chart(fluentd、fluentd-crd、启动fluentd-config-controller),然后controller会列出当前环境中所有的FluentdConfig CR,然后读取它们的配置后对fluentd的配置进行全量更新;
用户发起请求,开启服务,该命令触发FluentdConfig CR的创建;新建的FluentdConfig CR会产生一个事件传给controller,Controller监听到FluentdConfig CR的创建,提取并处理FluentdConfig CR中的配置,并将结果更新到fluentd的配置文件;
controller处理后对fluentd的配置文件进行增量更新,Fluentd reload配置文件后开始收集配置中的日志;
用户发起请求,关闭服务,该命令触发FluentdConfig CR的删除,相应的FluentdConfig CR被删除后,删除事件同样会被controller捕获并处理,然后相应的配置会被删除,每次更新fluentd的配置后都会触发config-reload,使得配置生效,不再收集相应配置的日志
如此反复循环。
进一步的,
最终决定提供三个配置属性来最大化灵活性、易用性以及可靠性。三个属性分别为:
Name字段,name字段代表了要存到elasticsearch中的索引名称;
Expression字段,expression用来提供匹配日志的正则表达式,只有符合该规则的日志才会被收集;
CustomizeFluentdConfig字段,CustomizeFluentdConfig字段中是一段完整的fluentd子配置文件,这段配置会原封不动的插入到fluentd的配置文件中,由于这一部分有高度的灵活性,因此在使用该字段时需要经过lma组的代码审查,确认无误后才可以应用。
进一步的,
使用方式:
1、Name+expression
可以满足最基本的k8s container日志的收集以及建立索引,这一点可以满足80%的需求。
2、CustomizeFluentdConfig
如果有需要高度自由配置的需求,则可以通过将完整配置加到该字段下来实现,该段内容会被完整的追加到fluentd的配置当中。
3、Name+expression+CustomizeFluentdConfig
如果想要收集k8s容器的日志又要收集其它一些服务的日志可以将三个字段都配置,也可以建立两个cr,一个cr中时name+expression,另一个时customizeFluentdConfig,我们建议一个cr只负责一个功能。
附图说明
图1是controller总体架构图;
图2是controller程序逻辑架构图2
图3是fluentd-config-controller更新逻辑流程图。
具体实施方式
为使本发明实施例的目的、技术方案和优点更加清楚,下面将结合本发明实施例中的附图,对本发明实施例中的技术方案进行清楚、完整地描述,显然,所描述的实施例是本发明一部分实施例,而不是全部的实施例,基于本发明中的实施例,本领域普通技术人员在没有做出创造性劳动的前提下所获得的所有其他实施例,都属于本发明保护的范围。
日志管理平台有这样的需求:平台支持基于某些应用的开启或关闭自动增删fluentd基本配置参数,从而动态的对这些应用日志进行收集,实现动态存储。最终实现日志平台的灵活管理。为了实现这个需求本申请提出了基于kubernetes环境customresourcedefinition(简称:crd)的自动更新fluentd配置文件的方法。
CRD概念:
在kubernetes集群中,最常见的资源包括Pod、Service、ConfiMap等,这些都属于集群中的内置资源。除了内置资源外,kubernetes还允许用户自定义资源(CustomResource)。通过这一特性,用户可以自己定义资源类型,kubernetes会将其视为资源的一种,对其提供像内置资源对象一样的支持,这样的实现更加原生。CRD可以大大提高kubernetes的扩展能力,以更原生的方式实现定制化要求。所有的自定义资源可以跟kubernetes中内置的资源一样使用kubectl进行操作。
CRD基本特征:
resource:Kubernetes API中的一个endpoint,存储某种API对象的集合;例如pod资源
Custom resource:Kubernetes API的扩展,在默认Kubernetes安装中不一定可用,代表对特定Kubernetes安装的定制。许多Kubernetes核心函数都使用CR构建的,使得Kubernetes更加模块
可以通过动态注册在运行的集群中出现或消失,管理员可以独立于集群本身更新它。一旦安装了custom resource,用户可以使用kubectl创建和访问它的对象,就像他们对Pods等内置资源所做的
custom resource本身只允许存储和检索结构化数据,当你将custom resource和custom controller组合时,custom resource提供了一个真正的声明式API;声明式API允许声明或者指定所需的资源状态,尝试保持Kubernetes对象的当前状态与所需状态同步。控制器将结构化数据解释为用户所需状态的记录,并持续维护这种状态可以独立于集群自身的生命周期,在运行的集群上部署和更新custom controller。它可与任何类型的资源一起工作,但与custom resource结合使用最有效。运算模式组合了custom resource和custom controller,可使用custom controller将特定应用程序的领域知识编码为Kubernetes API的扩展
FluentdConfig CRD是本文中自定义的CRD,通过创建该CRD的实例,来实现对fluentd配置文件的增删操作,具体定义见下文。
FluentdConfig CR是FluentdConfig CRD的实例,它是由用户创建的,FluentdConfig CRD决定了FluentdConfig CR中包含哪些字段。
在一个k8s集群中,每个节点上部署着一个fluentd,Fluentd是用于统一日志记录层的开源数据收集器,通过配置target和收集规则,fluentd会收集目标日志,并经处理后上传elasticsearch,在这个过程中有一个痛点,即无法基于target动态更改fluentd的配置,人工修改耗时耗力并不现实,fluentd-config-controller即用来解决这个问题,fluentd-config-controller通过监听FluentdConfig CR的创建与删除等事件,自动更新fluentd的配置。每个实例都有一个附加的规范,通过struct{}进行定义以提供数据格式验证。实际上,此规范是任意键值数据,用于指定资源的配置/行为。
FluentdConfig CRD需求分析
CRD的技术在k8s中已经是一项很成熟的技术,但是如何设计好一个FluentdConfig CRD为fluentd所用,则是一项挑战,FluentdConfig CRD的设置要满足以下几点:
易用性,如果FluentdConfig CRD的设置复杂性较高,则运维人员在使用的时候学习成本就会太高,不利于实际运维过程中的使用;
灵活性,FluentdConfig CRD的设置要保持最大的灵活性,以最大程度满足各种情景下fluentd的配置;
可靠性,FluentdConfig CRD的创建或删除要保证相应的配置成功更新fluentd的配置文件,否则会导致日志的丢失,从而影响客户体验,为了最大程度上保证可靠性,要尽量少定义字段,越简单的东西会越可靠,这一点也同样利于易用性,两者相辅相成;
Fluentd配置文件分析
Fluentd是用于统一日志记录层的开源数据收集器。我们可以使用Fluentd来统一数据收集和使用,以更好地使用和理解数据。通过分析fluentd在k8s中的configmap我们可以总结出fluentd的配置文件有以下几个特点:
Fluentd的配置文件由多个子配置文件组装而成,每个子配置文件负责某一个服务日志的收集,因此我们在添加一段独立的子配置文件时,需要提供一个name作为子配置文件的名称;
·Fluentd的大多数需求是收集k8s container的日志,所以关于该部分功能的支持要完备;
·Fluentd的配置灵活多变,我们的crd不可能完全满足所有场景下的所有需求,
FluentdConfig CRD最终结果
经过以上分析,最终决定提供三个配置属性来最大化灵活性、易用性以及可靠性。三个属性分别为:
·Name字段,name字段代表了要存到elasticsearch中的索引名称;
·Expression字段,expression用来提供匹配日志的正则表达式,只有符合该规则的日志才会被收集;
·CustomizeFluentdConfig字段,CustomizeFluentdConfig字段中是一段完整的fluentd子配置文件,这段配置会原封不动的插入到fluentd的配置文件中,由于这一部分有高度的灵活性,因此在使用该字段时需要经过lma组的代码审查,确认无误后才可以应用。
使用方式:
1、Name+expression
可以满足最基本的k8s container日志的收集以及建立索引,这一点可以满足80%的需求。
示例1:只提供name和expression,此时只收集pod日志
1).apiVersion:lma.inspur.com/v1alpha1
2).kind:FluentdConfig
3).metadata:
4).name:fcs
5).namespace:monitoring
6).#spec:
7).#deploymentName:fcs-path-monitoring-test1
8).body:
9).name:fcs#存到es的索引名
10).expression:some regexp str
2、CustomizeFluentdConfig
如果有需要高度自由配置的需求,则可以通过将完整配置加到该字段下来实现,该段内容会被完整的追加到fluentd的配置当中。
3、Name+expression+CustomizeFluentdConfig
如果想要收集k8s容器的日志又要收集其它一些服务的日志可以将三个字段都配置,也可以建立两个FluentdConfig CR,一个FluentdConfig CR中是name+expression,另一个时customizeFluentdConfig,建议一个FluentdConfig CR只负责一个功能。
示例2:三个字段都提供
1).apiVersion:lma.inspur.com/v1alpha1
2).kind:FluentdConfig
3).metadata:
4).name:fcs
5).namespace:monitoring
6).#spec:
7).#deploymentName:fcs-path-monitoring-test1
8).body:
9).name:fcs#存到es的索引名
10).expression:some regexp str
11).customizeFluentdConfig:|-
12).<match pod.ksvc>
13).@type rewrite_tag_filter
14).<rule>
15).key container_name
16).pattern/user-container/
17).tag pod.fcs
18).</rule>
19).<rule>
20).key container_name
21).pattern.
22).tag pod.cks
23).</rule>
24).</match>
25).
26).<filter*.fcs>
27).@type parser
28).key_name Payload
29).<parse>
30).@type json
31).</parse>
32).</filter>
功能
·监听FluentdConfig CR的创建事件,并将FluentdConfig CR中的配置增加到fluentd的配置文件;
·监听FluentdConfig CR的删除事件,并将FluentdConfig CR中的配置从fluentd的配置文件中删除;
·使用CustomResourceDefinition注册类型为FluentdConfig CRD的新自定义资源(自定义资源类型)。
·创建/获取/列出新资源类型FluentdConfig CR的实例。
以上所述仅为本发明的较佳实施例,仅用于说明本发明的技术方案,并非用于限定本发明的保护范围。凡在本发明的精神和原则之内所做的任何修改、等同替换、改进等,均包含在本发明的保护范围内。

Claims (9)

1.一种自动化更新配置fluentd的配置文件的方法,其特征在于,
包括如下步骤:
(1)建立FluentdConfig CR,并将需要增加或更改的配置写在FluentdConfig CR中;
(2)Controller监听创建FluentdConfig CR事件,并处理该事件,将其中的配置提取并加工;
(3)Controller与k8s apiserver交互获取fluentd的configmap,并将配置更新到configmap中;
(4)删除已存在的FluentdConfig CR;
(5)Controller监听删除FluentdConfig CR事件,并提取事件中的配置信息,将该配置从fluentd 的配置中删除。
2.根据权利要求1所述的方法,其特征在于,
租户侧创建k8s集群,部署fluentd、fluentd-crd、启动fluentd-config-controller,然后controller会列出当前环境中所有的FluentdConfig CR,然后读取它们的配置后对fluentd的配置进行全量更新。
3.根据权利要求2所述的方法,其特征在于,
用户发起请求,开启服务,用户发起的请求触发FluentdConfig CR的创建;新建的FluentdConfig CR会产生一个事件传给controller,Controller监听到FluentdConfig CR的创建,提取并处理FluentdConfig CR中的配置,并将结果更新到fluentd的配置文件;controller处理后对fluentd的配置文件进行增量更新,Fluentd reload配置文件后开始收集配置中的日志。
4.根据权利要求3所述的方法,其特征在于,
用户发起请求,关闭服务,该命令触发FluentdConfig CR的删除,相应的FluentdConfig CR被删除后,删除事件同样会被controller捕获并处理,然后相应的配置会被删除,每次更新fluentd的配置后都会触发config-reload,使得配置生效,不再收集相应配置的日志;
如此反复循环。
5.根据权利要求1所述的方法,其特征在于,
FluentdConfig CR提供三个配置属性,分别为:name、expression和customizeFluentdConfig;
其中
Name字段,代表要存到elasticsearch中的索引名称;
Expression字段,用来提供匹配日志的正则表达式,只有符合Expression字段的日志才会被收集;
CustomizeFluentdConfig字段是一段完整的fluentd子配置文件,这段配置会原封不动的插入到fluentd的配置文件中,在使用该字段时需要经过lma组的代码审查,确认无误后才可以应用。
6.根据权利要求5所述的方法,其特征在于,
使用方式:
Name+expression
满足80%的k8s container日志的收集以及建立索引。
7.根据权利要求5所述的方法,其特征在于,
使用方式:
CustomizeFluentdConfig
用于自定义高级配置,如果有需要高度自由配置的需求,则可以通过将完整配置加到该字段下来实现,自定义高级配置会被完整的追加到fluentd的配置当中。
8.根据权利要求5所述的方法,其特征在于,
使用方式:
Name+expression+CustomizeFluentdConfig
如果收集k8s容器的日志又要收集其它服务的日志,就将三个字段都配置,或建立两个FluentdConfig CR,一个FluentdConfig CR中是name+expression,另一个是customizeFluentdConfig。
9.根据权利要求8所述的方法,其特征在于,
一个CR只负责一个功能。
CN202110331526.8A 2021-03-29 2021-03-29 一种自动化更新配置fluentd的配置文件的方法 Active CN112925695B (zh)

Priority Applications (1)

Application Number Priority Date Filing Date Title
CN202110331526.8A CN112925695B (zh) 2021-03-29 2021-03-29 一种自动化更新配置fluentd的配置文件的方法

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
CN202110331526.8A CN112925695B (zh) 2021-03-29 2021-03-29 一种自动化更新配置fluentd的配置文件的方法

Publications (2)

Publication Number Publication Date
CN112925695A CN112925695A (zh) 2021-06-08
CN112925695B true CN112925695B (zh) 2022-12-27

Family

ID=76176276

Family Applications (1)

Application Number Title Priority Date Filing Date
CN202110331526.8A Active CN112925695B (zh) 2021-03-29 2021-03-29 一种自动化更新配置fluentd的配置文件的方法

Country Status (1)

Country Link
CN (1) CN112925695B (zh)

Families Citing this family (2)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN113448686A (zh) * 2021-06-22 2021-09-28 深信服科技股份有限公司 一种资源部署方法、装置、电子设备及存储介质
CN113938379A (zh) * 2021-09-29 2022-01-14 浪潮云信息技术股份公司 一种动态加载云平台日志采集配置的方法

Citations (4)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN110399272A (zh) * 2019-07-29 2019-11-01 中国工商银行股份有限公司 日志处理设备、方法、电子设备及计算机可读存储介质
CN110417870A (zh) * 2019-07-05 2019-11-05 北京达佳互联信息技术有限公司 配置文件管理方法、装置、设备和存储介质
CN112306634A (zh) * 2020-10-27 2021-02-02 苏州浪潮智能科技有限公司 在云平台中根据配置变化更新工作负载的方法及装置
CN112486938A (zh) * 2020-12-28 2021-03-12 上海七牛信息技术有限公司 一种应用于kubernetes集群的日志收集方法以及系统

Family Cites Families (5)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US10769152B2 (en) * 2016-12-02 2020-09-08 Cisco Technology, Inc. Automated log analysis
CN110287029A (zh) * 2019-06-27 2019-09-27 中国—东盟信息港股份有限公司 一种基于kubernetes容器资源动态调整的方法
CN111209011A (zh) * 2019-12-31 2020-05-29 烽火通信科技股份有限公司 一种跨平台的容器云自动化部署系统
CN111897625B (zh) * 2020-06-23 2023-10-20 新浪技术(中国)有限公司 一种基于Kubernetes集群的资源事件回溯方法、系统及电子设备
CN112181648B (zh) * 2020-09-22 2022-05-31 中国科学院软件研究所 一种配置驱动的轻量级混合基础设施平台及数据处理方法

Patent Citations (4)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN110417870A (zh) * 2019-07-05 2019-11-05 北京达佳互联信息技术有限公司 配置文件管理方法、装置、设备和存储介质
CN110399272A (zh) * 2019-07-29 2019-11-01 中国工商银行股份有限公司 日志处理设备、方法、电子设备及计算机可读存储介质
CN112306634A (zh) * 2020-10-27 2021-02-02 苏州浪潮智能科技有限公司 在云平台中根据配置变化更新工作负载的方法及装置
CN112486938A (zh) * 2020-12-28 2021-03-12 上海七牛信息技术有限公司 一种应用于kubernetes集群的日志收集方法以及系统

Also Published As

Publication number Publication date
CN112925695A (zh) 2021-06-08

Similar Documents

Publication Publication Date Title
CN106067080B (zh) 提供可配置工作流能力
CN112925695B (zh) 一种自动化更新配置fluentd的配置文件的方法
US8112771B2 (en) Managing component programs within a service application
US20110154339A1 (en) Incremental mapreduce-based distributed parallel processing system and method for processing stream data
CN108667930A (zh) 一种动态数据源配置与自动化切换方法
CN107734066A (zh) 一种数据中心综合管理系统服务治理方法
CN110768807B (zh) 虚拟资源方法及装置、虚拟资源处理网元及存储介质
CN105959390A (zh) 微服务的统一管理系统及方法
Corsaro et al. The data distribution service–the communication middleware fabric for scalable and extensible systems-of-systems
CN111641521B (zh) 一种基于Ambari的云上部署大数据集群的方法
CN104468274A (zh) 一种集群监控管理方法及系统
US11455173B2 (en) Management of artificial intelligence development platform
CN105446724A (zh) 软件参数的管理方法及装置
CN110457132B (zh) 一种功能对象的创建方法、装置和终端设备
CN101212342B (zh) 多版本网元的网络管理方法
CN109829330A (zh) 一种svn权限设置方法、装置、系统、电子设备
CN115357198B (zh) 存储卷的挂载方法及装置、存储介质及电子设备
CN108846002B (zh) 标签实时更新方法及系统
CN114489761B (zh) 一种基于容器集群的服务集成和应用集成方法
Mascolo et al. Survey of middleware for networked embedded systems
Portocarrero et al. Reference architecture for self-adaptive management in wireless sensor networks
Moreira et al. A behavioral reflective architecture for managing the integration of personal ubicomp systems: automatic SNMP-based discovery and management of behavior context in smart-spaces
Lillo et al. An ECA-based semantic architecture for IoT building automation systems
CN109669672A (zh) 一种中性化版本构建、页面响应方法、系统及相关装置
CN114268661B (zh) 一种业务方案部署方法、装置、系统及设备

Legal Events

Date Code Title Description
PB01 Publication
PB01 Publication
SE01 Entry into force of request for substantive examination
SE01 Entry into force of request for substantive examination
GR01 Patent grant
GR01 Patent grant