diff --git a/CHANGELOG.md b/CHANGELOG.md index 8aabeec67a..7603b319d0 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -21,6 +21,8 @@ release. ([#869](https://github.com/open-telemetry/opentelemetry-demo/pull/869)) * [grafana] fix demo dashboard to be compatible with spanmetrics connector ([#874](https://github.com/open-telemetry/opentelemetry-demo/pull/874)) +* [quoteservice] enabling batch span processor metrics + ([#878](https://github.com/open-telemetry/opentelemetry-demo/pull/878)) * [kafka] remove KRaft mode support workarounds ([#880](https://github.com/open-telemetry/opentelemetry-demo/pull/880)) diff --git a/src/grafana/provisioning/dashboards/general/demo-dashboard.json b/src/grafana/provisioning/dashboards/general/demo-dashboard.json index ba021e62aa..ace199bc84 100644 --- a/src/grafana/provisioning/dashboards/general/demo-dashboard.json +++ b/src/grafana/provisioning/dashboards/general/demo-dashboard.json @@ -647,9 +647,103 @@ ], "title": "Endpoint Rate by Service", "type": "timeseries" + }, + { + "datasource": { + "type": "prometheus", + "uid": "webstore-metrics" + }, + "fieldConfig": { + "defaults": { + "color": { + "mode": "palette-classic" + }, + "custom": { + "axisCenteredZero": false, + "axisColorMode": "text", + "axisLabel": "", + "axisPlacement": "auto", + "barAlignment": 0, + "drawStyle": "line", + "fillOpacity": 0, + "gradientMode": "none", + "hideFrom": { + "legend": false, + "tooltip": false, + "viz": false + }, + "lineInterpolation": "linear", + "lineWidth": 1, + "pointSize": 5, + "scaleDistribution": { + "type": "linear" + }, + "showPoints": "auto", + "spanNulls": false, + "stacking": { + "group": "A", + "mode": "none" + }, + "thresholdsStyle": { + "mode": "off" + } + }, + "mappings": [], + "thresholds": { + "mode": "absolute", + "steps": [ + { + "color": "green", + "value": null + }, + { + "color": "red", + "value": 80 + } + ] + } + }, + "overrides": [] + }, + "gridPos": { + "h": 8, + "w": 12, + "x": 0, + "y": 25 + }, + "id": 16, + "options": { + "legend": { + "calcs": [], + "displayMode": "list", + "placement": "bottom", + "showLegend": true + }, + "tooltip": { + "mode": "single", + "sort": "none" + } + }, + "targets": [ + { + "datasource": { + "type": "prometheus", + "uid": "webstore-metrics" + }, + "editorMode": "builder", + "expr": "otel_trace_span_processor_spans{service_name=\"quoteservice\"}", + "legendFormat": "{{state}}", + "range": true, + "refId": "A" + } + ], + "title": "Quote Service batch span processor", + "type": "timeseries" } ], - "schemaVersion": 37, + "refresh": "", + "revision": 1, + "schemaVersion": 38, "style": "dark", "tags": [], "templating": { @@ -691,6 +785,6 @@ "timezone": "", "title": "Demo Dashboard", "uid": "W2gX2zHVk", - "version": 1, + "version": 2, "weekStart": "" -} +} \ No newline at end of file diff --git a/src/quoteservice/Dockerfile b/src/quoteservice/Dockerfile index a1ed3a1654..2b56d59089 100644 --- a/src/quoteservice/Dockerfile +++ b/src/quoteservice/Dockerfile @@ -23,7 +23,7 @@ RUN chmod +x /usr/local/bin/install-php-extensions \ opcache \ pcntl \ protobuf \ - opentelemetry-1.0.0beta3 + opentelemetry-beta WORKDIR /var/www COPY --from=build /tmp/vendor/ ./vendor/ diff --git a/src/quoteservice/composer.json b/src/quoteservice/composer.json index bac9685d7d..247b74de9d 100644 --- a/src/quoteservice/composer.json +++ b/src/quoteservice/composer.json @@ -6,18 +6,19 @@ "require": { "php": ">= 8.2", "ext-json": "*", + "ext-pcntl": "*", "monolog/monolog": "3.3.1", - "open-telemetry/api": "1.0.0beta5", - "open-telemetry/sdk": "1.0.0beta6", - "open-telemetry/exporter-otlp": "1.0.0beta5", + "open-telemetry/api": "1.0.0beta9", + "open-telemetry/sdk": "1.0.0beta9", + "open-telemetry/exporter-otlp": "1.0.0beta8", "open-telemetry/opentelemetry-auto-slim": "1.0.0beta7", - "guzzlehttp/guzzle": "7.4.5", - "php-di/php-di": "6.4.0", - "php-di/slim-bridge": "3.2.0", + "guzzlehttp/guzzle": "7.5.1", + "php-di/php-di": "7.0.2", + "php-di/slim-bridge": "3.3.0", "php-http/guzzle7-adapter": "1.0.0", - "react/http": "v1.8.0", - "slim/psr7": "1.5", - "slim/slim": "4.10.0" + "react/http": "v1.9.0", + "slim/psr7": "1.6.1", + "slim/slim": "4.11.0" }, "autoload": { "psr-4": { diff --git a/src/quoteservice/public/index.php b/src/quoteservice/public/index.php index 071b648db6..6030b9e40a 100644 --- a/src/quoteservice/public/index.php +++ b/src/quoteservice/public/index.php @@ -10,7 +10,12 @@ use DI\ContainerBuilder; use Monolog\Handler\StreamHandler; use Monolog\Logger; +use OpenTelemetry\API\Common\Instrumentation\Globals; use OpenTelemetry\API\Common\Log\LoggerHolder; +use OpenTelemetry\SDK\Common\Configuration\Configuration; +use OpenTelemetry\SDK\Common\Configuration\Variables; +use OpenTelemetry\SDK\Metrics\MeterProviderInterface; +use OpenTelemetry\SDK\Trace\TracerProviderInterface; use Psr\Http\Message\ServerRequestInterface; use Psr\Log\LogLevel; use React\EventLoop\Loop; @@ -58,6 +63,18 @@ exit; }); +/* workaround for non-async batch processors */ +if (($tracerProvider = Globals::tracerProvider()) instanceof TracerProviderInterface) { + Loop::addPeriodicTimer(Configuration::getInt(Variables::OTEL_BSP_SCHEDULE_DELAY)/1000, function() use ($tracerProvider) { + $tracerProvider->forceFlush(); + }); +} +if (($meterProvider = Globals::meterProvider()) instanceof MeterProviderInterface) { + Loop::addPeriodicTimer(Configuration::getInt(Variables::OTEL_METRIC_EXPORT_INTERVAL)/1000, function() use ($meterProvider) { + $meterProvider->forceFlush(); + }); +} + $server = new HttpServer(function (ServerRequestInterface $request) use ($app) { $response = $app->handle($request); echo sprintf('[%s] "%s %s HTTP/%s" %d %d %s',