2023年6月30日发(作者:)
Prometheus配置⽂件说明# Kubernetes的API SERVER会暴露API服务,Promethues集成了对Kubernetes的⾃动发现,它有5种模式:Node、Service# 、Pod、Endpoints、ingress,下⾯是Prometheus官⽅给出的对Kubernetes服务发现的实例。这⾥你会看到⼤量的relabel_configs,# 其实你就是把所有的relabel_configs去掉⼀样可以对kubernetes做服务发现。relabel_configs仅仅是对采集过来的指标做⼆次处理,⽐如# 要什么不要什么以及替换什么等等。⽽以__meta_开头的这些元数据标签都是实例中包含的,⽽relabel则是动态的修改、覆盖、添加删除这些标签# 或者这些标签对应的值。⽽且以__开头的标签通常是系统内部使⽤的,因此这些标签不会被写⼊样本数据中,如果我们要收集这些东西那么则要进⾏# relabel操作。当然reabel操作也不仅限于操作__开头的标签。#
# action的⾏为:# replace:默认⾏为,不配置action的话就采⽤这种⾏为,它会根据regex来去匹配source_labels标签上的值,并将并将匹配到的值写⼊target_label中# labelmap:它会根据regex去匹配标签名称,并将匹配到的内容作为新标签的名称,其值作为新标签的值# keep:仅收集匹配到regex的源标签,⽽会丢弃没有匹配到的所有标签,⽤于选择# drop:丢弃匹配到regex的源标签,⽽会收集没有匹配到的所有标签,⽤于排除# labeldrop:使⽤regex匹配标签,符合regex规则的标签将从target实例中移除,其实也就是不收集不保存# labelkeep:使⽤regex匹配标签,仅收集符合regex规则的标签,不符合的不收集#
global:scrape_interval: 10sevaluation_interval: 30sscrape_configs:# ⽤于发现API SERVER- job_name: 'kubernetes-apiservers'kubernetes_sd_configs:# 发现endpoints,它是从列出的服务端点发现⽬标,这个endpoints来⾃于Kubernetes中的service,每⼀个service都有对应的endpoints,这⾥是⼀个列表# 可以是⼀个IP:PORT也可以是多个,这些IP:PORT就是service通过标签选择器选择的POD的IP和端⼝。所以endpoints⾓⾊就是⽤来发现server对应的pod的IP的# kubernetes会有⼀个默认的service,通过找到这个service的endpoints就找到了api server的IP:PORT,那endpoints有很多,我怎么知道哪个是api server呢# 这个就靠source_labels指定的标签名称了。- role: endpoints# 通过什么形式来连接,默认是httpsscheme: https# 下⾯这个ca_file和token_file的路径都是默认的,你可能默认设置能⽤么?其实可以,因为每⼀个运⾏起来的POD kubernetes都会为其# 创建⼀个serviceaccout的Secret并且挂载到下⾯的⽬录上,⾥⾯就有和token这两个⽂件,你可以⾃⼰启动⼀个POD,然后通过# kubectl describe pods 来查看,⼀定会在Volumes下⾯有⼀个default-token-XXX的东西,并且Mounts⾥⾯有下⾯的⽬录。tls_config:ca_file: /var/run/secrets//serviceaccount/rer_token_file: /var/run/secrets//serviceaccount/token# 下⾯的含义是源标签__meta_kubernetes_namespace等如果其值为default;kubernetes;https标签顺序和值要对应。换句话说就是# 当__meta_kubernetes_namespace, __meta_kubernetes_service_name, __meta_kubernetes_endpoint_port_name三者对应的# 值为default、kubernetes、https则进⾏保留,⽽且该endpoints对应的地址为api server的地址。#
# __meta_kubernetes_namespace 端点对象的命名空间,在不同对象上这个标签的含义不同,在⾓⾊是endpoints中这个是端点对象的名称空间# __meta_kubernetes_service_name 端点对象的服务名称# __meta_kubernetes_endpoint_port_name 端点的端⼝名称#
# kubernetes默认在default名称空间有⼀个叫做kubernetes的service,所以这个service的有3个设置对应的就是下⾯三个标签# __meta_kubernetes_namespace 值为default# __meta_kubernetes_service_name 值为kubernetes# __meta_kubernetes_endpoint_port_name 值为httpsrelabel_configs:- source_labels: [__meta_kubernetes_namespace, __meta_kubernetes_service_name, __meta_kubernetes_endpoint_port_name]action: keepregex: default;kubernetes;https# 配置针对kubelet的服务发现以及对标签的处理,是获取kubelet上/metrics接⼝数据来获取node的资源使⽤情况- job_name: 'kubernetes-nodes-kubelet'scheme: httpstls_config:ca_file: /var/run/secrets//serviceaccount/# 跳过CA验证# insecure_skip_verify: truebearer_token_file: /var/run/secrets//serviceaccount/tokenkubernetes_sd_configs:# 使⽤node⾓⾊,它使⽤默认的kubelet提供的http端⼝来发现集群中每个node节点。那具体地址是什么呢?# 地址类型有四种NodeInternalIP, NodeExternalIP, NodeLegacyHostIP 和 NodeHostName,默认为这四个中第⼀个可⽤的地址。# 那么这⾥为什么使⽤node⾓⾊呢?因为node⾓⾊就是⽤来发现kubelet的# __meta_kubernetes_node_name:节点对象的名字# __meta_kubernetes_node_label_
# ⽽这些Target的访问地址实际上就是Kubelet的访问地址,并且Kubelet实际上直接内置了对Promtheus的⽀持- role: noderelabel_configs:# 保留(.+)匹配到的内容,去掉__meta_kubernetes_node_label_,实际上就是把(.+)当做新标签,然后⽼标签的值给这个新标签,# 这⾥没有设置source_labels,则表⽰匹配所有标签- action: labelmap# 匹配节点对象上的每⼀个标签regex: __meta_kubernetes_node_label_(.+)# 抓取cAdvisor数据,是获取kubelet上/metrics/cadvisor接⼝数据来获取容器的资源使⽤情况- job_name: 'kubernetes-nodes-cadvisor'scheme: httpstls_config:ca_file: /var/run/secrets//serviceaccount/rer_token_file: /var/run/secrets//serviceaccount/tokenkubernetes_sd_configs:# 使⽤⾓⾊为node- role: noderelabel_configs:- action: labelmapregex: __meta_kubernetes_node_label_(.+)# 把__metrics_path__的值替换为/metrics/cadvisor,因为默认是/metrics- target_label: __metrics_path__replacement: /metrics/cadvisor# 抓取服务端点,整个这个任务都是⽤来发现node-exporter和kube-state-metrics-service的,这⾥⽤的是endpoints⾓⾊,这是通过这两者的service来发现# 的后端endpoints。另外需要说明的是如果满⾜采集条件,那么在service、POD中定义的labels也会被采集进去- job_name: 'kubernetes-service-endpoints'kubernetes_sd_configs:- role: endpointsrelabel_configs:# 重新打标仅抓取到的具有 "/scrape: true" 的annotation的端点,意思是说如果某个service具有/scrape = true annotation声明则抓取# annotation本⾝也是键值结构,所以这⾥的源标签设置为键,⽽regex设置值,当值匹配到regex设定的内容时则执⾏keep动作也就是保留,其余则丢弃.# node-exporter这个POD的service⾥⾯就有⼀个叫做/scrape = true的annotations所以就找到了node-exporter这个POD- source_labels: [__meta_kubernetes_service_annotation_prometheus_io_scrape]action: keepregex: true# 应⽤中⾃定义暴露的指标,也许你暴露的API接⼝不是/metrics这个路径,那么你可以在这个POD对应的service中做⼀个# "/path = /mymetrics" 声明,下⾯的意思就是把你声明的这个路径赋值给__metrics_path__# 其实就是让prometheus来获取⾃定义应⽤暴露的metrices的具体路径,不过这⾥写的要和service中做好约定# 如果service中这样写 /app-metrics-path: '/metrics' 那么你这⾥就要# __meta_kubernetes_service_annotation_prometheus_io_app_metrics_path这样写- source_labels: [__meta_kubernetes_service_annotation_prometheus_io_path]action: replacetarget_label: __metrics_path__regex: (.+)# 暴露⾃定义的应⽤的端⼝,就是把地址和你在service中定义的 "/port =
发布者:admin,转转请注明出处:http://www.yc00.com/xiaochengxu/1688057639a72525.html
评论列表(0条)