11 KiB
Метрики
Данное руководство описывает более простой и эффективный способ настройки экспорта статистических данных для Marzban. Использование метрик позволяет администраторам системы отслеживать производительность и состояние сети, а также быстро выявлять и решать возникающие проблемы.
Связанные настройки
Добавление входящего подключения metrics
Для настройки экспорта метрик необходимо добавить входящее подключение metrics
в раздел inbounds
конфигурационного файла. Это подключение будет слушать на локальном интерфейсе и порту, что обеспечит безопасность доступа к метрикам.
"inbounds": [
{
"listen": "127.0.0.1",
"port": 11111,
"protocol": "dokodemo-door",
"settings": {
"address": "127.0.0.1"
},
"tag": "metrics_in"
}
]
Добавление правила маршрутизации
Для правильной маршрутизации трафика, поступающего на входящее подключение metrics
, необходимо добавить правило маршрутизации в раздел routing
. Это правило направит трафик, поступающий на тег metrics_in
, на тег metrics_out
.
"routing": {
"rules": [
{
"type": "field",
"inboundTag": [
"metrics_in"
],
"outboundTag": "metrics_out"
}
]
}
Добавление метрик в основные настройки
Для активации метрик необходимо добавить раздел metrics
в основные настройки конфигурационного файла. Это позволит системе собирать и экспортировать метрики.
"metrics": {
"tag": "metrics_out"
}
Использование
pprof
Для профилирования и просмотра запущенных горутин можно использовать встроенный инструмент pprof
. Откройте браузер и перейдите по адресу http://127.0.0.1:11111/debug/pprof/
или используйте утилиту go tool pprof
для более детального анализа.
expvars
Для просмотра текущих метрик и состояния системы можно использовать экспортные переменные (expvars
). Откройте браузер и перейдите по адресу http://127.0.0.1:11111/debug/vars
.
Экспортируемые переменные включают:
stats
— статистика по входящим, исходящим подключениям и пользователям.observatory
— результаты мониторинга.
Пример данных, полученных с помощью luci-app-xray:
Показать
{
"observatory": {
"tcp_outbound": {
"alive": true,
"delay": 782,
"outbound_tag": "tcp_outbound",
"last_seen_time": 1648477189,
"last_try_time": 1648477189
},
"udp_outbound": {
"alive": true,
"delay": 779,
"outbound_tag": "udp_outbound",
"last_seen_time": 1648477191,
"last_try_time": 1648477191
}
},
"stats": {
"inbound": {
"api": {
"downlink": 0,
"uplink": 0
},
"dns_server_inbound_5300": {
"downlink": 14286,
"uplink": 5857
},
"http_inbound": {
"downlink": 74460,
"uplink": 10231
},
"https_inbound": {
"downlink": 0,
"uplink": 0
},
"metrics": {
"downlink": 6327,
"uplink": 1347
},
"socks_inbound": {
"downlink": 19925615,
"uplink": 5512
},
"tproxy_tcp_inbound": {
"downlink": 4739161,
"uplink": 1568869
},
"tproxy_udp_inbound": {
"downlink": 0,
"uplink": 2608142
}
},
"outbound": {
"blackhole_outbound": {
"downlink": 0,
"uplink": 0
},
"direct": {
"downlink": 97714548,
"uplink": 3234617
},
"dns_server_outbound": {
"downlink": 7116,
"uplink": 2229
},
"manual_tproxy_outbound_tcp_1": {
"downlink": 0,
"uplink": 0
},
"manual_tproxy_outbound_udp_1": {
"downlink": 0,
"uplink": 0
},
"tcp_outbound": {
"downlink": 23873238,
"uplink": 1049595
},
"udp_outbound": {
"downlink": 639282,
"uplink": 74634
}
},
"user": {}
}
}
Визуализация данных с помощью Netdata
Для лучшей визуализации данных и мониторинга можно использовать систему мониторинга Netdata с плагином python.d. Netdata предоставляет интерактивные графики, которые облегчают анализ и отслеживание метрик.
-
Отредактируйте соответствующий файл конфигурации Netdata:
sudo /etc/netdata/edit-config python.d/go_expvar.conf
-
Используйте следующий файл конфигурации в качестве примера:
Показать
xray:
name: 'xray'
update_every: 2
url: 'http://127.0.0.1:11111/debug/vars'
collect_memstats: false
extra_charts:
- id: 'inbounds'
options:
name: 'inbounds'
title: 'Xray System Inbounds'
units: bytes
family: xray
context: xray.inbounds
chart_type: line
lines:
- expvar_key: stats.inbound.tproxy_tcp_inbound.downlink
id: 'tcp.downlink'
algorithm: incremental
expvar_type: int
- expvar_key: stats.inbound.tproxy_udp_inbound.downlink
id: 'udp.downlink'
algorithm: incremental
expvar_type: int
- expvar_key: stats.inbound.http_inbound.downlink
id: 'http.downlink'
algorithm: incremental
expvar_type: int
- expvar_key: stats.inbound.https_inbound.downlink
id: 'https.downlink'
algorithm: incremental
expvar_type: int
- expvar_key: stats.inbound.socks_inbound.downlink
id: 'socks.downlink'
algorithm: incremental
expvar_type: int
- expvar_key: stats.inbound.tproxy_tcp_inbound.uplink
id: 'tcp.uplink'
algorithm: incremental
expvar_type: int
- expvar_key: stats.inbound.tproxy_udp_inbound.uplink
id: 'udp.uplink'
algorithm: incremental
expvar_type: int
- expvar_key: stats.inbound.http_inbound.uplink
id: 'http.uplink'
algorithm: incremental
expvar_type: int
- expvar_key: stats.inbound.https_inbound.uplink
id: 'https.uplink'
algorithm: incremental
expvar_type: int
- expvar_key: stats.inbound.socks_inbound.uplink
id: 'socks.uplink'
algorithm: incremental
expvar_type: int
- id: 'outbounds'
options:
name: 'outbounds'
title: 'Xray System Outbounds'
units: bytes
family: xray
context: xray.outbounds
chart_type: line
lines:
- expvar_key: stats.outbound.tcp_outbound.downlink
id: 'tcp.downlink'
algorithm: incremental
expvar_type: int
- expvar_key: stats.outbound.udp_outbound.downlink
id: 'udp.downlink'
algorithm: incremental
expvar_type: int
- expvar_key: stats.outbound.direct.downlink
id: 'direct.downlink'
algorithm: incremental
expvar_type: int
- expvar_key: stats.outbound.tcp_outbound.uplink
id: 'tcp.uplink'
algorithm: incremental
expvar_type: int
- expvar_key: stats.outbound.udp_outbound.uplink
id: 'udp.uplink'
algorithm: incremental
expvar_type: int
- expvar_key: stats.outbound.direct.uplink
id: 'direct.uplink'
algorithm: incremental
expvar_type: int
- id: 'observatory'
options:
name: 'observatory'
title: 'Xray Observatory Metrics'
units: milliseconds
family: xray
context: xray.observatory
chart_type: line
lines:
- expvar_key: observatory.tcp_outbound.delay
id: tcp
expvar_type: int
- expvar_key: observatory.udp_outbound.delay
id: udp
expvar_type: int
Таким образом вы получите красивый график, подобный этому:
Дополнительные сведения
Возможно, что для некоторых сценариев лучше использовать пустой объект stats
в конфигурационном файле, чем добавлять metrics
. Это может упростить конфигурацию и сделать ее более безопасной, так как пустой объект stats
не требует отдельного входящего подключения и правила маршрутизации.