【星海随笔】Prometheus(二) 相关配置

prometheus配置文件
<IP>:9090/config
可以通过web网页直接看到里面的内容

缺省的配置文件里定义了4个单元:global、alerting、rule_files和scrape_configs。

global:配置全局的信息,如抓取监控数据的间隔,抓取业务数据接口的超时时间,告警规则执行周期等

alerting:配置告警发送到的alermanager的地址

rule_files:告警规则文件,数据聚合配置

scrape_configs:配置抓取业务监控数据的相关信息,如url,拉取时间间隔,拉取的超时时间等

remote_write:将数据投递到远程地址,如聚合数据投递到hubble-adapter

remote_read:

global 参数

global:
  scrape_interval: 30s
  scrape_timeout: 10s
  evaluation_interval: 30s
  external_labels:
    prometheus: 58-hubble/k8s
    prometheus_replica: prometheus-k8s-0

这个配置文件是Prometheus的一部分,用于定义全局配置。下面是对各个部分的解析:

global: 这个部分定义了Prometheus的全局配置。

scrape_interval: 这个参数定义了Prometheus抓取目标的时间间隔,这里是30秒。这意味着Prometheus每30秒会抓取一次目标的数据。

scrape_timeout: 这个参数定义了Prometheus抓取目标的超时时间,这里是10秒。如果在10秒内目标没有响应,Prometheus会认为抓取失败。

evaluation_interval: 这个参数定义了Prometheus评估规则的时间间隔,这里是30秒。这意味着Prometheus每30秒会评估一次规则,并根据规则触发警报等操作。

external_labels: 这个部分定义了Prometheus的外部标签。外部标签可以用于标识Prometheus实例的一些属性,比如这里的prometheus和
prometheus_replica。
这些标签可以在Prometheus的查询语言PromQL中使用,方便用户对数据进行查询和过滤。
综上所述,这个配置文件主要定义了Prometheus的全局行为,包括抓取目标的时间间隔、超时时间、评估规则的时间间隔以及外部标签。
这些配置对于Prometheus的正常运行和数据的准确性非常重要。

alerting 参数

altermanager 与 Grafana 有功能重叠。采用Grafana4.0版本已经支持报警发出功能。

alerting:
  alert_relabel_configs:
  - separator: ;
    regex: prometheus_replica
    replacement: $1   #$1表示匹配到的第一个括号内的内容
    action: labeldrop
  alertmanagers:  #alertmanagers字段用于配置Prometheus服务器与Alertmanager组件之间的通信
  - scheme: http   #使用了HTTP协议,路径前缀为"/",超时时间为10秒,API版本为v1。
    path_prefix: /
    timeout: 10s
    api_version: v1
    relabel_configs:
    #在relabel_configs部分,定义了两个重新标记规则。
    #这两个规则分别针对Kubernetes服务和端点的标签进行了操作。
    - source_labels: [__meta_kubernetes_service_name]   
    #对于源标签__meta_kubernetes_service_name中包含"alertmanager"的记录,保留该标签;
      separator: ;
      regex: alertmanager
      replacement: $1
      action: keep
    - source_labels: [__meta_kubernetes_endpoint_port_name]
      separator: ;  #对于源标签__meta_kubernetes_endpoint_port_name中包含"http"的记录,保留该标签。
      regex: http
      replacement: $1
      action: keep
    kubernetes_sd_configs:
    - role: endpoints
      namespaces:
        names:
        - default

学习这部分需要先了解 label 的作用。

__meta_kubernetes_service_name 是一个特定的元数据标签,表示Kubernetes服务的名称。
通过指定这个标签,Prometheus 可以从 Kubernetes 服务中获取相关的标签信息。

标签可以包含指标的名称、主机名、应用程序名称、环境等信息。
用户可以使用标签过滤出特定应用程序或主机的指标数据,或者按照环境标签对指标数据进行聚合。
用户可以使用标签定义告警的条件和规则,例如当某个指标超过特定的阈值时触发告警。

kubernetes_sd_configs 部分用于设置 Kubernetes 服务发现配置。
这里将角色设置为 endpoints ,表示监听 Kubernetes 集群中的 endpoints ;
在命名空间方面,只考虑"default"命名空间。
这意味着 Prometheus 将监听默认命名空间中的所有 endpoints ,并根据这些 endpoints 的变化动态地发现和更新目标。

在配置文件中,可以使用labels字段来定义标签。

alerting部分是用于设置警报的配置。
主要为:
alert_relabel_configs 和 alertmanagers
通过服务发现配置的alertmanager

alert_relabel_configs

作用:在告警发生时,动态修改标签内容,一般作用是在告警产生时修改标签,如保留哪些标签(labelkeep),删除哪些标签(labeldrop)。https://prometheus.io/docs/prometheus/latest/configuration/configuration/#relabel_config

  alert_relabel_configs:
  - separator: ;
    regex: prometheus_replica
    replacement: $1   #$1表示匹配到的第一个括号内的内容
    action: labeldrop

Alertmanager

Alertmanager是Prometheus体系中告警的统一处理中心,负责接收并处理来自Prometheus Server(或其他客户端程序)的告警信息。

  alertmanagers:  #alertmanagers字段用于配置Prometheus服务器与Alertmanager组件之间的通信
  - scheme: http   #使用了HTTP协议,路径前缀为"/",超时时间为10秒,API版本为v1。
    path_prefix: /
    timeout: 10s
    api_version: v1
    relabel_configs:
    #在relabel_configs部分,定义了两个重新标记规则。
    #这两个规则分别针对Kubernetes服务和端点的标签进行了操作。
    - source_labels: [__meta_kubernetes_service_name]   
    #对于源标签__meta_kubernetes_service_name中包含"alertmanager"的记录,保留该标签;
      separator: ;
      regex: alertmanager
      replacement: $1
      action: keep
    - source_labels: [__meta_kubernetes_endpoint_port_name]
      separator: ;  #对于源标签__meta_kubernetes_endpoint_port_name中包含"http"的记录,保留该标签。
      regex: http
      replacement: $1
      action: keep
    kubernetes_sd_configs:
    - role: endpoints
      namespaces:
        names:
        - default

配置告警管理器的地址和端口:通过alertmanagers字段,可以配置Prometheus服务器将要发送告警信息的Alertmanager组件的地址和端口。这样,Prometheus服务器就知道应该将告警信息发送到哪个Alertmanager实例。


action: 
replace: 将正则表达式与串联的source_labels匹配。然后,将target_label设置为replace,用替换中的匹配组引用(${1}, ${2}, ...)替换为其值。 
如果正则表达式不匹配,则不会进行替换。
keep: 删除其正则表达式与串联的source_labels不匹配的目标。
drop: 删除其正则表达式与串联的source_labels匹配的目标。
hashmod: 将target_label设置为串联的source_labels的哈希的模数。
labelmap: 将正则表达式与所有标签名称匹配。 然后,将匹配标签的值复制到通过替换为它们的值替换的匹配组引用(${1}, ${2}, ...)给出的标签名称。
labeldrop: 将正则表达式与所有标签名称匹配。 任何匹配的标签将从标签集中删除。
labelkeep: 将正则表达式与所有标签名称匹配。 任何不匹配的标签将从标签集中删除。
regex
作用是匹配标签的正则表达式。
需要移除key为prometheus_replica的标签。

scrape_configs

采集配置,用于指定要采集的目标列表和采集规则。

方式1使用配置书写配置文件的方式来发现服务等:

scrape_configs用于指定要采集的目标列表和采集规则。它包含每个目标的服务地址、端口、请求超时等信息
以及如何从目标中抓取数据和数据处理规则等。

scrape_configs:
  - job_name: 'example_app'
    scrape_interval: 5s
    static_configs:
      - targets: ['app1.example.com:8080', 'app2.example.com:8080']

上述配置定义了一个名为"example_app"的采集任务,使用静态配置指定了两个目标服务地址,分别为"app1.example.com:8080"和"app2.example.com:8080"。同时,设置了抓取间隔为5秒。

方式2使用额外的配置文件来发现服务:
scrape_configs:
  - job_name: "服务发现"
    file_sd_configs:
      - files:
        - /prometheus/ClientAll/*.json # 用json格式文件方式发现服务,下面的是用yaml格式文件方式,都可以
        refresh_interval: 10m
      - files:
        - /prometheus/ClientAll/*.yaml # 用yaml格式文件方式发现服务
        refresh_interval: 10m
[
	{"targets": ["<ip>:9100"] },
	{"targets": ["<ip>:9100"]}
]

在配置文件中,scrape_configs是一个数组,其中包含一个或多个配置项。
每个配置项都是一个字典,包含了一些键值对来定义一个特定的服务发现配置。

注意:填写简写客户机 例如serber03等
需要在 prometheusServer _ /etc/hosts , local_dns server 去写入一些数据。有解析才行。

例子:

global:  
  scrape_interval:     15s # 设置抓取时间间隔  
  scrape_timeout:  10s  #表示Prometheus在尝试从目标地址获取数据时,如果在10秒内没有收到响应或数据,那么它将停止等待并继续执行其他任务。
  evaluation_interval: 15s # 设置规则评估时间间隔  

rule_files:  
  - "first_rules/*.rules" # 规则文件1  
  - "second_rules/*.rules" # 规则文件2  
  
scrape_configs:  
  - job_name: 'example' # 任务名称  
    scrape_interval: 5s # 设置抓取时间间隔  
    scrape_timeout: 5s # 设置抓取超时时间  
    metrics_path: '/metrics' # 设置数据路径  
    scheme: 'http' # 设置数据访问协议  
    params: {} # 设置请求参数  
    sample_limit: 100 # 设置存储的数据标签个数限制
    - targets:
      - localhost:9090 #表示Prometheus将抓取运行在本地主机上的服务,并且该服务监听的端口是9090
global:  
  scrape_interval:     15s # 设置抓取间隔  
  evaluation_interval: 15s # 设置规则评估间隔  
  # 以下两个参数是可选的,如果设置为0,则会使用默认值  
  max_samples_per_query:   0 # 每个查询返回的最大样本数  
  max_距回滚时间:          0 # 最大查询时间范围  
  
scrape_configs:  
  - job_name: 'prometheus' # 监控目标的名字  
    scrape_interval: 5s      # 抓取间隔  
    static_configs:          # 静态配置,用于指定要抓取的目标和端口  
      - targets: ['localhost:9000', 'localhost:9001']  
    metrics_path: '/metrics'  # 监控数据的路径  
    params:                   # 可选参数,用于传递额外的标签或元数据到抓取目标  
      - 'label_selector': 'runtime=prometheus'  
    relabel_configs:           # 重标签配置,用于在抓取的数据中添加、删除或修改标签  
      - source_labels: ['job']  # 源标签  
        regex: 'prometheus'     # 正则表达式匹配目标标签  
        action: 'keep'          # 保留匹配到的标签  
  - job_name: 'node_exporter' # 另一个监控目标的名字  
    scrape_interval: 5s         # 抓取间隔  
    static_configs:             # 静态配置,用于指定要抓取的目标和端口  
      - targets: ['localhost:9100']  
    metrics_path: '/metrics'    # 监控数据的路径
prometheus的启动命令

prometheus 解压缩后
到目录里 ./prometheus 就可以启动了。

./prometheus --config.file=prometheus.yml --web.listen-address="0.0.0.0:9090"
./prometheus:
这是Prometheus的二进制文件路径,根据实际安装路径可能会有所不同。

--config.file=prometheus.yml:
指定Prometheus的配置文件为"prometheus.yml"。
Prometheus通过读取配置文件来获取各种设置和参数。你可以根据需要修改配置文件的路径和文件名。

--web.listen-address="0.0.0.0:9090":
指定Prometheus的Web监听地址为"0.0.0.0:9090"。
这意味着Prometheus将监听所有可用的网络接口的9090端口,接收Web请求。你可以根据需要修改地址和端口号。
除了上述参数,Prometheus还提供了其他可用的启动参数,以下是一些常用的参数解释:

--storage.tsdb.retention.time=180d:
设置数据保存时间为180天。Prometheus将根据这个设置保留数据的时间长度。你可以根据需要调整保存时间。

--web.enable-admin-api:
启用Prometheus的管理API,可以用于监控和配置Prometheus服务器。
这些管理API可以用于获取服务器状态、查看日志、执行清理任务等。

--web.enable-lifecycle:启用Prometheus的生命周期API,
可以用于管理Prometheus服务器的启动和停止。
这些生命周期API可以用于自动化部署和管理Prometheus服务器。

--web.route-prefix=<path>:
设置Prometheus Web端点的路由前缀。例如,如果你设置为"/api",则Prometheus的Web端点将通过"/api/graph"等路径进行访问。默认路径为空。

--web.user-assets=<path>:
设置静态资产目录的路径,可以在Web页面中访问这些资产。例如,如果你有一个自定义的Web界面需要使用一些静态资产,可以将它们的路径设置为这个参数。

--web.page-title="Prometheus Time Series Collection and Processing Server":
设置Prometheus实例的文档标题。在Web界面上显示这个标题,用于标识Prometheus服务器的用途。
T-S数据(time-series)

数据库以每两小时为间隔来分block(块)存储。
每一个块中又分为多个chunk文件。chunk文件用来存放采集过的数据的T-S数据,

一次K/V采集数据 叫做一个metric 和 labels 进行索引,之后存储在chunk中,chunk是作为存储的基本单位,index and metadata是作为子集。
prometheus平时是将采集过来的数据先都存放在内存之中,对内存的消耗还是很大的,以类似缓存的方式 用于加快搜索和访问。

当出现DOWN时,promethous有一种保护机制叫做 WAL ,可以将数据定期存入硬盘中以chunk来表示,并在重新启动时,用以恢复进入内存。
类似于redis。

pull的主动拉取和push的被动拉取。

exporter 服务

pull 指的是 客户端 (被监控机器) 先安装各类已有 exporters

exporter 本身也是一个 http_server 可以对 http 请求做出响应,返回数据。(k/v metrics)
exporter 以守护进程的模式 运行 并 开始采集数据。
prometheus 采用 pull 这种主动拉的方式 (HTTP get) 去访问每个节点上 exporter 并采样回需要的数据。

Pushgateway

指的是客户端(或服务器)安装这个 官方提供的pushgateway插件
然后,使用我们运维自行开发的各种脚本 把监控数据组织成 k/v 的形式 metric 形式 发送给 pushgateway
之后 pushgateway 会再推送给 prometheus 。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值