首页 > 其他分享 >prometheus服务发现

prometheus服务发现

时间:2024-01-26 15:27:00浏览次数:26  
标签:发现 exporter 服务 service 标签 consul prometheus meta

基于文件的自动发现

JSON或者yaml的文件都可以,

[
  {
    "targets": [ "localhost:8080"],
    "labels": {
      "env": "localhost",
      "job": "cadvisor"
    }
  },
  {
    "targets": [ "localhost:9104" ],
    "labels": {
      "env": "prod",
      "job": "mysqld"
    }
  },
  {
    "targets": [ "localhost:9100"],
    "labels": {
      "env": "prod",
      "job": "node"
    }
  }
]

Prometheus配置文件/etc/prometheus/prometheus-file-sd.yml

global:
  scrape_interval: 15s
  scrape_timeout: 10s
  evaluation_interval: 15s
scrape_configs:
- job_name: 'file_ds'
  file_sd_configs:
  # Prometheus默认每5m重新读取一次文件内容,当需要修改时,可以通过refresh_interval进行设置,例如
  - refresh_interval: 1m
  - files:
    - targets.json

通过这种方式,Prometheus会自动的周期性读取文件中的内容。当文件中定义的内容发生变化时,不需要对Prometheus进行任何的重启操作。

基于Consul的自动发现

要使用的时候可以参考
https://www.prometheus.wang/sd/service-discovery-with-consul.html
这个腾讯云博客 写的很好,可以参照做下
https://cloud.tencent.com/developer/article/1536967

启动consul 需要指定host使用这个命令

# -client这个参数来制定,解决不能通过127.0.0.1访问的问题,UI就可以通过这个ip来访问,
consul agent -dev -bind=192.168.39.102 -client=192.168.39.102

UI地址:
http://192.168.39.102:8500/ui/dc1/services

服务发现与Relabel(重新贴标签)

官方文档:
https://prometheus.io/docs/prometheus/latest/configuration/configuration/#relabel_config
这个腾讯云博客 写的很好,可以参照做下
https://cloud.tencent.com/developer/article/1536967

relabel_action的作用

  • replace: 根据 regex 的配置匹配 source_labels 标签的值(注意:多个 source_label 的值会按照 separator 进行拼接),并且将匹配到的值写入到 target_label 当中,如果有多个匹配组,则可以使用 ${1}, ${2} 确定写入的内容。如果没匹配到任何内容则不对 target_label 进行重新, 默认为 replace。
  • keep: 丢弃 source_labels 的值中没有匹配到 regex 正则表达式内容的 Target 实例
  • drop: 丢弃 source_labels 的值中匹配到 regex 正则表达式内容的 Target 实例
  • hashmod: 将 target_label 设置为关联的 source_label 的哈希模块
  • labelmap: 根据 regex 去匹配 Target 实例所有标签的名称(注意是名称),并且将捕获到的内容作为为新的标签名称,regex 匹配到标签的的值作为新标签的值
  • labeldrop: 对 Target 标签进行过滤,会移除匹配过滤条件的所有标签
  • labelkeep: 对 Target 标签进行过滤,会移除不匹配过滤条件的所有标签

具体用法需要结合实际来看,这次列举几个和 Consul自动发现需要用到的场景,

  1. 会发现 Prometheus 同时加载出来了默认服务 consul,这个是不需要的。
  2. 默认只显示 job 及 instance 两个标签,其他标签都默认属于 before relabeling 下,有些必要的服务信息,也想要在标签中展示,该如何操作呢?
  3. 如果需要自定义一些标签,例如 team、group、project 等关键分组信息,方便后边 alertmanager 进行告警规则匹配,该如何处理呢?
  4. 所有 Consul 中注册的 Service 都会默认加载到 Prometheus 下配置的 consul_prometheus 组,如果有多种类型的 exporter,如何在 Prometheus 中配置分配给指定类型的组,方便直观的区别它们?

通过relabel来解决上述问题

  1. 修改prometheus.yaml
...
- job_name: 'consul-prometheus'
  consul_sd_configs:
    - server: '172.30.12.167:8500'
      services: []  
  relabel_configs:
    - source_labels: [__meta_consul_tags]
      regex: .*test.*
      action: keep

解释下,这里的 relabel_configs 配置作用为丢弃源标签中 __meta_consul_tags 不包含 test 标签的服务,__meta_consul_tags 对应到 Consul 服务中的值为 "tags": ["test"],默认 consul 服务是不带该标签的,从而实现过滤。重启 Prometheus 可以看到现在只获取了 node-exporter-172.30.12.167 这个服务了。

  1. 问题一和问题二合在一起解决
    通过consul添加meta信息,参考官方文档
    https://developer.hashicorp.com/consul/api-docs/agent/service
$ vim consul-0.json
{
  "ID": "node-exporter",
  "Name": "node-exporter-172.30.12.167",
  "Tags": [
    "test"
  ],
  "Address": "172.30.12.167",
  "Port": 9100,
  "Meta": {
    "app": "spring-boot",
    "team": "appgroup",
    "project": "bigdata"
  },
  "EnableTagOverride": false,
  "Check": {
    "HTTP": "http://172.30.12.167:9100/metrics",
    "Interval": "10s"
  },
  "Weights": {
    "Passing": 10,
    "Warning": 1
  }
}
$ curl --request PUT --data @consul-0.json http://172.30.12.167:8500/v1/agent/service/register?replace-existing-checks=1

通过web查看可以看到,meta信息可以看到

修改prometheus.yml

...
- job_name: 'consul-prometheus'
  consul_sd_configs:
    - server: '172.30.12.167:8500'
      services: []  
  relabel_configs:
    - source_labels: [__meta_consul_tags]
      regex: .*test.*
      action: keep
    - regex: __meta_consul_service_metadata_(.+)
      action: labelmap

解释一下,增加的配置作用为匹配 _meta_consul_service_metadata 开头的标签,将捕获到的内容作为新的标签名称,匹配到标签的的值作为新标签的值,而我们刚添加的三个自定义标签,系统会自动添加 __meta_consul_service_metadata_app=spring-boot、__meta_consul_service_metadata_team=appgroup、__meta_consul_service_metadata_project=bigdata 三个标签,经过 relabel 后,Prometheus 将会新增 app=spring-boot、team=appgroup、project=bigdata 三个标签。重启 Prometheus 服务,可以看到新增了对应了三个自定义标签。


上图可以看到,原生的标签只有instance和job两个,通过labelmap这个标签配置结合consol的meta信息后,可以添加新的标签 并显式的看到

  1. 问题四
    创建两个不同的exporter分组
$ vim consul-1.json
{
  "ID": "node-exporter",
  "Name": "node-exporter-192.168.39.101",
  "Tags": [
    "node-exporter"
  ],
  "Address": "192.168.39.101",
  "Port": 9100,
  "Meta": {
    "app": "spring-boot",
    "team": "appgroup",
    "project": "bigdata"
  },
  "EnableTagOverride": false,
  "Check": {
    "HTTP": "http://192.168.39.101:9100/metrics",
    "Interval": "10s"
  },
  "Weights": {
    "Passing": 10,
    "Warning": 1
  }
}

# 更新注册服务
$ curl --request PUT --data @consul-1.json http://192.168.39.102:8500/v1/agent/service/register?replace-existing-checks=1

$ vim consul-2.json
{
  "ID": "cadvisor-exporter",
  "Name": "cadvisor-exporter-192.168.39.101",
  "Tags": [
    "cadvisor-exporter"
  ],
  "Address": "192.168.39.101",
  "Port": 8080,
  "Meta": {
    "app": "docker",
    "team": "cloudgroup",
    "project": "docker-service"
  },
  "EnableTagOverride": false,
  "Check": {
    "HTTP": "http://192.168.39.101:8080/metrics",
    "Interval": "10s"
  },
  "Weights": {
    "Passing": 10,
    "Warning": 1
  }
}

# 注册服务
$ curl --request PUT --data @consul-2.json http://172.30.12.167:8500/v1/agent/service/register?replace-existing-checks=1

说明:我们更新了原 node-exporter-172.30.12.167 服务的标签为 node-exporter,同时注册一个新类型 cadvisor-exporter-172.30.12.167 服务,并设置标签为 cadvisor-exporter,以示区别。注册完毕,通过 Consul Web 控制台可以看到成功注册了这两个服务。

最后再次修改prometheus.yaml

...
  - job_name: 'consul-node-exporter'
    consul_sd_configs:
      - server: '172.30.12.167:8500'
        services: []  
    relabel_configs:
      - source_labels: [__meta_consul_tags]
        regex: .*node-exporter.*
        action: keep
      - regex: __meta_consul_service_metadata_(.+)
        action: labelmap

  - job_name: 'consul-cadvisor-exproter'
    consul_sd_configs:
      - server: '172.30.12.167:8500'
        services: []
    relabel_configs:
      - source_labels: [__meta_consul_tags]
        regex: .*cadvisor-exporter.*
        action: keep
      - regex: __meta_consul_service_metadata_(.+)
        action: labelmap

配置后重启服务,可以看到 已经通过标签分为两个组了

标签:发现,exporter,服务,service,标签,consul,prometheus,meta
From: https://www.cnblogs.com/jasmine456/p/17988780

相关文章

  • linux系统开机systemctl自动启动项目服务
    前言作为一名开发人员,都会懂一些服务器相关知识。对于项目部署时,自动启动应该是最基本的,之前都是使用inid来进行开机服务。而今systemctl服务逐渐取代前者。本篇简单记录一下systemctl服务的一些配置以及命令。一、关于systemctl命令下面以nginx服务为例systemctlenab......
  • 人太多,挤不进去?教你搭建一个自己的幻兽帕鲁服务器
    本文分享自华为云社区《一文读懂:华为云幻兽帕鲁服务器搭建教程(windows平台)》,作者:云计算冲锋队。《幻兽帕鲁》是近期爆火的一款开放世界生存建造游戏,在游戏中,玩家可以在广阔的世界中收集神奇的生物“帕鲁”,派他们进行战斗、建造、做农活,工业生产等。与其他开放世界游戏不同,要想实......
  • 服务器运维小技巧(二)——如何进行监控告警
    服务器运维难度高的原因,很大程度是因为服务器一旦出现问题,生产环境的业务就会受到严重影响,极有可能带来难以承担的后果。因此这份工作要求工程师保持高要求的服务质量,能够快速响应问题,及时解决问题。但是“及时”的这一点很难做到,需要通过优化工作流程、建立预警系统,搭建自动化等行......
  • 服务器遭遇CC攻击怎么办,使用高防SCDN能防御吗
    随着互联网的普及,网络安全问题日益凸显,其中CC攻击(也称为ChallengeCollapsar攻击)已成为一种常见的网络攻击手段。CC攻击主要针对服务器的验证码系统进行攻击,通过大量请求来耗尽服务器资源,导致服务器无法正常处理正常用户的请求。那么如何对其进行防护呢?CC攻击的原理CC攻击利用了......
  • 1月26日总结(服务外包杯大模型总结)
    在本地部署了chatglm3大模型的cpu运行版本,但是运行速度太缓慢。在阿里云服务器部署了langchain-chatglm大模型,还有一个langchain-chatchat版本,之后会尝试一下。观看了一些视频,有一些想法:赛题官方答复可以做多个城市的旅游知识库。可以添加多模态,生成图片音频,这可以作为一个......
  • 【UE插件DTRabbitMQ】 虚幻引擎蓝图连接RabbitMQ服务器使用插件说明
    本插件可以使用蓝图连接RabbitMQ服务器,并推送或者监听消息。下载地址地址在文章最后。 1.节点说明CreateRabbitMQClient-创建RabbitMQ客户端对象创建一个RabbitMQ客户端对象,返回的对象需要提升为变量,以后就是用这个对象去操作。Connect-链接服务器链接到Rabbit......
  • github action 自动化部署asp.net core应用到服务器
    在自己的仓库里工作流编辑workflow贴上自己的工作流name:ASP.NETCoreDeploymenton:push:branches:-master#你可以根据需要更改分支名称(在向master分支推送的时候触发这个workflow)jobs:deploy:runs-on:ubuntu-latest#使用Ubuntu环......
  • 45从零开始用Rust编写nginx,静态文件服务器竟然还有这些细节
    wmproxywmproxy已用Rust实现http/https代理,socks5代理,websocket代理,反向代理,静态文件服务器,四层TCP/UDP转发,七层负载均衡,内网穿透等,力争打造和nginx的性能。项目地址国内:https://gitee.com/tickbh/wmproxygithub:https://github.com/tickbh/wmproxy静态文件服务器静态......
  • 企业级微服务项目实战《学成在线》学习日志(二)
    下面正式开始开发!课程查询开发习惯从底层开始,所以就从DAO层(mapper层)开始写,再写service。先在content-service写个测试类,配置和包看黑马的去。介绍下以前学过的分页查询插件courseBaseMapper,实质上就是在sql语句上加上limit等语句,可以看下测试类的代码:@SpringBootTestpublic......
  • 服务器搭建
    服务器搭建选择操作系统:根据您的需求和技能水平选择合适的操作系统。安装操作系统:按照官方文档或指南进行操作系统的安装,可以使用光盘、驱动器或远程安装等方式。配置网络设置:根据网络环境配置服务器的网络设置,包括地址、子网掩码、网关等。安装必要软件:根据服务器用途安装必要......