自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(725)
  • 收藏
  • 关注

原创 【博客内容归类】

以下为博客内容栏目归纳:方便各位选择你感兴趣的内容看哈,有错误的地方可以直接评论指出,谢谢支持!【C语言专栏】【C++专栏】【面经与实习内容专栏】【linux命令与工具专栏】【linux函数介绍专栏】【计算机网络与网络编程专栏】【数据结构与算法专栏】【linux与操作系统闲记专栏】...

2020-01-31 13:24:28 2643

原创 【博客710】victoriametrics数据写入的pull和push模式以及优缺点

如果遇到了采集目标是个汇聚器,他的metrics会上报大量的metrics,比如:10w+,这时候就会导致pull持续超时,一直采集不到数据,这时候可以使用vmagent的stream mode用法:

2024-04-14 11:45:48 221

原创 【博客709】如果victoriametrics的scrape_timeout大于scrape_interval时会怎么样

我们在配置采集的时候,有时候会不小心配置了scrape_timeout大于scrape_interval,那么这时会出现什么情况呢?vmagent在采集的时候,如果上一次采集还没有完成,其实会结束掉再发起下一次采集的,不会出现说上一次没完成,又发起新的一次,因为这样只会采集越堆积越多,在到了下一次还没有完成或者超过了scrape_timeout,那么就会标识采集失败。

2024-03-31 11:57:53 184

原创 【博客708】victoriametrics如何处理counter跳变

监控中我们经常会使用一些counter类型的metrics来计算速率,比如:rate(https_request_total)

2024-03-31 11:44:45 365

原创 【博客707】模版化拆解并获取victoriametrics的metricsql各个元素

模版化拆解并获取victoriametrics的metricsql各个元素。

2023-10-14 22:03:26 406

原创 【博客706】容器内ping如何以非root执行

容器里的程序执行ping时,出现无权限。

2023-09-02 15:22:24 588

原创 【博客705】chatgpt:编写日志rotate框架

我们的网关服务等为了持久化日志以供排查问题,往往将日志输出到文件,此时如果文件太大,可能导致磁盘被写满,此时就需要对日志文件进行rotate,以保存最新的日志。

2023-09-02 11:34:08 380

原创 【博客704】chatgpt:编写dryrun框架

对于网络路由管理组件这一类重要操作组件,在变更的时候往往需要用dryrun模式看下会执行哪些操作,确定没问题再进行线上发布。

2023-09-02 11:31:11 238

原创 【博客703】chatgpt:编写日志输出框架,支持设置等级和输出方式

使用chatgpt,让他编写日志输出框架,支持设置等级和输出方式。

2023-09-02 11:27:23 223

原创 【博客702】shell flock实现单例模式执行任务

我们需要定时执行一个任务,并且保证每次执行时都需要上一次已经执行完了,即保证同一时间只有一个在运行。

2023-09-02 11:22:07 739

原创 【博客701】shell实现保留网络现场:ping失败时执行mtr

当我们网络出现抖动,到某个目的地ping不通时,我们想知道路径上哪里出现问题时可以在那时候执行mtr并保留下现场以供排查。

2023-09-02 11:18:26 431

原创 【博客700】如何使用 Nginx Ingress 快速实现金丝雀与蓝绿部署

越来越多的应用采用微服务架构,应用数量相比传统模式更多,管理更加复杂,发布更加频繁,如果直接将新版本上线发布给全部用户。一旦遇到线上事故(或BUG),对用户的影响极大,解决问题周期较长,甚至有时不得不回滚到前一版本,严重影响了用户体验。为了保证整体系统的稳定,风险降到最低,我们可以采用灰度发布与蓝绿发布等不同的发布方式。

2023-08-19 15:55:37 312

原创 【博客699】docker daemon预置iptables剖析

DOCKER-USER链中的过滤规则,将先于Docker默认创建的规则被加载,从而能够覆盖Docker在DOCKER链和DOCKER-ISOLATION链中的默认过滤规则。如果只允许一个指定的IP访问容器实例,可以插入路由规则到DOCKER-USER链中,从而能够在DOCKER链之前被加载。Docker启动时,会加载DOCKER链和DOCKER-ISOLATION(现在是DOCKER-ISOLATION-STAGE-1)链中的过滤规则,并使之生效,绝对禁止修改这里的过滤规则。

2023-08-12 18:06:29 739

原创 【博客698】为什么当linux作为router使用时,安装docker后流量转发失败

当一台linux机器作为其它服务器的router,负责转发流量的时候,让你在linux上安装docker之后,就会出现流量都被drop掉了。

2023-08-12 17:43:39 1038

原创 【博客697】为什么iptables input drop能拦截流量进入本机非docker进程但拦截不了进入docker

因为docker daemon下发了一些预置的iptables规则,来把流量引入到docker容器,而且这部分规则将流量以宿主机和容器为视角进行切分,尽量使网络在两者上能隔离(只是一定程度上)

2023-08-12 17:29:00 404 1

原创 【博客696】iptables中的-m addrtype --dst-type含义

m addrtype --dst-type LOCAL其作用就是:把目标地址类型属于主机系统的本地网络地址的数据包,在数据包进入NAT表PREROUTING链时,都让它们直接jump到一个名为DOCKER的链。addrtype就是这样的一个扩展模块,提供的是Address type match的功能。引用的方式就是 -m 模块名。该模块支持按源地址或目标地址类型去做匹配,支持的地址类型有很多种,比如LOCAL表示是本地网络地址,BROADCAST表示匹配广播地址,以及其它各种特殊用途的地址类型。

2023-08-12 15:16:03 600

原创 【博客695】k8s subPathExpr作用

对于一个deployment或者job拉起的服务,所有pod都是一样的配置,如果都挂载了宿主机的同一个目录,那么就会互相干扰,我们希望挂载相同目录,且在这个目录下,每个pod建立一个自己的目录,去写入自己的东西。

2023-08-12 14:58:13 815

原创 【博客694】k8s kubelet 状态更新机制

kube-controller-manager 和 kubelet 是异步工作的,这意味着延迟可能包括任何的网络延迟、apiserver 的延迟、etcd 延迟,一个节点上的负载引起的延迟等等。当 Kubernetes 中 Node 节点出现状态异常的情况下,节点上的 Pod 会被重新调度到其他节点上去,但是有的时候我们会发现节点 Down 掉以后,Pod 并不会立即触发重新调度,这实际上就是和 Kubelet 的状态更新机制密切相关的,Kubernetes 提供了一些参数配置来触发重新调度的时间。

2023-08-12 14:20:51 1005

原创 【博客693】alertmanager如何自定义告警template

alertmanager如何自定义告警template。

2023-08-12 13:26:12 578

原创 【博客692】grafana如何解决step动态变化时可能出现range duration小于step

grafana本身是没有提供step参数的,因为仪表盘根据查询数据区间以及仪表盘线条宽度等,对于不同查询,相同的step并不能很好的发挥作用,所以step是动态计算的所以在Grafana中并没有直接提供step参数,而是这两个参数:min step和resolution老版本是resolution参数,8.5以后都版本去掉了,改为了一组可以限制数据点的数量从而实现分辨率:参考:https://github.com/grafana/grafana/issues/48081。

2023-08-12 13:02:58 1245

原创 【博客691】VictoriaMetrics如何支持Multi Retention

实现Multi Retention Setup within VictoriaMetrics Cluster,使得为不同的监控数据采用不同的保存时间。

2023-08-08 19:56:35 317

原创 【博客690】监控进程的major page faults和minor page faults

对于由用户空间的页面错误触发的页面请求,如果页面错误处理程序能够满足该请求而不引起磁盘 I/O,则将其视为次要页面错误。但是,如果页面错误处理程序必须引发磁盘 I/O 才能满足页面请求,则它将被视为主要页面错误当 CPU 需要访问不在内存中的页面时,就会引发页面错误。major page faults只能通过访问磁盘来解决。minor page faults可以通过共享内存中已有的页面来解决。

2023-08-06 15:57:43 587

原创 【博客689】监控进程的自愿与非自愿上下文切换

有时候遇到机器没有性能瓶颈,但是进程出现性能瓶颈,这时候往往需要进程级别的监控。

2023-08-06 14:56:16 325

原创 【博客688】如何实现keepalived vip监控与告警

如何实现keepalived vip监控与告警。

2023-08-05 15:58:49 786 2

原创 【博客687】k8s informer的list-watch机制剖析

client-go中的reflector模块首先会list apiserver获取某个资源的全量信息,然后根据list到的rv来watch资源的增量信息。希望使用client-go编写的控制器组件在与apiserver发生连接异常时,尽量的re-watch资源而不是re-list。

2023-08-05 14:58:01 1855

原创 【博客686】k8s informer list-watch机制中的re-list与resync

client-go中的reflector模块首先会list apiserver获取某个资源的全量信息,然后根据list到的resourceversion来watch资源的增量信息。且希望使用client-go编写的控制器组件在与apiserver发生连接异常时,尽量的re-watch资源而不是re-list。

2023-08-05 14:40:18 805

原创 【博客685】prometheus 出现NaN场景以及如何去除干扰(Not a Number)

场景:出现NaN的情况示例:除以分母0用作过时处理一部分的标记。然而,这是一个实现细节。在过时实现中使用的特定位模式恰好是 NaN,这对 PromQL 用户来说永远是不可见的,尽管远程存储实现如果自己做任何数学运算,可能必须关心这一点。NaN参数运算时:2-1、即先求和再除。一般来说,总是最后进行除法不要用:要用:2-2、如果 NaN 设法进入对值进行数学运算的函数或运算符的输入,则结果将为 NaN。在这种情况下,消除 NaN 的来源,而不是尝试解决下游的不良数据。example:sum (irate

2023-08-05 14:04:17 2273

原创 【博客684】Multi-regional高可用模式部署VictoriaMetrics

每个工作负载区域(地球、火星、金星)都有一个 vmagent,通过监控设置将数据发送到多个区域。监控设置(地面控制 1,2)包含 VictoriaMetrics 时间序列数据库 (TSDB) 集群或单个数据库。全局查询视图查询一个监控安装的所有指标高可用性您可能会失去一个地区,但您的体验将是相同的。不过流量会重复两次。

2023-07-29 14:25:32 322

原创 【博客683】k8s list请求优化以及合理使用list以维护集群稳定性

这里同时传了两个参数,但 resourceVersion=0 会导致 apiserver 忽略 limit=500, 所以客户端拿到的是全量 ciliumendpoints 数据这个请求是获取 node1 上的所有 pods(%3D 是 = 的转义)。根据 nodename 做过滤,给人的感觉可能是数据量不太大,但其实背后要比看上去复杂:这种行为是要避免的,除非对数据准确性有极高要求,特意要绕过 apiserver 缓存。

2023-07-22 18:39:59 645 1

原创 【博客682】k8s apiserver bookmarks机制以更高效检测变更

对于watch请求来说,你可以指定一个resourceVersion=0来获取5分钟以内的任意变更记录及其之后,这种表现很奇怪,所以不建议指定0。可以指定一个resourceVersion来获取这个资源版本之后的变更记录,但这个资源版本早于5分钟以内保留的最小版本,则会回复一个410状态码,如果大于最大版本,则可能会一直等下去,直到超时。对于list,请求后会返回一个Kind=XXList的资源类型,XXList这种资源类型是按照惯例附带创建的,比如Pod和PodList,如果你写过CRD应该能明白了;

2023-07-22 16:55:38 465

原创 【博客681】k8s list机制与resourceVersion语义

etcd:持久化 KV 存储,集群资源(pods/services/networkpolicies/…)的唯一的权威数据(状态)源;apiserver:从 etcd 读取(ListWatch)全量数据,并缓存在内存中;无状态服务,可水平扩展;各种基础服务(e.g. kubelet、-agent、-operator):连接apiserver,获取(List/ListWatch)各自需要的数据;

2023-07-22 16:16:32 470

原创 【博客680】keepalived的重要garp配置

当我们没有配置keepalived的garp,而使用默认的garp配置的时候,会有一些不够健壮!比如:当keepalived节点切换为master时会发出garp包,但是默认情况下后面不会重复去refresh自己的信息,那么如果这时候sdn网关或者交换机没有学到,那么就有导致流量不通,并且不会再重发,问题将得不到解决。

2023-06-29 17:25:17 506

原创 【博客679】LVS NAT模式与FULLNAT模式原理与配置差别

LVS NAT模式是LVS原生的一种工作方式,而FULLNAT是在NAT模式下通过配置SNAT来实现FULLNAT的,而且配合SNAT这部分是靠我们自己来实现的。

2023-06-28 17:51:41 704

原创 【博客678】keepalived+ipvs fullnat模式实现tcp + udp负载均衡器

我们使用keepalived实现vip此时能够初步实现服务高可用,暂时其他备节点处于backup状态,并没有参与流量的负载均衡。我们希望流量通过vip进来后能够负载均衡到每个后端server。

2023-06-28 16:49:52 1054

原创 【博客677】linux模拟网络丢包与延迟

linux模拟网络丢包与延迟。

2023-06-26 18:41:57 1121

原创 【博客676】VictoriaMetrics高基数限制之:布隆过滤器

VictoriaMetrics的vmstorage组件接收上游传递过来的指标,在​​现实场景中,指标的数量级或者瞬态指标可能会非常可怕,如果不限制缓存的大小,就会存在由于缓存导致插入速度过慢的风险错过了。

2023-06-25 20:48:46 449

原创 【博客675】prometheus生产上易犯的错误

为了在速率计算中尽可能抵消计数器重置,这些函数尝试将提供的时间窗口下样本值的任何减少解释为重置并对其进行补偿(另请参阅我们有关速率计算的详细文章)。rate()和其他 PromQL 函数(如increase()、irate()、deriv())告诉您时间序列在给定时间窗口内上升或下降的速度,都需要在输入时间窗口下至少有两个样本才能告诉您该序列在之间的发展情况这两个样本。),尝试计算deriv()计数器指标将给出每当在提供的窗口下重置计数器时,您都会得到错误的结果,有时甚至是负面的结果。

2023-06-25 18:44:30 1114

原创 【博客674】警惕Prometheus 中的重复样本和无序时间戳错误

但 Prometheus 可能会出现错误配置,导致多个目标共享相同的标签集,这可能会导致结果时间序列之间的标签集冲突。然后,TSDB 会将多个原始系列的流视为单个系列,但当它们的样本因无序或重复时间戳而相互冲突时,会拒绝无效追加。但是,Prometheus 可能会出现错误配置,导致 Prometheus 尝试附加到 TSDB 时获得重复或无序的样本时间戳,但未能成功。当样本具有不同的样本值时,它还会拒绝与系列中最新样本具有相同时间戳的样本(否则,它们将被忽略)。

2023-06-25 18:25:02 3173 8

原创 【博客673】Lookback delta, Staleness and NaN in Prometheus

Lookbackdelta是可以修改的,默认是5分钟当必须定义“最新”样本时,就会出现棘手的情况。Prometheus 没有样本之间固定间隔的概念,因此很难绝对地说给定series是否存在“当前”最新样本。如果series的最新样本已经有一周了,您可能不希望将其包含在当前时间戳的即时向量选择器的结果中(这将导致图表中出现许多过时的系列“扁平化”)。另一方面,您也不能期望series与评估时间戳完全匹配,因为 Prometheus TSDB 中的样本在某些时间网格上未对齐,并且可以具有任意时间戳。

2023-06-25 18:03:30 1076

原创 【博客672】prometheus使用数据外推与兼容跳变重置来优化处理窗口函数(rate,irate,increase)

注意:这种推断行为有一些例外:当一个系列看起来像是在提供的时间窗口内开始或结束时,我们不想在该系列终止的方向上推断得太远。和函数猜测,当第一个或最后一个样本距其各自窗口边界的距离超过窗口下样本之间平均间隔的 1.1 倍时,序列将在窗口下开始或结束rate()。increase()在这种情况下,外推仅向窗口边界延伸平均样本间隔的一半,但不会一直延伸。同样,这些函数避免外推到负值,因为计数器始终从0并且永远不能为负数。0相反,外推仅在达到预期值之前发生。

2023-06-25 17:55:01 1261

空空如也

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除