prometheus target获取

Posted 都市侠客行

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了prometheus target获取相关的知识,希望对你有一定的参考价值。

在生产环境中,不管企业规模多么小或者稳定,对于Prometheus来说,配置动态服务发现的模式,要比静态配置要方便很多。

一、Prometheus服务发现机制

为Prometheus添加节点由两种方式,


第一种静态配置  static_config

(适用于变动性很小的IT系统中)

在prometheus.yml中,在static_config中的targets添加被纳入监控范围内的节点信息,并且默认会在每个节点后添加一个\'/metrics\'采集端点,也就是暴露出去的,能被Prometheus抓取到的部分。


- job_name: "nodes"
# metrics_path defaults to \'/metrics\'
# scheme defaults to \'http\'.
static_configs:
- targets:
- 10.99.31.206:9100
- 10.99.31.201:9100
- 10.99.31.202:9100

话题延伸:每一个节点都会有默认的\'up\'时间序列,因此可以在Prometheus_server中查看up信息,可以看到当前在监控端所有节点的情况。目的是标识节点targets是否正常,

windows_exporter 端口 9182


第二种服务发现,agenda 不依赖于任何平台和 第三方服务

(适用于容器环境,增加/删除targets)

基于文件的服务发现;

基于DNS的服务发现;

基于API的服务发现:kubernetes、consul、azure


而且还具备重新达标的功能

target重新打标;metrics重新打标。


2.1基于文件的服务发现

若要实现文件服务发现,就需要额外建立一个文件,prom执行时会读取文件,从而从文件中抓取target。

文件可使用json、yaml格式,含有定义的target列表,以及可选的标签信息;

示例:

- targets:

 - localhost:9090

  labels:

    app:prometheus

    job:prometheus


- targets:

 - localhost:9100

  labels:

    app:node_exporter

    job:node


这些文件通常也是由另一个系统生成,例如Puppet、ansible、saltstack等配置管理系统,也能有脚本基于CMDB定期查询生成。

可以配合ansible使用,设置Prometheus周期性从ansible获取所有能被监控到的target,来生成对应的json文件。


需要先在Prometheus.yml中,配置支持文件查找

举例说明,当前我的环境是:

2.1.1Prometheus 进程位置:

[root@wind-k8s-prom prometheus]# pwd

/usr/local/prometheus

[root@wind-k8s-prom prometheus]# ls

configs  console_libraries  consoles  data  LICENSE  NOTICE  prometheus  prometheus.yml  promtool  rules

[root@wind-k8s-prom prometheus]#  

2.1.2存放文件位置:

[root@wind-k8s-prom prometheus]# cd configs/files-sd/targets/   存放文件的目录

[root@wind-k8s-prom targets]# ls

nodes-linux.yaml  prometheus-servers.yaml  具体文件信息

[root@wind-k8s-prom targets]# cat nodes-linux.yaml   文件内添加的被监控主机详情

- targets:

 - 10.99.31.201:9100

 - 10.99.31.202:9100

 - 10.99.31.203:9100

 - 10.100.6.20:9182

 - 10.99.1.123:9182

 labels:

   app: node-exporter

   job: node


[root@wind-k8s-prom targets]# cat prometheus-servers.yaml  

- targets:

 - 10.99.31.206:9090    Prometheus-server本机

 labels:

   app: prometheus     名称

   job:  prometheus      工作名称


[root@wind-k8s-prom targets]# cd ..

[root@wind-k8s-prom files-sd]# pwd

/usr/local/prometheus/configs/files-sd

[root@wind-k8s-prom files-sd]# ls

prometheus.yml  targets

[root@wind-k8s-prom files-sd]#  vim prometheus.yml  

\'prometheus

执行命令,为了方便,最好将此路径写入到prometheus服务中。这里为了测试用。

[root@wind-k8s-prom prometheus]# ./prometheus --config.file=/usr/local/prometheus/configs/files-sd/prometheus.yml                          \'prometheus

#通过配置file 获取target,这里以xx项目进行举例

- job_name: \'find_node_exporter\'

  file_sd_configs: #这一项是开启,基于文件发现的。

  - files:  #指定要加载的文件列表;

    - file_config/host.json​ #指定从哪个文件中加载监控对象;

    refresh——interval:2m #指定每隔2分钟从该文件抓取一次;


基于文件的服务发现,最终还是需要手动在文件里添加node_exporter主机。 ,而且不能添加一个网段



第三种,DNS的SRV发现。针对一组DNS域名进行定期查询。

查询时使用的DNS服务器由 /etc/resolv.conf文件指定;该发现机制依赖于A、AAAA、SRV资源记录,


2.2基于consul发现机制

consul基于golang开发的开源工具,主要面向分布式,服务化的系统提供服务注册、服务发现和配置管理的功能,提供服务发现/注册、健康检查和保持一致性等功能

https://www.consul.io/downloads/

consul运行机制是:系统中有consul服务,内网中大量的可被监控的对象都会在consul上注册称为了services;而Prometheus作为客户端连接到consul中,去分析每个可被监控的目标。Prometheus-server从consul查询到这些被监控的目标后,在本地将其转换成可被监控的target。

2.2.1安装consul服务

Downloads | Consul by HashiCorp 下载最新的consul

https://www.consul.io/downloads

\'prometheus


#yum install -y yum-utils

yum-config-manager --add-repo https://rpm.releases.hashicorp.com/RHEL/hashicorp.repo

yum -y install consul


启动开发者模式

mkdir -pv /consul/data/

consul agent -dev -ui -data-dir=/consul/data -config-dir=/etc/consul.d/ -client=0.0.0.0

命令解析:

agent 这里以客户端来运行;

-dev 以开发模式运行;当然了,还有-server模式;

-ui 使用自带的web界面;

-data-dir 数据文件存放到那里;

-config-dir 主配置文件放在哪儿;监听端口8500

-client 哪些网段能够连接进来; 

这时已经启动了consul.

\'prometheus

这时候是没有节点的,还需要在Prometheus.yml文件中添加consul插件。

1.配置consul可寻找文件

[root@wind-k8s-prom consul-configs]# pwd

/usr/local/prometheus/configs/consul-sd/consul-configs

[root@wind-k8s-prom consul-configs]# ls

nodes.json

{
"service": {
"id": "node_exporter-node01",
"name": "node01",
"address": "10.99.31.206",
"port": 9100,
"tags": ["node"],
"checks": [{ #健康状态检测
"http": "http://10.99.31.206:9100/metrics",
"interval": "5s"
}]
}
}

[root@wind-k8s-prom consul-configs]# cat nodes.json

{
"services": [
{
"id": "node_exporter-master01",
"name": "master01",
"address": "10.99.31.201",
"port": 9100,
"tags": ["k8s"],
"checks": [{
"http": "http://10.99.31.201:9100/metrics",
"interval": "5s"
}]
},
{
"id": "node_exporter-node01",
"name": "node01",
"address": "10.99.31.202",
"port": 9100,
"tags": ["k8s"],
"checks": [{
"http": "http://10.99.31.202:9100/metrics",
"interval": "5s"
}]
},
{
"id": "node_exporter-node02",
"name": "node02",
"address": "10.99.31.203",
"port": 9100,
"tags": ["k8s"],
"checks": [{
"http": "http://10.99.31.203:9100/metrics",
"interval": "5s"
}]
}
{
"id": "node_exporter-prometheus",
"name": "prometheus",
"address": "10.99.31.206",
"port": 9100,
"tags": ["prometheus"],
"checks": [{
"http": "http://10.99.31.206:9100/metrics",
"interval": "5s"
}]
}
]
}



通过目录方式来发现服务的好处时

我们可以定义,哪些服务可以被抓取到,在文件中可以自定义service,当定义多个服务的时候,服务之间需要使用逗号隔开,并且使用services参数。


过滤所有Node 节点中包含service 字段的信息。

根据服务来进行发现相应的节点。


endpoint资源发现

ingress资源发现







以上是关于prometheus target获取的主要内容,如果未能解决你的问题,请参考以下文章

Prometheus标签的使用说明

Prometheus配置文件

prometheus 服务发现原理

prometheus动态刷新rule

6.prometheus重新打标

prometheus-relabel_configs和metric_relabel_configs