From c85c283e7705c5bab2ffc3466b93d4d5152915f2 Mon Sep 17 00:00:00 2001 From: Kim Pohas Date: Mon, 29 Jul 2024 16:45:05 -0700 Subject: [PATCH 1/2] Formatting fixes - OTEL Traces Instrumentation --- blog-cse/2023/12-31.md | 2 +- blog-service/2017/12-31.md | 2 +- .../2024-01-15-active-directory-app-update.md | 2 +- .../microsoft-azure-functions.md | 2 +- .../aws-lambda/java.md | 84 ++++++---------- .../aws-lambda/nodejs.md | 79 +++++---------- .../aws-lambda/python.md | 6 +- .../opentelemetry-instrumentation/go/index.md | 44 ++++---- .../traceid-and-spanid-injection-into-logs.md | 29 ++---- .../java/custom-tags-configuration.md | 20 ++-- .../java/index.md | 4 +- ...panid-injection-into-logs-configuration.md | 28 ++---- .../javascript/index.md | 4 +- .../traceid-spanid-injection-into-logs.md | 62 ++++++------ .../net/index.md | 94 ++++++++---------- .../net/traceid-spanid-injection-into-logs.md | 6 +- .../python/index.md | 4 +- .../traceid-spanid-injection-into-logs.md | 2 +- ...t-up-traces-collection-aws-environments.md | 4 +- docs/apm/traces/spans.md | 2 +- .../apm/traces/view-and-investigate-traces.md | 30 +++--- .../integrations/insight-enrichment-server.md | 6 +- docs/dashboards/panels/map-charts.md | 2 +- .../app-development/jfrog-xray.md | 2 +- .../host-process-metrics.md | 2 +- docs/manage/security/installation-tokens.md | 2 +- .../automatic-installation-script.md | 2 +- .../vmware-carbon-black-cloud-platform.md | 4 +- docs/search/time-compare.md | 2 +- .../install-telegraf.md | 2 +- .../1password-source.md | 2 +- .../carbon-black-cloud-source.md | 2 +- .../carbon-black-inventory-source.md | 2 +- .../netskope-source.md | 2 +- .../collect-logs.md | 4 +- .../install-collector/windows.md | 2 +- .../json-parameters-installed-sources.md | 4 +- static/img/traces/Refresh.png | Bin 20811 -> 19723 bytes 38 files changed, 228 insertions(+), 324 deletions(-) diff --git a/blog-cse/2023/12-31.md b/blog-cse/2023/12-31.md index e6e5c6b35f..dcc6b3e336 100644 --- a/blog-cse/2023/12-31.md +++ b/blog-cse/2023/12-31.md @@ -1021,7 +1021,7 @@ Automations (and other objects) are accessible through the **Configuration** men Automation results are accessible from Insight and Entity detail pages. -**The Insight Enrichment Server and the Actions functionality in Cloud SIEM, which is replaced by the Automation Service, will be deprecated on November 30, 2023.** Until then, they will continue to be fully supported and operational. To aid in migration, all current Enrichment Server examples and Actions have equivalent actions and playbooks in the Automation Service. In addition, through the Bridge, customers can execute any existing Powershell script currently connected to the Insight Enrichment Server. +**The Insight Enrichment Server and the Actions functionality in Cloud SIEM, which is replaced by the Automation Service, will be deprecated on November 30, 2023.** Until then, they will continue to be fully supported and operational. To aid in migration, all current Enrichment Server examples and Actions have equivalent actions and playbooks in the Automation Service. In addition, through the Bridge, customers can execute any existing PowerShell script currently connected to the Insight Enrichment Server. :::note The Automation Service currently has **Limited Availability**. This means that it is fully functional and supported in production environments, but not automatically deployed to every customer. If you would like it deployed to your environment, please contact Sumo Logic and we will enable it for you. diff --git a/blog-service/2017/12-31.md b/blog-service/2017/12-31.md index dd768505a4..7752200491 100644 --- a/blog-service/2017/12-31.md +++ b/blog-service/2017/12-31.md @@ -295,7 +295,7 @@ Bug Fix - In-product notification icons now display correctly. --- ## September 11, 2017 -**Azure Audit**. [The Sumo Logic App for Azure Audit](/docs/integrations/microsoft-azure/audit) is now updated to include the Activity Logs from Event Hub, along with the existing collection from Azure Insight API using Sumo Powershell scripts. For more details, see [collect logs for Azure Audit from Event Hub](/docs/integrations/microsoft-azure/audit). All the pre-configured dashboards in the App, except the Azure Audit - Active Directory dashboard, support logs from both Event Hub and Insight API. This update also includes minor bug fixes and query optimization. +**Azure Audit**. [The Sumo Logic App for Azure Audit](/docs/integrations/microsoft-azure/audit) is now updated to include the Activity Logs from Event Hub, along with the existing collection from Azure Insight API using Sumo PowerShell scripts. For more details, see [collect logs for Azure Audit from Event Hub](/docs/integrations/microsoft-azure/audit). All the pre-configured dashboards in the App, except the Azure Audit - Active Directory dashboard, support logs from both Event Hub and Insight API. This update also includes minor bug fixes and query optimization. --- ## September 1, 2017 diff --git a/blog-service/2024-01-15-active-directory-app-update.md b/blog-service/2024-01-15-active-directory-app-update.md index 9c12b0b470..66c2df0d9a 100644 --- a/blog-service/2024-01-15-active-directory-app-update.md +++ b/blog-service/2024-01-15-active-directory-app-update.md @@ -23,7 +23,7 @@ If you have only the **[Active Directory JSON - OpenTelemetry](/docs/integration - key: `sumo.datasource` - value: `windows` - action: `insert` - 1. Restart the collector by using the following Powershell command `Restart-Service -Name OtelcolSumo`. + 1. Restart the collector by using the following PowerShell command `Restart-Service -Name OtelcolSumo`. If you have both the **[Windows - OpenTelemetry](/docs/integrations/hosts-operating-systems/opentelemetry/windows-opentelemetry)** and **[Active Directory JSON - OpenTelemetry](/docs/integrations/microsoft-azure/opentelemetry/active-directory-json-opentelemetry)** apps installed, you should remove the Active Directory OTEL YAML configuration from your machine to prevent double data ingestion. When upgrading the Active Directory app, there's no need to set up a new collection. diff --git a/docs/alerts/webhook-connections/microsoft-azure-functions.md b/docs/alerts/webhook-connections/microsoft-azure-functions.md index 1d80d96934..db7e927057 100644 --- a/docs/alerts/webhook-connections/microsoft-azure-functions.md +++ b/docs/alerts/webhook-connections/microsoft-azure-functions.md @@ -13,7 +13,7 @@ For example, you can create a scheduled search that triggers an Azure function w First, create an HTTP-triggered Azure function. For more information, see [Azure Functions HTTP triggers and bindings overview](https://docs.microsoft.com/en-us/azure/azure-functions/functions-bindings-http-webhook?tabs=in-process%2Cfunctionsv2&pivots=programming-language-csharp). -1. Create an Azure function using the template **HttpTrigger-Powershell**. +1. Create an Azure function using the template **HttpTrigger-PowerShell**. 1. Copy and paste code of the Azure function into the code field. The following example is an HTTP-triggered PowerShell function: ``` $requestBody = Get-Content $req -Raw | ConvertFrom-Json diff --git a/docs/apm/traces/get-started-transaction-tracing/opentelemetry-instrumentation/aws-lambda/java.md b/docs/apm/traces/get-started-transaction-tracing/opentelemetry-instrumentation/aws-lambda/java.md index 4c0abaf3da..255e1051e7 100644 --- a/docs/apm/traces/get-started-transaction-tracing/opentelemetry-instrumentation/aws-lambda/java.md +++ b/docs/apm/traces/get-started-transaction-tracing/opentelemetry-instrumentation/aws-lambda/java.md @@ -1,6 +1,6 @@ --- id: java -title: AWS Lambda - Java function instrumentation +title: AWS Lambda - Java Function Instrumentation sidebar_label: Java description: Learn how to install and configure OpenTelemetry distributed tracing for AWS Java-based Lambda functions and send data to Sumo Logic. --- @@ -10,7 +10,7 @@ import ApmTrace from '../../../../../reuse/apm-traces-layer-order.md'; This document covers how to install and configure OpenTelemetry distributed tracing for AWS Lambda functions based on Java and send the data to Sumo Logic. -To obtain tracing data from AWS Lambda functions developed in Java, you can use [Sumo Logic Distribution for OpenTelemetry Java Lambda](https://github.com/SumoLogic/sumologic-otel-lambda/tree/main/java). It provides auto instrumentation. +To obtain tracing data from AWS Lambda functions developed in Java, you can use [Sumo Logic Distribution for OpenTelemetry Java Lambda](https://github.com/SumoLogic/sumologic-otel-lambda/tree/main/java), which provides auto-instrumentation. **Sumo Logic OTel Java Lambda layer supports:** @@ -19,53 +19,37 @@ To obtain tracing data from AWS Lambda functions developed in Java, you can use ## Sumo Logic Distribution for OpenTelemetry Lambda layer -You can instrument your AWS Java Lambda function using the [Sumo Logic Distribution for OpenTelemetry Lambda Layer version 1.30.1](https://github.com/SumoLogic/sumologic-otel-lambda/tree/release-java-v1.30.1/java). By default, calls to the Lambda function and AWS Services are instrumented, see the [Manual Instrumentation](#optional-manual-instrumentation) section below if your function is performing some other calls like HTTP requests or database calls. - ### Lambda function requirements You'll need the following: + * Java8 (Corretto) or Java11 (Corretto) * Lambda layers add permissions -* Sumo Logic OTLP/HTTP Source endpoint URL - To send spans from the instrumented Lambda function to Sumo Logic you need an endpoint URL from an existing or new [OTLP/HTTP source](/docs/send-data/hosted-collectors/http-source/otlp). +* Sumo Logic OTLP/HTTP Source endpoint URL. To send spans from the instrumented Lambda function to Sumo Logic you need an endpoint URL from an existing or new OTLP/HTTP source. -1. Navigate to [functions](https://console.aws.amazon.com/lambda/home#/functions) in the AWS Lambda Console and open the function you want to instrument. +You can instrument your AWS Java Lambda function using the [Sumo Logic Distribution for OpenTelemetry Lambda Layer version 1.30.1](https://github.com/SumoLogic/sumologic-otel-lambda/tree/release-java-v1.30.1/java). By default, calls to the Lambda function and AWS Services are instrumented, see the [Manual Instrumentation](#optional-manual-instrumentation) section below if your function is performing some other calls like HTTP requests or database calls. +1. Navigate to [functions](https://console.aws.amazon.com/lambda/home#/functions) in the AWS Lambda Console and open the function you want to instrument. 1. Navigate to the **Layers** section and click **Add a layer**. - -1. In the **Choose a layer** menu, select **Specify an ARN** and paste the ARN ID for your Lambda function AWS Region. Reference the [amd64](#sumo-logic-distro-lambda-layers-for-aws-region---amd64-x86_64-architecture) and [arm64](#sumo-logic-distro-lambda-layers-for-aws-region---arm64-arm-architecture) tables for the ARN ID. - - AWS Lambda Choose a layer option - +1. In the **Choose a layer** menu, select **Specify an ARN** and paste the ARN ID for your Lambda function AWS Region. Reference the [amd64](#sumo-logic-distro-lambda-layers-for-aws-region---amd64-x86_64-architecture) and [arm64](#sumo-logic-distro-lambda-layers-for-aws-region---arm64-arm-architecture) tables for the ARN ID.
AWS Lambda Choose a layer option 1. Ensure the AWS Distro layer is present in the Layers section:
AWS Distro Layers data - :::note ::: - 1. Navigate to the **Configuration > Environment variables** section and set up the following **required** environment variables: - * `AWS_LAMBDA_EXEC_WRAPPER` environment variable configures the appropriate wrapper for a specific type of lambda handler function. Set the value appropriate for your handler: - - * `/opt/otel-handler` - if implementing RequestHandler - * `/opt/otel-proxy-handler` - if implementing RequestHandler but proxied through API Gateway - * `/opt/otel-stream-handler` - if implementing RequestStreamHandler - - * `OTEL_SERVICE_NAME = YOUR_SERVICE_NAME` - Ensure you define it as a string value that represents the function name and its business logic such as "Check SQS Lambda". This will appear as the tracing service name in Sumo Logic. - * `OTEL_RESOURCE_ATTRIBUTES` - Sets OpenTelemetry resources. Add the `deployment.environment=[environment-name]` tag as needed to allow for filtering by environment on dashboard panels. (For more information, see [Services Dashboard Panels](/docs/apm/traces/services-list-map#services-dashboard-panels)). Tracing `application` and `cloud.account.id` are set with the `OTEL_RESOURCE_ATTRIBUTES` environment variable: - - * `application=YOUR_APPLICATION_NAME` - the string value, if the function is a part of complex system/application then set it for all other functions/applications. - - * `cloud.account.id=YOUR_CLOUD_ACCOUNT_ID` - set an additional tag that will contain your [AWS Lambda Account ID](https://docs.aws.amazon.com/general/latest/gr/acct-identifiers.html). This will help to provide more relevant data.  - - All of the attributes above are comma separated key/value pairs (this is also a way to add additional information to the spans, just after comma add additional key=value pair) such as, `OTEL_RESOURCE_ATTRIBUTES=application=YOUR_APPLICATION_NAME,cloud.account.id=123456789012`. - + * `/opt/otel-handler`. If implementing RequestHandler. + * `/opt/otel-proxy-handler`. If implementing RequestHandler but proxied through API Gateway. + * `/opt/otel-stream-handler`. If implementing RequestStreamHandler. + * `OTEL_SERVICE_NAME = YOUR_SERVICE_NAME`. Ensure you define it as a string value that represents the function name and its business logic such as "Check SQS Lambda". This will appear as the tracing service name in Sumo Logic. + * `OTEL_RESOURCE_ATTRIBUTES`. Sets OpenTelemetry resources. Add the `deployment.environment=[environment-name]` tag as needed to allow for filtering by environment on dashboard panels. (For more information, see [Services Dashboard Panels](/docs/apm/traces/services-list-map#services-dashboard-panels)). Tracing `application` and `cloud.account.id` are set with the `OTEL_RESOURCE_ATTRIBUTES` environment variable: + * `application=YOUR_APPLICATION_NAME`. The string value, if the function is a part of complex system/application then set it for all other functions/applications. + * `cloud.account.id=YOUR_CLOUD_ACCOUNT_ID`. Set an additional tag that will contain your [AWS Lambda Account ID](https://docs.aws.amazon.com/general/latest/gr/acct-identifiers.html). This will help to provide more relevant data. All of the attributes above are comma separated key/value pairs (this is also a way to add additional information to the spans, just after comma add additional key=value pair) such as: `OTEL_RESOURCE_ATTRIBUTES=application=YOUR_APPLICATION_NAME,cloud.account.id=123456789012`. * `SUMO_OTLP_HTTP_ENDPOINT_URL` has to be set to send all gathered telemetry data to Sumo Logic. The URL comes from an [OTLP/HTTP source](/docs/send-data/hosted-collectors/http-source/otlp). You can use an existing Source or create a new one, if needed. :::note The `SUMOLOGIC_HTTP_TRACES_ENDPOINT_URL` environment variable is deprecated. You'll need to switch from the HTTP Traces Source to [OTLP/HTTP source](/docs/send-data/hosted-collectors/http-source/otlp) and use the `SUMO_OTLP_HTTP_ENDPOINT_URL` environment variable instead. ::: - List of AWS Lambda environment variables - 1. Your function should be successfully instrumented. Invoke the function and find your traces in the [Sumo Logic Tracing screen](/docs/apm/traces/view-and-investigate-traces). ### Optional manual instrumentation @@ -76,16 +60,12 @@ See the [OpenTelemetry Java Instrumentation](https://github.com/open-telemetry/ library. 1. Add the OkHttp instrumentation package to your Lambda function dependencies. - 1. Update the imports list, add: - ```java import io.opentelemetry.instrumentation.okhttp.v3_0.OkHttpTracing; import io.opentelemetry.api.GlobalOpenTelemetry; ``` - 1. Initialize tracing for the OkHttp library. - ```java okHttpClient client = new OkHttpClient.Builder() @@ -156,14 +136,12 @@ Instrumentation of container-based AWS Lambda function requires some changes in * Docker * Java 1.8+ -* Sumo Logic OTLP/HTTP Source endpoint URL - To send spans from the instrumented Lambda function to Sumo Logic you need an endpoint URL from an existing or new [OTLP/HTTP source](/docs/send-data/hosted-collectors/http-source/otlp). +* Sumo Logic OTLP/HTTP Source endpoint URL. To send spans from the instrumented Lambda function to Sumo Logic you need an endpoint URL from an existing or new [OTLP/HTTP source](/docs/send-data/hosted-collectors/http-source/otlp). ### Lambda function image changes -1. Download and extract Sumo Logic Distribution for OpenTelemetry Java Lambda Layer archive with instrumentation packages specific for your architecture, [amd64 (x86_64)](https://github.com/SumoLogic/sumologic-otel-lambda/releases/download/java-v1.30.1/opentelemetry-java-wrapper-amd64.zip) or [arm64](https://github.com/SumoLogic/sumologic-otel-lambda/releases/download/java-v1.30.1/opentelemetry-java-wrapper-arm64.zip). - -1. Extracted instrumentation libraries have to be added to the image in /opt directory. See the Dockerfile example: - +1. Download and extract Sumo Logic Distribution for OpenTelemetry Java Lambda Layer archive with instrumentation packages specific for your architecture, [amd64 (x86_64)](https://github.com/SumoLogic/sumologic-otel-lambda/releases/download/java-v1.30.1/opentelemetry-java-wrapper-amd64.zip) or [arm64](https://github.com/SumoLogic/sumologic-otel-lambda/releases/download/java-v1.30.1/opentelemetry-java-wrapper-arm64.zip). +1. Add extracted instrumentation libraries to the image in the `/opt` directory. See the Dockerfile example: ```bash FROM public.ecr.aws/lambda/java:11-arm64 # Lambda Function Code @@ -177,7 +155,6 @@ Instrumentation of container-based AWS Lambda function requires some changes in COPY otel-stream-handler /opt/ CMD ["your.lambda.function.RequestHandler::lambdaHandler"] ``` - 1. Rebuild the Docker image. ### Deployment @@ -186,18 +163,17 @@ Instrumentation of container-based AWS Lambda function requires some changes in 2. Deploy new function image. 3. Navigate to the **Configuration > Environment variables** section and set up the following environment variables: * `AWS_LAMBDA_EXEC_WRAPPER` environment variable configures the appropriate wrapper for a specific type of lambda handler function. Set the value appropriate for your handler: - * `/opt/otel-handler` - if implementing `RequestHandler` - * `/opt/otel-proxy-handler` - if implementing `RequestHandler`, but proxied through **API Gateway** - * `/opt/otel-stream-handler` - if implementing `RequestStreamHandler` - * `OTEL_SERVICE_NAME = YOUR_SERVICE_NAME` - Ensure you define it as a string value that represents the function name and its business logic such as "Check SQS Lambda". This will appear as the tracing service name in Sumo Logic. - * `OTEL_TRACES_SAMPLER = always_on` - enables traces sampling - * `OTEL_RESOURCE_ATTRIBUTES` - Sets OpenTelemetry resources. Add the `deployment.environment=[environment-name]` tag as needed to allow for filtering by environment on dashboard panels. (For more information, see [Services Dashboard Panels](/docs/apm/traces/services-list-map#services-dashboard-panels)). Tracing `application` and `cloud.account.id` are set with the `OTEL_RESOURCE_ATTRIBUTES` environment variable: - * `application=YOUR_APPLICATION_NAME` - the string value, if the function is a part of complex system/application then set it for all other functions/applications. - * `cloud.account.id=YOUR_CLOUD_ACCOUNT_ID` - set an additional tag that will contain your [AWS Lambda Account ID](https://docs.aws.amazon.com/general/latest/gr/acct-identifiers.html). This will help to provide more relevant data. All of the attributes above are comma separated key/value pairs (this is also a way to add additional information to the spans, just after comma add additional key=value pair) such as, `OTEL_RESOURCE_ATTRIBUTES=application=YOUR_APPLICATION_NAME,cloud.account.id=123456789012`. + * `/opt/otel-handler`. If implementing `RequestHandler`. + * `/opt/otel-proxy-handler`. If implementing `RequestHandler`, but proxied through **API Gateway** + * `/opt/otel-stream-handler`. If implementing `RequestStreamHandler` + * `OTEL_SERVICE_NAME = YOUR_SERVICE_NAME`. Ensure you define it as a string value that represents the function name and its business logic such as "Check SQS Lambda". This will appear as the tracing service name in Sumo Logic. + * `OTEL_TRACES_SAMPLER = always_on`. Enables traces sampling. + * `OTEL_RESOURCE_ATTRIBUTES`. Sets OpenTelemetry resources. Add the `deployment.environment=[environment-name]` tag as needed to allow for filtering by environment on dashboard panels. (For more information, see [Services Dashboard Panels](/docs/apm/traces/services-list-map#services-dashboard-panels)). Tracing `application` and `cloud.account.id` are set with the `OTEL_RESOURCE_ATTRIBUTES` environment variable: + * `application=YOUR_APPLICATION_NAME`. The string value, if the function is a part of complex system/application then set it for all other functions/applications. + * `cloud.account.id=YOUR_CLOUD_ACCOUNT_ID`. Set an additional tag that will contain your [AWS Lambda Account ID](https://docs.aws.amazon.com/general/latest/gr/acct-identifiers.html). This will help to provide more relevant data. All of the attributes above are comma separated key/value pairs (this is also a way to add additional information to the spans, just after comma add additional key=value pair) such as: `OTEL_RESOURCE_ATTRIBUTES=application=YOUR_APPLICATION_NAME,cloud.account.id=123456789012`. * `SUMO_OTLP_HTTP_ENDPOINT_URL` has to be set to send all gathered telemetry data to Sumo Logic. The URL comes from an [OTLP/HTTP source](/docs/send-data/hosted-collectors/http-source/otlp). You can use an existing Source or create a new one, if needed. - :::note - The `SUMOLOGIC_HTTP_TRACES_ENDPOINT_URL` environment variable is deprecated. You'll need to switch from the HTTP Traces Source to [OTLP/HTTP source](/docs/send-data/hosted-collectors/http-source/otlp) and use the `SUMO_OTLP_HTTP_ENDPOINT_URL` environment variable instead. - ::: - -
List of AWS Lambda environment variables -4. Your function should be successfully instrumented. Invoke the function and find your traces in the [Sumo Logic Tracing screen](/docs/apm/traces/view-and-investigate-traces). The instructions above instrument only requests related to the handler function. To instrument other calls like HTTP calls, DB calls additional libraries have to be added to the Docker image. See [supported libraries, frameworks and application servers](https://github.com/open-telemetry/opentelemetry-java-instrumentation#supported-libraries-frameworks-and-application-servers). + :::note + The `SUMOLOGIC_HTTP_TRACES_ENDPOINT_URL` environment variable is deprecated. You'll need to switch from the HTTP Traces Source to [OTLP/HTTP source](/docs/send-data/hosted-collectors/http-source/otlp) and use the `SUMO_OTLP_HTTP_ENDPOINT_URL` environment variable instead. + ::: + List of AWS Lambda environment variables +4. Your function should be successfully instrumented. Invoke the function and find your traces in the [Sumo Logic Tracing screen](/docs/apm/traces/view-and-investigate-traces). The instructions above instrument only requests related to the handler function. To instrument other calls like HTTP calls and DB calls, you'll need to add additional libraries to the Docker image. See [Supported libraries, frameworks and application servers](https://github.com/open-telemetry/opentelemetry-java-instrumentation#supported-libraries-frameworks-and-application-servers). diff --git a/docs/apm/traces/get-started-transaction-tracing/opentelemetry-instrumentation/aws-lambda/nodejs.md b/docs/apm/traces/get-started-transaction-tracing/opentelemetry-instrumentation/aws-lambda/nodejs.md index e88b8c35cb..48af3d700f 100644 --- a/docs/apm/traces/get-started-transaction-tracing/opentelemetry-instrumentation/aws-lambda/nodejs.md +++ b/docs/apm/traces/get-started-transaction-tracing/opentelemetry-instrumentation/aws-lambda/nodejs.md @@ -10,7 +10,7 @@ import ApmTrace from '../../../../../reuse/apm-traces-layer-order.md'; This document covers how to install and configure OpenTelemetry distributed tracing for AWS Lambda functions based on NodeJS and send the data to Sumo Logic. -To obtain tracing data from AWS Lambda functions developed in Node.js you can use [Sumo Logic Distribution for OpenTelemetry NodeJS Lambda](https://github.com/SumoLogic/sumologic-otel-lambda/tree/main/nodejs). It provides auto instrumentation. +To obtain tracing data from AWS Lambda functions developed in Node.js, you can use [Sumo Logic Distribution for OpenTelemetry NodeJS Lambda](https://github.com/SumoLogic/sumologic-otel-lambda/tree/main/nodejs), which provides auto-instrumentation. **Sumo Logic OTel NodeJS Lambda layer supports:** @@ -30,40 +30,24 @@ It is very simple to instrument your AWS NodeJS Lambda function using the Sumo L * Sumo Logic OTLP/HTTP Source endpoint URL - To send spans from the instrumented Lambda function to Sumo Logic you need an endpoint URL from an existing or new [OTLP/HTTP source](/docs/send-data/hosted-collectors/http-source/otlp). 1. Navigate to [functions](https://console.aws.amazon.com/lambda/home#/functions) in the AWS Lambda Console and open the function you want to instrument. - 1. Navigate to the **Layers** section and click **Add a layer**. - -1. In the **Choose a layer** menu, select **Specify an ARN** and paste the ARN ID for your Lambda function AWS Region. Reference the [amd64](#sumo-logic-distro-lambda-layers-for-aws-region---amd64-x86_64-architecture) and [arm64](#sumo-logic-distro-lambda-layers-for-aws-region---arm64-arm-architecture) tables for the ARN ID. - - Choose a layer - -1. Ensure the AWS Distro layer is present in the Layers section: - - Layers section - +1. In the **Choose a layer** menu, select **Specify an ARN** and paste the ARN ID for your Lambda function AWS Region. Reference the [amd64](#sumo-logic-distro-lambda-layers-for-aws-region---amd64-x86_64-architecture) and [arm64](#sumo-logic-distro-lambda-layers-for-aws-region---arm64-arm-architecture) tables for the ARN ID.
Choose a layer +1. Ensure the AWS Distro layer is present in the Layers section:
Layers section :::note ::: - 1. Navigate to the **Configuration > Environment variables** section and set up the following environment variables (the first are three **required**): - - * `AWS_LAMBDA_EXEC_WRAPPER = /opt/otel-handler` - Enables auto-instrumentation. - * `OTEL_TRACES_SAMPLER = always_on` - Enables traces sampling. - * `OTEL_SERVICE_NAME = YOUR_SERVICE_NAME` - Ensure you define it as a string value that represents the function name and its business logic such as "Check SQS Lambda". This will appear as the tracing service name in Sumo Logic. - * `OTEL_RESOURCE_ATTRIBUTES` - Sets OpenTelemetry resources. Add the `deployment.environment=[environment-name]` tag as needed to allow for filtering by environment on dashboard panels. (For more information, see [Services Dashboard Panels](/docs/apm/traces/services-list-map#services-dashboard-panels)). Tracing `application` and `cloud.account.id` are set with the `OTEL_RESOURCE_ATTRIBUTES` environment variable: - - * `application=YOUR_APPLICATION_NAME` - the string value, if the function is a part of complex system/application then set it for all other functions/applications. - * `cloud.account.id=YOUR_CLOUD_ACCOUNT_ID` - set an additional tag that will contain your [AWS Lambda Account ID](https://docs.aws.amazon.com/general/latest/gr/acct-identifiers.html). This will help to provide more relevant data.  - - All of the attributes above are comma separated key/value pairs (this is also a way to add additional information to the spans, just after comma add additional key=value pair) such as, `OTEL_RESOURCE_ATTRIBUTES=application=YOUR_APPLICATION_NAME,cloud.account.id=123456789012`. - + * `AWS_LAMBDA_EXEC_WRAPPER = /opt/otel-handler`. Enables auto-instrumentation. + * `OTEL_TRACES_SAMPLER = always_on`. Enables traces sampling. + * `OTEL_SERVICE_NAME = YOUR_SERVICE_NAME`. Ensure you define it as a string value that represents the function name and its business logic such as "Check SQS Lambda". This will appear as the tracing service name in Sumo Logic. + * `OTEL_RESOURCE_ATTRIBUTES`. Sets OpenTelemetry resources. Add the `deployment.environment=[environment-name]` tag as needed to allow for filtering by environment on dashboard panels. (For more information, see [Services Dashboard Panels](/docs/apm/traces/services-list-map#services-dashboard-panels)). Tracing `application` and `cloud.account.id` are set with the `OTEL_RESOURCE_ATTRIBUTES` environment variable: + * `application=YOUR_APPLICATION_NAME`. the string value, if the function is a part of complex system/application then set it for all other functions/applications. + * `cloud.account.id=YOUR_CLOUD_ACCOUNT_ID`. set an additional tag that will contain your [AWS Lambda Account ID](https://docs.aws.amazon.com/general/latest/gr/acct-identifiers.html). This will help to provide more relevant data. All of the attributes above are comma separated key/value pairs (this is also a way to add additional information to the spans, just after comma add additional key=value pair) such as: `OTEL_RESOURCE_ATTRIBUTES=application=YOUR_APPLICATION_NAME,cloud.account.id=123456789012`. * `SUMO_OTLP_HTTP_ENDPOINT_URL` has to be set to send all gathered telemetry data to Sumo Logic. The URL comes from an [OTLP/HTTP source](/docs/send-data/hosted-collectors/http-source/otlp). You can use an existing Source or create a new one, if needed. :::note The `SUMOLOGIC_HTTP_TRACES_ENDPOINT_URL` environment variable is deprecated. You'll need to switch from the HTTP Traces Source to [OTLP/HTTP source](/docs/send-data/hosted-collectors/http-source/otlp) and use the `SUMO_OTLP_HTTP_ENDPOINT_URL` environment variable instead. ::: - Environment variables - 1. Your function should be successfully instrumented. Invoke the function and find your traces in the [Sumo Logic Tracing screen](/docs/apm/traces/view-and-investigate-traces). ### Sumo Logic Distro Lambda layers for AWS Region - amd64 (x86_64) architecture @@ -112,18 +96,17 @@ The following are the Sumo Logic OTel Lambda layers for AWS Region for arm64. | us-east-2 | arn:aws:lambda:us-east-2:663229565520:layer:sumologic-otel-lambda-nodejs-arm64-v1-17-2:1 | | us-west-2 | arn:aws:lambda:us-west-2:663229565520:layer:sumologic-otel-lambda-nodejs-arm64-v1-17-2:1 | -## Sumo Logic OTel Lambda container instrumentation +## Sumo Logic Distribution for OpenTelemetry Lambda container instrumentation -[Sumo Logic Distribution for OpenTelemetry Lambda Layer version 1.17.2](https://github.com/SumoLogic/sumologic-otel-lambda/tree/release-nodejs-v1.17.2/nodejs) also provides packed [OpenTelemetry NodeJS](https://github.com/open-telemetry/opentelemetry-js) libraries for container based Lambda functions. +[Sumo Logic Distribution for OpenTelemetry Lambda Layer version 1.17.2](https://github.com/SumoLogic/sumologic-otel-lambda/tree/release-nodejs-v1.17.2/nodejs) also provides packed [OpenTelemetry NodeJS](https://github.com/open-telemetry/opentelemetry-js) libraries for container-based Lambda functions. :::note The instructions below support only [AWS Base Images for Lambda](https://docs.aws.amazon.com/lambda/latest/dg/runtimes-images.html). ::: -### Container based lambda requirements +### Container-based lambda requirements -Instrumentation of container based AWS Lambda function requires some -changes in the Dockerfile and image rebuild. You'll need the following: +Instrumentation of container-based AWS Lambda function requires some changes in the Dockerfile and image rebuild. You'll need the following: * Docker * NodeJS v16.x or newer @@ -132,10 +115,8 @@ changes in the Dockerfile and image rebuild. You'll need the following: ### Lambda function image changes 1. Download and extract Sumo Logic OTel Lambda archive with instrumentation packages specific for your architecture - [amd64 (x86_64)](https://github.com/SumoLogic/sumologic-otel-lambda/releases/download/nodejs-v1.17.2/opentelemetry-nodejs-amd64.zip) or [arm64](https://github.com/SumoLogic/sumologic-otel-lambda/releases/download/nodejs-v1.17.2/opentelemetry-nodejs-arm64.zip). - -1. Extracted instrumentation libraries have to be added to the image in /opt directory. Please see Dockerfile example: - - ```dockerfile +1. Add extracted instrumentation libraries to the image in the `/opt` directory. See the following Dockerfile example: + ```sh FROM public.ecr.aws/lambda/nodejs:16-arm64 # Lambda Function Code @@ -143,7 +124,7 @@ changes in the Dockerfile and image rebuild. You'll need the following: COPY package.json ${LAMBDA_TASK_ROOT} RUN  npm install - **# Copy OT Instrumentation + # Copy OT Instrumentation COPY collector-config/ /opt/collector-config/ COPY extensions/ /opt/extensions/ COPY nodejs/ /opt/nodejs/ @@ -151,38 +132,26 @@ changes in the Dockerfile and image rebuild. You'll need the following: COPY wrapper.d.ts /opt/ COPY wrapper.d.ts.map /opt/ COPY wrapper.js /opt/ - COPY wrapper.js.map /opt/** + COPY wrapper.js.map /opt/ CMD \[ "index.handler" \] ``` - 1. Rebuild docker image. ### Deployment 1. Navigate to [functions](https://console.aws.amazon.com/lambda/home#/functions) in the AWS Lambda Console and open the function you want to instrument. - 1. Deploy new function image. - 1. Navigate to the **Configuration > Environment variables** section and set up the following environment variables: - - * `AWS_LAMBDA_EXEC_WRAPPER = /opt/otel-handler` - Enables auto-instrumentation. - * `OTEL_TRACES_SAMPLER = always_on` - Enables traces sampling. - * `OTEL_SERVICE_NAME = YOUR_SERVICE_NAME` - Sets the tracing service name in Sumo Logic. Make sure to define it as a string value that represents the function name and its business logic, such as "Check SQS Lambda". - * `OTEL_RESOURCE_ATTRIBUTES` - Sets OpenTelemetry resources. Add the `deployment.environment=[environment-name]` tag as needed to allow for filtering by environment on dashboard panels. (For more information, see [Services Dashboard Panels](/docs/apm/traces/services-list-map#services-dashboard-panels)). Tracing `application` and `cloud.account.id` are set with the `OTEL_RESOURCE_ATTRIBUTES` environment variable: - - * `application=YOUR_APPLICATION_NAME` - the string value, if the function is a part of complex system/application then set it for all other functions/applications. - * `cloud.account.id=YOUR_CLOUD_ACCOUNT_ID` - set an additional tag that will contain your [AWS Lambda Account ID](https://docs.aws.amazon.com/general/latest/gr/acct-identifiers.html). This will help to provide more relevant data.  - - All of the attributes above are comma separated key/value pairs (this is also a way to add additional information to the spans, just after comma add additional key=value pair) such as, `OTEL_RESOURCE_ATTRIBUTES=application=YOUR_APPLICATION_NAME,cloud.account.id=123456789012`. - + * `AWS_LAMBDA_EXEC_WRAPPER = /opt/otel-handler`. Enables auto-instrumentation. + * `OTEL_TRACES_SAMPLER = always_on`. Enables traces sampling. + * `OTEL_SERVICE_NAME = YOUR_SERVICE_NAME`. Sets the tracing service name in Sumo Logic. Make sure to define it as a string value that represents the function name and its business logic, such as "Check SQS Lambda". + * `OTEL_RESOURCE_ATTRIBUTES`. Sets OpenTelemetry resources. Add the `deployment.environment=[environment-name]` tag as needed to allow for filtering by environment on dashboard panels. (For more information, see [Services Dashboard Panels](/docs/apm/traces/services-list-map#services-dashboard-panels)). Tracing `application` and `cloud.account.id` are set with the `OTEL_RESOURCE_ATTRIBUTES` environment variable: + * `application=YOUR_APPLICATION_NAME`. the string value, if the function is a part of complex system/application then set it for all other functions/applications. + * `cloud.account.id=YOUR_CLOUD_ACCOUNT_ID`. set an additional tag that will contain your [AWS Lambda Account ID](https://docs.aws.amazon.com/general/latest/gr/acct-identifiers.html). This will help to provide more relevant data. All of the attributes above are comma separated key/value pairs (this is also a way to add additional information to the spans, just after comma add additional key=value pair) such as: `OTEL_RESOURCE_ATTRIBUTES=application=YOUR_APPLICATION_NAME,cloud.account.id=123456789012`. * `SUMO_OTLP_HTTP_ENDPOINT_URL` has to be set to send all gathered telemetry data to Sumo Logic. The URL comes from an [OTLP/HTTP source](/docs/send-data/hosted-collectors/http-source/otlp). You can use an existing Source or create a new one, if needed. :::note The `SUMOLOGIC_HTTP_TRACES_ENDPOINT_URL` environment variable is deprecated. You'll need to switch from the HTTP Traces Source to [OTLP/HTTP source](/docs/send-data/hosted-collectors/http-source/otlp) and use the `SUMO_OTLP_HTTP_ENDPOINT_URL` environment variable instead. ::: - - * `SUMO_OTEL_DISABLE_AWS_CONTEXT_PROPAGATION` (optional, default: true, values: true, false) - in case of `xray trace context` propagation (AWS) set to `false`. - - Environment variables - + * `SUMO_OTEL_DISABLE_AWS_CONTEXT_PROPAGATION` (optional, default: true, values: true, false). In case of `xray trace context` propagation (AWS), set to `false`.
Environment variables 1. Your function should be successfully instrumented. Invoke the function and find your traces in the [Sumo Logic Tracing screen](/docs/apm/traces/view-and-investigate-traces). diff --git a/docs/apm/traces/get-started-transaction-tracing/opentelemetry-instrumentation/aws-lambda/python.md b/docs/apm/traces/get-started-transaction-tracing/opentelemetry-instrumentation/aws-lambda/python.md index ec18aa8e9c..a22f36c6b8 100644 --- a/docs/apm/traces/get-started-transaction-tracing/opentelemetry-instrumentation/aws-lambda/python.md +++ b/docs/apm/traces/get-started-transaction-tracing/opentelemetry-instrumentation/aws-lambda/python.md @@ -1,6 +1,6 @@ --- id: python -title: AWS Lambda - Python function instrumentation +title: AWS Lambda - Python Function Instrumentation sidebar_label: Python description: Learn how to install and configure OpenTelemetry distributed tracing for AWS Lambda functions written in Python and send data to Sumo Logic. --- @@ -8,7 +8,7 @@ description: Learn how to install and configure OpenTelemetry distributed tracin import useBaseUrl from '@docusaurus/useBaseUrl'; import ApmTrace from '../../../../../reuse/apm-traces-layer-order.md'; -This document covers how to install and configure OpenTelemetry distributed tracing for AWS Lambda functions written in Python and send data to Sumo Logic. To obtain telemetry data from AWS Lambda functions developed in Python language you can use the [Sumo Logic Distribution for OpenTelemetry Python Lambda](https://github.com/SumoLogic/sumologic-otel-lambda/tree/main/python). +This document covers how to install and configure OpenTelemetry distributed tracing for AWS Lambda functions written in Python and send data to Sumo Logic. To obtain telemetry data from AWS Lambda functions developed in Python language, you can use the [Sumo Logic Distribution for OpenTelemetry Python Lambda](https://github.com/SumoLogic/sumologic-otel-lambda/tree/main/python), which provides auto-instrumentation. Sumo Logic OTel Python Lambda layer supports: @@ -43,7 +43,7 @@ It is very simple to instrument your AWS Python Lambda function using the Sumo L * `OTEL_RESOURCE_ATTRIBUTES` - Sets OpenTelemetry resources. Add the `deployment.environment=[environment-name]` tag as needed to allow for filtering by environment on dashboard panels. (For more information, see [Services Dashboard Panels](/docs/apm/traces/services-list-map#services-dashboard-panels)). Tracing `application` and `cloud.account.id` are set with the `OTEL_RESOURCE_ATTRIBUTES` environment variable: * `application=YOUR_APPLICATION_NAME` - The string value, if the function is a part of complex system/application then set it for all other functions/applications. * `cloud.account.id=YOUR_CLOUD_ACCOUNT_ID` - Set an additional tag that will contain your [AWS Lambda Account ID](https://docs.aws.amazon.com/general/latest/gr/acct-identifiers.html). This will help to provide more relevant data. - All of the attributes above are comma separated key/value pairs (this is also a way to add additional information to the spans, just after comma add additional key=value pair) such as, `OTEL_RESOURCE_ATTRIBUTES=application=YOUR_APPLICATION_NAME,cloud.account.id=123456789012`. + All of the attributes above are comma separated key/value pairs (this is also a way to add additional information to the spans, just after comma add additional key=value pair) such as: `OTEL_RESOURCE_ATTRIBUTES=application=YOUR_APPLICATION_NAME,cloud.account.id=123456789012`. * `SUMO_OTLP_HTTP_ENDPOINT_URL` has to be set to send all gathered telemetry data to Sumo Logic. The URL comes from an [OTLP/HTTP source](/docs/send-data/hosted-collectors/http-source/otlp). You can use an existing Source or create a new one, if needed. :::note The `SUMOLOGIC_HTTP_TRACES_ENDPOINT_URL` environment variable is deprecated. You'll need to switch from the HTTP Traces Source to [OTLP/HTTP source](/docs/send-data/hosted-collectors/http-source/otlp) and use the `SUMO_OTLP_HTTP_ENDPOINT_URL` environment variable instead. diff --git a/docs/apm/traces/get-started-transaction-tracing/opentelemetry-instrumentation/go/index.md b/docs/apm/traces/get-started-transaction-tracing/opentelemetry-instrumentation/go/index.md index eafa37e723..26e4c4654c 100644 --- a/docs/apm/traces/get-started-transaction-tracing/opentelemetry-instrumentation/go/index.md +++ b/docs/apm/traces/get-started-transaction-tracing/opentelemetry-instrumentation/go/index.md @@ -1,23 +1,15 @@ --- slug: /apm/traces/get-started-transaction-tracing/opentelemetry-instrumentation/go -title: Go OpenTelemetry auto-instrumentation -sidebar_label: Go OpenTelemetry auto-instrumentation -description: OpenTelemetry Golang instrumentation gives you the possibility to capture telemetry (metrics and traces) data from code written in Golang. +title: Go OpenTelemetry Auto-Instrumentation +sidebar_label: OpenTelemetry Auto-Instrumentation +description: OpenTelemetry Go instrumentation gives you the possibility to capture telemetry (metrics and traces) data from code written in Go. --- -OpenTelemetry Golang instrumentation gives you the ability to capture telemetry (metrics and traces) data from code written in Golang. The best way is to use https://github.com/open-telemetry/opentelemetry-go. See the list of [supported libraries](https://github.com/open-telemetry/opentelemetry-go-contrib/tree/v1.24.0/instrumentation#instrumentation-packages). +OpenTelemetry Go instrumentation gives you the ability to capture telemetry (metrics and traces) data from code written in Go. The best way is to use [OpenTelemetry-Go](https://github.com/open-telemetry/opentelemetry-go). See the [list of supported libraries](https://github.com/open-telemetry/opentelemetry-go-contrib/tree/v1.24.0/instrumentation#instrumentation-packages). -## Instrumentation types +## Automatic instrumentation -### Automatic instrumentation - -The best way to use Golang instrumentation is to include a [supported library](https://github.com/open-telemetry/opentelemetry-go-contrib/tree/v1.24.0/instrumentation#instrumentation-packages) into your code. See below for steps required to instrument the application automatically. - -### Manual instrumentation - -If you’re using libraries that are not officially supported or in case you want to be very specific and granular with instrumentation, you can instrument your code manually using https://pkg.go.dev/go.opentelemetry.io/otel/api. Examples of using manual instrumentation can be found in [https://github.com/open-telemetry/opentelemetry-go/tree/master/example](https://github.com/open-telemetry/opentelemetry-go/tree/main/example) - -## Automatic instrumentation steps +The best way to use Go instrumentation is to include a [supported library](https://github.com/open-telemetry/opentelemetry-go-contrib/tree/v1.24.0/instrumentation#instrumentation-packages) in your code. See below for steps required to instrument the application automatically. The instructions below apply to version **v1.24.0 (sdk) and 0.49.0 (instrumentation)** of **OpenTelemetry**. @@ -30,7 +22,7 @@ go get -u go.opentelemetry.io/otel@v1.24.0 go get -u go.opentelemetry.io/otel/sdk@v1.24.0 ``` -It downloads and installs OpenTelemetry package for golang. It includes APIs for traces. +It downloads and installs OpenTelemetry package for Go. It includes APIs for traces. Next, you'll install the spans exporter. There are currently three supported protocols OTLP, Zipkin and Jaeger. Sumo Logic recommends the OTLP HTTP exporter. Execute the command below: @@ -55,11 +47,11 @@ go get go.opentelemetry.io/contrib/instrumentation/net/http/otelhttp@v0.49.0 ### Import and initialize instrumentation packages  -To get traces from your application you need to import instrumented libraries and initialize them. An Example of an HTTP client-server app using an instrumented library can be found [here](https://github.com/open-telemetry/opentelemetry-go-contrib/tree/main/instrumentation/net/http/otelhttp/example#http-client-server-example). +To get traces from your application, you need to import instrumented libraries and initialize them. An example of an HTTP client-server app using an instrumented library can be found [here](https://github.com/open-telemetry/opentelemetry-go-contrib/tree/main/instrumentation/net/http/otelhttp/example#http-client-server-example). -Tracing initialization requires a few steps to be ready. The first one is to configure the OTLP HTTP exporter client. The next step is to set up a Batch Span Processor responsible for batching spans and then TracerProvider. For details of the configuration see [TracerProvider](https://github.com/open-telemetry/opentelemetry-go/blob/v1.24.0/sdk/trace/provider.go#L35) implementation. Last part of the code is responsible for trace context propagation. +Tracing initialization requires a few steps to be ready. The first one is to configure the OTLP HTTP exporter client. The next step is to set up a Batch Span Processor responsible for batching spans and then TracerProvider. For configuration details, see [TracerProvider](https://github.com/open-telemetry/opentelemetry-go/blob/v1.24.0/sdk/trace/provider.go#L35) implementation. Last part of the code is responsible for trace context propagation. -```golang +```go func initTracer() { ctx := context.Background() @@ -84,9 +76,9 @@ func initTracer() { } ``` -After preparing the tracing initialization code use the initTracer() method and instrumented library. See the following example HTTP client main function: +After preparing the tracing initialization code, use the `initTracer()` method and instrumented library. See the following example HTTP client main function: -```golang +```go func main() { initTracer() @@ -110,9 +102,9 @@ func main() { The last step is to configure few other things like: -* `SERVICE_NAME` - insert the application service name. Ensure the string value represents its business logic, such as "SumoWebCall". This will appear as a tracing service name in Sumo Logic. -* `APPLICATION_NAME` - insert the application name. This will appear as a tracing application name in Sumo Logic. Additional attributes can be added here as comma separated key=value pairs. For example, add the `deployment.environment=[environment-name]` tag as needed to allow for filtering by environment on dashboard panels (for more information, see [Services Dashboard Panels](/docs/apm/traces/services-list-map#services-dashboard-panels)). -* `ENDPOINT_ADDRESS` - OTLP HTTP (default port 4318) endpoint address must be provided with the location of the OpenTelemetry Collector/Agent (recommended for production) or [OTLP/HTTP source](/docs/send-data/hosted-collectors/http-source/otlp). Refer to the following setup instructions if you haven't yet installed a collector: +* `SERVICE_NAME`. Insert the application service name. Ensure the string value represents its business logic, such as "SumoWebCall". This will appear as a tracing service name in Sumo Logic. +* `APPLICATION_NAME`. Insert the application name. This will appear as a tracing application name in Sumo Logic. Additional attributes can be added here as comma separated key=value pairs. For example, add the `deployment.environment=[environment-name]` tag as needed to allow for filtering by environment on dashboard panels (for more information, see [Services Dashboard Panels](/docs/apm/traces/services-list-map#services-dashboard-panels)). +* `ENDPOINT_ADDRESS`. OTLP HTTP (default port 4318) endpoint address must be provided with the location of the OpenTelemetry Collector/Agent (recommended for production) or [OTLP/HTTP source](/docs/send-data/hosted-collectors/http-source/otlp). Refer to the following setup instructions if you haven't yet installed a collector: * [Set up traces collection for Kubernetes environments](/docs/apm/traces/get-started-transaction-tracing/set-up-traces-collection-for-kubernetes-environments.md) * [Set up traces collection for other environments usage](/docs/apm/traces/get-started-transaction-tracing/set-up-traces-collection-for-other-environments.md) @@ -122,4 +114,8 @@ All of them can be configured by [environment variables](https://github.com/ope export OTEL_EXPORTER_OTLP_ENDPOINT="ENDPOINT_ADDRESS" export OTEL_SERVICE_NAME="SERVICE_NAME" export OTEL_RESOURCE_ATTRIBUTES="application=APPLICATION_NAME,deployment.environment=ENVIRONMENT_NAME" -``` \ No newline at end of file +``` + +## Manual instrumentation + +If you’re using libraries that are not officially supported, or if you want to be very specific and granular with instrumentation, you can instrument your code manually using https://pkg.go.dev/go.opentelemetry.io/otel/api. Examples of using manual instrumentation can be found [here](https://github.com/open-telemetry/opentelemetry-go/tree/main/example) diff --git a/docs/apm/traces/get-started-transaction-tracing/opentelemetry-instrumentation/go/traceid-and-spanid-injection-into-logs.md b/docs/apm/traces/get-started-transaction-tracing/opentelemetry-instrumentation/go/traceid-and-spanid-injection-into-logs.md index ac076a471d..0c8cb051de 100644 --- a/docs/apm/traces/get-started-transaction-tracing/opentelemetry-instrumentation/go/traceid-and-spanid-injection-into-logs.md +++ b/docs/apm/traces/get-started-transaction-tracing/opentelemetry-instrumentation/go/traceid-and-spanid-injection-into-logs.md @@ -1,26 +1,23 @@ --- id: traceid-and-spanid-injection-into-logs -title: Go TraceId and SpanId injection into logs +title: Go TraceId and SpanId Injection into Logs sidebar_label: TraceId and SpanId injection into logs -description: Learn how to configure traceId and spanId data injection into user logs in GoLang applications using Logrus logging library. +description: Learn how to configure traceId and spanId data injection into user logs in Go applications using Logrus logging library. --- -This page describes how to configure **traceId** and **spanId** data injection into user logs in GoLang applications using Logrus logging library. Essentially, you only need to add tracing dependencies and injecting the `span_id` and `trace_id` into relevant logs. +This page describes how to configure **spanId** and **traceId** data injection into user logs in Go applications using the Logrus logging library. The process involves adding the necessary tracing dependencies and injecting the `span_id` and `trace_id` into relevant logs. ## Logrus instrumentation 1. Import dependency: - - ``` + ```go import ( oteltrace "go.opentelemetry.io/otel/trace" "github.com/sirupsen/logrus" ) ``` - 1. Configure logrus to format logs and extract span data by spanName: - - ``` + ```go func main() { // Ensure logrus behaves like TTY is disabled logrus.SetFormatter(&logrus.TextFormatter{ @@ -29,10 +26,8 @@ This page describes how to configure **traceId** and **spanId** data injection i }) } ``` - -1. Prepare a function which will return logrus fields with `span_id` and `trace_id`: - - ``` +1. Prepare a function that will return logrus fields with `span_id` and `trace_id`: + ```go func LogrusFields(span oteltrace.Span) logrus.Fields { return logrus.Fields{ "span_id": span.SpanContext().SpanID().String(), @@ -40,13 +35,11 @@ This page describes how to configure **traceId** and **spanId** data injection i } } ``` - 1. Use the fields function in your logging, whenever there's a tracing context available: - - ``` + ```go ... - _, span := tracer.Start(ctx, "spanName", ...) - defer span.End() - logrus.WithFields(helper.LogrusFields(span)).Info("Some message...") + _, span := tracer.Start(ctx, "spanName", ...) + defer span.End() + logrus.WithFields(helper.LogrusFields(span)).Info("Some message...") ... ``` diff --git a/docs/apm/traces/get-started-transaction-tracing/opentelemetry-instrumentation/java/custom-tags-configuration.md b/docs/apm/traces/get-started-transaction-tracing/opentelemetry-instrumentation/java/custom-tags-configuration.md index 0d1a31a225..e62ad95280 100644 --- a/docs/apm/traces/get-started-transaction-tracing/opentelemetry-instrumentation/java/custom-tags-configuration.md +++ b/docs/apm/traces/get-started-transaction-tracing/opentelemetry-instrumentation/java/custom-tags-configuration.md @@ -1,13 +1,12 @@ --- id: custom-tags-configuration -title: Custom tags configuration -sidebar_label: Custom tags configuration +title: Custom Tags Configuration description: Custom tags configuration for Java OpenTelemetry Instrumentation. --- ## Custom tags configuration via startup parameter -You can use `OTEL_RESOURCE_ATTRIBUTES=` startup parameter to pass a custom static tag to all spans generated in the service. For example: +You can use the `OTEL_RESOURCE_ATTRIBUTES=` startup parameter to pass a custom static tag to all spans generated in the service. For example: ```bash OTEL_RESOURCE_ATTRIBUTES="service.name=Accounts" @@ -18,15 +17,14 @@ Add the `deployment.environment=[environment-name]` tag as needed to allow for f ## Custom tags configuration through your code -If the default tags are not providing enough relevant data you can add custom tags or attributes into spans. Follow these steps: +If the default tags are not providing enough relevant data, you can add custom tags or attributes into spans. Follow these steps: -## Step 1: Satisfy project dependencies +### Step 1: Satisfy project dependencies Add the [opentelemetry-sdk](https://mvnrepository.com/artifact/io.opentelemetry/opentelemetry-sdk/1.40.0) library. * Maven projects - - ```maven + ```xml io.opentelemetry @@ -34,16 +32,14 @@ Add the [opentelemetry-sdk](https://mvnrepository.com/artifact/io.opentelemetry/ 1.40.0 ``` - * Gradle projects - - ```gradle + ``` dependencies { compile 'io.opentelemetry:opentelemetry-sdk:1.40.0' } ``` -## Step 2: Import dependencies +### Step 2: Import dependencies Import dependencies in the application Java class file: @@ -51,7 +47,7 @@ Import dependencies in the application Java class file: import io.opentelemetry.api.trace.Span; ``` -## Step 3: Add custom tag into Span +### Step 3: Add custom tag into Span Use the following to add a custom tag: diff --git a/docs/apm/traces/get-started-transaction-tracing/opentelemetry-instrumentation/java/index.md b/docs/apm/traces/get-started-transaction-tracing/opentelemetry-instrumentation/java/index.md index 3c056c0dbb..77a02bbc4b 100644 --- a/docs/apm/traces/get-started-transaction-tracing/opentelemetry-instrumentation/java/index.md +++ b/docs/apm/traces/get-started-transaction-tracing/opentelemetry-instrumentation/java/index.md @@ -1,7 +1,7 @@ --- slug: /apm/traces/get-started-transaction-tracing/opentelemetry-instrumentation/java -title: Java OpenTelemetry auto-instrumentation -sidebar_label: Java OpenTelemetry auto-instrumentation +title: Java OpenTelemetry Auto-Instrumentation +sidebar_label: OpenTelemetry Auto-Instrumentation description: OpenTelemetry Instrumentation for Java automatically detects when one of the popular libraries is being used in the service and injects the instrumentation without writing any code. --- diff --git a/docs/apm/traces/get-started-transaction-tracing/opentelemetry-instrumentation/java/traceid-spanid-injection-into-logs-configuration.md b/docs/apm/traces/get-started-transaction-tracing/opentelemetry-instrumentation/java/traceid-spanid-injection-into-logs-configuration.md index 9b9177d31f..8666784c1c 100644 --- a/docs/apm/traces/get-started-transaction-tracing/opentelemetry-instrumentation/java/traceid-spanid-injection-into-logs-configuration.md +++ b/docs/apm/traces/get-started-transaction-tracing/opentelemetry-instrumentation/java/traceid-spanid-injection-into-logs-configuration.md @@ -1,16 +1,16 @@ --- id: traceid-spanid-injection-into-logs-configuration -title: TraceId and SpanId injection into logs configuration -sidebar_label: TraceId and SpanId injection into logs configuration -description: It is simple to configure traceId and spanId data injection into user logs in Java applications. +title: Java TraceId and SpanId Injection into Logs Configuration +sidebar_label: TraceId and SpanId Injection into Logs Configuration +description: Learn how to configure traceId and spanId data injection into user logs in Java applications. --- +This page describes how to configure **spanId** and **traceId** data injection into user logs in Java applications. + ## Log4j instrumentation 1. Add instrumented **Log4j2** and **OpenTelemetry-api** libraries into the project dependencies: - - * Maven projects - + * Maven projects ```xml @@ -21,17 +21,13 @@ description: It is simple to configure traceId and spanId data injection into us ``` - * Gradle projects - ```gradle dependencies { runtimeOnly("io.opentelemetry.instrumentation:opentelemetry-log4j-context-data-2.17-autoconfigure:2.6.0-alpha") } ``` - -1. Update the **log4j2.xml** configuration file, typically stored in **resources** directory, with `traceId`, `spanId`, `and sampled` keys. The following is an example configuration. - +1. Update the **log4j2.xml** configuration file, typically stored in **resources** directory, with `traceId`, `spanId`, and `sampled` keys. The following is an example configuration. ```xml @@ -51,9 +47,7 @@ description: It is simple to configure traceId and spanId data injection into us ## Logback instrumentation 1. Add instrumented **logback** library into the project dependencies: - * Maven projects - ```xml @@ -64,17 +58,13 @@ description: It is simple to configure traceId and spanId data injection into us ``` - - * Gradle projects - + * Gradle projects ```gradle dependencies { runtimeOnly("io.opentelemetry.instrumentation:opentelemetry-logback-mdc-1.0:2.6.0-alpha") } ``` - -1. Update the **logback.xml** configuration file, typically stored in the **resources** directory, with `traceId`, `spanId`, `and sampled` keys. The following is an example configuration. - +1. Update the **logback.xml** configuration file, typically stored in the **resources** directory, with `traceId`, `spanId`, and `sampled` keys. The following is an example configuration. ```xml diff --git a/docs/apm/traces/get-started-transaction-tracing/opentelemetry-instrumentation/javascript/index.md b/docs/apm/traces/get-started-transaction-tracing/opentelemetry-instrumentation/javascript/index.md index 7de7a6ed98..49d4e5c6af 100644 --- a/docs/apm/traces/get-started-transaction-tracing/opentelemetry-instrumentation/javascript/index.md +++ b/docs/apm/traces/get-started-transaction-tracing/opentelemetry-instrumentation/javascript/index.md @@ -1,7 +1,7 @@ --- slug: /apm/traces/get-started-transaction-tracing/opentelemetry-instrumentation/javascript -title: JavaScript OpenTelemetry auto-instrumentation -sidebar_label: JavaScript OpenTelemetry auto-instrumentation +title: JavaScript OpenTelemetry Auto-Instrumentation +sidebar_label: OpenTelemetry Auto-Instrumentation description: Learn how to instrument your JavaScript/NodeJS services using the Sumo Logic distribution for OpenTelemetry JS (recommended) or the official OpenTelemetry distribution. --- diff --git a/docs/apm/traces/get-started-transaction-tracing/opentelemetry-instrumentation/javascript/traceid-spanid-injection-into-logs.md b/docs/apm/traces/get-started-transaction-tracing/opentelemetry-instrumentation/javascript/traceid-spanid-injection-into-logs.md index fcbb7e4ecc..8906a16c11 100644 --- a/docs/apm/traces/get-started-transaction-tracing/opentelemetry-instrumentation/javascript/traceid-spanid-injection-into-logs.md +++ b/docs/apm/traces/get-started-transaction-tracing/opentelemetry-instrumentation/javascript/traceid-spanid-injection-into-logs.md @@ -2,10 +2,10 @@ id: traceid-spanid-injection-into-logs title: JavaScript TraceId and SpanId injection into logs sidebar_label: TraceId and SpanId injection into logs -description: Configuring traceId, spanId, and trace flags data injection into user logs in JavaScript applications is simple. +description: Learn how to configure traceId, spanId, and trace flags data injection into user logs in JavaScript applications. --- -It is very simple to configure **traceId, spanId, and trace flags data** injection into user logs in JavaScript applications. Mostly it is enough to add instrumented versions of the logging packages into project dependencies and register them as new instrumentation. +Configuring the injection of **traceId**, **spanId**, and **trace flags** data into user logs in JavaScript applications is straightforward. Typically, you only need to add instrumented versions of the logging packages to your project dependencies and register them as new instrumentation. :::note The examples below are compatible with **OpenTelemetry JS API and SDK 1.0+**. @@ -15,16 +15,16 @@ The examples below are compatible with **OpenTelemetry JS API and SDK 1.0+**. The following information walks through [winston](https://www.npmjs.com/package/winston) logger [OpenTelemetry instrumentation](https://www.npmjs.com/package/@opentelemetry/instrumentation-winston): -1. Package dependency installation: +1. Install package dependency. ```bash npm install --save @opentelemetry/instrumentation-winston ``` -1. winston instrumentation registration should be added in the file where OpenTelemetry JS instrumentation is configured. See [Sumo Logic OpenTelemetry JS auto-instrumentation](/docs/apm/traces/get-started-transaction-tracing/opentelemetry-instrumentation/javascript) for details. - * Import dependency: +1. Add winston instrumentation registration to the file where OpenTelemetry JS instrumentation is configured. See [Sumo Logic OpenTelemetry JS auto-instrumentation](/docs/apm/traces/get-started-transaction-tracing/opentelemetry-instrumentation/javascript) for details. + 1. Import dependency: ```js const { WinstonInstrumentation } = require('@opentelemetry/instrumentation-winston'); ``` - * Register WinstonInstrumentation + 1. Register `WinstonInstrumentation`: ```js registerInstrumentations({ instrumentations: [ @@ -38,16 +38,16 @@ The following information walks through [winston](https://www.npmjs.com/package/ The following information walks through [bunyan](https://www.npmjs.com/package/bunyan) logger [OpenTelemetry instrumentation](https://www.npmjs.com/package/@opentelemetry/instrumentation-bunyan): -1. Package dependency installation: +1. Install package dependency: ```bash npm install --save @opentelemetry/instrumentation-bunyan ``` -1. bunyan instrumentation registration should be added in the file where OpenTelemetry JS instrumentation is configured. See [Sumo Logic OpenTelemetry JS auto-instrumentation](/docs/apm/traces/get-started-transaction-tracing/opentelemetry-instrumentation/javascript) for details. +1. Add bunyan instrumentation registration to the file where OpenTelemetry JS instrumentation is configured. See [Sumo Logic OpenTelemetry JS auto-instrumentation](/docs/apm/traces/get-started-transaction-tracing/opentelemetry-instrumentation/javascript) for details. * Import dependency. ```js const { BunyanInstrumentation } = require('@opentelemetry/instrumentation-bunyan'); ``` - * Register BunyanInstrumentation. + * Register `BunyanInstrumentation`. ```js registerInstrumentations({ instrumentations: [ @@ -61,16 +61,16 @@ The following information walks through [bunyan](https://www.npmjs.com/package/b The following information walks through [pino](https://www.npmjs.com/package/pino) logger [OpenTelemetry instrumentation](https://www.npmjs.com/package/@opentelemetry/instrumentation-pino). -1. Package dependency installation. +1. Install package dependency. ```bash npm install --save @opentelemetry/instrumentation-pino ``` -1. pino instrumentation registration should be added in the file where OpenTelemetry JS instrumentation is configured. See [Sumo Logic OpenTelemetry JS auto-instrumentation](/docs/apm/traces/get-started-transaction-tracing/opentelemetry-instrumentation/javascript) for details. +1. Add pino instrumentation registration to the file where OpenTelemetry JS instrumentation is configured. See [Sumo Logic OpenTelemetry JS auto-instrumentation](/docs/apm/traces/get-started-transaction-tracing/opentelemetry-instrumentation/javascript) for details. * Import dependency. ```js const { PinoInstrumentation } = require('@opentelemetry/instrumentation-pino'); ``` - * Register PinoInstrumentation. + * Register `PinoInstrumentation`. ```sql registerInstrumentations({ instrumentations: [ @@ -84,30 +84,30 @@ The following information walks through [pino](https://www.npmjs.com/package/pin In the case of custom loggers, the most important thing is to know how to obtain the current traceId, spanId, and trace flag. Follow the steps below: -1. Package dependency installation. +1. Install package dependency. ```bash npm install --save @opentelemetry/api ``` 1. Current **span Context** extraction is the way to obtain required data. * Import dependency. - ```js - const api = require('@opentelemetry/api'); - ```` + ```js + const api = require('@opentelemetry/api'); + ``` * Get a current span. - ```js - let current_span = api.trace.getSpan(api.context.active()); - ``` - * Obtain trace_id, span_id and trace flag. - ```js - let trace_id = current_span.spanContext().traceId; - let span_id = current_span.spanContext().spanId; - let trace_flags = current_span.spanContext().traceFlags; - ``` + ```js + let current_span = api.trace.getSpan(api.context.active()); + ``` + * Obtain `trace_id`, `span_id` and `trace` flag. + ```js + let trace_id = current_span.spanContext().traceId; + let span_id = current_span.spanContext().spanId; + let trace_flags = current_span.spanContext().traceFlags; + ``` * Example usage. - ```js - console.log(`Example log trace_id:”${trace_id}” span_id:”${span_id}” trace_flags:”${trace_flags}”`); - ``` + ```js + console.log(`Example log trace_id:”${trace_id}” span_id:”${span_id}” trace_flags:”${trace_flags}”`); + ``` * Example output. - ```js - Example log trace_id:"b2fa3d72711c1adad9ec88348c46f449" span_id:"85733005b2678b28" trace_flags:"1" - ``` + ```js + Example log trace_id:"b2fa3d72711c1adad9ec88348c46f449" span_id:"85733005b2678b28" trace_flags:"1" + ``` diff --git a/docs/apm/traces/get-started-transaction-tracing/opentelemetry-instrumentation/net/index.md b/docs/apm/traces/get-started-transaction-tracing/opentelemetry-instrumentation/net/index.md index e3a2e58c4d..8ec19fc073 100644 --- a/docs/apm/traces/get-started-transaction-tracing/opentelemetry-instrumentation/net/index.md +++ b/docs/apm/traces/get-started-transaction-tracing/opentelemetry-instrumentation/net/index.md @@ -1,7 +1,7 @@ --- slug: /apm/traces/get-started-transaction-tracing/opentelemetry-instrumentation/net -title: .NET OpenTelemetry auto-instrumentation -sidebar_label: .NET OpenTelemetry auto-instrumentation +title: .NET OpenTelemetry Auto-Instrumentation +sidebar_label: OpenTelemetry Auto-Instrumentation description: The simplest way to start capturing telemetry data is to implement the solution coming from OpenTelemetry-dotNet. --- @@ -12,18 +12,18 @@ Automatic instrumentation of the .NET applications is a very easy task. The simp It is important to understand difference between two types of instrumentations that are available in .NET. * **Fully automatic instrumentation** does not require code. -* **Partially automatic instrumentation**, which is called library instrumentation by the opentelemetry community, requires some initialization in the code. It is partial auto-instrumentation as traces are generated automatically depending on settings provided by developer(s) during the initialization phase. +* **Partially automatic instrumentation**, which is called *library instrumentation* by the OpenTelemetry community, requires some initialization in the code. It is partial auto-instrumentation as traces are generated automatically depending on settings provided by developer(s) during the initialization phase. :::note The below description applies to [v1.6.0](https://github.com/open-telemetry/opentelemetry-dotnet-instrumentation/releases/tag/v1.6.0). ::: -## How to instrument a .NET application automatically (Windows) +## Instrument a .NET application automatically (Windows) -OpenTelemetry .NET Automatic Instrumentation has to be installed via Powershell -module, process require administrator permissions. +OpenTelemetry .NET Automatic Instrumentation has to be installed via PowerShell +module. This process requires administrator permissions. -```powershell +```sh # Download the module $module_url = "https://github.com/open-telemetry/opentelemetry-dotnet-instrumentation/releases/download/v1.6.0/OpenTelemetry.DotNet.Auto.psm1" $download_path = Join-Path $env:temp "OpenTelemetry.DotNet.Auto.psm1" @@ -38,7 +38,7 @@ Install-OpenTelemetryCore After installation, you can set the service name and run the application. -```powershell +```sh # Set up the instrumentation for the current PowerShell session. # Can be done via environment variable. Register-OpenTelemetryForCurrentSession -OTelServiceName "MyServiceDisplayName" @@ -53,7 +53,7 @@ The final step is to configure the exporter endpoint, service and application na More extensive description of all available options can be found [here](https://github.com/open-telemetry/opentelemetry-dotnet-instrumentation/blob/main/docs/config.md) -```powershell +```sh # Run your application with instrumentation .\MyNetApp.exe ``` @@ -67,7 +67,7 @@ ASP.NET application that runs on IIS requires two additional steps. This step requires to execute following command in powershell. -```powershell +```sh # Setup IIS instrumentation Register-OpenTelemetryForIIS ``` @@ -102,10 +102,10 @@ Second, update `applicationHost.config`, which is located in `%SystemDrive%\Wind The final step is to configure the exporter endpoint, service and application name otherwise defaults will be used. In this example, the instrumentation will be configured by environment variables. -* `OTEL_EXPORTER_OTLP_PROTOCOL=http/protobuf` - configures OTLP exporter to use OTLP HTTP protocol -* `OTEL_EXPORTER_OTLP_ENDPOINT=http://OTLP_HTTP_ENDPOINT:4318` - environment variable configures the endpoint where telemetry data will be sent. The value of the variable points to the default Sumologic Kubernetes Collector. -* `OTEL_SERVICE_NAME=SERVICE_NAME` - configure the service name. Ensure the string value represents its business logic, such as "FinanceServiceCall". This will appear as a tracing service name in Sumo Logic. -* `OTEL_RESOURCE_ATTRIBUTES=application=APPLICATION_NAME` - configure the application name. This will appear as a tracing application name in Sumo Logic. Additional attributes can be added here as comma separated key=value pairs. +* `OTEL_EXPORTER_OTLP_PROTOCOL=http/protobuf`. Configures OTLP exporter to use OTLP HTTP protocol +* `OTEL_EXPORTER_OTLP_ENDPOINT=http://OTLP_HTTP_ENDPOINT:4318`. Environment variable configures the endpoint where telemetry data will be sent. The value of the variable points to the default Sumologic Kubernetes Collector. +* `OTEL_SERVICE_NAME=SERVICE_NAME`. Configure the service name. Ensure the string value represents its business logic, such as "FinanceServiceCall". This will appear as a tracing service name in Sumo Logic. +* `OTEL_RESOURCE_ATTRIBUTES=application=APPLICATION_NAME`. Configure the application name. This will appear as a tracing application name in Sumo Logic. Additional attributes can be added here as comma separated key=value pairs. More extensive description of the installation process is available on the following [page](https://github.com/open-telemetry/opentelemetry-dotnet-instrumentation/blob/main/docs/iis-instrumentation.md). Advanced configuration methods are described [here](https://github.com/open-telemetry/opentelemetry-dotnet-instrumentation/blob/main/docs/config.md#configuration-methods). @@ -118,22 +118,22 @@ Internal OpenTelemetry DotNet auto-instrumentation logs are available in: For more information see the [documentation](https://github.com/open-telemetry/opentelemetry-dotnet-instrumentation/blob/main/docs/config.md#internal-logs). -## How to instrument your ASP.NET Core application (library instrumentation) +## Instrument a ASP.NET Core application (library instrumentation) There are a few simple steps to instrument the application and obtain telemetry data. -### Step 1. Packages installation +### Step 1. Install packages The installation of the packages listed below is required to apply the instrumentation and export telemetry data. ```bash -$ dotnet add package OpenTelemetry -v 1.8.1 +$ dotnet add package OpenTelemetry -v 1.8.1 $ dotnet add package OpenTelemetry.Exporter.OpenTelemetryProtocol -v 1.8.1 $ dotnet add package OpenTelemetry.Instrumentation.AspNetCore -v 1.8.1 $ dotnet add package OpenTelemetry.Extensions.Hosting -v 1.8.1 ``` -### Step 2. Instrumentation initialization +### Step 2. Initialize instrumentation In this step, all the magic related to code instrumentation will happen. To enable instrumentation in the application it is enough to add the code below into your Startup class in the ConfigureServices method. @@ -152,7 +152,7 @@ var otel = builder.Services.AddOpenTelemetry(); var otelResources = ResourceBuilder.CreateEmpty() .AddTelemetrySdk() .AddEnvironmentVariableDetector(); - + // Configure tracing otel.WithTracing(tracing => { @@ -167,16 +167,16 @@ var app = builder.Build(); ``` -### Step 3. Instrumentation configuration +### Step 3. Configure instrumentation The final step is to provide configuration for instrumentation. There are a few things which have to be configured: exporter endpoint, service, and application name. Configuration can be provided using environment variables or `appsettings.json` file. #### Environment variables -* `OTEL_EXPORTER_OTLP_PROTOCOL=http/protobuf` - configures OTLP exporter to use OTLP HTTP protocol -* `OTEL_EXPORTER_OTLP_ENDPOINT=http://OTLP_HTTP_ENDPOINT:4318/v1/traces` - environment variable configures the endpoint where telemetry data will be sent. The value of the variable points to OpenTelemetry Collector/Agent (recommended for production) or [OTLP/HTTP source](/docs/send-data/hosted-collectors/http-source/otlp). -* `OTEL_SERVICE_NAME=SERVICE_NAME` - configure the service name. Ensure the string value represents its business logic, such as "FinanceServiceCall". This will appear as a tracing service name in Sumo Logic. -* `OTEL_RESOURCE_ATTRIBUTES=application=APPLICATION_NAME` - configure the application name. This will appear as a tracing application name in Sumo Logic. Additional attributes can be added here as comma separated key=value pairs. +* `OTEL_EXPORTER_OTLP_PROTOCOL=http/protobuf`. Configures OTLP exporter to use OTLP HTTP protocol +* `OTEL_EXPORTER_OTLP_ENDPOINT=http://OTLP_HTTP_ENDPOINT:4318/v1/traces`. Environment variable configures the endpoint where telemetry data will be sent. The value of the variable points to OpenTelemetry Collector/Agent (recommended for production) or [OTLP/HTTP source](/docs/send-data/hosted-collectors/http-source/otlp). +* `OTEL_SERVICE_NAME=SERVICE_NAME`. Configure the service name. Ensure the string value represents its business logic, such as "FinanceServiceCall". This will appear as a tracing service name in Sumo Logic. +* `OTEL_RESOURCE_ATTRIBUTES=application=APPLICATION_NAME`. Configure the application name. This will appear as a tracing application name in Sumo Logic. Additional attributes can be added here as comma separated key=value pairs. #### appsettings.json file @@ -203,7 +203,7 @@ var otelServiceName = builder.Configuration.GetValue("OTEL_SERVICE_NAME" var otelResources = ResourceBuilder.CreateEmpty() // Configure service name .AddService(serviceName: otelServiceName) - + // Add your additional attributes e.g. application=AssetDomain .AddAttributes(new Dictionary { @@ -227,11 +227,11 @@ otel.WithTracing(tracing => }); ``` -## How to instrument your ASP.NET application (library instrumentation) +## Instrument a ASP.NET application (library instrumentation) Instrumentation of the .NET application requires a little more effort but is still simple. -### Step 1. Packages installation +### Step 1. Install packages The installation of the packages listed below is required to apply the instrumentation and export telemetry data. @@ -318,10 +318,10 @@ The final step is to provide configuration for instrumentation. There are a few #### Environment variables -* `OTEL_EXPORTER_OTLP_PROTOCOL=http/protobuf` - configures OTLP exporter to use OTLP HTTP protocol -* `OTEL_EXPORTER_OTLP_ENDPOINT=http://OTLP_HTTP_ENDPOINT:4318/v1/traces` - environment variable configures the endpoint where telemetry data will be sent. The value of the variable points to OpenTelemetry Collector/Agent (recommended for production) or [OTLP/HTTP source](/docs/send-data/hosted-collectors/http-source/otlp). -* `OTEL_SERVICE_NAME=SERVICE_NAME` - configure the service name. Ensure the string value represents its business logic, such as "FinanceServiceCall". This will appear as a tracing service name in Sumo Logic. -* `OTEL_RESOURCE_ATTRIBUTES=application=APPLICATION_NAME` - configure the application name. This will appear as a tracing application name in Sumo Logic. Additional attributes can be added here as comma separated key=value pairs. +* `OTEL_EXPORTER_OTLP_PROTOCOL=http/protobuf`. Configures OTLP exporter to use OTLP HTTP protocol +* `OTEL_EXPORTER_OTLP_ENDPOINT=http://OTLP_HTTP_ENDPOINT:4318/v1/traces`. Environment variable configures the endpoint where telemetry data will be sent. The value of the variable points to OpenTelemetry Collector/Agent (recommended for production) or [OTLP/HTTP source](/docs/send-data/hosted-collectors/http-source/otlp). +* `OTEL_SERVICE_NAME=SERVICE_NAME`. Configure the service name. Ensure the string value represents its business logic, such as "FinanceServiceCall". This will appear as a tracing service name in Sumo Logic. +* `OTEL_RESOURCE_ATTRIBUTES=application=APPLICATION_NAME`. Configure the application name. This will appear as a tracing application name in Sumo Logic. Additional attributes can be added here as comma separated key=value pairs. #### web.config file @@ -380,17 +380,13 @@ $ dotnet add package OpenTelemetry.Instrumentation.GrpcNetClient -v 1.8.0-beta.1 and a small code change, in addition to the GrpcClient instrumentation `.AddGrpcClientInstrumentation()`. More details can be found [here](https://github.com/open-telemetry/opentelemetry-dotnet/tree/Instrumentation.GrpcNetClient-1.8.0-beta.1/src/OpenTelemetry.Instrumentation.GrpcNetClient#grpcnetclient-instrumentation-for-opentelemetry). -* .NET Core code example: - - ```cs + ```cs title=".NET Core code example" services.AddOpenTelemetryTracing((builder) => builder .AddAspNetCoreInstrumentation() .AddGrpcClientInstrumentation() ``` -* .NET code example: - - ```cs + ```cs title=".NET code example" this.tracerProvider = Sdk.CreateTracerProviderBuilder() .AddAspNetInstrumentation() .AddGrpcClientInstrumentation() @@ -408,17 +404,13 @@ and a small code change, in addition to the HttpClient instrumentation `.AddHttpClientInstrumentation()`. More details can be found [here](https://github.com/open-telemetry/opentelemetry-dotnet/tree/Instrumentation.Http-1.8.0/src/OpenTelemetry.Instrumentation.Http#httpclient-and-httpwebrequest-instrumentation-for-opentelemetry). -* .NET Core code example - - ```cs + ```cs title=".NET Core code example" services.AddOpenTelemetryTracing((builder) => builder .AddAspNetCoreInstrumentation() .AddHttpClientInstrumentation() ``` -* .NET code example - - ```cs + ```cs title=".NET code example" this.tracerProvider = Sdk.CreateTracerProviderBuilder() .AddAspNetInstrumentation() .AddHttpClientInstrumentation() @@ -434,17 +426,13 @@ $ dotnet add package OpenTelemetry.Instrumentation.StackExchangeRedis -v 1.0.0-r and a small code change, in addition to the Redis instrumentation `.AddRedisInstrumentation(connection)` Redis instrumentation requires a connection to the Redis server. More details can be found [here](https://github.com/open-telemetry/opentelemetry-dotnet-contrib/tree/Instrumentation.StackExchangeRedis-1.0.0-rc9.14/src/OpenTelemetry.Instrumentation.StackExchangeRedis#stackexchangeredis-instrumentation-for-opentelemetry). -* .NET Core code example - - ```cs + ```cs title=".NET Core code example" services.AddOpenTelemetryTracing((builder) => builder .AddAspNetCoreInstrumentation() .AddRedisInstrumentation(connection) ``` -* .NET code example - - ```cs + ```cs title=".NET code example" this.tracerProvider = Sdk.CreateTracerProviderBuilder() .AddAspNetInstrumentation() .AddRedisInstrumentation(connection) @@ -460,17 +448,13 @@ $ dotnet add package OpenTelemetry.Instrumentation.SqlClient -v 1.8.0-beta.1 and a small code change, in addition to the SqlClient instrumentation `.AddSqlClientInstrumentation()`. More details can be found [here](https://github.com/open-telemetry/opentelemetry-dotnet/tree/Instrumentation.SqlClient-1.8.0-beta.1/src/OpenTelemetry.Instrumentation.SqlClient). -* .NET Core code example - - ```cs + ```cs title=".NET Core code example" services.AddOpenTelemetryTracing((builder) => builder .AddAspNetCoreInstrumentation() .AddSqlClientInstrumentation() ``` -* .NET code example - - ```cs + ```cs title=".NET code example" this.tracerProvider = Sdk.CreateTracerProviderBuilder() .AddAspNetInstrumentation() .AddSqlClientInstrumentation() diff --git a/docs/apm/traces/get-started-transaction-tracing/opentelemetry-instrumentation/net/traceid-spanid-injection-into-logs.md b/docs/apm/traces/get-started-transaction-tracing/opentelemetry-instrumentation/net/traceid-spanid-injection-into-logs.md index e9f30b31c3..324456175d 100644 --- a/docs/apm/traces/get-started-transaction-tracing/opentelemetry-instrumentation/net/traceid-spanid-injection-into-logs.md +++ b/docs/apm/traces/get-started-transaction-tracing/opentelemetry-instrumentation/net/traceid-spanid-injection-into-logs.md @@ -1,13 +1,13 @@ --- id: traceid-spanid-injection-into-logs -title: .NET TraceId and SpanId injection into logs configuration +title: .NET TraceId and SpanId Injection into Logs Configuration sidebar_label: TraceId and SpanId injection into logs description: Learn how to configure traceId, spanId, and trace flags data injection into user logs in .NET applications. --- This page describes how to configure traceId and spanId data injection into user logs from ASP.NET and .Net core. The goal is to correlate the relevant logs with your corresponding traces and spans. -The injection allows you to click a link from the Trace View tab and launch a search tab that displays the logs with the linked traceid/spanid. These logs should be stored in the Continuous data tier as the links in Sumo Logic default to searching there instead of other data tiers. It's worth noting that to search actual traces and not the logs, those can be found in `_index=_trace_spans`. +The injection allows you to click a link from the Trace View tab and launch a search tab that displays the logs with the linked trace ID and span ID. These logs should be stored in the Continuous data tier, as the links in Sumo Logic default to searching there instead of other data tiers. It's worth noting that to search actual traces and not the logs, those can be found in `_index=_trace_spans`. ## .NET Core @@ -55,6 +55,6 @@ The injection allows you to click a link from the Trace View tab and launch a se ``` -## Additional Information +## Additional information * [NLog.DiagnosticSource | GitHub](https://github.com/NLog/NLog.DiagnosticSource) diff --git a/docs/apm/traces/get-started-transaction-tracing/opentelemetry-instrumentation/python/index.md b/docs/apm/traces/get-started-transaction-tracing/opentelemetry-instrumentation/python/index.md index 37df8e6741..3ba3525c40 100644 --- a/docs/apm/traces/get-started-transaction-tracing/opentelemetry-instrumentation/python/index.md +++ b/docs/apm/traces/get-started-transaction-tracing/opentelemetry-instrumentation/python/index.md @@ -1,7 +1,7 @@ --- slug: /apm/traces/get-started-transaction-tracing/opentelemetry-instrumentation/python -title: Python OpenTelemetry auto-instrumentation -sidebar_label: Python OpenTelemetry auto-instrumentation +title: Python OpenTelemetry Auto-Instrumentation +sidebar_label: OpenTelemetry Auto-Instrumentation description: Learn how to configure OpenTelemetry Python instrumentation to capture data from the python written code applications. --- diff --git a/docs/apm/traces/get-started-transaction-tracing/opentelemetry-instrumentation/python/traceid-spanid-injection-into-logs.md b/docs/apm/traces/get-started-transaction-tracing/opentelemetry-instrumentation/python/traceid-spanid-injection-into-logs.md index b05a71b104..1b9cf71e17 100644 --- a/docs/apm/traces/get-started-transaction-tracing/opentelemetry-instrumentation/python/traceid-spanid-injection-into-logs.md +++ b/docs/apm/traces/get-started-transaction-tracing/opentelemetry-instrumentation/python/traceid-spanid-injection-into-logs.md @@ -1,6 +1,6 @@ --- id: traceid-spanid-injection-into-logs -title: Python TraceId and SpanId injection into logs configuration +title: Python TraceId and SpanId Injection into Logs Configuration sidebar_label: TraceId and SpanId injection into logs description: Learn how to configure traceId, spanId, and trace flags data injection into user logs in Python applications. --- diff --git a/docs/apm/traces/get-started-transaction-tracing/set-up-traces-collection-aws-environments.md b/docs/apm/traces/get-started-transaction-tracing/set-up-traces-collection-aws-environments.md index 671e992b4c..221e49bdef 100644 --- a/docs/apm/traces/get-started-transaction-tracing/set-up-traces-collection-aws-environments.md +++ b/docs/apm/traces/get-started-transaction-tracing/set-up-traces-collection-aws-environments.md @@ -106,7 +106,7 @@ You'll need an ECS Cluster where the Sumo Logic Distribution for OpenTelemetry C The Sumo Logic Distribution for OpenTelemetry Collector can receive data from various receivers - these ports should be configured in the Security Group: * OTLP - ports: 4317/tcp, 4318/tcp ::: - * SUBNETS - same as Security Groups, Subnets have to be configured for AWS Fargate. To find Subnets used on the cluster, use the VPC ID from Security Group and search for it on the list [here](https://console.aws.amazon.com/vpc/home#subnets:). In the case of multiple Subnets use a comma as a separator, such as, `subnet-xyz,subnet-xyz`. + * SUBNETS - same as Security Groups, Subnets have to be configured for AWS Fargate. To find Subnets used on the cluster, use the VPC ID from Security Group and search for it on the list [here](https://console.aws.amazon.com/vpc/home#subnets:). In the case of multiple Subnets use a comma as a separator, such as: `subnet-xyz,subnet-xyz`. 1. It is necessary to provide the configuration to the Collector. This can be done by creating the parameter in the [AWS Parameter Store](https://docs.aws.amazon.com/systems-manager/latest/userguide/systems-manager-parameter-store.html) by running the following command: @@ -139,7 +139,7 @@ You'll need an ECS Cluster where the Sumo Logic Distribution for OpenTelemetry C * `TEMPLATE_PATH`. Path to the template file from the first step * `SUMO_OTLP_HTTP_ENDPOINT_URL`. Mandatory [OTLP/HTTP source](/docs/send-data/hosted-collectors/http-source/otlp). * `SSH_KEY_NAME`. [Amazon EC2 key pair](https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/ec2-key-pairs.html) needed to ssh to the EC2 instance - * `AMI_ID`. an Amazon image ID, depends on the region. To obtain it go to [EC2 Launch Instances](https://console.aws.amazon.com/ec2/v2/home#LaunchInstanceWizard:) and get AMI ID for **Amazon Linux 2 AMI** image, such as, `ami-0a6dc7529cd559185`. Note that the AMI ID depends on the region. + * `AMI_ID`. an Amazon image ID, depends on the region. To obtain it go to [EC2 Launch Instances](https://console.aws.amazon.com/ec2/v2/home#LaunchInstanceWizard:) and get AMI ID for **Amazon Linux 2 AMI** image, such as: `ami-0a6dc7529cd559185`. Note that the AMI ID depends on the region. 1. Execute the command below to create the [AWS CloudFormation](https://aws.amazon.com/cloudformation/) stack that will create an EC2 instance and install collector on it: diff --git a/docs/apm/traces/spans.md b/docs/apm/traces/spans.md index a913abbd7c..0ccd95aa5a 100644 --- a/docs/apm/traces/spans.md +++ b/docs/apm/traces/spans.md @@ -68,7 +68,7 @@ Aggregating raw spans can produce better insights by selecting the subject you **Visualize** sets the metric to aggregate the filtered data by. The two default options are: -* **count**. Counts the field you set. Typically you want to count spans, such as, to show how many of them are in any particular category. However, you can count distinct occurrences of any other field, such as IP addresses or pods. +* **count**. Counts the field you set. Typically you want to count spans, such as: to show how many of them are in any particular category. However, you can count distinct occurrences of any other field, such as IP addresses or pods. * **duration**. Conducts the sum, avg, min, max, or pct of the span duration metric. :::tip diff --git a/docs/apm/traces/view-and-investigate-traces.md b/docs/apm/traces/view-and-investigate-traces.md index 84733cebfe..f998b7cf87 100644 --- a/docs/apm/traces/view-and-investigate-traces.md +++ b/docs/apm/traces/view-and-investigate-traces.md @@ -10,9 +10,9 @@ You can visualize your Traces data through filtered trace lists and icicle chart ## Traces page - To access Traces, click the **+ New** button at the top of the screen and select **Traces**. - To access Traces, click the **+ New** button at the top of the screen and select **Traces**. + Here, you can run a Trace query, view your **Trace Duration Breakdown Chart**, and explore your **Traces matching queries** table. @@ -36,7 +36,7 @@ As well as any other metadata standard or custom we may find in spans. All metad * up to 1024 unique tag names per trace * tags with names longer than 64 chars are not indexed  * tags with values over 4096 chars are not indexed -* `spanid` and `parentspanid` are not indexed in Traces search, but searchable through Span analytics +* `spanid` and `parentspanid` are not indexed in Traces search, but searchable through span analytics #### Write a Trace query @@ -69,7 +69,7 @@ Trace Query Visualizations allow you to visualize the breakdown of where time wa * **Error count** * **Span count** -trace-query-view.png +trace-query-view.png These metrics can be viewed as either a **timeseries** chart or a **histogram** chart. * **Timeseries**. It shows the average trace duration for each time bucket. @@ -84,14 +84,14 @@ For both charts, you can switch between linear and logarithmic scales to better - The height of the bar represents the average trace duration for each time bucket. - Each segment represents a Critical Path Contribution of each service from each trace. Services not present in certain traces do not contribute to the value. * **Histogram**. It helps you understand the distribution of trace durations. For example, you can notice groups of durations responsible for longer traces during slowdown periods. - trace-duration-histogram.png + trace-duration-histogram.png Similarly, you can choose **timeseries** chart type from the dropdown and view the chart. * **Error count**. * **Timeseries**. It helps you visualise the average number of errors per trace for selected time range. * **Histogram**. It provides insight into how many traces were found with a certain number of errors. For example, if a backend fails in a specific way, it can always generate a similar number of errors for traces from that period. - error-count-timeseries.png + error-count-timeseries.png Similarly, you can choose histogram chart type from the dropdown and view the chart. @@ -99,7 +99,7 @@ For both charts, you can switch between linear and logarithmic scales to better * **Timeseries**. It helps you visualize how many spans you have per trace for the selected timerange. * **Histogram**. It gives you information about how many traces have a certain number of spans. If a certain type of transaction is expected to produce a similar number of spans every time it runs, spotting an anomaly here can help uncover broken transactions or incomplete traces. - error-count-histogram.png + error-count-histogram.png Similarly, you can choose timeseries chart type from the dropdown and view the chart. @@ -167,7 +167,7 @@ Trace View shows the time flow of a single trace by its spans, and displays the * Visualize all of your different services, each represented in a different color Navigation tips: -* Zoom in and out on Spans using your mouse to drag and pan, or use the buttons in the bottom left, where you can also reset the view.
trace-zooms.png +* Zoom in and out on spans using your mouse to drag and pan, or use the buttons in the bottom left, where you can also reset the view.
trace-zooms.png * Use the **Filters** bar to filter by values of metadata tags in spans. * Use the **Error Spans Only** toggle to hide or show error spans and the **Hide all services** button to hide services.
toggle-and-button-hide.png * Hover over a span segment to view the parent span information and relationship, including the service, operation, relative start in milliseconds, and duration in milliseconds.
![trace-view-details.png](/img/traces/trace-view-details2.png) ![trace-view-details.png](/img/traces/trace-view-details.png) @@ -181,9 +181,9 @@ The details of the span are provided. contains general information about the spa #### Logs -To drill down further into your data, the **Logs** section has links to run searches against related log data. Top links for span/trace IDs work if you have span and trace IDs injected into logs. Lower section links are available and work automatically if you've installed the [Sumo Logic Kubernetes Collection](https://github.com/SumoLogic/sumologic-kubernetes-collection/tree/main/deploy). +To drill down further into your data, the **Logs** section has links to run searches against related log data. Top links for span IDs and trace IDs work if you have span and trace IDs injected into logs. Lower section links are available and work automatically if you've installed the [Sumo Logic Kubernetes Collection](https://github.com/SumoLogic/sumologic-kubernetes-collection/tree/main/deploy). -![Logs links.png](/img/traces/Logs-links.png) +logs-links.png If no logs are produced for this spanID, results may come back empty. [Learn how to add spanID to logs](/docs/apm/traces/advanced-configuration/correlate-logs). @@ -203,7 +203,7 @@ The Metadata includes a [Span Event](#span-events) section. #### Span Events -Span Events describe and contextualize the work being done under a Span by tracing and displaying that data in Trace Views. Events are optional time-stamped strings, which are made up of timestamp, name, and (optional) key-value pair attributes. +Span Events describe and contextualize the work being done under a span by tracing and displaying that data in Trace Views. Events are optional time-stamped strings, which are made up of timestamp, name, and (optional) key-value pair attributes. ![span-event-select.png](/img/traces/span-event-select.png) @@ -234,13 +234,13 @@ You can also manually create Span Events, such as this [example from Ruby](http #### Span Links -Tracing focuses on the parent-child relationship between spans, which are described by a Span ID, a parent Span ID, and a Trace ID. You can establish more casual relationships between Traces using Span Links. +Tracing focuses on the parent-child relationship between spans, which are described by a span ID, a parent span ID, and a Trace ID. You can establish more casual relationships between Traces using Span Links. -**Span Links**, listed under the Metadata tab, give Spans context. Links can point to Spans inside a trace or across different traces. For example, with links you can represent batch operations, where a Span is initiated by multiple initiating spans, each representing one item being processed in the batch. The links give you the relationship between the originating and the following trace. You can copy the Span ID by selecting the Clipboard icon next to the span link.
![links.png](/img/traces/links.png) +**Span Links**, listed under the Metadata tab, give spans context. Links can point to spans inside a trace or across different traces. For example, with links you can represent batch operations, where a span is initiated by multiple initiating spans, each representing one item being processed in the batch. The links give you the relationship between the originating and the following trace. You can copy the span ID by selecting the Clipboard icon next to the span link.
![links.png](/img/traces/links.png) Span Links are added by tracing instrumentation at the client side and are automatically shown when detected in data. For details on configuring Span Links, see the [OpenTelemetry specification](https://github.com/open-telemetry/opentelemetry-specification/blob/main/specification/overview.md#links-between-spans). -You can select the Traces icon to view all other traces that link to this Span ID, and it will take you to the Trace View with the `linkedSpanId` as a filter criteria.
![links.png](/img/traces/links2.png) +You can select the Traces icon to view all other traces that link to this span ID, and it will take you to the Trace View with the `linkedSpanId` as a filter criteria.
![links.png](/img/traces/links2.png) ### Entities diff --git a/docs/cse/integrations/insight-enrichment-server.md b/docs/cse/integrations/insight-enrichment-server.md index 556cef7f35..5fd0c67719 100644 --- a/docs/cse/integrations/insight-enrichment-server.md +++ b/docs/cse/integrations/insight-enrichment-server.md @@ -245,10 +245,10 @@ command_args = dsquery user -name ${USERNAME} cache_time = 5m ``` -## Passing parameters to Powershell scripts +## Passing parameters to PowerShell scripts You can configure the Insight Enrichment Server to pass parameters to a -Powershell script, as shown in the examples below. +PowerShell script, as shown in the examples below. ### CarbonBlack enrichment @@ -385,7 +385,7 @@ The example provided below is not guaranteed to work with all versions of the ap ``` 1. Restart the enrichment server. -**Powershell Scripts** +**PowerShell Scripts** **S1hostname.ps1** ``` diff --git a/docs/dashboards/panels/map-charts.md b/docs/dashboards/panels/map-charts.md index 3a8e56345c..582b73a446 100644 --- a/docs/dashboards/panels/map-charts.md +++ b/docs/dashboards/panels/map-charts.md @@ -14,7 +14,7 @@ Cluster and Heatmap graphically depicts the location and number of hits from dat To map your data you can:  * Use the [geoip](/docs/search/search-query-language/search-operators/geoip) or [Geo Lookup](/docs/search/search-query-language/search-operators/geo-lookup-map) operators to provide these values from extracted IPv4 and IPv6 addresses. -* Manually provide valid aggregated **latitude** and **longitude** values. Ensure the field names are `latitude` and `longitude` so that map chart can recognize them. Format the values with positive or negative values based on being north/south or east/west, instead of using the terms N/S, E/W, such as, `30.42` and `-87.21`. +* Manually provide valid aggregated **latitude** and **longitude** values. Ensure the field names are `latitude` and `longitude` so that map chart can recognize them. Format the values with positive or negative values based on being north/south or east/west, instead of using the terms N/S, E/W, such as: `30.42` and `-87.21`. * A `_count` aggregator is required.  * Other aggregators like `sum` or `avg` do not provide accurate results.  diff --git a/docs/integrations/app-development/jfrog-xray.md b/docs/integrations/app-development/jfrog-xray.md index 632f218cc3..3dc429dd20 100644 --- a/docs/integrations/app-development/jfrog-xray.md +++ b/docs/integrations/app-development/jfrog-xray.md @@ -99,7 +99,7 @@ This section explains how to collect logs from JFrog Xray and ingest them into S In this step you collect details for your JFrog Xray instance that you will use in the following tasks. Collect the following details: -* HostName and Port for your JFrog Xray instance — such as, JFrog instance URL **http://host-example:8000/web/#/login** +* HostName and Port for your JFrog Xray instance — such as: JFrog instance URL **http://host-example:8000/web/#/login** * HostName = **host-example** * Port = **8000** * Your Username and Password for your JFrog Xray instance diff --git a/docs/integrations/hosts-operating-systems/host-process-metrics.md b/docs/integrations/hosts-operating-systems/host-process-metrics.md index ec7e40245c..01fb0b48ad 100644 --- a/docs/integrations/hosts-operating-systems/host-process-metrics.md +++ b/docs/integrations/hosts-operating-systems/host-process-metrics.md @@ -137,7 +137,7 @@ Example: For defining multiple patterns for multiple processes you can use the p ### Troubleshooting * To identify the operating system version and name. - * For Windows machines, run the command in Powershell to get the OS Version. + * For Windows machines, run the command in PowerShell to get the OS Version. ```sql [System.Environment]::OSVersion.Version (Get-WmiObject -class Win32_OperatingSystem).Caption diff --git a/docs/manage/security/installation-tokens.md b/docs/manage/security/installation-tokens.md index 0303180cab..f97ab92349 100644 --- a/docs/manage/security/installation-tokens.md +++ b/docs/manage/security/installation-tokens.md @@ -89,7 +89,7 @@ Where `` is the **Token String** you want to use to register ### user.properties -To register an Installed Collector with [user.properties](/docs/send-data/installed-collectors/collector-installation-reference/user-properties.md), you need to use the authentication parameters `token` and `url`. To use these two parameters, you'll need to manually base64 decode the **Token String**. For example, you can use the following Powershell commands to decode the base64 token: +To register an Installed Collector with [user.properties](/docs/send-data/installed-collectors/collector-installation-reference/user-properties.md), you need to use the authentication parameters `token` and `url`. To use these two parameters, you'll need to manually base64 decode the **Token String**. For example, you can use the following PowerShell commands to decode the base64 token: events.1password.com | `"events.1password.com"` | +| base_url | String | Yes | `null` | Provide your 1Password customer-specific domain, such as: events.1password.com | `"events.1password.com"` | | api_token | String | Yes | `null` | Provide the [1Password API token](#APIToken) you want to use to authenticate collection requests. | `"acsac25$"` | | supported_apis | []String | Yes | `null` | Define one or more of the available APIs to collect | `["sign-in","itemUsage"]` | diff --git a/docs/send-data/hosted-collectors/cloud-to-cloud-integration-framework/carbon-black-cloud-source.md b/docs/send-data/hosted-collectors/cloud-to-cloud-integration-framework/carbon-black-cloud-source.md index 9be274d300..c1d9b81beb 100644 --- a/docs/send-data/hosted-collectors/cloud-to-cloud-integration-framework/carbon-black-cloud-source.md +++ b/docs/send-data/hosted-collectors/cloud-to-cloud-integration-framework/carbon-black-cloud-source.md @@ -97,7 +97,7 @@ Sources can be configured using UTF-8 encoded JSON files with the [Collector M | description | String | No | `null` | Type a description of the source. | `"Testing source"` | category | String | No | `null` | Type a category of the source. This value is assigned to the [metadata](/docs/search/get-started-with-search/search-basics/built-in-metadata) field `_sourceCategory`. See [best practices](/docs/send-data/best-practices) for details. | `"mySource/test"` | fields | JSON Object | No | `null` | JSON map of key-value fields (metadata) to apply to the Collector or Source. Use the boolean field _siemForward to enable forwarding to SIEM.|`{"_siemForward": false, "fieldA": "valueA"}` | -| domain | String | Yes | `null` | Enter your Carbon Black Cloud domain, such as, `dev-prod05.conferdeploy.net`. See this [knowledge base article](https://community.carbonblack.com/t5/Knowledge-Base/Carbon-Black-Cloud-What-URLs-are-used-to-access-the-api/ta-p/67346) to determine which domain to use. | | +| domain | String | Yes | `null` | Enter your Carbon Black Cloud domain, such as: `dev-prod05.conferdeploy.net`. See this [knowledge base article](https://community.carbonblack.com/t5/Knowledge-Base/Carbon-Black-Cloud-What-URLs-are-used-to-access-the-api/ta-p/67346) to determine which domain to use. | | | api_key | String | Yes | `null` | The Carbon Black Cloud API Key you want to use to authenticate requests. Ensure the key is granted the required permissions for all the APIs listed in the above [Vendor configuration](#vendor-configuration) section. | | | api_id | String | Yes | `null` | The Carbon Black Cloud API ID correlated to your API key. | | | org_key | String | Yes | `null` | Your Carbon Black Cloud Org key, found in your Carbon Black product console under Settings > API Access > API Keys. | | diff --git a/docs/send-data/hosted-collectors/cloud-to-cloud-integration-framework/carbon-black-inventory-source.md b/docs/send-data/hosted-collectors/cloud-to-cloud-integration-framework/carbon-black-inventory-source.md index 6f6f5a087b..fc935936f9 100644 --- a/docs/send-data/hosted-collectors/cloud-to-cloud-integration-framework/carbon-black-inventory-source.md +++ b/docs/send-data/hosted-collectors/cloud-to-cloud-integration-framework/carbon-black-inventory-source.md @@ -84,7 +84,7 @@ The following table shows the **config** parameters for a Carbon Black Invent | description | String | No | `null` | Type a description of the source. | `"Testing source"` | category | String | No | `null` | Type a category of the source. This value is assigned to the [metadata](/docs/search/get-started-with-search/search-basics/built-in-metadata) field `_sourceCategory`. See [best practices](/docs/send-data/best-practices) for details. | `"mySource/test"` | fields | JSON Object | No | `null` | JSON map of key-value fields (metadata) to apply to the Collector or Source. Use the boolean field _siemForward to enable forwarding to SIEM.|`{"_siemForward": false, "fieldA": "valueA"}` | -| domain | String | Yes | `null` | Enter your Carbon Black Cloud domain, such as, `dev-prod05.conferdeploy.net`. See this [knowledge base article](https://community.carbonblack.com/t5/Knowledge-Base/Carbon-Black-Cloud-What-URLs-are-used-to-access-the-api/ta-p/67346) to determine which domain to use. | | +| domain | String | Yes | `null` | Enter your Carbon Black Cloud domain, such as: `dev-prod05.conferdeploy.net`. See this [knowledge base article](https://community.carbonblack.com/t5/Knowledge-Base/Carbon-Black-Cloud-What-URLs-are-used-to-access-the-api/ta-p/67346) to determine which domain to use. | | | api_key | String | Yes | `null` | The Carbon Black Cloud API Key you want to use to authenticate requests. Ensure the key is granted the required permissions for all the APIs. | | | api_id | String | Yes | `null` | The Carbon Black Cloud API ID correlated to your API key. | | | org_key | String | Yes | `null` | Your Carbon Black Cloud Org key, found in your Carbon Black product console under Settings > API Access > API Keys. | | diff --git a/docs/send-data/hosted-collectors/cloud-to-cloud-integration-framework/netskope-source.md b/docs/send-data/hosted-collectors/cloud-to-cloud-integration-framework/netskope-source.md index 27d7150e9f..b308296c66 100644 --- a/docs/send-data/hosted-collectors/cloud-to-cloud-integration-framework/netskope-source.md +++ b/docs/send-data/hosted-collectors/cloud-to-cloud-integration-framework/netskope-source.md @@ -99,7 +99,7 @@ To configure a Netskope Source: | `_siemVendor` | `Netskope` | Set when **Forward To SIEM** is checked. | | `_siemProduct` | `Security Cloud` | Set when **Forward To SIEM** is checked. | | `_siemFormat` | `JSON` | Set when **Forward To SIEM** is checked. | -| `_siemEventID` | `` | Where eventType is one of the above event types with one exception. If the eventType is audit and the description contains logon/login or logoff/logout the eventType field will be the eventType with the value -logon or -logoff added respectively, such as, audit-logon or audit-logoff. | +| `_siemEventID` | `` | Where eventType is one of the above event types with one exception. If the eventType is audit and the description contains logon/login or logoff/logout the eventType field will be the eventType with the value -logon or -logoff added respectively, such as: audit-logon or audit-logoff. | ## JSON schema diff --git a/docs/send-data/opentelemetry-collector/data-source-configurations/collect-logs.md b/docs/send-data/opentelemetry-collector/data-source-configurations/collect-logs.md index ebae4122ee..59fcd07c65 100644 --- a/docs/send-data/opentelemetry-collector/data-source-configurations/collect-logs.md +++ b/docs/send-data/opentelemetry-collector/data-source-configurations/collect-logs.md @@ -11,7 +11,7 @@ The Sumo Logic Distribution for OpenTelemetry Collector provides various receive * [Parsing JSON logs](#parsing-json-logs) * [Collecting logs from Windows Event Log](#collecting-logs-from-windows-event-log) * [Collecting Application, Security and System channels](#collecting-application-security-and-system-channels) - * [Collect from Custom channels (Powershell, Sysmon)](#collect-from-custom-channels-powershell-sysmon) + * [Collect from Custom channels (PowerShell, Sysmon)](#collect-from-custom-channels-powershell-sysmon) * [Collecting logs from Syslog](#collecting-logs-from-syslog) * [Parsing Syslog logs into structured logs](#parsing-syslog-logs-into-structured-logs) * [Collecting Syslog logs in format compatible with Sumo Logic Installed Collector](#collecting-syslog-logs-in-format-compatible-with-sumo-logic-installed-collector) @@ -236,7 +236,7 @@ Configuration details: * `logs/custom_files:` Pipeline glues together the receivers with the processors and the exporters. -### Collect from Custom channels (Powershell, Sysmon) +### Collect from Custom channels (PowerShell, Sysmon) Following configuration demonstrates: diff --git a/docs/send-data/opentelemetry-collector/install-collector/windows.md b/docs/send-data/opentelemetry-collector/install-collector/windows.md index c1a29260da..3bb2fa2b6f 100644 --- a/docs/send-data/opentelemetry-collector/install-collector/windows.md +++ b/docs/send-data/opentelemetry-collector/install-collector/windows.md @@ -122,7 +122,7 @@ HTTP_PROXY=: HTTPS_PROXY=: ``` -You can do it using the following Powershell command: +You can do it using the following PowerShell command: ```powershell Set-ItemProperty ` diff --git a/docs/send-data/use-json-configure-sources/json-parameters-installed-sources.md b/docs/send-data/use-json-configure-sources/json-parameters-installed-sources.md index ffbcdf2531..c1954f9470 100644 --- a/docs/send-data/use-json-configure-sources/json-parameters-installed-sources.md +++ b/docs/send-data/use-json-configure-sources/json-parameters-installed-sources.md @@ -44,7 +44,7 @@ the following parameters are for local file source.  | `denylist` | String Array | No | `[ ]` | Comma-separated list of valid path expressions from which logs will not be collected.
Example: `"denylist":["/var/log/**/*.bak","/var/oldlog/*.log"]` | modifiable | | `encoding` | String | No | UTF-8 | Defines the encoding form. Default is "UTF-8"; options include "UTF-16"; "UTF-16BE"; "UTF-16LE". | modifiable | -Local File Source JSON example with `cutoffTimestamp`: +Local File Source JSON example with `cutoffTimestamp`: ```json { @@ -595,7 +595,7 @@ Graphite contentType JSON example:  } ``` -## Additional Information +## Additional information See the following topics for additional information: * [Use JSON to configure Sources](/docs/send-data/use-json-configure-sources). The topic includes a list of [common parameters](/docs/send-data/use-json-configure-sources) for all log Source types. For Sources, the common parameter `name` must be unique per Collector. diff --git a/static/img/traces/Refresh.png b/static/img/traces/Refresh.png index 5f4bff5b906d49753b28b8b5abf94d55128c0427..2e49897f0d170f1b71da779aee51934b5010527a 100644 GIT binary patch literal 19723 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 Date: Mon, 29 Jul 2024 16:51:07 -0700 Subject: [PATCH 2/2] minor edits --- .../aws-lambda/nodejs.md | 4 ++-- ...t-up-traces-collection-aws-environments.md | 23 +++---------------- 2 files changed, 5 insertions(+), 22 deletions(-) diff --git a/docs/apm/traces/get-started-transaction-tracing/opentelemetry-instrumentation/aws-lambda/nodejs.md b/docs/apm/traces/get-started-transaction-tracing/opentelemetry-instrumentation/aws-lambda/nodejs.md index 48af3d700f..ec8a92ca3a 100644 --- a/docs/apm/traces/get-started-transaction-tracing/opentelemetry-instrumentation/aws-lambda/nodejs.md +++ b/docs/apm/traces/get-started-transaction-tracing/opentelemetry-instrumentation/aws-lambda/nodejs.md @@ -147,8 +147,8 @@ Instrumentation of container-based AWS Lambda function requires some changes in * `OTEL_TRACES_SAMPLER = always_on`. Enables traces sampling. * `OTEL_SERVICE_NAME = YOUR_SERVICE_NAME`. Sets the tracing service name in Sumo Logic. Make sure to define it as a string value that represents the function name and its business logic, such as "Check SQS Lambda". * `OTEL_RESOURCE_ATTRIBUTES`. Sets OpenTelemetry resources. Add the `deployment.environment=[environment-name]` tag as needed to allow for filtering by environment on dashboard panels. (For more information, see [Services Dashboard Panels](/docs/apm/traces/services-list-map#services-dashboard-panels)). Tracing `application` and `cloud.account.id` are set with the `OTEL_RESOURCE_ATTRIBUTES` environment variable: - * `application=YOUR_APPLICATION_NAME`. the string value, if the function is a part of complex system/application then set it for all other functions/applications. - * `cloud.account.id=YOUR_CLOUD_ACCOUNT_ID`. set an additional tag that will contain your [AWS Lambda Account ID](https://docs.aws.amazon.com/general/latest/gr/acct-identifiers.html). This will help to provide more relevant data. All of the attributes above are comma separated key/value pairs (this is also a way to add additional information to the spans, just after comma add additional key=value pair) such as: `OTEL_RESOURCE_ATTRIBUTES=application=YOUR_APPLICATION_NAME,cloud.account.id=123456789012`. + * `application=YOUR_APPLICATION_NAME`. The string value, if the function is a part of complex system/application then set it for all other functions/applications. + * `cloud.account.id=YOUR_CLOUD_ACCOUNT_ID`. Set an additional tag that will contain your [AWS Lambda Account ID](https://docs.aws.amazon.com/general/latest/gr/acct-identifiers.html). This will help to provide more relevant data. All of the attributes above are comma separated key/value pairs (this is also a way to add additional information to the spans, just after comma add additional key=value pair) such as: `OTEL_RESOURCE_ATTRIBUTES=application=YOUR_APPLICATION_NAME,cloud.account.id=123456789012`. * `SUMO_OTLP_HTTP_ENDPOINT_URL` has to be set to send all gathered telemetry data to Sumo Logic. The URL comes from an [OTLP/HTTP source](/docs/send-data/hosted-collectors/http-source/otlp). You can use an existing Source or create a new one, if needed. :::note The `SUMOLOGIC_HTTP_TRACES_ENDPOINT_URL` environment variable is deprecated. You'll need to switch from the HTTP Traces Source to [OTLP/HTTP source](/docs/send-data/hosted-collectors/http-source/otlp) and use the `SUMO_OTLP_HTTP_ENDPOINT_URL` environment variable instead. diff --git a/docs/apm/traces/get-started-transaction-tracing/set-up-traces-collection-aws-environments.md b/docs/apm/traces/get-started-transaction-tracing/set-up-traces-collection-aws-environments.md index 221e49bdef..9a8c14a677 100644 --- a/docs/apm/traces/get-started-transaction-tracing/set-up-traces-collection-aws-environments.md +++ b/docs/apm/traces/get-started-transaction-tracing/set-up-traces-collection-aws-environments.md @@ -84,17 +84,13 @@ You'll need an ECS Cluster where the Sumo Logic Distribution for OpenTelemetry C ### Scenario 2: Sumo Logic Distribution for OpenTelemetry Collector installation on ECS Fargate 1. Download the CloudFormation template file which will be used later to install the Collector: - ```bash curl -O https://raw.githubusercontent.com/SumoLogic/sumologic-otel-collector/main/examples/aws/ecs-fargate-deployment.yaml ``` - 1. Download the configuration file. - ```bash curl -O https://raw.githubusercontent.com/SumoLogic/sumologic-otel-collector/main/examples/aws/config.yaml ``` - 1. Set up the following environment variables that are needed to perform the Collector deployment: * `CLUSTER_NAME`. Your ECS Cluster name setup from prerequisite * `AWS_REGION`. Your ECS Cluster deployment region @@ -106,49 +102,36 @@ You'll need an ECS Cluster where the Sumo Logic Distribution for OpenTelemetry C The Sumo Logic Distribution for OpenTelemetry Collector can receive data from various receivers - these ports should be configured in the Security Group: * OTLP - ports: 4317/tcp, 4318/tcp ::: - * SUBNETS - same as Security Groups, Subnets have to be configured for AWS Fargate. To find Subnets used on the cluster, use the VPC ID from Security Group and search for it on the list [here](https://console.aws.amazon.com/vpc/home#subnets:). In the case of multiple Subnets use a comma as a separator, such as: `subnet-xyz,subnet-xyz`. - + * `SUBNETS`. Same as Security Groups, Subnets have to be configured for AWS Fargate. To find Subnets used on the cluster, use the VPC ID from Security Group and search for it on the list [here](https://console.aws.amazon.com/vpc/home#subnets:). In the case of multiple Subnets use a comma as a separator, such as: `subnet-xyz,subnet-xyz`. 1. It is necessary to provide the configuration to the Collector. This can be done by creating the parameter in the [AWS Parameter Store](https://docs.aws.amazon.com/systems-manager/latest/userguide/systems-manager-parameter-store.html) by running the following command: - ```bash aws ssm put-parameter --name "sumologic-otel-col-config" --type "String" --data-type "text" --value "$(cat ${CONFIG_FILE_PATH} | awk -v url=$SUMO_OTLP_HTTP_ENDPOINT_URL '{gsub(/SUMO_OTLP_HTTP_ENDPOINT_URL/,url)}1')" ``` - 1. Execute the command below to create an [AWS CloudFormation](https://aws.amazon.com/cloudformation/) stack that deploys the Sumo Logic Distro on your cluster: - ```bash aws cloudformation create-stack --stack-name sumologic-aws-otel-col-ecs-fargate --template-body file://${TEMPLATE_PATH} --parameters ParameterKey=ClusterName,ParameterValue=${CLUSTER_NAME} ParameterKey=SecurityGroups,ParameterValue=\"${SECURITY_GROUPS}\" ParameterKey=Subnets,ParameterValue=\"${SUBNETS}\" --capabilities=CAPABILITY_NAMED_IAM --region=${AWS_REGION} ``` - 1. To check if everything was deployed, go to the [CloudFormation Stacks console](https://console.aws.amazon.com/cloudformation/home#/stacks?filteringStatus=active&filteringText=&viewNested=true&hideStacks=false) and check if the **sumologic-aws-otel-col-ecs-fargate** stack status is **CREATE_COMPLETE**.
![ecs ec2 stack status.png](/img/traces/ecs-ec2-stack-status.png) - 1. The next step is to check if your deployment is properly running. Go to the [ECS Console](https://console.aws.amazon.com/ecs/home), select the proper region, and select the cluster you used to deploy the AWS OpenTelemetry Collector. Navigate to the **Tasks** tab and check if the task is running.
![task status es2 ecs.png](/img/traces/task-status-es2-ecs.png) - -1. Finally, click on the task and expand the **Containers** list. In the **Network > Private IP** or **Public** **IP** sections, you will find the information on where to send telemetry data.
![network ips.png](/img/traces/network-ips.png) +1. Finally, click on the task and expand the **Containers** list. In the **Network > Private IP** or **Public IP** sections, you will find the information on where to send telemetry data.
![network ips.png](/img/traces/network-ips.png) ## Amazon Elastic Computing (EC2) 1. Download the CloudFormation template file which will be used later to install the Collector on your EC2 instance. - ```bash curl -O https://raw.githubusercontent.com/SumoLogic/sumologic-otel-collector/main/examples/aws/ec2-deployment.yaml ``` - 1. Set up the following environment variables that are needed to perform a deployment. * `AWS_REGION`. Your ECS Cluster deployment region * `TEMPLATE_PATH`. Path to the template file from the first step * `SUMO_OTLP_HTTP_ENDPOINT_URL`. Mandatory [OTLP/HTTP source](/docs/send-data/hosted-collectors/http-source/otlp). * `SSH_KEY_NAME`. [Amazon EC2 key pair](https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/ec2-key-pairs.html) needed to ssh to the EC2 instance - * `AMI_ID`. an Amazon image ID, depends on the region. To obtain it go to [EC2 Launch Instances](https://console.aws.amazon.com/ec2/v2/home#LaunchInstanceWizard:) and get AMI ID for **Amazon Linux 2 AMI** image, such as: `ami-0a6dc7529cd559185`. Note that the AMI ID depends on the region. - + * `AMI_ID`. An Amazon image ID, depends on the region. To obtain it go to [EC2 Launch Instances](https://console.aws.amazon.com/ec2/v2/home#LaunchInstanceWizard:) and get AMI ID for **Amazon Linux 2 AMI** image, such as: `ami-0a6dc7529cd559185`. Note that the AMI ID depends on the region. 1. Execute the command below to create the [AWS CloudFormation](https://aws.amazon.com/cloudformation/) stack that will create an EC2 instance and install collector on it: - ```bash aws cloudformation create-stack --stack-name sumologic-otel-ec2 --template-body file://${TEMPLATE_PATH} --parameters ParameterKey=SumoOtlpHttpEndpointURL,ParameterValue=${SUMO_OTLP_HTTP_ENDPOINT_URL} ParameterKey=SSHKeyName,ParameterValue=${SSH_KEY_NAME} ParameterKey=InstanceAMI,ParameterValue=${AMI_ID} --capabilities=CAPABILITY_NAMED_IAM --region=${AWS_REGION} ``` - 1. To check if everything was deployed, go to [CloudFormation Stacks console](https://console.aws.amazon.com/cloudformation/home#/stacks?filteringStatus=active&filteringText=&viewNested=true&hideStacks=false) and check if **sumologic-otel-ec2** stack status is **CREATE_COMPLETE**. Deploying and configuring an EC2 instance can take even a few minutes.
![stack check.png](/img/traces/stack-check.png) - 1. Go to [EC2 Instances](https://console.aws.amazon.com/ec2/v2/home#Instances:instanceState=running), select the proper region and check if the EC2 instance is running. Use public or private IP addresses as exporters endpoints.
![instance ips.png](/img/traces/instance-ips.png) ## Sumo Logic Distribution for OpenTelemetry installation on EKS