Add observatory doc. (#509)
* Add observatory doc. * Modify docs. --------- Co-authored-by: nobody <nobody@nowhere.mars>pull/511/head
							parent
							
								
									1bd1e18a9e
								
							
						
					
					
						commit
						ac2415ffce
					
				| 
						 | 
				
			
			@ -28,6 +28,7 @@ export const sidebarZh: SidebarConfig = {
 | 
			
		|||
        '/config/stats.md',
 | 
			
		||||
        '/config/transport.md',
 | 
			
		||||
        '/config/metrics.md',
 | 
			
		||||
        '/config/observatory.md',
 | 
			
		||||
      ],
 | 
			
		||||
    },
 | 
			
		||||
    {
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -23,7 +23,9 @@ Xray 的配置文件为 json 格式, 客户端和服务端的配置格式没有
 | 
			
		|||
  "stats": {},
 | 
			
		||||
  "reverse": {},
 | 
			
		||||
  "fakedns": {},
 | 
			
		||||
  "metrics": {}
 | 
			
		||||
  "metrics": {},
 | 
			
		||||
  "observatory": {},
 | 
			
		||||
  "burstObservatory": {}
 | 
			
		||||
}
 | 
			
		||||
```
 | 
			
		||||
 | 
			
		||||
| 
						 | 
				
			
			@ -80,3 +82,11 @@ FakeDNS 配置。可配合透明代理使用,以获取实际域名。
 | 
			
		|||
> metrics: [metricsObject](./metrics.md)
 | 
			
		||||
 | 
			
		||||
metrics 配置。更直接(希望更好)的统计导出方式。
 | 
			
		||||
 | 
			
		||||
> observatory: [ObservatoryObject](./observatory.md#observatoryobject)
 | 
			
		||||
 | 
			
		||||
后台连接观测。探测出站代理的连接状态。
 | 
			
		||||
 | 
			
		||||
> burstObservatory: [BurstObservatoryObject](./observatory.md#burstobservatoryobject)
 | 
			
		||||
 | 
			
		||||
并发连接观测。探测出站代理的连接状态。
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -0,0 +1,80 @@
 | 
			
		|||
# 连接观测
 | 
			
		||||
 | 
			
		||||
连接观测组件使用 HTTPing 的方式探测出站代理的连接状态。观测结果可以被其他组件使用,如负载均衡器。目前有 [observatory](#observatoryobject) (后台连接观测)和 [burstObservatory](#burstobservatoryobject) (并发连接观测)两种。按需选择其中之一就行。
 | 
			
		||||
 | 
			
		||||
## ObservatoryObject
 | 
			
		||||
```json
 | 
			
		||||
{
 | 
			
		||||
  "subjectSelector":[
 | 
			
		||||
    "outbound"
 | 
			
		||||
  ],
 | 
			
		||||
  "probeUrl": "https://www.google.com/generate_204",
 | 
			
		||||
  "probeInterval": "10s",
 | 
			
		||||
  "enableConcurrency": false
 | 
			
		||||
}
 | 
			
		||||
```
 | 
			
		||||
 | 
			
		||||
> `subjectSelector`: \[ string \]
 | 
			
		||||
 | 
			
		||||
一个字符串数组,其中每一个字符串将用于和出站代理标识的前缀匹配。在以下几个出站代理标识中:`[ "a", "ab", "c", "ba" ]`,`"subjectSelector": ["a"]` 将匹配到 `[ "a", "ab" ]`。
 | 
			
		||||
 | 
			
		||||
> `probeUrl`: string
 | 
			
		||||
 | 
			
		||||
用于探测出站代理连接状态的网址。
 | 
			
		||||
 | 
			
		||||
> `probeInterval`: string
 | 
			
		||||
 | 
			
		||||
发起探测的间隔。时间格式为数字 + 单位,比如 `"10s"`, `"2h45m"`,支持的时间单位有 `ns`, `us`, `ms`, `s`, `m`, `h`, 分别对应纳秒、微秒、毫秒、秒、分、时。
 | 
			
		||||
 | 
			
		||||
> `enableConcurrency`: true | false
 | 
			
		||||
 | 
			
		||||
- `true` 并发探测全部匹配的出站代理,全部完成后暂停 `probeInterval` 设定的时间。
 | 
			
		||||
- `false` 逐个探测匹配的出站代理,每探测一个出站代理后暂停 `probeInterval` 设定的时间。
 | 
			
		||||
 | 
			
		||||
## BurstObservatoryObject
 | 
			
		||||
```json
 | 
			
		||||
{
 | 
			
		||||
  "subjectSelector":[
 | 
			
		||||
    "outbound"
 | 
			
		||||
  ],
 | 
			
		||||
  "pingConfig": {}
 | 
			
		||||
}
 | 
			
		||||
```
 | 
			
		||||
 | 
			
		||||
> `subjectSelector`: \[ string \]
 | 
			
		||||
 | 
			
		||||
一个字符串数组,其中每一个字符串将用于和出站代理标识的前缀匹配。在以下几个出站代理标识中:`[ "a", "ab", "c", "ba" ]`,`"subjectSelector": ["a"]` 将匹配到 `[ "a", "ab" ]`。
 | 
			
		||||
 | 
			
		||||
> `pingConfig`: [PingConfigObject](#PingConfigObject)
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
### PingConfigObject
 | 
			
		||||
```json
 | 
			
		||||
{
 | 
			
		||||
  "destination": "https://connectivitycheck.gstatic.com/generate_204",
 | 
			
		||||
  "connectivity": "",
 | 
			
		||||
  "interval": "1h",
 | 
			
		||||
  "sampling": 3,
 | 
			
		||||
  "timeout": "30s"
 | 
			
		||||
}
 | 
			
		||||
```
 | 
			
		||||
 | 
			
		||||
> `destination`: string
 | 
			
		||||
 | 
			
		||||
用于探测出站代理连接状态的网址。这个网址应该返回 HTTP 204 成功状态码。
 | 
			
		||||
 | 
			
		||||
> `connectivity`: string
 | 
			
		||||
 | 
			
		||||
用于检测本地网络连通性的网址。空字符串表示不检测本地网络连通性。
 | 
			
		||||
 | 
			
		||||
> `interval`: string
 | 
			
		||||
 | 
			
		||||
在指定时间内探测全部匹配的出站代理,每个出站代理探测 sampling + 1 次。时间格式为数字 + 单位,比如 `"10s"`, `"2h45m"`,支持的时间单位有 `ns`, `us`, `ms`, `s`, `m`, `h`, 分别对应纳秒、微秒、毫秒、秒、分、时。
 | 
			
		||||
 | 
			
		||||
> `sampling`: number
 | 
			
		||||
 | 
			
		||||
保留最近探测结果的数量。
 | 
			
		||||
 | 
			
		||||
> `timeout`: string
 | 
			
		||||
 | 
			
		||||
探测超时时间。格式和上面的 `interval` 相同。
 | 
			
		||||
| 
						 | 
				
			
			@ -192,9 +192,8 @@ Xray-core v1.8.7 或更高版本可省略该行。
 | 
			
		|||
{
 | 
			
		||||
  "tag": "balancer",
 | 
			
		||||
  "selector": [],
 | 
			
		||||
  "strategy": {
 | 
			
		||||
   "type":"roundRobin"
 | 
			
		||||
  }
 | 
			
		||||
  "fallbackTag": "outbound",
 | 
			
		||||
  "strategy": {}
 | 
			
		||||
}
 | 
			
		||||
```
 | 
			
		||||
 | 
			
		||||
| 
						 | 
				
			
			@ -208,11 +207,32 @@ Xray-core v1.8.7 或更高版本可省略该行。
 | 
			
		|||
 | 
			
		||||
如果匹配到多个 outbound,负载均衡器目前会从中随机选出一个作为最终的 outbound。
 | 
			
		||||
 | 
			
		||||
> `strategy`: \[ string \]
 | 
			
		||||
> `fallbackTag`: string
 | 
			
		||||
 | 
			
		||||
`"type":"roundRobin"` 表示按顺序选择匹配到的 outbounds tag,若不写 `"strategy"` 字段表示随机选择匹配到的 outbounds tag。
 | 
			
		||||
如果负载均衡器无法选出合适的 outbound,则使用这个配置项指定的 outbound。
 | 
			
		||||
 | 
			
		||||
配置示例:
 | 
			
		||||
> `strategy`: [StrategyObject](#strategyobject)
 | 
			
		||||
 | 
			
		||||
#### StrategyObject
 | 
			
		||||
```json
 | 
			
		||||
{
 | 
			
		||||
    "type": "roundRobin",
 | 
			
		||||
    "settings": {}
 | 
			
		||||
}
 | 
			
		||||
```
 | 
			
		||||
> `type` : "random" | "roundRobin" | "leastPing" | "leastLoad"
 | 
			
		||||
 | 
			
		||||
- `random` 默认值。随机选择匹配到的出站代理。
 | 
			
		||||
- `roundRobin` 按顺序选择匹配到的出站代理。
 | 
			
		||||
- `leastPing` 根据连接观测结果选择延迟最小的匹配到的出站代理。需要添加 [observatory](./observatory.md#observatoryobject) 配置项。
 | 
			
		||||
- `leastLoad` 根据连接观测结果选择最稳定的出站代理。需要添加 [burstObservatory](./observatory.md#burstobservatoryobject) 配置项。
 | 
			
		||||
 | 
			
		||||
> `settings`: [StrategySettingsObject](#strategysettingsobject)
 | 
			
		||||
 | 
			
		||||
##### StrategySettingsObject
 | 
			
		||||
这是一个可选配置项,不同负载均衡策略的配置格式有所不同。目前只有 `leastLoad` 负载均衡策略可以添加这个配置项。
 | 
			
		||||
 | 
			
		||||
### 负载均衡配置示例
 | 
			
		||||
 | 
			
		||||
```json
 | 
			
		||||
    "routing": {
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
		Loading…
	
		Reference in New Issue