openfalcon transfer多重备份

// 将数据 打入 某个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)