当前位置:首页 > 英文周记 > 正文内容

包含contextdeadlineexceeded的词条

更新时间:2026-07-18 01:40:15 周记网3年前 (2023-03-05)英文周记169

GRPC状态码

使用grpc的时候,线上php客户端调用go服务端,出现2/5/14等状态码,没有做日志输出,导致问题查了很长时间,最终问题是因为连接没有close掉,php连接数不够了。

grpc的状态码在google.golang.org/grpc/codes:code码跟http的状态码是一个道理,整理下状态码的含义:

包含contextdeadlineexceeded的词条

0:Ok:请求成功

1:Canceled:操作已取消

2:Unknown:未知错误。如果从另一个地址空间接收到的状态值属 于在该地址空间中未知的错误空间,则可以返回此错误的示例。 没有返回足够的错误信息的API引发的错误也可能会转换为此错误

3:InvalidArgument:表示客户端指定了无效的参数。 请注意,这与FailedPrecondition不同。 它表示无论系统状态如何(例如格式错误的文件名)都有问题的参数

4:DeadlineExceeded:意味着操作在完成之前过期。 对于更改系统状态的操作,即使操作成功完成,也可能会返回此错误。 例如,服务器的成功响应可能会延迟足够的时间以使截止日期到期

5:NotFound:表示找不到某个请求的实体(例如文件或目录)

6:AlreadyExists:表示尝试创建实体失败,因为已经存在

7:PermissionDenied:表示调用者没有执行指定操作的权限。它不能用于因耗尽某些资源而引起的拒绝(使用ResourceExhausted代替这些错误)。如果调用者无法识别,则不能使用它(使用Unauthenticated代替这些错误)

8:ResourceExhausted:表示某些资源已耗尽,可能是每个用户的配额,或者整个文件系统空间不足

9:FailedPrecondition:表示操作被拒绝,因为系统不处于操作执行所需的状态。例如,要删除的目录可能不是空的,rmdir操作应用于非目录等。可能帮助服务实现者判断FailedPrecondition,Aborted和Unavailable之间的试金石测试:使用不可用如果客户端只能重试失败的呼叫。如果客户端应该在更高级别重试(例如,重新启动读取 - 修改 - 写入序列),则使用中止。如果客户端不应该重试直到系统状态被明确修复,则使用FailedPrecondition。例如,如果“rmdir”由于目录非空而失败,应该返回FailedPrecondition,因为客户端不应该重试,除非他们首先通过从目录中删除文件来修复该目录。如果客户端在资源上执行条件REST获取/更新/删除并且服务器上的资源与条件不匹配,则使用FailedPrecondition。例如,在相同的资源上发生冲突的读取 - 修改 - 写入

10:Aborted:表示操作被中止,通常是由于并发问题(如序列器检查失败,事务异常终止等)造成的。请参阅上面的试金石测试以确定FailedPrecondition,Aborted和Unavailable之间的差异

11:OutOfRange:表示操作尝试超过有效范围。 例如,寻找或阅读文件末尾。 与InvalidArgument不同,此错误表示如果系统状态更改可能会解决的问题。 例如,如果要求读取的偏移量不在[0,2 ^ 32-1]范围内,则32位文件系统将生成InvalidArgument,但如果要求从偏移量读取当前值,则它将生成OutOfRange 文件大小。 FailedPrecondition和OutOfRange之间有相当多的重叠。 我们建议在应用时使用OutOfRange(更具体的错误),以便遍历空间的调用者可以轻松查找OutOfRange错误以检测何时完成

12:Unimplemented:表示此服务中未执行或未支持/启用操作

13:Internal: 意味着底层系统预期的一些不变量已被打破。 如果你看到其中的一个错误,那么事情就会非常糟糕

14:Unavailable:表示服务当前不可用。这很可能是一种暂时性情况,可能会通过退避重试来纠正。请参阅上面的试金石测试以确定FailedPrecondition,Aborted和Unavailable之间的差异

15:DataLoss:指示不可恢复的数据丢失或损坏

16:Unauthenticated:表示请求没有有效的操作认证凭证

17:_maxCode:这个是最大的状态码

【实践】2.Prometheus命令和配置详解

Prometheus配置方式有两种:

(1)命令行,用来配置不可变命令参数,主要是Prometheus运行参数,比如数据存储位置

(2)配置文件,用来配置Prometheus应用参数,比如数据采集,报警对接

不重启进程配置生效方式也有两种:

(1)对进程发送信号SIGHUP

(2)HTTP POST请求,需要开启--web.enable-lifecycle选项curl -X POST

配置文件格式是yaml格式,说明:

.yml或者.yaml 都是 yaml格式的文件,

yaml格式的好处: 和json交互比较容易

python/go/java/php 有yaml格式库,方便语言之间解析,并且这种格式存储的信息量很大。

命令行可用配置可通过prometheus -h来查看。

配置文件使用yml格式,配置文件中一级配置项如下,说明参考#备注内容。

配置文件中通用字段值格式

boolean: 布尔类型值为true和false

scheme: 协议方式包含http和https

原始配置文件内容:

全局默认的数据拉取间隔

全局默认的单次数据拉取超时,当报context deadline exceeded错误时需要在特定的job下配置该字段。

全局默认的规则(主要是报警规则)拉取间隔

该服务端在与其他系统对接所携带的标签

该字段配置与Alertmanager进行对接的配置

样例:

上面的配置中的 alert_relabel_configs 是指警报重新标记在发送到Alertmanager之前应用于警报。 它具有与目标重新标记相同的配置格式和操作,外部标签标记后应用警报重新标记,主要是针对集群配置。

这个设置的用途是确保具有不同外部label的HA对Prometheus服务端发送相同的警报信息。

Alertmanager 可以通过 static_configs 参数静态配置,也可以使用其中一种支持的服务发现机制动态发现,我们上面的配置是静态的单实例。

此外, relabel_configs 允许从发现的实体中选择 Alertmanager,并对使用的API路径提供高级修改,该路径通过 __alerts_path__ 标签公开。

完成以上配置后,重启Prometheus服务,用以加载生效,也可以使用热加载功能,使其配置生效。然后通过浏览器,访问 就可以看 inactive pending firing 三个状态,没有警报信息是因为我们还没有配置警报规则 rules 。

这里定义和prometheus集成的alertmanager插件,用于监控报警。后续会单独进行alertmanger插件的配置、配置说明、报警媒介以及route路由规则记录。

此项配置和 scrape_configs 字段中 relabel_configs 配置一样,用于对需要报警的数据进行过滤后发向 Alertmanager

说明

relabel-configs的配置允许你选择你想抓取的目标和这些目标的标签是什么。所以说如果你想要抓取这种类型的服务器而不是那种,可以使用relabel_configs

相比之下,metric_relabel_configs是发生在抓取之后,但在数据**入存储系统之前使用。因此如果有些你想过滤的指标,或者来自抓取本身的指标(比如来自/metrics页面)你就可以使用metric_relabel_configs来处理。

该项目主要用来配置不同的 alertmanagers 服务,以及Prometheus服务和他们的链接参数。 alertmanagers 服务可以静态配置也可以使用服务发现配置。Prometheus以pushing 的方式向alertmanager传递数据。

alertmanager 服务配置和target配置一样,可用字段如下

这个主要是用来设置告警规则,基于设定什么指标进行报警(类似触发器trigger)。这里设定好规则以后,prometheus会根据全局global设定的evaluation_interval参数进行扫描加载,规则改动后会自动加载。其报警媒介和route路由由alertmanager插件实现。

样例:

"first_rules.yml"样例:

Prometheus 支持两种类型的 Rules ,可以对其进行配置,然后定期进行运算:recording rules 记录规则 与 alerting rules 警报规则,规则文件的计算频率与警报规则计算频率一致,都是通过全局配置中的 evaluation_interval 定义。

不论是recording rules还是alerting rules都要在组里面。

要在Prometheus中使用Rules规则,就必须创建一个包含必要规则语句的文件,并让Prometheus通过Prometheus配置中的rule_files字段加载该文件,前面我们已经讲过了。 其实语法都一样,除了 recording rules 中的收集的指标名称 record: string 字段配置方式略有不同,其他都是一样的。

配置范例:

recording rules 是提前设置好一个比较花费大量时间运算或经常运算的表达式,其结果保存成一组新的时间序列数据。当需要查询的时候直接会返回已经计算好的结果,这样会比直接查询快,同时也减轻了PromQl的计算压力,同时对可视化查询的时候也很有用,可视化展示每次只需要刷新重复查询相同的表达式即可。

在配置的时候,除却 record: string 需要注意,其他的基本上是一样的,一个 groups 下可以包含多条规则 rules ,Recording 和 Rules 保存在 group 内,Group 中的规则以规则的配置时间间隔顺序运算,也就是全局中的 evaluation_interval 设置。

配置范例:

上面的规则其实就是根据 record 规则中的定义,Prometheus 会在后**成 expr 中定义的 PromQL 表达式周期性运算,以 job 为维度使用 sum 聚合运算符 计算 函数rate 对http_requests_total 指标区间 10m 内的增长率,并且将计算结果保存到新的时间序列 job:http_requests_total:rate10m 中, 同时还可以通过 labels 为样本数据添加额外的自定义标签,但是要注意的是这个 lables 一定存在当前表达式 Metrics 中。

模板是在警报中使用时间序列标签和值展示的一种方法,可以用于警报规则中的注释(annotation)与标签(lable)。模板其实使用的go语言的标准模板语法,并公开一些包含时间序列标签和值的变量。这样查询的时候,更具有可读性,也可以执行其他PromQL查询 来向警报添加额外内容,ALertmanager Web UI中会根据标签值显示器警报信息。

{{ $lable.lablename}} 可以获取当前警报实例中的指定标签值

{{ $value }} 变量可以获取当前PromQL表达式的计算样本值。

调整好rules以后,我们可以使用 curl -XPOST 或者 对Prometheus服务重启,让警报规则生效。

这个时候,我们可以把阈值调整为 50 来进行故障模拟操作,这时在去访问UI的时候,当持续1分钟满足警报条件,实际警报状态已转换为 Firing,可以在 Annotations中看到模板信息 summary 与 description 已经成功显示。

规则检查

拉取数据配置,在配置字段内可以配置拉取数据的对象(Targets),job以及实例

定义job名称,是一个拉取单元。每个job_name都会自动引入默认配置如

这些也可以在单独的job中自定义

服务端拉取过来的数据也会存在标签,配置文件中也会有标签,这样就可能发生冲突。

true就是以抓取数据中的标签为准

false就会重新命名抓取数据中的标签为“exported”形式,然后添加配置文件中的标签

切换抓取数据所用的协议

定义可选的url参数

每次抓取数据请求的认证信息

password和password_file互斥只可以选择其一

bearer_token和bearer_token_file互斥只可以选择其一

抓取ssl请求时证书配置

通过代理去主去数据

Prometheus支持多种服务现工具,详细配置这里不再展开

更多参考官网: n/configuration/

服务发现来获取抓取目标为动态配置,这个配置项目为静态配置,静态配置为典型的targets配置,在改配置字段可以直接添加标签

采集器所采集的数据都会带有label,当使用服务发现时,比如consul所携带的label如下:

这些lable是数据筛选与聚合计算的基础。

抓取数据很繁杂,尤其是通过服务发现添加的target。所以过滤就显得尤为重要,我们知道抓取数据就是抓取target的一些列metrics,Prometheus过滤是通过对标签操作操现的,在字段relabel_configs和metric_relabel_configs里面配置,两者的配置都需要relabel_config字段。该字段需要配置项如下

target配置示例

target中metric示例

target中metric示例

使用示例

由以上可知当使用服务发现consul会带入标签__meta_consul_dc,现在为了表示方便需要将该标签变为dc

需要做如下配置,这里面action使用的replacement

过滤采集target

为了防止Prometheus服务过载,使用该字段限制经过relabel之后的数据采集数量,超过该数字拉取的数据就会被忽略

Prometheus可以进行远程读/写数据。字段remote_read和remote_write

(1)Prometheus 配置详解

(2)Prometheus配置文件prometheus.yml 四个模块详解

(3)官方文档说明

(4)Prometheus监控神器-Rules篇

(5)Prometheus监控神器-Alertmanager篇(1)

(6)Prometheus监控神器-Alertmanager篇(2)

英文“已经超过约定期限了”怎么翻译?

很多种说法,不知道你使用在什么地方

overdue过期未履行的,一般指**的钱、图书馆的书之类的义务

out of date 过期的,指食品、刊物等,或者服装过时的

expired截止了的

直译也可以说exceeded the deadline/limit

各位大佬们,安卓v2rayNG出现这个情况该怎么解决啊?

如果是免费机场的话不是很稳定需要定期更换,不过国内现在封杀的比较厉害只有付费的好使,或者自己搭建一个

1

分享1

Hammer加速器,iOS/安卓/PC不限制,秒上各种App网站

根据安卓手机相关内容为您推荐安卓加速器

Hammer加速器,拖拽进度条秒播视频,万兆独享专线带宽高速稳定观看1080P无压力,支持多系统多平台多设备,在线智能/人工**排忧解难

ac12.yioulushen.com广告

怎么才能去留学-2022留学费用一览表-费用全解析

值得一看的留学相关信息推荐

怎么才能去留学全新解读,出国留学读本科或研究生,如何入读国外大学?怎样选到心仪的专业?留学申请如何办理?百利天下留学干货分享!

北京环球百利教育科技有限公司广告

“包含contextdeadlineexceeded的词条” 的相关文章

contextdeadlineexceeded的简单介绍

contextdeadlineexceeded的简单介绍

prometheus 报 context deadline exceeded targets中的Error栏目报 context deadline exceeded 谷歌到说是爬取超时问题,可能是...

发表评论

访客

◎欢迎参与讨论,请在这里发表您的看法和观点。