Exporter
export
简单来讲,能够向 sever 提供数据的程序,就可以称为exporter,在server的视角下,它即为一个target
官方提供的https://github.com/orgs/prometheus/repositories?q=exporter
使用
以下引用自网络
独立使用的
以我们已经使用过的Node Exporter为例,由于操作系统本身并不直接支持Prometheus,同时用户也无法通过直接从操作系统层面上提供对Prometheus的支持。因此,用户只能通过独立运行一个程序的方式,通过操作系统提供的相关接口,将系统的运行状态数据转换为可供Prometheus读取的监控数据。 除了Node Exporter以外,比如MySQL Exporter、Redis Exporter等都是通过这种方式实现的。 这些Exporter程序扮演了一个中间代理人的角色。
集成到应用中的
为了能够更好的监控系统的内部运行状态,有些开源项目如Kubernetes,ETCD等直接在代码中使用了Prometheus的Client Library,提供了对Prometheus的直接支持。这种方式打破的监控的界限,让应用程序可以直接将内部的运行状态暴露给Prometheus,适合于一些需要更多自定义监控指标需求的项目。
白盒监控
白盒监控(White-box monitoring)是指对系统内部运行机制、逻辑、状态进行深入监控的一种方式。它依赖于系统内部的指标和日志,可以提供系统内部运行的详细视图,比如应用程序的性能指标、数据库查询性能、系统调用的统计信息等。白盒监控需要对被监控系统有较深的理解,通过收集系统的内部指标来分析系统的健康状况和性能问题。
Prometheus通过以下几个方面实现白盒监控:
指标收集
Prometheus客户端库提供了一套丰富的指标收集接口,支持各种语言的应用程序。开发者可以在应用程序中直接使用这些库来暴露出内部状态的指标(比如HTTP请求延迟、数据库查询次数等),Prometheus服务器定期从这些暴露出的指标中抓取数据。
自定义指标
除了利用客户端库提供的标准指标类型(如Counter、Gauge、Histogram和Summary)外,用户还可以根据需要定义自己的指标,更细致地监控应用程序的内部状态。
服务发现
Prometheus支持多种服务发现机制(包括静态配置、DNS、Consul、Kubernetes等),这使得它可以自动发现并监控新的服务实例,适用于动态变化的环境。
查询语言
Prometheus提供了一种强大的查询语言(PromQL),它允许用户通过表达式来检索和处理时间序列数据,非常适合对内部指标进行深入分析。
告警规则
用户可以基于收集到的指标设置告警规则,一旦满足告警条件,Prometheus就会触发告警。这种机制可以及时发现系统内部的异常状态。
常见的Exporter
均为白盒监控
黑盒监控
在黑盒监控中,监控系统将被监控的服务视为一个黑盒子,只通过外部接口来检测系统的状态和性能,例如通过模拟用户请求来检测网站的可用性和响应时间。黑盒监控侧重于从用户的角度监控服务,重点关注服务是否可用、响应时间是否符合预期等。
黑盒监控是以故障为导向。当故障发生时,黑盒监控能快速发现故障,而白盒监控则侧重于主动发现或者预测潜在的问题。
Prometheus本身专注于白盒监控,即收集和分析应用程序内部的指标数据。然而,它可以通过集成黑盒监控工具,如Blackbox Exporter,来实现黑盒监控。它能够对外部系统执行各种检查,包括:
HTTP、HTTPS
:检查网页的可用性、证书有效性、页面加载时间等。
TCP
:检查TCP端口的可访问性。
ICMP
(Ping):检查网络的连通性。
DNS
:检查DNS查询的响应。
安装
https://github.com/prometheus/blackbox_exporter/releases
配置
安装包默认配置文件。(在Blackbox Exporter每一个探针配置称为一个module,并且以YAML配置文件的形式提供给Blackbox Exporter。
)
modules:
http_2xx:
prober: http
http:
preferred_ip_protocol: "ip4"
http_post_2xx:
prober: http
http:
method: POST
访问http://127.0.0.1:9115/probe?module=http_2xx&target=baidu.com
对baidu.com进行探测
集成
在Prometheus下配置对Blockbox Exporter实例的采集任务即可
- job_name: baidu_http2xx_probe
params:
module:
- http_2xx
target:
- baidu.com
metrics_path: /probe
static_configs:
- targets:
- 127.0.0.1:9115
- job_name: prometheus_http2xx_probe
params:
module:
- http_2xx
target:
- prometheus.io
metrics_path: /probe
static_configs:
- targets:
- 127.0.0.1:9115
当我们需要对doge站点进行采集时,一个个配置,显然不太现实。所以可以采用Relabling的方式对这些配置进行简化。
scrape_configs:
- job_name: 'blackbox'
metrics_path: /probe
params:
module: [http_2xx]
static_configs:
- targets:
- http://prometheus.io # Target to probe with http.
- https://prometheus.io # Target to probe with https.
- http://example.com:8080 # Target to probe with http on port 8080.
relabel_configs:
- source_labels: [__address__]
target_label: __param_target
- source_labels: [__param_target]
target_label: instance
- target_label: __address__
replacement: 127.0.0.1:9115
- 根据Target实例的地址,写入
__param_target
标签中。__param_<name>
形式的标签表示,在采集任务时会在请求目标地址中添加<name>
参数,等同于params的设置; - 获取
__param_target
的值,并覆写到instance
标签中; - 覆写Target实例的
__address__
标签值为BlockBox Exporter
实例的访问地址
http探针
待补充
valid_http_versions
valid_status_codes
自定义exporter
待补充