Как отправить сообщение об ошибке в Graylog из приложения Symfony внутри кластера KubernetesPhp

Кемеровские программисты php общаются здесь
Ответить Пред. темаСлед. тема
Гость
 Как отправить сообщение об ошибке в Graylog из приложения Symfony внутри кластера Kubernetes

Сообщение Гость »


Пара докер-контейнеров, работающих внутри кластера Kubernetes:

PHP Нгинкс MySQL Редис Существует экземпляр Graylog (версия 3), который прослушивает stdout и stderr из этих контейнеров.

В PHP-контейнере находится приложение Symfony, которое использует Monolog для регистрации ошибок, информации, предупреждений, уведомлений и многого другого. Monolog обычно регистрируется в файле, определенном в /config/packages/prod/monolog.yaml, например:

монолог: обработчики: основной: тип: скрещенные пальцы уровень_действия: ошибка обработчик: вложенный исключенные_http_codes: [404, 405] вложенный: тип: вращающийся_файл путь: "%kernel.logs_dir%/%kernel.environment%.log" # info('Это информационный журнал'); return new Response('Проверьте логи!'); } } для записи журналов в stdout или stderr. Но в стандартный вывод ничего не выводится.

Мои (лучшие) попытки:
Консоль
: тип: консоль process_psr_3_messages: ложь каналы: ['!event', '!doctrine', '!console'] syslog_handler: тип: системный журнал уровень: отладка Попытка решения 2: просто используйте error_log() Функция error_log('my message') выполняет вывод на консоль. Ура! Однако мне кажется глупым, что у меня есть такая огромная библиотека журналов (Monolog), хотя в конце концов я все равно просто использую error_log().

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

Другая часть этого заключается в том, что это пример моего вывода, когда я использую error_log():

имя_проекта-php-1 | ВНИМАНИЕ. Сообщение PHP: ZZZ ErrorLogStatement: Error.log(). имя проекта-nginx-1 | 2023/09/22 12:56:17 [ошибка] 10#10: *20 FastCGI отправлено в stderr: «Сообщение PHP: ZZZ ErrorLogStatement: Error.log()» при чтении заголовка ответа из восходящего потока, клиент: 172.20.0.1, сервер: symfony.local, запрос: «GET /my-custom-endpoint?test_case=all_logs HTTP/1.1», восходящий поток: «fastcgi://172.20.0.5:9000», хост: «127.0.0.1:8200» имя проекта-nginx-1 | 172.20.0.1 - - [22/сен/2023:12:56:17 +0000] "GET /my-custom-endpoint?test_case=all_logs HTTP/1.1" 200 35 "-" "PostmanRuntime/7.32.3" "- " имя проекта-php-1 | 172.20.0.6 — 22 сентября 2023 г.:12:56:02 +0000 «GET /index.php» 200 Это означает, что и мой Nginx-контейнер, и мой PHP-контейнер выдают ошибку, которая добавляет много избыточных строк в мой Graylog. Я могу фильтровать это, но все же! Это грязно.
Попытка решения 3: «Связать» мой журнал ошибок с stdout
Я нашел это предложение здесь: заставить приложение Docker писать в стандартный вывод.

Это значит «связать» вращающийся файл журнала ошибок с stdout (а затем, возможно, удалить ротацию этого файла).

Итак, я попытался запустить это:

ln -sf /dev/stdout /var/www/docroot/var/log/my-log-file.log Но я столкнулся с этой ошибкой:

Поток или файл: «/var/www/docroot/var/log/prod-2023-09-22.log» не удалось открыть в режиме добавления: не удалось открыть поток: такого файла или каталога нет.< /п> И даже если бы это сработало... Это кажется хакерским и неправильным подходом. Поэтому я перестал пытаться заставить это работать.
Попытка решения 4. Отправка ошибок из Monolog в Graylog через его API
Это было бы идеальное решение. Я просто надеялся на более простое решение.
Но это то, чем я сейчас занимаюсь.
Реклама
Ответить Пред. темаСлед. тема

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

  • Похожие темы
    Ответы
    Просмотры
    Последнее сообщение

Вернуться в «Php»