diff --git a/.github/workflows/build.yml b/.github/workflows/build.yml index 47c37e4..c14bb08 100644 --- a/.github/workflows/build.yml +++ b/.github/workflows/build.yml @@ -28,7 +28,7 @@ jobs: strategy: max-parallel: 4 matrix: - ruby-version: [2.7] + ruby-version: [2.7, 3.2] steps: - name: Checkout uses: actions/checkout@v3 @@ -51,7 +51,7 @@ jobs: runs-on: ubuntu-latest strategy: matrix: - runtime-param: [2.7] + runtime-param: [2.7, 3.2] steps: - name: Checkout @@ -77,6 +77,11 @@ jobs: working-directory: integration_tests run: yarn install + - name: Install Crossbuild dependencies + run: | + sudo apt-get update --allow-releaseinfo-change --fix-missing + sudo apt install -y qemu-user-static binfmt-support + - name: Run tests env: BUILD_LAYERS: true diff --git a/.github/workflows/check-size.yml b/.github/workflows/check-size.yml index c729f71..c4b878d 100644 --- a/.github/workflows/check-size.yml +++ b/.github/workflows/check-size.yml @@ -25,6 +25,11 @@ jobs: if: steps.cache-node-modules.outputs.cache-hit != 'true' run: yarn install + - name: Install Crossbuild dependencies + run: | + sudo apt-get update --allow-releaseinfo-change --fix-missing + sudo apt install -y qemu-user-static binfmt-support + - name: Build Layers run: ./scripts/build_layers.sh diff --git a/Dockerfile b/Dockerfile index 4338f13..9f2b988 100644 --- a/Dockerfile +++ b/Dockerfile @@ -4,11 +4,25 @@ ARG runtime # Install dev dependencies COPY . /var/task/datadog-lambda-ruby WORKDIR /var/task/datadog-lambda-ruby +RUN apt-get update +RUN apt-get install -y gcc zip binutils + +# Install this gem RUN gem build datadog-lambda -RUN gem install datadog-lambda --install-dir "/opt/ruby/gems/${runtime}" -# v0.48 has a bug : https://github.com/DataDog/dd-trace-rb/issues/1475 -RUN gem install ddtrace -v 1.5.0 --install-dir "/opt/ruby/gems/${runtime}" + +# Install ddtrace gem +RUN gem install datadog-lambda --install-dir "/opt/ruby/gems/$runtime" +RUN gem install ddtrace -v 1.11.0 --install-dir "/opt/ruby/gems/$runtime" + +WORKDIR /opt +# Remove native extension debase-ruby_core_source (25MB) runtimes below Ruby 2.6 +RUN rm -rf ./ruby/gems/$runtime/gems/debase-ruby_core_source*/ +# Remove aws-sdk related (2MB), included in runtime +RUN rm -rf ./ruby/gems/$runtime/gems/aws*/ +# Remove binaries not needed in AWS Lambda +RUN rm -rf ./**/*linux-musl/ + # Cache files zipped gem files, that aren't used by during runtime, only during # installation, so they are safe to delete RUN rm -rf "/opt/ruby/gems/${runtime}/cache" -RUN cd /opt \ No newline at end of file +RUN cd /opt diff --git a/README.md b/README.md index 1545e60..f093486 100644 --- a/README.md +++ b/README.md @@ -5,7 +5,7 @@ [![Slack](https://chat.datadoghq.com/badge.svg?bg=632CA6)](https://chat.datadoghq.com/) [![License](https://img.shields.io/badge/license-Apache--2.0-blue)](https://github.com/DataDog/datadog-lambda-rb/blob/main/LICENSE) -Datadog Lambda Library for Ruby (2.7) enables enhanced Lambda metrics, distributed tracing, and custom metric submission from AWS Lambda functions. +Datadog Lambda Library for Ruby (2.7, and 3.2) enables enhanced Lambda metrics, distributed tracing, and custom metric submission from AWS Lambda functions. ## Installation diff --git a/datadog-lambda.gemspec b/datadog-lambda.gemspec index 18efcc8..778a478 100644 --- a/datadog-lambda.gemspec +++ b/datadog-lambda.gemspec @@ -33,7 +33,7 @@ Gem::Specification.new do |spec| spec.add_dependency 'aws-xray-sdk', '~> 0.11.3' # We don't add this as a direct dependency, because it has # native modules that are difficult to package for lambda - spec.add_development_dependency 'ddtrace', '~>1.5.0' + spec.add_development_dependency 'ddtrace', '~>1.11.0' # Development dependencies spec.add_development_dependency 'rake', '~> 12.3' diff --git a/integration_tests/serverless.yml b/integration_tests/serverless.yml index 9bf72a0..7282406 100644 --- a/integration_tests/serverless.yml +++ b/integration_tests/serverless.yml @@ -20,7 +20,7 @@ provider: layers: ruby: package: - artifact: ../.layers/datadog-lambda_ruby${env:RUBY_VERSION}.zip + artifact: ../.layers/datadog-lambda_ruby-amd64-${env:RUBY_VERSION}.zip functions: # async-metrics diff --git a/integration_tests/snapshots/logs/async-metrics_ruby27.log b/integration_tests/snapshots/logs/async-metrics_ruby27.log index f724f34..6841d1c 100644 --- a/integration_tests/snapshots/logs/async-metrics_ruby27.log +++ b/integration_tests/snapshots/logs/async-metrics_ruby27.log @@ -2,16 +2,16 @@ END Duration: XXXX ms (init: XXXX ms) Memory Used: XXXX MB END Duration: XXXX ms (init: XXXX) Memory Used: XXXX MB END Duration: XXXX ms (init: XXXX) Memory Used: XXXX MB +I, [XXXX] INFO XXXX[ddtrace] DATADOG CONFIGURATION - {"date":"XXXX","os_name":"x86_64-pc-linux-gnu","version":"1.11.0","lang":"ruby","lang_version":"2.7.7","enabled":true,"service":"runtime","debug":false,"analytics_enabled":false,"tags":"_dd.origin:lambda","runtime_metrics_enabled":false,"vm":"ruby-2.7.7","partial_flushing_enabled":false,"priority_sampling_enabled":false,"health_metrics_enabled":false,"profiling_enabled":false} Processed APIGateway request Processed SNS request Processed SQS request START START START -W, [XXXX] WARN XXXX[ddtrace] Failed to collect environment information: undefined method `client' for # Location: /opt/ruby/gems/2.7.0/gems/ddtrace-1.5.0/lib/datadog/core/diagnostics/environment_logger.rb:113:in `agent_url' -{"e":XXXX,"m":"aws.lambda.enhanced.invocations","t":["dd_lambda_layer:datadog-ruby27","functionname:integration-tests-rb-XXXX-async-metrics_ruby27","region:eu-west-1","account_id:XXXX","memorysize:1024","cold_start:false","runtime:Ruby 2.7.X","resource:integration-tests-rb-XXXX-async-metrics_ruby27","datadog_lambda:2.16.0","dd_trace:1.XX.X"],"v":1} -{"e":XXXX,"m":"aws.lambda.enhanced.invocations","t":["dd_lambda_layer:datadog-ruby27","functionname:integration-tests-rb-XXXX-async-metrics_ruby27","region:eu-west-1","account_id:XXXX","memorysize:1024","cold_start:false","runtime:Ruby 2.7.X","resource:integration-tests-rb-XXXX-async-metrics_ruby27","datadog_lambda:2.16.0","dd_trace:1.XX.X"],"v":1} -{"e":XXXX,"m":"aws.lambda.enhanced.invocations","t":["dd_lambda_layer:datadog-ruby27","functionname:integration-tests-rb-XXXX-async-metrics_ruby27","region:eu-west-1","account_id:XXXX","memorysize:1024","cold_start:true","runtime:Ruby 2.7.X","resource:integration-tests-rb-XXXX-async-metrics_ruby27","datadog_lambda:2.16.0","dd_trace:1.XX.X"],"v":1} +{"e":XXXX,"m":"aws.lambda.enhanced.invocations","t":["dd_lambda_layer:datadog-ruby27","functionname:integration-tests-rb-XXXX-async-metrics_ruby27","region:eu-west-1","account_id:XXXX","memorysize:1024","cold_start:false","runtime:Ruby 2.7.X","resource:integration-tests-rb-XXXX-async-metrics_ruby27","datadog_lambda:2.17.0","dd_trace:1.XX.X"],"v":1} +{"e":XXXX,"m":"aws.lambda.enhanced.invocations","t":["dd_lambda_layer:datadog-ruby27","functionname:integration-tests-rb-XXXX-async-metrics_ruby27","region:eu-west-1","account_id:XXXX","memorysize:1024","cold_start:false","runtime:Ruby 2.7.X","resource:integration-tests-rb-XXXX-async-metrics_ruby27","datadog_lambda:2.17.0","dd_trace:1.XX.X"],"v":1} +{"e":XXXX,"m":"aws.lambda.enhanced.invocations","t":["dd_lambda_layer:datadog-ruby27","functionname:integration-tests-rb-XXXX-async-metrics_ruby27","region:eu-west-1","account_id:XXXX","memorysize:1024","cold_start:true","runtime:Ruby 2.7.X","resource:integration-tests-rb-XXXX-async-metrics_ruby27","datadog_lambda:2.17.0","dd_trace:1.XX.X"],"v":1} {"e":XXXX,"m":"serverless.integration_test.execution","t":["dd_lambda_layer:datadog-ruby27","tagkey:tagvalue","eventsource:APIGateway"],"v":1} {"e":XXXX,"m":"serverless.integration_test.execution","t":["dd_lambda_layer:datadog-ruby27","tagkey:tagvalue","eventsource:SNS"],"v":1} {"e":XXXX,"m":"serverless.integration_test.execution","t":["dd_lambda_layer:datadog-ruby27","tagkey:tagvalue","eventsource:SQS"],"v":1} diff --git a/integration_tests/snapshots/logs/async-metrics_ruby32.log b/integration_tests/snapshots/logs/async-metrics_ruby32.log new file mode 100644 index 0000000..e1dd5b7 --- /dev/null +++ b/integration_tests/snapshots/logs/async-metrics_ruby32.log @@ -0,0 +1,23 @@ + +END Duration: XXXX ms (init: XXXX ms) Memory Used: XXXX MB +END Duration: XXXX ms (init: XXXX) Memory Used: XXXX MB +END Duration: XXXX ms (init: XXXX) Memory Used: XXXX MB +I, [XXXX] INFO XXXX[ddtrace] DATADOG CONFIGURATION - {"date":"XXXX","os_name":"x86_64-pc-linux","version":"1.11.0","lang":"ruby","lang_version":"3.2.2","enabled":true,"service":"runtime","debug":false,"analytics_enabled":false,"tags":"_dd.origin:lambda","runtime_metrics_enabled":false,"vm":"ruby-3.2.2","partial_flushing_enabled":false,"priority_sampling_enabled":false,"health_metrics_enabled":false,"profiling_enabled":false} +Processed APIGateway request +Processed SNS request +Processed SQS request +START +START +START +{"e":XXXX,"m":"aws.lambda.enhanced.invocations","t":["dd_lambda_layer:datadog-ruby32","functionname:integration-tests-rb-XXXX-async-metrics_ruby32","region:eu-west-1","account_id:XXXX","memorysize:1024","cold_start:false","runtime:Ruby 3.2.X","resource:integration-tests-rb-XXXX-async-metrics_ruby32","datadog_lambda:2.17.0","dd_trace:1.XX.X"],"v":1} +{"e":XXXX,"m":"aws.lambda.enhanced.invocations","t":["dd_lambda_layer:datadog-ruby32","functionname:integration-tests-rb-XXXX-async-metrics_ruby32","region:eu-west-1","account_id:XXXX","memorysize:1024","cold_start:false","runtime:Ruby 3.2.X","resource:integration-tests-rb-XXXX-async-metrics_ruby32","datadog_lambda:2.17.0","dd_trace:1.XX.X"],"v":1} +{"e":XXXX,"m":"aws.lambda.enhanced.invocations","t":["dd_lambda_layer:datadog-ruby32","functionname:integration-tests-rb-XXXX-async-metrics_ruby32","region:eu-west-1","account_id:XXXX","memorysize:1024","cold_start:true","runtime:Ruby 3.2.X","resource:integration-tests-rb-XXXX-async-metrics_ruby32","datadog_lambda:2.17.0","dd_trace:1.XX.X"],"v":1} +{"e":XXXX,"m":"serverless.integration_test.execution","t":["dd_lambda_layer:datadog-ruby32","tagkey:tagvalue","eventsource:APIGateway"],"v":1} +{"e":XXXX,"m":"serverless.integration_test.execution","t":["dd_lambda_layer:datadog-ruby32","tagkey:tagvalue","eventsource:SNS"],"v":1} +{"e":XXXX,"m":"serverless.integration_test.execution","t":["dd_lambda_layer:datadog-ruby32","tagkey:tagvalue","eventsource:SQS"],"v":1} +{"e":XXXX,"m":"serverless.integration_test.records_processed","t":["dd_lambda_layer:datadog-ruby32","tagkey:tagvalue","eventsource:SNS"],"v":1} +{"e":XXXX,"m":"serverless.integration_test.records_processed","t":["dd_lambda_layer:datadog-ruby32","tagkey:tagvalue","eventsource:SQS"],"v":1} +{"e":XXXX,"m":"serverless.integration_test.records_processed","t":["dd_lambda_layer:datadog-ruby32","tagkey:tagvalue","eventsource:SQS"],"v":1} +{"traces":[[{"error":0,"meta":{"XXXX": "XXXX"},"metrics":{"XXXX": "XXXX"},"name":"aws.lambda","parent_id":"XXXX","resource":"integration-tests-rb-XXXX-async-metrics_ruby32","service":"aws.lambda","span_id":"XXXX","trace_id":"XXXX","type":"serverless","start":XXXX,"duration":XXXX}]]} +{"traces":[[{"error":0,"meta":{"XXXX": "XXXX"},"metrics":{"XXXX": "XXXX"},"name":"aws.lambda","parent_id":"XXXX","resource":"integration-tests-rb-XXXX-async-metrics_ruby32","service":"aws.lambda","span_id":"XXXX","trace_id":"XXXX","type":"serverless","start":XXXX,"duration":XXXX}]]} +{"traces":[[{"error":0,"meta":{"XXXX": "XXXX"},"metrics":{"XXXX": "XXXX"},"name":"aws.lambda","parent_id":"XXXX","resource":"integration-tests-rb-XXXX-async-metrics_ruby32","service":"aws.lambda","span_id":"XXXX","trace_id":"XXXX","type":"serverless","start":XXXX,"duration":XXXX}]]} diff --git a/integration_tests/snapshots/logs/http-error_ruby27.log b/integration_tests/snapshots/logs/http-error_ruby27.log index e54cc73..ea696a1 100644 --- a/integration_tests/snapshots/logs/http-error_ruby27.log +++ b/integration_tests/snapshots/logs/http-error_ruby27.log @@ -2,16 +2,16 @@ END Duration: XXXX ms (init: XXXX ms) Memory Used: XXXX MB END Duration: XXXX ms (init: XXXX) Memory Used: XXXX MB END Duration: XXXX ms (init: XXXX) Memory Used: XXXX MB +I, [XXXX] INFO XXXX[ddtrace] DATADOG CONFIGURATION - {"date":"XXXX","os_name":"x86_64-pc-linux-gnu","version":"1.11.0","lang":"ruby","lang_version":"2.7.7","enabled":true,"service":"runtime","debug":false,"analytics_enabled":false,"tags":"_dd.origin:lambda","runtime_metrics_enabled":false,"vm":"ruby-2.7.7","partial_flushing_enabled":false,"priority_sampling_enabled":false,"health_metrics_enabled":false,"profiling_enabled":false} START START START Snapshot test http requests successfully made to URLs: https://httpstat.us/400 Snapshot test http requests successfully made to URLs: https://httpstat.us/400 Snapshot test http requests successfully made to URLs: https://httpstat.us/400 -W, [XXXX] WARN XXXX[ddtrace] Failed to collect environment information: undefined method `client' for # Location: /opt/ruby/gems/2.7.0/gems/ddtrace-1.5.0/lib/datadog/core/diagnostics/environment_logger.rb:113:in `agent_url' -{"e":XXXX,"m":"aws.lambda.enhanced.invocations","t":["dd_lambda_layer:datadog-ruby27","functionname:integration-tests-rb-XXXX-http-error_ruby27","region:eu-west-1","account_id:XXXX","memorysize:1024","cold_start:false","runtime:Ruby 2.7.X","resource:integration-tests-rb-XXXX-http-error_ruby27","datadog_lambda:2.16.0","dd_trace:1.XX.X"],"v":1} -{"e":XXXX,"m":"aws.lambda.enhanced.invocations","t":["dd_lambda_layer:datadog-ruby27","functionname:integration-tests-rb-XXXX-http-error_ruby27","region:eu-west-1","account_id:XXXX","memorysize:1024","cold_start:false","runtime:Ruby 2.7.X","resource:integration-tests-rb-XXXX-http-error_ruby27","datadog_lambda:2.16.0","dd_trace:1.XX.X"],"v":1} -{"e":XXXX,"m":"aws.lambda.enhanced.invocations","t":["dd_lambda_layer:datadog-ruby27","functionname:integration-tests-rb-XXXX-http-error_ruby27","region:eu-west-1","account_id:XXXX","memorysize:1024","cold_start:true","runtime:Ruby 2.7.X","resource:integration-tests-rb-XXXX-http-error_ruby27","datadog_lambda:2.16.0","dd_trace:1.XX.X"],"v":1} +{"e":XXXX,"m":"aws.lambda.enhanced.invocations","t":["dd_lambda_layer:datadog-ruby27","functionname:integration-tests-rb-XXXX-http-error_ruby27","region:eu-west-1","account_id:XXXX","memorysize:1024","cold_start:false","runtime:Ruby 2.7.X","resource:integration-tests-rb-XXXX-http-error_ruby27","datadog_lambda:2.17.0","dd_trace:1.XX.X"],"v":1} +{"e":XXXX,"m":"aws.lambda.enhanced.invocations","t":["dd_lambda_layer:datadog-ruby27","functionname:integration-tests-rb-XXXX-http-error_ruby27","region:eu-west-1","account_id:XXXX","memorysize:1024","cold_start:false","runtime:Ruby 2.7.X","resource:integration-tests-rb-XXXX-http-error_ruby27","datadog_lambda:2.17.0","dd_trace:1.XX.X"],"v":1} +{"e":XXXX,"m":"aws.lambda.enhanced.invocations","t":["dd_lambda_layer:datadog-ruby27","functionname:integration-tests-rb-XXXX-http-error_ruby27","region:eu-west-1","account_id:XXXX","memorysize:1024","cold_start:true","runtime:Ruby 2.7.X","resource:integration-tests-rb-XXXX-http-error_ruby27","datadog_lambda:2.17.0","dd_trace:1.XX.X"],"v":1} {"e":XXXX,"m":"serverless.integration_test.execution","t":["dd_lambda_layer:datadog-ruby27","function:http-request"],"v":1} {"e":XXXX,"m":"serverless.integration_test.execution","t":["dd_lambda_layer:datadog-ruby27","function:http-request"],"v":1} {"e":XXXX,"m":"serverless.integration_test.execution","t":["dd_lambda_layer:datadog-ruby27","function:http-request"],"v":1} diff --git a/integration_tests/snapshots/logs/http-error_ruby32.log b/integration_tests/snapshots/logs/http-error_ruby32.log new file mode 100644 index 0000000..e63de57 --- /dev/null +++ b/integration_tests/snapshots/logs/http-error_ruby32.log @@ -0,0 +1,20 @@ + +END Duration: XXXX ms (init: XXXX ms) Memory Used: XXXX MB +END Duration: XXXX ms (init: XXXX) Memory Used: XXXX MB +END Duration: XXXX ms (init: XXXX) Memory Used: XXXX MB +I, [XXXX] INFO XXXX[ddtrace] DATADOG CONFIGURATION - {"date":"XXXX","os_name":"x86_64-pc-linux","version":"1.11.0","lang":"ruby","lang_version":"3.2.2","enabled":true,"service":"runtime","debug":false,"analytics_enabled":false,"tags":"_dd.origin:lambda","runtime_metrics_enabled":false,"vm":"ruby-3.2.2","partial_flushing_enabled":false,"priority_sampling_enabled":false,"health_metrics_enabled":false,"profiling_enabled":false} +START +START +START +Snapshot test http requests successfully made to URLs: https://httpstat.us/400 +Snapshot test http requests successfully made to URLs: https://httpstat.us/400 +Snapshot test http requests successfully made to URLs: https://httpstat.us/400 +{"e":XXXX,"m":"aws.lambda.enhanced.invocations","t":["dd_lambda_layer:datadog-ruby32","functionname:integration-tests-rb-XXXX-http-error_ruby32","region:eu-west-1","account_id:XXXX","memorysize:1024","cold_start:false","runtime:Ruby 3.2.X","resource:integration-tests-rb-XXXX-http-error_ruby32","datadog_lambda:2.17.0","dd_trace:1.XX.X"],"v":1} +{"e":XXXX,"m":"aws.lambda.enhanced.invocations","t":["dd_lambda_layer:datadog-ruby32","functionname:integration-tests-rb-XXXX-http-error_ruby32","region:eu-west-1","account_id:XXXX","memorysize:1024","cold_start:false","runtime:Ruby 3.2.X","resource:integration-tests-rb-XXXX-http-error_ruby32","datadog_lambda:2.17.0","dd_trace:1.XX.X"],"v":1} +{"e":XXXX,"m":"aws.lambda.enhanced.invocations","t":["dd_lambda_layer:datadog-ruby32","functionname:integration-tests-rb-XXXX-http-error_ruby32","region:eu-west-1","account_id:XXXX","memorysize:1024","cold_start:true","runtime:Ruby 3.2.X","resource:integration-tests-rb-XXXX-http-error_ruby32","datadog_lambda:2.17.0","dd_trace:1.XX.X"],"v":1} +{"e":XXXX,"m":"serverless.integration_test.execution","t":["dd_lambda_layer:datadog-ruby32","function:http-request"],"v":1} +{"e":XXXX,"m":"serverless.integration_test.execution","t":["dd_lambda_layer:datadog-ruby32","function:http-request"],"v":1} +{"e":XXXX,"m":"serverless.integration_test.execution","t":["dd_lambda_layer:datadog-ruby32","function:http-request"],"v":1} +{"traces":[[{"error":0,"meta":{"XXXX": "XXXX"},"metrics":{"XXXX": "XXXX"},"name":"aws.lambda","parent_id":"XXXX","resource":"integration-tests-rb-XXXX-http-error_ruby32","service":"aws.lambda","span_id":"XXXX","trace_id":"XXXX","type":"serverless","start":XXXX,"duration":XXXX}]]} +{"traces":[[{"error":0,"meta":{"XXXX": "XXXX"},"metrics":{"XXXX": "XXXX"},"name":"aws.lambda","parent_id":"XXXX","resource":"integration-tests-rb-XXXX-http-error_ruby32","service":"aws.lambda","span_id":"XXXX","trace_id":"XXXX","type":"serverless","start":XXXX,"duration":XXXX}]]} +{"traces":[[{"error":0,"meta":{"XXXX": "XXXX"},"metrics":{"XXXX": "XXXX"},"name":"aws.lambda","parent_id":"XXXX","resource":"integration-tests-rb-XXXX-http-error_ruby32","service":"aws.lambda","span_id":"XXXX","trace_id":"XXXX","type":"serverless","start":XXXX,"duration":XXXX}]]} diff --git a/integration_tests/snapshots/logs/http-requests_ruby27.log b/integration_tests/snapshots/logs/http-requests_ruby27.log index fbb7bf5..cba31d5 100644 --- a/integration_tests/snapshots/logs/http-requests_ruby27.log +++ b/integration_tests/snapshots/logs/http-requests_ruby27.log @@ -2,16 +2,16 @@ END Duration: XXXX ms (init: XXXX ms) Memory Used: XXXX MB END Duration: XXXX ms (init: XXXX) Memory Used: XXXX MB END Duration: XXXX ms (init: XXXX) Memory Used: XXXX MB +I, [XXXX] INFO XXXX[ddtrace] DATADOG CONFIGURATION - {"date":"XXXX","os_name":"x86_64-pc-linux-gnu","version":"1.11.0","lang":"ruby","lang_version":"2.7.7","enabled":true,"service":"runtime","debug":false,"analytics_enabled":false,"tags":"_dd.origin:lambda","runtime_metrics_enabled":false,"vm":"ruby-2.7.7","partial_flushing_enabled":false,"priority_sampling_enabled":false,"health_metrics_enabled":false,"profiling_enabled":false} START START START Snapshot test http requests successfully made to URLs: ["ip-ranges.datadoghq.com", "ip-ranges.datadoghq.eu"] Snapshot test http requests successfully made to URLs: ["ip-ranges.datadoghq.com", "ip-ranges.datadoghq.eu"] Snapshot test http requests successfully made to URLs: ["ip-ranges.datadoghq.com", "ip-ranges.datadoghq.eu"] -W, [XXXX] WARN XXXX[ddtrace] Failed to collect environment information: undefined method `client' for # Location: /opt/ruby/gems/2.7.0/gems/ddtrace-1.5.0/lib/datadog/core/diagnostics/environment_logger.rb:113:in `agent_url' -{"e":XXXX,"m":"aws.lambda.enhanced.invocations","t":["dd_lambda_layer:datadog-ruby27","functionname:integration-tests-rb-XXXX-http-requests_ruby27","region:eu-west-1","account_id:XXXX","memorysize:1024","cold_start:false","runtime:Ruby 2.7.X","resource:integration-tests-rb-XXXX-http-requests_ruby27","datadog_lambda:2.16.0","dd_trace:1.XX.X"],"v":1} -{"e":XXXX,"m":"aws.lambda.enhanced.invocations","t":["dd_lambda_layer:datadog-ruby27","functionname:integration-tests-rb-XXXX-http-requests_ruby27","region:eu-west-1","account_id:XXXX","memorysize:1024","cold_start:false","runtime:Ruby 2.7.X","resource:integration-tests-rb-XXXX-http-requests_ruby27","datadog_lambda:2.16.0","dd_trace:1.XX.X"],"v":1} -{"e":XXXX,"m":"aws.lambda.enhanced.invocations","t":["dd_lambda_layer:datadog-ruby27","functionname:integration-tests-rb-XXXX-http-requests_ruby27","region:eu-west-1","account_id:XXXX","memorysize:1024","cold_start:true","runtime:Ruby 2.7.X","resource:integration-tests-rb-XXXX-http-requests_ruby27","datadog_lambda:2.16.0","dd_trace:1.XX.X"],"v":1} +{"e":XXXX,"m":"aws.lambda.enhanced.invocations","t":["dd_lambda_layer:datadog-ruby27","functionname:integration-tests-rb-XXXX-http-requests_ruby27","region:eu-west-1","account_id:XXXX","memorysize:1024","cold_start:false","runtime:Ruby 2.7.X","resource:integration-tests-rb-XXXX-http-requests_ruby27","datadog_lambda:2.17.0","dd_trace:1.XX.X"],"v":1} +{"e":XXXX,"m":"aws.lambda.enhanced.invocations","t":["dd_lambda_layer:datadog-ruby27","functionname:integration-tests-rb-XXXX-http-requests_ruby27","region:eu-west-1","account_id:XXXX","memorysize:1024","cold_start:false","runtime:Ruby 2.7.X","resource:integration-tests-rb-XXXX-http-requests_ruby27","datadog_lambda:2.17.0","dd_trace:1.XX.X"],"v":1} +{"e":XXXX,"m":"aws.lambda.enhanced.invocations","t":["dd_lambda_layer:datadog-ruby27","functionname:integration-tests-rb-XXXX-http-requests_ruby27","region:eu-west-1","account_id:XXXX","memorysize:1024","cold_start:true","runtime:Ruby 2.7.X","resource:integration-tests-rb-XXXX-http-requests_ruby27","datadog_lambda:2.17.0","dd_trace:1.XX.X"],"v":1} {"e":XXXX,"m":"serverless.integration_test.execution","t":["dd_lambda_layer:datadog-ruby27","function:http-request"],"v":1} {"e":XXXX,"m":"serverless.integration_test.execution","t":["dd_lambda_layer:datadog-ruby27","function:http-request"],"v":1} {"e":XXXX,"m":"serverless.integration_test.execution","t":["dd_lambda_layer:datadog-ruby27","function:http-request"],"v":1} diff --git a/integration_tests/snapshots/logs/http-requests_ruby32.log b/integration_tests/snapshots/logs/http-requests_ruby32.log new file mode 100644 index 0000000..0aae728 --- /dev/null +++ b/integration_tests/snapshots/logs/http-requests_ruby32.log @@ -0,0 +1,20 @@ + +END Duration: XXXX ms (init: XXXX ms) Memory Used: XXXX MB +END Duration: XXXX ms (init: XXXX) Memory Used: XXXX MB +END Duration: XXXX ms (init: XXXX) Memory Used: XXXX MB +I, [XXXX] INFO XXXX[ddtrace] DATADOG CONFIGURATION - {"date":"XXXX","os_name":"x86_64-pc-linux","version":"1.11.0","lang":"ruby","lang_version":"3.2.2","enabled":true,"service":"runtime","debug":false,"analytics_enabled":false,"tags":"_dd.origin:lambda","runtime_metrics_enabled":false,"vm":"ruby-3.2.2","partial_flushing_enabled":false,"priority_sampling_enabled":false,"health_metrics_enabled":false,"profiling_enabled":false} +START +START +START +Snapshot test http requests successfully made to URLs: ["ip-ranges.datadoghq.com", "ip-ranges.datadoghq.eu"] +Snapshot test http requests successfully made to URLs: ["ip-ranges.datadoghq.com", "ip-ranges.datadoghq.eu"] +Snapshot test http requests successfully made to URLs: ["ip-ranges.datadoghq.com", "ip-ranges.datadoghq.eu"] +{"e":XXXX,"m":"aws.lambda.enhanced.invocations","t":["dd_lambda_layer:datadog-ruby32","functionname:integration-tests-rb-XXXX-http-requests_ruby32","region:eu-west-1","account_id:XXXX","memorysize:1024","cold_start:false","runtime:Ruby 3.2.X","resource:integration-tests-rb-XXXX-http-requests_ruby32","datadog_lambda:2.17.0","dd_trace:1.XX.X"],"v":1} +{"e":XXXX,"m":"aws.lambda.enhanced.invocations","t":["dd_lambda_layer:datadog-ruby32","functionname:integration-tests-rb-XXXX-http-requests_ruby32","region:eu-west-1","account_id:XXXX","memorysize:1024","cold_start:false","runtime:Ruby 3.2.X","resource:integration-tests-rb-XXXX-http-requests_ruby32","datadog_lambda:2.17.0","dd_trace:1.XX.X"],"v":1} +{"e":XXXX,"m":"aws.lambda.enhanced.invocations","t":["dd_lambda_layer:datadog-ruby32","functionname:integration-tests-rb-XXXX-http-requests_ruby32","region:eu-west-1","account_id:XXXX","memorysize:1024","cold_start:true","runtime:Ruby 3.2.X","resource:integration-tests-rb-XXXX-http-requests_ruby32","datadog_lambda:2.17.0","dd_trace:1.XX.X"],"v":1} +{"e":XXXX,"m":"serverless.integration_test.execution","t":["dd_lambda_layer:datadog-ruby32","function:http-request"],"v":1} +{"e":XXXX,"m":"serverless.integration_test.execution","t":["dd_lambda_layer:datadog-ruby32","function:http-request"],"v":1} +{"e":XXXX,"m":"serverless.integration_test.execution","t":["dd_lambda_layer:datadog-ruby32","function:http-request"],"v":1} +{"traces":[[{"error":0,"meta":{"XXXX": "XXXX"},"metrics":{"XXXX": "XXXX"},"name":"aws.lambda","parent_id":"XXXX","resource":"integration-tests-rb-XXXX-http-requests_ruby32","service":"aws.lambda","span_id":"XXXX","trace_id":"XXXX","type":"serverless","start":XXXX,"duration":XXXX}]]} +{"traces":[[{"error":0,"meta":{"XXXX": "XXXX"},"metrics":{"XXXX": "XXXX"},"name":"aws.lambda","parent_id":"XXXX","resource":"integration-tests-rb-XXXX-http-requests_ruby32","service":"aws.lambda","span_id":"XXXX","trace_id":"XXXX","type":"serverless","start":XXXX,"duration":XXXX}]]} +{"traces":[[{"error":0,"meta":{"XXXX": "XXXX"},"metrics":{"XXXX": "XXXX"},"name":"aws.lambda","parent_id":"XXXX","resource":"integration-tests-rb-XXXX-http-requests_ruby32","service":"aws.lambda","span_id":"XXXX","trace_id":"XXXX","type":"serverless","start":XXXX,"duration":XXXX}]]} diff --git a/integration_tests/snapshots/logs/process-input-traced_ruby27.log b/integration_tests/snapshots/logs/process-input-traced_ruby27.log index 1de3cc2..37cb27d 100644 --- a/integration_tests/snapshots/logs/process-input-traced_ruby27.log +++ b/integration_tests/snapshots/logs/process-input-traced_ruby27.log @@ -2,13 +2,13 @@ END Duration: XXXX ms (init: XXXX ms) Memory Used: XXXX MB END Duration: XXXX ms (init: XXXX) Memory Used: XXXX MB END Duration: XXXX ms (init: XXXX) Memory Used: XXXX MB +I, [XXXX] INFO XXXX[ddtrace] DATADOG CONFIGURATION - {"date":"XXXX","os_name":"x86_64-pc-linux-gnu","version":"1.11.0","lang":"ruby","lang_version":"2.7.7","enabled":true,"service":"runtime","debug":false,"analytics_enabled":false,"tags":"_dd.origin:lambda","runtime_metrics_enabled":false,"vm":"ruby-2.7.7","partial_flushing_enabled":false,"priority_sampling_enabled":false,"health_metrics_enabled":false,"profiling_enabled":false} START START START -W, [XXXX] WARN XXXX[ddtrace] Failed to collect environment information: undefined method `client' for # Location: /opt/ruby/gems/2.7.0/gems/ddtrace-1.5.0/lib/datadog/core/diagnostics/environment_logger.rb:113:in `agent_url' -{"e":XXXX,"m":"aws.lambda.enhanced.invocations","t":["dd_lambda_layer:datadog-ruby27","functionname:integration-tests-rb-XXXX-process-input-traced_ruby27","region:eu-west-1","account_id:XXXX","memorysize:1024","cold_start:false","runtime:Ruby 2.7.X","resource:integration-tests-rb-XXXX-process-input-traced_ruby27","datadog_lambda:2.16.0","dd_trace:1.XX.X"],"v":1} -{"e":XXXX,"m":"aws.lambda.enhanced.invocations","t":["dd_lambda_layer:datadog-ruby27","functionname:integration-tests-rb-XXXX-process-input-traced_ruby27","region:eu-west-1","account_id:XXXX","memorysize:1024","cold_start:false","runtime:Ruby 2.7.X","resource:integration-tests-rb-XXXX-process-input-traced_ruby27","datadog_lambda:2.16.0","dd_trace:1.XX.X"],"v":1} -{"e":XXXX,"m":"aws.lambda.enhanced.invocations","t":["dd_lambda_layer:datadog-ruby27","functionname:integration-tests-rb-XXXX-process-input-traced_ruby27","region:eu-west-1","account_id:XXXX","memorysize:1024","cold_start:true","runtime:Ruby 2.7.X","resource:integration-tests-rb-XXXX-process-input-traced_ruby27","datadog_lambda:2.16.0","dd_trace:1.XX.X"],"v":1} +{"e":XXXX,"m":"aws.lambda.enhanced.invocations","t":["dd_lambda_layer:datadog-ruby27","functionname:integration-tests-rb-XXXX-process-input-traced_ruby27","region:eu-west-1","account_id:XXXX","memorysize:1024","cold_start:false","runtime:Ruby 2.7.X","resource:integration-tests-rb-XXXX-process-input-traced_ruby27","datadog_lambda:2.17.0","dd_trace:1.XX.X"],"v":1} +{"e":XXXX,"m":"aws.lambda.enhanced.invocations","t":["dd_lambda_layer:datadog-ruby27","functionname:integration-tests-rb-XXXX-process-input-traced_ruby27","region:eu-west-1","account_id:XXXX","memorysize:1024","cold_start:false","runtime:Ruby 2.7.X","resource:integration-tests-rb-XXXX-process-input-traced_ruby27","datadog_lambda:2.17.0","dd_trace:1.XX.X"],"v":1} +{"e":XXXX,"m":"aws.lambda.enhanced.invocations","t":["dd_lambda_layer:datadog-ruby27","functionname:integration-tests-rb-XXXX-process-input-traced_ruby27","region:eu-west-1","account_id:XXXX","memorysize:1024","cold_start:true","runtime:Ruby 2.7.X","resource:integration-tests-rb-XXXX-process-input-traced_ruby27","datadog_lambda:2.17.0","dd_trace:1.XX.X"],"v":1} {"e":XXXX,"m":"serverless.integration_test.execution","t":["dd_lambda_layer:datadog-ruby27","function:http-request"],"v":1} {"e":XXXX,"m":"serverless.integration_test.execution","t":["dd_lambda_layer:datadog-ruby27","function:http-request"],"v":1} {"e":XXXX,"m":"serverless.integration_test.execution","t":["dd_lambda_layer:datadog-ruby27","function:http-request"],"v":1} diff --git a/integration_tests/snapshots/logs/process-input-traced_ruby32.log b/integration_tests/snapshots/logs/process-input-traced_ruby32.log new file mode 100644 index 0000000..48a431f --- /dev/null +++ b/integration_tests/snapshots/logs/process-input-traced_ruby32.log @@ -0,0 +1,17 @@ + +END Duration: XXXX ms (init: XXXX ms) Memory Used: XXXX MB +END Duration: XXXX ms (init: XXXX) Memory Used: XXXX MB +END Duration: XXXX ms (init: XXXX) Memory Used: XXXX MB +I, [XXXX] INFO XXXX[ddtrace] DATADOG CONFIGURATION - {"date":"XXXX","os_name":"x86_64-pc-linux","version":"1.11.0","lang":"ruby","lang_version":"3.2.2","enabled":true,"service":"runtime","debug":false,"analytics_enabled":false,"tags":"_dd.origin:lambda","runtime_metrics_enabled":false,"vm":"ruby-3.2.2","partial_flushing_enabled":false,"priority_sampling_enabled":false,"health_metrics_enabled":false,"profiling_enabled":false} +START +START +START +{"e":XXXX,"m":"aws.lambda.enhanced.invocations","t":["dd_lambda_layer:datadog-ruby32","functionname:integration-tests-rb-XXXX-process-input-traced_ruby32","region:eu-west-1","account_id:XXXX","memorysize:1024","cold_start:false","runtime:Ruby 3.2.X","resource:integration-tests-rb-XXXX-process-input-traced_ruby32","datadog_lambda:2.17.0","dd_trace:1.XX.X"],"v":1} +{"e":XXXX,"m":"aws.lambda.enhanced.invocations","t":["dd_lambda_layer:datadog-ruby32","functionname:integration-tests-rb-XXXX-process-input-traced_ruby32","region:eu-west-1","account_id:XXXX","memorysize:1024","cold_start:false","runtime:Ruby 3.2.X","resource:integration-tests-rb-XXXX-process-input-traced_ruby32","datadog_lambda:2.17.0","dd_trace:1.XX.X"],"v":1} +{"e":XXXX,"m":"aws.lambda.enhanced.invocations","t":["dd_lambda_layer:datadog-ruby32","functionname:integration-tests-rb-XXXX-process-input-traced_ruby32","region:eu-west-1","account_id:XXXX","memorysize:1024","cold_start:true","runtime:Ruby 3.2.X","resource:integration-tests-rb-XXXX-process-input-traced_ruby32","datadog_lambda:2.17.0","dd_trace:1.XX.X"],"v":1} +{"e":XXXX,"m":"serverless.integration_test.execution","t":["dd_lambda_layer:datadog-ruby32","function:http-request"],"v":1} +{"e":XXXX,"m":"serverless.integration_test.execution","t":["dd_lambda_layer:datadog-ruby32","function:http-request"],"v":1} +{"e":XXXX,"m":"serverless.integration_test.execution","t":["dd_lambda_layer:datadog-ruby32","function:http-request"],"v":1} +{"traces":[[{"error":0,"meta":{"XXXX": "XXXX"},"metrics":{"XXXX": "XXXX"},"name":"get_record_ids","parent_id":"XXXX","resource":"get_record_ids","service":"runtime","span_id":"XXXX","trace_id":"XXXX","type":null,"start":XXXX,"duration":XXXX},{"error":0,"meta":{"XXXX": "XXXX"},"metrics":{"XXXX": "XXXX"},"name":"aws.lambda","parent_id":"XXXX","resource":"integration-tests-rb-XXXX-process-input-traced_ruby32","service":"aws.lambda","span_id":"XXXX","trace_id":"XXXX","type":"serverless","start":XXXX,"duration":XXXX}]]} +{"traces":[[{"error":0,"meta":{"XXXX": "XXXX"},"metrics":{"XXXX": "XXXX"},"name":"get_record_ids","parent_id":"XXXX","resource":"get_record_ids","service":"runtime","span_id":"XXXX","trace_id":"XXXX","type":null,"start":XXXX,"duration":XXXX},{"error":0,"meta":{"XXXX": "XXXX"},"metrics":{"XXXX": "XXXX"},"name":"aws.lambda","parent_id":"XXXX","resource":"integration-tests-rb-XXXX-process-input-traced_ruby32","service":"aws.lambda","span_id":"XXXX","trace_id":"XXXX","type":"serverless","start":XXXX,"duration":XXXX}]]} +{"traces":[[{"error":0,"meta":{"XXXX": "XXXX"},"metrics":{"XXXX": "XXXX"},"name":"get_record_ids","parent_id":"XXXX","resource":"get_record_ids","service":"runtime","span_id":"XXXX","trace_id":"XXXX","type":null,"start":XXXX,"duration":XXXX},{"error":0,"meta":{"XXXX": "XXXX"},"metrics":{"XXXX": "XXXX"},"name":"get_api_gateway_request_id","parent_id":"XXXX","resource":"get_api_gateway_request_id","service":"runtime","span_id":"XXXX","trace_id":"XXXX","type":null,"start":XXXX,"duration":XXXX},{"error":0,"meta":{"XXXX": "XXXX"},"metrics":{"XXXX": "XXXX"},"name":"aws.lambda","parent_id":"XXXX","resource":"integration-tests-rb-XXXX-process-input-traced_ruby32","service":"aws.lambda","span_id":"XXXX","trace_id":"XXXX","type":"serverless","start":XXXX,"duration":XXXX}]]} diff --git a/integration_tests/snapshots/logs/sync-metrics_ruby27.log b/integration_tests/snapshots/logs/sync-metrics_ruby27.log index 7c3b647..b73e565 100644 --- a/integration_tests/snapshots/logs/sync-metrics_ruby27.log +++ b/integration_tests/snapshots/logs/sync-metrics_ruby27.log @@ -2,16 +2,16 @@ END Duration: XXXX ms (init: XXXX ms) Memory Used: XXXX MB END Duration: XXXX ms (init: XXXX) Memory Used: XXXX MB END Duration: XXXX ms (init: XXXX) Memory Used: XXXX MB +I, [XXXX] INFO XXXX[ddtrace] DATADOG CONFIGURATION - {"date":"XXXX","os_name":"x86_64-pc-linux-gnu","version":"1.11.0","lang":"ruby","lang_version":"2.7.7","enabled":true,"service":"runtime","debug":false,"analytics_enabled":false,"tags":"_dd.origin:lambda","runtime_metrics_enabled":false,"vm":"ruby-2.7.7","partial_flushing_enabled":false,"priority_sampling_enabled":false,"health_metrics_enabled":false,"profiling_enabled":false} Processed APIGateway request Processed SNS request Processed SQS request START START START -W, [XXXX] WARN XXXX[ddtrace] Failed to collect environment information: undefined method `client' for # Location: /opt/ruby/gems/2.7.0/gems/ddtrace-1.5.0/lib/datadog/core/diagnostics/environment_logger.rb:113:in `agent_url' -{"e":XXXX,"m":"aws.lambda.enhanced.invocations","t":["dd_lambda_layer:datadog-ruby27","functionname:integration-tests-rb-XXXX-sync-metrics_ruby27","region:eu-west-1","account_id:XXXX","memorysize:1024","cold_start:false","runtime:Ruby 2.7.X","resource:integration-tests-rb-XXXX-sync-metrics_ruby27","datadog_lambda:2.16.0","dd_trace:1.XX.X"],"v":1} -{"e":XXXX,"m":"aws.lambda.enhanced.invocations","t":["dd_lambda_layer:datadog-ruby27","functionname:integration-tests-rb-XXXX-sync-metrics_ruby27","region:eu-west-1","account_id:XXXX","memorysize:1024","cold_start:false","runtime:Ruby 2.7.X","resource:integration-tests-rb-XXXX-sync-metrics_ruby27","datadog_lambda:2.16.0","dd_trace:1.XX.X"],"v":1} -{"e":XXXX,"m":"aws.lambda.enhanced.invocations","t":["dd_lambda_layer:datadog-ruby27","functionname:integration-tests-rb-XXXX-sync-metrics_ruby27","region:eu-west-1","account_id:XXXX","memorysize:1024","cold_start:true","runtime:Ruby 2.7.X","resource:integration-tests-rb-XXXX-sync-metrics_ruby27","datadog_lambda:2.16.0","dd_trace:1.XX.X"],"v":1} +{"e":XXXX,"m":"aws.lambda.enhanced.invocations","t":["dd_lambda_layer:datadog-ruby27","functionname:integration-tests-rb-XXXX-sync-metrics_ruby27","region:eu-west-1","account_id:XXXX","memorysize:1024","cold_start:false","runtime:Ruby 2.7.X","resource:integration-tests-rb-XXXX-sync-metrics_ruby27","datadog_lambda:2.17.0","dd_trace:1.XX.X"],"v":1} +{"e":XXXX,"m":"aws.lambda.enhanced.invocations","t":["dd_lambda_layer:datadog-ruby27","functionname:integration-tests-rb-XXXX-sync-metrics_ruby27","region:eu-west-1","account_id:XXXX","memorysize:1024","cold_start:false","runtime:Ruby 2.7.X","resource:integration-tests-rb-XXXX-sync-metrics_ruby27","datadog_lambda:2.17.0","dd_trace:1.XX.X"],"v":1} +{"e":XXXX,"m":"aws.lambda.enhanced.invocations","t":["dd_lambda_layer:datadog-ruby27","functionname:integration-tests-rb-XXXX-sync-metrics_ruby27","region:eu-west-1","account_id:XXXX","memorysize:1024","cold_start:true","runtime:Ruby 2.7.X","resource:integration-tests-rb-XXXX-sync-metrics_ruby27","datadog_lambda:2.17.0","dd_trace:1.XX.X"],"v":1} {"e":XXXX,"m":"serverless.integration_test.execution","t":["dd_lambda_layer:datadog-ruby27","tagkey:tagvalue","eventsource:APIGateway"],"v":1} {"e":XXXX,"m":"serverless.integration_test.execution","t":["dd_lambda_layer:datadog-ruby27","tagkey:tagvalue","eventsource:SNS"],"v":1} {"e":XXXX,"m":"serverless.integration_test.execution","t":["dd_lambda_layer:datadog-ruby27","tagkey:tagvalue","eventsource:SQS"],"v":1} diff --git a/integration_tests/snapshots/logs/sync-metrics_ruby32.log b/integration_tests/snapshots/logs/sync-metrics_ruby32.log new file mode 100644 index 0000000..2aaee94 --- /dev/null +++ b/integration_tests/snapshots/logs/sync-metrics_ruby32.log @@ -0,0 +1,23 @@ + +END Duration: XXXX ms (init: XXXX ms) Memory Used: XXXX MB +END Duration: XXXX ms (init: XXXX) Memory Used: XXXX MB +END Duration: XXXX ms (init: XXXX) Memory Used: XXXX MB +I, [XXXX] INFO XXXX[ddtrace] DATADOG CONFIGURATION - {"date":"XXXX","os_name":"x86_64-pc-linux","version":"1.11.0","lang":"ruby","lang_version":"3.2.2","enabled":true,"service":"runtime","debug":false,"analytics_enabled":false,"tags":"_dd.origin:lambda","runtime_metrics_enabled":false,"vm":"ruby-3.2.2","partial_flushing_enabled":false,"priority_sampling_enabled":false,"health_metrics_enabled":false,"profiling_enabled":false} +Processed APIGateway request +Processed SNS request +Processed SQS request +START +START +START +{"e":XXXX,"m":"aws.lambda.enhanced.invocations","t":["dd_lambda_layer:datadog-ruby32","functionname:integration-tests-rb-XXXX-sync-metrics_ruby32","region:eu-west-1","account_id:XXXX","memorysize:1024","cold_start:false","runtime:Ruby 3.2.X","resource:integration-tests-rb-XXXX-sync-metrics_ruby32","datadog_lambda:2.17.0","dd_trace:1.XX.X"],"v":1} +{"e":XXXX,"m":"aws.lambda.enhanced.invocations","t":["dd_lambda_layer:datadog-ruby32","functionname:integration-tests-rb-XXXX-sync-metrics_ruby32","region:eu-west-1","account_id:XXXX","memorysize:1024","cold_start:false","runtime:Ruby 3.2.X","resource:integration-tests-rb-XXXX-sync-metrics_ruby32","datadog_lambda:2.17.0","dd_trace:1.XX.X"],"v":1} +{"e":XXXX,"m":"aws.lambda.enhanced.invocations","t":["dd_lambda_layer:datadog-ruby32","functionname:integration-tests-rb-XXXX-sync-metrics_ruby32","region:eu-west-1","account_id:XXXX","memorysize:1024","cold_start:true","runtime:Ruby 3.2.X","resource:integration-tests-rb-XXXX-sync-metrics_ruby32","datadog_lambda:2.17.0","dd_trace:1.XX.X"],"v":1} +{"e":XXXX,"m":"serverless.integration_test.execution","t":["dd_lambda_layer:datadog-ruby32","tagkey:tagvalue","eventsource:APIGateway"],"v":1} +{"e":XXXX,"m":"serverless.integration_test.execution","t":["dd_lambda_layer:datadog-ruby32","tagkey:tagvalue","eventsource:SNS"],"v":1} +{"e":XXXX,"m":"serverless.integration_test.execution","t":["dd_lambda_layer:datadog-ruby32","tagkey:tagvalue","eventsource:SQS"],"v":1} +{"e":XXXX,"m":"serverless.integration_test.records_processed","t":["dd_lambda_layer:datadog-ruby32","tagkey:tagvalue","eventsource:SNS"],"v":1} +{"e":XXXX,"m":"serverless.integration_test.records_processed","t":["dd_lambda_layer:datadog-ruby32","tagkey:tagvalue","eventsource:SQS"],"v":1} +{"e":XXXX,"m":"serverless.integration_test.records_processed","t":["dd_lambda_layer:datadog-ruby32","tagkey:tagvalue","eventsource:SQS"],"v":1} +{"traces":[[{"error":0,"meta":{"XXXX": "XXXX"},"metrics":{"XXXX": "XXXX"},"name":"aws.lambda","parent_id":"XXXX","resource":"integration-tests-rb-XXXX-sync-metrics_ruby32","service":"aws.lambda","span_id":"XXXX","trace_id":"XXXX","type":"serverless","start":XXXX,"duration":XXXX}]]} +{"traces":[[{"error":0,"meta":{"XXXX": "XXXX"},"metrics":{"XXXX": "XXXX"},"name":"aws.lambda","parent_id":"XXXX","resource":"integration-tests-rb-XXXX-sync-metrics_ruby32","service":"aws.lambda","span_id":"XXXX","trace_id":"XXXX","type":"serverless","start":XXXX,"duration":XXXX}]]} +{"traces":[[{"error":0,"meta":{"XXXX": "XXXX"},"metrics":{"XXXX": "XXXX"},"name":"aws.lambda","parent_id":"XXXX","resource":"integration-tests-rb-XXXX-sync-metrics_ruby32","service":"aws.lambda","span_id":"XXXX","trace_id":"XXXX","type":"serverless","start":XXXX,"duration":XXXX}]]} diff --git a/integration_tests/snapshots/return_values/async-metrics_ruby27_api-gateway-get.json b/integration_tests/snapshots/return_values/async-metrics_api-gateway-get.json similarity index 100% rename from integration_tests/snapshots/return_values/async-metrics_ruby27_api-gateway-get.json rename to integration_tests/snapshots/return_values/async-metrics_api-gateway-get.json diff --git a/integration_tests/snapshots/return_values/async-metrics_ruby27_sns.json b/integration_tests/snapshots/return_values/async-metrics_sns.json similarity index 100% rename from integration_tests/snapshots/return_values/async-metrics_ruby27_sns.json rename to integration_tests/snapshots/return_values/async-metrics_sns.json diff --git a/integration_tests/snapshots/return_values/async-metrics_ruby27_sqs.json b/integration_tests/snapshots/return_values/async-metrics_sqs.json similarity index 100% rename from integration_tests/snapshots/return_values/async-metrics_ruby27_sqs.json rename to integration_tests/snapshots/return_values/async-metrics_sqs.json diff --git a/integration_tests/snapshots/return_values/http-error_ruby27_api-gateway-get.json b/integration_tests/snapshots/return_values/http-error_api-gateway-get.json similarity index 100% rename from integration_tests/snapshots/return_values/http-error_ruby27_api-gateway-get.json rename to integration_tests/snapshots/return_values/http-error_api-gateway-get.json diff --git a/integration_tests/snapshots/return_values/http-error_ruby27_sns.json b/integration_tests/snapshots/return_values/http-error_sns.json similarity index 100% rename from integration_tests/snapshots/return_values/http-error_ruby27_sns.json rename to integration_tests/snapshots/return_values/http-error_sns.json diff --git a/integration_tests/snapshots/return_values/http-error_ruby27_sqs.json b/integration_tests/snapshots/return_values/http-error_sqs.json similarity index 100% rename from integration_tests/snapshots/return_values/http-error_ruby27_sqs.json rename to integration_tests/snapshots/return_values/http-error_sqs.json diff --git a/integration_tests/snapshots/return_values/http-requests_ruby27_api-gateway-get.json b/integration_tests/snapshots/return_values/http-requests_api-gateway-get.json similarity index 100% rename from integration_tests/snapshots/return_values/http-requests_ruby27_api-gateway-get.json rename to integration_tests/snapshots/return_values/http-requests_api-gateway-get.json diff --git a/integration_tests/snapshots/return_values/http-requests_ruby27_sns.json b/integration_tests/snapshots/return_values/http-requests_sns.json similarity index 100% rename from integration_tests/snapshots/return_values/http-requests_ruby27_sns.json rename to integration_tests/snapshots/return_values/http-requests_sns.json diff --git a/integration_tests/snapshots/return_values/http-requests_ruby27_sqs.json b/integration_tests/snapshots/return_values/http-requests_sqs.json similarity index 100% rename from integration_tests/snapshots/return_values/http-requests_ruby27_sqs.json rename to integration_tests/snapshots/return_values/http-requests_sqs.json diff --git a/integration_tests/snapshots/return_values/process-input-traced_ruby27_api-gateway-get.json b/integration_tests/snapshots/return_values/process-input-traced_api-gateway-get.json similarity index 100% rename from integration_tests/snapshots/return_values/process-input-traced_ruby27_api-gateway-get.json rename to integration_tests/snapshots/return_values/process-input-traced_api-gateway-get.json diff --git a/integration_tests/snapshots/return_values/process-input-traced_ruby27_sns.json b/integration_tests/snapshots/return_values/process-input-traced_sns.json similarity index 100% rename from integration_tests/snapshots/return_values/process-input-traced_ruby27_sns.json rename to integration_tests/snapshots/return_values/process-input-traced_sns.json diff --git a/integration_tests/snapshots/return_values/process-input-traced_ruby27_sqs.json b/integration_tests/snapshots/return_values/process-input-traced_sqs.json similarity index 100% rename from integration_tests/snapshots/return_values/process-input-traced_ruby27_sqs.json rename to integration_tests/snapshots/return_values/process-input-traced_sqs.json diff --git a/integration_tests/snapshots/return_values/sync-metrics_ruby27_api-gateway-get.json b/integration_tests/snapshots/return_values/sync-metrics_api-gateway-get.json similarity index 100% rename from integration_tests/snapshots/return_values/sync-metrics_ruby27_api-gateway-get.json rename to integration_tests/snapshots/return_values/sync-metrics_api-gateway-get.json diff --git a/integration_tests/snapshots/return_values/sync-metrics_ruby27_sns.json b/integration_tests/snapshots/return_values/sync-metrics_sns.json similarity index 100% rename from integration_tests/snapshots/return_values/sync-metrics_ruby27_sns.json rename to integration_tests/snapshots/return_values/sync-metrics_sns.json diff --git a/integration_tests/snapshots/return_values/sync-metrics_ruby27_sqs.json b/integration_tests/snapshots/return_values/sync-metrics_sqs.json similarity index 100% rename from integration_tests/snapshots/return_values/sync-metrics_ruby27_sqs.json rename to integration_tests/snapshots/return_values/sync-metrics_sqs.json diff --git a/lib/datadog/lambda.rb b/lib/datadog/lambda.rb index 42f0949..572be42 100644 --- a/lib/datadog/lambda.rb +++ b/lib/datadog/lambda.rb @@ -11,6 +11,7 @@ require 'datadog/lambda/trace/listener' require 'datadog/lambda/utils/logger' +require 'datadog/lambda/utils/extension' require 'datadog/lambda/trace/patch_http' require 'json' require 'time' @@ -35,9 +36,11 @@ def self.configure_apm $stdout.sync = true Datadog.configure do |c| - c.tracing.writer = Datadog::Tracing::SyncWriter.new( - transport: Datadog::Transport::IO.default - ) + unless Datadog::Utils.extension_running + c.tracing.writer = Datadog::Tracing::SyncWriter.new( + transport: Datadog::Transport::IO.default + ) + end c.tags = { "_dd.origin": 'lambda' } yield(c) if block_given? end diff --git a/lib/datadog/lambda/trace/ddtrace.rb b/lib/datadog/lambda/trace/ddtrace.rb index fadd104..89697c6 100644 --- a/lib/datadog/lambda/trace/ddtrace.rb +++ b/lib/datadog/lambda/trace/ddtrace.rb @@ -33,7 +33,7 @@ def wrap_datadog(options, &block) return block.call end - Datadog::Tracing.trace('aws.lambda', options) do |_span| + Datadog::Tracing.trace('aws.lambda', **options) do |_span| block.call end end diff --git a/lib/datadog/lambda/utils/extension.rb b/lib/datadog/lambda/utils/extension.rb new file mode 100644 index 0000000..d3e914a --- /dev/null +++ b/lib/datadog/lambda/utils/extension.rb @@ -0,0 +1,33 @@ +# frozen_string_literal: true + +# +# Unless explicitly stated otherwise all files in this repository are licensed +# under the Apache License Version 2.0. +# +# This product includes software developed at Datadog (https://www.datadoghq.com/). +# Copyright 2023 Datadog, Inc. +# +require 'net/http' + +module Datadog + # Utils contains utility functions shared between modules + module Utils + AGENT_URL = 'http://127.0.0.1:8124' + HELLO_PATH = '/lambda/hello' + EXTENSION_CHECK_URI = URI(AGENT_URL + HELLO_PATH).freeze + EXTENSION_PATH = '/opt/extensions/datadog-agent' + + def self.extension_running + return false unless File.exist?(EXTENSION_PATH) + + begin + Net::HTTP.get(EXTENSION_CHECK_URI) + rescue StandardError => e + Datadog::Utils.logger.debug "extension is not running, returned with error #{e}" + return false + end + + true + end + end +end diff --git a/lib/datadog/lambda/version.rb b/lib/datadog/lambda/version.rb index 097ff48..999d1cc 100644 --- a/lib/datadog/lambda/version.rb +++ b/lib/datadog/lambda/version.rb @@ -12,7 +12,7 @@ module Datadog module Lambda module VERSION MAJOR = 2 - MINOR = 16 + MINOR = 17 PATCH = 0 PRE = nil diff --git a/scripts/add_new_region.sh b/scripts/add_new_region.sh index fa8afc5..a6e5171 100755 --- a/scripts/add_new_region.sh +++ b/scripts/add_new_region.sh @@ -12,8 +12,8 @@ set -e OLD_REGION='us-east-1' -RUBY_VERSIONS_FOR_AWS_CLI=("ruby2.7") -LAYER_NAMES=("Datadog-Ruby2-7") +RUBY_VERSIONS_FOR_AWS_CLI=("ruby2.7" "ruby3.2") +LAYER_NAMES=("Datadog-Ruby2-7" "Datadog-Ruby3-2") NEW_REGION=$1 publish_layer() { diff --git a/scripts/build_layers.sh b/scripts/build_layers.sh index 19e8c50..5923776 100755 --- a/scripts/build_layers.sh +++ b/scripts/build_layers.sh @@ -10,7 +10,7 @@ set -e LAYER_DIR=".layers" LAYER_FILES_PREFIX="datadog-lambda_ruby" -RUBY_VERSIONS=("2.7") +RUBY_VERSIONS=("2.7" "3.2") if [ -z "$RUBY_VERSION" ]; then echo "Ruby version not specified, running for all ruby versions." @@ -29,19 +29,23 @@ function make_path_absolute { } function docker_build_zip { - # Args: [ruby version] [zip destination] + # Args: [ruby version] [zip destination] [architecture] destination=$(make_path_absolute $2) + arch=$3 # Install datadog ruby in a docker container to avoid the mess from switching # between different ruby runtimes. temp_dir=$(mktemp -d) - docker build -t datadog-lambda-layer-ruby:$1 . --no-cache \ - --build-arg "image=lambci/lambda:build-ruby${1}" --build-arg "runtime=${1}.0" + docker buildx build -t datadog-lambda-ruby-${arch}:$1 . --no-cache \ + --build-arg "image=ruby:${1}" \ + --build-arg "runtime=${1}.0" \ + --platform linux/${arch} \ + --load # Run the image by runtime tag, tar its generatd `ruby` directory to sdout, # then extract it to a temp directory. - docker run --rm datadog-lambda-layer-ruby:$1 tar cf - /opt/ruby | tar -xf - -C $temp_dir + docker run --rm datadog-lambda-ruby-${arch}:$1 tar cf - /opt/ruby | tar -xf - -C $temp_dir # Zip to destination, and keep directory structure as based in $temp_dir (cd $temp_dir/opt/ && zip -q -r $destination ./) @@ -55,10 +59,13 @@ mkdir $LAYER_DIR for ruby_version in "${RUBY_VERSIONS[@]}" do - echo "Building layer for ruby${ruby_version}" - docker_build_zip ${ruby_version} $LAYER_DIR/${LAYER_FILES_PREFIX}${ruby_version}.zip + echo "Building layer for Ruby ${ruby_version} arch=arm64" + docker_build_zip ${ruby_version} $LAYER_DIR/${LAYER_FILES_PREFIX}-arm64-${ruby_version}.zip arm64 + + echo "Building layer for Ruby ${ruby_version} arch=amd64" + docker_build_zip ${ruby_version} $LAYER_DIR/${LAYER_FILES_PREFIX}-amd64-${ruby_version}.zip amd64 done echo "Done creating layers:" -ls $LAYER_DIR | xargs -I _ echo "$LAYER_DIR/_" \ No newline at end of file +ls $LAYER_DIR | xargs -I _ echo "$LAYER_DIR/_" diff --git a/scripts/check_layer_size.sh b/scripts/check_layer_size.sh index 5716b85..1c006da 100755 --- a/scripts/check_layer_size.sh +++ b/scripts/check_layer_size.sh @@ -16,11 +16,11 @@ MAX_LAYER_UNCOMPRESSED_SIZE_KB=$(expr 100 \* 1024) LAYER_FILES_PREFIX="datadog-lambda_ruby" LAYER_DIR=".layers" -VERSIONS=("2.7") +VERSIONS=("2.7" "3.2") for version in "${VERSIONS[@]}" do - FILE=$LAYER_DIR/${LAYER_FILES_PREFIX}${version}.zip + FILE=$LAYER_DIR/${LAYER_FILES_PREFIX}-amd64-${version}.zip FILE_SIZE=$(stat --printf="%s" $FILE) FILE_SIZE_KB="$(( ${FILE_SIZE%% *} / 1024))" echo "Layer file ${FILE} has zipped size ${FILE_SIZE_KB} kb" diff --git a/scripts/list_layers.sh b/scripts/list_layers.sh index 9bc248b..36805c7 100755 --- a/scripts/list_layers.sh +++ b/scripts/list_layers.sh @@ -10,7 +10,7 @@ set -e -LAYER_NAMES=("Datadog-Ruby2-7") +LAYER_NAMES=("Datadog-Ruby2-7" "Datadog-Ruby2-7-ARM" "Datadog-Ruby3-2" "Datadog-Ruby3-2-ARM") AVAILABLE_REGIONS=$(aws ec2 describe-regions | jq -r '.[] | .[] | .RegionName') LAYERS_MISSING_REGIONS=() diff --git a/scripts/publish_layers.sh b/scripts/publish_layers.sh index ac9425b..aaa1ec8 100755 --- a/scripts/publish_layers.sh +++ b/scripts/publish_layers.sh @@ -10,9 +10,9 @@ # VERSION is required. set -e -RUBY_VERSIONS_FOR_AWS_CLI=("ruby2.7") -LAYER_PATHS=(".layers/datadog-lambda_ruby2.7.zip") -AVAILABLE_LAYERS=("Datadog-Ruby2-7") +RUBY_VERSIONS_FOR_AWS_CLI=("ruby2.7" "ruby2.7" "ruby3.2" "ruby3.2") +LAYER_PATHS=(".layers/datadog-lambda_ruby-amd64-2.7.zip" ".layers/datadog-lambda_ruby-arm64-2.7.zip" ".layers/datadog-lambda_ruby-amd64-3.2.zip" ".layers/datadog-lambda_ruby-arm64-3.2.zip") +AVAILABLE_LAYERS=("Datadog-Ruby2-7" "Datadog-Ruby2-7-ARM" "Datadog-Ruby3-2" "Datadog-Ruby3-2-ARM") AVAILABLE_REGIONS=$(aws ec2 describe-regions | jq -r '.[] | .[] | .RegionName') @@ -137,4 +137,4 @@ do done done -echo "Done !" \ No newline at end of file +echo "Done !" diff --git a/scripts/run_integration_tests.sh b/scripts/run_integration_tests.sh index 2d2e0b0..c84b57f 100755 --- a/scripts/run_integration_tests.sh +++ b/scripts/run_integration_tests.sh @@ -11,7 +11,7 @@ set -e # These values need to be in sync with serverless.yml, where there needs to be a function # defined for every handler_runtime combination LAMBDA_HANDLERS=("async-metrics" "sync-metrics" "http-requests" "http-error" "process-input-traced") -RUNTIMES=("ruby27") +RUNTIMES=("ruby27" "ruby32") LOGS_WAIT_SECONDS=45 @@ -29,8 +29,9 @@ mismatch_found=false # [1]: ruby version # [2]: random 8-character ID to avoid collisions with other runs ruby27=("ruby2.7" "2.7" $(xxd -l 4 -c 4 -p