首页 > 其他分享 >Prometheus03 Prometheus服务发现, 各种exporter, 容器化监控, Federation联邦, VictoriaMetrics远程存储

Prometheus03 Prometheus服务发现, 各种exporter, 容器化监控, Federation联邦, VictoriaMetrics远程存储

时间:2024-10-31 15:47:02浏览次数:6  
标签:10.0 Federation service consul Prometheus VictoriaMetrics prometheus org wang

6 服务发现

6.1 服务发现原理

6.2 文件服务发现

#准备主机节点列表文件,可以支持yaml格式和json格式
#注意:此文件不建议就地编写生成,可能出现加载一部分的情况
cat targets/prometheus*.yaml
- targets:
  - master1:9100
  labels:
    app: prometheus

#修改prometheus配置文件自动加载实现自动发现
cat prometheus.yml
......
  - job_name: 'file_sd_prometheus'
    scrape_interval: 10s                #指定抓取数据的时间间隔,默认继取全局的配置15s
    file_sd_configs:
    - files: #指定要加载的文件列表
      - targets/prometheus*.yaml #要加载的yml或json文件路径,支持glob通配符,相对路径是相对于prometheus.yml配置文件路径
      refresh_interval: 2m #每隔2分钟重新加载一次文件中定义的Targets,默认为5m
      
#注意:文件格式都是yaml或json格式

6.2.2 文件服务发现案例

6.2.2.1 案例: YAML 格式

范例: 通过yaml格式的文件发现,将所有的节点都采用自动发现机制

#创建目标目录
]#mkdir /usr/local/prometheus/conf/targets
]#cd /usr/local/prometheus/conf/targets

#创建prometheus的服务配置
]#vim prometheus-server.yml
- targets:
  - 10.0.0.151:9090
  labels:
    app: prometheus-server
    job: prometheus-server

]#vim prometheus-node.yml
- targets:
  - 10.0.0.151:9100
  labels:
    app: prometheus
    job: prometheus
- targets:
  - 10.0.0.152:9100
  - 10.0.0.153:9100
  - 10.0.0.154:9100
  labels:
    app: node-exporter
    job: node

#编辑配置文件
]#vim /usr/local/prometheus/conf/prometheus.yml
rule_files:
scrape_configs:
  ...
  - job_name: 'prometheues-file-sd'
    file_sd_configs:
    - files:
      - targets/prometheus-server.yml #相对prometheus.yml的路径(可以写绝对路径)
      refresh_interval: 10s    #10秒会去检查是否发生变化

  - job_name: 'nodeexporter-file-sd'
    file_sd_configs:
    - files:
      - targets/prometheus-node.yml
      refresh_interval: 10s
      
#检查语法
]#promtool check config /usr/local/prometheus/conf/prometheus.yml

[root@prometheus targets]#systemctl reload prometheus.service

#修改配置(测试动态更新的功能)
]#vim prometheus-node.yml
- targets:
  - 10.0.0.151:9100
  labels:
    app: prometheus
    job: prometheus
- targets:
  - 10.0.0.152:9100    #删除10.0.0.154:9100
  - 10.0.0.153:9100
  labels:
    app: node-exporter
    job: node
#10秒后在Prometheus网页http://10.0.0.151:9090/能看到对应监控少了一个

6.2.2.2 案例: JSON 格式

#可以利用工具或者网站将前面的YAML格式转换为JSON格式
#安装工具
yaml2json
#网站
http://www.json2yaml.com/

#其他配置方法和上面yaml一样

6.3 DNS 服务发现

6.3.2 DNS服务发现案例

6.3.2.1 部署和配置 DNS

#通过脚本部署
]#vim install_dns.sh
HOST_LIST="
prometheus 10.0.0.151
node1 10.0.0.152
node2 10.0.0.153
node3 10.0.0.154"
...
#安装dns服务
[root@prometheus ~]#bash install_dns.sh

#修改Prometheus的dns地址为配置的dns服务地址
]#vim /etc/netplan/00-installer-config.yaml
network:
  ethernets:
    ens33:
      addresses: [10.0.0.151/24]
      gateway4: 10.0.0.2
      nameservers:
        #addresses: [223.6.6.6,223.5.5.5]
        addresses: [127.0.0.1]
  version: 2

[root@prometheus bind]#netplan apply
#确认dns解析效果
dig master.wang.org
host master.wang.org

6.3.2.2 配置 DNS服务支持 SRV 记录

#添加SRV记录 (靠SRV记录做服务发现的)
[root@prometheus bind]#vim /etc/bind/wang.org.zone
...
node1   A        10.0.0.152
node2   A        10.0.0.153
node3   A        10.0.0.154
flask   A        10.0.0.151 #直接添加一个a记录
#添加下面的SRV记录,对应上面的三条A记录
#wang.org.是域名,可以省略不写;1H是有效期;10:有效期;10:权重;9100端口;node1.wang.org:目标
_prometheus._tcp.wang.org. 1H IN SRV 10 10 9100 node1.wang.org.
_prometheus._tcp.wang.org. 1H IN SRV 10 10 9100 node2.wang.org.
_prometheus._tcp.wang.org. 1H IN SRV 10 10 9100 node3.wang.org.

#格式:
#RFC2782中对于SRV的定义格式是:
#_Service._Proto.Name TTL Class SRV Priority Weight Port Target

#bind服务重新生效
[root@prometheus bind]#rndc reload

6.3.2.3 配置 Prometheus 使用 DNS

# vim /usr/local/prometheus/conf/prometheus.yml
scrape_configs:
  - job_name: "prometheus"
   .......
    
#添加下面所有行
  - job_name: 'dns_sd_flask'             #实现单个主机定制的信息解析,也支持DNS或/etc/hosts文件实现解析
    dns_sd_configs:
    - names: ['flask.wang.org']
      type: A                            #指定记录类型,默认SRV
      port: 8000                         #不是SRV时,需要指定Port号
      refresh_interval: 10s
      
  - job_name: 'dns_sd_node_exporter'          #实现批量主机解析
    dns_sd_configs:
    - names: ['_prometheus._tcp.wang.org']    #SRV记录必须通过DNS的实现
      refresh_interval: 10s                   #指定DNS资源记录的刷新间隔,默认30s

#检查语法
]#promtool check config /usr/local/prometheus/conf/prometheus.yml

[root@prometheus bind]#systemctl reload prometheus.service

#prometheus网页上就能看到dns发现的服务

#修改看看是否自动更新
[root@prometheus bind]#vim /etc/bind/wang.org.zone
...
node1   A        10.0.0.152
#node2   A        10.0.0.153 #删掉该记录
node4   A        10.0.0.156    #改成node4
flask   A        10.0.0.100 #修改值

_prometheus._tcp.wang.org. 1H IN SRV 10 10 9100 node1.wang.org.
_prometheus._tcp.wang.org. 1H IN SRV 10 10 9100 node2.wang.org.
_prometheus._tcp.wang.org. 1H IN SRV 10 10 9100 node4.wang.org. #改成node4

#bind服务重新生效,让dns配置生效
[root@prometheus bind]#rndc reload

#在Prometheus网页http://10.0.0.151:9090/能看到对应监控已经变更

6.4 Consul 服务发现

6.4.1 Consul 介绍

微服务下做服务发现(也能健康性检查)和配置管理(nacos是针对java微服务,consul针对所有语言微服务)

Consul自带一个Web UI管理系统

consul支持单机和高可用部署

Prometheus 基于的Consul服务发现过程:

 

6.4.2 Consul 部署

6.4.2.1 部署 Consul 单机

范例: Ubuntu 包安装 Consul

#Ubuntu2204内置consul源,直接安装
[root@ubuntu2204 ~]#apt list consul
consul/jammy 1.8.7+dfsg1-3 amd64

6.4.2.1.2 二进制安装 Consul

#下载链接
https://releases.hashicorp.com/consul/

[root@ubuntu2204 ~]#wget https://releases.hashicorp.com/consul/1.13.3/consul_1.13.3_linux_amd64.zip
[root@ubuntu2204 ~]#unzip consul_1.13.3_linux_amd64.zip -d /usr/local/bin/
[root@ubuntu2204 ~]#ls /usr/local/bin/
consul

#查看consul帮助
[root@ubuntu2204 ~]#consul

#实现consul命令自动补全
[root@ubuntu2204 ~]#consul -autocomplete-install
#重新登录生效
[root@ubuntu2204 ~]#exit
[root@ubuntu2004 ~]#consul <TAB>

#创建用户
[root@ubuntu2204 ~]#useradd -s /sbin/nologin consul
#创建目录
[root@ubuntu2204 ~]#mkdir -p /data/consul /etc/consul.d
[root@ubuntu2204 ~]#chown -R consul.consul /data/consul /etc/consul.d

#以server模式启动服务cosnul agent
[root@ubuntu2204 ~]#/usr/local/bin/consul agent -server -ui -bootstrap-expect=1 
-data-dir=/data/consul -node=consul -client=0.0.0.0 -config-dir=/etc/consul.d
-server  #定义agent运行在server模式
-bootstrap-expect #在一个datacenter中期望提供的server节点数目,当该值提供的时候,consul一直等到达到指定sever数目的时候才会引导整个集群,该标记不能和bootstrap共用
-bind:#该地址用来在集群内部的通讯,集群内的所有节点到地址都必须是可达的,默认是0.0.0.0
-node:#节点在集群中的名称,在一个集群中必须是唯一的,默认是该节点的主机名
-ui    #提供web ui的http功能
-rejoin #使consul忽略先前的离开,在再次启动后仍旧尝试加入集群中。
-config-dir #配置文件目录,里面所有以.json结尾的文件都会被加载
-client  #consul服务侦听地址,这个地址提供HTTP、DNS、RPC等服务,默认是127.0.0.1,要对外提供服务改成0.0.0.0

#创建service文件
[root@ubuntu2204 ~]#cat > /lib/systemd/system/consul.service <<EOF
[Unit]
Description="HashiCorp Consul - A service mesh solution"
Documentation=https://www.consul.io/
Requires=network-online.target
After=network-online.target

[Service]
Type=simple
User=consul
Group=consul
ExecStart=/usr/local/bin/consul agent -server -bind=10.0.0.100 -ui -bootstrap-expect=1 -data-dir=/data/consul -node=consul -client=0.0.0.0 -config-dir=/etc/consul.d
#ExecReload=/bin/kill --signal HUP \$MAINPID
KillMode=process
KillSignal=SIGTERM
Restart=on-failure
LimitNOFILE=65536

[Install]
WantedBy=multi-user.target
EOF

[root@ubuntu2204 ~]#systemctl daemon-reload
[root@ubuntu2204 ~]#systemctl enable --now consul.service

#启动成功后,可以访问下面链接
http://10.0.0.153:8500

6.4.3 Consul 自动注册和删除服务

6.4.3.1 Consul常用API接口

#列出数据中心
curl http://10.0.0.153:8500/v1/catalog/datacenters
#列出节点
curl http://10.0.0.153:8500/v1/catalog/nodes
#列出服务
curl http://10.0.0.153:8500/v1/catalog/services
#指定节点状态
curl http://consul.wang.org:8500/v1/health/node/node2
#列出服务节点
curl http://consul.wang.org:8500/v1/catalog/service/<service_id>  

#提交Json格式的数据进行注册服务
curl -X PUT -d '{"id": "myservice-id","name": "myservice","address": 
"10.0.0.151","port": 9100,"tags": ["service"],"checks": [{"http": 
"http://10.0.0.151:9100/","interval": "5s"}]}' http://10.0.0.153:8500/v1/agent/service/register

#也可以将注册信息保存在json格式的文件中,再执行下面命令注册
cat nodes.json 
{
  "id": "myservice-id",
  "name": "myservice",
  "address": "10.0.0.151",
  "port": 9100,
  "tags": [
    "service"
 ],
  "checks": [
   {
      "http": "http://10.0.0.151:9100/",
      "interval": "5s"
   }
 ]
}
curl -X PUT --data @nodes.json http://10.0.0.153:8500/v1/agent/service/register

#查询指定节点以及指定的服务信息
curl http://10.0.0.153:8500/v1/catalog/service/<service_name> 

#删除服务,注意:集群模式下需要在service_id所有在主机节点上执行才能删除该service
curl -X PUT http://10.0.0.153:8500/v1/agent/service/deregister/<service_id>

6.4.3.2 使用consul services命令注册和注销服务

consul services register命令也可用于进行服务注册,只是其使用的配置格式与直接请求HTTP API有所 不同。

#注册服务
consul services register /path/file.json

#/path/file.json文件内容
#示例: 定义了单个要注册的服务。
{
  "service": {
      "id": "myservice-id",
      "name": "myservice",
      "address": "node1.wang.org",
      "port": 9100,
      "tags": ["node_exporter"],
      "checks": [{
        "http": "http://node1.wang.org:9100/metrics",
        "interval": "5s"
     }]
 }
}
#示例: 以多个的服务的格式给出了定义
{
  "services": [
     {"id": "myservice1-id",
      "name": "myservice1",
      "address": "node1.wang.org",
      "port": 9100,
      "tags": ["node_exporter"],
      "checks": [{
        "http": "http://node1.wang.org:8080/metrics",
        "interval": "5s"
     }]
   },
     {"id": "myservice1-id",
      "name": "myservice2",
      "address": "node2.wang.org",
      "port": 9100,
      "tags": ["node_exporter"],
      "checks": [{
        "http": "http://node2.wang.org:8080/metrics",
        "interval": "5s"
       }]
     },
     {.......}
   ]
}

#注销服务
consul services deregister -id <SERVICE_ID>

6.4.4 配置 Prometheus 使用 Consul 服务发现

[root@prometheus ~]#vim /usr/local/prometheus/conf/prometheus.yml
......
  - job_name: 'consul'
    honor_labels: true  #如果标签冲突,覆盖Prometheus添加的标签,保留原标签
    consul_sd_configs:
      - server: '10.0.0.153:8500'    #consul服务地址
        services: []  #指定需要发现的service名称,默认为空表示要所有service
        #tags:       #可以过滤具有指定的tag的service
        #- "service"  
        #refresh_interval: 2m #刷新时间间隔,默认30s
      #- server: 'consul-node2.wang.org:8500'  #如果是集群,添加其它两个节点实现冗余
      #- server: 'consul-node3.wang.org:8500'

    relabel_configs:    #通过Consul动态发现带的源标签生成新的标签方便以后使用
    - source_labels: ['__meta_consul_service']  #生成新的标签名
      target_label: 'consul_service'
    - source_labels: ['__meta_consul_dc']       #生成新的标签名
      target_label: 'datacenter'  
    - source_labels: ['__meta_consul_tags']     #生成新的标签名
      target_label: 'app'
    - source_labels: ['__meta_consul_service']  #删除consul的service,此service是consul内置,但并不提供metrics数据
       regex: "consul"
       action: drop

#---------------------------------------------------------------------------------
#通过Consul动态发现的服务实例还会包含以下Metadata标签信息:
__meta_consul_address         #consul地址
__meta_consul_dc              #consul中服务所在的数据中心
__meta_consulmetadata         #服务的metadata
__meta_consul_node            #服务所在consul节点的信息
__meta_consul_service_address #服务访问地址
__meta_consul_service_id      #服务ID
__meta_consul_service_port    #服务端口
__meta_consul_service         #服务名称
__meta_consul_tags            #服务包含的标签信息
#---------------------------------------------------------------------------------

#检查语法
]#promtool check config /usr/local/prometheus/conf/prometheus.yml

[root@prometheus ~]#systemctl reload prometheus.service
#在Prometheus网页上可以看到监控的consul组

#Consul变更,Prometheus网页上也可以看到变更

6.4.2.2 部署 Consul 集群

Consul 集群架构

 

起步3个节点

6.4.2.2.2 Consul 部署

6.4.2.2.2.1 二进制部署 Consul 集群

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

标签:10.0,Federation,service,consul,Prometheus,VictoriaMetrics,prometheus,org,wang
From: https://www.cnblogs.com/ludingchao/p/18518005

相关文章

  • Prometheus02 Prometheus标签管理和告警, 定制Exporter
    3.4定制Exporter3.4.1定制Exporter说明开发应用服务的时候,就需要根据metric的数据格式,定制标准的/metric接口。#各种语言帮助手册:https://github.com/prometheus/client_golanghttps://github.com/prometheus/client_pythonhttps://github.com/prometheus/client_ja......
  • Prometheus01 Prometheus基础, 部署与配置, Node Exporter, Pushgateway, PromQL 运算
    云原生监控系统Prometheus1Prometheus介绍1.2监控内容和方法1.2.2监控方法 Google的四个黄金指标1.延迟(Latency)服务请求所需要的时长,例如HTTP请求平均延迟2.流量(Traffic),也称为吞吐量3.错误(Errors)4.饱和度(Saturation)资源的整体利用率,包括CPU(容量、配......
  • PromQL (Prometheus Query Language)进阶教程
    PrometheusQueryLanguage典型应用场景:在仪表板中可视化Prometheus数据、使用Prometheus的警报管理器构建警报规则等。了解如何构建PromQL是使用Prometheus的一项基本技能,通过上篇文章学习了基础知识,本文带你更深入学习并实践。Prometheusmetrics类型我们已经知道,Promet......
  • prometheus: 安装alert manager
    一,下载alertmanager1,官网下载地址https://prometheus.io/download/2,原理图:二,下载和安装 1,下载安装包:选择linux+amd64的版本下载:#wgethttps://github.com/prometheus/alertmanager/releases/download/v0.27.0/alertmanager-0.27.0.linux-amd64.tar.gz2,安......
  • Prometheus监控url存活
    Prometheus监控url存活及Alertmanager告警......
  • k8s 1.28.2 集群部署 Thanos 对接 MinIO 实现 Prometheus 数据长期存储
    目录什么是ThanosThanos的主要功能Thanos的架构组件Thanos部署架构SidecarReceive架构选择开始部署部署架构创建namespacenode-exporter部署kube-state-metrics部署Prometheus+Thanos-Sidecar部署固定节点创建label生成secretMinIO配置etcd证书启动Prometheus+Th......
  • prometheus: 给grafana增加dashboard(仪表板/数据面板)
    一,查看可用的dashboard(数据面板)手动添加dashboard,需要一个个手动操作,但事实上我们需要的数据多数都已经规范化,所以grafana上有现成的dashboard可以导入,数据面板的查看地址:https://grafana.com/grafana/dashboards/如图:二,安装一个dashboard在左侧的datasource中,选......
  • prometheus: 安装grafana11.3
    一,grafana的用途1,grafana是什么?grafana是用go语言编写的开源应用,它的主要用途是大规模指标数据的可视化展现它是现在网络架构/应用分析中最流行的时序数据展示工具2,官网:https://grafana.com/二,下载grafana1,下载地址:https://grafana.com/grafana/download?pg=get&p......
  • centos9(linux): 在prometheus服务端添加被监控节点
    一,从服务端所在机器测试被监控节点是否9100端口打开1,用telnet$telnet172.16.13.191002,用nc$nc-nvv172.16.13.19100 二,在服务端prometheus中添加一个监控节点编辑配置文件:viprometheus.yml内容:在static_configs: 下增加一行:-targets:["172.16.13.......
  • Prometheus和Grafana的安装部署
    初识Prometheus和Grafana通常来说,对于一个运行时的复杂系统,如果系统出了问题是很难排查的。因为你是不太可能在运行时一边检查代码一边调试的。因此,你需要在各种关键点加上监控,通过监控获取的数据,指导我们进一步工作,解决问题。用开车作为例子:车子本身是一个极其复杂的系统,而......