当前位置: 首页 > news >正文

运维大模型探索之 Text2PromQL 问答机器人

作者:陈昆仪(图杨)

大家下午好,我是来自阿里云可观测团队的算法工程师陈昆仪。今天分享的主题是“和我交谈并获得您想要的PromQL”。今天我跟大家分享在将AIGC技术运用到可观测领域的探索。

图片

今天分享主要包括5个部分:

  • 为什么我们需要一个自然语言翻译PromQL的机器人;
  • 我们证实有效的算法及踩过的坑;
  • Demo及相关数据成果的展示;
  • 关于未来展望;
  • Q&A。

图片

为什么我们需要一个自然语言翻译 PromQL 的机器人?

先说说PromQL是什么,PromQL就是Prometheus的时序数据库的专属查询语句。Prometheus是云原生领域数据存储和查询的“事实标准”(De facto standard,我也是第一次看到这个词,“De facto ”居然还是拉丁文)。“事实标准”的意思就是“几乎所有”。从K8s应用中采集上来的指标数据都会被存在Prometheus这种时序数据库里,所有查询、分析工作也是在Prometheus上执行的。简而言之,PromQL几乎是所有K8s应用的运维工程师最经常使用的查询语句,没有之一。

现在我们知道什么是PromQL了,所以为什么我们需要一个自然查询语句转PromQL的机器人。我们把这个答案概括成3个"C":

1. 第一个“C”是“Complex”,“Complex syntax”。

PromQL的语法其实是比较复杂的,其实让它难学的根本在于它和我们熟悉的SQL语句有着本质不同:

SQL是适用于【关系数据库】的查询语句,SQL里我们关注的是Tabel和Tabel不断地做join,结合多个表的信息来得到我们最终想要的东西。但在PromQL里,我们处理的是【时序数据库】里的数据向量。这里我们没有Tabel了,全都是存在一些Label和指标的Vector。Join也很少用了。

我们可以看一个例子,当我们想查过去1 min 中响应时间最高的前十个应用,PromQL是这么写的:

topk(10,sum by (service)(sum_over_time(arms_http_requests_seconds{}[1m]))/sum by (service)(sum_over_time(arms_http_requests_count{}[1m])))

对熟悉SQL的同学开始,tokk 和 sum by 还算直观,sum_over_time 是啥,中间那个"/" 是什么意思?“arms_http_requests_seconds” 和 “arms_http_requests_count”是表名么?确实有一些学习成本。

2. 第二个"C"是"Confusing",“Confusing metric name”。

PromQL是由指标名、算子和Label组成的,指标名有时候会非常难懂。这主要是因为K8s里面这些指标,是不同公司的Agent采集上来的,这种提供Agent的公司包括:Google、AWS、Datadog、Dynatrace、阿里云等等,每个公司都有自己的命名方式,甚至有一些指标是用户自定义的。加上监控领域关注的指标又多又杂,有时候看文档都看不明白那些指标到底什么意思,该怎么用。

3. 第三个"C"是“Commenly”,“Commenly used query”。

PromQL其实是一个非常常用的查询语句,因为它不仅能提供运维相关的指标,CPU、rt、QPS、Error、404什么的,它也可以统计点击率、转换率、SLO、SLA、PV、UV,所以不仅仅是运维工程师可以用它,开发工程师、产品经理都可以用它。但现状是大家都用SRE给我们配的盘,想要指标选择找人帮配,我们也经常收到客户的工单要帮写PromQL。

综上, PromQL的语法不好学、指标名又复杂、日常工作中用得又多,为了减轻SRE的工作、降低工单,也为了Prometheus和K8s的推广,我们需要一款自然语言转PromQL的机器人。

图片

我们证实有效的算法及踩过的坑

现在我们来到本次分享的第二部分,我们做自然语言转PromQL机器人走过的路(这里都是干货)。

图片

1. ChatGPT是不是就可以完成自然语言到PromQL的翻译?

老板说我们要一个Text2PromQL的机器人,现在第一件事是要做什么呢?有的同学可能会说“买点GPU?”、“买个带GPU的FC实例?”、“收集点语料?”,这几件事都很重要,但不是我们第一步要做的事情。我们第一步要做的事情是先看看ChatGPT自己,是不是就可以完成自然语言到PromQL的翻译了。 如果大模型本身就可以很好地完成这个任务,那我们不用开发了。就等着通义千问做大做强,我们直接调用他们的API就行。我们做了一些实验,发现ChatGPT和通义千问都不能很好地完成这个工作。以ChatGPT为例,我问他“给我写个PromQL,帮我查一下过去5min,平均响应时间最长的10个应用是啥”。它给我的回答是topk(10,avg_over_time(application_response_time_seconds[5m]))

我们看下它哪里错了,首先是指标名的事情,在我们的系统中,根本没有一个叫"application_response_time_seconds"的指标,且avg_over_time(application_response_time_seconds[5m]))的意思是,对指标5min内。

先算"application_response_time_seconds"指标头和尾的差值,比如它在10:05min的值-它在10:00的值,再除以5。这个在可观测领域是没有物理含义的。

我们说过去5min内,应用平均响应时间,是需要用过去5min内,应用被调用的总耗时,除以它被调用的总次数,是每次调用的平均响应时间,分母是调用次数,不是5min。可以看看正确的例子:

topk(10,sum by (service)(sum_over_time(arms_http_requests_seconds{}[5m]))/sum by (service)(sum_over_time(arms_http_requests_count{}[5m])))

总结来看,如ChatGPT的通用LLM表现:

  • 提供PromQL语法是正确的。
  • 但它对我们的系统一无所知,不知道我们的指标名,对别的公司提供的监控系统也不知道,它没法知道我们的指标名。
  • 它其实不大了解用户问这个问题真正的意图,因为它在这里的背景知识太少了。

也就是说,LLM需要更多知识…

图片

为了给LLM灌知识,我们也进行了大量调研,总的来说有2种方案:

  • Fine-tuning

    用足够的语料对大模型进行微调,这里的微调指的是修改模型本身的一些参数,或者在大模型外接一个小模型,总之就是系统除了LLM本身自带的参数之外,已经有了任务相关的神经网络和参数了。

  • Prompt Engineering(提示词工程) 就是在不增加或修改大模型本身任意一个参数的前提下,只是在用户提问时,带一点上下文作为额外的知识,来提升回答的准确性。

这两种方案本身没有优劣之分,虽然Prompt Engineering听起来会更简单一些,但已在很多领域表现出比Fine turning更优的性能。我们画了一颗决策树,希望能给想要做LLM-based 应用的同行们一些经验:

  • 如果你老板让我们做一个LLM-based的应用,我们要先问问自己:“我是不是一个经验丰富的NLPer”,如果您不知道NLPer是啥?-- 诚挚推荐“Prompt Engineering”。
  • 如果您是一位经验丰富的NLPer,手握十几篇A。好,第二个问题,“贵团队有没有足够的GPU?”如果贵团队有十几张A100,那不用犹豫了,直接 Fine-tuining。可以搞一个大新闻,说不定能做一个比ChatGPT更强的领域专属大模型!
  • 如果您不是经验丰富的NLPer,那么第二个问题是“您或您的团队中,有没有某个领域的专家”比如K8s领域,或者可观测领域。如果您对这个问题的回答是“Yes”,那么Prompt Engineering是最优的选择。

在我们ARMS团队目前还没有招揽垂直的NLP人才,但我们在可观测领域有十余年实践经验,所以我们选择了Prompt Engineering。

图片

2. 什么样的提示词有用?

这一页PPT至少对我来说,是今天最有价值的一页。我希望几个月前有人能够把它分享给我,这样我可以节约很多时间和精力。

我们花了好几个月时间尝试了5种提示词,终于把text2PromQL的准确率从百分之5以下,提升到百分之70-80%,简单复盘一下探索历程:

➥PromQL官方文档

项目刚开始时候,第一个想到的可能有用的提示词是Prometheus官网所提供关于PromQL的文档,这个其实很直觉。然后试了一下,就用户提问一个PromQL问题,系统自动地把整个PromQL的文档当做提示词灌进去。测试了几十个Case,结果就是基本没有对的。

我们分析:大模型写出来的PromQL里面指标名和我们系统的不一样,也可以理解;意图识别也不对,因为LLM其实没那么聪明,它没法从那么抽象、那么长的文档里面找出比如“查前十个平均响应时间最长的应用”要有那些算子,怎么对指标加减乘除得到“平均响应时间”。

➥社区问答示例

那既然文档太长了,大模型学不会。我们做了一些调研发现说给大模型喂examples是有用的,就是常说的 “Few-shot”方式。然后就从Stack Overflow问答平台上找了几十个关于PromQL的问答。用户提问时就给他匹配语料里最相似的Case。结果准确率好了一点点,但是还是10%以下。

我们分析:首先,还是指标名问题,Q&A里的指标名不是我们系统里用的那些;其次,这种社区的回答质量其实参差不齐,他们给的答案也未必是对的。最后,一些回答里提到的函数和算子已被废弃,现在执行这种算子是无效的。

➥ARMS内部收集的PromQL问答示例

经过前两步尝试,我们发现指标名是绕不开的问题。所以我们的第三个PromQL方案是用ARMS系统自己收集的Q&A,这里的答案就包含了我们自己系统指标名的信息。我们做了实验之后发现,效果确实好了一点,但不多。因为前面说的PromQL确实比较复杂,有很多算子、很多指标名。对大模型来说,还是太难了。

➥ARMS内部收集的PromQL问答示例+ChatGPT生产的对回复中的PromQL的解释

那既然直接给PromQL不够,我们就加一些对PromQL的说明,这里的说明我们是直接用ChatGPT生产的。做了实验,发现这样准确率可以到20%左右,其实也没啥用。

➥Chain-of-Thought格式的PromQL问答示例

经过一个非常长的探索,我们终于找到一种Prompt Engineering的算法,实验之后,即使基于ChatGLM-6B,准确率也能到60-70%,终于迎来了第一个拐点。

➥Chain-of-Thought格式的PromQL问答示例+通义千问

当我们把大模型换成通义千问,其它配置一点没改,准确率原地涨了10%,到了80%左右。即使不完全正确的场景,也给了指标名、该用的算子等非常有用的信息且语法基本不会错。通义千问确实很厉害!

Chain-of-Thought 是Google Brain实验室提出来算法,本来用来增强LLM推理能力的,本来也不是用来做Text2PromQL,而是用来教LLM解小学应用题的。这篇论文甚至都没有正式发表,只是挂在了arxiv上,一年的时间,引用量就1000+了,可能也有熟悉LLM的小伙伴听说过它。

图片

3. 什么是COT?

下面我们来介绍CoT是什么, 刚刚我们说了PromPT是给到大模型的知识,那么Chain-of-Thought PromPT就是给到大模型的带推理步骤的知识。

举个例子,现在我们希望LLM回答一个应用题Q:餐厅有23个苹果,如果他们用20个做午餐,然后又买了6个,那它现在有几个?由于GPT是个自然语言模型,它不大会算数。为了提升准确率,我们给他一些提示PromPT提示词给LLM一个例子。

➥普通提示词:

Q:Roger有5个羽毛球,他又买了2桶,每桶有3个,那他现在有几个。

A:答案是11。理论上,LLM应该能照葫芦画瓢回答出来,但他的答案是错误的。

➥Google 给的Chain-of-Thought提示词:

Q:Roger有5个羽毛球,他又买了2桶,每桶有3个,那他现在有几个。

A:Roger本来有5个球,买了2桶,每桶3个的球,也就是6个球。5+6=11。所以答案是11。这里就是给了例子中的推导过程。然后奇迹发生了,GPT居然就会了并给出正确答案。

图片

下面我们来介绍CoT算法,在Text2PromQL场景下是怎么使用的。如果您比较熟悉PromQL,您应该可以感觉到写PromQL很像我们小学做的应用题。

下面我们回答一开始题的例子:

Q:“帮忙写一个PromQL,我想查过去5min,平均响应时间最长的前十个应用是哪些?”

CoT要带推理过程,我们从头说起。

A:首先,我们算过去5min,每个应用被调用的总时长,可以用下面的PromQL

图片

然后,我们算过去5min,每个应用一共被调用了多少次,可以用下面的PromQL

图片

可以看到这俩PromQL只是指标名不同,第一个是“arms_http_requests_seconds”记录的是latency,第二个的指标名是“arms_http_requests_count”记录的是调用量

再然后,算平均响应时间,那平均响应时间=调用总时长/调用总次数。这个PromQL就是用第一步的PromQL除以第二步的PromQL,得到

图片

最后,因为问的是平均响应时间最高的前10个应用,所以还需要调用一下Topk函数,得到最终的PromQL

图片

这就是CoT在Text2PromQL场景下的提示词。下面介绍ARMS小机器人的系统架构图

图片

我们拥有一个离线系统和一个在线系统。在离线系统中,我们将ARMS多年沉淀的大量用户关于Text2Promql的问答示例,通过Chain-of-Chain Prompting算法转换成Chain-of-thought格式的Q&A示例,然后进行文本切割,得到一个Q&A示例,再通过embedding将文字转换为数字组成的向量,再把这些向量存到数据库中。

下面来看在线系统,当一个用户提问,比如写一个PromQL,查平均响应时间最长的10个应用,类似地,我们也会把这些文字,通过embedding,转换成数字组成的向量。现在我们拥有了用户问题转换出来的向量,以及离线系统中,数据库中一系列向量。那么,我们就可以在数据库中检索和当前用户问题最相似的topk个向量,把这个k+1个数字组成的向量还原为文字,然后把用户的问题,以及k个最相似的历史Q&A作为提示词输入到大模型中,就可以得到最终的PromQL。

可以看到,我们这个系统初始的输入是用户的PromQLl问答示例,所以当用户问得越多,我们能覆盖的场景也越多,准确率也会越高,总的来说,我们的机器人会越问越聪明。

Demo 演示

图片

目前覆盖了:

  1. ARMS应用性能监控的14个场景,目前覆盖的都是ARMS的指标,如果不是ARMS的用户,可能需要根据指标名进行修改。
  2. K8s相关:(Container、Pod、Node维度)的CPU使用率、内存使用率、磁盘使用率等
  3. 灵骏默认大盘相关:(节点和集群维度)的CPU使用率、GPU使用率和内存使用率
  4. Kafka相关:(消息Topic、Group、instance维度)消息发送、消费、堆积量、磁盘使用率等
  5. Nacos相关:Full GC、服务读\写接口rt等
  6. MSE相关:网络流量、CPU、内存、磁盘指标。

在我们覆盖的场景中,我们用100+个Case测试过,准确率76.9%。即使在没有覆盖的场景下也能给出非常多有用信息。更重要的是基于PromPT Engineering,通过给提示词增加模型的准确率,所以覆盖新场景非常快,只要给它生成CoT格式的提示词就好。

产品体验入口:

  • 如果您对容器指标相关的PromQL感兴趣,请点击容器数据源免登录Grafana入口 [ 1]
  • 如果您对应用监控指标相关的PromQL感兴趣,请点击APM数据源免登录Grafana入口 [ 2]
  • 如果目前PromQL只能助手的回答不满意,可以点击回答下方的反馈按钮哦

图片

我们还做了一个对比实验:问没有提示词的ChatGPT 3.5还是刚刚那个“帮忙写一个PromQL,我想查过去5min,平均响应时间最长的前十个应用是哪些?” ,记过ChatGPT能写对语法,但是指标名和用户意图识别都是错的。然后问一下原生通义千问,发现它写的是类SQL?

图片

但问通义千问的 Qwen-turbo + 我们的CoT提示词,结果语法、指标名和用户意图识别都是对的,无可挑剔。

图片

未来展望

最后就是展望啦,自然语言转查询语句在数据库和可观测领域目前都是比较火热的话题。可观测领域的巨头们,比如Google、DataDog、New Relic 都提供类似服务。其中Google和我们思路相似,也是自然语言转PromQL,毕竟PromQL是云原生方向查询语句的事实标准。

但即使Google背后的模型是ChatGPT4,也做不到100%的准确率。因为他们不敢让大模型直接出图,或者说出大盘,还需要人工来点确认。BTW,可观测领域的新星HoneyComb倒是敢直接出图,这里可以体验:https://www.honeycomb.io/sandbox

To the best of my knowledge,基于我个人浅薄的认知,这个方向后面还有很长很长的路要走。

1. 第一个里程碑可能是一个自然语言到图表的机器人。

我们现在的topic是“Chat with me and get the PromQL you want”,那个时候的topic可能是“Chat with me and get the charts you want”,就直接出图了,查询语句接近100%准确。到时候想要图表、要数据就不用麻烦SRE大佬们了,直接和机器人说。

2. 第二个里程碑可能是一个可观测领域更智能的机器人。

不仅能出图,还能告诉你怎么配告警、怎么查问题,就像个经验丰富的运维工程师。但我们还是需要一个人类来点确定按钮,来决定是否采纳建议。那时候的topic是“Chat with me and get monitoring suggestions you want”。
3. 最后一个里程碑就是畅想已久的ChatOps。

真的可以通过对话来运维,那时候机器人就像一个非常专业的、经验丰富的、extremely hard-working的运维工程师,这里我放的是祖师爷–图灵。我们畅想的topic是“Chat with me and I will take care of your systems and applications”。这个岗位估计就不怎么需要人类了。

当然第三个里程碑可能有点远,我感觉前两个应该在不远的将来。

图片

非常感谢大佬您看到了这里,这篇文章很长,但重点就两句话:“CoT提示词真的靠谱” “在text2PromQL场景下,实例Q&A + 一步一步的PromQL生成过程是我们实验过的最靠谱的PromPT。”

因为我们今年已经没有holiday了。

Have a nice day : )

图片

Q&A

Q1: Prometheus 版本不断再升级,同一家公司、不同团队用的版本可能也不大一样,会对这个Text2PromQL准确性有影响吗?

A1: 首先,虽然 Prometheus自己确实在不断地升级,但对PromQL算子本身,其实这么久也没有太多变化。那些常用的、基础算子已经很完备了。所以其实Prometheus版本更新对我们来说影响不大;其次,即使出现了新的常用算子,我们也只需要再对它进行语料覆盖就好。因为我们做的是提示词工程嘛,所以只需要加一些语料,不用去调模型,训练它,几天就能新覆盖一个场景。

Q2: 刚刚提到用ChatGPT3.5进行了实验,但在Text2PromQL场景下效果不好。那现在ChatGPT-4出来了,它比ChatGPT3.5强很多,有没有在它上面做实验呢?

A2: 这是一个非常好的问题。ChatGPT-4确实很厉害,我们也试了一下,但它依然不能很好地解决Text2PromQL的场景。首先,PromQL是算子+Label+指标名。那指标名是我们系统产生的,比如ARMS 应用性能监控的用户,他指标名是ARMS自定义的,也不是公开的数据,ChatGPT-4就很难获取到这部分的信息。然后,就是更聪明的模型,我们理解它只是泛化能力更强,可能要覆盖一个新场景,比如容器监控,告诉它一点信息,给几个例子他就能表现得很好啦。

Q3: 想问一下系统中有用开源的向量数据库和开源大模型像ChatGLM什么的吗?

A3: 我们一开始探索时,通义千问和阿里云的向量数据库还没有公布。当时我们用的确实是开源向量数据库和开源大模型ChatGLM-6B。后来上线时,就换了阿里云的向量数据库和通义千问。可以看这个图,当我们把大模型换成通义千问后,其它配置一点没改,准确率原地涨了10%,到了80%左右,即使不完全对的场景,也给了指标名、该用的算子等非常有用的信息且语法基本不会错。通义千问确实很厉害!

图片

Q4: embedding 用的是什么模型,有什么取舍?

A4: 在Text2PromQL这块儿,其实我找了一个可用的embedding模型就很靠谱了。因为embedding这里就是决定了你一个用户的问题会匹配到哪些相关语料嘛。我发现我们那个PromQL的语料,写成Chain-of-Thought的格式后,就很长发现它基本都能匹配到和用户问题相关的,后面这也是我们调优方向.

Q5: 问一下example的代表性,会不会对效果产生影响?

A5: 会,所以我们先写清楚了我们支持的场景。而且其实PromQL你匹配到它指标名和算子,对用户来说,他自己就能get到足够的信息了。CoT足够长,然后匹配到的概率已经很高了。

Q6: 这个项目中最难得部分是什么?因为我们自己尝试的过程中发现如果背后大模型不够好,简直是事倍功半,但你大模型比较聪明时候就很简单。

A6: 对,是这样的。我觉得这个项目最难得部分有两个:都在这张图上了。

  1. 第一个难的就是找合适的提示词。CoT这种提示词,给我们准确率直接来了一个拐点,从20%涨到60%-70%。
  2. 第二个是大模型本身,我们找到CoT这个算法之后,想把准确率从60%-70%往上涨,也试了不少方法,但是收获甚微。我们发现这个项目的瓶颈,就是当时用的那个开源大模型。我们就想着,那也不是我能解决的问题,所以这个项目就pending了得有1个多月。后来到9月13日,通义千问对外开放了,给我们调了它的API,又给我涨了10%,其实这个10%是比较保守的,在很多场景下,example给够,准确率是非常非常高的。

图片

Q7 : 所以您这个项目本身没有对通义千问做任何的fine-turn对吧?

A7: 对,我们调用的就是那个商用的通义千问接口,一点都没有改。

对Text2PromQL或AIOps感兴趣的朋友可以加一下我们的钉钉群(群号:25125004458):

相关链接:

[1] 容器数据源免登录Grafana入口

https://demo.grafana.aliyuncs.com/explore?orgId=1&left=%7B%22datasource%22:%22arms-unify-demo-ack_1277589232893727_805acb%22,%22queries%22:%5B%7B%22refId%22:%22A%22,%22hide%22:false,%22expr%22:%22%22%7D%5D,%22range%22:%7B%22from%22:%22now-1h%22,%22to%22:%22now%22%7D%7D

[2] APM数据源免登录Grafana入口

https://demo.grafana.aliyuncs.com/explore?orgId=1&left=%7B%22datasource%22:%22arms_metrics_cn-hangzhou_cloud_hangzhou_1277589232893727_86cb47%22,%22queries%22:%5B%7B%22refId%22:%22A%22,%22hide%22:false%7D%5D,%22range%22:%7B%22from%22:%22now-1h%22,%22to%22:%22now%22%7D%7D

相关文章:

运维大模型探索之 Text2PromQL 问答机器人

作者:陈昆仪(图杨) 大家下午好,我是来自阿里云可观测团队的算法工程师陈昆仪。今天分享的主题是“和我交谈并获得您想要的PromQL”。今天我跟大家分享在将AIGC技术运用到可观测领域的探索。 今天分享主要包括5个部分:…...

虚拟机VMware:变动ip修改固定ip

1、配置ip地址 vi /etc/sysconfig/network-scripts/ifcfg-ens33修改为: 修改如下:TYPE"Ethernet" # 网络类型为以太网 BOOTPROTO"static" # 手动分配ip NAME"ens33" # 网卡…...

Docker部署Nexus Maven私服并实现远程访问Nexus界面

🎬 鸽芷咕:个人主页 🔥 个人专栏: 《linux深造日志》《粉丝福利》 ⛺️生活的理想,就是为了理想的生活! 文章目录 1. Docker安装Nexus2. 本地访问Nexus3. Linux安装Cpolar4. 配置Nexus界面公网地址5. 远程访问 Nexus界面6. 固定N…...

苏州科技大学计算机817程序设计(java) 学习笔记

之前备考苏州科技大学计算机(专业课:817程序设计(java))。 学习Java和算法相关内容,现将笔记及资料统一整理归纳移至这里。 部分内容不太完善,欢迎提议。 目录 考情分析 考卷题型 刷题攻略…...

虚幻学习笔记22—C++同步和异步加载

一、前言 之前提到的静态和动态加载都是同步的加载,同时其中的引用基本都是硬引用。如果资源比较大的话会出现卡顿的现象,下面将介绍一种异步加载的方式。同时,还将介绍一种区别与之前的Load的方法。 在说明同步和异步加载之前需要先讲一下虚…...

华清远见嵌入式学习——ARM——作业3

作业要求: 代码效果图: 代码: led.h #ifndef __LED_H__ #define __LED_H__#define RCC_GPIO (*(unsigned int *)0x50000a28) #define GPIOE_MODER (*(unsigned int *)0x50006000) #define GPIOF_MODER (*(unsigned int *)0x50007000) #defi…...

19.JavaSE

一、JavaSE。 (1)IO流。 1.字节字符流 2.标准流打印流对象流 (2)集合。 1.List/Set/Queue/Map集合 2.properties集合 (3)多线程。 1.线程创建的…...

仓库管理用什么软件

仓库管理是一个非常重要的话题,大到企业,小到个人,只要有货物的往来就会有仓库方面的管理,最为典型的就是货物的进出库存管理,这也是最为基础的仓库管理内容,那么仓库管理要用什么软件,从不同的…...

飞天使-k8s知识点8-kubernetes资源对象-编写中

文章目录 资源对象是k8s核心概念 资源对象是k8s核心概念 查看防火墙规则 32002 端口的去向 [rootkubeadm-master1 ~]# iptables -t nat -vnL |grep 32000 0 KUBE-MARK-MASQ tcp -- * * 0.0.0.0/0 0.0.0.0/0 /* kubernetes-dashboard/…...

Oracle Create user

sqlplus /nolog conn sys/pw123456orcl as sysdba CREATE USER zengwenfeng IDENTIFIED BY zengwenfeng ; GRANT ALL PRIVILEGES TO zengwenfeng ; COMMIT; C:\Users\Administrator>sqlplus /nologSQL*Plus: Release 11.2.0.1.0 Production on 星期日 12月 24 21:38:24 20…...

树莓派,mediapipe,Picamera2利用舵机云台追踪人手(PID控制)

一、项目目标 追踪人手大拇指指尖: 当人手移动时,摄像头通过控制两个伺服电机(分别是偏航和俯仰)把大拇指指尖放到视界的中心位置,本文采用了PID控制伺服电机 Mediapipe Hand简介 MediaPipe 手部标志任务可检测图像…...

DQL查询数据(超重点)以及distinct(去重)

DQL(Data Query Language:数据查询语言) 1.所有查询操作都用 SELECT 2.无论是简单的查询还是复杂的查询它都能做 3.数据库中最核心的语言,最重要的语句 4.使用频率最高的语句 语法: SELECT 字段1,字段2,……FROM 表 有时候…...

【网络奇缘】——奈氏准则和香农定理从理论到实践一站式服务|计算机网络

🌈个人主页: Aileen_0v0 🔥热门专栏: 华为鸿蒙系统学习|计算机网络|数据结构与算法 💫个人格言:"没有罗马,那就自己创造罗马~" 目录 失真 - 信号的变化 影响信号失真的因素: ​编辑 失真的一种现象:码间…...

MongoDB 根据 _id 获取记录的创建时间并回填记录中

MongoDB 集合 test1,有字段 _id,createTime,createTimeStr,name字段 , 查询createTime不为空的,根据 _id 生成该条记录的创建时间时间戳并填写到字段 createTime 字段中 ,并打印时间戳 // 查询 createTime…...

【开源】基于JAVA语言的独居老人物资配送系统

目录 一、摘要1.1 项目介绍1.2 项目录屏 二、功能模块三、系统展示四、核心代码4.1 查询社区4.2 新增物资4.3 查询物资4.4 查询物资配送4.5 新增物资配送 五、免责说明 一、摘要 1.1 项目介绍 基于JAVAVueSpringBootMySQL的独居老人物资配送系统,包含了社区档案、…...

网络7层架构

网络 7 层架构 什么是OSI七层模型? OSI模型用于定义并理解数据从一台计算机转移到另一台计算机,在最基本的形式中,两台计算机通过网线和连接器相互连接,在网卡的帮助下共享数据,形成一个网络,但是一台计算…...

【Arthas】Arthas线上trace匿名函数/Lambda表达式/函数式接口

前言 Arthas是一个非常牛B的东西,我非常喜欢用,特别是在定位线上问题的时候,牛逼大发! 非常建议所有Java玩家都去学习一下 阅读对象 了解并使用过Arthas了解并使用过trace命令 先说结论 先说结论,lambda表达式的追…...

阿里云“块存储”是系统盘和数据盘的意思

阿里云“块存储”是什么意思?块存储是指阿里云服务器的系统盘或数据盘。块存储EBS(Elastic Block Storage)是为云服务器ECS提供的低时延、持久性、高可靠的块级随机存储。块存储支持在可用区内自动复制您的数据,防止意外硬件故障导…...

AI赋能金融创新:ChatGPT引领量化交易新时代

文章目录 一、引言二、ChatGPT与量化交易的融合三、实践应用:ChatGPT在量化交易中的成功案例四、挑战与前景五、结论《AI时代Python量化交易实战:ChatGPT让量化交易插上翅膀》📚→ [当当](http://product.dangdang.com/29658180.html) | [京东…...

数字化时代的探索:学生为何对数据可视化趋之若鹜?

随着信息时代的迅猛发展,数据已经成为我们生活中不可或缺的一部分。而在这个数字化浪潮中,越来越多的学生开始关注数据可视化,这并非偶然。下面,我就从可视化从业者的角度出发,简单聊聊为什么越来越多的学生开始关注数…...

vue2、vue3实现用aws s3协议操作minio进行文件存储和读取

亚马逊s3 API文档 最开始安装了aws-sdk/client-s3,但是不知道为什么一直报错,所以用了aws-sdk 准备工作: 需要已经搭建好minio、创建好桶 1. vue2 安装插件 yarn add aws-sdk s3配置 var AWS require("aws-sdk"); AWS.co…...

宏集应用 | 如何通过振动传感器防止造纸工业中的意外故障?

来源:宏集科技 工业物联网 宏集应用 | 如何通过振动传感器防止造纸工业中的意外故障? 原文链接:https://mp.weixin.qq.com/s/Z2qSdJnPLdOxJuG5qz-JJA 欢迎关注虹科,为您提供最新资讯! 一 应用背景 在造纸工业中&…...

【华为OD题库-110】反转每对括号间的子串-java

题目 给出一个字符串s(仅含有小写英文字母和括号)。 请你按照从括号内到外的顺序,逐层反转每对匹配括号中的字符串,并返回最终的结果。注意,您的结果中不应包含任何括号。 示例1: 输入: s “(abcd)” 输出: “dcba” 示例2: 输入: s “(u(l…...

如何搭建一个高效的Python开发环境

“工欲善其事,必先利其器”,这里我们来搭建一套高效的 Python 开发环境,为后续的数据分析做准备。 关于高效作业,对于需要编写 Python 代码进行数据分析的工作而言,主要涉及两个方面。 1. 一款具备强大的自动完成和错…...

Reactor 和 Proactor模式,IO复用与epoll、同步IO,异步IO与协程

汽车软件中的CPU密集与IO密集任务 在汽车软件中,涉及到ADAS的长期占用CPU的计算任务可以算的上是CPU密集型。 另外的,众多SOA原子服务或者各种数据收集、处理、分发、log系统,应该算是IO密集型任务。 寻求一些手段优化IO性能的原因 在过去…...

nginx反向代理服务器及负载均衡服务配置

一、正向代理与反向代理 正向代理:是一个位于客户端和原始服务器(oricin server)之间的服务器,为了从原始服务器取得内容,客户端向代理发送一个请求并指定目标(原始服务器),然后代理向原始服务器转交请求并将获得的内容返回给客户…...

【Log4j2】Log4j2最佳实践:Log4j2配置超过7天压缩,超过3个月删除文件的滚动日志,分别定义info文件和error文件,按照每小时存储

目录 Log4j2配置 springboot多环境日志配置 参考资料 Log4j2配置 如果你想要在控制台输出美化的日志信息&#xff0c;你可以使用Log4j2的ConsoleAppender和AnsiColorConverter来实现。下面是相应的配置示例&#xff1a; <Configuration status"WARN"><…...

windows和Linux如何做强制域名解析

首先我们了解两个问题&#xff1a; 一、域名解析是什么&#xff1f; 域名解析是让我们可以通过网站的域名来找到它对应的IP地址&#xff0c;以便更加方便的访问我们所需访问的网站的一种服务。 它通过DNS服务器来进行&#xff0c;我们输入所想要访问的域名&#xff0c;将会通过…...

5G NTN:通信新天地,卫星通信的奇妙探索

导言 嗨&#xff0c;大家好&#xff01;今天我们要深入了解一项让通信更强大的技术——5G NTN。它和卫星通信结合在一起&#xff0c;为我们带来了通信的新时代。在这篇文章中&#xff0c;我们将用白话文揭示5G NTN和卫星通信的关系&#xff0c;探索这个通信世界的奇妙之旅。 5…...

RabbitMQ的基础使用

/*** 使用rabbitMQ* 1.引用amqp场景 RabbitAutoConfiguration就会自动生效* 2.给容器中自动配置了各种api RabbitTemplate AmqpAdmin CachingConnectionFactory RabbitMessagingTemplate* 所有属性都是 spring.rabbitmq开头* 3.通过注解EnableRabbit使用* 4.监听消息 使用Rabbi…...

使用Uniapp随手记录知识点

使用uniapp随手记录知识点 1 组件内置组件扩展组件 2 vuex状态管理使用流程mapState 辅助函数gettersMutation 1 组件 内置组件 内置组件内主要包含一些基础的view button video scroll-view等内置基础组件&#xff0c;满足基础场景 扩展组件 扩展组件是uniapp封装了一些成…...

Fiber Node的数据结构,以及如何在Reconciliation阶段被使用。

首先&#xff0c;Fiber Node是React用来描述组件树的数据结构&#xff0c;每一个React组件都对应一个Fiber Node。下面是一个Fiber Node的基本结构&#xff1a; const fiber {// 标识这个Fiber Node的类型&#xff08;函数组件&#xff0c;类组件&#xff0c;DOM节点类型等&a…...

Spring Cloud Alibaba 之 Sentinel

大家好&#xff0c;我是升仔 引言 在微服务架构中&#xff0c;服务之间的依赖错综复杂。一旦某个服务出现问题&#xff0c;很容易引发连锁反应&#xff0c;导致整个系统瘫痪。Sentinel 就是为了解决这类问题而生的。它通过流量控制、熔断降级等机制&#xff0c;保护服务不被过多…...

Jenkins Tutorial

什么是Jenkins Jenkins是一个自动化平台&#xff0c;它允许你使用pipelines去部署应用。它也可以自动化其他任务。 BUILDTESTDEPLOYMENT Jenkins 架构 首先&#xff0c;你拥有一个Master Server&#xff0c;它控制pipelines和安排Build到你的Agent上&#xff1b; 其次&…...

css mask 案例

文章目录 一、基本用法二、图案遮罩二、文字阴影效果三、日历探照灯效果 CSS的mask属性用于定义一个可重复使用的遮罩&#xff0c;可以将其应用到任何可视元素上。这个功能类似于Photoshop中的图层蒙版。通过mask属性&#xff0c;可以创建独特的效果&#xff0c;比如圆形、渐变…...

案例系列:Movielens_预测用户对电影的评分_基于行为序列Transformer的推荐系统

文章目录 简介数据集设置准备数据下载并准备数据框将电影评分数据转换为序列 定义元数据为训练和评估创建 tf.data.Dataset创建模型输入编码输入特征创建一个二叉搜索树模型运行训练和评估实验结论 描述&#xff1a; 使用行为序列Transformer&#xff08;BST&#xff09;模型在…...

单词接龙[中等]

一、题目 字典wordList中从单词beginWord和endWord的 转换序列 是一个按下述规格形成的序列beginWord -> s1 -> s2 -> ... -> sk&#xff1a; 1、每一对相邻的单词只差一个字母。 2、对于1 < i < k时&#xff0c;每个si都在wordList中。注意&#xff0c;beg…...

机器人制作开源方案 | 森林管理员

​作者&#xff1a;李佳骏、常睿康、张智斌、李世斌、高华耸 单位&#xff1a;山西能源学院 指导老师&#xff1a;赵浩成、郜敏 1. 研究背景 森林作为地球上可再生自然资源及陆地生态的主体&#xff0c;在人类生存和发展的历史中起着不可代替的作用&#xff0c;它不仅能提供…...

Laravel框架使用phpstudy本地安装的composer用Laravel 安装器进行安装搭建

一、首先需要安装Laravel 安装器 composer global require laravel/installer 二、安装器安装好后&#xff0c;可以使用如下命令创建项目 laravel new sys 三、本地运行 php artisan serve 四、 使用Composer快速安装Laravel5.8框架 安装指定版本的最新版本&#xff08;推荐&a…...

炫酷登录注册界面【超级简单 jQuery+JS+HTML+CSS实现】

一&#xff1a;源码获取 这两天根据需求写了一个比较好看的有动态效果的登录注册切换页面&#xff0c;这里我将源码资源分享给大家&#xff0c;大家可以直接免费下载使用哦&#xff0c;没有 vip 的小伙伴找我私聊发送"登录注册"即可我给你发文件&#xff0c;此登录注…...

2023年国赛高教杯数学建模E题黄河水沙监测数据分析解题全过程文档及程序

2023年国赛高教杯数学建模 E题 黄河水沙监测数据分析 原题再现 黄河是中华民族的母亲河。研究黄河水沙通量的变化规律对沿黄流域的环境治理、气候变化和人民生活的影响&#xff0c;以及对优化黄河流域水资源分配、协调人地关系、调水调沙、防洪减灾等方面都具有重要的理论指导…...

跨国企业传输大文件注意事项和解决方案

随着全球化的推进&#xff0c;越来越多的企业需要在跨国业务合作、项目交付、数据分析等方面展开合作&#xff0c;这就带来了大量大文件的传输需求。大文件传输是指文件大小超过1GB的传输&#xff0c;通常涉及视频、音频、图片、文档、压缩包等多种格式。跨国传输大文件不仅需要…...

【Redis】Redis 的数据类型

有五种常用数据类型&#xff1a;String、Hash、Set、List、SortedSet。以及三种特殊的数据类型&#xff1a;Bitmap、HyperLogLog、Geospatial &#xff0c;其中HyperLogLog、Bitmap的底层都是 String 数据类型&#xff0c;Geospatial 的底层是 Sorted Set 数据类型。 五种常用…...

QT小技巧 - 使用QMovie进行gif切帧

简介 使用QMovie 将 gif 进行切帧&#xff0c; magick 进行合并代码 QString gifPath "E:\\workspace\\qt\\gif2imgs\\203526qre64haq3ccoobqi.gif"; // 你的图片QMovie movie(gifPath); movie.setCacheMode(QMovie::CacheNone);qDebug() << movie.frameCou…...

ES-搜索

聚合分析 聚合分析&#xff0c;英文为Aggregation&#xff0c;是es 除搜索功能外提供的针对es 数据做统计分析的功能 - 功能丰富&#xff0c;提供Bucket、Metric、Pipeline等多种分析方式&#xff0c;可以满足大部分的分析需求 实时性高&#xff0c;所有的计算结果都是即时返回…...

微信小程序面试题

微信小程序面试题 请解释微信小程序的生命周期及其对应的钩子函数。 微信小程序的生命周期包括 onLaunch、onShow、onHide、onError、onPageNotFound 等阶段。对应的钩子函数分别是&#xff1a; onLaunch&#xff1a;小程序初始化时触发。onShow&#xff1a;小程序启动或从后台…...

OpenCV之图像匹配与定位

利用图像特征的keypoints和descriptor来实现图像的匹配与定位。图像匹配算法主要有暴力匹配和FLANN匹配&#xff0c;而图像定位是通过图像匹配结果来反向查询它们在目标图片中的具体坐标位置。 以QQ登录界面为例&#xff0c;将整个QQ登录界面保存为QQ.png文件&#xff0c;QQ登…...

掌握JWT:解密身份验证和授权的关键技术

JSON Web Token 1、什么是JWT2、JWT解决了什么问题3、早期的SSO认证4、JWT认证5、JWT优势6、JWT结构Header 标头Payload 负载 Signature 签名 7、代码实现添加依赖生成Token认证token 8、工具类9、JWT整合Web10、拦截器校验11、网关路由校验12、解决多用户登录的问题13、客户端…...

git命令和docker命令

1、git git是分布式的版本控制工具 git可以通过本地仓库管理文件的历史版本记录 # 本地仓库操作的命令 # 初始化本地库 git init # 添加文件到暂存区 git add . git checkout 暂存区要撤销的文件名称 # 提交暂存区文件 git commit -m 注释# 版本穿梭 # 查看提交记录 git log…...

【K8S in Action】服务:让客户端发现pod 并与之通信(2)

一 通过Ingress暴露服务 Ingress (名词&#xff09; 一一进入或进入的行为&#xff1b;进入的权利&#xff1b;进入的手段或地点&#xff1b;入口。一个重要的原因是每个 LoadBalancer 服务都需要自己的负载均衡器&#xff0c; 以及 独有的公有 IP 地址&#xff0c; 而 Ingres…...