当前位置: 首页 > 工具软件 > consul-retry > 使用案例 >

consul-template实现prometheus动态添加监控节点

步浩壤
2023-12-01

使用场景:

私有云物理装机项目,使用prometheus node_exporter 监控物理机cpu,磁盘,内存,tcp,网络等运行指标,动态的添加node_exporter 指标采集地址

软件环境

consul注册中心、prometheus node_exporter、 prometheus
consul-template:Consul-Template可以查询Consul中的服务目录、Key、Key-values等,搭配ctmpl 模板,已守护线程的方式动态更新 文件。比如nginx配置;下载地址https://releases.hashicorp.com/consul-template/,下载后解压就是单独的consul-template可运行文件

实现:

prometheus.yml添加配置
job_name: 'linuxnode-discorvery'    #json 文件动态设置,prometheus会动态加载此json文件种的配置
    file_sd_configs: 
      - files:
        - /apps/prometheus/conf.d/*.json
        refresh_interval: 10s 
prometheus ctmpl 模板文件:
[
	{$ range tree "prometheus/node" $}
	{
		"targets": ["{$ .Value $}"],
		"labels": {
			"instance": "{$ .Key $}",
		}
	},  
	{$ end $}
	{}
]

最终效果
[

        {
                "targets": ["10.20.3.44:10206"],
                "labels": {
                        "host": "10.20.3.44:10205"
                }
        },
        

]

consul-template.conf文件:
log_level = "warn"
syslog {   # 启用syslog,这样服务日志可以记录到syslog里

enabled = true
# This is the name of the syslog facility to log to.
facility = "LOCAL5"
}
consul { 
# auth {
    # enabled = true
    # username = "test"
    # password = "test"
# }
address = ""  #consul地址
# token = "abcd1234"
retry {
    enabled = true
    attempts = 12
    backoff = "250ms" #backoff设置时间间隔,当未从consul获取到数据时会进行重试,并以2的倍数的时间间隔进行。比如设置250ms,重试5次
    # If max_backoff is set to 10s and backoff is set to 1s, sleep times
    # would be: 1s, 2s, 4s, 8s, 10s, 10s, ...
    #max_backoff = "3m"
}
}
template {
    source = "/home/runtime/prometheus/node.ctmpl" #模板文件地址
    destination = "/home/runtime/prometheus/node.json" #输出的文件路径
command = "" #文件渲染成功之后需要执行的命令。prometheus这里会自动发现文件的更改,所以我这里无需任何命令,给注释掉了。像nginx、haproxy之类的服务,一般更改完配置文件之后都需要重启,这里可以设置“nginx -s reload”之类的命令
command_timeout = "60s"
backup = true #当backup=true的时候,会备份上一次的配置,并以bak后缀结尾
left_delimiter = "{$" 
right_delimiter = "$}" #模板文件中分隔符。默认是用“{{}}”设置模板,当产生冲突的时候可以更改这里的设置。比如我这里由于用ansible去推送的模板文件,“{{}}”符号与Jinja2的语法产生了冲突,所以改为了“{$$}”符号
wait {
    min = "2s"
    max = "20s"
}}
启动consul-template
consul-template -config ./consul-template.conf

 类似资料: