掌桥专利:专业的专利平台
掌桥专利
首页

一种基于hashmod的prometheus-agent分片采集模式管理方法

文献发布时间:2024-04-18 20:02:18


一种基于hashmod的prometheus-agent分片采集模式管理方法

技术领域

本发明涉及存储技术领域,具体为一种基于hashmod的prometheus-agent分片采集模式管理方法。

背景技术

Hashmod是一个用于将输入(如字符串)映射到给定模数(如质数)的散列函数,这种映射通常用于在哈希表中创建散列地址,以便通过键值快速访问记录,Hashmod通过使用模运算来确保哈希地址在给定的范围内。

prometheus-agent是prometheus生态里面的一个模块,专门用来抓取监控数据发送到远端,本地不存储,是一个无状态的模块。

在超大规模的监控场景下面,单个agent无法把所有targets全部拉取完、因此需要创建多个agent进行拉取,prometheus-agent本身也是支持多个agent同时工作的,只需要在配置文件里面新增hashmode配置就可以做到把多个targets打散到各个采集agent里面。

但是这种模式问题在于当agent扩缩容、修改采集配置的时候需要手动一个个去改配置,当遇到agent数量很多、需要频繁扩所容、需要频繁修改抓取任务、某个agent宕掉这些场景的时候,手动改配置是极其困难的事情

例如:当新增一个节点的时候前面所有节点的modulus、hashmod值都得加1。当缩掉其中某一个节点的时候所有modulus都得减1,部分hashmod值保持不变,部分得减1,可见这操作极其繁琐。

为了解决多个实例分片采集带来的扩缩容和配置修改问题,本发明提供一种多agent共享同一个配置文件,自动感知集群agent数量,当agent数量变化的时候自动更新配置文件的方法,能力和特性包括:

(1)如何自动感知prometheus-agent数量变化;

(2)如何自动更新prometheus-agent配置文件;

(3)多个prometheus-agent共享同一份配置文件。

发明内容

本发明提供的发明目的在于提供一种基于hashmod的prometheus-agent分片采集模式管理方法。通过本申请步骤可做到agent自动感知节点数量,并且自动修改配置参数,整个过程无需人工干预,prometheus-agent分片采集模式下共享同一份配置文件,prometheus-agent分片采集模式下扩缩容无需人工干预,方便管理和部署基于hashmod的prometheus-agent分片采集方案,修改采集配置的时候只需要改动一次配置文件,agent扩缩容的时候无需手工修改配置,多个agent能共享一份配置,agent能自动感知数量变化,当抓取配置有变更只需要修改一次配置文件。

为了实现上述的效果,本发明提供如下技术方案:一种基于hashmod的prometheus-agent分片采集模式管理方法,包括以下步骤:

步骤一、建立资源对象:初始化一个config-map,并设置对应参数。

步骤二、部署agent:根据config-map的信息进行agent的加载,并且进行master竞选。

步骤三、新增httphandle:用于修改实例内存中config-map的信息。

步骤四、节点判断:判断竞选的结果,并根据判断结果进行对应的处理。

步骤五、使用:判断当前etcd有多少个agent实例,并根据实例的变化进行对应的运算。

步骤六、数据更新:根据运算结果,对config-map内的字段进行对应的修改。

进一步的,在步骤一中,所述config-map中需要设置参数的模块为hashmod和modulus,所述hashmod和modulus的参数分别设置为0和1。

进一步的,在步骤二中,所述config-map信息加载到agent的内存后向etcd注册ip和port端口信息。

进一步的,在步骤四中,所述竞选的结果若是master节点则开始监听节点数量变化。

进一步的,在步骤四中,所述竞选的结果若不是master节点,则等待master节点对自己发出修改配置文件的请求。

进一步的,在步骤五中,每当所述agent实例的个数发生变化,master节点则会获取到所有节点ip和端口信息。

进一步的,在步骤五中,所述master节点获取到所有ip和端口信息后进行取模运算,得到取模后的值作为hashmod参数的值。

进一步的,所述步骤五中,把节点总数作为modulus的值,遍历所有节点,请求修改config-map的handle。

进一步的,在步骤六中,所述config-map内的字段进行对应的修改的模块为modulus和hashmod。

进一步的,在步骤六中,所述config-map内的字段进行对应修改后开始数据拉取操作。

本发明提供了一种基于hashmod的prometheus-agent分片采集模式管理方法,具备以下有益效果:通过本申请步骤可做到agent自动感知节点数量,并且自动修改配置参数,整个过程无需人工干预,prometheus-agent分片采集模式下共享同一份配置文件,prometheus-agent分片采集模式下扩缩容无需人工干预,方便管理和部署基于hashmod的prometheus-agent分片采集方案,修改采集配置的时候只需要改动一次配置文件,agent扩缩容的时候无需手工修改配置,多个agent能共享一份配置,agent能自动感知数量变化,当抓取配置有变更只需要修改一次配置文件。

附图说明

图1为本发明一种基于hashmod的prometheus-agent分片采集模式管理方法的流程图;

图2为本发明一种基于hashmod的prometheus-agent分片采集模式管理方法的数据处理流程图。

具体实施方式

请参阅图1、2,本发明提供一种技术方案:一种基于hashmod的prometheus-agent分片采集模式管理方法,包括以下步骤:

步骤一、建立资源对象:初始化一个config-map,并设置对应参数。

步骤二、部署agent:根据config-map的信息进行agent的加载,并且进行master竞选。

步骤三、新增httphandle:用于修改实例内存中config-map的信息。

步骤四、节点判断:判断竞选的结果,并根据判断结果进行对应的处理。

步骤五、使用:判断当前etcd有多少个agent实例,并根据实例的变化进行对应的运算。

步骤六、数据更新:根据运算结果,对config-map内的字段进行对应的修改。

具体的,在步骤一中,config-map中需要设置参数的模块为hashmod和modulus,hashmod和modulus的参数分别设置为0和1。

具体的,在步骤二中,config-map信息加载到agent的内存后向etcd注册ip和port端口信息。

具体的,在步骤四中,竞选的结果若是master节点则开始监听节点数量变化。

具体的,在步骤四中,竞选的结果若不是master节点,则等待master节点对自己发出修改配置文件的请求。

具体的,在步骤五中,每当agent实例的个数发生变化,master节点则会获取到所有节点ip和端口信息。

具体的,在步骤五中,master节点获取到所有ip和端口信息后进行取模运算,得到取模后的值作为hashmod参数的值。

具体的,步骤五中,把节点总数作为modulus的值,遍历所有节点,请求修改config-map的handle。

具体的,在步骤六中,config-map内的字段进行对应的修改的模块为modulus和hashmod。

具体的,在步骤六中,config-map内的字段进行对应修改后开始数据拉取操作。

实施例的方法进行检测分析,并与现有技术进行对照,得出如下数据:

根据上述表格数据可以得出,当使用实施例时,通过本申请步骤可做到agent自动感知节点数量,并且自动修改配置参数,整个过程无需人工干预,prometheus-agent分片采集模式下共享同一份配置文件,prometheus-agent分片采集模式下扩缩容无需人工干预,方便管理和部署基于hashmod的prometheus-agent分片采集方案,修改采集配置的时候只需要改动一次配置文件,agent扩缩容的时候无需手工修改配置,多个agent能共享一份配置,agent能自动感知数量变化,当抓取配置有变更只需要修改一次配置文件。

本发明提供了一种基于hashmod的prometheus-agent分片采集模式管理方法:

Config-map是k8s中的资源对象,用于保存非机密性的配置的,数据可以用keylvalue键值对的形式保存,也可通过文件的形式保存。

在部署服务的时候,每个服务都有自己的配置文件,如果一台服务器上部署多个服务:nginx、tomcat、apache等,那么这些配置都存在这个节点上。

假如一台服务器不能满足线上高并发的要求,需要对服务器扩容,扩容之后的服务器还是需要部署多个服务:nginx、tomcat、apache,新增加的服务器上还是要管理这些服务的配置,如果有一个服务出现问题,需要修改配置文件,每台物理节点上的配置都需要修改,这种方式肯定满足不了线上大批量的配置变更要求,所以,k8s中引入了Config-map资源对象,可以当成volume挂载到pod中,实现统—的配置管理。

Config-map是k8s中的资源,相当于配置文件,可以有一个或者多个Config-map;Config-map可以做成Volume,k8spod启动之后,通过volume形式映射到容器内部指定目录上;容器中应用程序按照原有方式读取容器特定目录上的配置文件。

在容器看来,配置文件就像是打包在容器内部特定目录,整个过程对应用没有任何侵入。

Config-map的创建方法包括:

方式1、通过直接在命令行中指定configmap参数创建,即_from-literal。

创建命令:[root@kub-k8s-master prome]#kubectl create configmap test-configmap_from-literal=user=admin_from-literal=pass=1122334configmap/test-configmap created。

方式2、通过指定文件创建,即将一个配置文件创建为一个ConfigMap,_from-file=<文件>。

编辑配置文件app.properties内容,创建(可以有多个--from-file),通过指定文件创建时,configmap会创建一个key/value对,key是文件名,value是文件内容,如不想configmap中的key为默认的文件名,可以在创建时指定key名字:#kubectl createconfigmap game-config-3_from-file=

方式3、通过指定目录创建,即将一个目录下的所有配置文件创建为一个ConfigMap,_from-file=<目录>。

configs的目录下包括config-1和config-2,指定目录创建时,configmap内容中的各个文件会创建一个key/value对,key是文件名,value是文件内容,假如目录中还包含子目录:说明指定目录时只会识别其中的文件,忽略子目录。

方式4、事先写好标准的configmap的yaml文件,然后kubectl create-f创建。

使用Config-map:

1、通过环境变量引入。

使用valueFrom、configMapKeyRef、name、key指定要用的key,通过envFrom、configMapRef、name使得configmap中的所有key/value对儿都自动变成环境变量,使用config-MapKeyRef,#创建—个存储mysql配置的config-map,#创建pod中的内容,引用configmap中的内容。

2、通过环境变量引入:使用envfrom。

3、把configmap做成volume,挂载到pod。

Agent通常被视为在分布式系统或协作系统中持续自主发挥作用的计算实体,也被称为“智能体”,它可以在没有人或其他Agent干预的情况下运作,对自己的行为和内部状态有控制能力,并可以自主调整状态或作出行为,此外,Agent还具有社交能力,能够与其他Agent通过某种语言(Agent语言)进行交互,它还具有反应能力和预动能力,能够观察其生成环境,并在一定时间内做出反应以改变环境,以及通过间接的信息作出特殊的有目标性的行为。

HttpHandler是.NET Framework提供的一个接口,用于处理HTTP请求,它允许对于Http请求进行编程,并且是实现这一操作的一个主要的接口,当一个HTTP请求到达时,它会由IIS(Internet Information Services)处理,然后传递给一个实现了IHttpHandler接口的类进行进一步处理。

在ASP.NET中,可以通过实现IHttpHandler接口来处理HTTP请求,当一个HTTP请求到达时,IIS会检查请求的类型和URL,然后决定哪个HttpHandler来处理这个请求,每个HttpHandler都处理特定类型的HTTP请求,比如GET或POST请求。

实现IHttpHandler接口的类通常需要使用Web.config文件进行配置,以便让IIS知道如何将请求路由到正确的处理程序。

etcd是一个开源的、高可用的键值存储系统,用于共享配置和服务发现,etcd是由CoreOS团队开发并维护的,它使用Raft一致性算法来处理网络分区并维持强一致性,etcd广泛应用于构建分布式系统,为网络和分布式系统提供了一个可靠的、高效的方式来存储数据跨集群。

etcd的特点包括:简单,具有基于HTTP/JSON的接口,使得使用起来简单方便;安全,通过自动TLS,提供可选的客户端证书认证;快速,每秒可以处理数千个写入操作;可靠,使用Raft一致性算法,确保数据安全。

etcd的主要应用场景包括:共享配置,etcd可以用来存储和分发配置,这对于持续集成和持续交付(CI/CD)环境中动态调整配置非常有用;服务发现,etcd可以存储服务的网络位置,使得其他服务可以轻松找到它;分布式锁,etcd可以作为分布式锁的实现,提供给分布式系统使用;分布式协调,etcd可以用于协调和同步分布式系统的活动;Kubernetes,etcd是Kubernetes的基石,用于存储和管理集群的状态。

Hashmod是一个函数,它将输入(如字符串)映射到一个给定的模数(如质数),这个函数通常用于哈希算法中,将任意长度的输入通过散列算法转换为固定长度的输出,这个输出就是散列值,在具体的应用中,Hashmod函数配合质数的特性,可以实现一种简单的哈希算法。

基于hashmod的Prometheus Agent分片采集模式管理方法可以用于实现Prometheus Agent对目标服务的分布式采集。

首先,需要在Prometheus Agent中定义一个分片采集规则,该规则可以基于hashmod算法将目标服务按照一定规则分配给不同的Agent实例,例如,我们可以将目标服务的IP地址通过hashmod算法分配给不同的Agent实例,使得每个Agent实例只负责采集一部分目标服务的指标数据。

其次,需要为每个Agent实例配置相应的采集规则,在Prometheus Agent中,我们可以使用scrape配置来定义采集规则,对于分片采集模式,我们需要为每个Agent实例配置不同的scrape配置,以便只采集分配给该Agent实例的目标服务的指标数据。

在配置scrape配置时,需要指定以下参数:

job_name:定义采集任务的名称。

scrape_i nterva l:定义采集间隔时间。

target_groups:定义目标服务列表,对于分片采集模式,我们需要为每个Agent实例定义不同的目标服务列表,以便只采集分配给该Agent实例的目标服务。

params:定义采集参数,例如端口号、协议类型等。

最后,需要在Prometheus Agent中启动并运行每个Agent实例,在启动Agent实例时,需要指定相应的配置文件和scrape配置,这样,Prometheus Agent就可以根据分片采集规则和scrape配置对目标服务进行分布式采集。

总之,基于hashmod的Prometheus Agent分片采集模式管理方法可以实现分布式采集的目标,提高采集效率和准确性。

基于hashmod的Prometheus Agent分片采集模式管理方法是一种有效的分布式采集管理策略,它利用hashmod算法将目标服务或资源分配给不同的Prometheus Agent实例进行采集。

定义目标服务列表:首先,你需要有一个目标服务列表,这些服务是你希望进行监控的。这个列表可能包含各种类型的服务,例如Web服务器、数据库服务器、应用程序服务等。

在使用过程中,包括如下步骤:

创建分片规则:使用hashmod算法,你可以创建一个分片规则,将目标服务列表中的每个服务分配给一个特定的Prometheus Agent实例,你可以根据服务的特性(如IP地址、主机名、端口号等)来制定分片规则,例如,可以使用服务的IP地址通过hashmod算法将其分配给不同的Agent实例。

配置Prometheus Agent:针对每个Agent实例,你需要配置相应的scrape配置,在scrape配置中,你需要指定采集任务的名字、采集间隔、目标服务列表以及任何其他必要的采集参数(如端口号、协议类型等)。

启动并运行Prometheus Agent实例:在启动每个Agent实例时,需要指定相应的配置文件和scrape配置,这样,Prometheus Agent就可以根据分片规则和scrape配置对目标服务进行分布式采集了。

监控和管理:可以使用Prometheus的Web界面或命令行工具来监控和管理这些Agent实例,可以查看每个Agent实例的采集状态、错误信息以及它们各自采集的数据。

这种基于hashmod的分片采集模式可以有效地平衡负载,防止某个Agent实例因采集大量服务而承受过大的负载,同时也可以提高整个系统的可用性和稳定性。

尽管已经示出和描述了本发明的实施例,对于本领域的普通技术人员而言,可以理解在不脱离本发明的原理和精神的情况下可以对这些实施例进行多种变化、修改、替换和变型,本发明的范围由所附权利要求及其等同物限定。

技术分类

06120116581904