Nginx — модуль журнала потока не полностью указывает на север
Nginx — модуль журнала потока не полностью указывает на север

Pre

Nginx — логирование по времени в потоковом модуле ngx_stream_log_module


Официальный сайт

https://nginx.org/en/docs/stream/ngx_stream_log_module.html

Вставьте сюда описание изображения
Вставьте сюда описание изображения

Основные функции модуля Nginx Stream

Nginx представил модуль Stream начиная с версии 1.9.0, который поддерживает функцию обратного прокси-сервера TCP/UDP. Модуль Stream позволяет Nginx обрабатывать трафик, связанный с протоколами TCP и UDP, и подходит для таких сценариев, как прокси-сервер электронной почты и прокси-сервер базы данных. Начиная с версии 1.11.4, в Nginx также добавлена ​​поддержка журналов сеансов Stream, предоставляющих базовую статистику соединений.

Дефекты в журналах доступа Nginx Stream

  1. Задержка регистрации
    • вопрос:Nginxбудет обновлено в конце сеансабревнозаписано вбревнов файле。Это означает, что для соединений, которые остаются открытыми в течение длительного времени(Например, некоторые приложения постоянного подключения.),Бревно запись будет иметь значительные задержки.
    • Влияние:Эта задержка может затруднить мониторинг в реальном времени и своевременное устранение неполадок.。
  2. Ограниченная информация журнала
    • вопрос:Streamсессиябревноосновной рекордTCPуровень информации,Включает продолжительность сеанса, количество отправленных и полученных байтов и т. д. бревно не содержит конкретного содержимого передачи данных прикладного уровня.
    • Влияние:Невозможно пройтиStreamбревно Получение конкретной информации об операциях прикладного уровня.,Этого недостаточно для некоторых сценариев, требующих подробного протоколирования каждого запроса и ответа (например, HTTP-бревно).
  3. Отсутствие внутренних журналов отправки
    • вопрос:Streamсессиябревно Нет Записыватьсессиявнутреннийиз Передача конкретного пакета данных,Например, данные пульса отправляются несколько раз после установления соединения через сокет.
    • Влияние:В этом случае,Подробные записи операций могут быть реализованы только на уровне приложения.,Повышенная сложность реализации и нагрузка на систему.

решение или альтернатива

  1. Улучшение механизма журналирования
    • Регулярные записи:Ввести промежуточное состояниебревно Механизм регистрации,Периодически записывает состояние сеанса в бревно-файл.,Уменьшена задержка при бревной записи.
    • Уточнить содержимое журнала:где это возможно,Добавлена ​​поддержка протоколов прикладного уровня (таких как HTTP, FTP и т. д.).,Запишите более подробную информацию.
  2. В сочетании с журналами уровня приложения
    • Журналы уровня приложения:Внедрение детальнойбревно Записывать。Например,В приложении Веб-сервера,Подробные HTTP-запросы и ответы можно регистрировать в приложении за прокси-сервером Nginx.
    • Агрегация журналов:Используйте централизованныйбревно Инструменты управления(нравитьсяELK Stack, Splunk и т. д.) агрегируют и анализируют бревно с разных уровней, обеспечивая полный спектр бревно-анализа.
  3. Сторонние плагины или инструменты
    • Используйте сторонние плагины:Существуют некоторые сторонние плагины, которые могут улучшитьNginxизбревно Записывать Функция,нравитьсяNginxсторонние модулиnginx-log-enhancement
    • Инструменты мониторинга сети:Используйте специализированныеиз Инструменты мониторинга сети(нравитьсяWireshark, Tcpdump и т. д.) для захвата и анализа TCP/UDP-трафика вы можете получить лучшие результаты, чем Nginx. Streamбревно для получения более подробной информации.

Установите и настройте модуль nginx-log-enhancement.

1. Загрузите исходный код модуля nginx-log-enhancement.

Вы можете найти последнюю версию исходного кода на странице GitHub nginx-log-enhancement. Вы можете использовать инструмент git или загрузить zip-файл напрямую.

2. Разархивируйте исходный код

Если вы загрузили zip-файл, разархивируйте его в любой каталог.

3. Настройте исходный код Nginx.

Перед компиляцией Nginx вам необходимо включить модуль nginx-log-enhancement в параметры компиляции Nginx.

Язык кода:javascript
копировать
cd /path/to/nginx/source
./configure --add-module=/path/to/nginx-log-enhancement

4. Скомпилируйте и установите Nginx.

Выполните команды make и make install, чтобы скомпилировать и установить Nginx.

Язык кода:javascript
копировать
make
sudo make install

5. Настройте модуль улучшения журнала nginx.

Добавьте формат журнала и ведение журнала в файле конфигурации Nginx.

Язык кода:javascript
копировать
http {
    log_format enhanced '$remote_addr - $remote_user [$time_local] '
                        '"$request" $status $body_bytes_sent '
                        '"$http_referer" "$http_user_agent" '
                        '"$upstream_addr" "$upstream_response_time"';

    access_log /var/log/nginx/access.log enhanced;
}

В этом примере мы используем расширенный формат log_format и используем его с директивой access_log.

6. Перезапустите Nginx.

После завершения настройки перезагрузите или перезапустите сервер Nginx.

Язык кода:javascript
копировать
sudo systemctl reload nginx

7. Тест

Посетите свой сайт с помощью Curl или браузера,тогда проверьNginxбревнодокумент(В этом примере это/var/log/nginx/access.log),Убедитесь, что вы начали регистрировать расширенную краткую информацию.

С помощью этих шагов вы можете Установить и настройте модуль nginx-log-enhancement. и улучшить функцию ведения журналов Nginx. Не забудьте сделать резервную копию перед развертыванием и применить Конфигурацию к производственной среде после прохождения теста.


Настройте разные выходные данные журнала для разных портов

Формат журнала необходимо настроить в теге потока, который находится на том же уровне, что и тег сервера.

Язык кода:javascript
копировать
stream {
    log_format proxy '$remote_addr [$time_local] '
                 '$protocol $status $bytes_sent $bytes_received '
                 '$session_time "$upstream_addr" '
                 '"$upstream_bytes_sent" "$upstream_bytes_received" "$upstream_connect_time"';
}

Настройте разные выходные данные журнала для разных портов

Эта конфигурация Nginx определяет два серверных блока, прослушивающих порты 9100 и 9200 соответственно.

первый серверный блок
Язык кода:javascript
копировать
server {
    listen 9100 ssl;
    access_log /opt/nginx-1.24.0/logs/tcp-ssl-access.log proxy;
    ssl_certificate   /opt/nginx-1.24.0/conf/cert/server.crt;
    ssl_certificate_key    /opt/nginx-1.24.0/conf/cert/server.key;
    ssl_protocols TLSv1.1 TLSv1.2 TLSv1.3;
    proxy_ssl_session_reuse on; 
    ssl_ciphers EECDH+CHACHA20:EECDH+CHACHA20-draft:EECDH+AES128:RSA+AES128:EECDH+AES256:RSA+AES256:EECDH+3DES:RSA+3DES:!MD5;
    ssl_session_cache shared:SSL:10m;
    ssl_session_timeout 10m;
    proxy_pass redis;
}
  • listen 9100 ssl;:КонфигурацияNginxмонитор9100порт,и включите SSL/TLS.
  • access_log /opt/nginx-1.24.0/logs/tcp-ssl-access.log proxy;:обозначениебревнодокументпуть,Используется для записи посещений бревно,proxy означает бревную запись доступа к прокси-серверу.
  • ssl_certificate /opt/nginx-1.24.0/conf/cert/server.crt;:КонфигурацияSSLСертификатизпуть。
  • ssl_certificate_key /opt/nginx-1.24.0/conf/cert/server.key;:КонфигурацияSSLСертификат私钥изпуть。
  • ssl_protocols TLSv1.1 TLSv1.2 TLSv1.3;:обозначениепозволятьизSSL/TLSВерсия протокола。
  • proxy_ssl_session_reuse on;:Включить проксисерверSSLсессияповторное использование。
  • ssl_ciphers …;:КонфигурацияSSLнабор шифров。
  • ssl_session_cache shared:SSL:10m;:КонфигурацияSSLсессиякэш。
  • ssl_session_timeout 10m;:КонфигурацияSSLсессиятайм-аут。
  • proxy_pass redis;:получитиз Запросы пересылаются наredisсервер。

второй серверный блок
Язык кода:javascript
копировать
server {
    listen 9200;
    access_log /opt/nginx-1.24.0/logs/tcp-access.log proxy;      #бревно Записывать    proxy_connect_timeout 60s;
    proxy_timeout 60s;
    proxy_pass 127.0.0.1:8100;
    ssl_verify_client on;
    ssl_client_certificate /opt/nginx-1.24.0/conf/cert/ca.crt;
    proxy_ssl   on;  
    ssl_certificate   /opt/nginx-1.24.0/conf/cert/server.crt;
    ssl_certificate_key    /opt/nginx-1.24.0/conf/cert/server.key;
    ssl_protocols TLSv1.1 TLSv1.2 TLSv1.3;
}
  • listen 9200;:КонфигурацияNginxмонитор9200порт。
  • access_log /opt/nginx-1.24.0/logs/tcp-access.log proxy;:обозначениебревнодокументпуть,Используется для записи посещений бревно,proxy означает бревную запись доступа к прокси-серверу.
  • proxy_connect_timeout 60s;:Настройка подключения к восходящему каналусерверизтайм-аут。
  • proxy_timeout 60s;:Настройка и подготовкасервер После установления соединения,Таймаут для чтения данных с вышестоящего сервера.
  • proxy_pass 127.0.0.1:8100;:получитиз Запросы пересылаются на本地8100порт。
  • ssl_verify_client on;:давать возможностьSSLПроверка сертификата клиента。
  • ssl_client_certificate /opt/nginx-1.24.0/conf/cert/ca.crt;:Конфигурация用于验证客户端СертификатизCAПуть сертификата。
  • proxy_ssl on;:Включить проксисерверSSL。
  • ssl_certificate /opt/nginx-1.24.0/conf/cert/server.crt;:КонфигурацияSSLСертификатизпуть。
  • ssl_certificate_key /opt/nginx-1.24.0/conf/cert/server.key;:КонфигурацияSSLСертификат私钥изпуть。
  • ssl_protocols TLSv1.1 TLSv1.2 TLSv1.3;:обозначениепозволятьизSSL/TLSВерсия протокола。

Эти два серверных блока настроены таким образом, что Nginx прослушивает разные порты, а конфигурация SSL/TLS, ведение журнала, переадресация прокси-сервера и другие настройки выполняются для разных нужд.

Результат следующий:

Язык кода:javascript
копировать
==> logs/tcp-access.log <==
111.201.222.10 [18/May/2024:02:37:57 +0000] TCP 200 7490 250 22.959 "127.0.0.1:8100" "250" "7490" "0.003"
111.201.222.10 [18/May/2024:02:45:38 +0000] TCP 200 7777 824 434.695 "127.0.0.1:8100" "824" "7777" "0.001"
111.201.222.10 [18/May/2024:02:45:47 +0000] TCP 200 7478 222 5.642 "127.0.0.1:8100" "222" "7478" "0.009"

==> logs/tcp-ssl-access.log <==
127.0.0.1 [18/May/2024:02:37:57 +0000] TCP 200 7490 250 22.958 "127.0.0.1:6379" "250" "7490" "0.000"
127.0.0.1 [18/May/2024:02:45:38 +0000] TCP 200 7777 824 434.650 "127.0.0.1:6379" "824" "7777" "0.000"
127.0.0.1 [18/May/2024:02:45:47 +0000] TCP 200 7478 222 5.642 "127.0.0.1:6379" "222" "7478" "0.000"
boy illustration
Неразрушающее увеличение изображений одним щелчком мыши, чтобы сделать их более четкими артефактами искусственного интеллекта, включая руководства по установке и использованию.
boy illustration
Копикодер: этот инструмент отлично работает с Cursor, Bolt и V0! Предоставьте более качественные подсказки для разработки интерфейса (создание навигационного веб-сайта с использованием искусственного интеллекта).
boy illustration
Новый бесплатный RooCline превосходит Cline v3.1? ! Быстрее, умнее и лучше вилка Cline! (Независимое программирование AI, порог 0)
boy illustration
Разработав более 10 проектов с помощью Cursor, я собрал 10 примеров и 60 подсказок.
boy illustration
Я потратил 72 часа на изучение курсорных агентов, и вот неоспоримые факты, которыми я должен поделиться!
boy illustration
Идеальная интеграция Cursor и DeepSeek API
boy illustration
DeepSeek V3 снижает затраты на обучение больших моделей
boy illustration
Артефакт, увеличивающий количество очков: на основе улучшения характеристик препятствия малым целям Yolov8 (SEAM, MultiSEAM).
boy illustration
DeepSeek V3 раскручивался уже три дня. Сегодня я попробовал самопровозглашенную модель «ChatGPT».
boy illustration
Open Devin — инженер-программист искусственного интеллекта с открытым исходным кодом, который меньше программирует и больше создает.
boy illustration
Эксклюзивное оригинальное улучшение YOLOv8: собственная разработка SPPF | SPPF сочетается с воспринимаемой большой сверткой ядра UniRepLK, а свертка с большим ядром + без расширения улучшает восприимчивое поле
boy illustration
Популярное и подробное объяснение DeepSeek-V3: от его появления до преимуществ и сравнения с GPT-4o.
boy illustration
9 основных словесных инструкций по доработке академических работ с помощью ChatGPT, эффективных и практичных, которые стоит собрать
boy illustration
Вызовите deepseek в vscode для реализации программирования с помощью искусственного интеллекта.
boy illustration
Познакомьтесь с принципами сверточных нейронных сетей (CNN) в одной статье (суперподробно)
boy illustration
50,3 тыс. звезд! Immich: автономное решение для резервного копирования фотографий и видео, которое экономит деньги и избавляет от беспокойства.
boy illustration
Cloud Native|Практика: установка Dashbaord для K8s, графика неплохая
boy illustration
Краткий обзор статьи — использование синтетических данных при обучении больших моделей и оптимизации производительности
boy illustration
MiniPerplx: новая поисковая система искусственного интеллекта с открытым исходным кодом, спонсируемая xAI и Vercel.
boy illustration
Конструкция сервиса Synology Drive сочетает проникновение в интрасеть и синхронизацию папок заметок Obsidian в облаке.
boy illustration
Центр конфигурации————Накос
boy illustration
Начинаем с нуля при разработке в облаке Copilot: начать разработку с минимальным использованием кода стало проще
boy illustration
[Серия Docker] Docker создает мультиплатформенные образы: практика архитектуры Arm64
boy illustration
Обновление новых возможностей coze | Я использовал coze для создания апплета помощника по исправлению домашних заданий по математике
boy illustration
Советы по развертыванию Nginx: практическое создание статических веб-сайтов на облачных серверах
boy illustration
Feiniu fnos использует Docker для развертывания личного блокнота Notepad
boy illustration
Сверточная нейронная сеть VGG реализует классификацию изображений Cifar10 — практический опыт Pytorch
boy illustration
Начало работы с EdgeonePages — новым недорогим решением для хостинга веб-сайтов
boy illustration
[Зона легкого облачного игрового сервера] Управление игровыми архивами
boy illustration
Развертывание SpringCloud-проекта на базе Docker и Docker-Compose