Skip to content

Go语言版本的Nacos适配Consul,支持最新的Prometheus和Promtail的Consul服务发现配置

Notifications You must be signed in to change notification settings

liuxuzxx/nacos-consul-adapter-go

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

45 Commits
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

概述

由于Prometheus只支持以下四种服务发现的方式

  1. 手动服务发现
  2. 通过文件服务发现
  3. 通过consul服务发现
  4. 通过K8S服务发现

缺少Nacos服务发现机制的配置,github上已经有了一个nacos-consul-adapter,但是有以下不太满足我们需求的地方:

  1. 使用Java编写,相对于Go来说比较占据内存和CPU资源
  2. 没有实现consul的/v1/health/service/{serviceName}接口,没法匹配最新版的Promtail和Promtheus

综上所述,按照线上服务的要求,用Go写了一个适配器服务!

配置文件说明

server:
  port: 18501 #adapter适配器对外的HTTP服务端口
nacosConfigs:#Nacos集群配置,可以配置多个Nacos节点信息
  - ip: 172.16.1.15
    port: 8848
  - ip: 172.16.1.17 #集群当中的第二台配置信息
    port: 8848
nameSpaceGroup: #Nacos的命名空间和组名字(暂时支持一个)
  nameSpace: public
  groupName: DEFAULT_GROUP

Promtail和Promtheus的配置改动

Promtail的配置改动

以前的手动发现配置

...省略上面的推送配置
scrape_configs:
- job_name: 作业名字
  static_configs:
  - targets:
      - localhost
    labels: #标签
      job: 作业名字
      __path__: /日志根路径/*
...省略下面更多的配置

使用这个适配器之后的配置

scrape_configs:
  - job_name: '测试通过consul发现抓取日志' #任务的名字
    consul_sd_configs: #consul配置
      - server: '172.16.16.46:18501'  #consul的服务配置地址,和consul的配置方式一致
    relabel_configs: #重写标签来做转换获取到的services的处理
      - source_labels: [__meta_consul_service_metadata_log_path] #这个标签在Nacos的Metadata当中存储一个:log_path 数据,记录当前服务的日志路径
        target_label: __path__
        action: replace
      - source_labels: [__meta_consul_service]
        target_label: service
        action: replace

Prometheus修改同上

备注

Nacos添加Metadata的处理

//下面这段代码可以朝向Nacos添加如下属性:
//log.path:本服务的日志路径
//startup.time:服务启动时间
//注意:nacos-consul-adapter-go会替换所有Metadata当中的 . 为下划线,所以最后的结果就是:log_path startup_time 
//之所以使用 . 是为了迎合nacos的习惯,但是使用下划线是为了迎合prometheus标签的规范,注意不要有大写
@Bean
public NacosDiscoveryProperties nacosProperties() {
    NacosDiscoveryProperties nacosDiscoveryProperties = new NacosDiscoveryProperties();
    Map<String, String> metadata = nacosDiscoveryProperties.getMetadata();
    metadata.put("startup.time", new SimpleDateFormat("yyyy-MM-dd HH:mm:ss")
        .format(new Date()));
    String logPath = System.getProperty("user.dir") + "/logs/*";
    metadata.put("log.path", logPath);
    log.info("Register Nacos Metadata information is:{}!", JSON.toJSONString(metadata));
    return nacosDiscoveryProperties;
}

About

Go语言版本的Nacos适配Consul,支持最新的Prometheus和Promtail的Consul服务发现配置

Resources

Stars

Watchers

Forks

Packages

No packages published