Prometheus源码:存储指标
Prometheus源码:存储指标 基于release-3.0 存储指标结构1234567891011121314151617181920212223242526272829// File Path: scrape/scrapetype scrapeCache struct { // 被缓存的批次数 iter uint64 // Current scrape iteration. // 上次成功时有多少序列和元数据条目。 // How many series and metadata entries there were at the last success. successfulCount int // Parsed string to an entry with information about the actual label set // and its storage reference. series map[string]*cacheEntry // Cache of dropped metric strings and their i...
Prometheus源码:指标采集
Prometheus源码:指标采集 基于release-3.0 指标采集的流程 构造ScrapeManager实例 加载配置 启动ScrapeManger实例 ScrapeManager负责维护scrapePool,并且管理scrape组件的生命周期。 ScrapeManager调用NewManager方法完成对ScrapeManager实例的创建: 1234567891011121314151617181920212223// FILE PATH:scrape/manager.gotype Manager struct { opts *Options // 系统日志记录 logger log.Logger // 指标存储器 append storage.Appendable graceShut chan struct{} offsetSeed uint64 // Global offsetSeed seed is used to spread scrape workl...
Prometheus源码:服务发现
Prometheus源码:服务发现服务发现的定义流程: scrape发现服务进行统一管理,Prometheus对所支持的发 现服务都抽象出Discoverer接口,各scrape发现服务都必须实现该接 口并用于服务发现 Discover接口定义了Run()接口: 1234567// FILE Path:prometheus/discovery/discoverytype Discoverer interface { // Run hands a channel to the discovery provider (Consul, DNS, etc.) through which // it can send updated target groups. It must return when the context is canceled. // It should not close the update channel on returning. Run(ctx context.Context, up chan<- []*target...
Prometheus源码:启动
Prometheus源码:启动 基于release-3.0 目录结构 cmd主程序入口 config 默认配置参数设置及配置文件解析 discovery 服务发现方式的实现,如 consul ,kubernetes ,dns 等 notifier 生成告警信息及告警信息发送 promql 目录为 规则计算的具体实现,根据载入的规则进行规则计算,并生成告警配置 prompb 目录定义了三种协议,远程存储协议、rpc通信协议和types协议 scrape 指标采集 relabel 目录实现了对指标维度(label)的重置处理,根据promtheus.yaml中配置文件中relabel_config配置项内容重置指标维度 retrieval 目录为Prometheus的数据采集模块,实现了对采集服务的调度和对指标数据的采集 rules 目录为Prometheus的规则管理模块,用于实现规则加载、计算调度和告警信息的回调; storage 目录为Prometheus的指标存储模块,又remote、tsdb存储俩种 tsdb 数据存储相关 web 目录是 Prometheus Web服务...
Iptables-概述
iptables 什么是iptablesiptables其实只是一个简称,其真正代表的是netfilter/iptables这个IP数据包过滤系统。为了简便,本文也将整套系统用iptables简称。iptables是3.5版本的Linux内核集成的IP数据包过滤系统。当系统接入网络时,该系统有利于在Linux系统上更好地控制IP信息包和防火墙配置。此外,iptables还可以进行NAT规则的管理。 上面有提到netfilter/iptables这个组合,这个组合中: netfilter位于内核空间,是内核的一部分,由一些数据包过滤表组成,这些表包含内核用来控制数据包过滤处理的规则集;而netfilter又是由内核中若干hook组成的,程序在执行到内核hook处时便会执行数据包过滤的相关逻辑。 iptables位于用户空间,是一种工具。该工具可以很便捷地对netfilter所维护的表数据进行修改。从而可以很便捷地控制数据包的过滤规则 执行顺序 什么是包过滤防火墙包过滤防火墙在网络层截取网络数据包的包头(header),针对数据包的包头,根据事先定义好的防火墙过滤规则...
Docker-Linux Cgroups
Docker-Linux Cgroups什么是Linux CgroupsLinux Cgroups提供了对一组进程以及将来子进程的资源限制、控制和统计的能力,包含CPU、内存、存储、网络等。通过Cgroups,可以方便的限制某个进程的资源占用,并且可以实时统计监控进程和统计消息。 Cgroups的组件cgroupcgroup是对进程分组管理的一种机制,一个cgroup包含一组进程,并且在cgroup 上增加Linux subsystem的各种参数配置,将一组进程和一组subsystem系统参数关联起来 subsystemsubsystem是一组资源控制模块,有下面的几个模块 blkio设置对块设备(比如硬盘)输入输出的访问控制 cpu设置cgroup中进程的CPU被调度的策略 cpuacct可以统计cgroup中进程调度的CPu占用 cpuset在多核机器上设置cgroup中进程可以使用的CPU和内存(此内存仅适用于NUMA架构) devices控制cgroup中进程对于设备的访问 freezer用于挂起(suspend)和恢复(resume)cgroup中的进程 ...
GO-深拷贝
GO-深拷贝复习在 Go 语言中,所有的函数参数传递都是值传递(pass by value),当将参数传递给函数时,实际上是将参数的副本传递给函数。 然而,这并不意味着在函数内部对参数的修改都不会影响原始数据。因为在 Go 中,有些数据类型本身就是引用类型,比如切片(slice)、映射(map)、通道(channel)、接口(interface)和指针(pointer)。当这些类型作为参数传递给函数时,虽然传递的是值,但值本身就是一个引用 代码陷阱切片是结构 预期:Before和After是一样的值,因为参数传递都是值传递 123456789101112131415161718192021222324252627282930package mainimport ( "fmt" "strconv")type Person struct { Name string Age int Address []string}func changepeople(people []Person) { people...
结构型模式-装饰器模式
结构型模式-装饰器模式什么是装饰器模式装饰是一种结构型设计模式, 允许你通过将对象放入包含行为的特殊封装对象中来为原对象绑定新的行为 部件(Component)声明封装器和被封装对象的公用接口 具体部件(Concrete Component)类是被封装对象所属的类。 它定义了基础行为,但装饰类可以改变这些行为 基础装饰(Base Decorator)类拥有一个指向被封装对象的引 用成员变量。该变量的类型应当被声明为通用部件接口,这 样它就可以引用具体的部件和装饰。装饰基类会将所有操作 委派给被封装的对象 具体装饰类(Concrete Decorators)定义了可动态添加到部 件的额外行为。具体装饰类会重写装饰基类的方法,并在调 用父类方法之前或之后进行额外的行为 客户端(Client)可以使用多层装饰来封装部件,只要它能 使用通用接口与所有对象互动即可 Example零件接口12345package maintype IPizza interface { getPrice() int} 具体零件12345678package maintype ...
结构型模式-外观模式
结构型模式-外观模式外观模式外观是一种结构型设计模式, 能为程序库、框架或其他复杂类提供一个简单的接口 外观(Facade)提供了一种访问特定子系统功能的便捷方式, 其了解如何重定向客户端请求,知晓如何操作一切活动部件 创建附加外观(Additional Facade)类可以避免多种不相关 的功能污染单一外观,使其变成又一个复杂结构。客户端和 其他外观都可使用附加外观 复杂子系统(Complex Subsystem)由数十个不同对象构成。 如果要用这些对象完成有意义的工作,你必须深入了解子系 统的实现细节,比如按照正确顺序初始化对象和为其提供正 确格式的数据 子系统类不会意识到外观的存在,它们在系统内运作并且相 互之间可直接进行交互 客户端(Client)使用外观代替对子系统对象的直接调用 Example外观123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960package mainimport &...
结构型模式-代理模式
结构型模式-代理模式什么是代理模式代理是一种结构型设计模式, 让你能够提供对象的替代品或其占位符。代理控制着对于原对象的访问,并允许在 将请求提交给对象前后进行一些处理 服务接口(Service Interface)声明了服务接口。代理必须遵 循该接口才能伪装成服务对象 服务(Service)类提供了一些实用的业务逻辑。 代理(Proxy)类包含一个指向服务对象的引用成员变量。代 理完成其任务(例如延迟初始化、记录日志、访问控制和缓 存等)后会将请求传递给服务对象。通常情况下,代理会对 其服务对象的整个生命周期进行管理 客户端(Client) 能通过同一接口与服务或代理进行交互, 所以你可在一切需要服务对象的代码中使用代理。 Example主体12345package maintype server interface { handleRequest(string, string) (int, string)} 代理12345678910111213141516171819202122232425262728293031323334pac...





