Job与Instance
当我们需要采集不同的监控指标(例如:主机、MySQL、Nginx)时,我们只需要运行相应的监控采集程序,并且让Prometheus Server知道这些Exporter实例的访问地址。在Prometheus中,每一个暴露监控样本数据的HTTP服务称为一个实例。例如在当前主机上运行的node exporter可以被称为一个实例(Instance)。
# 指标采集配置
scrape_configs:
# 任务名称
- job_name: "prometheus"
# 实例列表
static_configs:
- targets: ["127.0.0.1:9090"]
# 任务名称
- job_name: "node"
# 实例列表
static_configs:
- targets:
- "192.168.1.32:9100"
- "192.168.200.102:9100"
job
Prometheus 默认有一个 prometheus 的job,该任务主要用于收集 Prometheus 自己的相关指标。
用户可以根据采集实例进行分类然后分配到不同的job
。
比如将所有 Node Exporter
的实例分到名为 node
任务。job_name 定义的任务名称会以 job=node
的格式作为标签被添加到时间序列中,这样就可以通过该标签对数据也进行分组。
通过 Prometheus 提供的 UI 界面可以看到目前的实例和任务相关情况:
实例
简单来讲
instance
: 一个单独 scrape 的目标, 一般对应于一个进程。
jobs
: 一组同种类型的 instances
scrape_configs:
- job_name: "node"
static_configs:
- targets:
- "192.168.1.32:9100"
- job: api-server
- instance 1: 1.2.3.4:5670
- instance 2: 1.2.3.4:5671
- instance 3: 5.6.7.8:5670
- instance 4: 5.6.7.8:5671
而一组用于相同采集目的的实例,或者同一个采集进程的多个副本则通过一个一个任务(Job)进行管理。同时,Prometheus 也会给每一个实例添加一个 UP 指标:
当前在每一个Job中主要使用了静态配置(static_configs)的方式定义监控目标。除了静态配置每一个Job的采集Instance地址以外,Prometheus还支持与DNS、Consul、E2C、Kubernetes等进行集成实现自动发现Instance实例,并从这些Instance上获取监控数据。
标签
除了系统提供的job 标签以外,用户也可以自己添加标签:
# 指标采集配置
scrape_configs:
- job_name: "node"
static_configs:
- targets:
- "192.168.1.32:9100"
labels:
group: "sre"
env: "product"
配置引用
将 targets 的配置抽离成单独的文件,然后在主配置中引入,这样就避免了static_configs
下配置的混乱
# 指标采集配置
scrape_configs:
...
# 新增用户测试文件的任务
- job_name: "node-exporter-file"
# 从文件获取实例
file_sd_configs:
- files:
- /opt/prometheus/conf/targets/node-exporter.yml
node-exporter.yml 内容如下:
- targets:
- "192.168.1.32:9100"
labels:
group: "sre"
env: "product"
# 加了个标识,用于区别
way: "file"
其他
kubernetes_sd_configs
: 实现k8s集群的服务发现
consul_sd_config
: 基于consul的服务发现
等