- 博客(722)
- 收藏
- 关注
原创 【博客内容归类】
以下为博客内容栏目归纳:方便各位选择你感兴趣的内容看哈,有错误的地方可以直接评论指出,谢谢支持!【C语言专栏】【C++专栏】【面经与实习内容专栏】【linux命令与工具专栏】【linux函数介绍专栏】【计算机网络与网络编程专栏】【数据结构与算法专栏】【linux与操作系统闲记专栏】...
2020-01-31 13:24:28 2638
原创 【博客707】模版化拆解并获取victoriametrics的metricsql各个元素
模版化拆解并获取victoriametrics的metricsql各个元素。
2023-10-14 22:03:26 372
原创 【博客705】chatgpt:编写日志rotate框架
我们的网关服务等为了持久化日志以供排查问题,往往将日志输出到文件,此时如果文件太大,可能导致磁盘被写满,此时就需要对日志文件进行rotate,以保存最新的日志。
2023-09-02 11:34:08 369
原创 【博客704】chatgpt:编写dryrun框架
对于网络路由管理组件这一类重要操作组件,在变更的时候往往需要用dryrun模式看下会执行哪些操作,确定没问题再进行线上发布。
2023-09-02 11:31:11 227
原创 【博客702】shell flock实现单例模式执行任务
我们需要定时执行一个任务,并且保证每次执行时都需要上一次已经执行完了,即保证同一时间只有一个在运行。
2023-09-02 11:22:07 720
原创 【博客701】shell实现保留网络现场:ping失败时执行mtr
当我们网络出现抖动,到某个目的地ping不通时,我们想知道路径上哪里出现问题时可以在那时候执行mtr并保留下现场以供排查。
2023-09-02 11:18:26 418
原创 【博客700】如何使用 Nginx Ingress 快速实现金丝雀与蓝绿部署
越来越多的应用采用微服务架构,应用数量相比传统模式更多,管理更加复杂,发布更加频繁,如果直接将新版本上线发布给全部用户。一旦遇到线上事故(或BUG),对用户的影响极大,解决问题周期较长,甚至有时不得不回滚到前一版本,严重影响了用户体验。为了保证整体系统的稳定,风险降到最低,我们可以采用灰度发布与蓝绿发布等不同的发布方式。
2023-08-19 15:55:37 290
原创 【博客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 681
原创 【博客698】为什么当linux作为router使用时,安装docker后流量转发失败
当一台linux机器作为其它服务器的router,负责转发流量的时候,让你在linux上安装docker之后,就会出现流量都被drop掉了。
2023-08-12 17:43:39 1005
原创 【博客697】为什么iptables input drop能拦截流量进入本机非docker进程但拦截不了进入docker
因为docker daemon下发了一些预置的iptables规则,来把流量引入到docker容器,而且这部分规则将流量以宿主机和容器为视角进行切分,尽量使网络在两者上能隔离(只是一定程度上)
2023-08-12 17:29:00 373 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 560
原创 【博客695】k8s subPathExpr作用
对于一个deployment或者job拉起的服务,所有pod都是一样的配置,如果都挂载了宿主机的同一个目录,那么就会互相干扰,我们希望挂载相同目录,且在这个目录下,每个pod建立一个自己的目录,去写入自己的东西。
2023-08-12 14:58:13 765
原创 【博客694】k8s kubelet 状态更新机制
kube-controller-manager 和 kubelet 是异步工作的,这意味着延迟可能包括任何的网络延迟、apiserver 的延迟、etcd 延迟,一个节点上的负载引起的延迟等等。当 Kubernetes 中 Node 节点出现状态异常的情况下,节点上的 Pod 会被重新调度到其他节点上去,但是有的时候我们会发现节点 Down 掉以后,Pod 并不会立即触发重新调度,这实际上就是和 Kubelet 的状态更新机制密切相关的,Kubernetes 提供了一些参数配置来触发重新调度的时间。
2023-08-12 14:20:51 969
原创 【博客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 1143
原创 【博客691】VictoriaMetrics如何支持Multi Retention
实现Multi Retention Setup within VictoriaMetrics Cluster,使得为不同的监控数据采用不同的保存时间。
2023-08-08 19:56:35 291
原创 【博客690】监控进程的major page faults和minor page faults
对于由用户空间的页面错误触发的页面请求,如果页面错误处理程序能够满足该请求而不引起磁盘 I/O,则将其视为次要页面错误。但是,如果页面错误处理程序必须引发磁盘 I/O 才能满足页面请求,则它将被视为主要页面错误当 CPU 需要访问不在内存中的页面时,就会引发页面错误。major page faults只能通过访问磁盘来解决。minor page faults可以通过共享内存中已有的页面来解决。
2023-08-06 15:57:43 512
原创 【博客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 1775
原创 【博客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 733
原创 【博客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 2040
原创 【博客684】Multi-regional高可用模式部署VictoriaMetrics
每个工作负载区域(地球、火星、金星)都有一个 vmagent,通过监控设置将数据发送到多个区域。监控设置(地面控制 1,2)包含 VictoriaMetrics 时间序列数据库 (TSDB) 集群或单个数据库。全局查询视图查询一个监控安装的所有指标高可用性您可能会失去一个地区,但您的体验将是相同的。不过流量会重复两次。
2023-07-29 14:25:32 298
原创 【博客683】k8s list请求优化以及合理使用list以维护集群稳定性
这里同时传了两个参数,但 resourceVersion=0 会导致 apiserver 忽略 limit=500, 所以客户端拿到的是全量 ciliumendpoints 数据这个请求是获取 node1 上的所有 pods(%3D 是 = 的转义)。根据 nodename 做过滤,给人的感觉可能是数据量不太大,但其实背后要比看上去复杂:这种行为是要避免的,除非对数据准确性有极高要求,特意要绕过 apiserver 缓存。
2023-07-22 18:39:59 592 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 402
原创 【博客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 420
原创 【博客680】keepalived的重要garp配置
当我们没有配置keepalived的garp,而使用默认的garp配置的时候,会有一些不够健壮!比如:当keepalived节点切换为master时会发出garp包,但是默认情况下后面不会重复去refresh自己的信息,那么如果这时候sdn网关或者交换机没有学到,那么就有导致流量不通,并且不会再重发,问题将得不到解决。
2023-06-29 17:25:17 464
原创 【博客679】LVS NAT模式与FULLNAT模式原理与配置差别
LVS NAT模式是LVS原生的一种工作方式,而FULLNAT是在NAT模式下通过配置SNAT来实现FULLNAT的,而且配合SNAT这部分是靠我们自己来实现的。
2023-06-28 17:51:41 593
原创 【博客678】keepalived+ipvs fullnat模式实现tcp + udp负载均衡器
我们使用keepalived实现vip此时能够初步实现服务高可用,暂时其他备节点处于backup状态,并没有参与流量的负载均衡。我们希望流量通过vip进来后能够负载均衡到每个后端server。
2023-06-28 16:49:52 1021
原创 【博客676】VictoriaMetrics高基数限制之:布隆过滤器
VictoriaMetrics的vmstorage组件接收上游传递过来的指标,在现实场景中,指标的数量级或者瞬态指标可能会非常可怕,如果不限制缓存的大小,就会存在由于缓存导致插入速度过慢的风险错过了。
2023-06-25 20:48:46 410
原创 【博客675】prometheus生产上易犯的错误
为了在速率计算中尽可能抵消计数器重置,这些函数尝试将提供的时间窗口下样本值的任何减少解释为重置并对其进行补偿(另请参阅我们有关速率计算的详细文章)。rate()和其他 PromQL 函数(如increase()、irate()、deriv())告诉您时间序列在给定时间窗口内上升或下降的速度,都需要在输入时间窗口下至少有两个样本才能告诉您该序列在之间的发展情况这两个样本。),尝试计算deriv()计数器指标将给出每当在提供的窗口下重置计数器时,您都会得到错误的结果,有时甚至是负面的结果。
2023-06-25 18:44:30 1091
原创 【博客674】警惕Prometheus 中的重复样本和无序时间戳错误
但 Prometheus 可能会出现错误配置,导致多个目标共享相同的标签集,这可能会导致结果时间序列之间的标签集冲突。然后,TSDB 会将多个原始系列的流视为单个系列,但当它们的样本因无序或重复时间戳而相互冲突时,会拒绝无效追加。但是,Prometheus 可能会出现错误配置,导致 Prometheus 尝试附加到 TSDB 时获得重复或无序的样本时间戳,但未能成功。当样本具有不同的样本值时,它还会拒绝与系列中最新样本具有相同时间戳的样本(否则,它们将被忽略)。
2023-06-25 18:25:02 2850 8
原创 【博客673】Lookback delta, Staleness and NaN in Prometheus
Lookbackdelta是可以修改的,默认是5分钟当必须定义“最新”样本时,就会出现棘手的情况。Prometheus 没有样本之间固定间隔的概念,因此很难绝对地说给定series是否存在“当前”最新样本。如果series的最新样本已经有一周了,您可能不希望将其包含在当前时间戳的即时向量选择器的结果中(这将导致图表中出现许多过时的系列“扁平化”)。另一方面,您也不能期望series与评估时间戳完全匹配,因为 Prometheus TSDB 中的样本在某些时间网格上未对齐,并且可以具有任意时间戳。
2023-06-25 18:03:30 1058
原创 【博客672】prometheus使用数据外推与兼容跳变重置来优化处理窗口函数(rate,irate,increase)
注意:这种推断行为有一些例外:当一个系列看起来像是在提供的时间窗口内开始或结束时,我们不想在该系列终止的方向上推断得太远。和函数猜测,当第一个或最后一个样本距其各自窗口边界的距离超过窗口下样本之间平均间隔的 1.1 倍时,序列将在窗口下开始或结束rate()。increase()在这种情况下,外推仅向窗口边界延伸平均样本间隔的一半,但不会一直延伸。同样,这些函数避免外推到负值,因为计数器始终从0并且永远不能为负数。0相反,外推仅在达到预期值之前发生。
2023-06-25 17:55:01 1204
原创 【博客671】prometheus如何选择数据点以及处理counter跳变
您可能已经注意到,PromQL 查询中对时间的唯一引用是相对引用(例如[5m],回顾 5 分钟)。那么如何指定绝对图形时间范围或在表中显示查询结果的时间戳呢?在 PromQL 中,此类时间参数与表达式分开发送到Prometheus 查询 API,确切的时间参数取决于您发送的查询类型。。
2023-06-25 17:45:50 1554
原创 【博客670】VictoriaMetrics的数据分片与目标分组原理
vminsert默认情况下会将同一series的sample写入到同一个storage,多副本的时候则hash到多个storage。
2023-06-20 11:25:37 416
原创 【博客669】prometheus rate()选择range范围的最佳实践
选择太大的范围要好好考虑。如果您采用超过一个小时的速率并对此发出警报,那么在基本条件停止之前一切都很好,然后您必须等待一个小时直到警报消失。因此,一方面,较长的范围可以更容易地发现趋势,但平均效应也会增加反应时间。如果您确实希望获得不同范围内的平均值(并且比率基本上是平均值),请不要为每个可能的范围创建记录规则。这很浪费,会造成混乱,而且很难维护。这是因为您无法比较不同范围内的速率(例如,5m 速率和 10m 速率不能直接比较),并且您必须跟踪哪个用于何处。
2023-06-15 21:07:53 1213
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人