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 。