Xray-docs-next/docs/ru/config/metrics.md

11 KiB
Raw Blame History

Метрики

Данное руководство описывает более простой и эффективный способ настройки экспорта статистических данных для 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 предоставляет интерактивные графики, которые облегчают анализ и отслеживание метрик.

  1. Отредактируйте соответствующий файл конфигурации Netdata:

    sudo /etc/netdata/edit-config python.d/go_expvar.conf
    
  2. Используйте следующий файл конфигурации в качестве примера:

Показать
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

Таким образом вы получите красивый график, подобный этому:

160428235-2988bf69-5d6c-41ec-8267-1bd512508aa8

Дополнительные сведения

Возможно, что для некоторых сценариев лучше использовать пустой объект stats в конфигурационном файле, чем добавлять metrics. Это может упростить конфигурацию и сделать ее более безопасной, так как пустой объект stats не требует отдельного входящего подключения и правила маршрутизации.