Prometheus 专栏 —— 通过 consul 实现自动服务发现

news2025/1/5 15:16:33

部署 Consul

部署 Prometheus 的过程这里就不做重复介绍了,如果还不清楚的先移步到:
Prometheus 专栏 —— Prometheus安装、配置

目录结构

> hostk
> consul.yml
> roles
>   - consul
>       - files
>       	 - consul_1.20.1_linux_amd64.zip
>       - vars 
>            - main.yml
>       - tasks
>            - main.yml
>            - deploy_consul.yml
>       - templates
>            - consul.json.j2
>            - consul.service.j2

hostk

[consulServer]
consul-server ansible_host=172.16.X.X ansible_ssh_port=22 ansible_ssh_user='root' ansible_ssh_pass='******'
[consulServer:vars]
consul_version=1.20.1
consul_service_name=consul
consul_client_addr=0.0.0.0
consul_ui=true
consul_logs_level=INFO
acl_enabled=true
acl_default_policy=deny

consul_install.yml

---
- name: consul
  hosts: consulServer
  gather_facts: yes
  become: yes
  vars_files:
    - roles/consul/vars/main.yml
  roles:
    - consul

vars/main.yml

---
CONSUL_VERSION: "{{ hostvars['consul-server']['consul_version'] }}"
CONSUL_CONFIG_DIR: "/data/consul.d"
CONSUL_DATA_DIR: "/data/consul"
CONSUL_BIN_PATH: "/usr/local/bin/consul"
CONSUL_SERVICE_NAME: "{{ hostvars['consul-server']['consul_service_name'] }}"
CONSUL_BIND_ADDR: "{{ ansible_default_ipv4.address }}"
CONSUL_CLIENT_ADDR: "{{ hostvars['consul-server']['consul_client_addr'] }}"
CONSUL_UI: "{{ hostvars['consul-server']['consul_ui'] }}"
CONSUL_LOG_LEVEL: "{{ hostvars['consul-server']['consul_logs_level'] }}"
CONSUL_LOG_DIR: "/data/logs/consul"
ACL_ENABLED: "{{ hostvars['consul-server']['acl_enabled'] }}"
ACL_DEFAULT_POLICY: "{{ hostvars['consul-server']['acl_default_policy'] }}"

templates/consul.json.j2

{
  "datacenter": "qysy",
  "data_dir": "{{ CONSUL_DATA_DIR }}",
  "log_level": "{{ CONSUL_LOG_LEVEL }}",
  "log_file": "{{ CONSUL_LOG_DIR }}/consul.log",
  "ui": {{ CONSUL_UI }},
  "bind_addr": "{{ CONSUL_BIND_ADDR }}",
  "client_addr": "{{ CONSUL_CLIENT_ADDR }}",
  "server": true,
  "bootstrap_expect": 1,
  {% if ACL_ENABLED %}
  "acl": {
    "enabled": true,
    "default_policy": "{{ ACL_DEFAULT_POLICY }}",
    "enable_token_persistence": true
  }
  {% endif %}
}

templates/consul.service.j2

[Unit]
Description="HashiCorp Consul - A distributed, highly available, and data-center-aware solution to connect and configure applications across dynamic, distributed infrastructure."
Documentation=https://www.consul.io/
Requires=network-online.target
After=network-online.target

[Service]
User=root
Group=root
PIDFile={{ CONSUL_DATA_DIR }}/consul.pid
ExecStartPre=-/bin/mkdir -p /run/consul
ExecStart={{ CONSUL_BIN_PATH }} agent -config-dir={{ CONSUL_CONFIG_DIR }}
ExecReload=/bin/kill -HUP $MAINPID
KillSignal=SIGINT
Restart=on-failure
LimitNOFILE=65536

[Install]
WantedBy=multi-user.target

tasks/main.yml

---
- import_tasks: deploy_consul.yml

tasks/deploy_consul.yml

---
- name: Install required dependencies
  ansible.builtin.yum:
    name:
      - wget
      - unzip
      - curl
    state: present

- name: Create consul directories
  file:
    path: "{{ item }}"
    state: directory
    mode: '0755'
  with_items:
    - "{{ CONSUL_DATA_DIR }}"
    - "{{ CONSUL_CONFIG_DIR }}"
    - "{{ CONSUL_LOG_DIR }}"

- name: Ensure Consul configuration directory exists
  ansible.builtin.file:
    path: "{{ CONSUL_CONFIG_DIR }}"
    state: directory
    mode: '0755'

- name: Ensure Consul data directory exists
  ansible.builtin.file:
    path: "{{ CONSUL_DATA_DIR }}"
    state: directory
    mode: '0755'

- name: Copy Consul binary
  ansible.builtin.copy:
    src: "{{ item }}"
    dest: "/tmp"
  with_fileglob:
    - "../files/consul_{{ CONSUL_VERSION }}_linux_amd64.zip"

- name: Unzip Consul binary
  ansible.builtin.unarchive:
    src: "/tmp/consul_{{ CONSUL_VERSION }}_linux_amd64.zip"
    dest: "/usr/local/bin"
    remote_src: yes

- name: Set executable permission for Consul binary
  ansible.builtin.file:
    path: "{{ CONSUL_BIN_PATH }}"
    mode: '0755'

- name: Create Consul configuration file
  ansible.builtin.template:
    src: consul.json.j2
    dest: "{{ CONSUL_CONFIG_DIR }}/consul.json"

- name: Create Consul systemd service unit file
  ansible.builtin.template:
    src: consul.service.j2
    dest: "/usr/lib/systemd/system/{{ CONSUL_SERVICE_NAME }}.service"

- name: Reload Consul
  ansible.builtin.systemd:
    name: "{{ CONSUL_SERVICE_NAME }}"
    state: started
    enabled: yes

- name: Wait for Consul to be ready
  ansible.builtin.wait_for:
    timeout: 60

- name: Generate initial management token
  ansible.builtin.command: >
    {{ CONSUL_BIN_PATH }} acl bootstrap
  register: acl_bootstrap_output

- name: Extract management token from output
  ansible.builtin.set_fact:
    management_token: "{{ acl_bootstrap_output.stdout.split('SecretID: ')[1].split('\n')[0] }}"

- name: Print management token
  ansible.builtin.debug:
    msg: "Management Token: {{ management_token }}"

配置 Prometheus 实现自动服务发现

修改 prometheus.yml 文件

# ......其余部分不做展示
  - job_name: 'consul-monitor'
    consul_sd_configs:
    - server: '$CONSUL_IP:8500'
    relabel_configs:
    - source_labels: [__metrics_path__]
      regex: /metrics
      target_label: __metrics_path__
      replacement: /actuator/prometheus
      action: replace
    - source_labels: [__meta_consul_service_id]
      regex: springboot-agent
      target_label: __metrics_path__
      replacement: /agent/actuator/prometheus
      action: replace
    - source_labels: [__meta_consul_service]
      separator: ;
      regex: (.*)
      target_label: application
      replacement: $1
      action: replace
    - source_labels: ['__meta_consul_tags']
      regex: '^.*,prometheus-target,.*$'
      action: keep
# ......

接下来直接访问 $MONITOR_IP:9090 进行 Target 查看添加自动服务发现监控详情

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2270241.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

家政上门小程序如何创建?家政服务怎么能少了小程序帮手

在如今这个“忙到没时间打扫”的时代,家政服务变得越来越受欢迎。为了提高效率、减少沟通成本,很多家政公司都已经开始借助小程序的力量。那么,家政上门小程序到底该如何创建呢?小程序又是如何帮助家政服务更好地满足客户需求的呢?本文将为…

破解密码

rhel8/centos8 重置 root 密码 方法 1 : rd.break 第 1 步 重启系统,在下图所示界面按 e 键 第2步 找到linux这行,末尾空格后 输入 rd.break 第3步 查看,可选步骤 这里 sysroot 是以只读的形式挂载的,所以要以可读可…

本地小主机安装HomeAssistant开源智能家居平台打造个人AI管家

文章目录 前言1. 添加镜像源2. 部署HomeAssistant3. HA系统初始化配置4. HA系统添加智能设备4.1 添加已发现的设备4.2 添加HACS插件安装设备 5. 安装cpolar内网穿透5.1 配置HA公网地址 6. 配置固定公网地址 前言 大家好!今天我要向大家展示如何将一台迷你的香橙派Z…

自学记录鸿蒙API 13:实现多目标识别Object Detection

起步:什么叫多目标识别? 无论是生活中的动物识别、智能相册中的场景分类,还是工业领域的检测任务,都能看到多目标识别的身影。这次,我决定通过学习HarmonyOS最新的Object Detection API(API 13&#xff09…

javaEE-多线程进阶-JUC的常见类

juc:指的是java.util.concurrent包,该包中加载了一些有关的多线程有关的类。 目录 一、Callable接口 FutureTask类 参考代码: 二、ReentrantLock 可重入锁 ReentrantLock和synchronized的区别: 1.ReentantLock还有一个方法&#xff1a…

fpga系列 HDL:ModelSim显示模拟波形+十进制格式数值(临时方法和设置持久化的默认值)

模拟波形 FPGA中使用数字滤波器时,可通过观察模拟波形更好地查看滤波效果。可以通过ModelSim中的波形格式设置来实现更直观的波形显示。右键波形->Format-> Analog 效果 数值格式显示 不同的数值格式显示:右键波形->Radix-> Decimal 效果…

Linux 中 sysctl 和 systemctl 有什么区别?

sysctl 和 systemctl 是两个不同的命令行工具,它们在 Linux 系统中分别用于不同的目的。理解这两个命令的区别对于系统管理和配置非常重要。 1. sysctl 功能 用途:sysctl 用于动态地修改内核参数,这些参数控制着操作系统的某些行为。配置文…

【ArcGISPro/GeoScenePro】检查并处理高程数据

数据 https://arcgis.com/sharing/rest/content/items/535efce0e3a04c8790ed7cc7ea96d02d/data 数字高程模型 (DEM) 是一种栅格,可显示地面或地形的高程。 数字表面模型 (DSM) 是另一种高程栅格,可显示表面的高度,例如建筑物或树冠的顶部。 您需要准备 DEM 和 DSM 以供分析…

Redis数据库主要数据结构类型

Redis数据库提供了丰富多样的数据结构类型,以满足不同场景下的数据存储需求。以下是Redis中的主要数据结构类型: 一、五种基础数据结构 字符串(String) 简介:字符串是Redis最基本的数据类型,可以存储字符串…

基于Springboot + vue实现的校园周边美食探索及分享平台

🥂(❁◡❁)您的点赞👍➕评论📝➕收藏⭐是作者创作的最大动力🤞 💖📕🎉🔥 支持我:点赞👍收藏⭐️留言📝欢迎留言讨论 🔥🔥&…

Oracle Dataguard(主库为 Oracle 11g 单节点)配置详解(1):Oracle Dataguard 概述

Oracle Dataguard(主库为 Oracle 11g 单节点)配置详解(1):Oracle Dataguard 概述 目录 Oracle Dataguard(主库为 Oracle 11g 单节点)配置详解(1):Oracle Data…

mapbox基础,测面功能实现

👨‍⚕️ 主页: gis分享者 👨‍⚕️ 感谢各位大佬 点赞👍 收藏⭐ 留言📝 加关注✅! 👨‍⚕️ 收录于专栏:mapbox 从入门到精通 文章目录 一、🍀前言1.1 ☘️mapboxgl.Map 地图对象1.2 ☘️Turf 框架二、🍀测面功能实现1. ☘️实现思路2. ☘️代码样例一、🍀…

基于下垂控制的构网变换器功率控制【微电网变流器】【Simulink】

目录 主要内容 理论研究 整体模型 PQ计算模块 功率控制模块 PWM反馈模块 结果一览 下载链接 主要内容 该仿真针对微电网中分布式电源接入后产生的谐波影响,除了污染网络外,还会恶化微电网变流器输出电流,为了消除谐波影响&a…

2025差旅平台推荐:一体化降本30%

医药行业因其高度专业化的特点,同时在运营过程中又极为依赖供应链和销售网络,因此差旅管理往往成为成本控制的重要环节。本期,我们以差旅平台分贝通签约伙伴——某知名药企为例,探讨企业如何通过差旅一体化管理,在全流…

【漫话机器学习系列】027.混淆矩阵(confusion matrix)

混淆矩阵(Confusion Matrix) 混淆矩阵是机器学习中评估分类模型性能的一种工具,特别是在多类别分类问题中。它通过对比模型预测结果和真实标签,帮助我们理解模型的分类效果。 1. 混淆矩阵的结构 混淆矩阵通常是一个二维表格&am…

【AIGC】 ChatGPT实战教程:如何高效撰写学术论文引言

💥 欢迎来到我的博客!很高兴能在这里与您相遇! 首页:GPT-千鑫 – 热爱AI、热爱Python的天选打工人,活到老学到老!!!导航 - 人工智能系列:包含 OpenAI API Key教程, 50个…

redis的学习(二)

4 哈希表 哈希类型中的映射关系通常称为field-value,⽤于区分Redis整体的键值对(key-value), 注意这⾥的value是指field对应的值,不是键(key)对应的值, 4.1 操作命令 hset&#xff…

IT运维的365天--024 闲置路由器关闭了dhcp,如何知道它的IP是啥

有时候各种原因,我们关闭了路由器的Dhcp,比如需要获取的无线IP和有线同一个网段的情况。时间久了,如果没做标记,大部分时候就会忘了路由器原来设置的是什么IP,没有路由器的对应IP,自然也无法进路由器后台去…

统信系统设置代理的问题

统信系统设置代理的问题 问题表现方式一方式二 问题表现 统信系统下有系统代理和应用代理两个代理。设置系统代理时,git不能经过代理拉取代码。但是设置应用代理时,可以用git通过代理拉代码。 这是系统代理,在这里设置 ip 端口,…

U盘提示格式化?原因、恢复方案与预防措施全解析

一、U盘提示格式化现象概述 在日常使用U盘的过程中,我们有时会遇到一个令人头疼的问题——U盘插入电脑后,系统却弹出一个提示框,告知我们U盘需要格式化才能访问。这个提示往往伴随着数据的潜在丢失风险,让我们不禁为之心焦。U盘提…