-
Notifications
You must be signed in to change notification settings - Fork 257
Send Router
Andrewei edited this page Dec 14, 2017
·
9 revisions
Sender Router 是一个根据要发送的数据中某个字段的值来决定从哪个 sender 发送的功能。
开启 Sender Router 功能需要在收集器的配置文件中添加 router
这个配置项。
- 一个典型的配置如下:
router {
"router_key_name": "field1",
"router_match_type": "equal",
"router_default_sender": 0,
"router_routes": {
"value1": 0,
"value2": 1,
"value3": 2
}
}
- 字段说明:
参数名称 | 参数类型 | 是否必填 | 参数说明 |
---|---|---|---|
router_key_name | string | 必填 | 在发送数据的时候作为路由参照的字段名称 |
router_match_type | string | 必填 | 匹配规则,目前支持的匹配规则有两种: equal 和 contains , 具体见下面的说明 |
router_default_sender | int | 必填 | 默认选择哪个 sender 发送, 当要发送的数据无法匹配 router_routes 中的任何一个路由规则时,将使用该选项指定的 sender 发送, 填入的值应当为 senders 配置项中该 sender 的下标, 从 0 开始 |
router_routes | map[string]int | 必填 | 具体的路由规则,以上面的配置为例,路由规则为: 1. 当 field1 这个字段的值为 value1 时,使用 senders 配置中下标为 0 的 sender 发送;2. 当 field1 的值为 value2 时,使用下标为 1 的 sender 发送;3. 当 field1 的值为 value3 时,使用下标为 2 的 sender 发送 |
匹配规则是指 router_key_name
的字段的值在作为路由参照的时候,它的值应该与 router_routes
中的路由规则进行怎样的匹配,最终完成路由.
目前支持的路由规则有两种 equal
和 contains
:
该规则是指,当 router_key_name
的值与 router_routes
中的值完全相同时,进行路由.
- 例如要发送的数据为:
[
{
"field1": "a",
"field2": "X"
},
{
"field1": "B",
"field2": "X"
},
{
"field1": 1234,
"field2": "X"
},
{
"field1": 123,
"field2": "X"
},
{
"field1": "123",
"field2": "X"
},
{
"field1": "a",
"field2": "X"
},
{
"field1": "a",
"field2": "X"
}
]
- senders 的配置为:
"senders": [
{
"name": "file_sender0",
"sender_type": "file",
"file_send_path": "sender/sender_file0"
},
{
"name": "file_sender0",
"sender_type": "file",
"file_send_path": "sender/sender_file0"
},
{
"name": "file_sender0",
"sender_type": "file",
"file_send_path": "sender/sender_file0"
}
]
- router 的配置为:
"router": {
"router_key_name": "field1",
"router_match_type": "equal",
"router_default_sender": 2,
"router_routes": {
"a": 0,
"123": 1,
}
}
在上述配置下,每个 sender_file
中接收的数据为:
- sender_file0
[
{
"field1": "a",
"field2": "X"
},
{
"field1": "a",
"field2": "X"
},
{
"field1": "a",
"field2": "X"
}
]
- sender_file1
[
{
"field1": 123,
"field2": "X"
},
{
"field1": "123",
"field2": "X"
}
]
- sender_file2
[
{
"field1": "B",
"field2": "X"
},
{
"field1": 1234,
"field2": "X"
}
]
- 从上面的例子也可以看出,该规则在进行匹配时,会将非
string
类型的数据,强制转换成string
进行比较。
该规则是指,当 router_key_name
的值包含 router_routes
中的值时,进行路由.
- 例如要发送的数据为:
[
{
"field1": "1234",
"field2": "X"
},
{
"field1": "B",
"field2": "X"
},
{
"field1": 1234,
"field2": "X"
},
{
"field1": 123,
"field2": "X"
},
{
"field1": 1.123,
"field2": "X"
},
{
"field1": "23",
"field2": "X"
},
{
"field1": "abc",
"field2": "X"
},
{
"field1": "a",
"field2": "X"
}
]
- senders 的配置为:
"senders": [
{
"name": "file_sender0",
"sender_type": "file",
"file_send_path": "sender/sender_file0"
},
{
"name": "file_sender0",
"sender_type": "file",
"file_send_path": "sender/sender_file0"
},
{
"name": "file_sender0",
"sender_type": "file",
"file_send_path": "sender/sender_file0"
}
]
- router 的配置为:
"router": {
"router_key_name": "field1",
"router_match_type": "equal",
"router_default_sender": 2,
"router_routes": {
"a": 0,
"123": 1,
}
}
在上述配置下,每个 sender_file
中接收的数据为:
- sender_file0
[
{
"field1": "abc",
"field2": "X"
},
{
"field1": "a",
"field2": "X"
}
]
- sender_file1
[
{
"field1": "1234",
"field2": "X"
},
{
"field1": 1234,
"field2": "X"
},
{
"field1": 1.123,
"field2": "X"
},
{
"field1": 123,
"field2": "X"
}
]
- sender_file2
[
{
"field1": "B",
"field2": "X"
},
{
"field1": "23",
"field2": "X"
}
]
- 从上面的例子也可以看出,该规则在进行匹配时,会将非
string
类型的数据,强制转换成string
进行比较。
- 与之前的配置的兼容性: 当配置文件中没有
router
项时,依然保持之前的处理逻辑,即每个sender
都会发送所有的数据; - 当
router_key_name
的值为空字符串时, 相当于router
功能没有启用; - 当
router
功能启用,且发送的数据中没有router_key_name
这个字段时,数据会从router_default_sender
指定的sender
发送; - 目前
sender router
仅支持匹配string
类型的数据,非string
的数据会尝试转化为string
类型的数据,然后进行路由匹配; -
router_key_name
只能选择采集的日志中的字段,不能选择logkit
自动添加的字段,包括但不限于logkit_send_time
、osinfo
、core
等; -
router
功能只适用于日志收集器
而不适用于系统信息收集器
;
快速开始 | Pandora | Readers | Parsers | Senders | Download | 七牛智能日志管理平台 | logkit-pro专业版