当前位置: 代码迷 >> 综合 >> Prometheus的服务发现 service discovery
  详细解决方案

Prometheus的服务发现 service discovery

热度:62   发布时间:2023-12-08 05:49:56.0

Prometheus的服务发现 service discovery

文章目录

  • Prometheus的服务发现 service discovery
  • 前言
  • 一、静态配置
    • 1.直接修改prometheus.yml的config-file
    • 2.修改完需要重启Prometheus
    • 3.通过查看prometheus图形界面产看node状态
    • 4.静态、动态的优劣
  • 二、基于文件的服务发现
    • 1.配置
    • 2.查看Prometheus的node点的status
  • 三、基于consul的服务发现
    • 1.consul简介
    • 2.consul下载
    • 3.启动consul
    • 4.修改consul配置文件
    • 5.配置prometheus的配置文件
  • 总结


前言

prometheus支持多种服务发现的模式:静态配置(static_configs)、基于文件的服务发现、微软的azure服务发现、consul服务发现、DNS服务发现、Google的GCE服务发现、kubernetes服务发现等;

一、静态配置

一个 static_config 允许指定目标列表, 以及附带的通用标签。 在获取配置中指定静态目标是规范的方法

1.直接修改prometheus.yml的config-file

在Prometheus.yml后面增加下面job_name代码段(示例):

  - job_name: 'nodes'static_configs:    #静态配置- targets:- 172.16.78.12:9100  #node_exporter启动端口- 172.16.78.18:9100- 172.16.78.13:9100

2.修改完需要重启Prometheus

[root@localhost prometheus]# systemctl restart prometheus.service    #重启服务并查看服务状态
[root@localhost prometheus]# systemctl status prometheus.service 
● prometheus.serviceLoaded: loaded (/usr/lib/systemd/system/prometheus.service; enabled; vendor preset: disabled)Active: active (running) since Wed 2021-03-31 10:56:27 CST; 23h ago

3.通过查看prometheus图形界面产看node状态

在这里插入图片描述

4.静态、动态的优劣

静态配置的优势是可以直接修改需要增删的node,不过劣势也很明显随着环境变得复杂而变更越复杂;prometheus专门设计了一组服务发现机制,以便于能够基于服务注册中心自动发现、检测、分类可被监控的各target。

**静态修改配置文件需要重新启动服务加载,动态配置只需指定refresh_interval设置刷新间隔;**

基于动态sd遵循以下过程:
在这里插入图片描述
不同场景中,服务注册中心应用也不同:
1、公有、私有IaaS有自有的平台所有资源信息:azure、ec2、digitalocean、gce、hetzner;
2、基于第三方的开源服务发现工具:consul、eureka zookpeer serverset、airbnb nerve;
3、基于DNS和文件动态发现机制;
4、基于kubernetes平台;

二、基于文件的服务发现

1.配置

基于文件的发现服务略优于静态配置,它不依赖于任何平台或第三方服务,也是最简单和通用的动态实现方式;
prometheus server定期从文件中加载target信息:
文件可以使用json和yaml格式,它定义target和label信息;

1、配置prometheus.yml文件指定更新文件路径和时间。

  - job_name: 'nodes'file_sd_configs:    #文件发现服务配置;- files:- targets/node.yml   #指定node点的配置文件位置;refresh_interval: 1m    #配置刷新间隔时间;- job_name: 'mysqls'file_sd_configs:- files:- targets/mysql.ymlrefresh_interval: 1m

2、配置node.yml和mysql.yml

[root@localhost targets]# cat mysql.yml 
- targets:- 172.16.78.12:9104labels:app: mysql-exporterjob: mysql
[root@localhost targets]# cat node.yml 
- targets:- 172.16.78.12:9100- 172.16.78.13:9100- 172.16.78.18:9100labels:app: node-exporterjob: nodes
[root@localhost targets]# 

2.查看Prometheus的node点的status

在这里插入图片描述

三、基于consul的服务发现

1.consul简介

一款基于golang开发的分布式开源工具,服务化的系统提供服务注册、服务发现和配置管理的功能;
consul的特色:服务发现、服务的健康检查、key-value 存储、安全通讯、multi datacenter;

consul官网: consul.

2.consul下载

在官网下载适应的版本consul。
在这里插入图片描述
解压至相应目录

[root@localhost tmp]#unzip consul_1.9.4_linux_amd64.zip -d /usr/local/bin/

3.启动consul

consul agent -dev -ui -client=0.0.0.0 -config-dir=/tmp/consul-test/ -data-dir=/consul/data/

-dev development模式
-ui 开启web界面
-config-dir 指定配置文件目录
-client 指定客户端访问地址范围
consul启动

4.修改consul配置文件

consul的配置文件需要使用json或者hcl格式文件。

[root@localhost consul-test]# cat node01.json 
{
    "services": [         #多个服务需要使用services,单个使用service{
    "id": "node_exporter-node01","name": "node01","address": "172.16.78.12","port": 9100,"tags": ["nodes"],"check": [{
    "http": "http://172.16.78.12:9100","interval": "5s"}]},               #多个服务需要用逗号隔开。{
    "id": "node_exporter-node02","name": "node02","address": "172.16.78.13","port": 9100,"tags": ["nodes"],"check": [{
    "http": "http://172.16.78.13:9100","interval": "5s"}]}
]
}[root@localhost consul-test]# consul reload   #重新加载服务

consul新增新的mysql注册服务
在这里插入图片描述

5.配置prometheus的配置文件

global:
alerting:alertmanagers:- static_configs:- targets:
rule_files:
scrape_configs:- job_name: 'prometheus'static_configs:- targets: ['172.16.78.18:9090']- job_name: 'nodes'consul_sd_configs:- server: '172.16.78.18:8500'tags: - "nodes"         #此处的tag需要与consul的一致,否则不会匹配refresh_interval: 2m- job_name: 'mysql'consul_sd_configs:- server: '172.16.78.18:8500'tags: - "mysql"refresh_interval: 2m

prometheus从consul发现的endpoint服务
在这里插入图片描述

总结

  相关解决方案