欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

openfalcon transfer多重备份

程序员文章站 2022-06-18 23:25:18
...
// 将数据 打入 某个Graph的发送缓存队列, 具体是哪一个Graph 由一致性哈希 决定
func Push2GraphSendQueue(items []*cmodel.MetaData) {
	cfg := g.Config().Graph

	for _, item := range items {
		graphItem, err := convert2GraphItem(item)
		if err != nil {
			log.Println("E:", err)
			continue
		}
		pk := item.PK()

		// statistics. 为了效率,放到了这里,因此只有graph是enbale时才能trace
		proc.RecvDataTrace.Trace(pk, item)
		proc.RecvDataFilter.Filter(pk, item.Value, item)

		node, err := GraphNodeRing.GetNode(pk)
		if err != nil {
			log.Println("E:", err)
			continue
		}

		cnode := cfg.ClusterList[node]
		errCnt := 0
		//    - cluster: key-value形式的字典,表示后端的graph列表,其中key代表后端graph名字,value代表的是具体的ip:port
		//    (多个地址用逗号隔开, transfer会将同一份数据发送至各个地址,利用这个特性可以实现数据的多重备份)
		for _, addr := range cnode.Addrs {
			Q := GraphQueues[node+addr]
			if !Q.PushFront(graphItem) {
				errCnt += 1
			}
		}

		// statistics
		if errCnt > 0 {
			proc.SendToGraphDropCnt.Incr()
		}
	}
}

  graph
        - enabled: true/false, 表示是否开启向graph发送数据
        - batch: 数据转发的批量大小,可以加快发送速度,建议保持默认值
        - connTimeout: 单位是毫秒,与后端建立连接的超时时间,可以根据网络质量微调,建议保持默认
        - callTimeout: 单位是毫秒,发送数据给后端的超时时间,可以根据网络质量微调,建议保持默认
        - pingMethod: 后端提供的ping接口,用来探测连接是否可用,必须保持默认
        - maxConns: 连接池相关配置,最大连接数,建议保持默认
        - maxIdle: 连接池相关配置,最大空闲连接数,建议保持默认
        - replicas: 这是一致性hash算法需要的节点副本数量,建议不要变更,保持默认即可
        - cluster: key-value形式的字典,表示后端的graph列表,其中key代表后端graph名字,value代表的是具体的ip:port(多个地址用逗号隔开, transfer会将同一份数据发送至各个地址,利用这个特性可以实现数据的多重备份)

for _, addr := range cnode.Addrs {
   Q := GraphQueues[node+addr]
   if !Q.PushFront(graphItem) {
      errCnt += 1
   }
}

transfer推送item,同一个item推送一个 judge即可,不需要多少判断多次告警。同个item推送graph是为了多重备份。

{
    "debug": false,
    "minStep": 30,
    "http": {
        "enabled": true,
        "listen": "0.0.0.0:6060"
    },
    "rpc": {
        "enabled": true,
        "listen": "0.0.0.0:8433"
    },
    "socket": {
        "enabled": true,
        "listen": "0.0.0.0:4480",
        "timeout": 3600
    },
    "judge": {
        "enabled": true,
        "batch": 200,
        "connTimeout": 1000,
        "callTimeout": 5000,
        "maxConns": 32,
        "maxIdle": 32,
        "replicas": 500,
        "cluster": {
    {% for controller in groups.controller %}
        {% if controller == groups.controller[-1] %}
            "judge-{{ "%02d"|format(loop.index0) }}":"{{ controller }}:6088"
        {% else %}
            "judge-{{ "%02d"|format(loop.index0) }}":"{{ controller }}:6088",
        {% endif %}
    {% endfor %}
        }
    },

    "graph": {
        "enabled": true,
        "batch": 200,
        "connTimeout": 1000,
        "callTimeout": 5000,
        "maxConns": 32,
        "maxIdle": 32,
        "replicas": 500,
        "cluster": {
    {% set list1=[] %}
    {% for controller in groups.controller %}
            {% do list1.append(controller) %}
    {% endfor %}
    "graph-00":"{{ list1 | join(":6070,") }}:6070"
        }
    },

    "tsdb": {
        "enabled": false,
        "batch": 200,
        "connTimeout": 1000,
        "callTimeout": 5000,
        "maxConns": 32,
        "maxIdle": 32,
        "retry": 3,
        "address": "127.0.0.1:8088"
    }
}
 

相关标签: go