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"
}
}