运维监控系统之Prometheus consul服务自动发现
简介
prometheus
支持从consul
发现监控目标。
安装consul
sudo yum install -y yum-utils
sudo yum-config-manager --add-repo https://rpm.releases.hashicorp.com/RHEL/hashicorp.repo
sudo yum -y install consul
配置consul
vim /etc/consul.d/consul.hcl
可以根据自己的需要进行配置,如果只是本地访问的话,只需要监听127.0.0.1
就可以了。然后就可以启动服务了
systemctl enable consul
systemctl start consul
consul测试导入数据
package main
import (
"log"
"strconv"
"github.com/hashicorp/consul/api"
)
type Server struct {
ID int
IP string
MetaTags map[string]string
}
func main() {
config := api.DefaultConfig()
config.Address = "127.0.0.1:8500"
config.Token = ""
client, err := api.NewClient(config)
if err != 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"}},
}
for i := range servers {
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,
})
if err != nil {
log.Println(err)
}
}
log.Println("End...")
}
prometheus
配置添加配置
在重新标记标签的时候,提供以下数据元标签:
__meta_consul_address
:目标地址__meta_consul_dc
:目标的数据中心名称__meta_consul_health
:服务的健康状况__meta_consul_metadata_<key>
:目标的每个节点数据元的key__meta_consul_node
:为consul的节点名称__meta_consul_service_address
:目标的服务地址__meta_consul_service_id
:目标的服务ID__meta_consul_service_metadata_<key>
:目标的每个服务数据元的key__meta_consul_service_port
:目标的服务端口__meta_consul_service
:目标所属的服务名称__meta_consul_tagged_address_<key>
:每个节点标记目标的关键值__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
下发配置。
- 原文作者:Linux运维菜
- 原文链接:https://www.opcai.top/post/2021/2021-06/prometheus_consul/
- 版权声明:本作品采用进行许可,非商业转载请注明出处(作者,原文链接),商业转载请联系作者获得授权。