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服务中。这里为了测试用。
[root@wind-k8s-prom prometheus]# ./prometheus --config.file=/usr/local/prometheus/configs/files-sd/prometheus.yml
#通过配置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
#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.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获取的主要内容,如果未能解决你的问题,请参考以下文章