Featured image of post 为DomJudge添加OpenTelemetry监控

为DomJudge添加OpenTelemetry监控

为DomJudge添加OpenTelemetry可观测监控

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

为PHP配置OpenTelemetry组件

首先安装需要的依赖库

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

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

1
2
3
4
5
6
7
8
[opentelemetry]
extension=opentelemetry.so
OTEL_PHP_AUTOLOAD_ENABLED="true"
OTEL_SERVICE_NAME=your-service-name
OTEL_TRACES_EXPORTER=otlp
OTEL_EXPORTER_OTLP_PROTOCOL=http/protobuf
OTEL_EXPORTER_OTLP_ENDPOINT="https://otlp.uptrace.dev"
OTEL_EXPORTER_OTLP_HEADERS="uptrace-dsn=https://<token>@api.uptrace.dev?grpc=4317"

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

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

安装对应的composer包

接下来导航到解压后的DomJudge release包下,然后添加instrument-installer,注意要–no-scripts因为默认会加载数据库相关的程序,我们不需要那些

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

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

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

1
2
3
4
5
6
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参数

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

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

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

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

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

1
composer update open-telemetry/* -vvv --no-interaction --no-scripts
1
sudo ./lib/vendor/bin/install-otel-instrumentation advanced
  • 对于http-provider建议选择symfony/http-client
  • 其他的必选项建议都使用stable的而不要使用dev的
  • 接下来会询问是否安装open-telemetry/opentelemetry-auto-symfony,选择是
  • pdo的部分需要php版本高于8.2才可以
  • laravel,wordpress,slim这些都不需要

非全新安装添加

如果并非是全新安装的话,需要进行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
Licensed under CC BY-NC-SA 4.0
使用 Hugo 构建
主题 StackJimmy 设计