跳转到正文
403F's Cafe
返回

为DomJudge添加OpenTelemetry监控

为DomJudge添加OpenTelemetry监控 封面图

本文使用UpTrace作为可视化工具,如果使用其他的需要自行调整ENDPOINT等。

为PHP配置OpenTelemetry组件

首先安装需要的依赖库

sudo apt-get install gcc make autoconf php-dev
sudo pecl install opentelemetry

然后修改/etc/php/<version>/fpm/php.ini文件,添加下面的内容

[opentelemetry]
extension=opentelemetry.so

然后在PHP FPM domjudge池的配置文件里添加如下环境变量

env[OTEL_PHP_AUTOLOAD_ENABLED] = "true"
env[OTEL_SERVICE_NAME] = "domjudge-web"
env[OTEL_TRACES_EXPORTER] = "otlp"
env[OTEL_EXPORTER_OTLP_PROTOCOL] = "http/protobuf"
env[OTEL_EXPORTER_OTLP_TRACES_ENDPOINT] = "https://api.uptrace.dev/v1/traces"
env[OTEL_EXPORTER_OTLP_HEADERS] = "uptrace-dsn=https://oYGpL7xyKhFC7dPaYSktbA@api.uptrace.dev"
env[OTEL_LOG_LEVEL] = "debug"
env[OTEL_PHP_LOG_DESTINATION] = "error_log"

检查配置文件是否正确,并重启fpm服务

php-fpm<version> -t
systemctl restart php<version>-fpm

安装对应的composer包

接下来导航到解压后的DomJudge release包下(注意是还没到/opt下的未安装的路径),然后添加instrument-installer,注意要—no-scripts因为默认会加载数据库相关的程序,我们不需要那些

composer require open-telemetry/opentelemetry-instrumentation-installer -vvv --no-scripts

接下来要对lib/vendor/open-telemetry/opentelemetry-instrumentation-installer/installer_internals.php做一些修改

修改github.com的到镜像加速地址,比如

function get_pickle() {
  $content = file_get_contents("https://ghfast.top/github.com/FriendsOfPHP/pickle/releases/latest/download/pickle.phar");
  $fp = fopen('pickle.phar', 'w');
  fwrite($fp, $content);
  fclose($fp);
}

之后按需修改make_advanced_setup中的指令执行,建议是把所有的2>&1都去掉,这样可以避免看不到错误信息,再修改require指令,添加-vvv参数

function make_composer_require_command($package_name, $version, $options) {
  return "composer require {$package_name}{$version} {$options} -vvv";
}

再把composer update指令给去掉,我们可不像搞坏DomJudge的其他依赖

execute_command('composer update --no-interaction', ' ');

之后便可以执行安装了,这里建议使用advanced模式安装,可以自由选择。
注意这里安装的并不全,要想监控数据库数据的话还需要open-telemetry/opentelemetry-auto-doctrine但这个包目前版本要求有问题,我发了PR等等看,后续我会更新的,已修复。

安装完成后我们需要手动更新需要的依赖,注意symfony-client需要手动修版本使其和DomJudge的匹配,不然update过不去。

composer update open-telemetry/* -vvv --no-interaction --no-scripts
sudo ./lib/vendor/bin/install-otel-instrumentation advanced

然后要把webapp以及lib/vendor挪到安装目录下覆盖原始文件

非全新安装添加

如果并非是全新安装的话,需要进行cache清理和相关权限设置,按照如下的步骤

  1. 进入/opt/domjudge/domserver/webapp,然后删除var目录
  2. 接下来重建var并更改所有者mkdir var && chown www-data var
  3. 使用正确的权限进行cache清理和目录重建sudo -u www-data php bin/console cache:clear --env=prod

分享文章:

上一篇
ICPC 西安区域赛 2025 办赛总结&备忘录
下一篇
ICPC 西安邀请赛 2025 办赛总结&备忘录