kavin

运维监控系统之Prometheus consul服务自动发现

kavin 运维技术 2022-11-14 466浏览 0

运维监控系统之Prometheus consul服务自动发现

简介

prometheus支持从consul发现监控目标。

安装consul

sudoyuminstall-yyum-utils
sudoyum-config-manager--add-repohttps://rpm.releases.hashicorp.com/RHEL/hashicorp.repo
sudoyum-yinstallconsul

配置consul

vim/etc/consul.d/consul.hcl

可以根据自己的需要进行配置,如果只是本地访问的话,只需要监听127.0.0.1就可以了。然后就可以启动服务了

systemctlenableconsul
systemctlstartconsul

consul测试导入数据

packagemain

import(
"log"
"strconv"

"github.com/hashicorp/consul/api"
)

typeServerstruct{
IDint
IPstring
MetaTagsmap[string]string
}

funcmain(){
config:=api.DefaultConfig()
config.Address="127.0.0.1:8500"
config.Token=""
client,err:=api.NewClient(config)
iferr!=nil{
return
}
servers:=[]Server{
{ID:1,IP:"192.168.122.100",MetaTags:map[string]string{"idc":"idc1","use_for":"testing1"}},
{ID:2,IP:"192.168.122.101",MetaTags:map[string]string{"idc":"idc1","use_for":"testing2"}},
{ID:3,IP:"192.168.122.102",MetaTags:map[string]string{"idc":"idc1","use_for":"testing3"}},
}
fori:=rangeservers{
err=client.Agent().ServiceRegister(&api.AgentServiceRegistration{
ID:strconv.Itoa(servers[i].ID),
Name:servers[i].IP,
Port:9100,
Address:servers[i].IP,
Meta:servers[i].MetaTags,
Check:nil,
Checks:nil,
})
iferr!=nil{
log.Println(err)
}
}
log.Println("End...")
}

prometheus配置添加配置

在重新标记标签的时候,提供以下数据元标签:

  • __meta_consul_address:目标地址
  • __meta_consul_dc:目标的数据中心名称
  • __meta_consul_health:服务的健康状况
  • __meta_consul_metadata_:目标的每个节点数据元的key
  • __meta_consul_node:为consul的节点名称
  • __meta_consul_service_address:目标的服务地址
  • __meta_consul_service_id:目标的服务ID
  • __meta_consul_service_metadata_:目标的每个服务数据元的key
  • __meta_consul_service_port:目标的服务端口
  • __meta_consul_service:目标所属的服务名称
  • __meta_consul_tagged_address_:每个节点标记目标的关键值
  • __meta_consul_tags:标签根据分隔符拼接的结果,默认分隔符是,
...
-job_name:'node_exporter'
consul_sd_configs:
#consule地址
-server:'127.0.0.1:8500'
services:[]
relabel_configs:
#通过元数据标签过滤需要的数据
-source_labels:[__meta_consul_service_metadata_IDC]
#如果匹配
regex:idc1
#执行动作,keep表示如果不匹配就丢弃数据
action:keep
#通过元数据贴标签
-regex:__meta_consul_service_metadata_(.+)
action:labelmap
...

添加配置之后,就可以reload一下prometheus服务,就可以在target页面获取到我们需要的监控目标了。

总结

prometheus使用consul作为服务配置发现比较灵活,可以跨机器进行部署,也发便cmdb下发配置。

继续浏览有关 系统运维 的文章
发表评论