From 2fb525f8f9ccec84652ba5d6d8dc9f8a0c0e73d1 Mon Sep 17 00:00:00 2001 From: Keegan Mullaney Date: Mon, 18 Dec 2023 16:45:18 -0800 Subject: [PATCH 001/124] Update runtimes Java 17 layers were released 3 months ago --- .../compatibility-requirements-aws-lambda-monitoring.mdx | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/content/docs/serverless-function-monitoring/aws-lambda-monitoring/get-started/compatibility-requirements-aws-lambda-monitoring.mdx b/src/content/docs/serverless-function-monitoring/aws-lambda-monitoring/get-started/compatibility-requirements-aws-lambda-monitoring.mdx index cf01fdef397..d92a2e4f993 100644 --- a/src/content/docs/serverless-function-monitoring/aws-lambda-monitoring/get-started/compatibility-requirements-aws-lambda-monitoring.mdx +++ b/src/content/docs/serverless-function-monitoring/aws-lambda-monitoring/get-started/compatibility-requirements-aws-lambda-monitoring.mdx @@ -15,7 +15,7 @@ Before [enabling serverless monitoring](/docs/serverless-function-monitoring/aws * Node.js: `nodejs14.x`, `nodejs16.x`, `nodejs18.x` * Python: `python3.7`, `python3.8`, `python3.9`, `python3.10`, `python3.11` * Go: `provided`, `provided.al2` -* Java: `java8.al2`, `java11` +* Java: `java8.al2`, `java11`, `java17` * .NET Core: `dotnetcore3.1` AWS has older runtimes for these languages as well, but AWS has not [chosen to support](https://docs.aws.amazon.com/lambda/latest/dg/runtimes-extensions-api.html) From e3e3405dfb095ef07fcc7ba61ddfb15d61c8429f Mon Sep 17 00:00:00 2001 From: Keegan Mullaney Date: Wed, 17 Jan 2024 10:13:17 -0800 Subject: [PATCH 002/124] fix word wrapping and update runtimes - Some paragraphs had hard breaks - Remove deprecated runtimes - Add note about .NET deprecation - Add new runtimes --- .../account-linking.mdx | 16 +++---- ...erverless-monitoring-aws-lambda-legacy.mdx | 8 +++- .../instrument-example.mdx | 7 ++- .../instrument-your-own.mdx | 48 +++++++------------ ...ity-requirements-aws-lambda-monitoring.mdx | 27 ++++------- 5 files changed, 42 insertions(+), 64 deletions(-) diff --git a/src/content/docs/serverless-function-monitoring/aws-lambda-monitoring/enable-lambda-monitoring/account-linking.mdx b/src/content/docs/serverless-function-monitoring/aws-lambda-monitoring/enable-lambda-monitoring/account-linking.mdx index fc919c3c218..4ee656ed903 100644 --- a/src/content/docs/serverless-function-monitoring/aws-lambda-monitoring/enable-lambda-monitoring/account-linking.mdx +++ b/src/content/docs/serverless-function-monitoring/aws-lambda-monitoring/enable-lambda-monitoring/account-linking.mdx @@ -23,7 +23,7 @@ For Lambda serverless function monitoring to work, it requires either an [API Po ```yaml Resource: "*" - Action: + Action: - "cloudwatch:GetMetricStatistics" - "cloudwatch:ListMetrics" - "cloudwatch:GetMetricData" @@ -165,9 +165,7 @@ The `newrelic-lambda` CLI adds your New Relic ### The infrastructure monitoring UI - The CLI is the least complicated way to link your accounts. Current CLI behavior limits the setup of one managed secret per region. If you need more control or need to integrate more than one New Relic account per region, you can go through - the [linking process](/docs/integrations/amazon-integrations/get-started/connect-aws-new-relic-infrastructure-monitoring) - manually. Be sure to enable Lambda when selecting services to be monitored. + The CLI is the least complicated way to link your accounts. Current CLI behavior limits the setup of one managed secret per region. If you need more control or need to integrate more than one New Relic account per region, you can go through the [linking process](/docs/integrations/amazon-integrations/get-started/connect-aws-new-relic-infrastructure-monitoring) manually. Be sure to enable Lambda when selecting services to be monitored. Don't forget to configure the secret manually, as described next. @@ -185,9 +183,9 @@ The `newrelic-lambda` CLI adds your New Relic + + Our legacy .NET NuGet package relies on the archived [OpenTracing](https://opentracing.io/) SDKs. It has been [deprecated as of Dec 31st, 2022](https://github.com/newrelic/newrelic-dotnet-agent/blob/main/src/AwsLambda/CHANGELOG.md). + + Our monitoring of .NET Core-based AWS Lambda functions doesn't use our standard [.NET Core APM agent](/docs/agents/net-agent/installation/compatibility-requirements-net-core-agent). Instead, it uses a NuGet package. To instrument your .NET Core Lambda: @@ -211,7 +215,7 @@ On this page, you will learn how to manually instrument your lambda function. It public async Task ActualFunctionHandlerAsync(ILambdaContext lambdaContext) - { + { // Function can make other async operations here ... } diff --git a/src/content/docs/serverless-function-monitoring/aws-lambda-monitoring/enable-lambda-monitoring/instrument-example.mdx b/src/content/docs/serverless-function-monitoring/aws-lambda-monitoring/enable-lambda-monitoring/instrument-example.mdx index 85fa2d0471f..fe223f3aee3 100644 --- a/src/content/docs/serverless-function-monitoring/aws-lambda-monitoring/enable-lambda-monitoring/instrument-example.mdx +++ b/src/content/docs/serverless-function-monitoring/aws-lambda-monitoring/enable-lambda-monitoring/instrument-example.mdx @@ -1,6 +1,6 @@ --- title: "Step 3: Instrument a test Lambda function" -metaDescription: Step 3 of enabling New Relic's AWS Lambda monitoring. +metaDescription: Step 3 of enabling New Relic's AWS Lambda monitoring. freshnessValidatedDate: never --- @@ -22,7 +22,7 @@ In addition, each demonstrates: * Using the New Relic Lambda layer with your function * Adding permissions to the function to access the AWS Secrets Manager and retrieve the New Relic -* Runtime-specific techinques for wrapping your handler, so that New Relic can capture telemetry +* Runtime-specific techniques for wrapping your handler, so that New Relic can capture telemetry * Managing function log retention in CloudWatch * Optionally, forwarding function logs to New Relic's logging product via the Lambda Extension @@ -36,7 +36,6 @@ New Relic can instrument: * [Python](https://github.com/newrelic/newrelic-lambda-extension/tree/main/examples/sam/python) * [Go](https://github.com/newrelic/newrelic-lambda-extension/tree/main/examples/sam/go) * [Java](https://github.com/newrelic/newrelic-lambda-extension/tree/main/examples/sam/java) -* [.NET](https://github.com/newrelic/newrelic-lambda-extension/tree/main/examples/sam/dotnet) As you test the examples, you may notice that telemetry isn't always sent right away. The AWS Lambda lifecycle places certain constraints on the execution of our agent and Lambda Extension. In addition, valuable platform telemetry is only available after an invocation has completed. The New Relic Extension balances overall performance against the need for timely telemetry delivery by buffering telemetry for a period of time, and delivering it to New Relic in batches, during a subsequent invocation (or during shutdown). @@ -51,4 +50,4 @@ While we make an effort to keep the templates in our examples up to date, you ca In addition to our basic examples, we offer an example of how to integrate distributed tracing into a non-trivial serverless application in our [distributed tracing example](https://github.com/newrelic/newrelic-lambda-extension/tree/main/examples/sam/distributedtracing). It illustrates manual trace propagation for SQS and SNS, two of the more popular services that might invoke Lambda functions, with Node, Python and Java functions. - \ No newline at end of file + diff --git a/src/content/docs/serverless-function-monitoring/aws-lambda-monitoring/enable-lambda-monitoring/instrument-your-own.mdx b/src/content/docs/serverless-function-monitoring/aws-lambda-monitoring/enable-lambda-monitoring/instrument-your-own.mdx index b5c8f05c7c1..0903626ce2c 100644 --- a/src/content/docs/serverless-function-monitoring/aws-lambda-monitoring/enable-lambda-monitoring/instrument-your-own.mdx +++ b/src/content/docs/serverless-function-monitoring/aws-lambda-monitoring/enable-lambda-monitoring/instrument-your-own.mdx @@ -16,8 +16,7 @@ There are many different deployment strategies for Lambda functions. New Relic o ### `newrelic-lambda` CLI quickstart [#quickstarts] -The CLI tool that we recommended for setting up the account link can also reconfigure your Lambda functions to use -New Relic. +The CLI tool that we recommended for setting up the account link can also reconfigure your Lambda functions to use New Relic. To install or upgrade the New Relic instrumentation layer, run: @@ -29,8 +28,7 @@ This command automatically finds the newest available layer for your Lambda's re This is a great way to quick-start instrumentation, and this tool can easily be integrated into your existing CI/CD processes. However, since it modifies existing Lambda function resources, when you deploy a code update to your function, you may inadvertently remove the New Relic instrumentation. Be sure to re-run the command above after every update, or (even better) integrate the layer and associated configuration with your existing deployment process. -Note that the CLI can operate on many functions in a batch: use `--function all`, `--function installed`, or -`--function not-installed` to operate on all functions in a region, or only those with or without existing +Note that the CLI can operate on many functions in a batch: use `--function all`, `--function installed`, or `--function not-installed` to operate on all functions in a region, or only those with or without existing New Relic instrumentation. ### Continuous deployment [#cont] @@ -42,13 +40,10 @@ In the long term, it's usually less work to integrate New Relic into your existi id="cloudformation" title="CloudFormation / SAM templates" > - AWS's Serverless Application Model, or SAM is a variant of CloudFormation templates that simplifies relating functions - to the resources they depend on, and managing the lifecycle of an entire application. We use SAM and CloudFormation for - most of our Lambda example functions, and many other tools are built on top of CloudFormation templates, providing an - addition layer of abstraction. + AWS's Serverless Application Model, or SAM is a variant of CloudFormation templates that simplifies relating functions to the resources they depend on, and managing the lifecycle of an entire application. We use SAM and CloudFormation for + most of our Lambda example functions, and many other tools are built on top of CloudFormation templates, providing an addition layer of abstraction. - At its core, CloudFormation is a way to express the target state of an AWS Resource (such as a Lambda function) using - YAML or JSON, and an execution service that makes API calls to other services (such as AWS Lambda) to achieve that + At its core, CloudFormation is a way to express the target state of an AWS Resource (such as a Lambda function) using YAML or JSON, and an execution service that makes API calls to other services (such as AWS Lambda) to achieve that target state. Here's an example of a simple CloudFormation template for a Node.js Lambda function: @@ -94,11 +89,9 @@ In the long term, it's usually less work to integrate New Relic into your existi id="serverless" title="Serverless Framework" > - Serverless Framework is a popular development and deployment tool for serverless applications. It's written in Node.js, - and for AWS, acts mostly as a higher-level abstraction on top of CloudFormation templates. It works well for Node, Python and Java functions. + Serverless Framework is a popular development and deployment tool for serverless applications. It's written in Node.js, and for AWS, acts mostly as a higher-level abstraction on top of CloudFormation templates. It works well for Node, Python and Java functions. - New Relic offers a [Serverless Framework Plugin](https://github.com/newrelic/serverless-newrelic-lambda-layers) to - simplify instrumentation of your Serverless Framework application. + New Relic offers a [Serverless Framework Plugin](https://github.com/newrelic/serverless-newrelic-lambda-layers) to simplify instrumentation of your Serverless Framework application. #### Install the plugin [#install] @@ -114,8 +107,7 @@ In the long term, it's usually less work to integrate New Relic into your existi yarn add --dev serverless-newrelic-lambda-layers ``` - Find your [New Relic Account ID](/docs/accounts/install-new-relic/account-setup/account-id), - your [New Relic Personal API Key](/docs/apis/get-started/intro-apis/types-new-relic-api-keys#personal-api-key) + Find your [New Relic Account ID](/docs/accounts/install-new-relic/account-setup/account-id), your [New Relic Personal API Key](/docs/apis/get-started/intro-apis/types-new-relic-api-keys#personal-api-key) Then add the following to your `serverless.yaml` file: @@ -143,13 +135,11 @@ In the long term, it's usually less work to integrate New Relic into your existi ## Unusual integrations [#edge] -For most, one of the options above will work well. There's a chance that you can't use any of these -solutions though. For guidance on how to customize your integration to fit your needs, read on. +For most, one of the options above will work well. There's a chance that you can't use any of these solutions though. For guidance on how to customize your integration to fit your needs, read on. ### CloudWatch telemetry [#cloudwatch-telemetry] -As [mentioned previously](/docs/serverless-function-monitoring/aws-lambda-monitoring/get-started/architecture#cloudwatch) -we used to recommend sending your telemetry through CloudWatch Logs. This path can still work, though it is deprecated. +As [mentioned previously](/docs/serverless-function-monitoring/aws-lambda-monitoring/get-started/architecture#cloudwatch) we used to recommend sending your telemetry through CloudWatch Logs. This path can still work, though it is deprecated. 1. Disable the extension by adding the `NEW_RELIC_LAMBDA_EXTENSION_ENABLED` environment variable to your function, with the value `false`. @@ -180,8 +170,7 @@ we used to recommend sending your telemetry through CloudWatch Logs. This path c ### Lambda console UI configuration [#console] -While it is more error prone and labor intensive than the approaches above, it's possible to manually alter the -configuration of a Lambda function to use New Relic from the AWS Lambda Console, for Node.js, Python and Java. +While it is more error prone and labor intensive than the approaches above, it's possible to manually alter the configuration of a Lambda function to use New Relic from the AWS Lambda Console, for Node.js, Python and Java. 1. Find the [layer](https://layers.newrelic-external.com/) that matches your runtime and region. 2. Copy the _Amazon Resource Name_ (ARN) of the most recent version and add it in the AWS Lambda console for your function. @@ -212,8 +201,7 @@ configuration of a Lambda function to use New Relic from the AWS Lambda Console, ] ``` -Note that for Go and .NET, you must make source code changes to your Lambda function to instrument it. -Configuration changes are not enough. +Note that for Go, you must make source code changes to your Lambda function to instrument it. Configuration changes are not enough. ### Layer customization [#cust] @@ -226,17 +214,13 @@ The layer contains several components, depending on your runtime: 3. A handler wrapper, which configures the agent, and intercepts invocations, to start the instrumentation process, then invokes your handler. -If you need a different wrapper, you can build your own layer, based on ours. See our -[newrelic-lambda-layers GitHub repo](https://github.com/newrelic/newrelic-lambda-layers) for the code contained in -our wrapper function. By creating [your own layer](https://docs.aws.amazon.com/lambda/latest/dg/configuration-layers.html) -with a replacement wrapper, and applying it _after_ ours, your wrapper will overwrite the one we supply. Similarly, +If you need a different wrapper, you can build your own layer, based on ours. See our [newrelic-lambda-layers GitHub repo](https://github.com/newrelic/newrelic-lambda-layers) for the code contained in +our wrapper function. By creating [your own layer](https://docs.aws.amazon.com/lambda/latest/dg/configuration-layers.html) with a replacement wrapper, and applying it _after_ ours, your wrapper will overwrite the one we supply. Similarly, you can include your custom wrapper directly in your function. -Similarly, if you are testing a custom build of the agent, perhaps to address some bug, you could modify our layer -packaging scripts above to package your agent build, and build your own layer. +Similarly, if you are testing a custom build of the agent, perhaps to address some bug, you could modify our layer packaging scripts above to package your agent build, and build your own layer. -We explicitly do not recommend that you package the agent with your Lambda function. While this is possible, it -makes it difficult for you to upgrade the agent and receive bug fixes. The layer may conflict with your vendored +We explicitly do not recommend that you package the agent with your Lambda function. While this is possible, it makes it difficult for you to upgrade the agent and receive bug fixes. The layer may conflict with your vendored agent. Such a configuration should be regarded as unsupported, though it can work. diff --git a/src/content/docs/serverless-function-monitoring/aws-lambda-monitoring/get-started/compatibility-requirements-aws-lambda-monitoring.mdx b/src/content/docs/serverless-function-monitoring/aws-lambda-monitoring/get-started/compatibility-requirements-aws-lambda-monitoring.mdx index d92a2e4f993..1a4877d9c34 100644 --- a/src/content/docs/serverless-function-monitoring/aws-lambda-monitoring/get-started/compatibility-requirements-aws-lambda-monitoring.mdx +++ b/src/content/docs/serverless-function-monitoring/aws-lambda-monitoring/get-started/compatibility-requirements-aws-lambda-monitoring.mdx @@ -12,28 +12,21 @@ Before [enabling serverless monitoring](/docs/serverless-function-monitoring/aws ## Recommended AWS Lambda language runtimes [#languages] -* Node.js: `nodejs14.x`, `nodejs16.x`, `nodejs18.x` -* Python: `python3.7`, `python3.8`, `python3.9`, `python3.10`, `python3.11` -* Go: `provided`, `provided.al2` +* Node.js: `nodejs16.x`, `nodejs18.x`, `nodejs20.x` +* Python: `python3.8`, `python3.9`, `python3.10`, `python3.11`, `python3.12` +* Go: `provided.al2` * Java: `java8.al2`, `java11`, `java17` -* .NET Core: `dotnetcore3.1` -AWS has older runtimes for these languages as well, but AWS has not [chosen to support](https://docs.aws.amazon.com/lambda/latest/dg/runtimes-extensions-api.html) -the latest Lambda APIs with those older runtimes. Integration for older runtimes requires a different strategy, but -is possible. +AWS has older runtimes for these languages as well, but AWS has not [chosen to support](https://docs.aws.amazon.com/lambda/latest/dg/lambda-runtimes.html) +the latest Lambda APIs with those older runtimes. Integration for older runtimes requires a different strategy, but is possible. -Python and Node.js are by far the most popular languages in the Lambda ecosystem. The -[New Relic Lambda Layers](https://layers.newrelic-external.com/) -for Node.js and Python include the very latest New Relic agent version, and provide rich instrumentation with minimal -configuration, right out of the box. +Python and Node.js are by far the most popular languages in the Lambda ecosystem. The [New Relic Lambda Layers](https://layers.newrelic-external.com/) +for Node.js and Python include the very latest New Relic agent version, and provide rich instrumentation with minimal configuration, right out of the box. -Similarly, Go uses the New Relic Go agent. We recommend building self-hosting Go lambda functions, because the -latest AWS Lambda APIs are not supported in the AWS `go1.x` runtime. Fortunately, this is well supported by the AWS -Lambda SDK for Go. New Relic recommends keeping the agent module up to date. Support is limited for agent versions -older than 3.9.0. +Similarly, Go uses the New Relic Go agent. New Relic recommends keeping the agent module up to date. Support is limited for agent versions +older than 3.16.0. -To minimize performance impact, we've taken a different approach with Java and .NET Core. New Relic provides -[OpenTracing](https://opentracing.io/) SDKs for these runtimes. This approach requires a bit more code to integrate. +To minimize performance impact, we've taken a different approach with Java. New Relic provides [OpenTracing](https://opentracing.io/) SDKs for these runtimes. This approach requires a bit more code to integrate. For complete Lambda instrumentation, some of our agents included in our Lambda layers depend on a language-specific [AWS SDK](https://aws.amazon.com/tools/#sdk). If an AWS SDK is not used, Lambda data will appear as external service calls in the UI, with minimal detail. In other words, we rely on the AWS SDK to facilitate instrumentation of your function. From 4fc57f8b168a12a28ac28e5c8eaa14c20bff1e3b Mon Sep 17 00:00:00 2001 From: Keegan Mullaney Date: Wed, 17 Jan 2024 18:41:52 -0800 Subject: [PATCH 003/124] add NewRelicLambdaExtension layer details - Each layerless method can use the extension-only layer. - Link to the newrelic-lambda-extension repo for details and examples. --- ...erverless-monitoring-aws-lambda-legacy.mdx | 34 +++++++++++++------ 1 file changed, 24 insertions(+), 10 deletions(-) diff --git a/src/content/docs/serverless-function-monitoring/aws-lambda-monitoring/enable-lambda-monitoring/enable-serverless-monitoring-aws-lambda-legacy.mdx b/src/content/docs/serverless-function-monitoring/aws-lambda-monitoring/enable-lambda-monitoring/enable-serverless-monitoring-aws-lambda-legacy.mdx index 1821d6eefe3..0de2cc7d6bf 100644 --- a/src/content/docs/serverless-function-monitoring/aws-lambda-monitoring/enable-lambda-monitoring/enable-serverless-monitoring-aws-lambda-legacy.mdx +++ b/src/content/docs/serverless-function-monitoring/aws-lambda-monitoring/enable-lambda-monitoring/enable-serverless-monitoring-aws-lambda-legacy.mdx @@ -83,8 +83,10 @@ On this page, you will learn how to manually instrument your lambda function. It 7. Invoke the Lambda at least once. This creates a CloudWatch log group, which must be present for the next step to work. - Our wrapper gathers data about the Lambda execution, generates a JSON message, and logs it to CloudWatch Logs. - Next, you'll [configure CloudWatch to send those logs to New Relic](/docs/serverless-function-monitoring/aws-lambda-monitoring/enable-lambda-monitoring/instrument-your-own/#manual-stream-logs). + Our wrapper gathers data about the Lambda execution, generates a JSON message, and logs it to CloudWatch Logs. Next, you have two options to send those logs to New Relic: + + * Add our [NewRelicLambdaExtension layer](https://github.com/newrelic/newrelic-lambda-extension). You can [see an example here](https://github.com/newrelic/newrelic-lambda-extension/tree/main/examples/sam/go). + * [configure CloudWatch Logs](/docs/serverless-function-monitoring/aws-lambda-monitoring/enable-lambda-monitoring/instrument-your-own/#manual-stream-logs) @@ -480,7 +491,10 @@ On this page, you will learn how to manually instrument your lambda function. It 9. Invoke the Lambda at least once. This creates a CloudWatch log group, which must be present for the next step to work. - The New Relic decorator gathers data about the Lambda execution, generates a JSON message, and logs it to CloudWatch Logs. Next, [configure CloudWatch to send those logs to New Relic](/docs/serverless-function-monitoring/aws-lambda-monitoring/enable-lambda-monitoring/instrument-your-own/#manual-stream-logs). + The New Relic decorator gathers data about the Lambda execution, generates a JSON message, and logs it to CloudWatch Logs. Next, you have two options to send those logs to New Relic: + + * Add our [NewRelicLambdaExtension layer](https://github.com/newrelic/newrelic-lambda-extension). You can [see an example here](https://github.com/newrelic/newrelic-lambda-extension/tree/main/examples/sam/go). + * [configure CloudWatch Logs](/docs/serverless-function-monitoring/aws-lambda-monitoring/enable-lambda-monitoring/instrument-your-own/#manual-stream-logs) From 4431de75f80fb42dfee0d9d912c13719f13654be Mon Sep 17 00:00:00 2001 From: Keegan Mullaney Date: Wed, 17 Jan 2024 18:47:05 -0800 Subject: [PATCH 004/124] docs: punctuation fixes --- .../enable-serverless-monitoring-aws-lambda-legacy.mdx | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/src/content/docs/serverless-function-monitoring/aws-lambda-monitoring/enable-lambda-monitoring/enable-serverless-monitoring-aws-lambda-legacy.mdx b/src/content/docs/serverless-function-monitoring/aws-lambda-monitoring/enable-lambda-monitoring/enable-serverless-monitoring-aws-lambda-legacy.mdx index 0de2cc7d6bf..beeb18d3663 100644 --- a/src/content/docs/serverless-function-monitoring/aws-lambda-monitoring/enable-lambda-monitoring/enable-serverless-monitoring-aws-lambda-legacy.mdx +++ b/src/content/docs/serverless-function-monitoring/aws-lambda-monitoring/enable-lambda-monitoring/enable-serverless-monitoring-aws-lambda-legacy.mdx @@ -86,7 +86,7 @@ On this page, you will learn how to manually instrument your lambda function. It Our wrapper gathers data about the Lambda execution, generates a JSON message, and logs it to CloudWatch Logs. Next, you have two options to send those logs to New Relic: * Add our [NewRelicLambdaExtension layer](https://github.com/newrelic/newrelic-lambda-extension). You can [see an example here](https://github.com/newrelic/newrelic-lambda-extension/tree/main/examples/sam/go). - * [configure CloudWatch Logs](/docs/serverless-function-monitoring/aws-lambda-monitoring/enable-lambda-monitoring/instrument-your-own/#manual-stream-logs) + * [Configure CloudWatch Logs](/docs/serverless-function-monitoring/aws-lambda-monitoring/enable-lambda-monitoring/instrument-your-own/#manual-stream-logs). @@ -494,7 +494,7 @@ On this page, you will learn how to manually instrument your lambda function. It The New Relic decorator gathers data about the Lambda execution, generates a JSON message, and logs it to CloudWatch Logs. Next, you have two options to send those logs to New Relic: * Add our [NewRelicLambdaExtension layer](https://github.com/newrelic/newrelic-lambda-extension). You can [see an example here](https://github.com/newrelic/newrelic-lambda-extension/tree/main/examples/sam/go). - * [configure CloudWatch Logs](/docs/serverless-function-monitoring/aws-lambda-monitoring/enable-lambda-monitoring/instrument-your-own/#manual-stream-logs) + * [Configure CloudWatch Logs](/docs/serverless-function-monitoring/aws-lambda-monitoring/enable-lambda-monitoring/instrument-your-own/#manual-stream-logs). From 948e58ad66dcb0c13cb28256a1f6d408d975aff2 Mon Sep 17 00:00:00 2001 From: Keegan Mullaney Date: Wed, 17 Jan 2024 19:07:19 -0800 Subject: [PATCH 005/124] docs: detail advantages of the CW path --- .../instrument-your-own.mdx | 15 +++++---------- .../get-started/architecture.mdx | 8 +++++++- 2 files changed, 12 insertions(+), 11 deletions(-) diff --git a/src/content/docs/serverless-function-monitoring/aws-lambda-monitoring/enable-lambda-monitoring/instrument-your-own.mdx b/src/content/docs/serverless-function-monitoring/aws-lambda-monitoring/enable-lambda-monitoring/instrument-your-own.mdx index 0903626ce2c..2d05f9f4272 100644 --- a/src/content/docs/serverless-function-monitoring/aws-lambda-monitoring/enable-lambda-monitoring/instrument-your-own.mdx +++ b/src/content/docs/serverless-function-monitoring/aws-lambda-monitoring/enable-lambda-monitoring/instrument-your-own.mdx @@ -40,11 +40,9 @@ In the long term, it's usually less work to integrate New Relic into your existi id="cloudformation" title="CloudFormation / SAM templates" > - AWS's Serverless Application Model, or SAM is a variant of CloudFormation templates that simplifies relating functions to the resources they depend on, and managing the lifecycle of an entire application. We use SAM and CloudFormation for - most of our Lambda example functions, and many other tools are built on top of CloudFormation templates, providing an addition layer of abstraction. + AWS's Serverless Application Model, or SAM is a variant of CloudFormation templates that simplifies relating functions to the resources they depend on, and managing the lifecycle of an entire application. We use SAM and CloudFormation for most of our Lambda example functions, and many other tools are built on top of CloudFormation templates, providing an addition layer of abstraction. - At its core, CloudFormation is a way to express the target state of an AWS Resource (such as a Lambda function) using YAML or JSON, and an execution service that makes API calls to other services (such as AWS Lambda) to achieve that - target state. + At its core, CloudFormation is a way to express the target state of an AWS Resource (such as a Lambda function) using YAML or JSON, and an execution service that makes API calls to other services (such as AWS Lambda) to achieve that target state. Here's an example of a simple CloudFormation template for a Node.js Lambda function: @@ -139,7 +137,7 @@ For most, one of the options above will work well. There's a chance that you can ### CloudWatch telemetry [#cloudwatch-telemetry] -As [mentioned previously](/docs/serverless-function-monitoring/aws-lambda-monitoring/get-started/architecture#cloudwatch) we used to recommend sending your telemetry through CloudWatch Logs. This path can still work, though it is deprecated. +The [CloudWatch path has its pros and cons](/docs/serverless-function-monitoring/aws-lambda-monitoring/get-started/architecture#cloudwatch) and is a viable option for sending telemetry to New Relic. 1. Disable the extension by adding the `NEW_RELIC_LAMBDA_EXTENSION_ENABLED` environment variable to your function, with the value `false`. @@ -214,14 +212,11 @@ The layer contains several components, depending on your runtime: 3. A handler wrapper, which configures the agent, and intercepts invocations, to start the instrumentation process, then invokes your handler. -If you need a different wrapper, you can build your own layer, based on ours. See our [newrelic-lambda-layers GitHub repo](https://github.com/newrelic/newrelic-lambda-layers) for the code contained in -our wrapper function. By creating [your own layer](https://docs.aws.amazon.com/lambda/latest/dg/configuration-layers.html) with a replacement wrapper, and applying it _after_ ours, your wrapper will overwrite the one we supply. Similarly, -you can include your custom wrapper directly in your function. +If you need a different wrapper, you can build your own layer, based on ours. See our [newrelic-lambda-layers GitHub repo](https://github.com/newrelic/newrelic-lambda-layers) for the code contained in our wrapper function. By creating [your own layer](https://docs.aws.amazon.com/lambda/latest/dg/configuration-layers.html) with a replacement wrapper, and applying it _after_ ours, your wrapper will overwrite the one we supply. Similarly, you can include your custom wrapper directly in your function. Similarly, if you are testing a custom build of the agent, perhaps to address some bug, you could modify our layer packaging scripts above to package your agent build, and build your own layer. -We explicitly do not recommend that you package the agent with your Lambda function. While this is possible, it makes it difficult for you to upgrade the agent and receive bug fixes. The layer may conflict with your vendored -agent. Such a configuration should be regarded as unsupported, though it can work. +We explicitly do not recommend that you package the agent with your Lambda function. While this is possible, it makes it difficult for you to upgrade the agent and receive bug fixes. The layer may conflict with your vendored agent. Such a configuration should be regarded as unsupported, though it can work. diff --git a/src/content/docs/serverless-function-monitoring/aws-lambda-monitoring/get-started/architecture.mdx b/src/content/docs/serverless-function-monitoring/aws-lambda-monitoring/get-started/architecture.mdx index 3e5d8869fd2..2b918c4af39 100644 --- a/src/content/docs/serverless-function-monitoring/aws-lambda-monitoring/get-started/architecture.mdx +++ b/src/content/docs/serverless-function-monitoring/aws-lambda-monitoring/get-started/architecture.mdx @@ -51,10 +51,16 @@ from the classic APM experience. Inside the [New Relic platform](/docs/new-relic Backed by NRDB and NRQL, you can also write custom [dashboards](/docs/query-your-data/explore-query-data/dashboards/introduction-dashboards/) and [alerts](/docs/alerts-applied-intelligence/new-relic-alerts/learn-alerts/introduction-alerts/) for your functions. -## The legacy CloudWatch path [#cloudwatch] +## The CloudWatch path [#cloudwatch] Older integrations send telemetry in a slightly different way. Instead of passing telemetry off to the extension, the agent writes it out to CloudWatch as a log line. By adding a log subscription filter to pipe your function logs into the [`aws-log-ingestion`](https://github.com/newrelic/aws-log-ingestion) Lambda function, we can recover that CloudWatch log line, and forward it on to New Relic, along with some other platform telemetry. In the past, we've seen that this approach has some considerable drawbacks. The AWS CloudWatch service can generate a lot of data. If you're on our Free edition, you may hit your data limit pretty quickly. If you're paying for data, you may find this service making up the largest share of the data you're sending to New Relic. + +There are also some advantages to the CloudWatch path: + +* Captures all logs from CloudWatch independently of your function's execution. There's less chance it will interfere with the normal operation, or impact the invocation duration, of your function. +* Useful for functions in a VPC that can't have outbound traffic to New Relic. +* Needed for [other forms of infra/database telemetry](/docs/infrastructure/amazon-integrations/aws-integrations-list/aws-rds-enhanced-monitoring-integration/). From 3f22936f83dd3726a879dbf93786a597637c174d Mon Sep 17 00:00:00 2001 From: Keegan Mullaney Date: Fri, 19 Jan 2024 21:17:50 -0800 Subject: [PATCH 006/124] docs: bump Java dependencies - successfully tested with Java17, java-aws-lambda:2.1.1, newrelic-java-lambda:2.2.2 --- .../enable-serverless-monitoring-aws-lambda-legacy.mdx | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/src/content/docs/serverless-function-monitoring/aws-lambda-monitoring/enable-lambda-monitoring/enable-serverless-monitoring-aws-lambda-legacy.mdx b/src/content/docs/serverless-function-monitoring/aws-lambda-monitoring/enable-lambda-monitoring/enable-serverless-monitoring-aws-lambda-legacy.mdx index beeb18d3663..50e783d4feb 100644 --- a/src/content/docs/serverless-function-monitoring/aws-lambda-monitoring/enable-lambda-monitoring/enable-serverless-monitoring-aws-lambda-legacy.mdx +++ b/src/content/docs/serverless-function-monitoring/aws-lambda-monitoring/enable-lambda-monitoring/enable-serverless-monitoring-aws-lambda-legacy.mdx @@ -105,8 +105,8 @@ On this page, you will learn how to manually instrument your lambda function. It * Lambda Tracer: [com.newrelic.opentracing:newrelic-java-lambda:1.1.1](https://search.maven.org/artifact/com.newrelic.opentracing/newrelic-java-lambda/1.1.1/jar) * Lambda SDK: [com.newrelic.opentracing:java-aws-lambda:1.0.0](https://search.maven.org/artifact/com.newrelic.opentracing/java-aws-lambda/1.0.0/jar) * **OpenTracing 0.32.0, 0.33.0**: - * Lambda Tracer: [com.newrelic.opentracing:newrelic-java-lambda:2.2.1](https://search.maven.org/artifact/com.newrelic.opentracing/newrelic-java-lambda) - * Lambda SDK: [com.newrelic.opentracing:java-aws-lambda:2.1.0](https://search.maven.org/artifact/com.newrelic.opentracing/java-aws-lambda) + * Lambda Tracer: [com.newrelic.opentracing:newrelic-java-lambda:2.2.2](https://search.maven.org/artifact/com.newrelic.opentracing/newrelic-java-lambda) + * Lambda SDK: [com.newrelic.opentracing:java-aws-lambda:2.1.1](https://search.maven.org/artifact/com.newrelic.opentracing/java-aws-lambda) To instrument your Java Lambda: @@ -115,8 +115,8 @@ On this page, you will learn how to manually instrument your lambda function. It ```java dependencies { - compile("com.newrelic.opentracing:java-aws-lambda:2.1.0") - compile("com.newrelic.opentracing:newrelic-java-lambda:2.2.1") + compile("com.newrelic.opentracing:java-aws-lambda:2.1.1") + compile("com.newrelic.opentracing:newrelic-java-lambda:2.2.2") compile("io.opentracing:opentracing-util:0.33.0") } ``` From 05f2769a021c3a79d4290c684ae219602c90a91c Mon Sep 17 00:00:00 2001 From: Keegan Mullaney Date: Fri, 26 Jan 2024 19:27:18 -0800 Subject: [PATCH 007/124] docs: keep python3.7 for now --- .../compatibility-requirements-aws-lambda-monitoring.mdx | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/content/docs/serverless-function-monitoring/aws-lambda-monitoring/get-started/compatibility-requirements-aws-lambda-monitoring.mdx b/src/content/docs/serverless-function-monitoring/aws-lambda-monitoring/get-started/compatibility-requirements-aws-lambda-monitoring.mdx index 1a4877d9c34..81701a59f8b 100644 --- a/src/content/docs/serverless-function-monitoring/aws-lambda-monitoring/get-started/compatibility-requirements-aws-lambda-monitoring.mdx +++ b/src/content/docs/serverless-function-monitoring/aws-lambda-monitoring/get-started/compatibility-requirements-aws-lambda-monitoring.mdx @@ -13,7 +13,7 @@ Before [enabling serverless monitoring](/docs/serverless-function-monitoring/aws ## Recommended AWS Lambda language runtimes [#languages] * Node.js: `nodejs16.x`, `nodejs18.x`, `nodejs20.x` -* Python: `python3.8`, `python3.9`, `python3.10`, `python3.11`, `python3.12` +* Python: `python3.7`, `python3.8`, `python3.9`, `python3.10`, `python3.11`, `python3.12` * Go: `provided.al2` * Java: `java8.al2`, `java11`, `java17` From b963674f91ff3c411accd689fd945962bdab5be9 Mon Sep 17 00:00:00 2001 From: Bradley Camacho Date: Fri, 23 Feb 2024 09:21:03 -0800 Subject: [PATCH 008/124] First drafts --- src/install/apache-flink/appInfo.mdx | 9 + .../apache-flink/default-configuration.mdx | 30 + .../apache-flink/default-install-linux.mdx | 44 ++ .../apache-flink/default-requirements.mdx | 11 + src/install/apache-flink/find-data.mdx | 11 + src/install/apache-flink/guided.mdx | 38 ++ src/install/apache-flink/install-infra.mdx | 6 + src/install/apache-flink/intro.mdx | 36 + .../apache-flink/linux/install-apt.mdx | 16 + .../apache-flink/linux/install-linux.mdx | 46 ++ .../apache-flink/linux/install-tarball.mdx | 32 + .../apache-flink/linux/install-yum.mdx | 16 + .../apache-flink/linux/install-zypper.mdx | 16 + src/install/apache-flink/whatsNext.mdx | 639 ++++++++++++++++++ .../apache-flink/windows/install-msi.mdx | 10 + .../apache-flink/windows/install-windows.mdx | 24 + 16 files changed, 984 insertions(+) create mode 100644 src/install/apache-flink/appInfo.mdx create mode 100644 src/install/apache-flink/default-configuration.mdx create mode 100644 src/install/apache-flink/default-install-linux.mdx create mode 100644 src/install/apache-flink/default-requirements.mdx create mode 100644 src/install/apache-flink/find-data.mdx create mode 100644 src/install/apache-flink/guided.mdx create mode 100644 src/install/apache-flink/install-infra.mdx create mode 100644 src/install/apache-flink/intro.mdx create mode 100644 src/install/apache-flink/linux/install-apt.mdx create mode 100644 src/install/apache-flink/linux/install-linux.mdx create mode 100644 src/install/apache-flink/linux/install-tarball.mdx create mode 100644 src/install/apache-flink/linux/install-yum.mdx create mode 100644 src/install/apache-flink/linux/install-zypper.mdx create mode 100644 src/install/apache-flink/whatsNext.mdx create mode 100644 src/install/apache-flink/windows/install-msi.mdx create mode 100644 src/install/apache-flink/windows/install-windows.mdx diff --git a/src/install/apache-flink/appInfo.mdx b/src/install/apache-flink/appInfo.mdx new file mode 100644 index 00000000000..86c24861c27 --- /dev/null +++ b/src/install/apache-flink/appInfo.mdx @@ -0,0 +1,9 @@ +--- +componentType: appInfoConfig +headingText: Choose your framework +--- + + + + + diff --git a/src/install/apache-flink/default-configuration.mdx b/src/install/apache-flink/default-configuration.mdx new file mode 100644 index 00000000000..3dff20b5732 --- /dev/null +++ b/src/install/apache-flink/default-configuration.mdx @@ -0,0 +1,30 @@ +--- +componentType: default +headingText: Configure the integration +--- + +Edit the `nri-Apache Flink-config.yml` file to configure your integration as needed. The following example config fills in all the required options and reports all metrics the integration pulls: + +``` +integrations: + - name: nri-Apache Flink + env: + METRICS: "true" + STATUS_URL: http://127.0.0.1/server-status?auto + REMOTE_MONITORING: true + interval: 15s + labels: + env: production + role: load_balancer + + - name: nri-Apache Flink + env: + INVENTORY: "true" + STATUS_URL: http://127.0.0.1/server-status?auto + REMOTE_MONITORING: true + interval: 60s + labels: + env: production + role: load_balancer + inventory_source: config/Apache Flink +``` \ No newline at end of file diff --git a/src/install/apache-flink/default-install-linux.mdx b/src/install/apache-flink/default-install-linux.mdx new file mode 100644 index 00000000000..a71aa0d670f --- /dev/null +++ b/src/install/apache-flink/default-install-linux.mdx @@ -0,0 +1,44 @@ +--- +componentType: default +headingText: Configure the integration +--- + +1. Change directory to the integrations configuration folder by running: + +```shell +cd /etc/newrelic-infra/integrations.d +``` + +2. Copy the sample configuration file by running: + +```shell +sudo cp nri-Apache Flink-config.yml.sample nri-Apache Flink-config.yml +``` + +3. Edit the `nri-Apache Flink-config.yml` file. The only two required fields are `_cluster_name` and `_uri`. This example config file collects all metrics: + +``` +integrations: + - name: nri-Apache Flink + env: + METRICS: "true" + STATUS_URL: http://127.0.0.1/server-status?auto + REMOTE_MONITORING: true + interval: 15s + labels: + env: production + role: load_balancer + + - name: nri-Apache Flink + env: + INVENTORY: "true" + STATUS_URL: http://127.0.0.1/server-status?auto + REMOTE_MONITORING: true + interval: 60s + labels: + env: production + role: load_balancer + inventory_source: config/Apache Flink +``` + +You can find all the config options at the bottom of this doc along with more complex config examples. diff --git a/src/install/apache-flink/default-requirements.mdx b/src/install/apache-flink/default-requirements.mdx new file mode 100644 index 00000000000..9618bd3a557 --- /dev/null +++ b/src/install/apache-flink/default-requirements.mdx @@ -0,0 +1,11 @@ +--- +headingText: Check the compatibility and requirements +componentType: default +--- + +Before installation, ensure you meet these requirements: + +* A New Relic account. Don't have one? [Sign up for free!](https://newrelic.com/signup) No credit card required. +* Apache Flink versions 2.2 and 2.4 +* [Apache Flink status module](https://httpd.Apache Flink.org/docs/2.4/mod/mod_status.html) enabled and configured for Apache Flink instance. +* Apache Flink status module endpoint (default `server-status`) available from the host containing the Apache Flink integration. \ No newline at end of file diff --git a/src/install/apache-flink/find-data.mdx b/src/install/apache-flink/find-data.mdx new file mode 100644 index 00000000000..d3e6a8e1e28 --- /dev/null +++ b/src/install/apache-flink/find-data.mdx @@ -0,0 +1,11 @@ +--- +componentType: default +headingText: Find and use data +--- + +Data from this integration can be found by going to: **[one.newrelic.com](https://one.newrelic.com/all-capabilities) > Infrastructure > Third-party services > Apache Flink**. + +Apache Flink data is attached to the `Apache FlinkSample` [event type](/docs/using-new-relic/data/understand-data/new-relic-data-types#events-new-relic). You can [query this data](/docs/using-new-relic/data/understand-data/query-new-relic-data) for troubleshooting purposes or to create custom charts and dashboards. + +For more on how to find and use your data, see [Understand integration data](/docs/infrastructure/integrations/find-use-infrastructure-integration-data). + diff --git a/src/install/apache-flink/guided.mdx b/src/install/apache-flink/guided.mdx new file mode 100644 index 00000000000..a3357c2f2e2 --- /dev/null +++ b/src/install/apache-flink/guided.mdx @@ -0,0 +1,38 @@ +--- +componentType: appInfoConfigOption +optionType: deployment +headingText: Choose your framework +--- + + + +**Use guided install to quickly see your data in the UI** + +Guided install is a single CLI command you can run on your system to monitor your instance. The CLI installs the infrastructure agent and integration. + +This is a good way to trial ingesting data on our platform. + + + + Guided install + + + + EU guided install + + + +If you'd prefer to install manually, follow the steps below. + + + + + diff --git a/src/install/apache-flink/install-infra.mdx b/src/install/apache-flink/install-infra.mdx new file mode 100644 index 00000000000..7b1858e5e63 --- /dev/null +++ b/src/install/apache-flink/install-infra.mdx @@ -0,0 +1,6 @@ +--- +componentType: default +headingText: Install the infrastructure agent +--- + +To use the Apache Flink integration, you need to also [install the infrastructure agent](/docs/infrastructure/install-infrastructure-agent/get-started/install-infrastructure-agent-new-relic/) on the same host. The infrastructure agent monitors the host itself, while the integration you'll install in the next step extends your monitoring with specific data such as database and instance metrics. diff --git a/src/install/apache-flink/intro.mdx b/src/install/apache-flink/intro.mdx new file mode 100644 index 00000000000..6e2b3fe0e2c --- /dev/null +++ b/src/install/apache-flink/intro.mdx @@ -0,0 +1,36 @@ +--- +headingText: Before we start +componentType: default +--- + +Our Apache Flink integration reports data from your Apache Flink web server to the New Relic platform. You can view dashboards of your Apache Flink metric data, create alert policies, and create your own custom queries and charts. + +To get the most out of this page, select the installation method that fits your environment. You need a [New Relic account](https://newrelic.com/signup) before starting the installation process. + + + +**Use guided install to quickly see your data in the UI** + +The guided install is a single CLI command you can run to monitor your instance. It's a good option for small organizations, or for anyone who wants to test out New Relic. + + + + Guided install + + + + EU guided install + + + +For a more permanent and scalable solution, we recommend the standard manual install of the agent: keep reading for how to do that. + + \ No newline at end of file diff --git a/src/install/apache-flink/linux/install-apt.mdx b/src/install/apache-flink/linux/install-apt.mdx new file mode 100644 index 00000000000..03dcfc4ec63 --- /dev/null +++ b/src/install/apache-flink/linux/install-apt.mdx @@ -0,0 +1,16 @@ +--- +componentType: default +headingText: Download using APT +--- + +1. From the command line, run these commands: + +```shell +sudo apt-get update +``` + +2. Run the following command: + +```shell +sudo apt-get install nri-Apache Flink +``` \ No newline at end of file diff --git a/src/install/apache-flink/linux/install-linux.mdx b/src/install/apache-flink/linux/install-linux.mdx new file mode 100644 index 00000000000..3048feb46d1 --- /dev/null +++ b/src/install/apache-flink/linux/install-linux.mdx @@ -0,0 +1,46 @@ +--- +componentType: default +headingText: Download the integration +--- + +1. Change directory to the integrations configuration folder by running: + +```shell +cd /etc/newrelic-infra/integrations.d +``` + +2. Copy the sample configuration file by running: + +```shell +sudo cp nri-Apache Flink-config.yml.sample nri-Apache Flink-config.yml +``` + +3. Edit the `nri-Apache Flink-config.yml` file. This example config file collects all metrics: + +``` +integrations: + - name: nri-Apache Flink + env: + METRICS: "true" + STATUS_URL: http://127.0.0.1/server-status?auto + REMOTE_MONITORING: true + interval: 15s + labels: + env: production + role: load_balancer + + - name: nri-Apache Flink + env: + INVENTORY: "true" + STATUS_URL: http://127.0.0.1/server-status?auto + REMOTE_MONITORING: true + interval: 60s + labels: + env: production + role: load_balancer + inventory_source: config/Apache Flink +``` + +You can find all the config options at the bottom of this doc along with more complex config examples. + + diff --git a/src/install/apache-flink/linux/install-tarball.mdx b/src/install/apache-flink/linux/install-tarball.mdx new file mode 100644 index 00000000000..b984cb633c6 --- /dev/null +++ b/src/install/apache-flink/linux/install-tarball.mdx @@ -0,0 +1,32 @@ +--- +componentType: default +headingText: Download using tarball +--- + + + We recommend [using your distribution package manager to install the infrastructure agent](/docs/infrastructure/install-configure-manage-infrastructure/linux-installation/install-infrastructure-linux-using-package-manager). If you choose to [manually install the agent](/docs/infrastructure/install-configure-manage-infrastructure/linux-installation/tarball-manual-install-infrastructure-linux), you may also want to install the on-host integrations from the provided tarballs. + + + The manual install process is not automated. If you opt for manual install, you must place the different files in the correct folders, and ensure that the agent has all the permissions to execute the integrations. + + To install an integration from a tarball: + + 1. Download the packaged integration file from the [tarball repository](https://download.newrelic.com/infrastructure_agent/binaries/linux/amd64/). + 2. Unpack the tarball file according to our [integration file structure and placement rules](/docs/integrations/integrations-sdk/getting-started/integration-file-structure-activation), so the agent is able to find the definitions, configurations, and executables of the integration. + 3. Place the binary that contains the definition file inside `newrelic-integrations` or `custom-integrations` in the [agent directory](/docs/infrastructure/install-configure-manage-infrastructure/linux-installation/tarball-manual-install-infrastructure-linux#agent-directory). + 4. Place the integration's config file under the [plugin directory](/docs/infrastructure/install-configure-manage-infrastructure/linux-installation/tarball-manual-install-infrastructure-linux#configure-plugin). + 5. Follow the JMX tool instructions below. + + ### Use of the New Relic JMX tool [#nrjmx] + +Download the JMX tool from [our repository](https://download.newrelic.com/infrastructure_agent/binaries/linux/noarch/) and unpack it. + + + `nrjmx` requires Java 8 or higher. + + +For JMX integration version 2.3.3 or higher and Cassandra integration version 2.3.0 or higher, the `nrjmx` tool is included as a dependency. For this reason, when using a package manager, the `nrjmx` tool doesn't have to be installed manually. + +If you have `nrjmx` already installed and install `nri-jmx`, our JMX tool keeps the already-installed version. If you don't have `nrjmx` already installed, it gets the latest `nrjmx` release. + +By default, the `nrjmx` location is `/usr/bin/nrjmx/*`. To install in a different location, set the new path in the `NR_JMX_TOOL` environment variable. \ No newline at end of file diff --git a/src/install/apache-flink/linux/install-yum.mdx b/src/install/apache-flink/linux/install-yum.mdx new file mode 100644 index 00000000000..c7f2bd100c8 --- /dev/null +++ b/src/install/apache-flink/linux/install-yum.mdx @@ -0,0 +1,16 @@ +--- +componentType: default +headingText: Download using Yum +--- + +1. From the command line, run these commands: + +```shell +sudo yum -q makecache -y --disablerepo='*' --enablerepo='newrelic-infra' +``` + +2. Run the following command: + +```shell +sudo yum install nri-Apache Flink +``` \ No newline at end of file diff --git a/src/install/apache-flink/linux/install-zypper.mdx b/src/install/apache-flink/linux/install-zypper.mdx new file mode 100644 index 00000000000..c3551e2eed6 --- /dev/null +++ b/src/install/apache-flink/linux/install-zypper.mdx @@ -0,0 +1,16 @@ +--- +componentType: default +headingText: Download using Zypper +--- + +1. From the command line, run these commands: + +```shell +sudo zypper -n ref -r newrelic-infra +``` + +2. Run the following command: + +```shell +sudo zypper -n install nri-Apache Flink +``` \ No newline at end of file diff --git a/src/install/apache-flink/whatsNext.mdx b/src/install/apache-flink/whatsNext.mdx new file mode 100644 index 00000000000..2e48a8bbfab --- /dev/null +++ b/src/install/apache-flink/whatsNext.mdx @@ -0,0 +1,639 @@ +--- +componentType: default +headingText: Metrics collected by the integration +--- + +### Apache Flink configuration options [#config-options] + +The Apache Flink integration collects both metrics and inventory information. This table provides a description for each config setting and whether it applies to metrics, inventory, or both. + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + { + ' ' + } + + + + + + + + + + + + { + ' ' + } + + + + + + + + + + + + { + ' ' + } + + + + + + + + + + + + { + ' ' + } + + + + + + + + + + + + { + ' ' + } + + + + { + ' ' + } + + + + + + + + + + + { + ' ' + } + + + + + + + + + + +
+ Setting + + Description + + Default + + Applies to +
+ `STATUS_URL` + + The URL set up to provide the metrics using the status module. + + `http://127.0.0.1/server-status?auto` + + Metrics, inventory +
+ [`REMOTE_MONITORING`](/docs/remote-monitoring-host-integrations) + + Enable multi-tenancy monitoring. + + `true` + + Metrics, inventory +
+ `BINARY_PATH` + + Set location of the Apache Flink binary file. + + [None] + + Inventory +
+ `CA_BUNDLE_FILE` + + Alternative certificate authority bundle file. + + [None] + + Metrics +
+ `CA_BUNDLE_DIR` + + Alternative certificate authority bundle directory. + + [None] + + Metrics +
+ `VALIDATE_CERTS` + + Set to `false` if the status URL is HTTPS with a self-signed certificate. + + `true` + + Metrics +
+ `METRICS` + + Set to `true` to enable metrics-only collection. + + `false` + +
+ `INVENTORY` + + Set to `true` to enable inventory-only collection. + + `false` + +
+ +## Example configurations [#examples] + +Here are some example YAML configurations: + + + + This is a very basic configuration to collect metrics and inventory from your localhost: + + ```yml + integrations: + - name: nri-Apache Flink + env: + METRICS: "true" + STATUS_URL: http://127.0.0.1/server-status?auto + REMOTE_MONITORING: true + interval: 15s + labels: + env: production + role: load_balancer + + - name: nri-Apache Flink + env: + INVENTORY: "true" + STATUS_URL: http://127.0.0.1/server-status?auto + REMOTE_MONITORING: true + interval: 60s + labels: + env: production + role: load_balancer + inventory_source: config/Apache Flink + ``` + + + + This configuration collects metrics and inventory from your localhost protected with basic authentication. Replace the `username` and `password` on the `STATUS_URL` with your credentials: + + ```yml + integrations: + - name: nri-Apache Flink + env: + METRICS: "true" + STATUS_URL: http://username:password@127.0.0.1/server-status?auto + REMOTE_MONITORING: true + interval: 15s + labels: + env: production + role: load_balancer + + - name: nri-Apache Flink + env: + INVENTORY: "true" + STATUS_URL: http://username:password@127.0.0.1/server-status?auto + REMOTE_MONITORING: true + interval: 60s + labels: + env: production + role: load_balancer + inventory_source: config/Apache Flink + ``` + + + + By default the integration tries to detect the Apache Flink binary on these 2 different locations: `/usr/sbin/httpd` and `/usr/sbin/Apache Flink2ctl`. If your Apache Flink is installed on a custom location or you are using MS Windows, use the `BINARY_PATH` setting to specify the correct location and filename of your Apache Flink binary: + + ```yml + integrations: + - name: nri-Apache Flink + env: + METRICS: "true" + STATUS_URL: http://127.0.0.1/server-status?auto + REMOTE_MONITORING: true + interval: 15s + labels: + env: production + role: load_balancer + + - name: nri-Apache Flink + env: + INVENTORY: "true" + STATUS_URL: http://127.0.0.1/server-status?auto + BINARY_PATH: 'C:\Apache Flink\bin\httpd.exe' + REMOTE_MONITORING: true + interval: 60s + labels: + env: production + role: load_balancer + inventory_source: config/Apache Flink + ``` + + + + In this configuration we only have one integration block with `METRICS: true` to collect only metrics and added `VALIDATE_CERTS: false` to prevent validation of the server's SSL certificate when using a self-signed one: + + ```yml + integrations: + - name: nri-Apache Flink + env: + METRICS: "true" + STATUS_URL: https://my_Apache Flink_host/server-status?auto + VALIDATE_CERTS: false + REMOTE_MONITORING: true + interval: 15s + labels: + env: production + role: load_balancer + ``` + + + + In this configuration we only have one integration block with `METRICS: true` to collect only metrics and added `CA_BUNDLE_FILE` pointing to an alternative certificate file: + + ```yml + integrations: + - name: nri-Apache Flink + env: + METRICS: "true" + STATUS_URL: https://my_Apache Flink_host/server-status?auto + CA_BUNDLE_FILE: '/etc/ssl/certs/custom-ca.crt' + REMOTE_MONITORING: true + interval: 15s + labels: + env: production + role: load_balancer + ``` + + + + In this configuration we are using the environment variable `Apache Flink_STATUS` to populate the STATUS_URL setting of the integration: + + ```yml + integrations: + - name: nri-Apache Flink + env: + METRICS: "true" + STATUS_URL: { { Apache Flink_STATUS } } + REMOTE_MONITORING: true + interval: 15s + labels: + env: production + role: load_balancer + ``` + + + + In this configuration we are monitoring multiple Apache Flink servers from the same integration. For the first instance (`STATUS_URL: https://1st_Apache Flink_host/server-status?auto`) we are collecting metrics and inventory while for the second instance (`STATUS_URL: https://2nd_Apache Flink_host/server-status?auto`) we will only collect metrics. + + ```yml + integrations: + - name: nri-Apache Flink + env: + METRICS: "true" + STATUS_URL: https://1st_Apache Flink_host/server-status?auto + REMOTE_MONITORING: true + interval: 15s + labels: + env: production + role: load_balancer + - name: nri-Apache Flink + env: + INVENTORY: "true" + STATUS_URL: https://1st_Apache Flink_host/server-status?auto + REMOTE_MONITORING: true + interval: 60s + labels: + env: production + role: load_balancer + inventory_source: config/Apache Flink + + - name: nri-Apache Flink + env: + METRICS: "true" + STATUS_URL: http://2nd_Apache Flink_host/server-status?auto + REMOTE_MONITORING: true + interval: 15s + labels: + env: production + role: load_balancer + ``` + + + +### Labels [#labels] + +You can further decorate your metrics using labels. Labels allow you to add attributes (key/value pairs) to your metrics, which you can then use to query, filter, or group your metrics. + +Our default sample config file includes examples of labels but, because they're not mandatory, you can remove, modify, or add new ones of your choice. The following example adds the attribute 'production:load_balancer' to reported metrics. + +```yml +labels: + env: production + role: load_balancer +``` + +## Metric data [#metrics] + +The Apache Flink integration collects the following metric data attributes. Each metric name is prefixed with a category indicator and a period, such as `net.` or `server.`. + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ Name + + Description +
+ `net.bytesPerSecond` + + Rate of the number of bytes served, in bytes per second. +
+ `net.requestsPerSecond` + + Rate of the number of client requests, in requests per second. +
+ `server.busyWorkers` + + Current number of busy workers. +
+ `server.idleWorkers` + + Current number of idle workers. +
+ `server.scoreboard.closingWorkers` + + Current number of workers closing TCP connection after serving the response. +
+ `server.scoreboard.dnsLookupWorkers` + + Current number of workers performing a DNS lookup. +
+ `server.scoreboard.finishingWorkers` + + Current number of workers gracefully finishing. +
+ `server.scoreboard.idleCleanupWorkers` + + Current number of idle workers ready for cleanup. +
+ `server.scoreboard.keepAliveWorkers` + + Current number of workers maintaining a keep-alive connection. +
+ `server.scoreboard.loggingWorkers` + + Current number of workers that are logging. +
+ `server.scoreboard.readingWorkers` + + Current number of workers reading requests (headers or body). +
+ `server.scoreboard.startingWorkers` + + Current number of workers that are starting up. +
+ `server.scoreboard.totalWorkers` + + Total number of workers available. Workers that are not needed to process requests may not be started. +
+ `server.scoreboard.writingWorkers` + + Current number of workers that are writing. +
+ +## Inventory data [#inventory] + +Inventory data captures the version numbers from running Apache Flink and from all loaded Apache Flink modules. Those version numbers are added under the `config/Apache Flink` namespace. For more about inventory data, see [Understand data](/docs/infrastructure/integrations-getting-started/getting-started/understand-integration-data-data-types#inventory-data). + +## System metadata [#metadata] + +Besides the standard attributes collected by the infrastructure agent, the integration collects inventory data associated with the `Apache FlinkSample` [event type](/docs/using-new-relic/data/understand-data/new-relic-data-types#events-new-relic): + + + + + + + + + + + + + + + + + +
+ Name + + Description +
+ `software.version` + + The version of the Apache Flink server. Example: `Apache Flink/2.4.7 (Ubuntu)`. +
+ +## Troubleshooting + + + + If you are having issues accessing the HTTPS endpoint for Apache Flink, here are two possible solutions: + + * Although you cannot ignore the SSL certification, you can set the config file parameters `ca_bundle_file` and `ca_bundle_dir` to point to an unsigned certificate in the Apache Flink config file. Example: + + ```yml + instances: + - name: Apache Flink-server-metrics + command: metrics + arguments: + status_url: http://127.0.0.1/server-status?auto + ca_bundle_file: /etc/newrelic-infra/integrations.d/ssl/b2b.ca-bundle + ``` + + An example using `ca_bundle_dir`: + + ```yml + ca_bundle_dir: /etc/newrelic-infra/integrations.d/ssl + ``` + * Alternatively, you can use HTTP instead of HTTPS. + + \ No newline at end of file diff --git a/src/install/apache-flink/windows/install-msi.mdx b/src/install/apache-flink/windows/install-msi.mdx new file mode 100644 index 00000000000..96db948a545 --- /dev/null +++ b/src/install/apache-flink/windows/install-msi.mdx @@ -0,0 +1,10 @@ +--- +componentType: default +headingText: Download using MSI +--- + +1. Download the latest .MSI installer image for the desired integration [from our repository](https://download.newrelic.com/infrastructure_agent/windows/integrations/). +2. In an admin account, run the install script using an absolute path. + ``` + msiexec.exe /qn /i PATH\TO\3.msi + ``` \ No newline at end of file diff --git a/src/install/apache-flink/windows/install-windows.mdx b/src/install/apache-flink/windows/install-windows.mdx new file mode 100644 index 00000000000..1788230eb1d --- /dev/null +++ b/src/install/apache-flink/windows/install-windows.mdx @@ -0,0 +1,24 @@ +--- +componentType: default +headingText: Configure the integration +--- + +1. In the Integrations directory, `C:\Program Files\New Relic\newrelic-infra\integrations.d\`, create a copy of the sample configuration file by running: + +```shell +copy 3-config.yml.sample 3-config.yml +``` + +2. Edit the `3-config.yml` file. The only two required fields are `_cluster_name` and `_uri`. This example config file collects all metrics: + +```yml +integrations: +- name: nri-3 + config: + _cluster_name: my_cluster + _uri: ://username:password@localhost:27017 + exporter_port: 9126 +``` + +You can find all the config options at the bottom of this doc along with more complex config examples. + From c1df2da20cf4ae93deb164ff3590647a0e234490 Mon Sep 17 00:00:00 2001 From: Sadaf Arshad Date: Wed, 28 Feb 2024 18:02:27 -0800 Subject: [PATCH 009/124] chore: Add VSE Passphrase for SJM --- .../job-manager-configuration.mdx | 30 +++++ ...ied-script-execution-private-locations.mdx | 119 ++++++++++++++---- 2 files changed, 125 insertions(+), 24 deletions(-) diff --git a/src/content/docs/synthetics/synthetic-monitoring/private-locations/job-manager-configuration.mdx b/src/content/docs/synthetics/synthetic-monitoring/private-locations/job-manager-configuration.mdx index 57d01b35543..b30988bc2d2 100644 --- a/src/content/docs/synthetics/synthetic-monitoring/private-locations/job-manager-configuration.mdx +++ b/src/content/docs/synthetics/synthetic-monitoring/private-locations/job-manager-configuration.mdx @@ -204,6 +204,16 @@ Environmental variables allow you to fine-tune the synthetics job manager config + + + `VSE_PASSPHRASE` + + + + If set, enables **verified script execution** and uses this value as a **passphrase**. + + + @@ -330,6 +340,26 @@ Environmental variables allow you to fine-tune the synthetics job manager config + + + `synthetics.vsePassphrase` + + + + If set, it enables **verified script execution**, and uses this value as a **passphrase**. + + + + + + `synthetics.vsePassphraseSecretName` + + + + If set, enables verified script execution and uses this value to retrieve the passphrase from a Kubernetes secret with a key called vsePassphrase. + + + `synthetics.apiProxyHost` diff --git a/src/content/docs/synthetics/synthetic-monitoring/private-locations/verified-script-execution-private-locations.mdx b/src/content/docs/synthetics/synthetic-monitoring/private-locations/verified-script-execution-private-locations.mdx index bfa16f14dea..71e47b9ae77 100644 --- a/src/content/docs/synthetics/synthetic-monitoring/private-locations/verified-script-execution-private-locations.mdx +++ b/src/content/docs/synthetics/synthetic-monitoring/private-locations/verified-script-execution-private-locations.mdx @@ -25,33 +25,55 @@ Be sure to safeguard your private minion's passphrase. No other users on your ac ## Enable verified script execution [#cpm] - - Verified script execution (VSE) is not supported on synthetics job managers yet. VSE is only available on containerized private minions (CPMs) at this time. - - Do the following to enable verified script execution for containerized private minions. Be sure to record your passphrase in a secure place. 1. Go to **[one.newrelic.com > Synthetic monitoring > Private locations](https://one.newrelic.com/synthetics-nerdlets/private-location-list)** > (select a private location). Select the private location's ellipses icon, and click **Edit**. Enable verified script execution, and then save. 2. Set the passphrase in your Docker or Kubernetes environment: - * **Docker:** Add the `MINION_VSE_PASSPHRASE` environment variable to the Docker `run` command used to start your private minion: + * **Docker:** - ``` - docker run \ - --name YOUR_CONTAINER_NAME \ - -e MINION_PRIVATE_LOCATION_KEY="YOUR_PRIVATE_LOCATION_KEY" \ - -e MINION_VSE_PASSPHRASE="YOUR_PASSPHRASE" \ - -v /tmp:/tmp:rw \ - -v /var/run/docker.sock:/var/run/docker.sock:rw \ - -d \ - --restart unless-stopped \ - quay.io/newrelic/synthetics-minion:latest - ``` - * **Kubernetes:** Set the `synthetics.minionVsePassphrase` value in the Helm `install` or `upgrade` command: + Add the `MINION_VSE_PASSPHRASE` environment variable to the Docker `run` command used to start your private minion: + + ``` + docker run \ + --name YOUR_CONTAINER_NAME \ + -e MINION_PRIVATE_LOCATION_KEY="YOUR_PRIVATE_LOCATION_KEY" \ + -e MINION_VSE_PASSPHRASE="YOUR_PASSPHRASE" \ + -v /tmp:/tmp:rw \ + -v /var/run/docker.sock:/var/run/docker.sock:rw \ + -d \ + --restart unless-stopped \ + quay.io/newrelic/synthetics-minion:latest + ``` + + Add the `VSE_PASSPHRASE` environment variable to the Docker `run` command used to start your synthetics job manager: + + ``` + docker run \ + --name YOUR_CONTAINER_NAME \ + -e "PRIVATE_LOCATION_KEY=YOUR_PRIVATE_LOCATION_KEY" \ + -e VSE_PASSPHRASE="YOUR_PASSPHRASE" \ + -v /var/run/docker.sock:/var/run/docker.sock:rw \ + -d \ + --restart unless-stopped \ + newrelic/synthetics-job-manager:latest + ``` + + * **Kubernetes:** + + Set the `synthetics.minionVsePassphrase` value in the Helm `install` or `upgrade` command: + + ``` + helm install YOUR_CPM_NAME YOUR_REPO_NAME/synthetics-minion -n YOUR_NAMESPACE --set synthetics.privateLocationKey=YOUR_PRIVATE_LOCATION_KEY --set synthetics.minionVsePassphrase=YOUR_PASSPHRASE + ``` + * **Kubernetes:** + + Set the `synthetics.vsePassphrase` value in the Helm `install` or `upgrade` command: + + ``` + helm install YOUR_JOB_MANAGER_NAME YOUR_REPO_NAME/synthetics-job-manager -n YOUR_NAMESPACE --set synthetics.privateLocationKey=YOUR_PRIVATE_LOCATION_KEY --set synthetics.vsePassphrase=YOUR_PASSPHRASE + ``` - ``` - helm install YOUR_CPM_NAME YOUR_REPO_NAME/synthetics-minion -n YOUR_NAMESPACE --set synthetics.privateLocationKey=YOUR_PRIVATE_LOCATION_KEY --set synthetics.minionVsePassphrase=YOUR_PASSPHRASE - ``` 3. From the Synthetics UI, select a monitor assigned to that location. Then select **Settings > General**. 4. From the list of private locations, select your location, type your passphrase, and save. Be sure to record your passphrase in a secure place. 5. Repeat steps 3 and 4 for each monitor you want to assign to your location. @@ -62,7 +84,9 @@ To change your passphrase, do the following. Be sure to record your passphrase i 1. Update the passphrase in your Docker or Kubernetes environment: - * **Docker:** Stop your current minion. Then use the Docker `run` command to start a new minion with your updated `MINION_VSE_PASSPHRASE` environment variable: + * **Docker:** + + Stop your current minion. Then use the Docker `run` command to start a new minion with your updated `MINION_VSE_PASSPHRASE` environment variable: ``` docker run \ @@ -75,11 +99,33 @@ To change your passphrase, do the following. Be sure to record your passphrase i --restart unless-stopped \ quay.io/newrelic/synthetics-minion:latest ``` - * **Kubernetes:** Use the Helm `upgrade` command to set your updated `synthetics.minionVsePassphrase` value: + + Stop your current synthetics job manager. Then use the Docker `run` command to start a new synthetics job manager with your updated `VSE_PASSPHRASE` environment variable: + + ``` + docker run \ + --name YOUR_CONTAINER_NAME \ + -e "PRIVATE_LOCATION_KEY=YOUR_PRIVATE_LOCATION_KEY" \ + -e VSE_PASSPHRASE="YOUR_PASSPHRASE" \ + -v /var/run/docker.sock:/var/run/docker.sock:rw \ + -d \ + --restart unless-stopped \ + newrelic/synthetics-job-manager:latest + ``` + * **Kubernetes:** + + Use the Helm `upgrade` command to set your updated `synthetics.minionVsePassphrase` value: ``` helm upgrade YOUR_CPM_NAME YOUR_REPO_NAME/synthetics-minion -n YOUR_NAMESPACE --set synthetics.privateLocationKey=YOUR_PRIVATE_LOCATION_KEY --set synthetics.minionVsePassphrase=YOUR_PASSPHRASE ``` + + Use the Helm `upgrade` command to set your updated `synthetics.vsePassphrase` value: + + ``` + helm install YOUR_JOB_MANAGER_NAME YOUR_REPO_NAME/synthetics-job-manager -n YOUR_NAMESPACE --set synthetics.privateLocationKey=YOUR_PRIVATE_LOCATION_KEY --set synthetics.vsePassphrase=YOUR_PASSPHRASE + ``` + 2. Go to **[one.newrelic.com > Synthetic monitoring](https://one.newrelic.com/synthetics-nerdlets)** > (click the assigned monitor) > **Settings > General**. 3. From the list of private locations, select your location, type your new passphrase, and save. 4. Repeat steps 2 and 3 for each monitor assigned to your location. @@ -90,7 +136,9 @@ To disable verified script execution for containerized private minions: 1. Remove the passphrase in your Docker or Kubernetes environment: - * **Docker:** Stop your current minion container. Then use the Docker `run` command to start a new minion without the `MINION_VSE_PASSPHRASE` environment variable: + * **Docker:** + + Stop your current minion container. Then use the Docker `run` command to start a new minion without the `MINION_VSE_PASSPHRASE` environment variable: ``` docker run \ @@ -102,11 +150,34 @@ To disable verified script execution for containerized private minions: --restart unless-stopped \ quay.io/newrelic/synthetics-minion:latest ``` - * **Kubernetes:** Use the Helm `upgrade` command without the `--set synthetics.minionVsePassphrase` value: + + Stop your current synthetics job manager container. Then use the Docker `run` command to start a new minion without the `VSE_PASSPHRASE` environment variable: + + ``` + docker run \ + --name YOUR_CONTAINER_NAME \ + -e "PRIVATE_LOCATION_KEY=YOUR_PRIVATE_LOCATION_KEY" \ + -e VSE_PASSPHRASE="YOUR_PASSPHRASE" \ + -v /var/run/docker.sock:/var/run/docker.sock:rw \ + -d \ + --restart unless-stopped \ + newrelic/synthetics-job-manager:latest + ``` + + * **Kubernetes:** + + Use the Helm `upgrade` command without the `--set synthetics.minionVsePassphrase` value: ``` helm upgrade YOUR_CPM_NAME YOUR_REPO_NAME/synthetics-minion -n YOUR_NAMESPACE --set synthetics.privateLocationKey=YOUR_PRIVATE_LOCATION_KEY ``` + + Use the Helm `upgrade` command without the `--set synthetics.vsePassphrase` value: + + ``` + helm install YOUR_JOB_MANAGER_NAME YOUR_REPO_NAME/synthetics-job-manager -n YOUR_NAMESPACE --set synthetics.privateLocationKey=YOUR_PRIVATE_LOCATION_KEY + ``` + 2. Go to **[one.newrelic.com > Synthetic monitoring > Private locations](https://one.newrelic.com/synthetics-nerdlets/private-location-list)** (select a private location). Clear the **Enable verified script execution** checkbox, then save. ## Other (legacy) [#enabling] From 78912bfd9ef691fd4965d108ecc4245e97716bc0 Mon Sep 17 00:00:00 2001 From: Keegan Mullaney Date: Thu, 29 Feb 2024 09:01:47 -0800 Subject: [PATCH 010/124] docs: resolve conflict --- ...mpatibility-requirements-aws-lambda-monitoring.mdx | 11 ++++------- 1 file changed, 4 insertions(+), 7 deletions(-) diff --git a/src/content/docs/serverless-function-monitoring/aws-lambda-monitoring/get-started/compatibility-requirements-aws-lambda-monitoring.mdx b/src/content/docs/serverless-function-monitoring/aws-lambda-monitoring/get-started/compatibility-requirements-aws-lambda-monitoring.mdx index 81701a59f8b..020495e4b58 100644 --- a/src/content/docs/serverless-function-monitoring/aws-lambda-monitoring/get-started/compatibility-requirements-aws-lambda-monitoring.mdx +++ b/src/content/docs/serverless-function-monitoring/aws-lambda-monitoring/get-started/compatibility-requirements-aws-lambda-monitoring.mdx @@ -17,16 +17,13 @@ Before [enabling serverless monitoring](/docs/serverless-function-monitoring/aws * Go: `provided.al2` * Java: `java8.al2`, `java11`, `java17` -AWS has older runtimes for these languages as well, but AWS has not [chosen to support](https://docs.aws.amazon.com/lambda/latest/dg/lambda-runtimes.html) -the latest Lambda APIs with those older runtimes. Integration for older runtimes requires a different strategy, but is possible. +AWS has older runtimes for these languages as well, but AWS has not [chosen to support](https://docs.aws.amazon.com/lambda/latest/dg/lambda-runtimes.html) the latest Lambda APIs with those older runtimes. Integration for older runtimes requires a different strategy, but is possible. -Python and Node.js are by far the most popular languages in the Lambda ecosystem. The [New Relic Lambda Layers](https://layers.newrelic-external.com/) -for Node.js and Python include the very latest New Relic agent version, and provide rich instrumentation with minimal configuration, right out of the box. +Python and Node.js are by far the most popular languages in the Lambda ecosystem. The [New Relic Lambda Layers](https://layers.newrelic-external.com/) for Node.js and Python include the very latest New Relic agent version, and provide rich instrumentation with minimal configuration, right out of the box. -Similarly, Go uses the New Relic Go agent. New Relic recommends keeping the agent module up to date. Support is limited for agent versions -older than 3.16.0. +Similarly, Go uses the New Relic Go agent. New Relic recommends keeping the agent module up to date. Support is limited for agent versions older than 3.16.0. -To minimize performance impact, we've taken a different approach with Java. New Relic provides [OpenTracing](https://opentracing.io/) SDKs for these runtimes. This approach requires a bit more code to integrate. +To minimize performance impact, we've taken a different approach with Java and .NET Core. New Relic provides [OpenTracing](https://opentracing.io/) SDKs for these runtimes. This approach requires a bit more code to integrate. For newer runtimes, such as .NET 6, [Trace your .NET Lambda functions with New Relic and OpenTelemetry](/docs/serverless-function-monitoring/aws-lambda-monitoring/opentelemetry/lambda-opentelemetry-dotnet/) is available. For complete Lambda instrumentation, some of our agents included in our Lambda layers depend on a language-specific [AWS SDK](https://aws.amazon.com/tools/#sdk). If an AWS SDK is not used, Lambda data will appear as external service calls in the UI, with minimal detail. In other words, we rely on the AWS SDK to facilitate instrumentation of your function. From cca78d07bcd5de8a328b5aa02658bc4a2f35a412 Mon Sep 17 00:00:00 2001 From: Bradley Camacho Date: Thu, 29 Feb 2024 13:15:32 -0700 Subject: [PATCH 011/124] Attempt fix for HAPRoxy and Apache Flink docs --- .../install-apache-flink.mdx | 176 -- src/install/apache-flink/check-metrics.mdx | 22 + src/install/apache-flink/configure-apache.mdx | 16 + .../apache-flink/configure-logging-apache.mdx | 26 + .../configure-prometheus-apache.mdx | 40 + .../apache-flink/default-requirements.mdx | 11 - src/install/apache-flink/guided.mdx | 38 - src/install/apache-flink/intro.mdx | 43 +- .../apache-flink/windows/install-windows.mdx | 24 - src/install/config/apache-flink.yaml | 19 + src/install/config/haproxy.yaml | 84 + src/install/haproxy/appInfo.mdx | 9 + .../default-configuration.mdx | 8 +- .../default-install-linux.mdx | 10 +- src/install/haproxy/default-requirements.mdx | 10 + src/install/haproxy/find-data.mdx | 16 + src/install/haproxy/install-infra.mdx | 6 + src/install/haproxy/intro.mdx | 36 + .../linux/install-apt.mdx | 2 +- .../linux/install-linux.mdx | 10 +- .../linux/install-tarball.mdx | 0 .../linux/install-yum.mdx | 2 +- .../linux/install-zypper.mdx | 2 +- src/install/haproxy/whatsNext.mdx | 1766 +++++++++++++++++ .../windows/install-msi.mdx | 2 +- .../haproxy/windows/install-windows.mdx | 30 + src/nav/infrastructure.yml | 2 +- 27 files changed, 2111 insertions(+), 299 deletions(-) delete mode 100644 src/content/docs/infrastructure/host-integrations/host-integrations-list/install-apache-flink.mdx create mode 100644 src/install/apache-flink/check-metrics.mdx create mode 100644 src/install/apache-flink/configure-apache.mdx create mode 100644 src/install/apache-flink/configure-logging-apache.mdx create mode 100644 src/install/apache-flink/configure-prometheus-apache.mdx delete mode 100644 src/install/apache-flink/default-requirements.mdx delete mode 100644 src/install/apache-flink/guided.mdx delete mode 100644 src/install/apache-flink/windows/install-windows.mdx create mode 100644 src/install/config/apache-flink.yaml create mode 100644 src/install/config/haproxy.yaml create mode 100644 src/install/haproxy/appInfo.mdx rename src/install/{apache-flink => haproxy}/default-configuration.mdx (62%) rename src/install/{apache-flink => haproxy}/default-install-linux.mdx (70%) create mode 100644 src/install/haproxy/default-requirements.mdx create mode 100644 src/install/haproxy/find-data.mdx create mode 100644 src/install/haproxy/install-infra.mdx create mode 100644 src/install/haproxy/intro.mdx rename src/install/{apache-flink => haproxy}/linux/install-apt.mdx (81%) rename src/install/{apache-flink => haproxy}/linux/install-linux.mdx (74%) rename src/install/{apache-flink => haproxy}/linux/install-tarball.mdx (100%) rename src/install/{apache-flink => haproxy}/linux/install-yum.mdx (86%) rename src/install/{apache-flink => haproxy}/linux/install-zypper.mdx (82%) create mode 100644 src/install/haproxy/whatsNext.mdx rename src/install/{apache-flink => haproxy}/windows/install-msi.mdx (85%) create mode 100644 src/install/haproxy/windows/install-windows.mdx diff --git a/src/content/docs/infrastructure/host-integrations/host-integrations-list/install-apache-flink.mdx b/src/content/docs/infrastructure/host-integrations/host-integrations-list/install-apache-flink.mdx deleted file mode 100644 index 135373fa167..00000000000 --- a/src/content/docs/infrastructure/host-integrations/host-integrations-list/install-apache-flink.mdx +++ /dev/null @@ -1,176 +0,0 @@ ---- -title: Apache Flink integration -tags: - - Integrations - - Configure Prometheus OpenMetrics for Flink - - Apache Flink integration on New Relic -metaDescription: Get a dashboard of all your most important Flink metrics with our quickstart. -redirects: - - /docs/infrastructure/prometheus-integrations/install-configure-openmetrics/install-apache-flink/ -freshnessValidatedDate: never ---- - -import dashboardsApacheFlinkQuickstart from 'images/dashboards_screenshot-full_apache-flink-quickstart.webp' - -With our Apache Flink dashboard, you can easily track your logs, keep an eye on your instrumentation sources, and get an overview of uptime and downtime for all your applications' instances. Built with our infrastructure agent and our Prometheus OpenMetrics integration, Flink take advantage of OpenMetrics endpoint scraping, so you can view all your most important data, all in one place. - -A screenshot of a dashboard with Apache Flink metrics. -
-After setting up Flink with New Relic, your data will display in dashboards like these, right out of the box. -
- -## Install the infrastructure agent [#install] - -Before getting Flink data into New Relic, first install our infrastructure agent, then expose your metrics by installing Prometheus OpenMetrics. - -There are two ways of installing our infrastructure agent: - -* Through our [guided install](https://one.newrelic.com/nr1-core?state=5e236fa2-fbfd-1f53-e55d-9241d2a73068). - -* Install the infrastructure agent [manually](/docs/infrastructure/install-infrastructure-agent/linux-installation/install-infrastructure-monitoring-agent-linux), via the command line. - -## Configure Apache Flink to expose metrics [#expose-apache-flink-metrics] -You will need the Apache Flink prometheus jar file to expose metrics on a configured port. Ideally, on downloading the Apache Flink, the file named `flink-metrics-prometheus-VERSION.jar` will be placed in the below path. - -File path: `FLINK-DIRECTORY/plugins/metrics-prometheus/` - -Update the flink configuration file to expose metrics on ports 9250 to 9260 - -Apache Flink configuration file path: `FLINK-DIRECTORY/conf/flink-conf.yaml` - -```yml -metrics.reporters: prom -metrics.reporter.prom.class: org.apache.flink.metrics.prometheus.PrometheusReporter -metrics.reporter.prom.factory.class: org.apache.flink.metrics.prometheus.PrometheusReporterFactory -metrics.reporter.prom.host: localhost -metrics.reporter.prom.port: 9250-9260 -``` - -Follow the below command to start an Apache Flink cluster - -```bash -./bin/start-cluster.sh -``` - -You should now be able to see metrics on the below URLs -- Job manager metrics -```yml -http://YOUR_DOMAIN:9250 -``` -- Task manager metrics -```yml -http://YOUR_DOMAIN:9251 -``` -You may also cross check if there are any other task manager ports running on your PC by running the below command: - -```yml -sudo lsof -i -P -n | grep LISTEN -``` - -## Configure `nri-prometheus` for Apache Flink [#configure] - -First, create a file named `nri-prometheus-config.yml` in the below path - -Path: `/etc/newrelic-infra/integrations.d` - -Now, update the fields listed below: - -* cluster_name: "YOUR_DESIRED_CLUSTER_NAME", for example: `cluster_name: "apache_flink"` - -* urls: ["http://YOUR_DOMAIN:9250", "http://YOUR_DOMAIN:9251"], for example: `urls: ["http://localhost:9250", "http://localhost:9251"]` - -Your `nri-prometheus-config.yml` file should look like this: - -```yml -integrations: - - name: nri-prometheus - config: - standalone: false - # Defaults to true. When standalone is set to `false`, `nri-prometheus` requires an infrastructure agent to send data. - emitters: infra-sdk - # When running with infrastructure agent emitters will have to include infra-sdk - cluster_name: "YOUR_DESIRED_CLUSTER_NAME" - # Match the name of your cluster with the name seen in New Relic. - targets: - - description: "YOUR_DESIRED_DESCRIPTION_HERE" - urls: ["http://YOUR_DOMAIN:9250", "http://YOUR_DOMAIN:9251"] - # tls_config: - # ca_file_path: "/etc/etcd/etcd-client-ca.crt" - # cert_file_path: "/etc/etcd/etcd-client.crt" - # key_file_path: "/etc/etcd/etcd-client.key" - - verbose: false - # Defaults to false. This determines whether or not the integration should run in verbose mode. - audit: false - # Defaults to false and does not include verbose mode. Audit mode logs the uncompressed data sent to New Relic and can lead to a high log volume. - # scrape_timeout: "YOUR_TIMEOUT_DURATION" - # `scrape_timeout` is not a mandatory configuration and defaults to 30s. The HTTP client timeout when fetching data from endpoints. - scrape_duration: "5s" - # worker_threads: 4 - # `worker_threads` is not a mandatory configuration and defaults to `4` for clusters with more than 400 endpoints. Slowly increase the worker thread until scrape time falls between the desired `scrape_duration`. Note: Increasing this value too much results in huge memory consumption if too many metrics are scraped at once. - insecure_skip_verify: false - # Defaults to false. Determins if the integration should skip TLS verification or not. - timeout: 10s -``` - -## Manually set up log forwarding [#logs] - -You can use our [log forwarding](/docs/logs/forward-logs/forward-your-logs-using-infrastructure-agent/) documentation to forward application specific logs to New Relic. - -On installing infrastructure agent on the linux machines, your log file named `logging.yml` should be present in this path: `/etc/newrelic-infra/logging.d/`. - -If you don't see your log file in the above path, then you will need to create a log file by following the above log forwarding documentation. - -Here is an example of the log name which will look similar as below: - -```yml -- name: flink-u1-taskexecutor-0-u1-VirtualBox.log -``` - -Add the below script to the `logging.yml` file to send Apache Flink logs to New Relic. - -```yml -logs: - - name: flink-.log - file: /log/flink-.log - attributes: - logtype: flink_logs -``` - -## Restart New Relic infrastructure agent [#restart-infrastructure-agent] - -Before you can start reading your data, [restart your infrastructure agent](/docs/infrastructure/install-infrastructure-agent/manage-your-agent/start-stop-restart-infrastructure-agent/). - - -## Monitor Apache Flink on New Relic - -If you want to use our pre-built dashboard template named Apache Flink to monitor your Apache Flink metrics, follow these steps: - -1. Go to **[one.newrelic.com](https://one.newrelic.com/)** and click on **+ Add Data**. -2. Click on **Dashboards** tab. -3. In the search box, search for **Apache Flink**. -4. Click on the Apache Flink dashboard to install it in your account. - -Once your application is integrated by following the above steps, the dashboard should reflect metrics on it. - -To instrument the Apache Flink quickstart and to see metrics and alerts, you can also follow our [Apache Flink quickstart page](https://newrelic.com/instant-observability/apache-flink) by clicking on the **Install now** button. - -## Use NRQL to query your data - -You can use NRQL to [query your data](/docs/apis/nerdgraph/examples/nerdgraph-nrql-tutorial/). For example, if you want to view the total number of completed checkpoints on New Relic's Query Builder, use this NRQL query: - -```sql -FROM Metric SELECT latest(flink_jobmanager_job_numberOfCompletedCheckpoints) AS 'Number of Completed Checkpoints' -``` - -## What's next? - -If you want to further customize your Apache Flink dashboards, you can learn more about building NRQL queries and managing your in the New Relic UI: - -* [Introduction to the query builder](/docs/query-your-data/explore-query-data/query-builder/introduction-query-builder) to create basic and advanced queries. -* [Introduction to dashboards](/docs/query-your-data/explore-query-data/dashboards/introduction-dashboards) to customize your dashboard and carry out different actions. -* [Manage your dashboard](/docs/query-your-data/explore-query-data/dashboards/manage-your-dashboard) to adjust your dashboards display mode, or to add more content to your dashboard. diff --git a/src/install/apache-flink/check-metrics.mdx b/src/install/apache-flink/check-metrics.mdx new file mode 100644 index 00000000000..b98777ead85 --- /dev/null +++ b/src/install/apache-flink/check-metrics.mdx @@ -0,0 +1,22 @@ +--- +componentType: default +headingText: Check for metrics +--- + + +1. Use the following command to start an Apache Flink cluster: + +```bash +./bin/start-cluster.sh +``` + +2. Check for metrics on the following URLs + +Job manager metrics: +```yml +http://YOUR_DOMAIN:9250 +``` +Task manager metrics: +```yml +http://YOUR_DOMAIN:9251 +``` diff --git a/src/install/apache-flink/configure-apache.mdx b/src/install/apache-flink/configure-apache.mdx new file mode 100644 index 00000000000..d60e118a837 --- /dev/null +++ b/src/install/apache-flink/configure-apache.mdx @@ -0,0 +1,16 @@ +--- +componentType: default +headingText: Configure Apache Flink to expose metrics +--- + +1. Ensure your Flink instance contains `flink-metrics-prometheus-VERSION.jar` in the following path `FLINK-DIRECTORY/plugins/metrics-prometheus/`. Move it to that location if it isn't already there. +2. Update the Flink configuration file to expose metrics on ports `9250` to `9260` +3. Create a config file in `FLINK-DIRECTORY/conf/flink-conf.yaml`. Paste the following content in: + +``` +metrics.reporters: prom +metrics.reporter.prom.class: org.apache.flink.metrics.prometheus.PrometheusReporter +metrics.reporter.prom.factory.class: org.apache.flink.metrics.prometheus.PrometheusReporterFactory +metrics.reporter.prom.host: localhost +metrics.reporter.prom.port: 9250-9260 +``` diff --git a/src/install/apache-flink/configure-logging-apache.mdx b/src/install/apache-flink/configure-logging-apache.mdx new file mode 100644 index 00000000000..f3a00155b86 --- /dev/null +++ b/src/install/apache-flink/configure-logging-apache.mdx @@ -0,0 +1,26 @@ +--- +componentType: default +headingText: Check for metrics +--- + +You can use our [log forwarding](/docs/logs/forward-logs/forward-your-logs-using-infrastructure-agent/) documentation to forward application specific logs to New Relic. + +On installing infrastructure agent on the linux machines, your log file named `logging.yml` should be present in this path: `/etc/newrelic-infra/logging.d/`. + +If you don't see your log file in the above path, then you will need to create a log file by following the above log forwarding documentation. + +Here is an example of the log name which will look similar as below: + +```yml +- name: flink-u1-taskexecutor-0-u1-VirtualBox.log +``` + +Add the below script to the `logging.yml` file to send Apache Flink logs to New Relic. + +```yml +logs: + - name: flink-.log + file: /log/flink-.log + attributes: + logtype: flink_logs +``` \ No newline at end of file diff --git a/src/install/apache-flink/configure-prometheus-apache.mdx b/src/install/apache-flink/configure-prometheus-apache.mdx new file mode 100644 index 00000000000..72d694cc67e --- /dev/null +++ b/src/install/apache-flink/configure-prometheus-apache.mdx @@ -0,0 +1,40 @@ +--- +componentType: default +headingText: Configure Prometheus for Apache Flink +--- + + +1. Create the following file if it doesn't exist: `/etc/newrelic-infra/integrations.d/nri-prometheus-config.yml` +2. Paste the following information, updating `cluster_name` and and urls: + +``` +integrations: + - name: nri-prometheus + config: + standalone: false + # Defaults to true. When standalone is set to `false`, `nri-prometheus` requires an infrastructure agent to send data. + emitters: infra-sdk + # When running with infrastructure agent emitters will have to include infra-sdk + cluster_name: "YOUR_DESIRED_CLUSTER_NAME" + # Match the name of your cluster with the name seen in New Relic. + targets: + - description: "YOUR_DESIRED_DESCRIPTION_HERE" + urls: ["http://YOUR_DOMAIN:9250", "http://YOUR_DOMAIN:9251"] + # tls_config: + # ca_file_path: "/etc/etcd/etcd-client-ca.crt" + # cert_file_path: "/etc/etcd/etcd-client.crt" + # key_file_path: "/etc/etcd/etcd-client.key" + + verbose: false + # Defaults to false. This determines whether or not the integration should run in verbose mode. + audit: false + # Defaults to false and does not include verbose mode. Audit mode logs the uncompressed data sent to New Relic and can lead to a high log volume. + # scrape_timeout: "YOUR_TIMEOUT_DURATION" + # `scrape_timeout` is not a mandatory configuration and defaults to 30s. The HTTP client timeout when fetching data from endpoints. + scrape_duration: "5s" + # worker_threads: 4 + # `worker_threads` is not a mandatory configuration and defaults to `4` for clusters with more than 400 endpoints. Slowly increase the worker thread until scrape time falls between the desired `scrape_duration`. Note: Increasing this value too much results in huge memory consumption if too many metrics are scraped at once. + insecure_skip_verify: false + # Defaults to false. Determins if the integration should skip TLS verification or not. + timeout: 10s +``` diff --git a/src/install/apache-flink/default-requirements.mdx b/src/install/apache-flink/default-requirements.mdx deleted file mode 100644 index 9618bd3a557..00000000000 --- a/src/install/apache-flink/default-requirements.mdx +++ /dev/null @@ -1,11 +0,0 @@ ---- -headingText: Check the compatibility and requirements -componentType: default ---- - -Before installation, ensure you meet these requirements: - -* A New Relic account. Don't have one? [Sign up for free!](https://newrelic.com/signup) No credit card required. -* Apache Flink versions 2.2 and 2.4 -* [Apache Flink status module](https://httpd.Apache Flink.org/docs/2.4/mod/mod_status.html) enabled and configured for Apache Flink instance. -* Apache Flink status module endpoint (default `server-status`) available from the host containing the Apache Flink integration. \ No newline at end of file diff --git a/src/install/apache-flink/guided.mdx b/src/install/apache-flink/guided.mdx deleted file mode 100644 index a3357c2f2e2..00000000000 --- a/src/install/apache-flink/guided.mdx +++ /dev/null @@ -1,38 +0,0 @@ ---- -componentType: appInfoConfigOption -optionType: deployment -headingText: Choose your framework ---- - - - -**Use guided install to quickly see your data in the UI** - -Guided install is a single CLI command you can run on your system to monitor your instance. The CLI installs the infrastructure agent and integration. - -This is a good way to trial ingesting data on our platform. - - - - Guided install - - - - EU guided install - - - -If you'd prefer to install manually, follow the steps below. - - - - - diff --git a/src/install/apache-flink/intro.mdx b/src/install/apache-flink/intro.mdx index 6e2b3fe0e2c..372f94db8b9 100644 --- a/src/install/apache-flink/intro.mdx +++ b/src/install/apache-flink/intro.mdx @@ -3,34 +3,15 @@ headingText: Before we start componentType: default --- -Our Apache Flink integration reports data from your Apache Flink web server to the New Relic platform. You can view dashboards of your Apache Flink metric data, create alert policies, and create your own custom queries and charts. - -To get the most out of this page, select the installation method that fits your environment. You need a [New Relic account](https://newrelic.com/signup) before starting the installation process. - - - -**Use guided install to quickly see your data in the UI** - -The guided install is a single CLI command you can run to monitor your instance. It's a good option for small organizations, or for anyone who wants to test out New Relic. - - - - Guided install - - - - EU guided install - - - -For a more permanent and scalable solution, we recommend the standard manual install of the agent: keep reading for how to do that. - - \ No newline at end of file +import dashboardsApacheFlinkQuickstart from 'images/dashboards_screenshot-full_apache-flink-quickstart.webp' + +With our Apache Flink dashboard, you can easily track your logs, keep an eye on your instrumentation sources, and get an overview of uptime and downtime for all your applications' instances. Built with our infrastructure agent and our Prometheus OpenMetrics integration, Flink take advantage of OpenMetrics endpoint scraping, so you can view all your most important data, all in one place. + +A screenshot of a dashboard with Apache Flink metrics. +
+After setting up Flink with New Relic, your data will display in dashboards like these, right out of the box. +
\ No newline at end of file diff --git a/src/install/apache-flink/windows/install-windows.mdx b/src/install/apache-flink/windows/install-windows.mdx deleted file mode 100644 index 1788230eb1d..00000000000 --- a/src/install/apache-flink/windows/install-windows.mdx +++ /dev/null @@ -1,24 +0,0 @@ ---- -componentType: default -headingText: Configure the integration ---- - -1. In the Integrations directory, `C:\Program Files\New Relic\newrelic-infra\integrations.d\`, create a copy of the sample configuration file by running: - -```shell -copy 3-config.yml.sample 3-config.yml -``` - -2. Edit the `3-config.yml` file. The only two required fields are `_cluster_name` and `_uri`. This example config file collects all metrics: - -```yml -integrations: -- name: nri-3 - config: - _cluster_name: my_cluster - _uri: ://username:password@localhost:27017 - exporter_port: 9126 -``` - -You can find all the config options at the bottom of this doc along with more complex config examples. - diff --git a/src/install/config/apache-flink.yaml b/src/install/config/apache-flink.yaml new file mode 100644 index 00000000000..9298a72d484 --- /dev/null +++ b/src/install/config/apache-flink.yaml @@ -0,0 +1,19 @@ +agentName: apache-flink +agentType: integration +title: 'Apache Flink monitoring integration' +metaDescription: 'Install the Apache Flink integration' +introFilePath: 'src/install/apache-flink/intro.mdx' +redirects: + - /docs/infrastructure/prometheus-integrations/install-configure-openmetrics/install-apache-flink/ + - /docs/infrastructure/host-integrations/host-integrations-list/install-apache-flink/ +appInfo: + +steps: + - filePath: 'src/install/apache-flink/appInfo.mdx' + - filePath: 'src/install/apache-flink/install-infra.mdx' + - filePath: 'src/install/apache-flink/configure-apache.mdx' + - filePath: 'src/install/apache-flink/check-metrics.mdx' + - filePath: 'src/install/apache-flink/configure-prometheus-apache.mdx' + - filePath: 'src/install/apache-flink/configure-logging-apache.mdx' + - filePath: 'src/install/apache-flink/find-data.mdx' +whatsNextFilePath: 'src/install/apache-flink/whatsNext.mdx' diff --git a/src/install/config/haproxy.yaml b/src/install/config/haproxy.yaml new file mode 100644 index 00000000000..1b3ddd5e564 --- /dev/null +++ b/src/install/config/haproxy.yaml @@ -0,0 +1,84 @@ +agentName: haproxy +agentType: integration +title: 'HAProxy monitoring integration' +metaDescription: 'Install the haproxy integration' +introFilePath: 'src/install/haproxy/intro.mdx' +redirects: + - /docs/integrations/host-integrations/host-integrations-list/haproxy-monitoring-integration + - /docs/haproxy-integration-new-relic-infrastructure + - /docs/infrastructure/host-integrations/host-integrations-list/haproxy-monitoring-integration/ +appInfo: + - optionType: dropdown1 + label: '' + placeholder: 'Select your environment' + options: + - value: 'linux' + displayName: 'Linux' + logo: 'linux' + - value: 'windows' + displayName: 'Windows' + logo: 'windows' + - optionType: deployment + label: "Choose your install path" + placeholder: "Choose one:" + options: + - value: "msi" + displayName: "Install using MSI files (Windows)" + logo: 'windows' + - value: "apt" + displayName: "Install using Apt (Debian, Ubuntu)" + - value: "yum" + logo: 'linux' + displayName: "Install using Yum (Amazon Linux, CentOS, RHEL)" + - value: "zypper" + displayName: "Install using Zypper (SLES)" + logo: 'linux' + - value: "tar" + displayName: "Install from tarball (Other Linux distros)" + logo: 'linux' + +steps: + - filePath: 'src/install/haproxy/appInfo.mdx' + - filePath: 'src/install/haproxy/default-requirements.mdx' + - filePath: 'src/install/haproxy/install-infra.mdx' + - filePath: "src/install/haproxy/linux/install-apt.mdx" + overrides: + - filePath: "src/install/haproxy/linux/install-apt.mdx" + selectedOptions: + - optionType: deployment + options: + - value: "apt" + - filePath: "src/install/haproxy/linux/install-tarball.mdx" + selectedOptions: + - optionType: deployment + options: + - value: "tar" + - filePath: "src/install/haproxy/linux/install-yum.mdx" + selectedOptions: + - optionType: deployment + options: + - value: "yum" + - filePath: "src/install/haproxy/linux/install-zypper.mdx" + selectedOptions: + - optionType: deployment + options: + - value: "zypper" + - filePath: "src/install/haproxy/windows/install-msi.mdx" + selectedOptions: + - optionType: deployment + options: + - value: "msi" + - filePath: 'src/install/haproxy/default-install-linux.mdx' + overrides: + - filePath: 'src/install/haproxy/linux/install-linux.mdx' + selectedOptions: + - optionType: dropdown1 + options: + - value: 'linux' + - filePath: 'src/install/haproxy/windows/install-windows.mdx' + selectedOptions: + - optionType: dropdown1 + options: + - value: 'windows' + - filePath: 'src/install/haproxy/find-data.mdx' +whatsNextFilePath: 'src/install/haproxy/whatsNext.mdx' diff --git a/src/install/haproxy/appInfo.mdx b/src/install/haproxy/appInfo.mdx new file mode 100644 index 00000000000..86c24861c27 --- /dev/null +++ b/src/install/haproxy/appInfo.mdx @@ -0,0 +1,9 @@ +--- +componentType: appInfoConfig +headingText: Choose your framework +--- + + + + + diff --git a/src/install/apache-flink/default-configuration.mdx b/src/install/haproxy/default-configuration.mdx similarity index 62% rename from src/install/apache-flink/default-configuration.mdx rename to src/install/haproxy/default-configuration.mdx index 3dff20b5732..d272f49edac 100644 --- a/src/install/apache-flink/default-configuration.mdx +++ b/src/install/haproxy/default-configuration.mdx @@ -3,11 +3,11 @@ componentType: default headingText: Configure the integration --- -Edit the `nri-Apache Flink-config.yml` file to configure your integration as needed. The following example config fills in all the required options and reports all metrics the integration pulls: +Edit the `nri-apache-config.yml` file to configure your integration as needed. The following example config fills in all the required options and reports all metrics the integration pulls: ``` integrations: - - name: nri-Apache Flink + - name: nri-apache env: METRICS: "true" STATUS_URL: http://127.0.0.1/server-status?auto @@ -17,7 +17,7 @@ integrations: env: production role: load_balancer - - name: nri-Apache Flink + - name: nri-apache env: INVENTORY: "true" STATUS_URL: http://127.0.0.1/server-status?auto @@ -26,5 +26,5 @@ integrations: labels: env: production role: load_balancer - inventory_source: config/Apache Flink + inventory_source: config/apache ``` \ No newline at end of file diff --git a/src/install/apache-flink/default-install-linux.mdx b/src/install/haproxy/default-install-linux.mdx similarity index 70% rename from src/install/apache-flink/default-install-linux.mdx rename to src/install/haproxy/default-install-linux.mdx index a71aa0d670f..7948a7a0655 100644 --- a/src/install/apache-flink/default-install-linux.mdx +++ b/src/install/haproxy/default-install-linux.mdx @@ -12,14 +12,14 @@ cd /etc/newrelic-infra/integrations.d 2. Copy the sample configuration file by running: ```shell -sudo cp nri-Apache Flink-config.yml.sample nri-Apache Flink-config.yml +sudo cp nri-apache-config.yml.sample nri-apache-config.yml ``` -3. Edit the `nri-Apache Flink-config.yml` file. The only two required fields are `_cluster_name` and `_uri`. This example config file collects all metrics: +3. Edit the `nri-apache-config.yml` file. The only two required fields are `_cluster_name` and `_uri`. This example config file collects all metrics: ``` integrations: - - name: nri-Apache Flink + - name: nri-apache env: METRICS: "true" STATUS_URL: http://127.0.0.1/server-status?auto @@ -29,7 +29,7 @@ integrations: env: production role: load_balancer - - name: nri-Apache Flink + - name: nri-apache env: INVENTORY: "true" STATUS_URL: http://127.0.0.1/server-status?auto @@ -38,7 +38,7 @@ integrations: labels: env: production role: load_balancer - inventory_source: config/Apache Flink + inventory_source: config/apache ``` You can find all the config options at the bottom of this doc along with more complex config examples. diff --git a/src/install/haproxy/default-requirements.mdx b/src/install/haproxy/default-requirements.mdx new file mode 100644 index 00000000000..9f7c99f51ea --- /dev/null +++ b/src/install/haproxy/default-requirements.mdx @@ -0,0 +1,10 @@ +--- +headingText: Check the compatibility and requirements +componentType: default +--- + +Before installation, ensure you meet these requirements: + +* A New Relic account. Don't have one? [Sign up for free!](https://newrelic.com/signup) No credit card required. +* HAProxy versions 1.3 - 2.x. +* HAProxy statistics page is enabled and accessible. \ No newline at end of file diff --git a/src/install/haproxy/find-data.mdx b/src/install/haproxy/find-data.mdx new file mode 100644 index 00000000000..ad89a05fca0 --- /dev/null +++ b/src/install/haproxy/find-data.mdx @@ -0,0 +1,16 @@ +--- +componentType: default +headingText: Find and use data +--- + +Data from this integration can be found by going to: **[one.newrelic.com](https://one.newrelic.com/all-capabilities) > Infrastructure > Third-party services > HAProxy**. + +Metrics are attached to the following [event types](/docs/using-new-relic/data/understand-data/new-relic-data-types#events-new-relic): + +* `HAProxyBackendSample` +* `HAProxyFrontendSample` +* `HAProxyServerSample` + +You can [query this data](/docs/using-new-relic/data/understand-data/query-new-relic-data) for troubleshooting purposes or to create custom charts and dashboards. + +For more on how to find and use your data, see [Understand integration data](/docs/infrastructure/integrations/find-use-infrastructure-integration-data).This integration's data is reported to a dedicated New Relic [dashboard](/docs/integrations/new-relic-integrations/getting-started/infrastructure-integration-dashboards-charts). diff --git a/src/install/haproxy/install-infra.mdx b/src/install/haproxy/install-infra.mdx new file mode 100644 index 00000000000..182529cde22 --- /dev/null +++ b/src/install/haproxy/install-infra.mdx @@ -0,0 +1,6 @@ +--- +componentType: default +headingText: Install the infrastructure agent +--- + +To use the HAProxy integration, you need to also [install the infrastructure agent](/docs/infrastructure/install-infrastructure-agent/get-started/install-infrastructure-agent-new-relic/) on the same host. The infrastructure agent monitors the host itself, while the integration you'll install in the next step extends your monitoring with specific data such as database and instance metrics. diff --git a/src/install/haproxy/intro.mdx b/src/install/haproxy/intro.mdx new file mode 100644 index 00000000000..f9631c9181d --- /dev/null +++ b/src/install/haproxy/intro.mdx @@ -0,0 +1,36 @@ +--- +headingText: Before we start +componentType: default +--- + +Our HAProxy [integration](/docs/integrations/host-integrations/getting-started/introduction-host-integrations) collects and sends inventory and metrics from your HAProxy instance to the New Relic platform, where you can aggregate and visualize key performance metrics for the HAProxy server, frontends, and backends. + +To get the most out of this page, select the installation method that fits your environment. You need a [New Relic account](https://newrelic.com/signup) before starting the installation process. + + + +**Use guided install to quickly see your data in the UI** + +The guided install is a single CLI command you can run to monitor your instance. It's a good option for small organizations, or for anyone who wants to test out New Relic. + + + + Guided install, US region + + + + Guided install, EU region + + + +For a more permanent and scalable solution, we recommend the standard manual install of the agent: keep reading for how to do that. + + \ No newline at end of file diff --git a/src/install/apache-flink/linux/install-apt.mdx b/src/install/haproxy/linux/install-apt.mdx similarity index 81% rename from src/install/apache-flink/linux/install-apt.mdx rename to src/install/haproxy/linux/install-apt.mdx index 03dcfc4ec63..a5ed3514c41 100644 --- a/src/install/apache-flink/linux/install-apt.mdx +++ b/src/install/haproxy/linux/install-apt.mdx @@ -12,5 +12,5 @@ sudo apt-get update 2. Run the following command: ```shell -sudo apt-get install nri-Apache Flink +sudo apt-get install nri-haproxy ``` \ No newline at end of file diff --git a/src/install/apache-flink/linux/install-linux.mdx b/src/install/haproxy/linux/install-linux.mdx similarity index 74% rename from src/install/apache-flink/linux/install-linux.mdx rename to src/install/haproxy/linux/install-linux.mdx index 3048feb46d1..455d92086b1 100644 --- a/src/install/apache-flink/linux/install-linux.mdx +++ b/src/install/haproxy/linux/install-linux.mdx @@ -12,14 +12,14 @@ cd /etc/newrelic-infra/integrations.d 2. Copy the sample configuration file by running: ```shell -sudo cp nri-Apache Flink-config.yml.sample nri-Apache Flink-config.yml +sudo cp nri-apache-config.yml.sample nri-apache-config.yml ``` -3. Edit the `nri-Apache Flink-config.yml` file. This example config file collects all metrics: +3. Edit the `nri-apache-config.yml` file. This example config file collects all metrics: ``` integrations: - - name: nri-Apache Flink + - name: nri-apache env: METRICS: "true" STATUS_URL: http://127.0.0.1/server-status?auto @@ -29,7 +29,7 @@ integrations: env: production role: load_balancer - - name: nri-Apache Flink + - name: nri-apache env: INVENTORY: "true" STATUS_URL: http://127.0.0.1/server-status?auto @@ -38,7 +38,7 @@ integrations: labels: env: production role: load_balancer - inventory_source: config/Apache Flink + inventory_source: config/apache ``` You can find all the config options at the bottom of this doc along with more complex config examples. diff --git a/src/install/apache-flink/linux/install-tarball.mdx b/src/install/haproxy/linux/install-tarball.mdx similarity index 100% rename from src/install/apache-flink/linux/install-tarball.mdx rename to src/install/haproxy/linux/install-tarball.mdx diff --git a/src/install/apache-flink/linux/install-yum.mdx b/src/install/haproxy/linux/install-yum.mdx similarity index 86% rename from src/install/apache-flink/linux/install-yum.mdx rename to src/install/haproxy/linux/install-yum.mdx index c7f2bd100c8..3d965b78d0d 100644 --- a/src/install/apache-flink/linux/install-yum.mdx +++ b/src/install/haproxy/linux/install-yum.mdx @@ -12,5 +12,5 @@ sudo yum -q makecache -y --disablerepo='*' --enablerepo='newrelic-infra' 2. Run the following command: ```shell -sudo yum install nri-Apache Flink +sudo yum install nri-haproxy ``` \ No newline at end of file diff --git a/src/install/apache-flink/linux/install-zypper.mdx b/src/install/haproxy/linux/install-zypper.mdx similarity index 82% rename from src/install/apache-flink/linux/install-zypper.mdx rename to src/install/haproxy/linux/install-zypper.mdx index c3551e2eed6..45d052fa0a9 100644 --- a/src/install/apache-flink/linux/install-zypper.mdx +++ b/src/install/haproxy/linux/install-zypper.mdx @@ -12,5 +12,5 @@ sudo zypper -n ref -r newrelic-infra 2. Run the following command: ```shell -sudo zypper -n install nri-Apache Flink +sudo zypper -n install nri-haproxy ``` \ No newline at end of file diff --git a/src/install/haproxy/whatsNext.mdx b/src/install/haproxy/whatsNext.mdx new file mode 100644 index 00000000000..25d8dce2113 --- /dev/null +++ b/src/install/haproxy/whatsNext.mdx @@ -0,0 +1,1766 @@ +--- +componentType: default +headingText: Metrics collected by the integration +--- + +## Example configurations [#examples] + +Here are some example YAML configurations: + + + + This is the basic configuration for collecting Metrics and Inventory from your localhost: + + ``` + integrations: + - name: nri-haproxy + env: + STATS_URL: http://haproxy-instance/stats + USERNAME: haproxy_user + PASSWORD: haproxy_password + HA_PROXY_CLUSTER_NAME: haproxycluster + interval: 15s + labels: + env: production + role: load_balancer + inventory_source: config/haproxy + ``` + + + + This configuration uses the environment variable `HAPROXY_STATS` to populate the STATS_URL setting of the integration: + + ``` + integrations: + - name: nri-haproxy + env: + METRICS: "true" + STATS_URL: {{HAPROXY_STATUS}} + USERNAME: haproxy_user + PASSWORD: haproxy_password + HA_PROXY_CLUSTER_NAME: haproxycluster + interval: 15s + labels: + env: production + role: load_balancer + ``` + + + + This configuration monitors multiple HAProxy servers from the same integration. The first instance (`STATUS_URL: https://1st_haproxy-instance/stats`) collects metrics and inventory, the second instance (`STATUS_URL: https://2nd_haproxy-instance/stats`) only collects metrics. + + ``` + integrations: + - name: nri-haproxy + env: + METRICS: "true" + STATS_URL: http://1st_haproxy-instance/stats + USERNAME: haproxy_user + PASSWORD: haproxy_password + HA_PROXY_CLUSTER_NAME: haproxycluster1 + interval: 15s + labels: + env: production + role: load_balancer + - name: nri-haproxy + env: + INVENTORY: "true" + STATS_URL: http://1st_haproxy-instance/stats + USERNAME: haproxy_user + PASSWORD: haproxy_password + HA_PROXY_CLUSTER_NAME: haproxycluster1 + interval: 60s + labels: + env: production + role: load_balancer + inventory_source: config/haproxy + + - name: nri-haproxy + env: + METRICS: "true" + STATS_URL: http://2nd_haproxy-instance/stats + USERNAME: haproxy_user + PASSWORD: haproxy_password + HA_PROXY_CLUSTER_NAME: haproxycluster2 + interval: 15s + labels: + env: production + role: load_balancer + ``` + + + +## HAProxy configuration options [#config-options] + +The Apache integration collects both metrics and inventory information. This table shows what each configuration option applies to. + + + + + + + + + + + + + + + + + + + + + + + + + + { + ' ' + } + + + + + + + + + + + + { + ' ' + } + + + + + + + + + + + + { + ' ' + } + + + + + + + + + + + + { + ' ' + } + + + + + + + + + + + { + ' ' + } + + + + + + + + + + +
+ Setting + + Description + + Default + + Applies To +
+ **STATS_URL** + + A URL pointing to the HAProxy stats page. + + N/A + + M/I +
+ **USERNAME** + + Username for the HAProxy connection. + + N/A + + M/I +
+ **PASSWORD** + + Password for the given user. + + N/A + + M/I +
+ **HA_PROXY_CLUSTER_NAME** + + A user-defined name to uniquely identify the cluster being monitored. + **Required**. + + N/A + + M/I +
+ **METRICS** + + Set to `true` to enable Metrics-only collection. + + false + +
+ **INVENTORY** + + Set to `true` to enable Inventory-only collection. + + false + +
+ +The values for these settings can be defined in several ways: + +* Adding the value directly in the config file (the most common way). +* Replacing the values from environment variables using the `{{}}` notation. This requires infrastructure agent version 1.14.0 or higher. For more information, see [Infrastructure configuration](/docs/infrastructure/install-infrastructure-agent/configuration/configure-infrastructure-agent/#passthrough) or see [the environment variable example](#example5). +* Using secrets management. Use this to protect sensitive information, such as passwords that would be exposed in plain text in the configuration file. For more information, see [Secrets management](/docs/integrations/host-integrations/installation/secrets-management). + +## Labels [#labels] + +You can further decorate your metrics using labels. Labels allow you to add attributes (key/value pairs) to your metrics, which you can then use to query, filter, or group your metrics. + +Our default sample config file includes examples of labels but, because they're not mandatory, you can remove, modify, or add new ones of your choice. + +``` + labels: + env: production + role: load_balancer +``` + + +## Metric data [#metrics] + +The HAProxy integration collects the following metric data attributes. Each metric name is prefixed with a category indicator and a period, such as `backend.`, `frontend.`, or `server.`. + +### HAProxy backend sample metrics [#backend-sample] + +These attributes are attached to the `HAProxyBackendSample` event type: + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ Metric + + Description +
+ `backend.activeServers` + + Number of active servers. +
+ `backend.averageConnectTimeInSeconds` + + Average connect time over the 1024 last requests, in milliseconds. +
+ `backend.averageQueueTimeInSeconds` + + Average queue time over the 1024 last requests, in milliseconds. +
+ `backend.averageResponseTimeInSeconds` + + Average response time over the 1024 last requests, in milliseconds. +
+ `backend.averageTotalSessionTimeInSeconds` + + Average total session time over the 1024 last requests, in milliseconds. +
+ `backend.backupServers` + + Number of backup servers. +
+ `backend.bytesInPerSecond` + + Bytes received per second. +
+ `backend.bytesOutPerSecond` + + Bytes sent per second. +
+ `backend.bytesThatBypassedCompressorPerSecond` + + Number of bytes that bypassed the HTTP compressor per second. +
+ `backend.connectingRequestErrorsPerSecond` + + Number of requests that encountered an error trying to connect to a backend server per second. +
+ `backend.connectionRetriesPerSecond` + + Number of times a connection to a server was retried per second. +
+ `backend.cookieName` + + The name of the cookie. +
+ `backend.currentQueuedRequestsWithoutServer` + + Current queued requests without a server assigned. +
+ `backend.currentSessions` + + Number of current sessions. +
+ `backend.dataTransfersAbortedByClientPerSecond` + + Number of data transfers aborted by the client per second. +
+ `backend.dataTransfersAbortedByServerPerSecond` + + Number of data transfers aborted by the server per second. +
+ `backend.downtimeInSeconds` + + Total downtime in seconds. +
+ `backend.http100ResponsesPerSecond` + + HTTP responses with 1xx code per second. +
+ `backend.http200ResponsesPerSecond` + + HTTP responses with 2xx code per second. +
+ `backend.http300ResponsesPerSecond` + + HTTP responses with 3xx code per second. +
+ `backend.http400ResponsesPerSecond` + + HTTP responses with 4xx code per second. +
+ `backend.http500ResponsesPerSecond` + + HTTP responses with 5xx code per second. +
+ `backend.httpOtherResponsesPerSecond` + + HTTP responses with other codes (protocol error) per second. +
+ `backend.httpRequestsPerSecond` + + HTTP requests per second. +
+ `backend.httpResponseBytesEmittedByCompressorPerSecond` + + Number of HTTP response bytes emitted by the compressor per second. +
+ `backend.httpResponseBytesFedToCompressorPerSecond` + + Number of HTTP response bytes fed to the compressor per second. +
+ `backend.httpResponsesCompressedPerSecond` + + Number of HTTP responses that were compressed per second. +
+ `backend.interceptedRequestsPerSecond` + + Intercepted requests per second. +
+ `backend.maxQueuedRequestsWithoutServer` + + Maximum queued requests without a server assigned. +
+ `backend.maxSessions` + + Maximum number of sessions. +
+ `backend.maxSessionsPerSecond` + + Maximum number of new sessions per second. +
+ `backend.mode` + + The proxy mode. Options: tcp, http, health, unknown. +
+ `backend.proxyName` + + The name of the proxy. +
+ `backend.requestRedispatchPerSecond` + + Number of times a request was redispatched to another server per second. +
+ `backend.requestsDenied.securityConcernPerSecond` + + Requests denied bytcp-request connection rules per second. +
+ `backend.responseErrorsPerSecond` + + Response errors per second. +
+ `backend.responsesDenied.securityConcernPerSecond` + + Requests denied bytcp-request session rules per second. +
+ `backend.serverSelectedPerSecond` + + Number of times a server was selected per second, either for new sessions, or when re-dispatching. +
+ `backend.sessionsPerSecond` + + Sessions created per second. +
+ `backend.status` + + Status. Options: UP, DOWN, NOLB, MAINT, MAINT(via), MAINT(resolution). +
+ `backend.timeSinceLastSessionAssignedInSeconds` + + Number of seconds since last session assigned to backend. +
+ `backend.timeSinceLastUpDownTransitionInSeconds` + + Number of seconds since the last UP<->DOWN transition. +
+ `backend.totalWeight` + + Total weight of the backend. +
+ `backend.type` + + Type of backend. `0` = frontend, `1` = backend, `2` = server, `3` = socket/listener. +
+ `backend.upToDownTransitionsPerSecond` + + Number of UP->DOWN transitions per second. +
+ +### HAProxy frontend sample metrics [#frontend-sample] + +These attributes are attached to the `HAProxyFrontendSample` event type: + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ Metric + + Description +
+ `frontend.bytesInPerSecond` + + Number of bytes received per second. +
+ `frontend.bytesOutPerSecond` + + Number of bytes sent per second. +
+ `frontend.connectionsPerSecond` + + Number of connections per second. +
+ `frontend.currentSessions` + + Number of current sessions. +
+ `frontend.http100ResponsesPerSecond` + + HTTP responses with 1xx code per second. +
+ `frontend.http200ResponsesPerSecond` + + HTTP responses with 2xx code per second. +
+ `frontend.http300ResponsesPerSecond` + + HTTP responses with 3xx code per second. +
+ `frontend.http400ResponsesPerSecond` + + HTTP responses with 4xx code per second. +
+ `frontend.http500ResponsesPerSecond` + + HTTP responses with 5xx code per second. +
+ `frontend.httpOtherResponsesPerSecond` + + HTTP responses with other codes (protocol error). +
+ `frontend.httpRequests.maxPerSecond` + + Max number of HTTP requests per second observed. +
+ `frontend.httpRequestsPerSecond` + + HTTP requests per second. +
+ `frontend.interceptedRequestsPerSecond` + + Intercepted requests per second. +
+ `frontend.maxConnectionsPerSecond` + + Maximum number of connections. +
+ `frontend.maxSessions` + + Maximum number of sessions. +
+ `frontend.maxSessionsPerSecond` + + Maximum number of new sessions per second. +
+ `frontend.mode` + + Proxy mode. One of tcp, http, health, unknown. +
+ `frontend.proxyName` + + The name of the proxy. +
+ `frontend.requestErrors` + + Request errors per second. +
+ `frontend.requestsDenied.securityConcernsPerSecond` + + Requests denied because of security concerns per second. +
+ `frontend.requestsDenied.tcpRequestConnectionRulesPerSecond` + + Requests denied bytcp-request connection rules per second. +
+ `frontend.requestsDenied.tcpRequestSessionRulesPerSecond` + + Requests denied bytcp-request session rules per second. +
+ `frontend.responsesDenied.securityConcernsPerSecond` + + Responses denied because of security concerns per second. +
+ `frontend.serviceName` + + The name of the service. +
+ `frontend.sessionsPerSecond` + + Sessions created per second. +
+ `frontend.status` + + The status of the frontend. Options: UP, DOWN, NOLB, MAINT, MAINT(via), MAINT(resolution). +
+ `frontend.type` + + Type of frontend. `0` = frontend, `1` = backend, `2` = server, `3` = socket/listener. +
+ +### HAProxy server sample metrics [#server-sample] + +These attributes are attached to the `HAProxyServerSample` event type: + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ Metric + + Description +
+ `server.agentCheckContents` + + Last agent check contents or textual error. +
+ `server.agentDurationInSeconds` + + Time taken to finish last check, in milliseconds. +
+ `server.agentStatus` + + Status of the agent. +
+ `server.agentStatusDescription` + + Short human-readable description of `agent_status`. +
+ `server.averageConnectTimeInSeconds` + + Average connect time over the 1024 last requests, in milliseconds. +
+ `server.averageQueueTimeInSeconds` + + Average queue time over the 1024 last requests, in milliseconds. +
+ `server.averageResponseTimeInSeconds` + + Average response time over the 1024 last requests, in milliseconds. +
+ `server.averageTotalSessionTimeInSeconds` + + Average total session time over the 1024 last requests, in milliseconds. +
+ `server.bytesInPerSecond` + + Bytes received per second. +
+ `server.bytesOutPerSecond` + + Bytes sent per second. +
+ `server.checkStatusDescription` + + Short human-readable description of `check_status`. +
+ `server.connectingToBackendRequestErrorsPerSecond` + + Number of requests that encountered an error trying to connect to a backend server per second. +
+ `server.connectionRetriesPerSecond` + + Number of times a connection to a server was retried per second. +
+ `server.cookieValue` + + Server's cookie value. +
+ `server.currentSessions` + + Number of current sessions. +
+ `server.dataTransfersAbortedByClientPerSecond` + + Number of data transfers aborted by the client per second. +
+ `server.dataTransfersAbortedByServerPerSecond` + + Number of data transfers aborted by the server per second. +
+ `server.downtimeInSeconds` + + Total downtime in seconds. +
+ `server.failedChecksPerSecond` + + Number of failed checks per second. +
+ `server.failedHealthCheckDetails` + + Failed health check details. +
+ `server.healthCheckContents` + + Last health check contents or textual error. +
+ `server.healthCheckDurationInMilliseconds` + + Time it took to finish the last health check, in milliseconds. +
+ `server.healthCheckStatus` + + Health check status. +
+ `server.http100ResponsesPerSecond` + + HTTP responses with 1xx code per second. +
+ `server.http200ResponsesPerSecond` + + HTTP responses with 2xx code per second. +
+ `server.http300ResponsesPerSecond` + + HTTP responses with 3xx code per second. +
+ `server.http400ResponsesPerSecond` + + HTTP responses with 4xx code per second. +
+ `server.http500ResponsesPerSecond` + + HTTP responses with 5xx code per second. +
+ `server.httpOtherResponsesPerSecond` + + HTTP responses with other codes (protocol error). +
+ `server.isActive` + + Whether the server is active. `0` = Inactive, `1` = Active. +
+ `server.isBackup` + + Whether the server is a backup. `0` = Not Backup, `1` = Backup. +
+ `server.layerCode` + + Layer 5-7 code, if available. +
+ `server.maximumQueuedRequests` + + Maximum queued requests. +
+ `server.maxSessions` + + Number of maximum sessions. +
+ `server.maxSessionsPerSecond` + + Max sessions per second. +
+ `server.mode` + + Proxy mode. One of tcp, http, health, unknown. +
+ `server.proxyName` + + The name of the proxy. +
+ `server.queuedRequests` + + Current queued requests. +
+ `server.requestRedispatchPerSecond` + + Number of times a request was redispatched to another server per second. +
+ `server.requestsDenied.securityConcernPerSecond` + + Requests denied because of security concerns per second. +
+ `server.responseErrorsPerSecond` + + Response errors per second. +
+ `server.responsesDenied.securityConcernPerSecond` + + Responses denied because of security concerns per second. +
+ `server.serverID` + + The server ID. +
+ `server.serverSelectedPerSecond` + + Number of times a server was selected per second, either for new sessions, or when re-dispatching. +
+ `server.serverWeight` + + The server weight. +
+ `server.serviceName` + + The name of the service. +
+ `server.sessionsPerSecond` + + Sessions per second. +
+ `server.status` + + The status of the server. Options: UP, DOWN, NOLB, MAINT, MAINT(via), MAINT(resolution). +
+ `server.throttlePercentage` + + Throttle percentage for the server, when slowstart is active. Or no value if not in slowstart. +
+ `server.timeSinceLastSessionAssignedInSeconds` + + Number of seconds since last session assigned to backend. +
+ `server.timeSinceLastUpDownTransitionInSeconds` + + Number of seconds since the last UP<->DOWN transition. +
+ `server.type` + + The type of server. `0` = frontend, `1` = backend, `2` = server, `3` = socket/listener. +
+ `server.upToDownTransitionsPerSecond` + + Number of UP->DOWN transitions per second. +
+ +## Inventory data [#inventory] + +The HAProxy integration captures the configuration parameters of the HAProxy instance. The data is available on the infrastructure [Inventory page](/docs/infrastructure/new-relic-infrastructure/infrastructure-ui-pages/infrastructure-inventory-page-search-your-entire-infrastructure), under the **config/haproxy** source. For more about inventory data, see [Understand integration data](/docs/infrastructure/integrations-getting-started/getting-started/understand-integration-data-data-types#inventory-data). + +The integration captures data for the following configuration parameters: + +### Backend inventory + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ Name + + Description +
+ `iid` + + The backend proxy ID. +
+ `pid` + + The backend process ID. +
+ `slim` + + The backend session limit. +
+ +### Frontend inventory + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ Name + + Description +
+ `iid` + + The frontend proxy ID. +
+ `pid` + + The frontend process ID. +
+ `rate_lim` + + New session per second limit. +
+ `slim` + + The frontend session limit. +
+ +### Server inventory + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ Name + + Description +
+ `iid` + + The backend proxy ID. +
+ `pid` + + The server process ID. +
+ `qmax` + + The configured max queue. `0` = no limit. +
+ `sid` + + The server ID. +
+ `slim` + + The server session limit. +
diff --git a/src/install/apache-flink/windows/install-msi.mdx b/src/install/haproxy/windows/install-msi.mdx similarity index 85% rename from src/install/apache-flink/windows/install-msi.mdx rename to src/install/haproxy/windows/install-msi.mdx index 96db948a545..b0fe147a684 100644 --- a/src/install/apache-flink/windows/install-msi.mdx +++ b/src/install/haproxy/windows/install-msi.mdx @@ -6,5 +6,5 @@ headingText: Download using MSI 1. Download the latest .MSI installer image for the desired integration [from our repository](https://download.newrelic.com/infrastructure_agent/windows/integrations/). 2. In an admin account, run the install script using an absolute path. ``` - msiexec.exe /qn /i PATH\TO\3.msi + msiexec.exe /qn /i PATH\TO\nri-haproxy.msi ``` \ No newline at end of file diff --git a/src/install/haproxy/windows/install-windows.mdx b/src/install/haproxy/windows/install-windows.mdx new file mode 100644 index 00000000000..d7390579327 --- /dev/null +++ b/src/install/haproxy/windows/install-windows.mdx @@ -0,0 +1,30 @@ +--- +componentType: default +headingText: Configure the integration +--- + +1. In the Integrations directory, `C:\Program Files\New Relic\newrelic-infra\integrations.d\`, create a copy of the sample configuration file by running: + +```shell +copy nri-haproxy-config.yml.sample nri-haproxy-config.yml +``` + +2. Edit the `nri-haproxy-config.yml` file. This basic config example collects Metrics and Inventory from your localhost: + +```yml +integrations: + - name: nri-haproxy + env: + STATS_URL: http://haproxy-instance/stats + USERNAME: haproxy_user + PASSWORD: haproxy_password + HA_PROXY_CLUSTER_NAME: haproxycluster + interval: 15s + labels: + env: production + role: load_balancer + inventory_source: config/haproxy +``` + +You can find all the config options at the bottom of this doc along with more complex config examples. + diff --git a/src/nav/infrastructure.yml b/src/nav/infrastructure.yml index e132d4bc011..455c17ef73b 100644 --- a/src/nav/infrastructure.yml +++ b/src/nav/infrastructure.yml @@ -145,7 +145,7 @@ pages: - title: Apache integration path: /docs/install/apache - title: Apache Flink integration - path: /docs/infrastructure/host-integrations/host-integrations-list/install-apache-flink + path: /install/apache-flink - title: Apache Hadoop integration path: /docs/infrastructure/host-integrations/host-integrations-list/apache-hadoop-monitoring-integration - title: Apache Traffic Server integration From 1bf53ae2688f3821f228c23c86af11601cd6eaa0 Mon Sep 17 00:00:00 2001 From: Bradley Camacho Date: Fri, 1 Mar 2024 07:40:24 -0800 Subject: [PATCH 012/124] Update find-data.mdx --- src/install/apache-flink/find-data.mdx | 8 +++++++- 1 file changed, 7 insertions(+), 1 deletion(-) diff --git a/src/install/apache-flink/find-data.mdx b/src/install/apache-flink/find-data.mdx index d3e6a8e1e28..e973cd9b53c 100644 --- a/src/install/apache-flink/find-data.mdx +++ b/src/install/apache-flink/find-data.mdx @@ -5,7 +5,13 @@ headingText: Find and use data Data from this integration can be found by going to: **[one.newrelic.com](https://one.newrelic.com/all-capabilities) > Infrastructure > Third-party services > Apache Flink**. -Apache Flink data is attached to the `Apache FlinkSample` [event type](/docs/using-new-relic/data/understand-data/new-relic-data-types#events-new-relic). You can [query this data](/docs/using-new-relic/data/understand-data/query-new-relic-data) for troubleshooting purposes or to create custom charts and dashboards. +Apache Flink data is attached to the `ApacheFlinkSample` [event type](/docs/using-new-relic/data/understand-data/new-relic-data-types#events-new-relic). You can [query this data](/docs/using-new-relic/data/understand-data/query-new-relic-data) for troubleshooting purposes or to create custom charts and dashboards. For more on how to find and use your data, see [Understand integration data](/docs/infrastructure/integrations/find-use-infrastructure-integration-data). + +You can use NRQL to [query your data](/docs/apis/nerdgraph/examples/nerdgraph-nrql-tutorial/). For example, if you want to view the total number of completed checkpoints on New Relic's Query Builder, use this NRQL query: + +```sql +FROM Metric SELECT latest(flink_jobmanager_job_numberOfCompletedCheckpoints) AS 'Number of Completed Checkpoints' +``` \ No newline at end of file From 05e08a2bf2e954262ea075419a3f9e26175fee3b Mon Sep 17 00:00:00 2001 From: Bradley Camacho Date: Fri, 1 Mar 2024 09:25:13 -0800 Subject: [PATCH 013/124] Fix apache-flink bug Fixed a bug with the apache flink branching doc that wouldn't break the build, but would prevent the page itself from building. Seems like every branching install needs an "appinfo" section. --- src/install/config/apache-flink.yaml | 11 ++++++++++- 1 file changed, 10 insertions(+), 1 deletion(-) diff --git a/src/install/config/apache-flink.yaml b/src/install/config/apache-flink.yaml index 9298a72d484..ca693935bf4 100644 --- a/src/install/config/apache-flink.yaml +++ b/src/install/config/apache-flink.yaml @@ -7,9 +7,18 @@ redirects: - /docs/infrastructure/prometheus-integrations/install-configure-openmetrics/install-apache-flink/ - /docs/infrastructure/host-integrations/host-integrations-list/install-apache-flink/ appInfo: + - optionType: dropdown1 + label: '' + placeholder: 'Select your environment' + options: + - value: 'linux' + displayName: 'Linux' + logo: 'linux' + - value: 'windows' + displayName: 'Windows' + logo: 'windows' steps: - - filePath: 'src/install/apache-flink/appInfo.mdx' - filePath: 'src/install/apache-flink/install-infra.mdx' - filePath: 'src/install/apache-flink/configure-apache.mdx' - filePath: 'src/install/apache-flink/check-metrics.mdx' From ee4326ac5b5113d4e15359d2e0637cfb5afb2dc5 Mon Sep 17 00:00:00 2001 From: nbaenam Date: Mon, 4 Mar 2024 18:43:39 +0100 Subject: [PATCH 014/124] feat(OHI rabbitmq): Added branching doc structure --- ...re_screenshot-full_rabbitmq-dashboard.webp | Bin 0 -> 179868 bytes src/install/config/rabbitmq.yaml | 94 ++ .../rabbitmq/ansible/install-ansible.mdx | 40 + .../rabbitmq/ansible/requirements-ansible.mdx | 10 + src/install/rabbitmq/appInfo.mdx | 9 + src/install/rabbitmq/default-requirements.mdx | 14 + src/install/rabbitmq/ecs/install-ecs.mdx | 6 + src/install/rabbitmq/ecs/requirements-ecs.mdx | 6 + src/install/rabbitmq/find-data.mdx | 37 + src/install/rabbitmq/install-infra.mdx | 6 + src/install/rabbitmq/intro.mdx | 11 + .../rabbitmq/kubernetes/install-k8s.mdx | 6 + .../rabbitmq/kubernetes/requirements-k8s.mdx | 8 + src/install/rabbitmq/linux/install-linux.mdx | 57 + .../rabbitmq/linux/install-tarball.mdx | 23 + src/install/rabbitmq/whatsNext.mdx | 1355 +++++++++++++++++ .../rabbitmq/windows/install-windows.mdx | 33 + 17 files changed, 1715 insertions(+) create mode 100644 src/images/infrastructure_screenshot-full_rabbitmq-dashboard.webp create mode 100644 src/install/config/rabbitmq.yaml create mode 100644 src/install/rabbitmq/ansible/install-ansible.mdx create mode 100644 src/install/rabbitmq/ansible/requirements-ansible.mdx create mode 100644 src/install/rabbitmq/appInfo.mdx create mode 100644 src/install/rabbitmq/default-requirements.mdx create mode 100644 src/install/rabbitmq/ecs/install-ecs.mdx create mode 100644 src/install/rabbitmq/ecs/requirements-ecs.mdx create mode 100644 src/install/rabbitmq/find-data.mdx create mode 100644 src/install/rabbitmq/install-infra.mdx create mode 100644 src/install/rabbitmq/intro.mdx create mode 100644 src/install/rabbitmq/kubernetes/install-k8s.mdx create mode 100644 src/install/rabbitmq/kubernetes/requirements-k8s.mdx create mode 100644 src/install/rabbitmq/linux/install-linux.mdx create mode 100644 src/install/rabbitmq/linux/install-tarball.mdx create mode 100644 src/install/rabbitmq/whatsNext.mdx create mode 100644 src/install/rabbitmq/windows/install-windows.mdx diff --git a/src/images/infrastructure_screenshot-full_rabbitmq-dashboard.webp b/src/images/infrastructure_screenshot-full_rabbitmq-dashboard.webp new file mode 100644 index 0000000000000000000000000000000000000000..e3ce9a705138efdb10066500db831d98b63fd711 GIT binary patch literal 179868 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
1W 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

E2w70487b>05?x9eL(}%x;>(Aw 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 literal 0 HcmV?d00001 diff --git a/src/install/config/rabbitmq.yaml b/src/install/config/rabbitmq.yaml new file mode 100644 index 00000000000..3cdfa5d1743 --- /dev/null +++ b/src/install/config/rabbitmq.yaml @@ -0,0 +1,94 @@ +agentName: rabbitmq +agentType: integration +title: 'RabbitMQ monitoring integration' +metaDescription: 'Install the RabbitMQ integration' +introFilePath: 'src/install/rabbitmq/intro.mdx' +appInfo: + - optionType: dropdown1 + label: '' + placeholder: 'Select your environment' + options: + - value: 'linux' + displayName: 'Linux' + logo: 'linux' + recommendedGuided: true + - value: 'windows' + displayName: 'Windows' + logo: 'windows' + recommendedGuided: true + - value: 'ecs' + displayName: 'ECS' + logo: 'amazonECS' + - value: 'kubernetes' + displayName: 'Kubernetes' + logo: 'k8' + - value: 'ansible' + displayName: 'Ansible' + logo: 'linux' + + - optionType: deployment + label: "Choose your install path" + placeholder: "Choose one:" + options: + - value: "tar" + displayName: "Install from tarball (Other Linux distros)" + recommendedGuided: true + logo: 'linux' + +steps: + - filePath: 'src/install/rabbitmq/appInfo.mdx' + - filePath: 'src/install/rabbitmq/default-requirements.mdx' + overrides: + - filePath: 'src/install/rabbitmq/kubernetes/requirements-k8s.mdx' + selectedOptions: + - optionType: dropdown1 + options: + - value: 'kubernetes' + - filePath: 'src/install/rabbitmq/ecs/requirements-ecs.mdx' + selectedOptions: + - optionType: dropdown1 + options: + - value: 'ecs' + - filePath: 'src/install/rabbitmq/ansible/requirements-ansible.mdx' + selectedOptions: + - optionType: dropdown1 + options: + - value: 'ansible' + - filePath: 'src/install/rabbitmq/install-infra.mdx' + - filePath: "src/install/rabbitmq/linux/install-tarball.mdx" + overrides: + - filePath: "src/install/rabbitmq/linux/install-tarball.mdx" + selectedOptions: + - optionType: deployment + options: + - value: "tar" + - filePath: 'src/install/rabbitmq/linux/install-linux.mdx' + overrides: + - filePath: 'src/install/rabbitmq/linux/install-linux.mdx' + selectedOptions: + - optionType: dropdown1 + options: + - value: 'linux' + - filePath: 'src/install/rabbitmq/windows/install-windows.mdx' + selectedOptions: + - optionType: dropdown1 + options: + - value: 'windows' + - filePath: 'src/install/rabbitmq/ecs/install-ecs.mdx' + selectedOptions: + - optionType: dropdown1 + options: + - value: 'ecs' + - filePath: 'src/install/rabbitmq/kubernetes/install-k8s.mdx' + selectedOptions: + - optionType: dropdown1 + options: + - value: 'kubernetes' + - filePath: 'src/install/rabbitmq/ansible/install-ansible.mdx' + selectedOptions: + - optionType: dropdown1 + options: + - value: 'ansible' + + - filePath: 'src/install/rabbitmq/find-data.mdx' +whatsNextFilePath: 'src/install/rabbitmq/whatsNext.mdx' diff --git a/src/install/rabbitmq/ansible/install-ansible.mdx b/src/install/rabbitmq/ansible/install-ansible.mdx new file mode 100644 index 00000000000..db925531a22 --- /dev/null +++ b/src/install/rabbitmq/ansible/install-ansible.mdx @@ -0,0 +1,40 @@ +--- +componentType: default +headingText: Install the RabbitMQ monitoring integration +--- + +1. Go to [Ansible Galaxy](https://galaxy.ansible.com/newrelic/newrelic_install). + +```shell +ansible-galaxy install newrelic.newrelic_install +``` + +2. Make sure you have `ansible.windows` and `ansible.utils` installed. Run this command if they're not installed: + +```shell +ansible-galaxy collection install ansible.windows ansible.utils +``` + +3. Include the `newrelic.newrelic_install` role in your playbook. Here is an example of configuring your role to install the infrastructure agent: + +```yml +--- +- name: Install New Relic + hosts: all + roles: + - role: newrelic.newrelic_install + vars: + targets: + - infrastructure + - logs + tags: + foo: bar + environment: + NEW_RELIC_API_KEY: + NEW_RELIC_ACCOUNT_ID: + NEW_RELIC_REGION: +``` + +4. Customize the required variables. + +Go to [Configure the infrastructure agent using Ansible](/docs/infrastructure/install-infrastructure-agent/config-management-tools/configure-infrastructure-agent-using-ansible/) if you need more information. \ No newline at end of file diff --git a/src/install/rabbitmq/ansible/requirements-ansible.mdx b/src/install/rabbitmq/ansible/requirements-ansible.mdx new file mode 100644 index 00000000000..36c690cad80 --- /dev/null +++ b/src/install/rabbitmq/ansible/requirements-ansible.mdx @@ -0,0 +1,10 @@ +--- +headingText: Check the compatibility and requirements +componentType: default +--- + +The Ansible role with New Relic's infrastructure monitoring agent requires a [supported operating system](/docs/infrastructure/new-relic-infrastructure/getting-started/compatibility-requirements-new-relic-infrastructure#operating-systems). + +If you need help with Ansible for Windows OS, take a look at [Setting up a Windows Host](https://docs.ansible.com/ansible/latest/os_guide/windows_setup.html), from the [Ansible Documentation](https://docs.ansible.com/ansible/latest/) site. + +This role is tested with the Ansible Core 2.13 and 2.14 and Python 3.10. Ansible Core versions before 2.10 are not supported. \ No newline at end of file diff --git a/src/install/rabbitmq/appInfo.mdx b/src/install/rabbitmq/appInfo.mdx new file mode 100644 index 00000000000..86c24861c27 --- /dev/null +++ b/src/install/rabbitmq/appInfo.mdx @@ -0,0 +1,9 @@ +--- +componentType: appInfoConfig +headingText: Choose your framework +--- + + + + + diff --git a/src/install/rabbitmq/default-requirements.mdx b/src/install/rabbitmq/default-requirements.mdx new file mode 100644 index 00000000000..f79eabfe83f --- /dev/null +++ b/src/install/rabbitmq/default-requirements.mdx @@ -0,0 +1,14 @@ +--- +headingText: Check the compatibility and requirements +componentType: default +--- + +Our integration is compatible with: + +* RabbitMQ version 3.0 or higher for metric data. +* RabbitMQ version 3.7 or higher for inventory data. + +Before installing the integration, make sure that you meet the following requirements: + +* RabbitMQ [Management Plugin](https://www.rabbitmq.com/management.html) configured. +* RabbitMQ command line tool, [rabbitmqctl](#rabbitmqctl), in the `PATH` of the root user. \ No newline at end of file diff --git a/src/install/rabbitmq/ecs/install-ecs.mdx b/src/install/rabbitmq/ecs/install-ecs.mdx new file mode 100644 index 00000000000..cb634b2db20 --- /dev/null +++ b/src/install/rabbitmq/ecs/install-ecs.mdx @@ -0,0 +1,6 @@ +--- +componentType: default +headingText: Install the RabbitMQ monitoring integration +--- + +See how to [monitor services running on Amazon ECS](/docs/integrations/host-integrations/host-integrations-list/monitor-services-running-amazon-ecs). \ No newline at end of file diff --git a/src/install/rabbitmq/ecs/requirements-ecs.mdx b/src/install/rabbitmq/ecs/requirements-ecs.mdx new file mode 100644 index 00000000000..4f510a7b92b --- /dev/null +++ b/src/install/rabbitmq/ecs/requirements-ecs.mdx @@ -0,0 +1,6 @@ +--- +headingText: Check the compatibility and requirements +componentType: default +--- + +Before installing the integration, make sure that you meet the [Amazon ECS requirements](/docs/integrations/host-integrations/host-integrations-list/monitor-services-running-amazon-ecs). \ No newline at end of file diff --git a/src/install/rabbitmq/find-data.mdx b/src/install/rabbitmq/find-data.mdx new file mode 100644 index 00000000000..0611c00823e --- /dev/null +++ b/src/install/rabbitmq/find-data.mdx @@ -0,0 +1,37 @@ +--- +componentType: default +headingText: Find and use data +--- + +import infrastructureInstallRabbitmqDashboard from 'images/infrastructure_screenshot-full_rabbitmq-dashboard.webp' + + +This service reports data to an [integration dashboard](/docs/integrations/new-relic-integrations/getting-started/infrastructure-integration-dashboards-charts). + +These [event types](/docs/using-new-relic/data/understand-data/new-relic-data-types#events-new-relic) have attached metrics: + +* [RabbitmqVhostSample](#vhostsample) +* [RabbitmqNodeSample](#nodesample) +* [RabbitmqExchangeSample](#exchangesample) +* [RabbitmqQueueSample](#queuesample) + + +Follow these steps to find your RabbitMQ data: + +1. Go to **[one.newrelic.com](https://one.newrelic.com) > Add data** and type **RabbitMQ**. + +2. Under **Dashboards**, click **RabbitMQ**. + + Installing the RabbitMQ dashboards + +3. A popup window opens. +4. Click **Edit** if you want to change the account. +5. Click **Setup RabbitMQ** or **Skip this step** if you already setup this datasource. +6. Click **View dashboard**, and see your RabbitMQ data in New Relic. + +For more on how to find and use your data, see how to [understand integration data](/docs/infrastructure/integrations/find-use-infrastructure-integration-data). You can find a full list of metrics and their attributes at the bottom of this doc. + diff --git a/src/install/rabbitmq/install-infra.mdx b/src/install/rabbitmq/install-infra.mdx new file mode 100644 index 00000000000..0d9b0ee7f2e --- /dev/null +++ b/src/install/rabbitmq/install-infra.mdx @@ -0,0 +1,6 @@ +--- +componentType: default +headingText: Install the infrastructure agent +--- + +To use the RabbitMQ integration, you need to also [install the infrastructure agent](/docs/infrastructure/install-infrastructure-agent/get-started/install-infrastructure-agent-new-relic/) on the same host. The infrastructure agent monitors the host itself, while the integration you'll install in the next step extends your monitoring with RabbitMQ-specific data such as database and instance metrics. \ No newline at end of file diff --git a/src/install/rabbitmq/intro.mdx b/src/install/rabbitmq/intro.mdx new file mode 100644 index 00000000000..5d44c0b3179 --- /dev/null +++ b/src/install/rabbitmq/intro.mdx @@ -0,0 +1,11 @@ +--- +headingText: Before we start +componentType: default +--- + +The New Relic RabbitMQ [on-host integration](/docs/integrations/host-integrations/getting-started/introduction-host-integrations) reports metrics and configuration data from your RabbitMQ service, including important metrics relating to the cluster, vhosts, queues, exchanges, and consumers. + + + This integration can monitor only one RabbitMQ server instance per host. + + diff --git a/src/install/rabbitmq/kubernetes/install-k8s.mdx b/src/install/rabbitmq/kubernetes/install-k8s.mdx new file mode 100644 index 00000000000..9819debc17c --- /dev/null +++ b/src/install/rabbitmq/kubernetes/install-k8s.mdx @@ -0,0 +1,6 @@ +--- +componentType: default +headingText: Install the RabbitMQ monitoring integration +--- + +See how to [monitor services running on Kubernetes](/docs/monitor-service-running-kubernetes). \ No newline at end of file diff --git a/src/install/rabbitmq/kubernetes/requirements-k8s.mdx b/src/install/rabbitmq/kubernetes/requirements-k8s.mdx new file mode 100644 index 00000000000..0375050df61 --- /dev/null +++ b/src/install/rabbitmq/kubernetes/requirements-k8s.mdx @@ -0,0 +1,8 @@ +--- +headingText: Check the compatibility and requirements +componentType: default +--- + + +Before installing the integration, make sure that you meet the [Kubernetes requirements](/docs/kubernetes-pixie/kubernetes-integration/get-started/kubernetes-integration-compatibility-requirements/). + diff --git a/src/install/rabbitmq/linux/install-linux.mdx b/src/install/rabbitmq/linux/install-linux.mdx new file mode 100644 index 00000000000..cd7d788e71a --- /dev/null +++ b/src/install/rabbitmq/linux/install-linux.mdx @@ -0,0 +1,57 @@ +--- +componentType: default +headingText: Configure the RabbitMQ integration +--- + +1. Change directory to the integrations configuration folder by running: + + ```shell + cd /etc/newrelic-infra/integrations.d + ``` + +2. Copy the sample configuration file by running: + + ```shell + sudo cp rabbitmq-config.yml.sample rabbitmq-config.yml + ``` + +3. Edit the `rabbitmq-config.yml` file. This is the basic configuration with SSL: + + ```yml + integrations: + - name: nri-rabbitmq + env: + HOSTNAME: localhost + PORT: 15672 + USERNAME: admin + PASSWORD: admin + CA_BUNDLE_DIR: /path/to/bundle/dir/ + NODE_NAME_OVERRIDE: local_node_name@localhost + CONFIG_PATH: /path/to/config/file/rabbitmq.conf + USE_SSL: true + + QUEUES: '["myQueue1","myQueue2"]' + QUEUES_REGEXES: '["queue[0-9]+",".*"]' + + EXCHANGES: '["exchange1","exchange2"]' + EXCHANGES_REGEXES: '["exchange[0-9]+",".*"]' + + VHOSTS: '["vhost1","vhost2"]' + VHOSTS_REGEXES: '["vhost[0-9]+",".*"]' + interval: 15s + labels: + env: production + role: rabbitmq + inventory_source: config/rabbitmq + ``` + +4. To enable automatic Rabbitmq error log parsing and forwarding, copy (or rename) the `rabbitmq-log.yml.example` file to `rabbitmq-log.yml`. No need to restart the agent. + + **Example:** + + ```bash + sudo cp /etc/newrelic-infra/logging.d/rabbitmq-log.yml.example /etc/newrelic-infra/logging.d/rabbitmq-log.yml + ``` + +You can find all the config options at the bottom of this doc along with more complex config examples. + diff --git a/src/install/rabbitmq/linux/install-tarball.mdx b/src/install/rabbitmq/linux/install-tarball.mdx new file mode 100644 index 00000000000..abdbe5bb081 --- /dev/null +++ b/src/install/rabbitmq/linux/install-tarball.mdx @@ -0,0 +1,23 @@ +--- +componentType: default +headingText: Download using tarball +--- + + + We recommend [using your distribution package manager to install the infrastructure agent](/docs/infrastructure/install-configure-manage-infrastructure/linux-installation/install-infrastructure-linux-using-package-manager). If you choose to [manually install the agent](/docs/infrastructure/install-configure-manage-infrastructure/linux-installation/tarball-manual-install-infrastructure-linux), you may also want to install the on-host integrations from the provided tarballs. + + The manual install process isn't automated. If you opt for manual install, you must place the different files in the correct folders, and ensure that the agent has all the permissions to execute the integrations. + + + + To install an integration from a tarball: + + 1. Download the packaged integration file from the [tarball repository](https://download.newrelic.com/infrastructure_agent/binaries/linux/amd64/). + 2. Unpack the tarball file according to our [integration file structure and placement rules](/docs/integrations/integrations-sdk/getting-started/integration-file-structure-activation) so the agent can find the definitions, configurations, and executables of the integration. + 3. Place the binary that contains the definition file inside `newrelic-integrations` or `custom-integrations` in the [agent directory](/docs/infrastructure/install-configure-manage-infrastructure/linux-installation/tarball-manual-install-infrastructure-linux#agent-directory). + 4. Place the integration's config file under the [plugin directory](/docs/infrastructure/install-configure-manage-infrastructure/linux-installation/tarball-manual-install-infrastructure-linux#configure-plugin). + 5. Download the JMX tool from [our repository](https://download.newrelic.com/infrastructure_agent/binaries/linux/noarch/) and unpack it. Some notes on compatibility: + * For JMX integration version 2.3.3 or higher and Cassandra integration version 2.3.0 or higher, the `nrjmx` tool is included as a dependency. For this reason, when using a package manager, the `nrjmx` tool doesn't have to be installed manually. + * `nrjmx` requires Java 8 or higher. + * If you have `nrjmx` already installed and install `nri-jmx`, our JMX tool keeps the already-installed version. If you don't have `nrjmx` already installed, it gets the latest `nrjmx` release. + * By default, the `nrjmx` location is `/usr/bin/nrjmx/*`. To install in a different location, set the new path in the `NR_JMX_TOOL` environment variable. \ No newline at end of file diff --git a/src/install/rabbitmq/whatsNext.mdx b/src/install/rabbitmq/whatsNext.mdx new file mode 100644 index 00000000000..5c598109176 --- /dev/null +++ b/src/install/rabbitmq/whatsNext.mdx @@ -0,0 +1,1355 @@ +--- +componentType: default +headingText: What's next? +--- + + +This integration doesn't automatically update. For best results, regularly [update the integration package](/docs/integrations/host-integrations/installation/update-infrastructure-host-integration-package) and [the infrastructure agent](/docs/infrastructure/new-relic-infrastructure/installation/update-infrastructure-agent). + + +## Configuration options [#config-options] + +For the standard on-host installation, this integration comes with a YAML config file, `rabbitmq-config.yml`. This configuration is where you can place required login credentials and configure how data is collected. Which options you change depends on your setup and preferences. It comes with a sample config file `rabbitmq-log.yml.example` that you can copy and edit. + +The configuration file has common settings applicable to all integrations like `interval`, `timeout`, `inventory_source`. + + + To read all about common settings or if you're still using our Legacy configuration or definition files, please go to our [On-host integrations: Standard configuration format](/docs/create-integrations/infrastructure-integrations-sdk/specifications/host-integrations-newer-configuration-format/#configuration-basics) document. + + +Specific settings related to RabbitMQ are defined using the `env` section of the configuration file. These settings control the connection to your RabbitMQ instance as well as other security settings and features. The next section of this document describes the list of valid settings. + + +**Cluster environments** + +In cluster environments, the integration collects metrics from all the cluster with only one instance of the integration connected to one node. This instance should use `METRICS=true` and `INVENTORY=true`. For the rest of the nodes only Inventory should be collected using `METRICS=false` and `INVENTORY=true`. For more on these, see [instance settings](#instance-settings). + +If you're running a cluster environment in Kubernetes, you need to deploy RabbitMQ as a [StatefulSet](https://kubernetes.io/docs/concepts/workloads/controllers/statefulset/), and configure the agent to query all the metrics from the RabbitMQ pod. Set the autodiscovery matching condition [in the config file](https://github.com/newrelic/nri-rabbitmq/blob/master/rabbitmq-config.yml.k8s_sample) to this value: + +```yaml +discovery: + command: + exec: /var/db/newrelic-infra/nri-discovery-kubernetes + match: + podName: rabbitmq-0 +``` + + + The integration restricts the collection of queues to a certain number. If the number of queues exceeds 2000, after the application of queue filters, the integration won't report any of them. + We offer a workaround that will preserve all metrics, but it will disable entity registration. To apply the workaround, add the following environment variable to the configuration file: + + ```yaml + integrations: + - name: nri-rabbitmq + env: + # Integration configuration parameters. + METRICS: true + DISABLE_ENTITIES: true + QUEUES_MAX_LIMIT: "0" + + ``` + + + +### RabbitMQ instance settings [#instance-settings] + +The RabbitMQ integration collects both Metrics(M) and Inventory(I) information. Check the **Applies To** column below to find which settings can be used for each specific collection: + + + + + + + + + + + + + + + + + + + + + + + + + + { + ' ' + } + + + + + + + + + + + + { + ' ' + } + + + + + + + + + + + + { + ' ' + } + + + + + + + + + + + + { + ' ' + } + + + + + + + + + + + + { + ' ' + } + + + + + + + + + + + + { + ' ' + } + + + + + + + + + + + + { + ' ' + } + + + + + + + + + + + + { + ' ' + } + + + + + + + + + + + + { + ' ' + } + + + + + + + + + + + + { + ' ' + } + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + { + ' ' + } + + + + + + + + + + + + { + ' ' + } + + + + + + + + + + + + { + ' ' + } + + + + + + + + + + + + { + ' ' + } + + + + + + + + + + + + { + ' ' + } + + + + + + + + + + + { + ' ' + } + + + + + + + + + + + { + ' ' + } + + + + + + + + + + + { + ' ' + } + + + + + + + + + + { + ' ' + } + + + + + + + + + + +
+ Setting + + Description + + Default + + Applies To +
+ **HOSTNAME** + + Hostname or IP of the RabbitMQ management plugin. + + localhost + + M/I +
+ **PORT** + + Port number of the RabbitMQ management plugin. + + 15672 + + M/I +
+ **USERNAME** + + User that is connecting to RabbitMQ management plugin. + + N/A + + M/I +
+ **PASSWORD** + + Password to connect to RabbitMQ management plugin. + + N/A + + M/I +
+ **TIMEOUT** + + Timeout in seconds to timeout the connection to RabbitMQ endpoint. + + 30 + + M/I +
+ **MANAGEMENT_PATH_PREFIX** + + RabbitMQ Management Prefix. + + N/A + + M/I +
+ **USE_SSL** + + Option to connect using SSL. + + false + + M/I +
+ **CA_BUNDLE_DIR** + + Location of SSL certificate on the host. + + N/A + + M/I +
+ **CA_BUNDLE_FILE** + + Location of SSL certificate on the host. + + N/A + + M/I +
+ **NODE_NAME_OVERRIDE** + + Overrides the local node name instead of retrieving it from RabbitMQ. + + N/A + + M/I +
+ **CONFIG_PATH** + + Absolute path to the RabbitMQ configuration file. + + N/A + + M/I +
+ **QUEUES** + + Queue names to collect in the format of a JSON array of strings. If a queue name exactly matches (case sensitive) one of these, it will be collected. + + Example: + + ``` + queues: '["myQueue1","myQueue2"]' + ``` + + N/A + + I +
+ **QUEUES_REGEXES** + + Queue names to collect in the format of a JSON array of REGEX strings. If a queue name matches one of these, it will be collected. + + Example: + + ``` + queues_regexes: '["queue[0-9]+",".*"]' + ``` + + N/A + + M/I +
+ **EXCHANGES** + + Exchange names to collect in the format of a JSON array of strings. If an + exchange name exactly matches (case sensitive) one of these, it will be + collected. + + N/A + + M/I +
+ **EXCHANGES_REGEXES** + + Exchanges names to collect in the format of a JSON array of REGEX strings. + If an exchange name matches one of these it will be collected. + + N/A + + M/I +
+ **VHOSTS** + + Vhost names to collect in the format of a JSON array of strings. If a vhost name exactly matches (case sensitive) one of these, it will be included. + This also affects only collecting entities belonging to vhosts specified. + + N/A + + M/I +
+ **VHOSTS_REGEXES** + + Vhost names to collect in the format of a JSON array of REGEX strings. If a + vhost name matches one of these the vhost and any entities belonging to this + vhost will be collected. + + N/A + + M/I +
+ **METRICS** + + Set to `true` to enable Metrics-only collection. + + false + +
+ **INVENTORY** + + Set to `true` to enable Inventory-only collection. + + false + +
+ **EVENTS** + + Set to `true` to enable Events-only collection. + + false + +
+ **DISABLE_ENTITIES** + + Configure whether inventory entries are created for entities during metrics collection. Only to be used as workaround to collect large amounts of Queues. + + false + +
+ **QUEUES_MAX_LIMIT** + + Defines the max amount of Queues that can be processed, if this number is reached all queues will be dropped. If defined as '0' no limits are applied, this used with DISABLE_ENTITIES=true to avoid, memory increase in the Agent. + + 2000 + +
+ +The values for these settings can be defined in several ways: + +* Adding the value directly in the config file. This is the most common way. +* Replacing the values from environment variables using the `{{}}` notation. This requires infrastructure agent v1.14.0+. Read more [here](/docs/infrastructure/install-infrastructure-agent/configuration/configure-infrastructure-agent/#passthrough). +* Using Secrets management. Use this to protect sensible information such as passwords to be exposed in plain text on the configuration file. For more information, see [Secrets management](/docs/integrations/host-integrations/installation/secrets-management). + +### Labels/Custom Attributes [#labels] + +Environment variables can be used to control config settings, such as your , and are then passed through to the infrastructure agent. For instructions on how to use this feature, see [Configure the infrastructure agent](/docs/infrastructure/new-relic-infrastructure/configuration/configure-infrastructure-agent#passthrough). +You can further decorate your metrics using labels. Labels allow you to add key/value pairs attributes to your metrics which you can then use to query, filter or group your metrics on.
+Our default sample config file includes examples of labels but, as they are not mandatory, you can remove, modify, or add new ones of your choice. + +```yml + labels: + env: production + role: rabbitmq +``` + +## Example configuration [#example-config] + +Examples of the configuration file: + + + + ```yml + integrations: + - name: nri-rabbitmq + env: + HOSTNAME: localhost + PORT: 15672 + USERNAME: admin + PASSWORD: admin + CA_BUNDLE_DIR: /path/to/bundle/dir/ + NODE_NAME_OVERRIDE: local_node_name@localhost + CONFIG_PATH: /path/to/config/file/rabbitmq.conf + USE_SSL: true + + QUEUES: '["myQueue1","myQueue2"]' + QUEUES_REGEXES: '["queue[0-9]+",".*"]' + + EXCHANGES: '["exchange1","exchange2"]' + EXCHANGES_REGEXES: '["exchange[0-9]+",".*"]' + + VHOSTS: '["vhost1","vhost2"]' + VHOSTS_REGEXES: '["vhost[0-9]+",".*"]' + interval: 15s + labels: + env: production + role: rabbitmq + inventory_source: config/rabbitmq + ``` + + + + ```yml + integrations: + - name: nri-rabbitmq + env: + METRICS: true + HOSTNAME: localhost + PORT: 15672 + USERNAME: admin + PASSWORD: admin + NODE_NAME_OVERRIDE: local_node_name@locahost + + QUEUES: '["myQueue1","myQueue2"]' + QUEUES_REGEXES: '["queue[0-9]+",".*"]' + + EXCHANGES: '["exchange1","exchange2"]' + EXCHANGES_REGEXES: '["exchange[0-9]+",".*"]' + + VHOSTS: '["vhost1","vhost2"]' + VHOSTS_REGEXES: '["vhost[0-9]+",".*"]' + interval: 15s + labels: + env: production + role: rabbitmq + inventory_source: config/rabbitmq + ``` + + + + ```yml + integrations: + - name: nri-rabbitmq + env: + INVENTORY: true + HOSTNAME: localhost + PORT: 15672 + USERNAME: admin + PASSWORD: admin + NODE_NAME_OVERRIDE: local_node_name@localhost + CONFIG_PATH: /path/to/config/file/rabbitmq.conf + + QUEUES: '["myQueue1","myQueue2"]' + QUEUES_REGEXES: '["queue[0-9]+",".*"]' + + EXCHANGES: '["exchange1","exchange2"]' + EXCHANGES_REGEXES: '["exchange[0-9]+",".*"]' + + VHOSTS: '["vhost1","vhost2"]' + VHOSTS_REGEXES: '["vhost[0-9]+",".*"]' + interval: 15s + labels: + env: production + role: rabbitmq + inventory_source: config/rabbitmq + ``` + + + + ```yml + integrations: + - name: nri-rabbitmq + env: + EVENTS: true + HOSTNAME: localhost + PORT: 15672 + USERNAME: admin + PASSWORD: admin + NODE_NAME_OVERRIDE: local_node_name@localhost + interval: 15s + labels: + env: production + role: rabbitmq + inventory_source: config/rabbitmq + ``` + + + +See [On-host integration configuration overview](/docs/integrations/integrations-sdk/file-specifications/host-integration-configuration-overview) to know more about the general structure of on-host integration configuration. + + +## Metric data [#metrics] + +The RabbitMQ integration collects the following metric data attributes. Each metric name is prefixed with a category indicator and a period, such as queue. or node.. + +### RabbitMQ vhost sample event [#vhostsample] + +These attributes are attached to the `RabbitmqVhostSample` event type: + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ Name + + Description +
+ `vhost.connectionsBlocked` + + Number of current connections in the state blocked. +
+ `vhost.connectionsBlocking` + + Number of current connections in the state blocking. +
+ `vhost.connectionsClosed` + + Number of current connections in the state closed. +
+ `vhost.connectionsClosing` + + Number of current connections in the state closing. +
+ `vhost.connectionsFlow` + + Number of current connections in the state flow. +
+ vhost.connectionsOpening + + Number of current connections in the state opening. +
+ vhost.connectionsRunning + + Number of current connections in the state running. +
+ vhost.connectionsStarting + + Number of current connections in the state starting. +
+ vhost.connectionsTotal + + Number of current connections to a given rabbitmq vhost. +
+ vhost.connectionsTuning + + Number of current connections in the state tuning. +
+ +### RabbitMQ node sample event [#nodesample] + +These attributes are attached to the `RabbitmqNodeSample` event type: + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ Name + + Description +
+ node.averageErlangProcessesWaiting + + Average number of Erlang processes waiting to run. In RabbitMQ this is seen as `run_queue`. +
+ `node.diskAlarm` + + Node disk alarm (0 or 1). 0 shows that the alarm is not tripped and 1 shows that the alarm is tripped. In RabbitMQ this is seen as `disk_free_alarm`. +
+ `node.diskSpaceFreeInBytes` + + Current free disk space in bytes. In RabbitMQ this is seen as `disk_free`. +
+ `node.fileDescriptorsTotal` + + The total count of file descriptors. In RabbitMQ this is seen as `fd_total`. +
+ `node.fileDescriptorsTotalUsed` + + The total count of file descriptors used. In RabbitMQ this is seen as `fd_used`. +
+ `node.fileDescriptorsUsedSockets` + + Number of file descriptors used as sockets. In RabbitMQ this is seen as `sockets_used`. +
+ `node.fileDescriptorsTotalSockets` + + Total number of file descriptors available as sockets. In RabbitMQ this is seen as `sockets_total`. +
+ `node.hostMemoryAlarm` + + Host memory alarm (0 or 1). 0 shows that the alarm is not tripped and 1 shows that the alarm is tripped. In RabbitMQ this is seen as `mem_alarm`. +
+ `node.totalMemoryUsedInBytes` + + Memory used in bytes. In RabbitMQ this is seen as `mem_used`. +
+ `node.partitionsSeen` + + Number of network partitions seen per node. In RabbitMQ this is seen as `partitions`. +
+ `node.processesTotal` + + Erlang process limit. In RabbitMQ this is seen as `proc_total`. +
+ `node.processesUsed` + + Erlang processes used. In RabbitMQ this is seen as `proc_used`. +
+ `node.running` + + Node running (0 or 1). 0 shows that the node is not running and 1 shows that the node is running. In RabbitMQ this is seen as `running`. +
+ +### RabbitMQ exchange sample event [#exchangesample] + +These attributes are attached to the `RabbitmqExchangeSample` event type: + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ Name + + Description +
+ `exchange.bindings` + + Number of bindings for a specific exchange. +
+ `exchange.messagesPublishedPerChannel` + + Count of messages published from a channel into this exchange. In RabbitMQ this is seen as `message_stats.publish_in`. +
+ `exchange.messagesPublishedPerChannelPerSecond` + + Rate of messages published from a channel into this exchange per sec. In RabbitMQ this is seen as `message_stats.publish_in_details.rate`. +
+ `exchange.messagesPublishedQueue` + + Count of messages published from this exchange into a queue. In RabbitMQ this is seen as `message_stats.publish_out`. +
+ `exchange.messagesPublishedQueuePerSecond` + + Rate of messages published from this exchange into a queue per second. In RabbitMQ this is seen as `message_stats.publish_out_details.rate`. +
+ +### RabbitMQ queue sample event [#queuesample] + +These attributes are attached to the `RabbitmqQueueSample` event type: + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ Name + + Description +
+ `queue.bindings` + + Number of bindings for a specific queue. +
+ `queue.countActiveConsumersReceiveMessages` + + Number of active consumers that can immediately receive any messages sent to the queue. In RabbitMQ this is seen as `active_consumers`. +
+ `queue.consumers` + + Number of consumers per queue. In RabbitMQ this is seen as consumers. +
+ `queue.consumerMessageUtilizationPerSecond` + + The ratio of time that a queue's consumers can take new messages (utilization per second). In RabbitMQ this is seen as `consumer_utilisation`. + + This metric is only available on RabbitMQ version 3.3 or higher. +
+ `queue.erlangBytesConsumedInBytes` + + Bytes consumed by the Erlang process associated with the queue. In RabbitMQ this is seen as `memory`. +
+ `queue.messagesReadyDeliveryClients` + + Count of messages ready to be delivered to clients. In RabbitMQ this is seen as `message_stats.messages_ready`. +
+ `queue.messagesReadyDeliveryClientsPerSecond` + + Rate of messages ready to be delivered to clients per second. In RabbitMQ this is seen as `message_stats.messages_ready_details.rate`. +
+ `queue.messagesReadyUnacknowledged` + + Count of messages per queue delivered to clients but not yet acknowledged. In RabbitMQ this is seen as `message_stats.deliver_no_ack`. +
+ `queue.messagesReadyUnacknowledgedPerSecond` + + Rate of messages per queue delivered to clients but not yet acknowledged per second. In RabbitMQ this is seen as `message_stats`.deliver_no_ack_details.rate. +
+ `queue.messagesAcknowledged` + + Count of messages delivered to clients and acknowledged per queue. In RabbitMQ this is seen as `message_stats.ack`. +
+ `queue.messagesAcknowledgedPerSecond` + + Rate of messages delivered to clients and acknowledged per second per queue. In RabbitMQ this is seen as `message_stats.ack_details.rate`. +
+ `queue.messagesDeliveredAckMode` + + Count of messages delivered in acknowledgment mode to consumers per queue. In RabbitMQ this is seen as `message_stats.deliver`. +
+ `queue.messagesDeliveredAckModePerSecond` + + Rate of messages delivered in acknowledgment mode to consumers per queue per second. In RabbitMQ this is seen as `message_stats`.deliver_details.rate. +
+ `queue.messagesPublished` + + Count of messages published per queue. In RabbitMQ this is seen as `message_stats.publish`. +
+ `queue.messagesPublishedPerSecond` + + Rate of messages published per second per queue. In RabbitMQ this is seen as `message_stats.publish_details.rate`. +
+ `queue.messagesRedeliverGet` + + Count of subset of messages in acknowledgment mode which had the redelivered flag set per queue. In RabbitMQ this is seen as `message_stats.redeliver`. +
+ `queue.messagesRedeliverGetPerSecond` + + Rate of subset of messages in acknowledgment mode which had the redelivered flag set per queue per second. In RabbitMQ this is seen as `message_stats.redeliver_details.rate`. +
+ `queue.sumMessagesDelivered` + + Sum of messages delivered in acknowledgment mode to consumers, in no-acknowledgment mode to consumers, in acknowledgment mode in response to basic.get, and in no-acknowledgment mode in response to basic.get. per queue. In RabbitMQ this is seen as `message_stats.deliver_get`. +
+ `queue.sumMessagesDeliveredPerSecond` + + Rate per second of the sum of messages delivered in acknowledgment mode to consumers, in no-acknowledgment mode to consumers, in acknowledgment mode in response to basic.get, and in no-acknowledgment mode in response to basic.get per queue. In RabbitMQ this is seen as `message_stats.deliver_get_details.rate`. +
+ `queue.totalMessages` + + Count of the total messages in the queue. In RabbitMQ this is seen as `messages`. +
+ `queue.totalMessagesPerSecond` + + Rate of total messages in queue. In RabbitMQ this is seen as `messages_details.rate`. +
+ +## System metadata + +Other metadata includes: + + + + + + + + + + + + + + + + + + + + + + + +
+ Name + + Description +
+ `version.rabbitmq` + + The version of the RabbitMQ server. Example: 3.6.7. +
+ `version.management` + + The version of the RabbitMQ management plugin. For example: 3.6.7. +
+ +## Inventory data [#inventory] + +The integration captures the configuration parameters of RabbitMQ in the `/etc/rabbitmq/rabbitmq.conf` file. Inventory data is only captured in [RabbitMQ version 3.7](http://www.rabbitmq.com/blog/2018/02/05/whats-new-in-rabbitmq-3-7/) or higher; the [inventory data](/docs/infrastructure/integrations-getting-started/getting-started/understand-integration-data-data-types#inventory-data) will appear on the [**Inventory** page](/docs/infrastructure/new-relic-infrastructure/infrastructure-ui-pages/infrastructure-inventory-page-search-your-entire-infrastructure) in the infrastructure UI, under the `config/rabbitmq` source. + + + Be aware that any sensitive information that you put into the `rabbit.conf` file will appear on the **Inventory** page in the infrastructure UI. This includes items such as the following from AWS: + + ``` + cluster_formation.aws.secret_key, + cluster_formation.aws.access_key_id + ``` + + +## Troubleshooting [#troubleshoot] + +Troubleshooting tips: + + + Error getting local node name: exec: "rabbitmqctl": executable file not found in $PATH} + > + If you receive this error, it means that the RabbitMQ command line tool, [rabbitmqctl](https://www.rabbitmq.com/rabbitmqctl.8.html), is not in the PATH of the root user. To correct this issue, execute the following command: + + ``` + find -name "rabbitmqctl" + export PATH="$PATH: + ``` + + + +## Check the source code [#source-code] + +This integration is open source software. That means you can [browse its source code](https://github.com/newrelic/nri-rabbitmq) and send improvements, or create your own fork and build it. \ No newline at end of file diff --git a/src/install/rabbitmq/windows/install-windows.mdx b/src/install/rabbitmq/windows/install-windows.mdx new file mode 100644 index 00000000000..b5100c80c6d --- /dev/null +++ b/src/install/rabbitmq/windows/install-windows.mdx @@ -0,0 +1,33 @@ +--- +componentType: default +headingText: Install the RabbitMQ monitoring integration +--- + + 1. Download the `nri-rabbitmq` [.MSI installer image](https://download.newrelic.com/infrastructure_agent/windows/integrations/nri-rabbitmq/nri-rabbitmq-amd64.msi) + 2. To install from the Windows command prompt, run: + + ```shell + msiexec.exe /qn /i PATH\TO\nri-rabbitmq-amd64.msi + ``` + 3. In the Integrations directory, `C:\Program Files\New Relic\newrelic-infra\integrations.d\`, create a copy of the sample configuration file by running: + + ```shell + cp rabbitmq-config.yml.sample rabbitmq-config.yml + ``` + 4. Edit the `rabbitmq-config.yml` configuration file using the [configuration settings](#config). + 5. To enable automatic Rabbitmq error log parsing and forwarding, copy (or rename) the `rabbitmq-log-win.yml.example` file to `rabbitmq-log-win.yml`. + + **Command Prompt Example:** + + ```shell + rename "C:\Program Files\New Relic\newrelic-infra\logging.d\rabbitmq-log-win.yml.example" rabbitmq-log-win.yml + ``` + + **Powershell Example:** + + ```shell + Rename-Item -Path "C:\Program Files\New Relic\newrelic-infra\logging.d\rabbitmq-log-win.yml.example" -NewName "rabbitmq-log-win.yml" + ``` + +You can find all the config options at the bottom of this doc along with more complex config examples. + From 8d396548ab4c5c91af7e3a5f3d3d38fa5c56e7f2 Mon Sep 17 00:00:00 2001 From: Sadaf Arshad Date: Mon, 4 Mar 2024 11:27:24 -0800 Subject: [PATCH 015/124] add: Env var links for Minion and SJM --- .../verified-script-execution-private-locations.mdx | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/src/content/docs/synthetics/synthetic-monitoring/private-locations/verified-script-execution-private-locations.mdx b/src/content/docs/synthetics/synthetic-monitoring/private-locations/verified-script-execution-private-locations.mdx index 71e47b9ae77..065b1071f6e 100644 --- a/src/content/docs/synthetics/synthetic-monitoring/private-locations/verified-script-execution-private-locations.mdx +++ b/src/content/docs/synthetics/synthetic-monitoring/private-locations/verified-script-execution-private-locations.mdx @@ -23,12 +23,12 @@ Be sure to safeguard your private minion's passphrase. No other users on your ac This restriction includes New Relic support personnel. Because our collector never stores your passphrase, our support team cannot recover or reset your passphrase for you. If you forget your passphrase, you will need to change it in the [minion **Overview** page](/docs/synthetics/new-relic-synthetics/private-locations/install-configure-private-minions#configure), and then update each monitor assigned to that private location. -## Enable verified script execution [#cpm] +## Enable verified script execution [#cpm-sjm] Do the following to enable verified script execution for containerized private minions. Be sure to record your passphrase in a secure place. 1. Go to **[one.newrelic.com > Synthetic monitoring > Private locations](https://one.newrelic.com/synthetics-nerdlets/private-location-list)** > (select a private location). Select the private location's ellipses icon, and click **Edit**. Enable verified script execution, and then save. -2. Set the passphrase in your Docker or Kubernetes environment: +2. Set the passphrase in your Docker or Kubernetes environment for either the [containerized private minion](https://docs.newrelic.com/docs/synthetics/synthetic-monitoring/private-locations/containerized-private-minion-cpm-configuration/#environment-variables) or [synthetics job manager](https://docs.newrelic.com/docs/synthetics/synthetic-monitoring/private-locations/job-manager-configuration/#environment-variables): * **Docker:** @@ -82,7 +82,7 @@ Do the following to enable verified script execution for containerized private m To change your passphrase, do the following. Be sure to record your passphrase in a secure place. -1. Update the passphrase in your Docker or Kubernetes environment: +1. Update the passphrase in your Docker or Kubernetes environment for either the [containerized private minion](https://docs.newrelic.com/docs/synthetics/synthetic-monitoring/private-locations/containerized-private-minion-cpm-configuration/#environment-variables) or [synthetics job manager](https://docs.newrelic.com/docs/synthetics/synthetic-monitoring/private-locations/job-manager-configuration/#environment-variables): * **Docker:** From dd64495ba355fe4a99b2734d714403b93ead0509 Mon Sep 17 00:00:00 2001 From: vkasanneni-nr <51135822+vkasanneni-nr@users.noreply.github.com> Date: Mon, 4 Mar 2024 14:55:57 -0700 Subject: [PATCH 016/124] chore: updating modules list to reflect the new modules added --- .../using-monitors/manage-monitor-runtimes.mdx | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/src/content/docs/synthetics/synthetic-monitoring/using-monitors/manage-monitor-runtimes.mdx b/src/content/docs/synthetics/synthetic-monitoring/using-monitors/manage-monitor-runtimes.mdx index 261761190f9..175cd8556a1 100644 --- a/src/content/docs/synthetics/synthetic-monitoring/using-monitors/manage-monitor-runtimes.mdx +++ b/src/content/docs/synthetics/synthetic-monitoring/using-monitors/manage-monitor-runtimes.mdx @@ -281,6 +281,7 @@ The API runtime is used for these monitor types: * **Node:** 16.10.0 * **Proxy settings:** Yes * **Supported third-party modules:** + * [async](https://www.npmjs.com/package/async) 3.2.5 * [async-retry](https://www.npmjs.com/package/async-retry) 1.3.3 * [atob](https://www.npmjs.com/package/atob) 2.1.2 * [aws-sdk](https://www.npmjs.com/package/aws-sdk/v/2.1007.0) 2.1007.0 @@ -290,6 +291,7 @@ The API runtime is used for these monitor types: * [colors](https://www.npmjs.com/package/colors) 1.4.0 * [consoleplusplus](https://www.npmjs.com/package/consoleplusplus) 1.4.4 * [crypto-js](https://code.google.com/p/crypto-js/) 4.1.1 + * [form-data](https://www.npmjs.com/package/form-data/v/4.0.0) 4.0.0 * [fs-extra](https://www.npmjs.com/package/fs-extra) 10.0.0 * [google-auth-library](https://www.npmjs.com/package/google-auth-library) 8.7.0 * [got](https://www.npmjs.com/package/got) 11.8.6 @@ -348,6 +350,7 @@ The browser runtime is used for these monitor types: * **Selenium WebDriver**: 4.1.0 (exposed via `$selenium` and `$webDriver` with backwards compatible Selenium WebDriver 3.6 syntax exposed via `$browser` and `$driver`) * **Proxy settings:** Yes * **Supported third-party modules:** + * [async](https://www.npmjs.com/package/async) 3.2.5 * [async-retry](https://www.npmjs.com/package/async-retry) 1.3.3 * [atob](https://www.npmjs.com/package/atob) 2.1.2 * [aws-sdk](https://www.npmjs.com/package/aws-sdk/v/2.1007.0) 2.1007.0 @@ -357,6 +360,7 @@ The browser runtime is used for these monitor types: * [colors](https://www.npmjs.com/package/colors) 1.4.0 * [consoleplusplus](https://www.npmjs.com/package/consoleplusplus) 1.4.4 * [crypto-js](https://code.google.com/p/crypto-js/) 4.1.1 + * [form-data](https://www.npmjs.com/package/form-data/v/4.0.0) 4.0.0 * [fs-extra](https://www.npmjs.com/package/fs-extra) 10.0.0 * [got](https://www.npmjs.com/package/got) 11.8.5 * [joi](https://github.com/hapijs/joi) 17.4.2 From 9a27329bcb9dbbf3c38479f78ea26ce4efd731fe Mon Sep 17 00:00:00 2001 From: nbaenam Date: Tue, 5 Mar 2024 15:34:21 +0100 Subject: [PATCH 017/124] feat(OHI jmx): Added branching doc structure --- ...frastructure_screenshot-jmx-dashboard.webp | Bin 0 -> 174606 bytes src/install/config/jmx.yaml | 62 + src/install/jmx/default-requirements.mdx | 11 + src/install/jmx/ecs/install-ecs.mdx | 6 + src/install/jmx/ecs/requirements-ecs.mdx | 11 + src/install/jmx/find-data.mdx | 29 + src/install/jmx/guided.mdx | 9 + src/install/jmx/install-infra.mdx | 6 + src/install/jmx/intro.mdx | 38 + src/install/jmx/kubernetes/install-k8s.mdx | 6 + .../jmx/kubernetes/requirements-k8s.mdx | 25 + src/install/jmx/linux/install-linux.mdx | 46 + src/install/jmx/whatsNext.mdx | 1107 +++++++++++++++++ src/install/jmx/windows/install-windows.mdx | 37 + 14 files changed, 1393 insertions(+) create mode 100644 src/images/infrastructure_screenshot-jmx-dashboard.webp create mode 100644 src/install/config/jmx.yaml create mode 100644 src/install/jmx/default-requirements.mdx create mode 100644 src/install/jmx/ecs/install-ecs.mdx create mode 100644 src/install/jmx/ecs/requirements-ecs.mdx create mode 100644 src/install/jmx/find-data.mdx create mode 100644 src/install/jmx/guided.mdx create mode 100644 src/install/jmx/install-infra.mdx create mode 100644 src/install/jmx/intro.mdx create mode 100644 src/install/jmx/kubernetes/install-k8s.mdx create mode 100644 src/install/jmx/kubernetes/requirements-k8s.mdx create mode 100644 src/install/jmx/linux/install-linux.mdx create mode 100644 src/install/jmx/whatsNext.mdx create mode 100644 src/install/jmx/windows/install-windows.mdx diff --git a/src/images/infrastructure_screenshot-jmx-dashboard.webp b/src/images/infrastructure_screenshot-jmx-dashboard.webp new file mode 100644 index 0000000000000000000000000000000000000000..80b332b93c00fccc549ef0fe67f34069aba4c60b GIT binary patch literal 174606 zcmeGE1yEht)&&aV7BmD25Zv7%xVyW%y9IX*?hsspdvJGm2_D>oyL0|@(z)Gf`EK{U zeg9Xl>Q${ewa?j`bJ%OIHRhaSjJ4!Mg@hoAK!B75`DB!2SaI(PL4d~lq0@lL-Qj8> zfPjFAa+{7n^I-F!GkGw?YUQ@&+yOn2Jsdyc7(ix1=HCIAKt4#|dnWa81403-E$pN2 zgZqz0g8+gjk~{A6wu*G#^W$o6mz%98gnPhsWIDX=G07TN4?ycNAMo;e=!yG2BkGmC z2jmmZEg%YKl?&#U`+oMudbaIA`?9swYYO0VGj`7XApO97tF;QqTbTj0c)36AJXQhF zmdYQzYM;*AT)g%GE&$0BwA;uF?Sqw1txtfBCn3NvzzZOJJar^}qkW@&z&-BOd<*o% z^3b=la+LoBcq+fcfd+hP+Xn0a5>JR8x^Az>^6w)D0QWfifC0~CPXOTf(c)?ADfY4M zw(S$n3ZNaZ2^eWTZu4y0@dWakzXZA@eFASe|J^R|| zo{AsOAFeOUkF__vTHS(f^83An0B}#ncL>)wC)&$TjNDNVMvtLS_j_m`z1{*17utAy4N=2s_$MfD{1LJ@1p-gVUXK zg?0~jD1hf__KE*4=sNO@d!u!{wd!H)R(h5O)1&W^`wroJ<%1VcYso|YUH&!A$;wPy zy;miG;NbB7_*Q!caMFhLl=y`3Xncz>i*O3iY3l(*0@$Bco-psMueh&pwzwVuf?xh6 zr?@XYjdyqY82fa+igpUvYMb<`0Yp5FJkCDl-_5^ZT*K@^b*4 z7yZ-WllX)3?ePiVlh-LA^AYTc;KBHg=1Tk2YmvL!>l5JhRn@iIJphn@{-x)aW{+oA z$4(HoR!Y2TGupT>#somRK^!L{lQ>K(w>K_P5vW|<2R0-Le28QY@TG&f;>r6Q4N9Wkvg z$M1ab+HII*Vt{gEQrI4Zu~w;u`??%^)~e84Zm;+GY;GG012yjR^c-tjwvvtU;q;D+ z*Gzr$7%XeiQQ>SR!X0TVk;a6*pZw;44>ZWNHiW`Q6u2KzCsA+RtxrYLE{&87yYFUP z2FXr{{a1%xS4eq*KMQ2bW5ZBn*9L1R=>gog@G|HT_NiM&Q2;B_qNW?F_1ite^%uUl zSFv$It=J)%M6l*Nz6 zm)(8}{t<;BWJDoDEhC2vuFKu%qn*=xua_Lr$hxjuyU2L(@o%w*`RJ9oM4u;rxUcB) zSa5j9sR(_z>e}Lr9;JMGHp~>PS?J8+R*-tU!3Nd@UL1@2Vgl;5mK5|k zYt5L^#}A*k>6_G{W6x_#d-nI*_SYa4uo?LjQ)BqCUQZ25#cJ0VMX@NrZ@F1Nh!D_B ztn}2s>X2TluZZQ%R#IKT+`cCOzhqzOl3J z(4O=!PVw?N%*Pv7L?zaD)C^0v)%PMYem937N2zh~U?E90!<_c?%1BN*?{QC>e}&N< zauw$dY^s+z7K1bDkfhX*s-|@L%s%qT%|_EnzOM)MMNBFM+*yb}*o`q$MoIVpbxz5% zPxun1)n8ihlg-&|{%|_u0`WiAwlU{y3{LYV=w=+o6R*lN6F%ME@WF~2W5<}44OzKA z;6V^pMT#;h8`g1oBKkd7?aN6nu3XIEhT;wWGQlJj=Pk!F{BgSzZ1;$Z4r+JCIuZ56 zSubK09o6l3)}ZK!Qe8!hny4DiPyEqiMmY(m|K<;f=x~Yg8zDDTwF|tPGI=*W>O;cu zfBtd||8~PxlLKhx1U-K@!yuSFP@yFG-6-YA+(G(%0wPVx`tVZZ?1?`z;(K7j z|KSY;ErO+~SB0MtR-F}e!=AUVhKedfB%BvJ@)SBbk0PY@V;n!OimTX<45dB}?%6#b z(zIWj* zhkqNHQgxm&c=L&XLt7Ct64VUFh@rdkN!grT$_i3qt6g*#9$&8j7b5T0EwGVZsVT9O zc^E_WF!!CA-o-rA>q@p`Ae9zIU8k%-`ZnH)%mXzh>VnjefSABk{9ISq?9wrI%E?5p zsL%2)2D%-jgmrCgTtbgC;uwV2s`olUK>C!^=PGoF$DsrEEhxn-B2!VcV)!}K?km~v zA*LKro+Qzf%nfhJkGwVOfU*oZ`5sT1kQ5V^N7AX@b(K41AUt7o>oVLSJlg^4zk7=d zBH{k!zy3?{ic3S3q*o&l(Ui6de1Cz1pyv(^?O^v>1at1$*= zBsj0X&S_H=bKNUXz$&_b(w^h+U>&GPT(y-}C6T^|eB!2`Hh8fL*^~XLL!nv5qf zzlb{mt2rt3ZwFVW3O*U1R|sQ2mxOP73(F(SJ3?iy+6I4yhXW)hCpmG8P+L2g(R@d zTRLHedKov55WxhjWEA>DbYW_lbOf;Mg@olyF=l7VPp%L1jh9&p7RoVJNmzY7GUt&QY zy?2c>LpSPODsspiZuHNIpSHSsLqgerAnxfU z9qUKxoQ=N4KvQFg+9iCC&A|aAa59gYe*}D-uVm8e{YFrShuk)E)#twKYaZ4 zym8s~abG(m5nb4L{Kj2&`I%FztFvy465^t<@In$6?+2INFMpH;6)HcN+9~7B91wR_ z^ie>n1G{J^*#3CW{7n(_CEGAcVEtrJy*`iAYa0*mkq#s{HYjX|TJ;QFcNq)Jxhz_uCLd!QchHrlv^PRp~%jrM?=wYJ9n*(D!cF&6y7rf<)fEIMBTM9 znG-QaqV?3PfS=zfl3a%tP7-vvJC zM+B+$UrnziMRMWvNiZMkr|l^QZT(;(vh2Prwce=`on96o`tki#ZalMsOlZU-p|$qu zD{Qu7HHfro{cY)Qk>@YJzKC*Ron`C(ME4G>(U8}R81yP80XQ#Zw_S$N#FgI=QOdjW zEZy{&gsBa=zp=t-06`;nM?_{7BvV@>;Ur!R_G) zBny-+&TQy?F1RP0pklYdy4vSD8ivD%9Piglu)_4Yzhjo;#jKaDf71g?lvvfv=bE%i z_8xR}77`8aP^nZNi{$=sAHkG1Z;EfO2g;DZ@Hgjio`I~Ia@$h-F2iGmh?V>o3DTcu zV0seevW{xf)EV;`eCC-CcM^2>il?fEx(gSn)~$TDjBybB9rUHx5JJHYFR!5M)QHm; zJFn4?yzN`y{gT4P3%UAQ$<9gAeFRNAf(tr6fl)HO#O%}<;n3<1u0S#gW$Id07I2Wo zICm1vkC#f%=EU=EAhHuFx3#=9!NMvp7pMAgjlHS!c2+MPHzuUFE5KFZbh_h#?#&{d z-z}ky%1*`Vz}is(6!f6>F?371AnJ>P1pBvhtw9E6{6*-8M)?`hM2CU11!>who|ltK zEG}=YThOg+n0Z{CypRtxiwZ5ddY1t7N&~MC-lPo6b;Cdn;o}ibnde)}^`oAY7-)FD zC3+ns}e!d;phQ%X!f*DB(6e|jJ z*>jK6@wrAmKi*tv=Pakn$+R(qMpboWfYRI?P^%`k9fJuf-uW!tu3rh2Y@KcfKXFt= zKn}d-#4DI-bX0(x1{-Ml66sc$LH$fOmzJ9_MX!VBj&Afdvm^V8RHM5$GYPP)g4P?Q@@|3)|um7jPjcSorwrOt!RD1pFm2GGsQQ z8aUP)ABF&ae(G-avNyzc+YN6$vT2C0VN6qX%NY8dK4eQdBZyJFOmKC`6!$5WBK09n zd8?P8z(324ToSStvH;)^c1fs%(G<3yCRQ|a2#svLP=C(weyM99<0x#&V>$fl7|)m& zWDnWcKzdZkkA<>pI3A4|hac|?wlFX3Vr8-~$asu9NE2}1yb^btG(mByz!c*8TF-nb zX?|&?c~|RV0EMoj%3z@?0317|?CSJED2xG&zw?&q%-5W*EU^9MkdI#Jex7X-=v+o2 zh*+uQ@;mYCd%w&63KsRvaH8Z(xD$-riAk?=fdaj2bm$_TqXX_FFf7kciilLw_LuTE zPW9oC+0N3tYzO_KX;R606c6v|OcRop6zKe9vqC?AdOe?xSu51Thp1|aRZQ0w&bp(>0G>c zurb7dqONh&gK;ym3CrV4WXTGJ$d}^h1!@tA2GKe}>?b7jCu1}c4bLaNbI^{S0zjgB zGjB%+oDvLJn~e(Q%#vQMahZ7bN}v``-&?U;7y->9xV=7iLu0*ixHd>R20L}VwSh@C zE2wgciQ6?2dIVaa`)y7AYCq2nJ_MYtjRqc^20o(b-r?fiNAV|%6Z+yOv4hr_nNSKT zfvx-f+UCo4!~lEYB4(ECQZf9FKVo~-T>F49;Ra1cDYrVy7u^Vx0Rkx2@zb6U8oPkew~GiPc9vD5f!q@RE5Z^Rok=j_dJKVHYS^!%`ZqAaNsy#GPLGIR>AOjJU-|#I8^VZJ~5Y#B6Ecc zE&0pWe5&lcpbZK34@ zUCJ5q*4xEr+>mu0Nj<=Hy<_Rk2!oBN<+zJ<9E;T18ZJ?Xa=m)-Lv4AqR=c9D%`t|- zpRNczkZL7wfV@5gacHU7McynWW~-Qjo@LoW)(b+aFF%9SysetowbUwLk`8md)ljxG zeP=ht_BslLy`Hwz>l2t)G*CNu)SLC0dp3&@d{V%naz?PZ-k91V{>OZxUf8z#gOWz* zYAjR~WxZP030N){3px{`7PyzuP9;$Qh2TZ*m>ckQv9}1eu@iqD1OHnVf-@}>%tBng zIQ~mL{)KX3a$p9UZ(-ZpAt78QdX*ax!-|SZ&*&)w9LY!MIO%B?mPA|6r!QS;iU)o@ z-;T!yic5ka*S(7#zdtBNbXBVrZd{$wC`TxI>}Rwn{2FM52s=`B(Kb*3vD*}{_M&61 zrsqX%U=nUvdW44buLR&+aL}j+kmb=|6i`ZQ%1_=x$^^Qvqp!1IwU7KyM)znn7O{ z%yc)qw#!m)`tog^Qj+lM&wB@MVvxp&80W*}2VWnF*nYng>EB*27JRC#uR`FqM2)feKK7&F240eNlP9uUbs zT16gD8PzxbWlV&cJYLQ~BZ^U1Ae={~4MdXpQmxr%56S&h$1p#QAdfV@$P?ZtfRFy3 z><#$LW+1jPQ)pBuVSR@TR!uk%UR!$?t8Qtg^B7h+R@d8ZQn6O!H`>o;`)WnZ)zR{7 zTh%TAx!s(Y3_f}~R`AraL<$TqAZxLQU#1POuDqLvx(l$J40pAPQ6 zFCo>IlYktNWfokTda_kGQo|Q;$Dw8j7bjhsxb4b0XeyP6iG`6}1_o}kE<0vtI7Okl zr-pao?$Ky!&EME`2P#)+Pro7Aht>8jUjV*P>9w}gmUQj<%@DRB+dLu*)gE^Youpjjcjk(#wF4lerGlyI$tf)z_ zC|UUJKwehz*PMPCJhhRhygPqyjlKI7x5GffVPK zMVZY3F!C+&_;b~#YW<(t817LqqeEX)i}e-bNu5a3>&CfMqivFRTR%ajQbHlQc`Ay}}Y z>-o9Or+iR2NFrACt%o@H&PxVbV`Hp@DaTmQgXG?p&c{BKn}ZjaE>OBVG)=Em!wU}* zNgmG#PSpf};ElmWkt&Nr)IJ@L%nvk*1S*?UEA=Q!6uNLnz9y$XI%Bj8RawX1@(b=7 zZk8jDf4cO53?e(KBI$KK*V`kC=8MNSS->!Kv+~)@FC;Qi zD#veWdLOJ&7oubuH8UfvVkpb9p9%bEBk9faI=^+71w#xwTrAUS@-cxRxWRUB%%b*KEf0E=p-Je3B95c!S$du1R zaox_ik)!Hz;4kYuwYvaMyeH#fJ@`0Uibt2Yil&R3vyd9GVeVb=xUKRD0L;_D+xfyw zoi80azAc((NLGXgi1MLY4Gl$ZbAgE{6~`gnY2j$Rxx@F|Yi>Vvct=8%sQclKJ>brFD_zc8=4>rR2oy#Le~M~LontA zskuU<@)fh#8%s|Zxe(7LGn~Pj2lIfJd?(lb5&}+gvSmds+EZDtLy3u_P@B$W$rG3i z@IX}ID3rHP-(JUQQe};+N5~x%Qhk#lR7>q>5ulNzO=2MeSaI0QLwhrb-NWNd&IWH<*%rhV&)-P!99e1k`4)Yj&0 z7Y5{?xbZ*JE(rKih;w+$y1ya8S9FFk-%DPKDYnBMdZz{|V9TTLsyIS9h$JbK8%CVC z-UVmh*mRI->!$oE1K*=`Uka*}In6f%#yr8iCERg2e-Fd5py@p64+ymS@H39JY&i`2j-~eX zMuq=%H-=MkyA6o$U5b(MM43LwV*F^!%}7mazdxQf;0S9fZj8tkr0cg}t1p?=m9Ox9 z>=NVIa{LwozNoy(70_{wQB}O7_-K~T349jm3BPulAfc+^KKZ(#!0QzSvPscr?R=uX zeL_jTF%rBY8#dAt_mm=Y6pqtFo4s<-QT*}}u^!>_=Z|Pk_$1vc)wt0I48!YLh9_D& zEd)BZvK7Ob4tKq;-nTYynowlr5R^p~o@=y@As;2i7V_EH@EN|_%>p#G?||l)fF@*n ziv_a-aklbzJp-ONsw=tL+3bS^{ba-+3KYniyA)h6^U3?2sJ1)Hs_H9*k0FJJ!*FTr zvRF(B+vlJKq}A^!$DTnjZwT3R^y9W`=bd+sF0x$n00v~{cvj#FmY4MI#7nzd3k)(5 zX_BAat-H&K9gX2Oe$G-VY#*jEr?&*1@$34ns1j>%+WR`gM6nVo%eYGoyN2%2%J`b9 z8^Q+b)=hPk4<0uRV4UHK>VedG*>9thYHf-P}hjG07W4zNLJaq>a5+9_Eug?6HlvU^+|uR z1yoCz?dsQp5IYpx5kbDbn93a%wSMhqG81!&4z*@SIXuASln`)x!%R311l-iE>lzmW z|F%O=U(tlc!QsttiNdYa!joUt!2E3IU=3rgbycMW)EXK=T4-h#kBf()(<;Zkx80O9 zMFl@ zr*NM{kd?M|FFYE}u6&a^kgZGWlz>MaR)2d;8wM zJA3r2>{F>Z9JhFxcTY5Es=g$ zAatr1KuS5V$>^(&Ic1U)a;2CxZ`s`lt*z&UA**}S)r81!;54lLh;f$l_(58Ff|eu^ zH`oEM0Vy@#NUy**K!=wJ#Nd3I#f0~j+W4uwW5Do7@f*<9+TsJfFPbZT`4zz&Z+d4$ zbv@^7=-(Gwe-kTyr{vN!q`IIKePGOIu13~NTu@+W{x+N(Q~!BUnq7?cn1{Qo0b_b->U2mlN%LCT+Htnt*J zX7ktfkGTlQa7TYK4t!~|lLey=qX9pf0jf(ptKT=1Quxt1L&{QBO%^VAM*MwWfsp`) zm##9;cR}bk)a(y$$44fs7|M6)@6e^*^8Os2VyGxng5lcnT&;nVuNceKJH%8eyT19G zDsPV@*+x8uHlDdfpgCW7giC9eCgr|~lcm=8p(zpn4kolX|{Mx8q2Z+SF#!!~L02<-oP2Klb47CgC62DackbDQJJ6 zPXB@ZMH8`dGVJF8F(#-CgGLhgqf6tUQg62H8}NT0Ex&|}zx9dPZa_ku&gxe?nUw!x zP6anEJnymWUIi;b{!EKMxumtj%#x5L=*CdCccW}2_D&S$MR!kBju znO_27-ULIRl9G14cp#&wfWB(?^)SY*!nv~kUADYWPwH-HU8hdI#X6lO-C9{HAzt@< z3p?60c~X}-(C5D5QrsYSC&|^twh#SY@GN_wOLDfryIr72YdD`pf_ft_pJf4_^w5A` z^=Z6pR_BRBlJXW&TY5stHm@VsvUvodHPyoLqy23`|C8_H-!=S^b5P=c!TdV)if?Qt zJVKB0d#X2(q|~3pH9dbinY2-iI@2{$gej$LnSsLv=*srhy$%>(e&aT)WaWb*X}7X) zkk`&I4D!sI&aAmWNGlQqRtw0 zE3A}3O!3luogoC6Vr!P-v4^Jv7LLS1zZ;ytuUmijiAa@u`#|)!FiD1APHR^PX4WxW z{hIW}VGhwBNwR+`q5LpUe?6C{C!SG}c6=j+)1VvWF=X1g+YA~V0Pyu6V4DbpwiiFo zQ?LudQP|Kds)k25PPVDgO^0ctm4TiEvK)JBCuk@@;yzAQG1C;e6;jlA!l1F4St!x# zS*0V$bw0kj#va_bibZ@!yc3tsWUKIx_@)+}M#F1*zo`q8lzqB+iK6JS80I!d=A2xH zP`Q4;)v*8c-hbT>zdg?4OwKgp{l=ABU1R|pVJ4R79E-4caOjO5fAMK9>l`YEop$q` zZNBeujwC}3{*0?gYf9Iko?vK_z$YwWzxbIzScu|U*JC7viiESVj@4;Osp%QTH2-PC z!J+5GmS&Wl`#Z5npcWo&x{9VyF^8Qi{E)^4MWJmMSN6g67m&&mLj;r|;L#A9&tRv@ z>21hF0NSi@_ zvjW0o(rc$tWFUF+wC0)La%MIaPAMAHd9C&UaNiN6-K);M=rB1xL|kf@ai3z)X9jV+ z(1<)pimfFiZi^{F70x}PLPNBaaHvg6#53f`+1#W{*5mfFg%gwmxlwYf|smPiy^CC5; zTVnTM^eg1yd;O&-^MA$7ucpjjhoSM59gu!I)s*a`>HA;-mpnH!-MaQ5=laa-2%eg- zu++7!a_Q<4^Z?!xx;y#i9Gfxn_%41J;zR7aAE~~-=~=FG-(A%B8Oia7-M>>&8Vb`S z?KuiytD3|9X96^}_oafM>F?KPxSV4t8*k-^O8ckjqU{pqmDO3?s56^_GqdUk(o)1n zfV;d89KxXQ_axa-`AyX3l*JN18{Vwrs`WCizmA_jPDZ`(z}#T{pj!ovnTy~BLi{^= z?C-$yn8>!+%jK^%3o*Nt>P0$hG&RXCD415|)ArlT$U$8(*64r`blI;mXg-hJw`o{| z0;bgT8+*;a9koAP@FP|?$&*shc`@nT-UT5THq6eFyJ}ifyfpmk9#=;BXDsA@`k40U z;&P{bV1I2jC3Vn>;maw141)Ok`o*`A;6PHP04MUz7+|@a>BHJ}c=5J+N-PPZV)Bt} zhdoXtfkbsSp%}d@u~d4Dc1iTM`>r`5aB#%n)NN*4aV@#b9OVo8*BwZ!5UVMSc_vni z{K_0VvL0g=ui|IY_n-QA*`;6dbclbmE?6#CqQgnQ-^lipmKu9BPRx|gi-d>p;q_o!IUN z*$f(a!1^~F5kCxzsUKq1J6RdO0>JvsHzRRq}&Uqxl`VQ&;Bt&-!}e)zEq{#N4iV}DIAeG=()sv0BvsgTO& zk>}GMdf`qz`k85R(#sV={qvhZKt-ELeJE*=<_OXPs($!LK88uWv7nv4rZr0NjfexJ zjUN6b|C=*2!^+-aeRC5Gt=ZRs-g}k1xTah<>_)=>MM9DjM)(V_DLf~v?k(pCx_AE` zNRK-e)+1N9P%95m^^%^PJGjbJ@Gj-Ee@+c>uZTAPF|$*DSjQ4InPKD10Jz5pSSYpQ z7R#18LAlP2TnA}pl#eqmcA1Q+9!soWiYcLSHhnJIH$8l zYGD=Nh6%2VG9P{m;(o%`TbR|JISxGAY~@<4eS|Q76$sN^?hSBc!^Z7@Pu9&JUwu#N{VwK-t&Xnv{sgBtm7E0-TG zc$FWPsgwJyOszc@laO7unJwMke7&}*_F49Z)FT72c&3@c1c&T&Ab-t@RD?^`8g7KGO|SbTW@`{)na-c8eUk zF>8@&+)!wT?+0yuZpkW<^+;9I3e(GcXGs?9zvqpn$oC{U;rhaRwyEf*j|FG9C*jy)0V@wfW;RX%Gli{)n zQCYW43F}XlwoHi1?_|M0;4%I56S1sks{kn&Qo6IHEW(A8dxgbHM@6C^OrcMA5r69>*}m-Cu-||9>Id|N`x7s z;*15FFhVjpx$Su}@)p^ZAEvPtorG|1XnC%;I=7#SE1_5kzR=WiBT?v?f*$m$<}PK; zy;lSc6l&{Fva;Q&@s!V^r9Qrr*tr?l<`FX{y(q)kh&z1G@?Rtprl{8MUj9oGQu+Rb z`V99U{qMGDQd}c}(lk?adRztIm$XAJ@_PxP^N28wlu#&QDeO2!xSrmGDZ@K6d=Q#00fMh zgz{G1>Rxh*#(RCQsZ0Xi%5F$@ec{u~%$xp&i+iyyG4aJKm>Z9Lq?f>MC6{qpFzb@%8vrv@Q8N2QZp+2f?D{DKXQxs9 zjZ^1u{qnyq{(MWZa#(0)~J(x5xAM_21{O#9eI1Mnn zAi8)p07QY)dDnl0B>Qu`_(xVU=cu;o81%<}9fmKW)yP+ra%q+p9&?KfTB$H&@68V3 z5p`O>7-L=hMgMY;`dS(Nar_Dq=@h^?_?d6N@M>+MEkrn93tez8W$4OQe8jaX41IGhf5*u`f&PERfImC<)70{RFh@d`2Vu?!$C}XOo7^x*_$psO zzB*aoZOtF#lK)Au*@=Ywy_Whrr1=f-{K4DBR)=3Xi17D?yP+`d&`{J5iK^Dr@Tl@{ z*XrFMvp!3FmGIa=68?|J^4CxOX#(=U0E5+m!?ygwFhADz{JGV`fo8iTH{9;#s7gm> zxdk2Ij3Bk1uNmF{1c^}fA$=9Hc{9E5BBCdIy+3^gy?;nnWOCpe`j`C6XLI`V!<{7g zo;&~bV(^cy{E@@z`aWeuGQJbC|K08fKd=%c2;U>v|AaaH#}(cGuj~I9n7<;x52W?~ z*Y!W}?f>1;3i9oZRvbxCo3=ik(e||xk5|9c=K}+2ENNq`-|?N z_QaepS86 z2|dT1)%!LajdS3>!}mX^KrA$7CZ79Boua-AYF(wOV+^**SWzJnuKltuz3e6B_suwV zVbp%(C;QLd{*?0bC*-ARua<1!taN_dJ2EvB~s#Bz}BDb z=+hu%!l6@qHbc021Yy&AJ{zZFoz#E1WEcdZ;K$AnO>wI}HeIVTwk;PG0rkQ%`Q7#s z*2kIJD`c-5Jn)EVl-uuB=wgUNFx~FPFDs0HbhiAb`;YuvE7yuoJN$jmaV1x_QqGEER({f#d`<&*NFozOs;N;*hVvTqAF)04u=<> zXOemS#I-oF$)ZV7yrn-`Q=O4w#R{h zo*oM}As3uU(ackDu4@VI>`-$@wU7Dbd-34&S(KAfvl|KED+j*pH3tNQpiB#WuLpz& zimmlVQOw{$uoIIx!P7NrQIjTo}2^Fm?joQou#eP zmSP}0^bbf%DCn0_?+^L>wt(bfWgdg%C6^G(abC2Uy!xm|BO9)S6~qHWRFwiFg;mr( z>xy!KJLO)#Z?5HHI(y4miwMXeWz}N0G{YD5M6*k`O?OH?^BH>scn(S!X;NFidPFzi zkk=M|UW0muT|*wWn2a4{wfZVdTJ(h+SxK(rd(}az3C0V#xU1vbk1ay7o(zE5E}#r z4cYq<(JVYW{ypxze!NJB z?HTO?t(eg09khmix&1+($U>xBZ^Xt9*?J`9!V)&leY+2f5?N7U$l62|R9lk@McbLQrHxr-sf1Gr za+|v80H#xHG!vi8SjI4Zrdg~Mkl~Fea7gMy9Jdgk94FV)!bqxm7Vvt*+LtBA)v7RS zsds-Ab}V?0Z3SK*zp{@#xm(u8DuOt?VtCyw4L-3>{WF#Qat87{q`K;+d`<1)<%ldz z{;`8p^5fxoT38Cp5A*%4{t4q-(3Vd+O>#ixs!z!;C~x^vPwT$0^V95p;WP>~F~&0u z?n%w}OJQcch5b4guC-b4aLAx6_B@4TCy-%osNJheQ|9le<^_k*oBV>PZO8_u4ja8d zXh9?P-~9A_*DT>JJKn+{Asc#T&0<-Q@4$hQ-jZ$_e8|uAC!go87Ir@mWj&lXL~-qNm1 zJs{(LK4sQ-ZT3OK5|@Tk7~1Z^`^G{c1l}w zn4ubslSGG*C8Mh6q}hPUlNXica~7 z3vJ`w{MHT2i%-+g8*!e6F2IAfMqLG2?v?7C5XJ@dtj~r8%s<;N^$&xfnhB;d4}tbH z1e67&Cph%RC3tQU62a^p!Q*gp0{5t06G(Zxj!OdNEnKR=PxWlYM7l&y?6^cmj5)c< z02=OY<~8&gL5gc7(FVdCT@?+fMNCE{*;?b+aAZ`3(CfotV|bO$$hlR)h@ilsL{8<8 z83fW?a8W&S0DR|1+@WRfHr>7KM@fy=x3S}B{DOTpD)|f9BFy3~^CItcl{?VnuJzq+ zg;+lCNnj>=3V6PandUYgf6alIBXoxd~VE{n}W8S@>qD^KjMEvHxI09}^yk|<>@h8%WxH|!Qkxf;SAkBTT_5|lZ2A1#)NmU3BCGZwOlC}l`}pRkq_ zF4D7I2QEPm_v&lsrTiRYTg7>8hy@FRbuh9z!7_akgHk~NW zZ=K)<`WyB4kd}ra}J`K;;qN0~JA8d(bqazB}cSr|s{2fB%k? z8WtVCcDR$ta8WHSo6(|s3GFU#sA=M&1|$yslf>rO^W(0QQB|BmfQninjDq^;6YmJN zV?1p;!jT82jE!>$Tr59D~h6FmubNdu_?*P>^A^_xPfSg{~<1P5~2QB^QU zW*KO5D?d5W+!$v_G3%p6`I@7Be*U0TeXLoa-8VI_qQy2)X?GFsuBOUII)Y5t!;&Vw zR<|dH+uCI31DLr-;H<|-@bG+)mdqeztSuosi}SqN!awpo4eF*%XXjf~(m!{xmj_KW z9G#=A5!`Ni0MiE}FG81rK*(~PLBqOjXK_}>C~FgRdhOrkQPQ1fc5QJR(M|GxCxYyv zt9rG5jif}j5@OJ4>8_?VLf~~w3yEhA=fgFB-_Vk`fA$53hi~yD&+#^)1K&?87IX7l~6L4tn<3tw^?R+>kYZQX4=-= zXZkf;XjFn)2k~MZwEhJH!7`MK&G?ln0O9+PS8k?nh?To-x1`R3Pidsfd?U>dT-FW~ zNysRz-nEa)YGHIc%rpv7HP(z}IVZJJs(ZqgF}?Gy(BMu^%`F<6>%Je;grVT|p*9~J zo85FSfc;3Fc*lYaYm)FRuD)vNUA`F2nSR1YcC)?Pr2q!@{)#n;2^pL<9%52r8(9Tw zOTVx&qRmU0sW-r?5@wQbReilTV-q#76j$rp))8?s{4HBydksM{5J0(}DaC=ti8@pg zA|9L~!CU8CE^VZ~kjmY&*R>yTlJcW>Q4-YdWA0LGSC24U>y*!L}_(!M1saN^;G ziCG{15JFOvSKkzf4??PC0_nl|VKlv8RoCLefc-5?DD8}Cl*DDsa~XKWa<-mu>VW1| zbyM1Yx%Y|t97%1NOfAgOb?5SGXKA}@viAMUuw%;UfxEs$i44Guw)ijUUD#K(Nn>^7dvYscM=L#5I6uXAe;-9lM#urwTUu>4TA@*t z*^=#*hHTKSQKQMF7_hi5hyXxQ%oY8#jq7+)uOLI=HkR!yz9$7l*hxm zRHCiiaGTSpxCVYXq^W5*lMTtHF&A14mz~SFxolgoF+r0zHoWNdWNHJHwthpObU3uy zxwbPaHbIeKWUfI%_H;E>7cIQO0TM<@!D(-h0K z9ZD5Z=t+roP5c?D-#Z+*ejz`^$c1SrL9$~G>3Sj=Q$fWcwH8TL8C;)&$;`mQ`?i6# zh%qX|P{D%Gqrs2WI z&kvawnf$O<2l;Gc(hmfR&U3CP}Fl z#fuSBv zy(sdI)m@YaiAyB<=axzM4I7 zZ-e7s0|_qk+x)$DnVv-3Wf-3Vfs98LKLyrABcR zNamJuZa?P@;O!F>@>L?&4JBB90k@A1(jbI17lXAgP8=}iw>WhDytvGlS9JMBbB zxBqUYV+L&}U(7CS9VAip2RL8Q`}|L{053|J?8y?S(|wSN1Qmgo1l0;%Eeh2y;!T%t zV%|4g+#-Bvii4WJM39~VzO<4081OCuGZ-DR2~&6TQ4q<9_@oroqD0?t5eotRw7BQo zVmP&^+hQT5kMkwtr_iuK7VShq{3!+Qh~=1mC{majUMwPc*acELSz{^~(ZOTV;uJ(XISP!voQki4 zIa_91Byes9RM%mc#^6ouIo%;--JjOsGajOX$xPJkrZ#U{pM7*T@C%<%=s0$DTJd3O zj-4uSwQdOI+ZiLl|Nj9qK+L}^Z=9a<_;zwjpSWyMbcdsvo=30rBALqd0B5@FxZ{o5 z#wE~_c})A1QGgR?$v^_tKasU8^V8QAyS9LZL`0dXH#@bGs5s)~i+7BPKrR8kQEY^; z4^IUG(x}L&ZLkY4BP1yqAh(TE`K3_(6*+ipAL?M?h`itr3B53AH|NJ2jm?hMCXd{n zs|mK~SzXBz^K6L!r`Z75ijHC%WtCrcBJMSohE3nz#B&++=k&5cWAR66P%}e{ogO92 zA6?!ktUX`5k5SfFGj)4z#QUX*lg0WTH1)7uONlsZ*XZtG(fYpa2EpiBK43;=i`giP zDFgPp=(^zqPqTbrkO<;w;PrUdoeg0q|0)K6r{d@AgR|P1rV&%Es`PR2=>+6*K6ez; zmey~y)S4FedE608X^}G>vlZH6R=S^H{@7K3*t=Se?%HLFJhg zN=>B@wG#_Sh~=yv!EjecDTSIiRkqt zF4r+&NAWPi``o=SUW7eWk4jk!?8DguGCA=p27Jp-SWN}nWieI;BW>j%_kS`&8}A=X)=eGXWA{I$ z?2Wgc&9`(G6H_6bSX)9{{El3ZaX6tm^q|vqKw@$=tbyGaZG~ZuPkbj;b_*x@pvSV5 zj_GhBY}!3najH!{T92T1UI@SS`NO7wy#o9vP5PrMiz%T*!={D!?*_GZ#en-~kXID$ z7s%JgmIodux?ypDnEUdb&3QC%X~8d=-9O@Sn$L_WliaO@`_4+me#V-4IWnO^%c7vZ4`zS3vVT#XoaoE+&{6hvRgTt-=KUyq__7_^%}&&=n1W&1mS_w zveffZUW>lgI#KJMBRsBxMTnmHl`;a$e`Wz*1pKaJ@=$Bs#JUU(4-@Jc3gNs;jf!*` zq`>v11cf(qvY2VP?6!W}K?$4q+rhm{lvvRIBUy8mJpxca`J0l;MZ%WThuHUDfi#A4LCW%oc|4e0EyP*uKXIc=O;i?{fQp&G)e8bZL`&=%FV zsQy^tim`5_z=HGnjt>MCN<6#B+qjBU0xZ)6g^+N9Z&T-opwKP<@gLAK#u z!;J3w6aIcFwts2&u*kD@8gAp^kobg!#zr zYyEHyAxuu?DJdkZXKB=nsYsMbZWvu=*psRJ?q4Bit9D#iqur9C0ei8MC21H-yc3DK z?l>GVyB(NgHr>w97!f+OjxNXDZt@q0C!>N#7x~tBWeUQKS`KcM(#xFYHMx1HPLtC% zsIQWsZv?+q$usGOA$5edCsR_0SFd5uG=zu5mm-kqpuZ`Qg$IOW*mN!vd(}CL^vYoVMQ=zt~PQ<9)e{3ifq1X6OGwtn{qQp8(a@mc=9l^nX~;t3!uvbnGxS z7}9a4O1w?aeOOdlGr5yxu;Ewb%qfA0fhAxxc8dVLd~9L}G4 zA^Cg;&fAyP>8T9*izq$9pE*ZVHW7{^fVo>QHE0w$Lyvi|7zM<0ethfAsckX)R(KHU zW-1Q3NWM6(G+FH>#@SUljcmg-qwH8MR`IEYchdd^Ru)1#d++Uj#8Q4jKxVYe2>mR> zHgC(r=hEeA33T3OY3$=e$R6e00n#1)o>es<(E0?UUw*tgK+=_Mz9nPX?e1N_ic}%! zR}m5$kUqw_kr71NofIkxT|R7mQ71bu%4184#uvVBb0bT#2xracKV09RgAf6I-w-Oc z?_`8W#R9{nkEJf!))e>-6{PtSCt2?z*1u5tjz64UeKo)Lgigi^%m<_w;J`gC=acQ%QGr{8sO7N({aP~`aHIA!omhT!{z6L&6_xu#Hj1Ene+UXN1rR-P z;YR@6ldbGR!tfh%PwCd$nCw1Pi59JrpthmrdTh<@q&b0`*O1pG*yi{R9CG{+blucW z0#cj{<7Fr;_-~XVeJP(mA@Q$wLC-6K76=P^N^Qq!8+46ISlV&`Ndsd9O7`dhOEYDt zr+>Hsc2*NIU!vZ&BlrA<`X1QFX;Ng+4q#)n#~_J5MHCSjJyOIG)T3u!WNPt7-QK$7 zISg>7Znh(W$0)|L8sr9WcQA_n_WS3~(5P)lc>#b7#Fz`OE`n?w%$UpEP(-NPuKdv1 zlw>T)BQHAclG$mmu(h&5C1c#lchBh!=We>1gcsy!QgQ_myD&)UD@X&M^3bJO4UsDr z1CmGVwrx5BWl%aZb3|&F%vK_0+P?$B3BO%;80@7u<)O1|GjmeKQOpO6)Ux1(u_?^o z?@B4{-yY*Xq@Fu^KIld(s9Bh}(e5q%*XMbgQha@(zwER!D6%sSjf!$m26pJWnFW+# z4U|NUcg#y0_4`Vl7Qdh`_@T=7W^}0Q9+m`s$h4eK>Elm5I!#T&B|rt$IKYPxFzf;4 z(C`J@w>OE6>R%9w%4I@Hd^e|Ab7uxFZ#1d`MD4FliPgA+%dnoKe;gn=54n}_-3)+K zh&x0;gwxjtk@MC!X-zUb4K(?|4H;8?<%||NVXM+^$DQEB?yRbSppNX;PA<$4CG83w z*mvv6ek)=a&COl3^Duj89hx0irO4-zryZsw2dT8DW(ENef{Ik#vwc-cRM6bWx8LKE z$Q8@222wI!AcAeU!efiplj!S(IQ9QmKgvWy$>_)sR%ggwI@|)RuD@ zOcLeKulzKAALJ%kkO%{)-=E2FPFGa~;C-bE>?1b!qD@jCu{^+@Q}SrVS6q0Zncd5D zXH8B{zAL;v4}Tvsuc%Y0ekyiMs<}_PHzduxi9zT;WAqqF)VhTI~W){A!CRx_5wbLa{$}ojzw!gt=71(A<=ZUOr`sa9?Yt!>Q z4AfND6{(LpSht-j?fI6V9_An}$DL&s2j@*^UkTz<+dt>oFULeduGFUMs9~nv?*-ng z>M^K!SwSy6UA!pha4ItMbJ;Uvx8T*pl8kid&;aMMb-UUlW$P`}e>pUZ)&LV-Q&=f& zC7}r+D7>?M6TuBCisPDn*jpGb^+GOh#3m_)5y-sjZ{kHGlVi`&cuPMbAVuK10~Vxb zVCfa)-oVW_BLEM<)0uvI2UUuOLLGW$;ix}nRZ4xA!5yt@P-iTeBAJKMyzWINwf-J(Gu( zfZ1Zbu(3A~Ff&6ZWL|NzO-UDfpqxe*G3Vm?;pY*8O5q8 z7p_YXM3M*0ZAsdy9nW@yj=Rg3NNgWoOKvV`^NonZgNFnGzn-w`bgn^q^EvIe=3c^J@>c3-DY4#fz|0nzR2hh6<;(X|3`Lm5{WNz-_VC|s zQu(tOm`MBp^{7nS-LelEQ6aGi`sD>BJgaf|NPOAxQxgqGFlX2(u7D2q0=^GZzaeNE z4pQ$_>@ZkYY%FN!fUM`Xar#W{3T8+6RwgMF*F${B^$at*Mv!hI;XQE)_`VnDz|KF1EVZ;M01A8f1y3X{qjw!M(u)VTV^P9ww8zulet}5DL zG~ilkMZv8s0ec!#*K_17d<(0U+t!66ii>3C>Q9^5@Wp{`*TI|JF_lx{>RZl!4F2Pi@i&AdmZ|X<@ZMHT1h0o?FHQPmAqm zm6Ey2ePiQ6Er)w|Itf4Y_U4k+#vnsniFVd)%aq%ZP!>+p_znXJMXC( zNZ|T2P|gX)M)t223tn>-!gQiKK<`zj>xXNR2d1=eB+8KAS4XD9NJpGIRoF&c+QTK8XIpX$W-b z_z!1Xcv;cX=_g4QVjZx`D#{F}ID4`gIV+~bx z5+DEqjPwChlAC{|r|nv-pULze#FJ4{rZoQfT5HY~ep?OY>F*tErQDuo;dWfq0L~s& z@=YmA8CnLHV`C-aCx5xoMDA}V+a@H9MJh)<7;=JFLsw!&b2y<^dW2#f&Cn1gty*mQ znpC##TA zDP|TR4%E-_%&TSqw#W<&U7pagif{htb=%M9hSyz1+%v1IBRUw8(se!9Sco zF@61xN>0*LBq=-FP$z=aEuU_v*;AEi(X#22n(QD33}(DKTib7G>VguxmP=su>_k4L zGWVeRu5?P9*~3QX|A$H$L#KKGJpK0~$)Bb9>K=)_X<0tjG`DCh@jh|b?M8N}#`d|u z0+!vbUONV=OI83)Z0ABq0-)X4S`Z)z;a^4>+?YwI)sV!*jy2tBrEzn%vnbK;YE4Zb z*_io3HI0dMl|6kyKKlLv^v^ey6i>G-lfBzhmg%R#yL|ptji*M6*=O(e0g9$zM?BS4 zJz!b1mn7P9_OUSy=QvFiJYhIW*#w%6Sqw}_snSumJEpeQWat0@000000000005k+r zG%Pic{@#EsmXTUvZ&!GXe$Uc?00000ivocWQw;)-Ey(?OIi4fCVLDf7oW>BxX=&=*wRtl*ux zY@CC34N#1vsQImwNAYhSyy`YTB@h`CYKKTF6&4*(XjfuuNMd0sw}$^ewGasZ?mXsr zYRhr%msF|1U|`{1D{BHDOK(drXb~_UA$c@SGDRAKNMtSz#?#gXFxqs{@$`R%O0R4ZMJ6zcl{1V9{n@P6k~k->)?Rl9y7Eip8=x=k?95QgH(* z^xTYyR1D{?xe{Dz0GJoyAc5}gkS3Ya7gXFX6Y{~?MA*hBOU(0)S;N4tG%TaWG)M@q zh=YGa;Sc&z)S#do4*GhO&;WbDDGfv^frUMb)%rCxWYBf#b>QzolgQY1t?1>c5Ye2o z5f+4nnVJU5oQ+8N$S$%mTr)8Ca7n$LjGOK7NwJ;^3{+cPCRtTVG)X$jsInj5*YT-| zW11*r;>ZNYG?b3q7q8xIE|0Ei%%creK|^(ROxPKElDMvupSp9BBr0+(`(TIum=%4? zVok7H?t(+g9{etB10NA}Z%?@}ZJxZ9iZ3WdEj+l3AIz__5)F)q{PUqOEiITRz$7w9 zX+D=<7=t_AmM7@jOIJML`h`a}5~)?-y;`3!OGEJGJzc~Kn8vNpxC|O3 zE6^`fC{b?vp0vR_c9RW5nHGx%u9x+pCU`~gNl$})1WcG+2MGRYjwAD<60ve3TU8s6 zvVO=iaLYec7Ruzxo!%Uv7(J}5R1bFsujLP*ZOKH2V&?Hr4{K%8R5h>dIY;34Pa%Im z`q>M;zgp^j>iK2G%j+5v9vz$4abOLh&I-SY+z+XlDgDc5%0y8`7%Y~ktvb>$dratkvi9=Le{rEfh@SCbY7_&4H0_w4Ro&C9?$nGX|Zy9HT?H zxhKI)kNcE<=>)AY-V>^PG?q794g$~NI4Kkzib04iqhPpf*9f~qMjKFP*b^_jxkFZC zaKXDfyU!dgcNC(YBU)uJ_aqPo;N`lY_m_?#8G;Ldl2RY+UN~gZ%(F&yE!{>^v?B66 zzxnV30Sa28T_8uWW#p;{+ zYkdXPctN`x_ET{=G@DQs683=KLz27J9r0X8nrrb&t57J}lEg-udjuVw3Szj*96dB< z-yJrq*EWe1faiS9FB^&Gv>C~-1xrIH*J)6hTmfXknx))!r>QePILZ?QP4b7kEYR1q)*3We`XDI*@#-0m)5A*4hF+|L6)*1FzY(&Y8zw)^edD)x{>oq3h7E7f>UdPNAbtl%1@L{9ciS zy*zS@Z^vXp3>3Ln+CuymWdV0igP{U3k?kNZx3gi?r zo-ecKh9GDH!{WHa4h0(lo~?r(n9JS0pSq;Eb-!d&rYK?`9pzc#+410={QETfv7DVp zG6hx(u(3cNSQ1gr)*q;-@70oBIcu6cc`)0iJ8YI~b_~%Zzh9kU(l>ho`P0!=(K=5SBq>b)PXw&Ibc{6F}e*_IhF~_Ap4E# zRDY>iL3{#hEPF9=0?My;fcq@E79;<`4MDbaokDk0+B85Y!4AEaeDdAV7PWO7JMj@) z{Gi3yU;tc1R4lGKf?O22*hL4`!#@T8T?qj1E9)Z5Z$Qw(8&Lc{W^l+(bsN#=k}^uU zj!KslJwIh~t*#NU^u{ws5jx|r<$78^ORoZisAg+><2V?HTs&cF{@TFPS8fV~R8+G} z*8(%Ye$Z8VpBrDzzHpvnrhp|Um0?f726de;v;k$0S$GVscP3ea=1(DdK3i)%qPG1! zae4jKB!YN^q7oaIeIuxpGzr1;KLSI+WC<(} z+{fC{6cbv?-e)O-GmMya_WY>?4RkGTGp%uslZ~y9D$RF{k5}5$L|eUeg8*mv`nqzW z?9Vttx3mnFU5iH(sOd2j6e+l<_04OiU~n0K2*I!vr_TGK1CidM%&+GLBDvzrJ$o8I zZ5u%?r)JA$Oa!DDzZ!REs4YoY>xER zCuQZZ7y9kiX1U&kP7O2v6(Lm!aU2u^4Gp2cT7lgjE`e>RKo{tC4?&MIl8^VomnBH; z#KEWNJlJ2=x~La1!Q>?v9g|4UGQ@THChYL~8p3a%ou&_oLk=u9N z`|RHmTk`k-02j|eBJ?3uCgUPz#3U^^)Cry!wfk9JxRM{_VA(ZF%uCU;KUi=1O3jE9 z_L*D*V7=&445!C-jZabY&rl;~x|tME?*Pty#}*vzQ)D7cYBVO!a2vUb*mF(n>sUHTe49z8$! zlo^>!>bI(trtr+tPI0-okjD zaRE=3>$yZL&`{>0)*&>;aBHPH!9{b_7{rAZon=FN_rYf@z-g3vHV{HL z9V>k^bB=Xr1Xc>VDuX#(ywjU7jkq2>I!L27;Z2u+T~R&&nfDMr5@M~9h@4&*UbgTX z>K;Zf0&mz|$qqyP3foRSX&QmvhN;)Q3)qNB;VauEa%KVa&S|hlAZCT0wxQzZn#d1F z8Nk|Wfb?%!aX&t&n)wM~d97U&@%vI_yTwWYJ;*7_ECf3E2!-So8(9t(Yy(j!)u^tTfl4jaluG^;d&g=;l}j1W#>{VdFoT zU|{2F7>z9ZP$>LSCz*Dn$i#dX#P1f51wSc0Cq@TaL{L0G%g8=j*OH^ZKf=bPTy2Cu zZ*mK@H1Bd`_TFkkoz^l4XTWcOd4#aJL>L%u4cemrWfD$i9e=9?s5Gt(thc}Z&gDZ! z-Y&`8Jv)%7Q$lFZ` z6zLsto(R|US9hu8Ii>l<#X3^^emK*qbqqC8?Q|Hm?POMj+F<7|6YZ7%Ku}~b zuXW-!nS0vyNT$E%e$pY?2-O;}xWW_??o-?wM5GvNFgGy8tHB;#6+{g(xInu!I)1QD zVAq=50Dvs!N6@U#%U>NutxjzPf-7*fB5|nF-kZ8&&X7A||0uIX?Q7X$w5t%NTU=%) zCE4{UvRD2taIp`y_F4_ky!(91h*%Y+X`7O4!i=O-KL3%j`*-3QE}3iFlhxHXLGZ!P zV0ODTZ%4}cRa+W*Q80qn;bGF{R|QHcl^0F3zxpe1KZfdA`swk%BP9im%?3G(GO59B zlAb72;L)5enm32%NsWSv6gcR=C!rPPe8dZoPiiaK&=%7$QM{q4sVmUmm4L^Ea6kw%RvbE+2*!kZI*`pKb(qbX`H zWJsgGAisjGU0u2ap2NtXG?6;(a#ebbc-{OnY#2&p+(H&l<}fN>CjQfydqqT!(2Z!l z#X!LtExd8Ir%?mctO(9bh6v4Y905nnu2QneL4`#Vxr`a?j95i~NP?p(3XZnG%Rr-z zi8jRORVpt#PXhgfJg0Pjhd(Z&I=C8q4#Yt$Q(4%a<0IaX;BqxrkI&R>RB`fPE7NsPi~i?S%{0rjaaDtumCIpLv)BLtu#p!FBh;Da#tRu#rEGH`aACKD~Pua_S^oc~Durm>(xVV=Cb+ zo%of;UIWv?k^G`1!w3`~J4&WhHeKhsVT|bEp zPw=jwF8q-JzZmFF66uSh!usbB!?a_wdzV)pL^i3d)aMHPWs%T8%w2m5nfWq;onZyD zfA8L23h40Ra(XY%yXSNM=nW**Ih@<$Z90q&K-|beLKf3#&K;gVUn9{(Yluc{y&~Z- z_DPtXzS1o~97aZBX!q?ix#ziB`k8D29|g%AFlzH-Z-86BX8NadCc)s9ePf)qF2RF` zUwByu7zNs2Ltp?KM>P6xTFTnvd}ZvsF}5=%Cw&iGSXNVze)ym5E-P;^o`{`;?;l-A6B<~$Ql~nu(msF~slT|N-(?U`R59#vdy4io zQL)7dl68Ia8b1({PqZ)V+KOQBl8538_(W+jT4(*YX+DFi$wFVAqZ?Rp_I{EjXVwE- z+Xr-V9eRH+a@VA!j$XW4F#vCKSTqWBSfMI$MB zn$<9bhD4jGCnR6b$m=zL95^>gEvu(U0|poQ0nAL!4HbcH-S8j(%cW*9RC8DjH^t{w7cAeMP@+jl6SOb{$+3y%;n@_$eVs5cT7~ z)FW5kxsmU9gEF@4%ZPivm9lyPwIi9T1M7eD$+Kf)swk&C12>a zd7ItT3!cDej7Na!n_o`TufOpB1d=k;&7Y>+BxP~9(M>%y{(M5J+Wj0o#T#{k73dV} zGulel*WF)+svgn45)}c`&C>V$!$f0yvesB#88S@b5tda(X!|jiN9v3>7%@-PyCyM< zvZ^_@Uf*6=gh*t$rJZTU?&M)Q_}&7cb%&~yr3V)Fns znZs=mdP70=E@SwXo$A#OB55OX1-LCYn0#0j@)bSKRbefa2TnH8$EnCtLjfq7RkMXK zshA9KSV_b)L)>^%d8xtn7bZ0>@t-6`@vpvQP4-4{RBC6KGoF8y9q!MQ`q=(FJt_nG zgY8UyOgjQJ8J$v`n*sfsWj#M#k8;M0k2~tUyK1JU$z^Zw(|n-w_q;h%mrV#OC;jLr z{U8b3@i-~+yB*B?r_$#Ym;x*`v!*+fyxP_$<0`E&&8H7|%<^L&D;vm*VlU-I$HQIt zt4`baR=DTlFyqD)C6#t2IVZRN-O6-wa$x3gyJ=m8Gs*Doik>^YS zrR?~xhk{Ou*tr{@*Va0No#x2K@Hy#;#*mm^NBk@LvD=twcfhv-Gj05`8mIGN>OIco6uA1G@*w2OQH(TB>YL{CKk5I}iilmhBVUAM zTAx&usr*&@qvRR&iuRl?Z;^rQvu>wSKKdFYeAO~N(SrS_#hJT@u|?-AfaY1vG0tsu zdUieEOcJwS3f$0MM~_IkF*kdF&|e&oCyU1e30f9Xw8X?r#W2bQf52pT)dxB1)a~vO zmy`P-jpS=#MJ_pwFyaDd6 zL%X$H58>>(VhI82qBaj$+kF6hKc5S8WXR)?o7q|jm}ZGyj&Q)<)fL^F#d@24uV=7R z8LRd(?P70A8(S!xVY;b=LpEh}5ZPQOzPwqWoG4u6kyy%)WCaSz_~68nf?Tv#C3aiw zQzzj;FUZmCTqU^(I;Wf3k$0f!;ug`MpAQevjU%E%ky>ZRIKs6@Bp;f!G?BJ-OJ6`Wh0XJ$9PMptr`@gG+WCV=`6u1!Z#WrOw$`A#mPiO1g?!AJ{%ROJV3K|I~*D8GSmz`r&TbIhbxEf=jVe{Z0`1sno z%FXkL5!olR`q*U#48CZB!?z9~~w z&((eq5F`jQMsTZ6=U10rV!4VvHa1xTg`7mlN?m?4x?ze+v|*e;jDhfF@E=t5K(c=k zJA1CcGY8P_ArE03?s%HxD*{r7-Z$>m*%)Wa9_0JoxZ6=DVR39+a_Z03f3AbPiahXdcU(X2K;gn6(vT%^g9`wtn>+V$S|FOr4Pbr z9@bzVkU{|&NG_?1JK0R%szuWk|5KHcMJxuc53EU5({X?81pQxyS$Qumg<CX9iJmPH#JcX;865J$XG{N3B{O1lP<}Nqg>^&xi)RocI%Lb4B{6Kn>^E#soIyaDMDeF_nTWJjQB7rx3YD z+>v=A6}!*2TyFR%*FH|Xx8_qt!|@(G`?*PR*T>t7^clT$DbSQzz1|wBe>SeH4mLL^ z+pgK8_Gbg1E`7Sv*}Wkjt0O>i1-GFBv@Tn=!i}?0_5?M3>OhX%{|j~)S?2eQ1;?{u zqUM?H@h_LKSL$Wn+6!c5svNa3mTFJ%1LuusrqL&7qmQgkWHHbWkjft1{~muW_$S0t z`aq_6&}r2UE5X~aeJ6{0YNqzlW1BL3l4o0d&{@cLta4NF&gOT3?79|C_XiFAQH`Ec ztrgEzo>v)R$7X-D2nZNM88aYQLrv(j*>AV;E;>AShc*+&Lz3L*6Pp0 zq;3W7;mF*#9qEBvYW}beGR{T!CUboxVPpITB}f;QiV2F;>>;$RJAOx(asJpr&q{!5 zNEBcfExHbZYUL!f+@&W#ngyDS?XEAL@@Ko14^i^%;XSQ%U+xEyWnQCM={$Nk1iD7k z167tK-1=m zn(SHX5`Tr|ow$!L>5D(#)=04Kso{YI2l`>fdVUC0m}#tG#)3nq2P$?k<1Td77(-nH zY0SEa0~ zna=Hu8qd13Ek0Id4C)(KEWdnh&}AVbk}@r@7rBccR+nDQG39}Q!)aJsnQp#;j{T#w zR#wGOv$^|L(Hr!KS{!%tYyO6>R>E=c z(mH*nNdOCnCtM|Uey;zTXe~l$B$p~I^L{+$^AfW4*t^paJt0A9)|W_Jc9Qn2Xh~0hua?l-P#egf-XVt8E&a*Z%U5;njaJVY-~*mw;Rnc8DO}{LaQyMYO&%NC!-U@6z!t}Lel*uij#iD zH?e^etmc`sn3XiJS891Jm^C&;mG_9A=^?wSC>%0Jdd1+WA)iDpl6hv(K1}yP;5ZuP zh4`&a`>xqt*M*ZPp=K^5=SWY7ih^~bOi8#Q6q{@!Vva7ql_7o~`5^t>I(z(gFWdKq z+*{4w+{QOzu`R-}q3(m~VD}-i9r(<|Ivc~P^8(~h%J0ifv4iiR8u$KM3E66OY$Ih9 ztZ!L+%20coj=llt7a5O=;Aw#cDg1AhfFuZY9wJ#U1=29)5oHIC zD{taSoV7>}Q}KGU5WBz*>w9e}@y+>7 z|JuS%C%ZK{Qkb!ZZ#k^RfaPWx`3t!MB7NJZ#81O;*-CG6a7C~Hwroe~AHG}mF? zmzj)!u(|oqdMuSqPa-_S>_zeBqb>KCNyIn+UDQgeUs))RfBG|s zYDiafctY)nk~kN`c8Gs>TX#?K#tguEN|O@Ef*17maE(o-LNZ}*q87`J=P3>NDm8*F zJu9mk53_KI6=5P@kJKS=eiH7}E!WVt!dYlP6tWs91csptd>$Q{{H|yU`d5v!B``7A zsta&eMHTLW0MXpM6}F7N!Mo>0(OchiY&5_>m0=dQg>G~uN_6pPsGf?a<{u?K5^kX0p(oEmCw-;vqB^kOCL&nwr==_4*nF*f+}uGdM@7SuR#Z zweQwhh_@M1JB+jWOwlH7T*NYU)?V;-z}5S<06{100?ze~W4w%NTok|$-wkxVrqfWs zPu6r0y@Pit8yHdOEY2=GTISvC;vL+N@G@Kp3NYYyq8x?H(~@B)q&9V!~cT6N~H zVLjRFZ1%b(#JDyj@Q0xS-o{j_8PRqiTe>oSfauZ?7A0|cxfpLp;da^j$x-7A6W#dp z%^ry-QJ>E1G?h?|wTX4A@p^%ZhMZG4OfB6%VJ z{1e(0pSoD`#dnRYdwClVuLwV!hUc)9d$D0>H2lyJu1107URG$w{0jVOfn>X zhXDh|$W|#!CkWFE1w{nw{i|UWvNBX;zk8mbOpW0|QLiDx_FH^rq~vpFOb7~R zBPu6aKC0gW^UM&-a_)IQl{i-IY!1&|aBqU9>_anRZpI?f>q@9TJpZtmO+I-=*q`Wv z6_3~tLQ)p{!*2D=VoU^f46rzrjL(qz*(63mVJ0^muwxT-i1{c8cey)`A%j6CU$eSC z%xbg0zyCY$gYtUs$`M`NXG7hRX^1V}YhxDuL9Lm7uypC7KoeK_cK>4ZaO#znXqeA6 ze>q;1lkk$7EDYPF+j@MQp$PvL)H?&y+`Lna_YXS!oo}y)T$g!iX9wB z0Z9%{beov6On6N!YFOL_lAS|zP@6yOD`D!ee5yj8?r__6HrMh1ID zUtgI;%o=^QTHRo8kFk9T9B9g1CJp^9^>~pTLVg4x^!Ar~<9jZO_b%8x+(z|2j+Smc zVV84gyU%A=4E&*s4e1;@mB|gSv)jW~xpIpP)@f4KfTUPIHL-;XR7^yr9b{@G$4_N> z^8jtvyjnu*((>a10D-S{?$0w}MY?Di# z11w|J{_1z~9p{pefn&yVJ6Vk9e9kJrZ(|+ct2V6wB{N;^bZuc0B07va-fb52=IsEMlI{bz;ytjBau0*6LWO9zmn!@5Bhn|9JzLtF?({BFc0Cd@=DN6Ff_S#Ek00vE1?kgM^`dzoRFGdTcUMlv z&e0Cr&=M_57k^VyE(yz0SPm6Q`VeNr|24gu3BUwcO@L|LB33nT=>Pg^3qt^O*Q-O~ zmzn0)b-7VebhCie7yivA;Iw^_s-2uDQQO}+ROdCxs~eT*4E?>=I85#ds(~NIw$7d~ z>DXy`1LUia3rqpDs6l#;gD@?3g$-#7Z2IT|fWIx^-)E3cYtN#!nHVWhLf3X!g=m@@ z4g$5T0*$m<1N1{Ect*FP(qo)_P9}vbL==v z&kSWIxMK~)|0D{M3+2x0rY~YRxVX4JnW&cyS_yRP1&Aoa;w3D_c#7%|A}l7=AgAMqEwf~FjoZ;+);(DX42m( zLfN_FNXx3jEt_D_U2s0|fFu_y7$KpD5_E0xf;ek`hsx`V#|-sS179;SX8#YLNTewz zvb;x;>5CJ$vyE(Ot68c7U za4s5vMBB#1!!jAsyye{gYoLydSeVsqp+DcVcpr|w&$ruMuVQ*rO4bQ^`v;S~J;4TW ziv3I=dQ3-fLoMnSpcX*@tu^iZ8oiELrzMzZ&Od2GQH$>ra**pn7nuf}I)3P)NKLF9 zPp=x+0*`)d7`OXmH0hnHe%5?MY<)aK|IwZ^RKNLPR0FM_)7?3(=W(j>8V7ww>j^ZY zH?0r)ID&C)dpA+^v1}}yjI`_Lo-p3BWs^t#{UVthTw7?|aM$7J{#uqqWV`2et=KKn zJlfpr@Y9uk!Hn~Yji8nD_TGiUkW2rjB`IbI)|17^LaMSz5r4x+%+-*@B)0P;q*&z! zZ4Kmm?V8m)tYvSDJWe*0HZX|3hQa;}7nqM3?KwVWnkbA$p10zF#~7*JwZV3W*wtJ_ zpF07>}IBmY0%iIkGV%z2>PbUOhyZ!^3$aWirK5S`Dy7E-posW8VlZ|R359ub*Y z^>qb1ZvjR9L5Mcy#i#;}71T>mO9!p{ESI_N>15xZd-cP>aX2Q(hQENlwL zj@vh<8T!aTJh_v*T)>}jB6b7xg#m95{y)ri+7}tTb@Ur0iu>}_NM*=Byv?i)}4jBKl}Q#HzhxQ`pBbnTM;* zYQs z#A`_DT6ppvG%%6LbAkpGiCuKNnoNsuwn`kMdv{wku#|kRa1zU?#@djER*4W;la|*j zi~vTlDd;R`l2Qf4O`ETZcGModn|hz;IhIc&v>O?F+7=>31oijD%z7zZ$B-0I`BD$I z$9Kh4bBPx_tRX!-+$tK!l3|7mqbD*w8clA4;2=b_w`>x>HWQdlS1ab7yqLdgBB3t$Xku$lm54n+jbfk-VVaHT^q8laKWn%YINMLz zv6W4%C;>`+8!|LH>18qOMbmdk(do4NThDgLE6;%MWK*@7OC$IR<+29`Rfx(?Atm<7 zG?lej4Il1;r=4)X_Nib>+m{>(aNr(Z_(cPPkm7pW^^(#~cu+3XsOhw1_Tny!PB}(r zGNI1;Hki$har{r~qkEtK5mWzl|J_g0>;J85{?C&S_X2H(_zY(#q2c;5-qKC=vQfhZ zfB&e{`)&TIDwiLI!oON#AaG^Vzpt~_`4NyVQEo4i%ERl-R$-yP|DoslrhM-_pZ8sx zmojSUa{jIv@o~nj>Lh^R7$rQk(MXEyEybe@ym{wRa-O|B*7kuGQw}xfO+gf#k-y}H zhRjx^QN0uPXp$uusG87K#k=@P3+=WzF;yL%F7(5>osjaccnNdrhtJ`@g?D>G<-TSi40Rh(D;s{7#Sl z#f_wjEezS4qJ|_05Un;nVtR-kE!?FI$}*j}m8t|yA0V^L7$!cnt8O6ax;;^CATQDM zReQ{%H#zXr`(TYdLsWL8L`#Yds$onWHk;RDN`u70@BnKulv-hEC`EH3dF5X~2p_DjQxOGqe7~GFAto1xG`x}&Zo7w(zf=eV9Ie-pkEYQ-<8?vnP+=^By zwTqb2%E!H~$M!g%+V6`YOOY69n}_@9^5Zgl*ivxu$}d_&=2UU<_AUfEN;9g*!jrSC z{x$hti|OO4t5Fqbb3Uf0=+9^0FRHE&_&5(Kp8r(Z-W&SzUTX~gf9RA)JHjE?CrFDg zg$_J}agV*UFY-iIta!3pYP54+Q~J-abCWmPcm4-mQn!-7 z!{1ua$aG0n`Fyj2mi)#4?y1U5y(lDaDA_%BH<6Fwt~Pspx}AcT~^7DY{} zSxfIEqlS5As#QV(0{nrYD`u8HyS=n9v{>_=yD4vf7pQab+yQJKA~=ITkyUiG#*mVS zM<6s%a{0B7c~0+hYe5j1i)6z)>mNujzO0cjCfg%;o--q$NTV+NdGTr|2$9fA+GLwE z97=0|9|6#9cS5k5I1iRyI@;M>+s)c=Xj>B~JzYlcDqpc}nbNLmBPnHL3?`9pp5eRE zznQ0M;#tm7ChLipE_k0a>(Us`);-g#%X^;#=I?x%fq8Hb_N;WnAiVS_8~XmnVd^b#;a+Se_hZd*wQ zX4+^C#hPnA-=kuo|?SIlu@r*0~sT2bFj-Qv?%B>*@;v_1Wcx+~mL zx9j)wHIjVmO&z4>Ykgq(ng_~b>yGFBP*&>!4}8@&%PlQIqzZhYpLsYiL>s312+^!p zvY&9BMrd#)Z^^;K3M&xBzFcI+u9YiZklQ%a|o(AZhSuN%oXS>Vb>S?>VrLm>#Zft z{b0yeS5fD0(x~0w(}VwnLRlXG;=my$D~QV~T_+1{)-MOCzKOAL&P!d&z=VIxAjCb6 z-^Yg1pXHxWrx{ntqt|`e;Vr0Xr)mze!y0J_=5^bDM z&UedZW!7b&#uUVRw~DfvB! z;!Sp3WY%jI#ukJhSphT?{PkE;o0_J!T7qIu5(^~e_$M^%6T2H3ljVngnnN5y&JcPF zBlHS_gWd*kVTIyTYBFRV6CIX^Q_rl<&GoT6ng8>cQwtLHi#onfXn6!K%Z{3<=3ki;<&+(lzyoz99DD-B-`^8#8SN17Ry7jg#2x=8UcRNDVW z7GDmfhvcPmHBAPTZY2(fT`HQW9X0?lEg$uYgO^Ep{psu)0`;e~v@`tcS;ve;k+`++ z`9!S3{^RJ<{|}f_n!WM_*KdLS56H$xZ|euEcSDR5_*sHc__|zJb)Q2$tNH(dD#w68 zSK5c0RWTC7^#b}f37Pk>Q@K53O#CqXetv%nJ?u3%XRU_SYp+#(N4Rj4dua#<`02ZN z$5Jl{$JV59*&JLV^}%6=(j+_lfhpp_(2{OQiHp z{)NLe5d?K)2`m`9Zd-`vJ>AvFSsOidk6J&CVuW*i!aBdg$esjs5;m)CcFJ5HC+m!> z{auu<8OwF-hhEz!6fE38ZZhq9wc@VRy8UK)U?h=hAU>`SQu}~0Jh1xiA2C?>|7-yy z)lnMq&-gj42AWCQi?yde6`^fwBdHU}-(~G=l|aTG(2J^}jV-Sx4eDckS1C&mTENkZo-Xon)$9V6IHDgFaTxj4E~iC3 ziRUr04{s*;16a1OcpU%P1pEPiUOS59MbrlShX3K<4pzc~gI*TC;gnxZnV81CfEA*r ztNK`_eB3IJ8Yz{&8GT`Y<_NsqusKcu(=$|rT9}p^chRVUEOYZAj2Nog6_}mwS_bS9 zq4yFoy?afs7U7b*yC&bAeye;Ar7{T%Q(T}T60gBs?$RQKcljNafVpZRw70rM%xMX) zWJXK5jL%Oby8d9Sca=nTC=hSlu$qa64lYoekNz;nZD9; z=D>T~I3Ha%O7`~61%A(7%f&VUZ-yfbUgCe_aGUv;~GizgooYKp{0t$SO9^(TQAKqM)>@6Ds@^)rJ)J@ z4wt;Y$%v*&9QkgJ517`r87?5p0aZM&yDjiAVgD%sNZW7z2zp${Fm!yj>cMeRzE1wc zmDzL$$37L&FM#E}dtG5G5tVp*NzNs1D=g=bZ}R{^6w{a^jhFG#)3QRV9B%Fkvw zls&D!UYRa4bY{Zn^wz~i=IzgND%SyI9j(559^6o-5|^nT&OG<EBAR0KpJaPpSxuOx9`_xWSpexy-Le|2sg4{D8 z;lH9}0(q}@$!KM&DcKI6ek_1JAG8VXnUh7d+`Su0U2H~pgw0J*2X^GW!mc%C8cj>$ zA|a%~l?{46PTz#&&j5zch4k+gARsq{hI2lHQpOfysFT~ffz=mN#5yuxh6GT$7gdBm zew&s-Y?KJH%o&yIg?P}wiwPOdYBx&ct{$I^6Hp5evesVw)Jv8kbAPxvp zO0XU4;zF))O9Xxx6fQcBO5h51t*=?6wm4(T%P*^mKhiCKcsnM&y;^$EAa=$5U~v$n zQa*(B4{}7!j-i_c4h~2Zv=p#3R-dOcuAudmhhDk*Q6pQ_7rDT@smTSalk>UgbfRU-SfrW@(ra>=J@_e>^SSOH8SA zMRj?slp#&0SOiYOnb2gfSWFBfr|KJ$ejoXT<93S}EES_~?DA<>+|6ZYP(~hcMuN0M z0AiDNZ{LD{;6kjLQYxvV^&JlY2qypGY0T>%%!1nTS8IfwNm&t%YoZVxW-7iN+;SBJ zy)1H#{JG{PP2x8sZWD5+Eb(fbj;>7$e-tJ$0A;yfxw9tbFNZv>MMBRVaM0~9Kaj)f zUL2a(9x$@QqT9a3{4(*D1b_cwE<5nNjyl-kMj8DejSw>R&K5>e!^2>DeIL%O42-1f5vs92TLWuJ@_KkfI~LZFC9JjYpDC~@yL0|2xZ^<)MB~STjsV}7h)Kx+yzln2 z;cW!3aOArW?tV-z0L1d_-@g3%Y`y>DV*0^k841JsrVl^5l`PAeEYz_XTdHCrG_)=I z(~HHk8LK4Q^SDFade0>HJ&-E2KEmc@wIkgFboW8#ND1~+NdzDvcq#u&xNrB;K+n1)a!wrwMsljV(d zES@U(EtyGo;ji$%5|M_jR`v%{SF5GI5v@5KS@>f@9w@dgWi-#xG$^T>mpLC zYa_FkTK?~{-opPt%c65tzFuo&BWN&m@VdFag~~Q->iv%h(do6*jP=0T`JH1CLbEue zl8Fk?39Dq_Qw)-0Lvdee!Q3!Vi)Q(qR)lWG4u($GMGfl@>j_lt^sQZ%@r`}kR7c`v z1b#tE=zThIo*lys+mE+6(RyKqk&D4JL`?`F&LxZKjx-|I44>Wzd2Qw46(BAE#Ph!V z)3f!9%s8fcWtbK8D&4u-Bs%*;qypntg1+=q2+qUb-Hgc}*f zF{klKbHy8$W&m&AG3Dfm55?4}w_=$} zZjeD6@>ovJkT8#^P#Z>(o*Uu}8sxYDFE>*1gOlUdN>9_QSmZ4VKlTFpZUKoUfy!R# z)%J`^omeV<9|K)fA2rYrp2-MCq8izczk{2DmN5rNw2l}ho}UJvm)ykoi7h4$t874x%dV3Omn(hC?x(RL;~Qd!Ya zffS9ajyWq?rJ)?o(YC#&1~*WnbO%5=*(ZwS2pca7WQ2y2?m5987zm&=kvs^9(Gw$< z^MH%lV`{>^La>9588rn~n86D~cev}b_0Yv$zH(2!b-%>{e%Cg#KFd$)SB^%)!?Nep zVAOS!e6+Jr78_Y}GI)l~nKjq6(dE+R@OQdB)oXUApEobTWHfVCEBDHjI=nX+5*Mth zYj89U%GzR~8!3VpDB^gaZYrLd5pn#|{&6?y<_^@;{aOK?qV z9eR2%^WjOt8!Syuk4L*O9K!TGNF5EU5_12y+FS=TH%1ckAHW6EYU@ z)ZmxL@#$YSwH-#|PK`E+$&v8d(Tr({!k3=)-&{xO*7h1(Kd%``z(y)&6yS}SzC9X> zKo=RHx&nBt(CvxE1xX>sxDT$HR8XOGA*hTiB!c>hxH95jL11+>->motRe#ZQlS9Tn zk|1W?@UMy!!yASFQKwR5?*9XCmRY@@ zvED|CNlCg`>5{YUne7u7)g99rKEvHNTwb&|djVDIBpG2gTK941F4u18=BpxmVZq?JYba^~Of9tdNy#TPsHT56n2a!8 zl2AHKZ7FB7X<2+DwAJ#lC_m}Q#p`*EyMfLWypRcLa?Nw z5jb3{l0AT3U+`j5HjtgSasr?jEepgsNuIph?!W<6({f^??NH-Z2ik^^Eb-(6Z8brn zrMsv8<3=D38>t>naQsY3@)3>GuYf%|vdjtUcH z4t~nG003>qJqV+jZ>ZwqHcxBKq5uE@0~b@P!I}Y{*$MnKLyo667Au*FC!pP28=&Eq zfRHT4#DG7>uxqdn$*lo1AyHor>Ztq$t%u_$EtF`K zciOAngA4Q16S=R^0DEi@@!6+foY6_8^R!I$6MBtD5U0=nQgfC2;bYZf<%Ih$lqW&s zee5WG*DHRc%YqEAUkEPMW2tu8M{EEfoYkOUU$EPjt&1zEDHu0Z4ciwjc6dML1Q^?* zodAi@%h+EmD*_2do{-$DkXxb+J*HGa%(}J0$njT0<@|E@JgB2>ND28)SIOH~_|^6C z96WhLnj6a_@%Eqk8MdjQaNRyL%(QJm`aG_>bV)aDL%LJO;F^&Qgg_w01&J+y-daDD zYYOrf$eHX$&~0Yk?nUqb00PIC#rrB?#Ea&YEDu^g{oful*N(zp_UQNIrN&L)y}mZL zqg#imDcn{XhdMVTeNfe?3n_8xkx0d~WPkQRvwvOyGATlyZPqMXIt&Wbw7WxS(7IPG zTl-#{ZtA9QrQMJTXk$JTXTozYMS9h+tXSR5omb=^^=(8rr7}9C#qYO9Zdob+b}g!)AvXh9I~)WzFM(3 zl_GTc-!Q$>2b#BR-IFWN+>WB^IdoGJ4{edVlOSYOTjubrFn-fQ+9pkcU}KERi6kiE zX{A~QJ-B=&-?0}Z!FFoQI6)Z1vT}BAM|wPJoDLxBW2P>CaD(Q4r$`7+^=GihW~nAP z2{^+w+}AdItuFGNU?;;)Q1^J5rRbg6LfzD0%l-`;92$y|!MCuNaNIjODc|x$Vnq_B zGRqJpiaqAap%Y6Iu63b9ZyA9}15B^7oyTIKUj80t{NsR%k|!*5ChCPt23%DMi$@gg zqCG^9VX-yoK)Sh?YX9@9g3~QxZJp5oJ{;u5tV?&@5Kr2&B6$<~MSo@fRPPzm;iDTA z?cZH{$5Iq*epYL&T6W=R5m&&g)CLW$O{3Ndd@l872)8_IPbyixdB1c`mMq!SIS^qZ z#NVS-t!BBmo%6NB- z1&0Yp*qN#y0sW)$@rv8wpIBBEij>zy=^ual-W;a%M=%}_DaaAeRkzLp3ikFEN#FUHp zNx@(jf=}taPu`5m?qbG6Ic;I97^4rZWkhl`(ySH&WIgayUjP8}e4Bt;JlaNpZ=NFm z0&o?-d&4Q97?iud;e{p{4HY_jXic+Vo3XV?gE(RbDF=4BVrQX71jyc9Ngci+Ycl@F zF6MYZ+^QthBr(x*e^(+eoFCSv?H050Vo??~SuNI|SL&8&u!y|#R>$HAc$jv$*51;g znXtA4)!y^o3*Npsxvqo$TCLO({8+YAwLsdara^dI+bVZ1;E&WD=Ud<6A7nPw?iN|*;QwfW~p3_p$Q8~YS3sS#yZ2wMn zl5wAFUu0m@w2~41^%y-Q-8(gVWfiXEMirtWZSh}Vvf4)A1>VpZmASHJpd-~7yrTO^1`3j2#hKWqr zDaP%Pok`#_uu-tC<JZx%93xS z;#o=#$Fr(3Z||vVWY};K z2!~QbsHFiA0ihd(TlmV~RB4d1g0c`IEm{*(n0<4aT-T^ulKJYH z;a@r~3XKA~P_CHxdXue1lz7uW3rfOzD4_V|FIZ2Kk?*AO=oo}Z?X&C9lJcuau#><1 z20sJ1%eNvqZ>hQ%yo;uif00n+|L^_~0E5%L8zRf_rjopg4AQI8nR)Bt1JqkM;=Z)M#kRmHIliBOVkt0Uhogvm z;C=f;X*h*EpOXxdSCedl&|bk*Kub%1LK9T49fi+ z44ZWZbPU&)6r0?{b|fMjTu{VEMOVmxE$bB&mh{M$}I= zE2*dUnIRnw1O>s9)B|nzU9xxG^@_f*UqsQ(YDO*ik)f7sF{j0$Ew+d@hk&yr%96(} z@*uM$Y?1{vc;*3A|%a z+{A7vV2pnE_|yr2aWNmg zu~h@kOb=PQW1fm{mrxt=oiWJtdFfQc8ESxKm&Sx#?uO1`Fm;=!1S4>`!09?$D=J~5 z)uyn^I4snrKYv-tV1k5Z%?!hdfA3gL8(VWj26x#2-UIqe1yCSGc#x>Y~dGEfI?{dxH z&exXqU;Mo{+p(>nXtQGdZ%I|My&G^Tx7&FxU?rTpc%C@j*R(7b)Y+v&^BOMFp--c} z$TbfE__jok(fQ=R@u|769o4=`!}WaY@1f`HmhLeVs$Z7Fc!4xA;PiL=<>bA-Ld^Sc zSZSiIXFj_`7L%TX$tc~TfO2ntOHiS;y&RDz=Gue26n5M6>WqCfU`T{7z(i2C>D$OI zF*ztgYi-vZ3r;l@cO+Y(t?%Z=ew~7|E~KCidX-sDWA6a!5>$d5gHb7s`qbRInBBpq zd!@H0R}Lv2F%um;IpI?CeqL+1Y1w;f2DnY8Q)Ug?6$(S&YEKN%F|A6Uy%yWM{t;tO z$tTZg)TlHBz3N~Uby|$Izw_mo)EV@pKhPNsOI@4vBb3Ee(

N*)bCd)=_s`%!MVO;s$v>-HoWEnK%wr5_>~p5C-ye2%?xr0dFQEGb5vzE!N( z9oF15`e%eL2P&jz@fXII(Zkr%Kj6lBO|=C8bqzb3HUBqoEwjQ|Qn3ckvvR}B`4K{0 zYG<(WdDFZ~T)wh582v9$qPu&0`;^V}W~u`~gLuyK~Tc zwa@^2VMCs|%{T>NdD(U<*DbM3dKip0(;YHQP^tUvC8@iEa|A!WV#(}LX!Ejd&G=28 zz1aS76w;lPiHkEzN&O0PRV5)qJqg+oagNjtvce#6%MdP2u0Txv?-zo>;i zb4WY@T!>f)9B9t{FQm4TGSnN zj)Q)U$|gv#6SRsif|LUEv0;XMi-QIVf(xcjKaJ#Xj~2%YJ@*S;HzSU(+Hlk+P|?Me zz{%>!9S|H!qRJFeQK$+!1jqFk)A`EoYpuu{*MuJBo=3HUR#09m*!{pv4n5r9az)40 z$0qFOhw)^#wuTN3xHpy2DK}v|6<8V=%@(d zovS)ue*vezYs+=zr8!JwNJ&VtMq3X0@<)L1Ck1{HH)NbPJ%MShc4drC(^u$Vu*CGw zX0(MO-V14LjsW%3=D036qDfrzg1fNX^z8d!Ougdehz1wCM_U~B<#VR>!?FBY$~R=P ze+5U#+Y{A@F&ox#(Tgjxrv7qG5(!s&1}o?c2yILB3O%)Tvw}G9xh|>~*138w-zj(v z$drffPRjAZuJv5W>Cdpqw!MlBoR-)grj=<~)`xMMrI$0-#drjwPCVoU8CH~tV_ycamr)AFhGGNsQbu; z6O6KiJL?iH-bW_+D!{pnPk2u{ML2y3I> zcL4-nBk07aaL9CZW|4wX!6~-hP7v>`_$xTdpgb|j5=6o8BRQr-Q5`PxKry=*bx{#; zTe>T(bk3T5M;MN{XrlLe2@Ci43Q_tqmyCzuiT;GwQv&c}E}c_o(FuD8+iL{4fvh5S zg$0U`wT!94c*3$GpO*CkZCksBSaw?0M5lP_Mz?u#VR=a_duXK+d-EOwsyxG7QL(uk z$-uHviSOtx>bm4Gs$nAlYF|vzb55^_uRo=ru+YfwJt&q~c?AM*mt%gr?WnAwYgS9z zzoGp#FzJ|5he_q=?R}wYX-~RU*S=#5u;HS;f zmPRjX89iH;eO|^(W`LKFAjBN8hE<-C6-Q99PI)S?4=&MeNsX~u^8x*CZR(ifx&rAs zmG`OBL%AT8bO`Wf&pMYOpQg;Vq^C0tvt<{z(5xvO1W^1S)}|jRiR96?(r|dOs;WU5 z6COk8zrgN0Dn4)i2zy>?ILB+!BKZv}vXWC2#Meg;Q`hgWZ0Km{rdBKI(Fn*<+iIRt zl?&VnXvg+4F&|t6@Nk_+VpKbCC~;xsP06`xk;o9@55wgv=I#;e~(Q4(pm zD+J%cdb$#EcB6ms#O4;s8KsotL|>(OYk|~a8h6h^0=MKWQFPkora`3E&19bu2$>A$ zATKeZDIKvo1i)pqHo8<00uzX7&s2JLs|p47AMHlsMezuV7dF*1a}fm0ngiyr-Ftzu zvCl|I^HWdq?r16#9v!tQOH-#Yi>CE#M98#Br_|u?R8PA~9h|X@XZ{OLU@of(9)cO{ zYgx*C8*I05(JURwR0R63Bef-{O7#4@Ta~(I0E0~|M5@=2qmulH&)Q|orH3&UG28Rs=w%!U93CQ>NI|S+z5+A)*Q3^h!3Dve$(~#~u1rwzK;3eOldV3E2bXLn_$t zkB~lAXqTd@NO4+)tF!}(^NbsbewQ9P$@jonV@nDJCKDFs+u?X9FfK;Kg80-0@j@u zY6sb0iG)z;9GA#n$Ocaw+&kZX-ymM8vO(BXBW&igLDfEehPtj@we&q>F*PR|S{x3M z9aPlvr!?{uHi8GFCk(kbl;37${59p&SQ0j~mu_Xx6P4T20)O%6VN#K#1uPSN z25zr2IYo3v9c7X$Yz3L}K2F(J7aZmwTxOvgl--zbk^9Xq2_u8ZCnAh!Ta^FQz`@qR ziS$Ya*Yizp2S3!=Ee)wVfr=@vw)OZC=UDi7@K)YTek%jL$?R=_rcl12el2}HrC|xp zuiT*%;jR%)Kw|Dn7@Y(2IBWKM!zYP(8O({|we!+P&O=W*j;}XLJC^mRA_wA;5fi8Qoo{t)_lCLN z`aEX^?^fm;A0Qbo^z!a1lBs{nh>ZX>1b?Co6SFkhPb6g~JphkW0XDaUr}3YvN{P?Cw#om!890im2wqumc+p07`%vbh&W($v-(ake4hjzGekF? zL||9Og+Prl$E072&Z9;lJu0G^uGi>OJ5sdmAR1xs`6m-SRkXe!Opkm6`nxgvA586_ zRXBvLiIe)2!dTTQm=WGgG&8jp^?+I!R{A!B@guq}h8BzWTDu!Sqdshi15x=(BgE1V zhi!CK2N@4fOk2t+1WV3lxZpWlPh@HSHaPwtI(;JZ@K9pvPPK8e15r)P_<8|tuLm?W zRfz-Yc)Ta%-Q3x?Y>06{gH?ip#{A9`jcdx8tdCqQ6(#Z%#C8Kexd~`lwGw(4{_ZzuxK=CdPW`mm*U zvf5V=aE!YF)Gpw^>^=Kz)Jf0XlINNp;&nF}8;*{&B4csh>*n5RF<*HTB0%XPnH4S7 zn5}9Z73cP;FDf>-JDvC0Y~>w^YjY+8X22~y5EwLzs0u$k`6Ay1)Zgo5X=p#!`}EpQ zt*eUp5tuMNQAB}zet+slU4bVQnC1W^leqR_`&A=tNKJ`(~~XJ(5Fz*vkfp2}#*GX3om-`?X9O;VaX4$tYx@V{N0 zH4{pE#izmm}3#R+R!{%U0~gSSUy_*?1*d00-4Yj>6<~>xII78Df>Uv7lS>t5ov@1! z+$7-gU8tau(3QQoJnwVX&9LW7*@5WGJ9_1a4^AkE59-0eOa^!V z0wNDLgguF5f*S>+bOCMqZ+9q*oT+X%c^i6k%(kELxhtrB6a-!OL|UrY*v}-GFw_iE zeYn-xSEp8(7Rf>j2#tiwlMF3*flnTB*Vr?^d~Za&4KiIv$QzU#L>b-0%E=FUPvFpFE(Ri z5MKMBNWkAjFX1o7)SJZ1jq0bf7a?%yUgCLNdYPi zJXD1@^qKf+p(mdC7`sj;-Dj7Wv~j=(M97*zw=Ja7^iOZ@>0j`xVd?%fQ_`7bEHa?* zwcUqf5I+qlQV6#-g_uyal$qg%lecW0=5~3$2UqI`1cwYX*$)KK)(4O3yh6;iB2#WA z072tI&mhk0hIhBad8Mn9rvKaJ7ay=pQk9;%)0L5}0uQQND!PEo#ImZbP=3&DVLCLe z@M6@_h>APhW*DY+q9HTCh&%NZg1bagte7DPFd=u;NS&hg9=P_h z$KZ4OSiUo2(W}(J_cXyR)uWyoc9)p$a^Jq=-0qp4lPNo0(^g9{v4CMlmoefbgUL|Q zM9=^*Wk2z?>O8*S))`xKr`$kI&yHfSDd*<~me1h=5VuFuCNIwmqk=mLk>OjzL70QU zwR~T(51nn)(ErQN!EfkNnfNDuBaZ8}+Cb7a75>Z9v0-J-aYm|H%sE|`Jhe3p-gbhx z0T#yw-1EJ+0kVLMg%ktu1P9Eq{aX|FG}c9GH1^qzRTFFdL|c7|B+m6CbuV|eSnvT! zj&Rx3QnN$}gxs-6Jfqzm9u6K$I6DvS!SRLO{Sis${Y*E274+fLG9oc_{*m>jIahiX zddJ7#+;{%Fi71*=Wd0TBBTyPNEpO~gGTXF+e`=z2aGTsQwBHLx&En}@YgV^hRCoMO z0r;)pRv4L!V^9>Exl3dk$Hy)8G#|Bzd@pg?t6K*<#WmM$aiUOAQdB=~TcqFIb&PUi zM@v4#%%oviuY0wD-O^Ofe|G9#?`*N)li5fA%rYVM?-;Ag#ogrgjXhT5gt%)Raw~f(ykY5q_hh(AR}55vy|-&I=|i1BJZ_p*dF`!2N(vF?md9>vQwZm0 z4wTG~Z$+GMb?yp4@l!H+@AW{F4{=t~4*nrQeh)YO01OP6x@R#%ddefn7A}p}bI&h! zhz)b!D_;*K$%bsq%vdjrjkZ4B*H^Yuh`IF#`s9~Je75vJVzgi$;$Rtit*B#wc~G7& zUIJMqf*t+&2x=p}lJhjxPmla-WQSuXN3`(Cb-mvCnNz;X<-2Yp2WT=55(qE`P*BpQpf|R_1;en z-Hu8LXP))kWAC(FzW$VE{pUw}(!fwFsx{Wlad81x9p>{SlQ!ADt?Svr9CeP8Hy*-` zTuI`~a2!+63vXj$qIWL1uaeYsG_q8|^lj~+FX*0LpaXeXHFQVu4hv+@I_3%id|1vo zJ)CI!vP=0I=strLxCkMK{MTBx7+)Fo&lU$JMTN4l!0-(zEeA0T+Q*8PCAiD-;F3rf z$Vl}OXD6D7M*Y+zfGfo6SX%1bbdVXl#N1b8k( zb>EZ7^zvllhhkD_O!h?EhzY5Nm6xRed^X;Qt}RsRc^dtN8W<$!h}`Ap+wU}2Wqqm7{SzUPheaaj zV&?Q+efI^wWQ&ZjZ=l+IuA;>xo?IEeBjpQ;LP1!EgaP~ z>@05d9xeN&IP4;o0AmC+<=zxq6B$zQt7b+ZRH3fPw+pkC>54(V7Wz6KBbu96QP|+!-jpH+4Z4om_u$|Yx3J`)cUUYzf_NTSuNTr-Mi5z_t z?jKdA;lMhaOE_FHh`0a%Nws56S6@?#*9dvvMwA+xmty+`o@Jn|@Y9}Q#Ilm92fNP& z&kv0*IOu`4-icVMW=dPO^wtYNmihE8biFwSfga0}P^LWLZyBeYFr7P4(}>7jSp7N& ze%>tR=UAie#D~r{s*B~C8j985L;(y(?0^<_|sr72m@@=eO%rJ8GpcKE*ihtWIx=TboJ?Q+PCs89gsp|Izw}z(E@b zCtwd8)?vTA;~>}KXrVijZ%31bY}=X8TU7Ve@AzC#=!k*DNd1y4=uqqL@Rsr9ho$)j zRbqQ0728#1*qH1ro2lTY{cf&3%!UaN9AvzjzeT-&_|pLNKq9&xr8(rT<7G7{Shn60 zzI6^DT8iqwi5scb5aUYON$K_{1hH1|SHJqE6Cq5ph6>Ncvw!je9JEAnCv)jTkyV<- zP!hl9s3o})d;!!aF%pEPHjI+1zy%KTEXzmx;_=vYN5e}A=2dYt;Ymdc3@>0S-bF*nX&~d6$br~G^2~md= z2J=0j;|JLEXJXNi5$hw%&#pp46PwkU9$25@+-0o?y^@0EdQRDEh@cJ(Y6%?it48Vvhd7*oJx@qN z^4Y!d{_gJ8H4jWH$!z89iLx3@akPW(A#WwO(2EB2ifWXB-k}}}lGK`#JZ)XMr`yXp zT7sVS-yBUGr?#YdYXTmXA~SE+S7Se|zk!4oyUa468po-gR^P31yCSD`CxK-%9Iz+5 z8ERv7Dc1l-K)JuH0}~3c#s=xXN(qY$>pl$$QlaGeHQ@EV4hM%47$;5uX`;IPw=&QQ zV*Jb}z*z0fzQ7`L;J_Hw!@(-w2(pjX%-C-6zH(eJ#%1^n>JpY5#t7%6sgABMU7VdZ zn}&?1XnsGxXb);>w`EFCN4j#>fLGHjM!z~3e5@??y)!9irDOHq3{S$mwkUG z4?U10qSDG?+Y)wk^6ezF94CLsBxAMXYi_>KRzxgenoTriP-gIeMztuEtcl8tLF)R% zj{v!XeKHlHrY|XafD(-}xuS9WVD)@UVQb#1VbGtH`?P?uvc~lHwyNe@K@+(1HqWwR z-WJhbVpixsLPSxrrlB{Va|E z3C|Ez&6G}Y@w?zF32KlAVkooJYpSj%m+C^xPUKfJ6PtjlwWA6W<8HBeIQ&!WZ=~Q2 zw4XBJ@M-RqxG#%L34va-pI-poK~?{hT=9G;pbe#8a@YRO{BjSjNHAFE)wZiswZr70 z-TZ&kb&-zG?h#F%OC$cti-%M+W?o(Df%V;iD;RG3qQIF8RyF|V7t6h1Q@H5>d~rq= zXb7Coy;Eos+}%a&z_=5Wi9Yfbtyf<(3!KrnK8mx{Zh+ZQ0jS}stT@Z4R6lRc$TQZw z>?bq&tDi|%%$?Qy<#iM;YF53M;u5Y?67#I^SGsKGKz4a1jCSL&ozMVL>4};VVKiN9 zanQv8Z)q6sn}%ppSous2dmsKFL-4qS*1`OPX3WVxuUyv4>6(X6X4`ex!+?aOq!xIU z+@w#b8k!X70etcxLha1~Gpa)AqnP|<$F?0W$o6r&^$kY)sO{iovZmnRy>rvao~tS9 zoS&5hoO*@Kw zxw2oL_bmgx^9LcExE$i4=`#wKM1>?xP{Cf1LVTL;E zi;!MiGp?W%o%IleP)K1uxT#u4gm7O$r6@!3EcKgg5A{C7E~K%RkX|!|%=)a-fe=Cd zNrV^@vGDH;h(zYoCWvW zMj(r)Gc9ROYK9HN;>mD~VV0B}1{f~p=tU8gtolF~i%(OE>(w0tNN(l+a+oI$th)_8 z#b;j~FGx*E^h0i$+Y=2n9b9|kS!Xdg(0$&@3BH!{r9?Ir&!)eQuwT=2X+9-DZTPi(`UWP}}UNaz+K7KwT?#?(t3|b26cj5^?C4 z15EA!uvKATSq$pdrBN^5E{04?_n?qC7S7wGEQ-01mmQV>=VNav=OVCcf$E@fOHO7Z z{#aZm_dy~}s{(sh3s-bADDR1$1=AI3(HKeZAiF+yObo%t&bsYbG& zQ~xwowTymw)LU4>*b^$B{Ny3{`U60(^A?C_Mvt)Eka{TaFBA{8!c%h=1Q z6r}Ki&Qn3h3^Gs3mGrFE&Rye`Kpp)z*d)k1yap^ZvGm(SgAMB|dV38?HBmd0MeJY} z70}ZJD-JY1P0ceP@f3hfuBkIMzDq`Lr0lOe???(t_6IrzsnV{$sA6%#u@^7!uc*Oe zR(K#9VF)F;-FV?!gwDi#g^xt41v<{*8rvmr6C!6S2mgN`Ro46(tnIA7d_mJi+v#U4 z;^9iBTb!zDpfLw5el56~6ZiKZ%l`Fq^^#&&5!cLzqm>L2t2263(wy;4=jM#jm1Hz%c_etA!u;BgWV+e2wQsXEG>^U!51@IDgp{Ns0{!Rm$02KNHfhHk39wKKsXY1q!Cn?TNHTdwm82Kh-dRK9a;hAlWYMvbscio=Is4yJH}C2^qas`t|ex-U;oHkq40KTJK{ zoAX;%%6|JXB5AGc!m^3qH{J>FQ%y)K5F~Y7?79R;mcl%X#L2rnM^JA5PR|h!M(IW3 z;yty@A%jsXhLll1E%L9_$aN0Oe4t|0@thpGB4y8lU^o6jZT#Z6yXBm_X8Q;Aj; zqt+~Eq4#t1!|V0pB;uvt{pm(kQvaB4JD)lSK+-Dq&F~ z!1C&rse?#5Aj36{RYy_40012+Dy?u%f?rty<*oy9r=PU;r}C^_>cDQF8RlAyZ(tb& zkjk#L2&>kVcXt8iegG7(glj5fKRwv0x=L!2xDZ99{8brJdS{_ajZ0^bAk7UYdeNRj zPObuO#8;iCQkTUE%!PIjg3P(50Ht5A9x5d(`?{!);)ZAYHXK@g_Co zvQY~08(V9Hk(3nyxEo~rmm8Ndy5&CTJLHNk-u!1AMLnEu(X^KV{D)gX7pa^Bhf9~3 z0Xbihb8@i`CS$`((d+zRYBn4pFG==1wp?aC>=n$c>8f~=woE@Dhf@(DY;mp_)7(8% zTjKj&yY4s(1%2K%DAM&xsq|7tCNoTQQ2__F7Gwj1WbOE^uWhPITwncbc@uPIm=ue^ z7__A}tI$kRs3nq~++lI|)x2%R3ivA+ehQ_pFqP|29`6EjeAQeW>>GSS?u-T;=Z&xC zNE)*S%U)rIVxJ?Y%=L-4q#HD}HI#{;7b7&gf?3{8*Vz9>l7|cn*BL;`e=3K15^P@) z0XBlGN*AY9<0fI0b_f%d(L*>5zY=245+Q}~1&_{T-*P^4EcIwsl~*=`9?FC>j*?Vl zGiQGsPV$-X^IHP(ROVmV`}z39<~Duz`1z@)c&5Jp7dukE;Ha_;_mdC*CJHwj6!EO` zK$xUND0PS$xD7}(^c{^8vDkZI-=iLZNwOK3(WCm+ZDa@#hA@`V%qFg`1OeO2ejQy8uvWs0?B)UUvB zu-I%-z3dGY#8jtgiyci=A`rH;w%Ht#kX|Q`15bt0{LbXp7h%5yB0hG6!!GWCCp8s3 z5y@o){dG(I75kh@tt`;fk0%*OvNO(+O{ z_a49>#bcpb(1B%u*DHVo2jYNf)BtP(%$#vxK@*{>FsNjz9%J3F73)MOoMrL8YM zcy!Z@nRqb`e|>iJ*}&gg1DmwX@4oQ7dvcOslGmv~C#`|C>={K`?hI=qu708n%bcbK z?+wLfqSAS~vK64I8^GtGkzmRxK^6ePJzzS5#j$n!$Ct(^stvE#`?*!Z3m9-3 ztZ9x2`qpN0HX)IwPep$IL3Ex=>xx;r=zH{LGkgD5Iz8**eGeQr^5Bc=Y_={7C;tE0-GVfPioC>Y7PLB)t^)mfYEJ&Gu(6U3j(>Wi& zrs;W#*BX;+duY#M3IblUdtZ*T6oH3NYU znwd2tU&%^vA#{{qjOM)5RYj}9oMBCjyTL(WFeR3%cV^m3xVOZxof`D0csd|K_xTAM zMHhrQyd9<2aamp>ApAsJ>6fNUcVynX@EytgIU|%lI=~BJ?7wHUUQN%p86X{U}Y5Twq&lJ zqeZ9U9E2X6><+!rXYZ^=D(hMTclylwP;Nr25d6yF$nRX!k)wc3mD18hF|^fYVuKe+ za$KWdN)qy6dW5vEG+v-XTRl%3@wSN&>ciB8RN1uleM22On+?wzzhkjogfoZtb64^y zluf}TBcU8dy^YL3>@t|zmg;Q6@vk3;8eQi+)=AOEnRP1#V#>)&a=^B;tm64NF4uk; z1Gg>oI0k_zZ{WeNQYePJ{6fj{8!ov$!VFa){efygXlri5!Jp?A#Yz(LwDV=6D5(JY%;H3jNa?yrK_{6-u?JBRTJK)%wHO-Jfl#z41nUVAp{!CJT%7 zV+P0zkV)^#aOd1Xlr8egEgw$>`vv&S;d@SNTcw8Lj3j-vlX^p$_LL}S$aiJb+&~hb ztP|Bn(*8wKd z=qv604Kj^4K#A}p6*Z*p*&_?jq@5e3wMQ)6bL`RJ6Ytb9FHKLT0$oa*#>dgwINV~D z?K@6pgAaF+1YK1xG4yRI+vu!Dad;4M9T`u10P>v`WXbM? zx9A?GL{uFlpOALh`T}D)lNeMOT67j1MoRh61xH4xPypt*<@lyc&qi|O$V23wq@J7dkid#^QumrCSIfi}+~zuicaRTCJKug?e;$C-{tE4T0iv%@&M&>5tJ54S zaEA7AV`IxfMi6A6(9Q~)7So2%RFUBhA}TL+`9#N(_`MRa)d`N-e{-3P%;ym|bs6G# zt3hZ?wE}|imW?Ws*}XlBM{nqDa#Bq9d-A*hu)(ea1oA2%eo+Pq@>z7-)1M8)w#T}u z1Xg3*-Oc$=U?ocD-hTgT2os<$?^foGA|sGQH2^|S3Lh>|r|r2wNn$AF#Z})VMTxFS zRQXN?2q&PNF{*-aFWr=zU?3@U0jEFJUcu7#UK+h`{V`@Pzq(tN{mSyZoGDAwM`pvc+Ck=? zG5g&}n{ds8u{~U>V$nH@eK)w7qR?VSe;n~E7C~3az`kzMwWf!2^??@rl1hZBjVWy4d8_op_^`F_P{Keviyd>T~&%BQAbptUfPajEt}ieHDWc>x8g> z+o~qdeN(EBeE#F0n=+ zK2&1mLDiNzX%-alRNUL0)rdBB<{Oh&)?d;-nTzWn<@0s6wltqCziGB|7iM3d2qQ5M zb^8By=KX8h$R#61!+Jk%ZY91w>A^(Gx!(118D)8=)IDkp5Uo{Ex=S0Gm;_)l@l8%H zSU4L!#s4hKVvB)T@S`ofZ|h+Xfud3gV$o!z(M@C8q-Hfpk>EE|uL&-4+snGu%r^ zYXq$ik(dLDea_jLE`6PXh#%~DTq~nFv7TYMX~M!be9~>nxX3%|lkLWe1y=}esoJbF zbyb=aTN@dUE16eE2v*x{)FY2Y>x#-;eUd&EzwAi#XNx>u4sKt72Re1zjnq`W=ZBIl zkzoxM{CFft>1vc9{J@D+eaeoJ`)cl8jSbLCZfDy`D;E9BIxG`q2*TST@~*k3F6V!E z64$~UZ4n~4=YxV5(qk+j}8$YzLGi&UG7RH!h^NReY*nME^D$1QGlquC|2`SXgIop zy+QcMRpLc?DOo5kMLF61{Z@%$7!lFt`g>e-#QF`^*m1@y^xJ}xx9B2&#|#Fg%{rz$ zZ@ygzd$GnUM2|9*7fu1iD#h6ItfQ;+qxZ31Y>C_p>0ukR@ZTVKsNG!B5U_j z9@hCHo26>FL>`L4KAH=nUcjG`~Xkmfc@SDnl%Sq*Bm1HFj;vm=*kntWV1= zs9?LVzV}at3$V&G;zL*5k*uSX-QaEW)zWzCPpy%$UE!ppZ)(I3?edkH>4+h|DWa+s8oEOl-t=c8Qv=|jdT z(`Y|)GyBfqXUGaLLAFtqWVCLWDcA57W>)4C;c#;u9QpusD2E9W6Jp@a{Vak<^`)zJ zN7C>vSAKtVDq~s;K1|O&dn|LeF!5$eT6HvT`M#e&6)|4F^0?kBqB>iVePH`GW805> z;mh6+xa7-j1Vj1X-MwlQD?;osUzNJJ7MSjE3~v8EKo!DtQF#^esx9!^CCEK!IYr`K zQQ3_CZe`Q@VF+Q8^F6LiWgF?&L>6*vG={~GAhEf!9-fE*xdk}Xx9`O?qUTR2^tZW8 z4$75?DzDexfHHf!{@uc}6`?<;@J<0!BQ*#KY{AV_pJVfT8wR;a3uCW_j8C<}&R9ue zx&YqNl(lTJB<4cL)KoXNDPdzNCZ|#uZ5HCqzEDtXBZk19t476DH>fJ@>IQzcz(UBt zkTk)#fjKBgyX#&pL@VdC#R*7Q3JP`;SKI(Nuc*P%SmRS|B*fRrpj);El z(YXbRB%D8K(BYb-e|$epL@TTB;hyew$*7TLlzFs2Qu9y2% zvKmaWAI}l0>b_?LA8fB6V#`((zQ?O?VYR;>w-o^A-=;7Qp>hLkio!feA};kH6GXVw z#Yl>&8!qQ{s>^D$9TQtcW0GJ0_>7JIIP9|L!unBhBbZK<>JlVS1muxM#oX>pIW4sQlKm2h0c3i?%rIDzy-wv? z#DnY$INZ6@%+@`IALn%aYPE!4Wx@s6WnNd@7d@O~+Q)ZPRw<8?CmjFFf-Y6lMvVNX zy+XG+8t6GgOr|-aoTa0BB1y~R$s62$?S?gc_}b|kzG%fEg7gfhg~>YSW)@kc-|OE& zAomvN#4D0S%EQBX@!=4rz4e~wi*ugJx_7S9P)jHG0S8eG{o6ffg$U^+@kEf7!G&9D8xv^(nK+y-5$ zepyX(u_aB=!V-@mGh|4wRyk!tTw$fr+~pJtl`wDt=>nJ6PnlqpY* zk;e+AfI-jeRF?{k0+@Z#Ojil6-My_BmOr>Qeijh3H1Uk)9L_BCR>*|>yRU3KkEf6 z78oMfg#-T?j^jEZ1}s3)v~t5GCcb;lYv#tnch@-Wlh5-G`;(f6)wW&o_Y)DR0(9)! zi|slJ;UQta?@bKhJ5nv8*L+>ndcwkesa}Aj#;9f2Vd5+X1@0UiTe2-V`~ubi|23cY zxjswmQl7$4i&cCddoGWaAap;@Rm~BfwQ}zDHjle~;(w5tirUpysKMtT)K4fyY>$#O z%xSIcoW~Fi_n2_;vB+$ zVatNme;2QXz?Q>ZCd3z4{6WztaubLx33;6JR^VuQ4fsIA8as-e#S{5FijK|l&9rA8 zYy|4YV;JxU(rixJM$dC{%d8lt?=_e=mt=3xZSzu(m1@O@p>LeaP}ejAOdr7k%FebF z<+%EHsN^OQs7wsszFi)&WcreUxvLb$Whk!^6b3b7%f)ZrLjCE}=e1nYIyDEgH9H~) zsC_!&z>Tfqc%R@}7=A>_J8qboc#C8L(v_c%xpPC^#n#YXxZaE43@-EeN!r#)@_9Nrxz|8yuF-3!fmr@Y2=BbdSO6L0jFLBV1T z(OEVbfAJ6&JC9(ebB;<{SJ1sba!EB7MmEl{s2J;oNFk~Y7xyc@M{<0^q({ytFEWI~ za4-u#e28!>Gu+5roNlICbOt1>uH_6)WR$s6Van$|SU@PbhuHH-M=f)Qh9`bWr+W?$ zd?w<|ALi5)Z1b#PqNMAutz^Fc1YnUY-uh}Dzl^f;&OWV9!Bmddjg6$+8^l+qed2tJ zf;lf9h1rWwE3 z$n+(2`MoA|4Y0`wjnQSfpi}ez^aCSMGJ7Z!m@S_#+#|E%xF7#ncwM@GFcPn@2$0&?r&4t?3r(XEW`Pc| zv9GP98-oJNtAl|$x=!gHA~23Ya4Wt>bP*Q~#)Q}TWTfmT6QMa&Fm&uu9r{*m)P-q6 zXUY^17yFwSp&1fH##lA|QhQj?2PgdQ_+sD@0up_-?;lBt5Di@HaVBkW=uL9G z<}W%rQ|TymZJ$N;nWylPc~QtjxEo5PTEVMfNYy~*8OLmg+3M8as*AwKOfUYBCwgSq zTzd2ndV>p``SeKxWmQtkR*`xb>6#7r?=+Gw_1S)Vzh=YTbIMd@u>ycXOalACb3LK{ zsrx;_)H=9cz+UlZEH&@W>5Jo)1JdZqWCcD(FQ@SViqv$7fq}Fi0S6WTh|P2Ad|rUL zb-Y%UJG9Gpgbn6~2R6&=c0(A#?BPcToUyyEi;Kf&8v*B#Ag-3RXS{|;e_g>0#vqh} z93>c%PWU*b#UnOJ!zj9&+uy>5#bCr3H9l-c!HBfB-`n zU6vo9Rfk7D!HeKVSXWoBkuBdg;uO01CK|`qN&)k+nXSWcV_7COn_Z?jYI6+ivbPR6 zn*u;i>>En%u+z$*#(ct(e}|qP-cVFCvns>#u(j1Eyg%a_Ln5?b@z@oCyFP+nE*hHj zI2p#F2`Q&0pbw<*K27k9T?dw5XsB;4oOAOi@9(pR-HQaoRHdpR(PNXozxO2vo2+nY zilZ){H~R*j?x|HD_X&9$QGY|pe64{4OVi@OIK%&}TIXkdR5nk2ZfX7Q?a(ou@20uPy8ecninI-B;g0-9IxD}Xqj1mz9z36% zwd;MbORuS&w>P21jsh4@KW?chx>B?vhI(6NFG)8E8T+%PpsP|gF@ZjBeB%*px+QU7 zdc#Jdo3^3}ru3S&ztKxP)nPnzjhU5GWyHzUeHkPK4Zu#%p#~{G4sq|H4NjcAYDklX zve{eGq^i3XyE?* z&C2%v@;w6Hj&mFy9O=ZupB$9Mr&ZGKBvae|T(G~|%{=7cI$3OOcwZ6XjJHJerNlf)=moQ@It9`!?MW;OSBPPgdH| zvvM%hA}d}vDEnB4K~qI5G8}O;fcv2 zYaZ2iUJI#=xLEF~4Mo?1pv3fz=9l$*Nj2(Ne%bMl+QpkOgWt-5g&1-PRYaNsqfOXh zZ1`rG2q-)dxPI*fog9|$dBBV z8va*^E?JN1&;ks5zT^R>l|xwh3wS&4OzPZeeh;i9_C>4sT2%o&Z& zG)Ad>^zS2)brl_k^K;K=Ap)&#%4`@evthi5%#AthB?d?~ zvYOU?4p*}p&~wVmn4EsSUw8m=-+)d!<{n&8M|bO+rF>4IS`IJqJ9T*)pPW>{FI5%u zXHC!3ijxnuRstsTOTJngc=lfDN_9fZK>jNP+`Uhrv+AT#bwi{)tHm#qG|R{iGHL{E zyGiui*5yEi#$om-@(_53Gh>{C)T8c>y)}eYj45R4hLObQGcNYz-v8@z_ugLTg5d18 zP0G>Pc^L?vDQz*)3vNj{2h;gDK-)KIiLbS`kndy(5e6y313Ui1DBRsOK@f@KE%s* zv(LFJXcZ7#=(8 z${$Uu&&-jpkGv1eG07@T0UU?x%U6qe)IfvfS>c>oZi@)$&7xF#C{oz_4|}3GRG}L0fKtvDEiLa z2CQg9fg7Pcm02=rR90!``vE{q?5g%uTy8Kt>;LRLSf5|6$t8^oxKA*K%k~M)w?Dhsg37-q(SZ2O#K36lOlldG) zsHlUO6$rP9T-rE?1xVsUi_ur=DLSy<->CMtHoXp8Cyr(VP0hh9f?etl>g$ zO!B_aT_jzf4p5v64C1=tUFQC8*)qKRMc?%s{4AxWF`6&O+Tl2pS5k$;NcjpF>IydS zL=OiQX{Fucqjn^sN0`V3F-I$QeByPb78i;`o=BiCFgyuJ*uZNJ&Uahwvr{P(%8y62 zV6R(iqOzL>K8|^Ljj4)pYp_-`v-qpJqVM=0?MW`2&KPj>VQwOWpB&7rE7`Q;))43D z^d&4v0$6OWIamsy96@UyD-d4H!%gVMvv(A~B*X@>M7bj(Q}L8?!frvlu^((~ch;{( zNGYjWN_CD>#i?9*olD+qZW;5N=SJ@A3(w%uqWH1_w3z~0WtlpC9XVxA@fjaav70QY`!U0zQtdUNU~hInh-w2rE| zMt^&IV2CrxD0p0RfX*GfjHY(@&HYR2Xg?W08xpqiCK3M#&%=WAUpH*FE*;c-k1Rr{ z1QU9Ky%*HfLSGW+ijqcW&V2Soj>pY$U2tEsFbO%@b3muP$-~2=z}_N(AlFlvCH(<% zJhw357t0phN+#?_#HEhWCAqaEgpCJWP^x|nz)#7I;OL3Ev!@OU+(gG3)!6K+^-FB< z`J)-vnCHX|RjMCKXSh0UvovXNnGfV5eq&=<$3g*Po$qWMR|PT|9+$$n4`o7=->B~>$Ln*a3$QElX> z#ba|*Qk@Nr7ut|+C6S%t`Q(b~1wNI8sb%&fE7?dDRtZ!fYM0DC9IfR>+2=iL~);*)?G zCK}0&sg7UL-U!hZa@J-lW&wx(yYqecK3Qfg0SYdBtLF}gb}Te+Qu3v4ST~-e%N>WL zeh_W-(Tm1%%#~>)&>QrHFxj7INE71$ym@*1WBT0Ig8`+zKJ0Jo}-Y&+Y6~ z*@0oNRxIBSgK)(GSF78eLdC;6Ip`)-E~tVpw3Md*?&puUJDWZa;9|RV3O)VL^+QJ; zRt;FbFt8rV`FRe=Baoq8RADvXj4ws<5mtL~pN*6#!5hFTSuDE&jKy9R1f6ZmLcEN= z0R12^8LAOrbq8+&Q6^K`6Q2A@fl~OY37Gro))ckMY$XWSm5&ZmQ;?x`pf2?mWCLYT z$p%_*rA*tr1lz79L(e=u!OV%u1h{aEJIN_ZZkmx>&ZlOJp9WyiOp zL2aV~uvv^L8rhy)XIbW6Q1QM5J<+Zo`cr3dM{FsY?|B~9jCWCw^&TT&S)*&W8r$LHKuVwv_j1k1v@ur(q(iYp9%{zXp#N4yvptp1c1d-fayuECr6#)eK+DG0uL-5>b55_0<^f1bwB>ES7NnMl=1!o4`VMekOaBZyEh_p2S zYVmmDI+y8ZdHrm2?Pt++UVjUvqI`O^_sLFfWMl%V7rrQk{*n>Mx+lwEHJ%pk8L)hFd1%mBB zl~wqjrV9|6Bj)f2h6{!mjOL|S&yAH2^E(w0A51fA-e0LR?%#%{x0__raWrh=+zUBO zm;I=?sU4E)4kbJ|U@+ZVb;@Xe-%eMj96OyXxBnSQwG^(Vi}$* zqV`>VKuVViwEHDK0i;SV9d^}E<&1QihBQEKcO0%pSd*F!aSyx(yf1}bWIwksq4G9G zi%Uq*^M-E5;$6TyM>l15dUvB#>`coS#WcOYTwmZ~H;k$^*NrCdDA{vMCwPw@ByBv= zuj>W}ci=%RHamIozEd9jlz7`xIPj~l?Z%NZ{=T@Y;*$VXL{G2Yy19@DyD{Z4s9&N< z=+=g{;oXMW2U5fVq}DeX?--P+87qnR{iDZ)qqyBmd;WcULX?~#`r6J#yeaN~;lLDx zl&RkO^Fw8~tfS>hpCVP%1dy&3gDMeL^_|$Jv+HMudr2<+PE}3$zA#I%URgoZC|s1K z9D;Eg5S6m$Of7EiRVg$Li7({osU2w=fSa>$fyOt+S3-;vU6qHZh|gN>%Vn*en@HsU zZsba03@=7K#bp5=L6zo)`t7KN!}vQSh2%Z%vgSdyF$S3rk`{Q%8-?RvO(fX~maGy0 zdlteZ2w#l;R#Wn0_{)c^ALh9F%r&Cmdzy+&K<}w8+IwJ~!|cm|?xdrnd+MR-WxG_V zHEYmGk?fL7%W)44T;+oF1uZdsk+9gZL1EF{2kKdyz68wXJD>-BY!yp_r)|6=9v=wT zRYPOE=RBn4ZPzVfvL#1>u1^06v%CJPn3+QJyj1o)E-U+VSCD*HN;^<(tuFSw!3x3k z*AF>wP?I!Tgea0{HMQ20VQeLpO33S6Ic$>0JwygNEf}<^@Bx~66WRA{b|oJWDHomf z1GX#r)dvHlfU^N04uc=1o4a*hZDGWQMhd^$6Qs0z|8NkQTPNDs5SR&>(lI(<_WHkp zcTdweGB>J&HIni> zYf)PU4nF7xJ3X^27G$NyfyaG^n3^q-9w~<^h#NWk%#o5gwROVK+GVgb7^SBdKP1Gw0+WAaa8kK)5 zFb2256gLhwbFe7%5Qmze#XNg3B;DyyY|k!lo1coE${MDB7Uxh8EVcCwM|1Kvgs4Yk z_J6>)D~#x&A}&@RxKu_9D5t9t7I2d2gqoldAtL-5Z6@JnsN|J;)rUtbm2lN-XfJ2$ zNYOntWb(oQ|1_d>-DiQQL&sa*3ZV%+bvx>vW63i1LnvFKw8zqBb-%u~6Td~qjq4Mj zMqM;U`+r@S6P?P0a8HcPVQA1FGkTS?!aXBZ6SCu{Xv!2^>~^Z$#F)+f*Q#{|6sohF zn{Aq?_9>SAvl_8h4BGAReeXy2ZQk!FXd;P5hvyTXHh=b|v5B@XbczCXcfRmZr!la& zQ-fAEU!pj^#{?vzz$v|I&4^%YopGRYQXrcnnv#z;p?&6eO;zYcBYdk=?^E<@@+{e+ zS`mk(Eoo~Lpjkft^xIRAh>kQ)z927qozh1f-LR6Q^x!`8swA%XHN2!vVwUx*d?P2T zM%Sxm#Xz7~;}J>Igb8`c5Ib5y@Of3!0)NcL6h(k3vz2N_k^=Nr8dN_;vt<`O{!GXg zNz8I=HfwJyh>(F6 z3onv$^zyO;Ezt*D75Su``b>ZS`?2no#3-OX0%;`#!%URbvDqV%r{V~|#xpGmhx}ec ztNrCfuwwA>D^-u_v_)1ctvGZSIWEU+yfOnTc(6AqPoZAL+b<})REtW2eA@~oY#5QS z{XFT)94(E^2-c|J>6p}eD9k2^R5S54jMqb=m-NMpkvIkgVFPHkwRQvr2c}wL#3zZr zhLrfm)CwrvE6@P59+yxw(c-lv%_9T(BXe-*%CAjL+PE}|lNM$(puj}4P{`Da7Ph}^ z1H84W8poXa^%j8YU;ANpn+E604V}dWEoT^biZjPxlm7*pVk%yB697!=^ZPx^0Iy*> zm8$X|1qTH7LTm9!o;YaY!BAuYvmeOX>U-eaoX|8NUUu`Vek!64XFcT#2sI5 z7WT#K@+b!PaNFVeo0#~{N2>;(Y`-EiRO?Z%M0;OVfs4x0M&%?>chVZt_zF-PmDpSt zLO9r5609XDO#=cMxLau$h zee3KDATGeprp;%WYBRE*EG`9fAy&nz!qUiUn8sf{orP=Ky0>WzgHr>HHlJ-H$&C=S zI<%YnVH2jFHoo!fN0-?;c{Jxh|3QBD)CGLYUk$l{0yCIz7+7phN02__B}8HPvT&Az z|5kCeYkUe*0G5zjU*8{)ZgOLw=0qK~&l`U^Rd%;}WBwqfk|-;J20+Sv3xz9&wL-WR zt%J1fBSajxQ|*lNWlSVy*ywU2|JM;T+Hhith)emg(A{i$Pd3FojG52ci`*)^oa&&7 zD4P(N`hC-@SvDX8stnNB0Kr?K%x190w(@J~h|?-`?HMu*d}D>JBGwTW8HgysG+dZ3 zJoEfYsLr%Y+)k$9+W}ye9qNYl{v8p8cb0CP`4eDPgimwViZ6P^Q}ZM2-^Z+N{j5~5 zMt{XGHVIhC)jm?CR{{MRM)KL6FQ{Cy6VPiAiyXHPSHiKMAuRZ4#f*Z-hu-UH6}S&l z0<{1Uo1*=tA^`AM=?9&pnYg}l7A-FX>Ti_lGtd&6WT=>R6wKfNjP8|`f8cf#9pCax zf^dMf_4q}fq_Q*yJmkSrMJty{%JltZFU&rmEjG8sVAn;Bs;^WT8fE*aBoE+h(YfUH zvnt(p*)#kZ^h6*i{+nRb$;KMl9fw5vA86J8IGU1@q>dgSttQrU`*}rYu9iErUt|AVA^J zIgE32eY71`zR9B*hQHsvkKp&^2=O-S=R4Jzumj8VpWJWx_=mK#6)bzy%nhL4Q6So@ zNT9zEdM*lk(|)C`=f?LkXa^%mRra|={Tb3dkUXSZ$|^bAa}7zj;<%@O8-L!rEQ|{< zRv5|eojvA**xbwkAF2vggm8*P@}!|36%D^oGWP05AYh-Thom$v(v;LJRcIVwoq0>w zVtF#eUjUSoqvAK5jTN9Cs4w5_iZ00&c}$jlkY7DpWfSIkDe?~4xlfeBg~!0&UIJ^h z^Trw{vZZhIC}gFYlcYI}xh_k;IPJn5GlOjlX$=mWWaMtH!0=@xtp;k_M#zZMWH1amXCG2_QS(P4l`iCun){O4 z#PZg`>DqX4Xp8Ma#IN>Kok_aJj|(^NXOff6>chKJ&;Un3xWC86aosUUf1X)uEk4!~ z@A>We)ehRJOb@Y6JF63$;+E#pg3{$|<$_O3)<5)qk#*7zljS&Etq{Inw)y~dTY zlhf=@31Y3_vBxZyr6F6oj;qp_p1($?7yEG?X`Epr=29kfn3^q5s1p0crn&q%k^i9# zUQrsY2e9XaJP?H_lUQFaEcSmO=8gUD0>xt@0om0F_w4ob5yvxeb9nmJi|D0BMtlo| z#tJKljX#WNW2{BX8(3KySYaIJ8st0VHAX{}wiMLR!2yip%&3SUHL3)5UkDjsmmhJs zkn&H})}y>#la;TthubGH6_8{jYssjMxoPR8h!>jj!qj-{UB#jp((6zuT=DzLmj-V> zt-vnpmnW2%AnTNkCBt1)|@PTIewr?ZV#_Jy*@=B~BULjW2WrwAg?#Asa{QeBuD zLhkhMl{r##B{4v;-4Imk(CPbIvK;5*T@QdlguCncF&2T$ULRDS7H{$iImgED3|!r( zc~te$E<4}zo!q{Fw3{*7WGgcSLIb4v^wnby_`;OFFRETn51a%yHCyM= zMVto}c*1({NeH&ALqfG~6ij3W=Qn$hgG#yhU@gBc2Ntm!oS8l&|DH0)Q>8~m3Senm zo6$&@G$u-6vm(jGVD(_?SIgdr#lNw*Ky{`Yj<%?9P^3ilA9l1{G zV3Sk7K;;0lF3M{+-W1XHZ{$F|)+kY`XB6Qdr4v+a))ktz*4PKTBce`cj2(_~lxlm_ zgN;M!IKs7OPVtunNbKAo&r82=)dQ;65t^il6a%?n! z-b*R*2q{QAjY@(4G2(to?sH~2k3$rE;?YuFE}S~IL%BSR9Ca4+Do-22QX&a9Nv(A} zk6I9$odDs&*VA?ev9v;j_$`k$h#1ditcv2c={pUo=N6wTux=%vGSkC@os;9Iy6HPk z@h?3g&w~ui0$g+t5RuO728rbsiAQoIcQ6)`g1*07opL2a9y;DR2K$ zj;erWDHlRev4ni%MJ!TFHtWjWi&k8u9inRv8NtWD+KCz7l7Z6b`Rt{%fYy+ybG8x%8=bCHk4iyD#4)>B1l1=@Fkk0cRFHUFgyTQCQ=?&djj zFV(KZcB)X4&E!ryGx{lhRrp%-wA;>&Xd_eoxyxY{Gq~90tW}|;j|W;iA#j8wXbs5Y z(4L>0lJ>C0=#&iyDC*ftLi5qSGO>C!CZSsVuiow^idbYbO{IdQ?k7Q6qHqy21PKPK zYVr%e7JEDvDd{Ou?@zNWwGwN<}HX$EFCFuXc{!ihx8Pqh*{25MSE$q5Wqu0 z!=OC!*nuc|)Me)#CEId~w55+e#Si}Wf4d*4&MRQ{i9$BdGewliJ<7!c-uaQxtjX+r zCvC~YEwyXj&qT0xi~WA=Ais33Ju-Qak3whUL&m4D`j+wcqj4e)$ox|6{T0=F0%L!U zPY4K;1#uE)@(Tu!DXV)eaGFn1nrQ-BdUlDO0)%m#n#dzKR1RIXGw;X}XpR8o^^x?& zI}<``2);C4Pc{LU`exJlJ9F`p{3Z1CKqH6dj(0+r_daR$iQT)Qim5oWt!kA_Jwf!N zPN&EHV2OFFW3Av8us_PJ6P|aRDOWeTb^NWST&Xtg9}L%;mtQ)ccz44sl?7!Xwui5-g$t#+6Hw9Gsw#w|2K65Fkogy8zy+8hKpt;gwb-!F>>=L}#H-C&+ zi4HIsOqeF=v9AFk=({@!c_I1IYu1ColI67}nMwZRI#B2;y(FP9R-SV8H_)G#36Zv! zH9nLHTZiGMQb%&nBiIuheo^{_q*8_pEd{z&X8BZ}K))>sWsa(fGdcX1`1Z%Wpec|7 zt5-C+MDa#3?(KTv^=?LMqEByI+A{9CNk8g9T8Qs_ZZ}xQum}CN zgZC6mqu^!(vJ<~p`(QHm;ROdaK=XYj_6Y_z5E5(NM}R<%=ikXtg<7(7Iq2$tn;!@cG$s^o`*(#XYZ630K z(Lf5n5A656*ZpY|jaI7-gBTkh$)DZeFJqC6CH}=ygu(ToFBog8PAv_9FE=YCB;nw0 z2`&6XxCf?`TG&~6poqd~i6upT#$)}=1y>NYf%ho-hghXf2;)(_ycS8cAQn6p>-e3+ zK*r6Jb71ZToP2G6TQf})j3P31k%^8`<{n1_GVSy{RMq~#Zfdb9<=P>lID5cNVK^sH z2_wVhoPZZ6s0sH-wFpd5R_9%uteKS;B9V*_yr$BGvd{!vcGBCeuXqU$I`6xFt>_xH zzhU?n`gR=v^*{z(jW+64(PcV9sJ8+7oqE{) zTZW92MElkH5e)=bz@R(`?&XdQfp+254+?FztJ!f;_T|4=r~Bu=pL2V^7VOPjoyd!y z2)AUmzPw1ViKK@nKEgK0FLl5@+wnTt!Bt9cIbPgvl6bPl8Q<3I-Na|1(yLM+%!&Qq zCtB(Ekyu7vnc{c29fDT^a&@vju)>^E8TCBRbZ9XV?< zW@AE!z{S#8!@0p!dDO*!r|xU^>}unwFR~bH-i&2giRSKt+HVKD0`_B|)t!;7 zhGsmJ>@Z8(-1RRV4OvDMx7qL%>p_BC7WRtqbeiwTBt22`=4>ja z-ZY4IbjS~3&>d4x!@}Pji%pOwquMi#x-hW>c4~Q~NX72ME#sE~JTDSB$U`%xK14Ky zQ3>P2saOhG#XD&;)*ML_tN%R^A~cPkyMg~tfYMX85L!+U zdRPtxMj9szJOauFfHSIx_@U)CwQf5y!u}-ky5e2hL-;!1=4Y$Yw&_xf;!0k>r7V=D z{KaW{fDtuJmNvvh6oD)U@C~vi3Axq%%S9w_s zS^Gm+@{A_pt6=p(`rWr<2M9>(kxgOhwMmX=%Q_BkQ5+9-B44`BDe*)~w*Sb{x5CqX zK>p{qRechn^uXA#g$-3iz5n9xwcFaGVs%~_rmbb=Q{{FfNzOXe*I#+fmp(PdEy=M4 z9o#eJ@Mj39zod1~2RRatpE&k %>T-h;TV{%4fy2461Wz@L5$L-*kS&1G|FgUrX~~~S1)Gt&{{(m zDau4pjmZY$e5D*gor+?~LVd$XIv8HE_s?BD6&&VvcFxRCqq6s$5RWZomy5LHZ8k29 zYfmAlt=XONaMNUxdD`kff%Dhi5RsgTfq1De0WKwqHC09~>fF90n!i9uKKiRG-#HmF zfvRSXgVJ_U>G@xrZ~DK$@{-WGCCN@meZbV_z{GfuUrAr%h?5XuaKV)9rPqhqJZxj3 z{_bZ$&MSx%bOTynu2nqX>2dOL+SswL#6C8IqH`iuU(T2|RVCwxGRrt079!et5K5O* zG6I?-U`zw0|L2&qUm+GM+}mii%I8pB7gp3(>U1X!+@N?zu@q2)FleBmH!{RP4Y@Gp zzSsZ&02{5Tw6lGL43+>VMPO})Wb1f4beX^}m<5UcLP+$vDsEOIJ6@FfbDWLoZqj~3 zeigkM%O5i*%RP2f;#3M@oalC63cqBf;Gpg3n+7C4tDJ3)yV#7!5NMWq=^NZK%5Q*hLsZg>jYFjQ0kdm#f)bsVgZ2)Agcu z?9bsDb@A`S)(NVq-@~mQ$4mf8@V)Xx}8^?F{;g+HnfH>=GAtH9%ako)Q|*9rS3FmNO}78X-@t zUsZy#q*v7Ji=D#I+&5y1O=fyOOor7&oWY2MqT^1aFM{g2rvrxM#^4jYaA09 zp)I1|YRZmFgh~I0h*N@V$XA{h_&U}uMBl-^T`7tElq01$g+h&5+Z~`jyWNv`=>8d1M$m6AmNAx z--x1biud@B|Dc4>+r6{KS#x_oJ1STyKoT*bK+Mr9z0nSYYD|OKagB%UAx;WLnzvV^ zEl4sJ+c{@*DcR)b&?YeHlZshHc}L-uf$Q4XV!X(S98@TK{fT&quxXsDtZO}wi`EI}HQ_vYjG z;JC#;XQX{697Y5<=ctNb#b7@O8vSiMpuVStT!i8JF@vUE@Ur(&R^XbR|EU~w66bGQ z%PSq1Qgl>FiOQfZqIo5~&=C&^*xsWor3=0$YA|iSfe5O2Qrjtj;r;$c+29ioQ)SlU zjPq&GltN(1LYlY`E=Hv{6TZW&=(Opao(C0JwSIz}|M#)Sm>UXGi?Ft*k|Xp@uUJHc zOMHxqO*P{>gx;Wp7uN>Vyyo&ik_HFX9JBRwb3DxfE{8}wZ@nD+=6s1lPcZ#@bLG<$ z{sECl45ge07TGBq>$<43#T3AcV7#+LP00>ihAo-$Xge;E#~Q0H6BI1npM+b? zN$^yV=`9-`>4GQ{XL+UG;aizNNe^vNSyE=Yy~~W(RrMXw=lGCnn~5=yPwk<%G;4c_ zKpP=e)Htf|{s&2d60j^)$k~~$EPUlojF6VtWEuGk?ybmnFnv%hxwV~<=o?Y4Mo%d| z+lZ;6w4l3ZM z9;p|p_e1mVP(9*9f#oHT)$Hoc{U>n=%!UTI6wc)50%=T;yY{Agr6#7}xXTQ3aZ#Xt z$iRerT(v?A|8z=G9!O<`X!e3LS4+U9!m?z&JO|$1tkN_gQwx?EjXD_0APVrBqD@Rg5V>8O&qqqP5p8;hYCN<-vy;^K zm`5$cmpetEL4?E<%|PV&W$FyBf5#CxCvZ0W+qvN;B2JKKUEKx=T#*qXydM&lZ-=jQ-1{j2cCy#J*cs{7A`M@R-U@47m8=QrZu~LJ{u%75B5Rd1F!wYfRit_X4IX&qivT<@ru`=&4 zn^dED_(4FX`$a|WLqe+0kQV0Jl$HU&%n~KIkknvCm(vF_#}8Lu#5EbbK-A-EEN_SA zM&(T^<4Hkn-XpZ$*?D@{GoQC!KGMNw_D6t}0006n#XJ2xwm{|dy~B5X1FGHG@HMJ` zin&lE-G>h(eguwO!(Vp#rF zFL#LP8&<#;El907-SvWHdiT3YD9?sAZBUK+{Rrt>EM72)W(TlcVL6Q3P%T6u=DD>5 zlGmk$rZ-$ys&Gxp5Y9osemwNXpCIqjXNMIyOuGu~(vjvO1D#cR9al&te{!i!$N16% z<{xIJxySDM^fd7%>4mm1&1*FH$4tez5;R~j&tyjVdxhzFX5Qq2;ex z)~423jtW(Ylyg%71T>~RqbvDYu0Os7E)hW5i&5LKasxbsi1daFopq^24ih=pym#9u zFaHb^1GH7lT63gI-ZFoKUc!Ll%clm7?Jdh`twK?R%wf>3ugR%QFeOCl05`RYQAim7 z;^FLS`d@C*go5a$yf?+*O6Xw^*Cewm$5p3V=E$14PMlo0T%8kujU~>cWJ@vBB!I)I z4Zv@Q#Ag>nNgD6J)`)q0E#N(f){Ne8en0;|6$-U`N3`RoNI^{2T#`JW4;gO-fCy}J zGppWTyEtSa_IYi;V#n^cv6U>Rc7tBb5)#vr=rgumjxMW)9?d-E2Wzkj!wjw%M*LT) z+*;lOaxf!p%BS5lg#mPo7>3BeqVp%b%vM97XcmYubdgLkHhcS6z6M`zsN&6=8$F5% zI^CR6u~78FKyb<}K0u(=eX^9YCfOLu&}j*8zV4ClCTVTu7erLk^@y&3>tz!3;m!W) zGopaE%`Ml!>uEh^BV$bx`Pol`>~xP-{hhiJaGcWY_AB$TVIX?cl;h^+BbFe!rdCG; zun)of>+e55dKZL3m;h(stdVw!#rk2!SSx=^Nfk1brOCwD(w>K`A8rntzQ>~z;yX%#p+rGB$(#Aimnz24 z0`QR5&#}Q1=X+)&GQ%UyFXJyeLw(bv>0%>`v9x`U8yQ3DbzDyfC9O&<5LteZ^ONUS zRXSG|({U7@!jWpVWyIAkf+_rijU5gji3@VS!r&+C8p2#z4V1Y%lcdBFx<$=KcZS)S zC*gDrnk5*}HdkzjA8qZnwF=o;7mXah3SK1>efx5Mt#)V)AZZ(*2^k(HEQz`-#h>cc z;^$T;)-L1?JWGV5w^7{oo98FVT}FxmwNw#B=6ovWAl{UX=nE1AppQUPs>8Th)WY$l z@fMl5ILnaB3?D4wr>tiQBf_+uV}BfAF_O@&>8_nFefx<6prS&BypC5H$+PzwK;m^c zXG;OVu6h6wBLIAf>V(6;WjGAWuCi@7pChOolI@U0wHo@X=P*?pT!5K?aG%;b{}47L z=r<~4&3&8938>-+{$);lmZfCz;G-40_+hQj#?NVGGEPJ|D!NNCCJ|o1KiwCb)8N_1mW!&V{R+I^$V>4Sf?{1dQ6n<#ukf^^v;tKo0 zz|}3nO2}hgpO=_-E-HAapNaD*g2pWh7XZ{^XEj+gPGs~Q^L*$xG>YXHgDKrjClZ%Q zBkL{>?)hBuO92o<48Udu6iLS*!Wmaqmkwe5Xnz-CL?8!^H;yJ10wh?>@K;)=Oi0bQ z+-A$FbFN54c=qdUTnS4v3Z=imMPRb((9XOc3;0OEbasi`zO*YFPb_vbHwap|sTYF_ z(J;zjJ|x+z<~w`x5kS0RKBgF|R$Eg(0qj+RWhWSHu?sLk3f&sj}s7*#duu zT;Z(I>whBvtClprTo>+&a;|odWo%s2Mb^0^m7U5&vY5j)uk$q%`iz_Rs*eE}-#xndA3*xFzv?iA_0#Cx>6%r)}u|D*LpTb<~4o zwj6{?l{;2;Lh$G|YCqZV17ThlEJV9Ks%ij#W*JQf3`VH2P`#CZP9d33aLNLhI<@%; zUP_6v=FcN_(IgD5ha8&&sg%}Y5gwU+`35AH9ZllsuKar{DlyJI@5HNdrOD{WL-ZvdT{ zNnRp5J;Tp*dS`PGWcw}nMP0R5+iBEQjzSxxlXBizc>h}O%CB=cyv8VaBL0S~qV3D+ z+fnlt$O%|RueG%RE3qo0rwTYF)qwmyNmp0p{tU*bwtZ}+9Dzc{L{=Do+SS%s5|6<} z)h!J0Y>I{2_q<-^=_)nswvlLrW4k)U6hn_FFr*2(P2}&=2W#n^n}WqDS@!|vm#6=< zS_Lk!IqychSaPvLu`@T$*T&_NU@>$BP6RG)#Z}T>v;V=lhY|RsdTxLTL;~`8cigW_ z;QkJv&~dY?z811F{oyISIPPyWi@<;kwwJO2rW<#31I~I5AO@@<<;;0hTpj|TPcQ<$ zG9)az{Pc0PphUw-U+LNwf}%t0FpKp*#qf3X?wP#CTQrMP>IZOI|*smrw9cQQ8Nl@}?Hy-}TgL;nEAIAMO=olVhqpl2{u|InsP z6?y0cT~`+dtE!Uh?HA*noT18Ir=_u*d$kZ9JJvCFMt(UUA;D~Uo zRmNkbs!>sJU~K@lG5XU$&t6^pkBiERqq7LEPoz=t9eY`1HNazu9&hA$3a%t|BEf|X z^U-HoSoOo{{r7FzKxs5Ozo;PuXO<}~`4xgLVhfNrjGX8g=S7@}SgVnaZ2I9;+E2iE zxatUIqQHKrr<_s43zY1))e44nWHNbNZQ%TA=lpu(&1@_&e>Fm59QYvMA+QTT3Xnf6 z)*|t*Y{~RoGGWHr^y|VxER6=!Yf3ov%<`rCzDJ?xHs3Kyc)zln+_AsqO-ig|vdSI$ z28r=&&iYLmHM4>yBDC%fr>4#7odo19ht3PM&YS)lTiTOzP~<<>I-XY%*HTgg)BN4< zgNc#1T@z5ALl91Lp|T@_4GSt;a`n47RE-cTyph7LF|zx2h; zx+v_shc)dzDv3?*8=fX8tHUkc-7=-xKwvgz1(TX^AavsK=)#LJu?ir*2Jbp;l&)~< zM%_9Yrjw2d&Z(YMSm)r^sWXKDkICA~PlRlx<_vsO8VgW$zg<(zU#9-C{}eqp>TkV?Y=K76=f1W{X7J1vzRQ zbIPy3V>zvBH3VQ5S}jo80^L}tZj5AiOsqNNy>D{3t`Qa~tnptg(ner`d}CoJrux={ zx2X;bKSV;_#v&pmsTY@~H-HQLrK#u!5S&5N&Q7-bGl*HRke4R0jM9b)t{Dd`G4wK* ztIpKO@aCuBh@?xyN%(NrjJk|jB9HqP1nv&VNhyj^R%}jvkc}7vp1Zi@IGtY}cXl7{ z)gJkLG}Og2!))rtoW8=AgR+AY=fsXMxsZu_B&Gr;DuDFhSfDaz5S&z_UiKN&1vKeX zw2HbA;wm$VP(;O50_O6Z?sdYTDR5CZ;x-^>faIc9DK}4)hcZ0sE(ztG)qiT~;n7Qe zCH>ytgS_PTivi-tziEWPTC7BI$D%J(eIcBpR`@AAL1Syd&^G7CvQJ&r(B>JwFCL9AnJ|oDPGFs9 zZTd~<^ZjB0S2 z^u{7FZhdc%t6=+?bCe~#l^^V7aw=y)ew76d#)oQiqx!vlc_q+M?TWHk zX4Uz1Kc`!gIenM_pI%d=?>a*bu%!fW1E^=*8DlX?&tas;L&n*o6L@ZUu0Cv`;e?a{ z`1Iv@@w`^%HVF&Pai_t{>~{nk$&Yn`;t^)}`dHOX>eBKE3>SmpK{0gJ#4P#c82>%O zW&^amA4M`0`=mCDIP_TG+#Pu=;Xj{4uIrZ1lvP9ZUNV^gYgsyam*SnEk9h2*TZWUy z;azn(6=2CKMNw5~>^ykA?wnd?Y2)$`@0J=E%dMk&6o+==8NtS89O?2e zg_L@c1_JN=A7(@24D_f8063dW*dk`$mX$lkMe;7!Ig5?=AjV?ivA5BbtXZ2dw7jehvou=648yu0@tjhG(qDjGhoO}s49K=5 z#Jit>>~Y4{MX62t6-tVOP76tN)81KeZg7PNNVLDkBs@idpZwlyO1`ernXYeE4?~tF z_y?EZ|;A~ zdtFuBDf2i|4ANTX$jilxM zeDf_t8mH=Q&O>*dLZZS41E@ab?Z=gvK9U(@kw0*57VodB^Y&S;R>a|LE(n|AWkOTz zy33rBF)3q$;&Zcp|YGK8w*pG z)1JFU(N*-qRG$pL{u(m|)AiV1E_>bi!y$^^J~Y#Vo=+#x>w`tdd$`%Q+bdfkL~4g75|B zBtWgdCuE>WL_lV4aj~@OphHcmV{YYSo39a2w-bq8WdF4-&H&Tmpj1M<#y;MebQZQD z@sOEfi0V0lMMP*E)eJUy$6VpcF1>73G5$R6!3M7BKMrz^+H$AK+@pvGF-DrWinmp> zr&LZqBiIrVGo==IE6V9GB0^9!8MEV=qrAOg`WKwF;jn;mH)H>8$D71>{If#JX!Q@R~~*nwT8Bfe~Q9QxMChv0iwYJdP0dc7$*ek?(II@RFcV~I*GI~itb0S%GFbP`R zi40r3ppA^P^K%Ssg{(~8!o+OhbJn+0$bz1(lXbs?3S7_z8FjjFl+ac6zTaDPX;=YX z0oKRl(5dRzT_JitI;dufz{;XAjO&WWZq&|K0u0~cUPh;mYv|4S9SKlkgBMGsImdrJ z+Aty1jsw|B(?L9p$m!~M-BB7_ZwSkD7PJq>_-!`_$|Kw`=Vw_gTzOD|f;w(B8G0c@!%8y~Ou?7hU{urto5ndNs2&!P6` zHPn#Quw?RKwR(-E&rRfTn8nWkGxmD1?F2rXUGPyLo#abg@i#CZK$Ld*h*FBjQNS|C zAoJcml`(ng|4jfZ=&b-d5Jv$j$6K{%6T`7~}`8Z5JL=Pzvq+bz)4gK8faD0Gl zeLW9nB7G-sI8j|?uiY!Qin)Nxd+PJJj8VkuP2Gzh^nTXyCbWEYK$>SbjS$fx-em^o zjV0#>24_^j;32QQM>+&DzFQ&}yNLaob9fK+>EZcL8Wkib31tr%#~AoChrG6t3LRJm zb^yU8z6_eA5F-qKjH^6lHsRJC66K1DlchD?LE~69?Hv8oYSN(L#Il| z1YD@+NKsX&VZCpog)%~E^pV(u^!JRG*}`+(XOxnq!%q|C_$2o#Iek3!ddvgTtDW&d zc{+Za>r`Iq$zA?Q_w=J75KTv08^Xk3vh)>s-PgL3-#z4%5zu4}{l+=ZWt=2G_Ahvr zwJM^R$-j+_d8G2KnvYj==dRQhprbM%>x*b0VgFp7nnI*?XtJ-~jW)1E_#+9@&e}dX z{t1t!opD-mubgm^uMG+JelI4kG9d+C;M7f&9o0OMEexq1wh3(`Ue)pI45+H&K7-m$ z3QmHOf->H?pFjqWVeB7rpjr&RhS5<~m<7{o~7@;H*As83=i*KSxEhA33ntjy4^@{P8 zdoS|C%6c&6jw`Q1O=J9#FnCFIOX{26YaovLtBhRNP%wmnf+@@==S*P)vv4zIe|qJ} z6r~8rv%*j{{}UkiA0>4Ml6@UEMD#ISKqs}a+Isc;_-c4f0?O)KL%4FM zT@pQG3zAVr`KEkF)*}(r#U1q_4mx+eu`13ID>Hu?dc`fWrT?1Y|!SA4Sz;>?Km~6)+)->glWURjjJGg)!78ni0*g z?7E4WX(@v*N2DV3Bt3I%SLikD+tA<-ozZ1s=(Z-(J2ge!q_Qh5ed4D*QM1kz5@g0y zxEv}^+;9(e>Dwv&58hls}CR@_?%9MkN|G zoA0+qI%}Z&BB+*!g2g`x1=cC4&KxpjmUG(oBzh!b%b#RMD&w=Lv1($Ub>w0CMx8($ zjRG6dydd_KndWf8ONTCg)NvCL?+-JbF7&*TIUbR5JbwY_--|{{x{2|qw2)h2fU-)} z8b?M+aEk@t2)ljN_JGVLEq!+ar+sscsZ^Ri(oD+Y>Ug1niih$QQe2&AS924mBx?oK z6*zXkTFAMmW>kGC>rUaQ;bbkyXB}=qYCw2|$wWrromC5wn;!h(z%3pqsAv%MrB`jU zc)br^qJn?}@kZ<*Lc%K_HeSLqw?1|}$&a`>5}~>~EI&-Ctu=`>ezSt}HL|k2Ti$CR zj{2*N7#@Wy@HpRcLG^q;Jq^!U&2|QgP%;Vid}bvRa9y{K%;H&wYod|ny5RLrEgWb` zHFdGbl>*OERRc3WV&WKVdH%XyT@bK-q&x~jRxIgGAFZA4EabeV>2H=W_OOxRSCJ=e z>)tghTuAp`HSQ2Yg*~dVwO(d7@4Lm&QOl;zC6AmaaCG?i&OUFXB7}Jdla4n~`@B^G z7zXLq%;%l5Y{5ya%D{#jc8)p^qRr>X1sO`Vn>l1)dU$TwTTkg$N6iM7sPJn&-JarL z6Y<7K4(iym+x6yj%Ud#`iDnZp*kDF(&YXU*AJu zZ3t_xvAFQt|NPp|fu##o3Pit8cc>6kd0HPWr)?5rzfFm%#NeAUPZkvf@pr zCERRl6C|#Xsac>Y7ZnaHHH&#>MB@83yuH{{H(Ri^R8Rt0eT=AO_>@TvJ@^=GB3rM_ zOh+Iqszur#6R*2D)S~ht*K_=4p-o)df!X^{aKa3CYVwv+ABSr__I2Z}BizBhVxOns z1d1w6J4?>r>t;jAa9ylHG#ziWSw-?pUhVq{iC$<`+Y)S6lHScTPmw2*eR>fnhqpKv>p6K6)&LCFHXqkJ8IHdY*QO6=bJRl5>ixoa zdjsppBNv2uy(Y%A0!or7kfW3KwuvBEDtQD5c0p}yEvTHLbsdhaY#!U9BK`Ys!v$A; z+1XHg;@0lSJky9{oM|Edy+X_=nyl?(tb7b$uk#-T#`I4J1-E!y%#B=T7 zu9j34=TL(-fy0=CsjdTuE12)Yg`{((C>OH>;Js2{x-4SbjMGpMg+b9?vB}W{M$z@k zImZ>IVJ$ET&A1pa1h4hBm9;l?C3oJ#cM-L*aScg%;>^djP^0V;FBX}cH5cA`d+r%d z4j#6vSr=90HCnu#rOetcdt5D+EUOi&|4YU6Bl2ZrX^V76no2LAC=aA5_#pT@xPkPT zU3Xr`9h@B*jAj;jGF4a7boeUuhqX;~Lde9Ysz4!z2agw;UM5|h=}H+ZUyXz@*XB62 zJ=UV-M3%_9F^15O`Cp^hig=z5dBC-2A`_hRyg^635-{!Mj^3X>LkS5S*vJzB?7Z(q zHun%O()4xyB-WAa*paB)JYNPYg~}4~l&gGBCYAtu4y-zh!Pstbp5%!Y0M-sgcM02m zy{;9&cl8Vd|9b3QBcCv^3>F-UibFO;j0x_1HzWMIXu`q5E2BLk^@&sQ?*Lc+s;61vFEaFy+5mtUCWF|Qm^PY1IJ}ZF{O)N>dHLE?u!^LWz zi(AGL6mOo!lNA3)4*IvT=Amh+K4dNw*1hpTGBX8+D+p1seje~sF_lM0Ie`3Jv?#?DC||wnlGRiL(+D0)Bq@KJ6-v zjHC0(K?P!z!&M-8KU$JnsB8iCcWtLm=AW#AZ-c*wwQKJlG%7oRK9(f;*XE;s~(?S?`q z`9_ZpU+H1s@3FI!RF{+lH@UpK|9p?RitCxW8wRXwcin*@EE+M#mw^Nw!D=kO&d}E_=;96 zEjDPnrABBYo;P9%2JSHvm=5rs938J!SAfWTqTbV?qXr$Z@9Eou6I5Sh474~Q=LDmt z)^GJXV!^~6EWL|`oKae;qPW<;qPy03zkQi$?EA9?g|``?2e_$`xsxn(2jOXc&oJNA z1^y_Nv)oH_xzkyLPRnq?$pAV4b%)Hk``U4d%KV2iA9qGTY)qeM!5g#fr9wAFTxbHMuTYz{(T5*E}^Mn)MCRB+o>p?&o3R99) zFbbChiebZ$p9f4KT$5Y-M8$6aU$E@;gY*wK#|>%(2Oi3-aYUShnQXTIa zKj_%R#w5W3;G4YWTGW=>e*!`C$rZVAZW299D?x~{W3PqZNDdZUKo__p{1(haNFjDB zdkV+4EW`rM$|_a5s(DIM(d|p7h1Hc)EW8zS2DDV=HswCr$NafQNjl;Y7%DIRz+%?7 zoZMd7blQU2Cnb}%^T|ZSfddq_K=$xj;Oo#jMM~+qD^9|Hg0DlOrj1VzHMzuC*v~4# zDZ%o(Uru#2W(7DIoT66@L#cNbupqb}#$di9I`X7IVn$}gj+eS~Byzi9LZYz@B_p@0 z*Me@IPWT?1pdQ=@u)>tyBdfaYRxHCiI=GIxu$9Ln*Xd;X5RGi7UPAWuCx3i~uKUdIvv#t8sMQJI6H;w`{M} zn}zzZca+NT5A#gf4LP3Ex1Jnt(k2WT&DI&`H0hL5+DBx(+7r4n-5C=qi!T0l%h9~Ng7<}z?P)J4jVd2 z1j`Tk<#j6nU{t8B6pA=K1T7^X1m{T6EG`)eXz(iW`h*$|oj|gbEFRv}Cf!Rj8KxC< z_w$Mdle_K1#Az@cMPc#t_R;FXr*KySql1`Y+P+fVXnuAi0PLEngHzKWP0#+!s2 zI*tqf?i6I{DMbq+a1&{B+V`ZzM1Kl&OK?F~RP%RpH6U6Rn#+tA={FbVWfqKZ^O&3g zJkL4hF4<4624{02M)m~9A340|XbuA`-#{)7Pds0cCzEE>OB-0m+gS7Ou&?=XSU}3NT;iq!vS}$>3`i z)HfRpI}Jumwkc@oizZU11-XN2Qu`UAQvSV;an}c4|D43+xbC#Wxi*=g4`amhy^s8~ zF7-6E3cCZ~WZDRJau?4v{)X^(NyC>;&x^q-s85l~OxQ-!yrjgB0vEu+7J7&BTcf7& zz-3luHQnt0B0?l9e(X7@cgh_GH8DgBmHg`)n`{(LsW=~xI_Jc#Y`JF!%xt1?DRsAH zUnq}66@<6A-=n)cS-JlyPmb7z&R{a1`QrC20y_Jgm$7-5n+PrR?E({Fr< z{Uv*0Ld(LQDw{ZGSwUsn8Hsf9%2x3_dI}>|vgQMhoxOG$@D1#Wk6TaJmV8$Roj!@k zOQhh&ntJ6Xo2`8Nx2sxRi-kEQ{cd|jW|w~^mY65kPSfTt3-6I6YirT#gDJSVpxG}ClIgsArZ07#| zP4gDL_8{_N!R1+ofAU68QlSXqNq^i(8KST1_$@s z*wY}wSm4=8G=hSZoPQaVY@$CHioO|bIN_i#96oDejE_J zR%gLnY_wgZ#mzIT4@Phj3n9Lt7fjE900000000005LXquf%`3m?W~&CX#Z~Xbp)0J zG7_M{KB@_i=u;*KjMD*Lt1qJDHE+lB5Dh@?z2D*>gc}L1W@a@t1T)L&L9A; zf(ALTqlK)}wLo%&QRNpQn1>6ug}pZ$Xp+IBjeFGNBH@zqsKZVqUdgB~HshoIRf9us zUZVXtIyDaNd)V?!lMQ6X)WFW86cg~%L0?v7ELU=H3r?EIN1OA_Yk*q9)R!?IuQrI$ zp79tB7heu%+84uQoreo2=rHT?(BjzLxu)d$C9y26cTLAiK%t_FZPX6#4ziEBKpqPf zYHY3y7kWTAjlNFvBNzIo#|qum=?x(vyDkl@ko{+jGiDY7msiI+4dI8LciXDDqJJ9GEKFOdTp7_|7B-Vo7;81nX>gE_#7hBkrMpVZr}^ zN1&m;;N?>pQoCNhrVCI>j`|NsEQGwLADwlGx@sopnX&*z)76i|AyKwPyRWMCYN1xl zUFB#4GGz@p8Q~txLrQj_3$3Hi9BBRdo6yucLbEBT7_V*-NoZ%tCJj6~%)$5&46?*pbYHvtR%UY38m3+Mwy zK?9?!=oWR^)kfBPT~F0+(X_bv20X4tD?dOAp=@8hQ-lquqwmUW0I6C)JnTw)AY zQo{y`&fvACln>T}Ka-^10+SK{<8IX$QYA@*{>Hh9u<9=66vcl2ob3Fvg=g*8gKP6Q zAk7ik0$xj4An0f{#Vo)hbzfmj0KRE76v+I2MuIjPJhKqD!Y_XY)Oa+@S(9^r2L7d7 zlaY4vR70? zMRmhJ*jj(kw^e)Xp6p%8>OL<$p$O0nYy2)ZP-$j@4&Xk*VGr5Z2b#^KJQo7%Gh!;W z!lN@Yo5h0aNNG4W*@*nR3fALKHjU$z51LqIBYp`_-OErKj`V?_18VO0_xNfQJ4UG@ zT{0&q>x#h}q*M@wu>}J9*v36pmmq^dpoBejB<<;ePW4Fw*K});((6$Bc@N zc-JKvMo(tql7+h^r?3*))+A=C5bT8%g~1KWwtUB2PsB$}5K2lnqFEA@m^>egYfW%8 zt#wbuR(X5z8Xs6-+`6FaiR|mCcI_`H+up?6rPjU*Y}2T`oeMz|-H3~+4RlSRx(bLW zFA(~I-ln!u6B|Qyn#ZE@wYXm^_RpHH4+)3+i%8-&Aut^?-9>pa zCmv_o@LW?V=PE%on+PxdSAIXCUh`|R&wOQ zvhzw?d5dK(yHlLl%b+4clzy33`RAYb#q;ugQ_pH zx|Yf@Nl#_=#^^5rKlI!LvU9+~cQ+^7pJ|m5JzC@%*}QpUMfZz`+b4gHQ4EeEY2&o= zEb08(-Kj42_G*TQS>h=6b>4jcx@AzO+ck@Hj1lLoz%#=h11)qe35djAQ5Fe_HCV7z zS3HS^1JoRcPv}$0hf8|hWXU~(u-=o!<9cqWoEPRdIdm64WC@q$E<&z zZ(n!G;E6r*Z1|joAn?Paw5MDOIhGxjLq+w{KU^r6`v(bZ-#ox1| zB#iBWW-?1|FhhN$U!1)c6gm;z z97kXZU7ibmXl8#HZA!m|oFoY4Um>%t?tr4YH~_8v$6~spc`c4pbcN$v!3WL&RO$zu=q9J&a5Z%SoBfZ{ zKz#g^EgnI)twM0BN5t@j79Rrt?4wKjY z==!qFh^@CxnVVe^;t9MVIiMS*MCw7KAi@{?m-y}9zh3LF0d9bb6y{k zr>eFdOG}JWE@yg2XAxIu$bK!7dn{RE1PJSn&VF;&kG>U zKlYdGXjtWHi>O^V)aa3G( z_LKAplJqCieTLXgZk^hqBYJKsVJVPAG>W{fXI&FRY>K;70YR4I7ta`jkO$kOhNo5@yU`ww?GNv4&TpV30UrYAksG z8&fm1dP>Qqd#*TdywbEw{aZGV0Eq#TQvWTKyRa$bb*7E!JwE_%=>sy70!6iABk*g7 zBOSE!N96ChF)e6_70Bn1k zNRKqzXn&cO7qZ)xPK2MqJvZ24^&R~P&i=t!>*<~{RobUG1oqnTV!GF2s5 zapP6_4?i4BtIdI4o^B3>tY0S%Vc#N3nfnGQtm)xQYgLKbC9~PrQULSN3x!v6cTrch z!ctkH@x#XzyQsoR^jF2p zSY(OVuhvQc95~X?;*5ieM65b{&@E<^p9@l)nNh6Btt%;}kzKLpfsTQbZA-6YFDldc z_j~uRuT8p`p3_<5L)mZNo)R7Jf$B(1(EP>zZFGgzXm2^oM4aH#zm&RBB-_o4mHsPc z*%s49u9CN1#KE5yDQo4j_~BZzgxrH8xCTNNQ31yg^O205+h3l@JxJZf#9a-G<#SxU zqpjq7#|(!cb%4MLZM7;WiFp>UuPS4sT@ZulOe1;dQfAk%qEG+ZcgqZMy? zFL{p}6{d#_Hw*M)cI?y&AH=X@IW{cQjmQd^IKsYQ)Gyz#zxppGn2dk_df?R;>t)2< zGz2hYDoZhQ#80NOqOy-?(y1yFcLQLt5CztXbHv}rUZ;r3^Yyw(^CpO>3$b^aQs(cs z%Fb=~z5#eFgQ}0N>!e9Ne(NP)?#ClGfVRRQa1VUoHeu+T_tgE9Nl;eYph7xklaGW789Rp1fv?eQ-BL0o@~;K zY!`gc6@_SMnCJz*!otVY>zgy@f2qE3PxTDnD!6uruu0i(8~LmG07BizNOlcNTh8*w zU%;!)ze*XOlOWuo$T#@KbFnfoYDjEsi>s9>l7z;c%nKxV%J*2(BO0bAZ$C0hN;#cA zff2|89W3&~IN`Z#nNu-{{7h7DDR!IuiF{yXpdQTKVP-BIqh6~68+{6S_ljJAl7m3N zgcW#T8lu7nuZb~v-gJb5Y&`nDb2M))Cl`Htrloh=2(*v=OY)zN5zERB8QkoCM@_t3OmtRYT0~qGcOMlF8{A>W>TsZEc3DOo!}Zbd~bjfSGjXOUQ5U3xv=s!Z!NDNEE*R6H7A6 zpUTAr%Y<1OZ?{qeZI^7ls9Ee4RTA%ICh9>*SS%4CR+|F&ND_!$ty1B>=bzx*c9k9n z*|3u3x-QK4R zfM0@2odSv`L)zrQ3@t$n9)FTVlP8_zrKPwZ^5}1M)m(P4W|Qzum#L9v*3Z*=nDyoj zVcXUh&}uj_JosZ>gLzsN(ke3oA{~f|Bvw0g&{V<1UZGk(CET^}HQoZ5@`JsG{rpp; ze6L%A(d?e>LJwkS*8~}eHj_JL^$8RUWJyBP8~(u0NMf?2mz(88fGYgsH1WclFW|~e zAh)#?teCh92F1VQZ+d_e@$%9qro({sv`RCAiCyBGyvi`o=qj3K(LgWX62t|{^4boz z*HXRQ5-RzV8Z4tq8B+!vr%6~Bwz@rnullE&Zlhh||X#pbJTY;kt5{F_k zyiA*8#xz#r`#FiB>sH`facH>=@p@jui;pkndx$>djA19_)?;oCMVW2G|Wi4cghgh>WbRBjj;nbYe*M=Vd@4sNFQA?eTIz0YK6Di)H$T zSE8;yn1phBkqoHr8eFPx7cwYXV5Hyt=s38>;MuW-hao2lSLQybNSd1vjCe%@)6t(h zrj*~HqdxMB;6f!HQy2K3abS^_(4}J)5YbeqA4(k_r@?_FNqv^DA}J0_-;dRb^*$x| z1$>caBhVwN72%V^=BAeHdIV}m8SUqS5bCXOk@KDgv~zWb@=aLSLh`?1;SNt7mT|*q zeuPwZ1ALY}2}41nWFRac9=!>uQVr0Em*yw`OKl_cgaS-+X`}_~k+5Js1c;V>+MwP` zB8`4KjJ$7r@MBx$zQ8~f7bVL5oStuK$Boj#liCN1!Jv>rmyZe6#|5aR&J`U0Vi#30a zemqX7TsxK9gd9>@HswH$4D!Tz6p4_^(EUjhpdAk7`B>27qKDvUsBybr8o^tf9=H*a z=bV)FKAOpjDeGvFY$1j#iui!kl^a`>Pbk{O$7|d8Z}KE=xb>TlNAQgem6vS`<@owVm6!xFq1tS!#db{634dtwc^fo? z-QfP{*JZGWa2JPt^4?0*kicPc#2xwk?fz^5mQGnSssv=YuK%nr3Aa&nxs>u|fj84^ zLXG-v=lldM*`Nk+5M#{??jB6H1mN|Cvg)aBQCECY!L`TVp4y|6Ix4}Zt9q!Z$-OmM zkJS(t?02Nt{=HyPJacVZ#}qFz3>L@6o3?J730Jo(fYRIR~8F zQJ z`C;DjsAJ&g8fdeLowWHDGg==>O?N2v=G%&@-C1|U(6&+xL(?&%-HocmZ$7xvB`^z7 z<*$bXA$NYfW&^-ZRP*WH-`9fh!~B6bX%enunUhC9l%J1U$F9@jW83vQ*S|QVgeX?7 z#ZY!tHvema>B|EhJ4eSXi!Zj95&s;{BU!sQKoyLr-tT8ClW$to{od6exT;e?rxjI& zdYC2({Wve6U;E4NzLkH zq25RK{na~^@~<9^6hL(xR(l<7nY!({yE_xNNTc5Wi0*>#3(=QCS-T$^L|8#|ol0fq zaX!^a;MvuIZl!xAW|L@8_pvr|=fyB7?LpDnxob8VF09_ds8KZYMGC#Fs`&&=N zG+EielnMAt1~fVM1aVjO0%E$Ba|nqJ-xXRZx+Hd(r{j8DcXvBS`S;bM+GGMQRM?-Y zRnNl_+vo2-+z}N3wm0N=6zHR26|{R38T=VESDpG`Z6dL8N8q!l^ET#3mf7%5?T?FN zVvFCV$`-Mc9Wa#XV6zYa0C`Oq<IJ$+SrR00@1>G%;>!9$!-kkgaWVR zDo!jH4&mg!xO3SN?%Ucy+G<)k(chxLD?QS)G@MOVie z%G!0-Hxb4dq$r0~$)g zzzh60DIyH}um(N?9-vR#d)0JU3r%@ryvDV5!CjBY?LF@};1syCB=$G|1(A=~Bv zzanulZjs{KE71`YU#;<>ys8YiX5p=yO%D=((%a7l2TFhEOXwzp2=XE+`>4F7BGpVX z;Z4*tGOWK9kYtvP>U2gJe?Ky$bVZt_=8wQ%zV!Xi0Y<3oUHkSNRmLE^3WEjfkUSQN zH*74~r@Gc<(N%t5cB4Aa<&})tT*7t0%Py-MadWrVK&Br(Hq6}>RIUJRGxcjU!#x0d zl^{l2rqz?;l15^hZ7R5_Dt=K+Vu$4;`p(--%h6m14M6dr;`>{}PuCu?0aQXEZc3al zDJs((RU9}I)qKyE_?yYB zFKf_G9HV^Y3n3wtBNG~wkBhB`;nx~q=r*%HDx7hf4w!8tO;%Kj`~+7v=!;4u9r)1`(I%>+xgjblIBv%xtCcmet@mToa;3U|oA>812>t zrGmp2qlJThB0CKn>n`qZy~CM!&BzotPmY;AGrf(QX;GVt7hHEVdP(`L@{)R@kC~?B zaqo+PAo~f;ix0cYJ9$8(q-C+f^)%RWQi^NfbF zzP_MXW1Wsm6k!mdkV-!BdvGYtMS6NbRQv)`u(X4kmAz=cm+1}<3O&D6u+IwoI++T! zd(Z{<>HPA<`*(RI$4@4zi>_Jub2ZY=bycG|VbItTP2lJQ*qu`oH1H=bZO4VG2+Qtd zfKDNws1ztY8a~rf za3)yIckusnX1`EF6z)XpJFl(#^U8ha!FH3G0H*8V!o5js(dj2X5=(lpO`j)6AM^4_^% z4K;w7n@b^q^3J|Uw*msfrY-}QY)LH_F>RE5=tKVKTc0N!1hsbkDbdG1LQn7My#2^eS?;w#mM$J$NWjUx|yP>n*K?dZhgSwwTZke@#Q+C+M5OcZ>30xRD z*OlYfk^u8;Ej3nC6If$TePn|HszgoJA;hDl`p4F;b*DSP#Z|ZS<@Gp*a8+Td%qW@N zQvMBu<7X^-T7}jAtQ+U=qx_m3s7>Z!hB-V1w0Z zMG%X90?Gly-+oQROtaMY|9!D4Rj2Rj(n0qg01|%G63B!Q&_p#gH!V%x=^kXLjv|Xv zk5lA9nsEayqVd$)!~eoYi_40j+)V(yVax#HS`*^G0KIye@y}kXl`+XoTEQf}YX!9g z!#CG7BMFTj{Q9!7Q(weVGQV7^s=OE==L6hOY%zP`t;jz$W-))9d}D&|k)*i2!v)*V zFOk9OZuV3v40$#YxgCiK&M78;(SYqBdblhk7I4&pAaFMTkQK2NTrCu-W+rl84hzW- zI+Jy)e(f#5Uai(LP_D7EN;?XbTl3`G#M*(`6LIjiYd8@rrIQ@+c=7st%jpMkwc+)G z_MY@J5ZPzGT*Uz*q#pO|gpW-SLSqdF#c@5d06=RV3a#2LWLao7ZuJPPkKV2N$3;*= zpTsr@rZ^`7i~L@y_{)Y`g#yNeVX}Z70C!05CIisXr9Fp)0B(J^9yhnpxx-h#KihGY z3EC0fKG_L8_;O@~9{h=RVN_hsKGvnrM*+SY%XSiw_5)+7%naZnkpLr&u9eJ~yaZ#d z`C+sV?t6ozryYjHAm^nQPqEWuUJ6BY0$%u=5C_@gz3>r(uWP0KOll_}^Vn#ui6#gc zKFiXd7k#R%`!r>?(b*jYSc0h;CC*gd)bX{l`}|~&Y!D5KNTmOJ?n$67+FE_g@0k>{ z{*v5&%X~NS7}okyICZ}f>^>df!AH=|Y$H*}1W#%60n$}h{MubvzTW^M3;glBsWo=2 z$n-k*!j^u3@@W{dBmb#NU^KxIdiImXm5qRzCtdb+QSlgn1A|N+3;qUiLg0y0_cS$GQvSz;43CF{B3UxeT{)BU05 zp_dzHvLnW>A9*vVk-WEVTl<4Yn;79I`gR|O z;9ny&ndI}7Q>pp4*M44dLf4SmA=e30QS_)_6CH>EV@8QnP^`L!VZ3h*cPRr2Y#~Re z>+Afa#MyWTCCJBOZQx;Edke4}yZkZvvQc_hgfu5(l~g`zKeko53>Yh_m2y#ONEj&x z&v@6GZ}bem0Z(k?n44QoSTv3>5csV#Vl|Y|cM9)hab08}C8Rq}`W(2B`0H;dS<`Jg z-?KIjoOYi_(SN~gYhBmUNT-nxR%Ia3ZJlsCEs@{rK6D1JR)oD&_I+=v#gBz2Rf9Pe zE%>e?#k5RW3ob2I_=b8-}=L6^e%@3Hbz zJUANAlmV2h1XOD&+9$b^qQ>C{K(z(TqBxsk7vm3TjrlHinF{7Hxnrx7&P}pCCY$9n zhfNa-3?&xU03VsND9!1I$~dmgV5y86>KdhS|6yVBqXdeTz8=LWT_daS4gsue;|wF) z5ogkj1cCL`;Of3)CXIFYOVF>1@-%c)Oy9_T!EqO(TDU>xAs-EbX}KlyDh66ghmKIi{>l{OI7`NDhz3C!M7$c%VeocIs1&TO2f8IZXEr_la2!yG2yQGsci(rc zsrnGwF#d9jw;4c2;dBrKM@S>gn_BkeA1IUlN8$G`2_MFmA2%S&WK(oO;XwzzNcXbd z$je9&uJ`q8YSUCw5JxQs;1VUAmgp$uiwPeP{asy+tKzo#0bMB3tG>~T2TiRPcMe+c zxDA%Fay6EpJ0p_BudET%XG7;QtQs?ReZf#!Du9ioT&%p0Pd_bRC^#k#nyH1ijxUdR z3||Ewv#3|XgPUG=NQZ8uj7GFp)6R4W3Pfd+y74>y_!h`u5xWj8Z{? z3i7{y9wm4hr~`B_LdF*nb)^R9Ce$g}pCIcNpm2vx(}lX4%&_YPyaFPS(@El{$(pA61LZicy7%!fia z)h8M(rZaOC#IoN{u3=~}Q}lpPlcHlRMFVSM0sS+pq#r>TW4(9M%j%^uZAvB-lgCLt zUvt;9hLq;OM3gCP_|n4W*9z|@Ktg0vU7YART_F9+*TZu(e%Ea02HU5$ryhs@GGeh4 z0!$JPNJX>?px9IB#*cWGXyL`6rN0p|M*>UHaKRDocwtr~<-mLVFpy63fDkk!iuIaE zV^-o|`r9lx=^KOn*cXnsf`!Q7#8SWW5(pU)<#f6Rz1hfr@8T?0#&15Z; zXKK_}P7-`$&@97n^(INe5n05Xt5^|Sq6zOVlBR88l<#$or{WZsQ@Z)hR{j- z7=KR}nmG5ZS4Y+lY{cMnw_Uv<&cOFC4dfN0+1Lt@+ z+Kb1c>*1qMG)ufhr9TtM!f?tEg_?^X&R`aGl$ZhE7@C-|9Sb9Y+u;U&0qOm(DMuf< z9hM$@r`VM_?`YFO9&;ByK}*enC0QVm1M3LhGbu=?K@9Zd1VN;!{cR#N%h>@o9zaRA zBG7=-SJyoV`Ej;C4Sq3?6|0S@(J=IF@-KPB+1XtLQ8PZ(sA>pMbPl2V4FsB+oqNZb5N zui))xLQms_LdI;XLkAkr{ZH3{3d}`DUQj)$ZSkF#3J$-OVH;Czx=6gz%Z(aTOw)Mb zFPx1txfSY5s87K7c@MZ9u#&A)zuGpb6Ph~8sV9e3bhpfldP;I|Y8VZJqYFV#*Wf(^ zU}J#LB%yq}V3zCrQ+N7d?w8*~vB;dBssjzfHpao`wY3SN!Yw}p_cl&Elk^sW7_C`T zEN+5#LOl+wxDLV=Pi#kQ{)MZ_9$I5Oa%E&Q2u-s8jHO*2Y0w!phFeLarN!OV#^G;p zE)s#zEnWV2=ej=tpctO$jK^Py=Dn%Ch=HPs?-jecv)?XT`rWeE9ywjs@V6xO=$Lp_19gvU!%WGsx5vkEUS_VsOM1x zd^v0L#nF_E!r2DZb$oJJHU>8+y$Miy$fN7!6N*9d$YJWb74Un_5&$FrH0{~sDfdMM0hCu)05Awy=SS~D$@+Umkv!#G-k2sEg_o@JlfwAEPgxIujk9| zlYd@-&aZ8oj@S=-jkmaWBcEo8HH_M5ZldPY23x{sgv!3jHLjZis0fGsQpKK#NJ+ z*G*0l)5l91WNoZnvu5Z+Ng=NdE5v5iY8l{LI}&Pr*HgpV?3<{;T@brjb$XG%D?>~a zFX%72q70!t4rsH6RQhrck-%*O+KVM0km2T37;=YMW5k}oXbpL+DaCB^>0ZjWCi=`_w$SYcYClt)kZ`=6 zf(VB$5q%)ZTU5<^Y~&rpMDO>mUzh%a;EQLd&ew`yrGqjQJYRTk(0lT;aY7-a%g>2i z?Wqk4z1lVE9&Hy~VCp1peE(9ed2g@AYxavRNFE$R$ELNwp=9ajZIQ6eCvWF|a0q~o z1*6PlubO#oV9)Tkois#37(M5TWn&WOINw@hc6jGpZqZQGgZ3D^lN_w3f4XK(vYeIw zAb!vxu@w&YIC}_48`Zd-^L2rTUr$?%D%}d1`Vct^5woH4ctIm^#uFMgof~GetQ>R% z8m)5+}aY+U@#gk0GL)p>T)C)=+ z2xo~XKh5?MmeFS>7tvTl(d~mX6kXxhyU!FMpuQ|RU8G<79Zt< zIeDKQwJss|DI<|*dH*46pg!&#?||_BZ0nF5?D-HfwGT``TaCl470jCA8j4=sdXHKw zv)UAgfp7ZO&qvEi2O%6S00?mJr9y1LUGV$&-uvym7F`nff>FI!M5Whci|&YliK;kl zWp#I#)?i*O5Lr=ibWRpF_P68*rD_UkU!pskcwE#uXi`yU_(tMk4y3PVP?w#=^;Sz8 zcp^4Ux!Lx*QbFyj~qJlC}T6<3ZZ*fu63@pD;Zyf2vHvkj800dok}8JJ!In zu`u9eSl?z7s&XkSYY+KwfO$zGrC!e&WV>&PqyNii%(^r-%|IU2lDt_*_1ScOrA$yj z{7QAQ{uwbXB92Z&B6iYwvvGrFtLi`K^$^7aq?1eI#&X%QRFOH!+%6OW?XRKad2qRMQ@^^xUCw~1_vivmafRg#>XjI=I^{bd&nnHm zC96zO)T4~BmBqlXI))bT&qguHEcFDxMj44|{k+(^%V|$&0JhYaaG0`%c5VliJs9NT zdG~M?vF0_H9pRQaHZt0c2*t?U;^A?XVi?Edvqeu;EaA#R5_hP~0ML0BcltVK3PgVBJaXEym1wCS=-&W^p7z&3WFe+_U`O{Wp~0@A2_%DkBpy>zlhnl z_GIGwH#3;=3kH@9EKCYbJi3w68J47g3Dg3msgLkKXvydQk%f%&#Tkf~F?&=Q*XkBT zwbD*O)XP-C2U}tq?AZH^VVsMTmpO8(a}l=)G|KmAsTd(cZucN2ZRHg%$CY*TLj(Ep zK#PNG5M-1NQr7#2r4D>FODBUEQ*=lJuAp0T&L=-3^UNSTLpBNp>9!dKCHk5FEA#HM zj4Th?gjmcXgy)YHHMK~H96%qJe9pmG1A9+^PL+{Wh%bHeR%HoBgPsuNuuL*@a@{}{ z=uj7=a22h7pOw@d5E?bK#P5x*zBG+%-hy2&>v0 zT!Oy1>jdt1v%X?GohvAsN4KxHA-Uq;|DBZ}By0s-l1(ye$fAzjWI#HiOA|nflPvax z{rnMGMmyD__w%i%0a~p?ks%Gh<4@HLk)8uBXwWZ9bibCZqryYMhdlslq1X1R;7jJb zPicsuWfudkTy=OP47Rx&2(c|K)(=m1d#SQIc#Wb!QATpk34d3~aM(yTY77gI!q>oK z#wZH`jk}&VBq%3=3N3x^zb7W;_h3QaJi1EL8F+0!S{+Fsq*aN3H5@(@_bxIR<)PSv zc~g+o4wqLD1$R(45q)a}r5fi8WGLi!DrcI02BgPsHm8|b37jddoct4Q(tB&+G7fj3l&O`ZqSE0}& zv);$jvE^gCoO78_$Z&;Y2lf4u-{$mC5QNGfYS4okb!-{opV_NW3gCMpXD3ri{;4|4 zlf-0Rj?)9hNkvJTv5Y`aUMKVZ!K(YbnxAxzSFoEGNdcx~x><}qqqBnyWFi=>ph(|; z0+lNWwKImjx`WO%qA4`7iwI3-@`htHZGnKB`y6yFAZ+!$7kN>S(dr>R{QY7^3IY5~mV5#3^i?`|XsfIHJzUR&$7%0!YgrX+F ztis+HSN+4F+TsO!+V3|YuzIh^TY8&&s>^nTg|GU?yZxax-58>IU_1(1=&=#T&BBk_ zQ~Y_pvH?XZTkG4bYTQD&(C)U(;ZMPAO?cYvmax%3Go!M=b>}oVQSBn<{7VjW1-%?d z1f#wJ*nD|*B2A~o--^ibwVivzt$k-q@$?Fs#0k!(9%fNOT;kqwL%kADTS01=OO5ScEfd;smwJUB_b6UG#Fyg~87R`?wLFbl@mo*EBL_%3Bs4z%MvbA*6|n?nmrxe|O@C3aI>UxC^ zIrtk4g7wR0dW#5{2J_bqVHKTVc`D=tYtko_``8y0rm zH?QMhP$#Xmd2~zB1@z*go^2>sT$5_{WVXI2vvXw#vkJcBY zf8u-;*B-&&2w@eHwwmC{#(hlBtB872$OLMOjrz&nY*p0%fo4gldGbq0@(Q0dB;uu% z5%6>0-~NbiLJ?&>r=ni$qTqiJXpVy=GJYpU-T^l23%;*!Re4Hz2ZKZ8UNwd*HGv2K zriDfbdj5%mJ&ng7zI@jbzp8<+ga@w-a3K0>URreJ^7{9(H3)jJnK!HD0tKD2WM@G> zJ!NmXLHvrmLEt;3Oy1DZ1t8(Q!*#4HYkCn`Al;978HNPocy2Vo z5wC}*&!xfK;l39uE5YV6O*-^RkOmwy+^S27MTIxXP01+HqxV;_1SAO;Zz>%hY%{%M zWH{j(mrmbTH+p8b5=ij^ByM&wVIPb4NX*ZHV!q$*Kpo~d!!cR*00q8lIH)1p9w!zb z^a1auO0~A589ckJFA%trp>e#xy5MV$2y5@NzCSxl6g-0J@%}9`!&coR(x0KiA_tF4 zYRVw(vBpzlwdYCho$#MF3MqA;QNkB85%s%JC2l z`bl^deSM%v7Q@@ZiVGHUvBa(y+tv9t1S2IZ@LAd7)Op?~+cEPSnqwSkZp!!Y9|+jb9bec=I-FED_=n)2piApnmR1 z-qr&hDP!e0;H;oC@DCTGJ=*$ryg+jq10;h?B{U}fh^xV9QK8?VwN<@kuN36}0Rev0 zSB6~%Sgs8MZ?F8k=4kvNA0l#rVhm*&`{n1n9-*%rM}Mr(^r9m=$kM8oTJBQ39ytJt z7j%+^K%@N5>((7Ghp;&9Hj3Y>CAd7n9C!Q5heIjAJFkQ${DnB(#fE+Tyu2W=(Jds# ze+`gUi>N0Y|7qExG$5W#6Oye2SB3q{EH)}XarHJ82UI#%*XD1K{TJ^_$W9H;;q+9n zHEu47e|JYd-X)hTvO(Ow*Sqcf%4UsEw(hyK?CF>3ULW^DzO3Cq4W+CbT)kp2K#JT$ zvmEz~l086k19OL+&v98h-g&ztug<5+5tV-6a1nb+4!yQ{B{UY?B(F)x z3x1r~N{_0w4iOOb7Z?3~P$jRB^QFH{H26y!3}QIl5$KK*BQ00JDy(Ro5t;g?;^|!yz|aEZylz^O0fQKKXTWo7*;8y56n?RHSXH3RPV?` zq47ofk)(oiC;JfF`#qp$aW}=={B*5qg!&O|9*ynvVv4H7I&83}(%tK3Tj!|)j>{N$ zhxCP}RO9-Q+$ni}K<2@=+@Co8d)Gvw`rx(7q&W9G73>SAMTPAX5^sy_!3C*Ol;3Ui zCK&JK?5yhxH}p-I1_3Or`v&WfKvF;wVTIV&H&+4dO(mO7Oc_Z~?9BgWVJ_NHRyBj( zJ2!vg?qW+L!E9qW(k+zr3k94)5{BAhl2gCZiHfuQ>UF;ypic{wA#o(Lu7!j=#eudC6|EJMQ#wxwU)ek z)t-PZw-0ZWof+orRbpC2rA-&Htb@5VZAro|C_N97CisQ;Cj!j{_5WlkWvfammF5Yqk!J?x>_zKzv;(D#f-0t)D&p0)oI3l6gca zkFRLe*sFh@VL*%nDd89Fznd7ReAtypeW=DNomNpe!RxUR+c24l<%y; z6bg+AG=QO*BD)+whK5MQTEsfo)Ci!$c*Kzk^%?151GDZ&PA{*{_Vs*p1~ay=`$s|l zFUzTrrUIE|a}x0-DCi!?nQRXz7|kI`4xZWVYHB1(z!zM0N@-*RDoEd%qw$*dmF1Md&_~zQ)Ln zGK0muBiOum@gVzY3kgv@{F{Vx%PPc=Qyx5QSB(z*s3X_6+{9`EsBQG5oMezptQCv< zi06e6E9Cuf{+9d^mxDDEM|zC1{t<#&+{iY5M&0h`aNUsFmCld0;@^=dh?DpgV&Y!? zW`mWO8p)iGU^HunXi7VYh)2JIi%u?x^swf))<_m*fMU%-6-uOsRyH^j9c+oM@~nut zx@(*iNRgklf>jJ=Vhm(`VGi`!l}LzcsLPlE9n*8}Oswo=fdE`UqraFMBW|!0xJ#_@ zfuIDzgV4In@EZf-1%JH8gc?q%$73L6-_Hh1Xchv_j?fq52T^TA;xggu3fw>Cjv6_k zpD9{?3>r9cU~K!|`8y?|vPl{9KqB#U>PMuHPqQyE*tO}dhNZDk?Du8ZGn+4k>X_$} z98Z2<*q9y;hnGxnh2&=wblbz*IeFYnUNg??2GFGv%`Mv1dSyAZ z&2-Q3010!paS`k+)%2<^0zBkRPGCbQ5 z>}}nw7qIi2)5zKg-vS-+(>K~stxmy)mduYv6&p? zMRH#h8dfulk}@5?h8Gu4s=?Y;bE!f^z&*)@)i6Q8OA00XCWQYvmRs~PU|!$l<$&~?NCr^7aM((Adrm(eDc#=KO7|tdd+gXRt9#`p_Ju*^{K}J+Ryk$eg8^M zyVAog;BdFX{a*URZ_^wAhUdlB@u{4{wP(CGILS$x;9%v~q@Vz1# z{)04U*cIkjYvd$4)Afv8CRh^kRGF{$>)Z6HkM@BYpZ6=-R#GR8;R*m0Dtmo*UDLS8 zdXI9|$*OLN1V)u?Iy3@iRSKl=spnuE?;9xn~@G?h=@R z*F}gh`|W{D335Ts=xd4Xi^sZRIlF*1I{)Gz+lPNv4~1lc;q=C(ZG^y)SzAeho!S{)DXV=n^llt4e&71x7=D5=zL9HV0Ai z^{${uOE;5yU&zLf3Fr}qtrB$Ppc>#cdAKtf38rLHtiWKAdD1OoEsL>D_YNPnB) zM|EP_Vuj%2ya#;((%WxAe+_L%4}+a-6<~>Rm|EqauzYzm8*jrl5X>H5=5+!*djjU) ziea^I0C|bOK-;fJCM_aG{{hbTbSfxNvrF9R`99*-Zi4^hDZN>@>fZ~e(A86x!0As` zTj$^vyuv6jE_rMJ{$-yewnKU*UGU#xtJJhf$6_pC?Mra?0ykCRs!NFptb?MDwE!8T zhNH&)@Z;iDjP?ZH!aduB!OTEimhs$_yYRK;{3T%L1OdX=Cp5RlSxl~4v~GaH3VkLx z>*MFV2m;g5fCdMtZ{b| z$l->iN+6V>uG6K~a@<(+!%@Fg)spm!bdFiB`jvrR@_Y}ec~wjWilSecqS%C(0}Ump zDBEXYz>!}(%2GU(Og{tNJz}Dlng{8gs-)DlUITZj*8DVv_9A|;}hv%%ei&_oLaP3$8uMFXjK{- zViE|)=CSOi4!qxHXc0N5tLw~)7w*l}*07DzlpqPus^to}y8|%f6Z~{UR#t^TyVw(r z6iI|CV#_!jE-KU84fy2pM9`Y%H7K6L|BDkM2foRN`J?_ap0JDYi`(|DEgc+T8Y|ob z3WDPEqQO{e2La3@kqLQKa~wLPc12QH%{JHx?v%|tO{(uNF{J83&d+n$^2sXFcD}u+%RPq6 z2zXYD#)`CvDGEojFC)eJr5W2Jkly83GlDSCJT;pMm*JCK$?1VkDN5cwg0?+Y+$5a% z#xPe+%9UX!fMaLK6qY%Y(M5N1IUfy^L|k@4Lv=Q}auN8^bh1RMaT4RL% z%&Y42R}bMndk;6fgOU*a2q$i?^$mAMK*v7Su{FbON5P+LT~jur6$KKSLe`FTERbV-7M26O!G|Q{?scE>#uvlP zC=Gly!G$>xa#s+fE`T0+Q|3!B^@+A^PVSUC#w6rw_W~Kg(}+qN6H&u=a6O;waD9GI z-vh@v#vB#FWO#rz45}q$9xVW|b&ki(gE|MmBA87i7D^|iIuG3eX}-DmWiv}8Z2I7w)a2HqvI0Sat;|yskzIA;aCOtOMSK_vt3CIX!00001%f9Q3n@sjL z&1`beo`8f~8$bX600AKj;Xvk3n{8Uqtt1}-QFAchSNa{V#sbh^u(4ntG0^s4Fal5p~7+{ZG5_HXy&WIEXDZuoNNvHZ670fCt}pNvHG@ z6kBL%^&{-Y{`~NdPbSa4LMyIFrsh+@-~q|v$KlXZ3xGA>8JZBc>VsYZ*sAF<&TEEG z8u|69{P*%77^4+=^x~0AVXo7s^YGhuA3Yxn@v8q`>D2!>2sG2!d-$xF zO??<}5=Tom{~&B+R~nv;bSXJkv{qOq1|-_ad|V9OKm`GX>$Mj91Gi~?k^KtFEZ)(~ zCHap0PDHyGlkELmFr(2K?S4+s00eID6BHWtN+IUB+9eIOqMHQnyd8u^2;<_ic`k|V zSZDXN0=UVtxSjv;xU)v9T2`+(YQCDTDch~X>;%jdZT0M%)YWUNv*D?--Mn4~Z2$PP zvG6q$ZtG1k{zs4>D;Xr))m#W?_@QQ9X+NCDa~T~F$p3l=0pN~eu!AJ(~&T(ELV z0C?RwI)*TTKsj9;AS>Tqd8zu*`l(}r=0A?P@gu^UQRm(AGki;Z$Iv!`*XRJfM@JB5 zfT_9yrld(rBvl-0F&9=EPPiA#MgZhm*|QPhV{+0`vYjR#)?*zz4otvnCLpMS(B7V1Aj*g`pyWH`6y@M=(&k&T7SC7`L6-_F`&oSIMth#-bctYK?EfsAy{c z>6uX^-!JlWe=v%i$|4fIWYck-wcl3>cEPd$OUB_BS_Ofz*5)!04+aP^p6zIwTXVn) zI%CzVL})#&EHx19tcwg$)B*qSBnt(d-W0U8<4jZaIMN#*7WdB7!Ly-D1$W0F zz-5VF6Ul)hPpJ6NI`pmlWVm1`AJlfjKk%>`_X;7&h&uxF1Y*=j+Uc;XkK5de?_a#B zm3Ka)u~TrYY<&py4>+gmz;>{wokogihX+jOm$aodDmdO3wTxQLkhqmjx%7;y@V3DxBNQ5Y=Vd4uu?xr!gDFW&g3hadk zM-a!QSPVo3ANui($Sn-O|wM+*tHO0vfsvx8c*&%nowaQux5IEM`rJi#;%&3G3F|POAr!Z77yaJ$H9C3 z_la!*lTDHyS8l?AWWs=yoI%C6Fuk+;glw-Jx1^0;l|ezz9?z%1R8@Yle56 z+TduSaou-)osO66s74D1sA9h#OSAf#)%lO-k6e7VAy;APxY$umvEdDcC=bVhuS{(^ zm9R$IDA}MijdheBVzRx46QhQpARiyW#u;wF)z;vTMbU#Iv8fzC-SaE^2={}H#UDeFhE-`dy? z!N6_u_X+aB6k$CMp5bK~+Hh7QwEzGB1k1wf7FLaSa6g+Olxjq#{##o`XK?uFKN&8WLrOm!0)n>0=T0h{P3bo=+6Ap~xwK`JT2lRVqz z~e@seK$QF-W zq88p%g^h0ZkWy^H*g92%1b#ZpS=n4g7LES%?fcz3qGuVsEETlBzL?o~hGC@h<5Oqb zia=|SlL5n_9o$%rHYX$L%1Pr9HS)N9^ z1=t^U-Q0a9p1yhj0Bs|uiU!t3wF)eM_?O?0N!_H4G%cFH=JLio(*00GaQqobHPBny ziKPa_IzCMBdk*hiBf6161J zbjKz@000001gs~ZRa{g!Yi8ljA{bQ4hSky{mz0*R*{QxO_9#eIYBy{9#a8buGiF{C zdq}qhCW4ip_YFHQY?N5(ulsywN1#@OcA+H$K;rrN z4$`?~Q>I|bJ#W#sLBq9#{IJ_B&e?Z0%8~~U$HRf@$u^t(rz$@468C)GSEaN%q_V|D zt+-!HXdA!<95=HV%echmd0tn852=^1dfN^GDcFQ&0Y?b(Wh{Azv??H{MVsoC*;eL) zSyBMX+C^5@$1`jk5bZ~Z)Yd>eoUd$tQ4V@h_id_{<7DibLGFhz9%8rDF;Jsh~7Jh|7(Z@mpbTI z0j9{$SbYs+MjC{E?NnVfcC(~#uy7w7^qgb4tKW+bEcsgSr}eHxk}_(3Z;*gE@#r3f zhP7^CNh0*9H6|Bi2RJ<4V~@^-SB>N|$>F>B3v$i_Uzc$f^`^}QmGNP&1SAgIoy#bN zygq`WRaaKF6KkI;qY{{+Yjo3@GHd5GMcOZgmbQ%U0?fS`KsDT`aHmh(aZXRJils(n zN-&+<$G%|rerQr?v8FiYt9S|mBbI1@kH19GV-&V#lt4eguBP#5)rX-DpbhkH85UzK zRE+IWw!c)t&*CHGEq6mC#^${(q)b`C8xrP%q+-FsQ;;b`H4|l^D@$kCZ7PXwXsE?h zjN^~7aaYPyA}~Vwf0$L8Mw$u6j-KLkH3f6v8e5FrG-nmY7j+$Rrb(T`J|4{}KSk#_ z9YfgO^oDXQFDOhA0s20XM+TFIJlW7s`4~LiV}B@H8bK7aX76Q`m>Z)ca5^Xv&k(hA z#?wG|j{8E64TFCcP?Qc0p85k@swhi_rbSfhQyr1!E)*q3qew-`0>8ks>YCd}N`~p) z1n$}uc)>Xaos15zCUmNgY+G2GGYnnkYTxTfSp>dA|CuWA)z>sFR!LDiQu+_jhM6Ma z)D@gZ&ahA2hx!}ioJwvD18;kuPs$+OYany2Hg`@nE>UAc$yA97C6zNh`j}(&y?Q1w zh@r^1X!NX|_4uJjsKVY5jQ(}W#9noDyO{vv1}{Z~R{uL`>j3%qpp>dBpvcPRa9hKQ zd)6h#Mx~JGM8=n@8$TjHV6y44$t8DWK!|Ay+6`#yQ-c$YI{LK(E-|K56cmT3E#8&B zG(G?5>t2p4!#cVcxASC-Ck?Ez9!#OAxr5<+gr$U}7)-tRJNorl@Em_?(3cRJ=c5~= zfcFhF9c_sQ%BV3;M29ie%|oltq!lv>$$F&Rz4GK_-FnGyLCr}A{J(w@XNH-b0_oWK zU!3{*Jh$LDz|%gIAia)>;JUffK?H_!YB>2U__^r=M*I4J+KQf-7zLSux10#sc+lMX zAM~V>~RyrDVMVg(c`}U`BDB``w-P*q*wKK-P(KZ-Zk5q%rLy=e&Jm{RIm&yD*L2Ej^wv}Isb<5`ORzVq}-LHEO zpuBzRjd2mqDIwBWTs5;{mW=!RA27Zjz&XjuI*9lR?26f9XZW52?l6$kkaoL1f(-*U z&V@Q&dsfK>AxczGPgniOpiG#FV^+9-zJLl_&ub{Nb z5_<`5%^CijdyEI$0NjKtySD#hOLgn3-rhGhRe5O@t9xUO=eOXQfCj-+d~7far5gL$ z!!UB{e!pPdH4OG%_dFgLPOw@ z?R6Q;XdcSZIzdFHb3wpOQ^w4$eS! zcwk_@1%^kG!UVg8MrC;f}m%QkvR~Tgkv5*7|-d%i{7XqC&UHNtol&v_*$L_(O&0y@#wi zx1~!)f;XyBCu}z+dN!3!m@P-}Y2!1;x?LIVYc}fI-aGlD4Uk785$(3}{%W(Gy^Wk4 zumAv(2|-zXHEs|63UtkQ%c+pB@LR@Fr&l2hL8m4A3#vJF6kJqW&$|t<=(?p=NR`J4 z2w8AXZLAXMqptwfXLEMPD0Y5-WwcvLBa_?JLY#D%*}8r%mM>z2`r6%s-kTOjmj zg(eDMzl{pMOCvG4XZ$qc=zS-zw1Eg66RXhqJPa)vd`;ssWyD~@4U<=4IEfTw^@>V8 z<8drZmR_h3Q{w%z{N^4{tbf(sHEkXl7<@FT+LLZjFEh{NyGtl4+<#RaKg&rfZdJPg z3!k0qUU~5~2CXW$H)M<7FJT3t%T%iXV zweI}!0tHqv+aN|to@LcdvE7>Ak7wetZvk%13c;+y%RFGFQLx(Z8YqtbWEa1unrgPg z&+yv1*0{DYqIDa%rrN=5-!omxm@!;(OHFRmPGkzM_J@B>`+V&K zu*Qj0N(}3opONga6{WhX+*XPF`S!aN{LM5eBg+yXv^Wz zlp-tiYm>iuqHs_=tp}Tb7Sry;!z&P(x9k>kL@j!w3LZlou?|<=!Xt-pDBrELWvSFB zeHmyoG+#QQ6F>BvjN5WQN}_2I&SjdV6F(~J+yh0G60XiIPWiW}a=WAgeVf=pEKTjG zb$-sx{bk?YLwRSXG2viID3N*F<`zrL2psuLR${8ooB|VwkdK6ZA z%a6@iiV~XRqsHQ|P2s~GhCR*prev|kaS==JO$6_bOv0It^*Nm^w8w@aPY}yZO@f3e zrjLDVFEshLZGwJhq6IN}OAvPQJTmyYbs>5kr zhFF>#x>hJ>=(DVG;7{)@MxsU*qSbIKAn&N)ksxh!F) z0e^=Ky|e@3o#c^H8YWa;)|?cUA{mY0AgV&AFIQj2oT)HqM2GOU+i_Kjb#_dj7}L9{ zp$r9Y*B&$6NEv3R)l(*vTy$}Rd<^855f_DGYIsXKSaA>4^Kl)>Ql6x%1s(Zl?0cQUcPNF!?G;bP4lpyxR$W5`)#h%h2yvDqByHkj&u7S1Ls8z*Y z6TRE^WC%*C))^Y8k+t5{oRP6UHNx%r5g=zN_mLVEX{BoRmEF;-Bc9QfbOHTHIxgr?guA1-pt* z5>lH>$N1xk9Pjb7fL+hJNfQV4?L81yJHG@j3a|#SI>w$D{s}~$t1xslcrlgL5`5p) z_ArDaW27hh*{zW7-c3ay?GsS=JQILOAD~$R9k0kF5j}cq$l|~i_Javg7n}Id){4cB zl)HF8oy)sk+Z@@f3`vx2^MtgSl%g8Vod$D&RsVacS9^U7ccJL?98Mpj`V5SnJ~cf+ zD(3!)|7oU8#HLFjeP5aeS$07E!_kK?I=!WX8L(fwiVuk=qy;nm%lA{nd^uQeY`6^e>OJj7aad;ga1{om>2+a1e7(jXMS+%sAw*lOv3hyyX(5Bs$CU z*X|nX)QK14B;y$72niCbI5cHt`A+knO5Me7RaYrNSt(HWI{CG6 zCqg-TDw?2DY(&{H?_qsz+r}?W7A-sdp>4pi*R+?i?>VIJ`lculh_@ez+ek0SORKnT zAC(AXwr|1;vMg|=!V@)yq$&Rc;+~urB(?J4P)m}kEh0I#_Gv+CIv~JGBA#2}-=wWf zjt3rfx#l)no(mtytLE!E2l~RS18+{CGp0~k5)AhN@qqwZ;hP!0loo%`7BieYeI)&y z0L{;81;^q)6DK-b+hlWcm=u>hS!E(e6N&poCE4% zpiYB%!C1Q<=aI^oH4UziHD}qU^7^(GqL?z&T$}c?u65S z>;qa`S>*f79e->0s~Eyq8I3+(j#t1-DFS{5w$1PkHBedg9L)vRVPatFOe*m^kQd4}59wZaOQ1?al=W4hgw}SllagAYC%!8a(VUHA-l5L{5?b*JO)`x7l_SC(Pv?;dafOUitv&Ck)>^iS! zm@c3cw!x(0$Dr{dJo4sw7kPY^^{ntwsUWf11q4T<-BV!m1kmG-d&Iw|fyxRu zsQp(%*yn12x2ZuO-j3bHSnauJ8nra^Z;a*(_XrqAKs!wYsJ{iTBKfyLf`!h0owT|< zQ)c zpIcz$cqEVa63p7cIKSD0UH$^ULU-Xbj>XRhgA?1 z3!<*IuUP2^DeS#>)|l^ld7j9-Wj=&>2~1)w`}+^lg|yBfws8Tf_}@x|?W(Im#8r|3 zamheqE?HVnL`y@cJ6E((XDmqX=6ghRanTzELabYG>YI+mv{F<8DsH{CGn|va zXs`Z{@d}9L)tggPe4s7kO z>XOA4H50~;Xws6E8(yOI+swuG{F%M`>N0v;CA$g#^=<*{M_vCJ&nr_=vXio?1JG0ZdROA#MTuwSlqf6MnxG`x5>e)ck^kN6VsU=9{M{(Fm z6>K$4fzMn3wrLY;WVwZ#$7qfq*&qs8orI0ub7r>w-;)Mm2+ZojR=V0ZbX~Jd)6i6sLqtE8fnmo zw=0{}o<8BvHceEq{f_v{+U{VWrB)@OC_A1~qx$Zyt0{?q2`$L#EN4 z2bB|7I)lPXs-~G#=D5u1IANy|s*cB1C&Vs|Gd|f79-|`kgzi26Td4no`lTO zvN{W%N6{GM_+3kQh|=k zJQ~?x*1K!%Wnm&9x4?O!vF7(^?|3bdH3X)C%Wz-~;HdLW-bAzm`nO)Xi3KU+<-|PS zrui(|K(ej7-pk_CCD3>iffK9d?xyAAZZf#!kbm6b|8pM4bP8hn2JrfuhG8psTZngg z^L*xAPY!oR85q1;kXjytT(hqT?~oV6+dTjllwQ^H!@k7~7TL-jBdq#sKWyWj zS?XG=EN^(JA)-gccLQ~fK?!s(c<-RdJ?iVC7v=vE#BWl=W#l=FEk#O!Zh|L7wJ{Mf zAx~9w8!t<{MxWahUn2MQXY%!hbke2uTmycmpv%ntUfFgdy@NIm#1}94Q&Z{CI zL7Gk21D3?TQwGKV`@}D=2Q2&ITGHY)B8q{(2`cw@OzeRf8ns zXG?KcZ!>HKSG6sqwLMk*hGt$f){Bc}sxS-j!BgQauMCxCRJ07^ujf{q8O3l$;;;}N zI&Ixviu3Dc{UULykDu25bKbWw(0>U9aFc)08J_;MqVb@J8 zc7n3faY9KLWr=s}*{*4w>$sTOzFd~CLo&Apxy670001ueF>BJ6tiJ>p8bl^O^4kIS z*iM1}VGU{?Ukjen5Rkm-unvPc75=D0t1#AdAxkkTj@30RB@(1mv9~{=h(z~WP=mul zT*hCE*1q=$-jAmde*u)t=-36ZKvzGblu|NdewYdf*6>C=;nyAJi_@%01K$z$1a`dlfFxkIsa*WVVn=$E_WE-Z(4n6kOGpRJc)Yx%{hN`=in2u zrk?qGpc%@t1H8zK@R&mljA#^1ztJl|6o#Qt9|6gx6ZpZuBAlt^WfVvVEv~$_PZavf zt0cJro%S~tk6m`&v5fg?#Uaui#CsbKz0Iwl4q-CCUBFx*E1!KP40VX~5@AVp;en#J zd96;q1(qs#6QW4HYXb<@mUO0z3;<@NUJ;GVAGcIWxZAiZbuEVQ9UIC>%E0q}-QJZmMM=^Ew7}74Nyv55z!*#6xXYb#j9W%| zv9|Ax;n&ITHnz(_!ah|n+SWP~+SzfuRY|-J zXW$gIoAUaHEyPHBnysfr|KJy~oT8lGUyZN$yW{bhto}#lGiwD)HFbMs`?Z_*Zb%1} z^UP&2(9}BI0!aP+xL;*J8+qT1!Lt!y4K=BYy|Dzpe9Hjw+1#uaytL-(&YMVpb{HxZIG_omLeNOPHvr3#pepL=%82%}!wUN%2@ zPR#YvQ=i%2WCftie_@03CAYWO}Ip={!bces=5+ZK*|OA-&(D|B=>9+CN}B3P0(GJ ze;*F*<7~a1*3nHtedI59^k7ixh>&!dW&2R3IN9KA$mtH-=Ty`3>tN$-acTNwufi?h zaanC&e4y4L7f}>=3@sz{9X|WsTqe(fFbYS&-vSx+_SYDz36fjMjpI#q3q#m&M?K-{wl{G zXF!^!v2UnajP3V#q@?^LKj__!H5Mt@Xe(|c!)WM1Alsz;E9kt#T+!0-1{=g1BNA7k zBGU7Hnkxq3iZm&1A8;Sy@vX?A&U;Uuz_?|4k=e^*annbxLv6a~bAuBaSC)YJG#&L$ zlBU+X*|R|S1JE3`y5+!#UoS1sbWvH>W0-ODfaT!0!$exD*?*PyLQinb)mCQ}<_b+b z$}Kbt?6d^rB3QR$T#;@A6lpoj8NwG^3}n1uQ?3BeV!|Elh_tA`qFvt4Ux9RaM@EjR zM)u`VZWnjSxQqYN&2=9827=)F+E>hs&KgNa5SghHbRowy*ll-LF}s9uxNW&rl;H~9 z7E~G~XQ+4E3l3rr&aI~L|32;KNaw=i<1MX;y{a@MIlpfTa$Pmp=zsTFL}u$k=B<}| z(7_x@(YWi2@-9N|?n>saN4@YX&i~y;vV0*J6%GY)^5qp_e!mb-CPLf6^ZsQ+=ZBs@ z>QsARG#n)%t55_NS<08oeb2zeZthzSeivW(s~mlu0&1GYzM*8Qj8!g4C`o=-c&x@% zfulp*0+vqlc9S)?Q)`UipV07@mc=}YX13J9>OUaoMQ;=sK**B#P>76YVwB_oh0l~+an>W z+Y1Wsj^BMr!`^?s&>{OBr^-$XUvN_)SsvY zmA~5$4ab}EYATJlZ^zD~ju~sCBgU)h3BJpN_wc77OqGc5X>08+P|FvSCERHN0J!ws zR}8O1J7`y>O@z_5`DXT&H}9v+CVCE=&9KEv z0)`q{dZX6B?IvSym`v@N2V)ecwxnxj8+Ip@rwBau7gH%GQWV;gxej!d=iMdp*{Uo? zP+rS9hB~wF-ompKZ?F0b)&MJDrVSbPY9oEf*3t{cF1ueBp2lvbs--tI0-G*$IIS}m zc{+iJ&q8RC2slMkJboZ+G_Mqk#m7`vF5$BF{T+yH^@nXq)yj82JyU92g*4y^95Uu7e60qWbEFgz-TAYNaRbEh50) zSw?C>iqN6+PYD7ZJp{tD|H{(#g0I3m?xP2#Ot0MY(J8-Vw{ER;b*SWdlqVkG*s|mD zS9b(4z*8Kk$QkxeK0;y@zp;G@8GgsKluG&tA=xT4bTX7<$26vyI>saZOOm*v0;B4W zw0!;u^$_#!pUm`v?DQ8|+(jyS4L54BKE54y4ZSvjVC#!%J*WvpK#wrKBKbjyu%=(3 z_MlAzeW%}dIZS92O}mC28+>?XBJPsCj?apc0}nWUl|GV6U_h(_HL_@ci^CmkXS*is zIq||(-$&7mziexN;EO@tv%ZL)B>`ZXs+W>l$+!Rj0000HwpBQ0-?0FlF!WqvB%a0d zNrZ$po^GO?V`6tyEza9?m;e9(00#-Kx%^@>LyrU~eB{XR%B0zmuyPomfB*mh003Ek z1n|(+l`ehp)@KpD2b)7h;5_wzx-^BR@?Xtc} z|A+iii;t&%!-y=3Nq$)TROuk*MH5{w{t$c@E-3f94gEAlF?a>RABj6e*&r81dkfHR6p zHmJGisR(epO8@W1?tsN{G`E{HeGNF>pje>z?>M*)hkM^AoNd|`VKnOr2lme$18>v( zXl%ual)BFmLgr(`w9R#Sk0kLwLFe;^>uSf1I*LsHkwWDBS)mzIgWZbrI21(*o@FJ< zdy{Pai|XoF@KwJ^D$Q?yTn_s&V6#YVMVvFIbQd{TNG-%%A3y{+f9)mnB;Wl;v&yHK zEk+z6#M5oOhVxPji(e;zfsi0=sBal1MZ-c4R1Q1Oi7wJPG-~X8A0luFVkD|GRTF>5 zkQR&4=_sJJ?#dfpKytdTq5YO6smRye@@TJe&Tqhx4&Vx!RAbGmK|ZG$`F1ct?tR%R zN-oxl{bOI42=KKp+eUhj!z>`H1|u#8GhYqFNHeQx$K~@~LDaAqW5|{?kpH7``clSi zbZnq*{y@5*zSpYr2*SNfQ^c1m3*WasXN`~XkS;fCpXAC2sZ*@9cHSGz^Km;_ltG?m<=nn>cCip&E^!#ewcWe} zlx(NdB&vA~Ju8**PXcZ8X(WbQM(gGvDuf)SaLXc-rF^kRl+&JoOxqge>qQ;ny-0a= zaa|iaU^xVTFc^6u!aTgn-(wK_T#eG+KxR7^_!z4h`>@^7K=3opU#q$`Jk4pAUDb*? z1nVrQir2tt)LoOlK`U=C#s8W_OV{O+FiyS0O&eOjROByR!@EwJ?j&bv$VPT zlhHJQHI1VJtz^_r{!=aFRIj*hC;O%}$%1G<=`0u2_Vey+!OP7Pj zG+WZrnZe)L(Q^u1V{=+kegvLC>Hn=l=Z|M zn*cJyc|q-+Fd!sSe~%^zF1zC$Y!qdo-w`oJ=eZP^*`-=8Ij*Ngtw=Te&RZx`kgJGy zhR_N7rDB)oWufJWRR|1$k}8TzB}fiL>|yH0A;YPC(ostd9evTL(+5}P!KqvdJ|jX% zU+CJkHJ={=tL|70%E-K?b1yH!)S1G>_Kv^FS$p1>b7{cX!p~F2s~jwQ<`p(GGXN3_*lhZ_XCSJ7OR0QKExo+-(M_52&=ifAvjN+gz5va8fC;YdS!@44g%fWDW z)K4;`c9ygMYlw^+(^J_1s%k`;MgnYX)XIfkX#W3fn_}{Gq6}Tpu4m=i&~ENthqIwT@?{(ThR11Lgx;S=-k$^m+;!_ z*cU=dwjsmD^RTr}YsyFUDrq}wd%(p*TZ)wQgf`$qkkZA25{N68<~WVm8v|;5f9i!L z#<smED12fqAdY@Sa?O>TgDC!ikc0xT$}Q&8#E zL^OnL0frAzM0U*BV|$1^u;soG-Y`(L$N*~>Dq@xyp!5h)VjW2MDjwJPZQ>ANWLm$~ zO4>XM=+3BS5OrJ&KRpM`4vgCDa#z5RQ1LpJLjU}r5!e6iQ4Ocy@r@DH8d`(l&kp_l zpPE_M=OwXVYX$vSDvM-hT3Z@zb54A-4*>y2M8(h4bxRNbY#qdXHG<6W|Fu{{ zDd@>p%(#GkJ`NvpeRP6;@P9|5j{32(X9RSS!Y%<4w0;tfk_(cMkm8_HJ}tK*71qI| z_NW1QSxxA zUs1vmME9SN`PRxeIjTERt!L&JkAaUM&cX;haP7QmezRqq!!K)w{|H$>mE=jPZW5^wi=S*-3y=ZQ)db2=g@HM`>0jjqx6e+o z`lu8v3~6LkzBh{hzlvyfQG{glld3r^VGQO}s6V~ytxJ6s45G25%O1uriHh&HCIw43 z)y-o`k05NU3c8g4_}mbAYE$?w(MZ};hohl%4Snijw2NtrF?!qAtDcJ}tZz}aQ>cIu zcBd-V>D>|LxHDb35K`>cKPNjE@NVK~t1aW&P^Ym*IYkPw=3OhqaIW+p2!jIEf%vqD z5uDoa^k^TynZ2qC-QDyS-d=PV%!t7$NEf6Hk@bB z#1RDR`U=QD^W8p_m98p(pjSzIZHkmb{p|FA+d5VXvRIbZ(9$9xO%qoLH>H00Nvy>u z(0D}ao3%K2MsK-pueC8ILFVJf95<Ir-Cn?581MMVR zPOE)*6MVxjS8a!j3^*%g7q*zZ8W&BAT%511QgxbFII5Y42~g9wiim{GJAg^WVnR5$ z7BnwKE!>j*Lqn=6#7Vc==3cV8YMNf_a08AMyGi6b7aaF(t1D{bMAYyo9%3BTTvC6Q5Bha&PNgnx8oAbk`&N+XSWR80`vZ)Q#zJ$U6-LN za$Op`7jXc=$m8hq7@vsX_b+lS$mpy6kP<(Bit>!yVA8VSW>&?lOhHJxr)W#9f`Mkp z!(X0v>4_UxT9t5qel)6IMV{0StWWCP5voej#EC0KRpa{F+6c#4PjDGOQI!oq0=5&s zzxvrPS&=c@UB?a7H`#32No}&p6t@1dh*Bv{X#9@%%WfLvek*Eo&(9jQ$ok(_GZavD z{IO}^^BPQ*Tu|AjfH-$h)v|q&bKp#XiuR=K>v3x*$!>5Gae^Ui8GA6{{j|tTsu>8L zm;-w=VGy>p)5|0xC!*t&?;fhG{kG{)!7)W;AJ^Fwp&BlcBwylwucoU%EZA>FIT7%W zcE2l{>?C}A!;{R$JN%7>E_rF!q*U>blA)v0ll)rgn*ke4KI31xnS!_)%zldq8@ql& zHu|eNm3R%>KosPYTaH89vG0IAMmKn$kA9VB62^r-XixXf(n8IxbGpVI#*`68KF9?y z!3ebB4vKRdBluSlHKljDNd#Hzw$M-MT*h8_(Qy*nz`rX=%`$n(?#1X0i(z^L8x9)L(XIwS zgaxrQ7j|Cq>3Uao%M**7UYb13vi?Bv+ikf?y8vOHOXZ8lx;)@I-?P$rA^8QS# z(z`{EAQjBh3A08oQ`To`JEH6uNLBwH^e=sN(v&kWtV8r=QLfArEOZMph-2GLjDHc@ z%i5>?|ZS= z$VU3?jcz5t<1i7GI!67ne*BACIdfXJ8rFM#XlwdJiBr-nlg=KL6|P$WIe({rcUFfkBg(4f`; zUU=)q##UK#`mG;~{o(4i28$v{;(6np?KHZe2Eyi>GIK<$lKCbFs-rtYM#AcN^K?z; zcet7oPZ-oBR96Pht{~q07{?VcpV`rUWxGx6?6bRPeoR|GJ1$p9l<;q^wSY@e*V)qiC4{FUV*|_X{ zVF=kyj<^PhB? z*4A9ai&urNfEmG$@Tu!b9gLOWBvZP1Ke zt2*)RJ$#Ti!s2Uc0;kWy8O{eEjOlKCLJ z?nzMCNhun{6>zAmTyP}v9DIJfjf4w!iillrKp8!!CmmzN>bUD$1{&QfNtg_m!BchGqct@PDq(y!4WT5k4>aU~4{%625P zUOu_fp8iityW?yFuI?k?Fp#A)VtrO%O9w+++bD4$$bKA+oNcv z!pIf`-Pd(Z3fke+_XX@i>+8Fz<)eYhFrvc6I)TPzC(%rP!3GR>_p<6s{tlniLM;S1 zWk?%&4l`@Y3KT2rWEw{|W3%A(#G;U&{3tr?Ec8aCQuQyC@m6mm;91ocIhgn_q$pBA zG%`3z$wZiWX30u(`q^Hvmhn>^lC_{KBx0)>3(90?$LN8b?4?C*x|PG>Po4}FWm5Y) zVhWS4v-E@Ta$3R!=1`j$@e*|MqjaJTPx2q5eOPt&2dAjTlqK!$q9z+hC#y8HU~S;i z4NL=ivYUFD+vvvajbUo}J@TKaLbV8&V#@XKh(I zOwEq(X_`<6=6$(|x6&V_{Etd5F_m;-ZntR^kv`2|M6D9s`jh$jBrYV*L z*S$OP^C_^FBf})Mw&F{g6B~ruml+3H+0EdhgqgmkYwi%<7jmt%O3oFyAiGne>gEHM zN?Zg|t1LWCNXLFa6pV{R3KTi~;EubnlFfgW7R+CPLPxuu*F&N1Vp%ICz#j|44-`8I zVo39XauqBsBZ4PehQa4qF7GV)0YmfBduNN`x`XZpp3t`;T+%81DwsxSCA;|U?umun zYwd7)4hvj7nj%{R!o2qX;t%KV#232wO~4$Q>LO#yteOdU{9~wo=8xgtb0B*@uwWv? z-!wL#VMIY47B*5mz5+{4GHml9XoZ1y zn^*jo{nIq%TFAZ!LmFTfrk58=l^C|(Ta}7(ric_e3Ov2l3=JT61D(Ccvomj8o?ZCy3kX#Nk@UN&F|*{ zBye9ZKuFNLOGnx5!xs@{mjlD~x!tk{6JHiyQ>OX_k^Lt6w4@_1f;nAtChxbcfG6eG zVr@9!mT9#~Rlbj)2jb^x^zALh@=GXZL-90bY7t!hI$!RNr^Q5UJtFo_hPw7JT*?*- zVGvsdaih62J<&$xp}1SQS3uLsGmvbP0C%x6s7Svx@vIzbyMJjG z_l$l{GIGKMa)NqfCn_OoeNgk<<@jz{&4oaYi=@n=E!<|=5yN+T!nz+jO$~%>tuSoP zU>SaZt|pO-R?ZA;GE*v(ms>p?FcSo9xX6GhdT12Vsur+eXsJ0Md1|!=AC+I~kKy56 zZ^V3LZhb2fc;HwO;lO9C-!b)WQ*c1?p9Yc31+Vgc4-q;w%U-BqL>fBqOVJ-l1`kZh z@z#I<5-3PUQC3XF%ND+AZUsH!t7mcPTPADqF>Rd7f$QR27+G`}f#i~Y(6cO8pR9dH zhN?WqIXif!R$)J2mUsI?S}~=#7fLeWYWz;x@tC$lK9s~-FWdc});i5U)P|)1*n-h} z&rz?g0s4)28!u!Z4+W+G0t$rt-+x0ljH7pD&{eVv=cJ^`^7NN}e8N-q}r` zQBU^33w)#B0n%Y!Xd-;>idmnbFunnUBALW<&P>xAAh5TNK>+4`eweQs*7FneDXHKf z<%*7GXt>r)jl59c=ONMO^ZKAw=&=XYbx&Fp#qbp2K-cY5LQWRj$nX%6vt;GtOvlEk z$Uf=1w#WvA(Yl=0u{r5FShEjL3KaSl-F+J;c>~6=$WKJHTvoX#gn4dV?eknb}*K^pV@X+p?sSJ=6}k_0>WJoIib!kd&@A~x!%$Sh%Vra zE@u@kz{^aK=LQMV?yqTWzR1B)%q)qxR?dnhleT{j{gKn1EI=Y>uaQcg*IrkhPMRfU zGA=Gady`$cNIsZ1yHR|Q1D~e&v?@8stLsKbRf_QsuA`-rY5-L3EOsOsr+C6?u3o!aLloaQ@!& ztosX20px}MX7VHvjS&pkbkZ~W; zp@Hj&+pWabwr-jiX^XYDTx<71(dyWZ9{L6D`~x&IOBf%57R|nOdRx=uLrz{Ccm${5 zf>~BUGRMpt#@32}hvlhNXQHf*eH2^Yi+PYNR#~2h3h^{M9f(i(2olK}0z?y&mN2>P zM20feN0v!`h$lV9;+_hu#JpzjDE?Ejj&vWEQ1pb-=2K_-0pZrPN7lImJ_wARpHe$F z{?|(R3iic;48$AftjxnueOyP*`RI?l-h|Z9feiteIV3g)sGV{wZd31}fOVSpumiTj zk9K*eP%@vZB>uet^aLBbd39Qj`Fc)vN^pNS{HpA(nDU{xChbN?pzGnTo00`)P(@y0U7-%FsR*R}l3jsD9d@`{Oz`t};h_c!4qccs zb~o`Vp)m_E*Q-%s15Or0dEw53!&(Q_nqNKrkCtAVRJ07->-cH>`=&#~aIC zSZllbFW1$=su?WF+XHoNJ9%UTdBZA56)0@sfXjJ@IcQfGZ~Cn5nGCw;F2Swvc;J!6 zW{ai6&(C)JC}J6=6`@An1RdLczYpVSJ&A}SROcKyngGa1YrQc@PKf5_QX$olS=49F z^%vL>(wm%CB&(^6sLr5*LAZT#gCJk2ii*BUyyGy9l^6*ut1PcuQ&xk+6LO3N$4cN} zhv4(|qQy+_kMaYjt-6$&d0z$}>&i*E&mP+}99ZoZu% z-pQUuQ$a`Yr=Jv@(hD>)-|So`bCoY_LcV-5jL|B2xiS1A8XLMVYF)J|`4T!qk2(o$ zo;!^Ed<0S5!$YGK_IU+8rS}9d1)q5Cn*V$Ohk`a%^4pew3IU=EW~VbsbFT~n2`yw% zc}GUd=?#P%+@MiS>f0JZLwc?gEp#f<64u^}iLkUw8C4&1>NVNZJ!v%#h`RaUbl6*d z)YiSNH5y#$!==cIP_KIhMDtkZmuT^lA984ro5a@UDq~ZSruQTm-g2rq(Yas!JOtPr z=@Xb`~!uW2xF{vTCcbbjeSWn;)~CriR#e<-q(Ul;%q z6sFwmI(;#SVpFQP^?)L%j~sf#As4qv`fHif6JuLtCd#PYJJCr?D2F7$@M>Qo%1erE zmIQJEo?l1mj)pHqAp`x8&v91Dm^3rdI+W^?_m)>HVMLC4{ z$gUZ;AsVX5%BGqEe_wljbMJw2P{@mj#lDv1FL%-*(ioN15W-p3_4fn2jCB|O_7Nmg zi58A!;}b(g5Nv&%cYTkogdlkW<>&uk<}i1nVAcP@<|o4P?-_hy0r3r`l<#&&(e+G5 zR5Hw}>>tg-LL89#mo2{)!h3(xM%HCk$SYZ-36xG!j6FE=qZ6)q7C$Ku%l!B8q$kzw zL7ljWu)4r#Y}+n_Tl3{i_5YP84do%g7c0m*)9wOAcb-l?45O*%6krH;6te~;HK1~y zApIvCwyH%T{L^bQ$;MH=CNXsannnrn412a{R1-+U*&T_2o8v+?#mU5FqJV{GQCDfC zoS>L&fbdD>%9lx86*Cbno#+qU7IgmSE&Cw*I|)};#<9_XJ`=H+-=NRNM+Jfl)Ahh% zm|aiDeo@EN?DoPa(7NYchA;qLxZ9GHKC)m{pi&aNez*i9=MP+nF;LJ&;dBi0m(t0r zq-UZDzE@XAi5QJrL`Y`*8<{y7)LGHHK415BFJ6={kf5P8bcmN|$0>g^prtR3vSNp? zmL(~VH5SE0ibL;~rz^ibN-x+Y?n3zO7Bm`u(;w4jfaO@UYVFb^V$bD=(m)$xs0dcdH1@+afSQk&-ZOU{S$f&|!Td`OGGi?M zW$?mNtv;HDm0brFb}^kLHJ_Qt)l1FCPhZX+$^WSU1aKo36+>c?=8($19*Ejm&VHCD z-VJ#+L-|0H8P~^m9=Rm|yAb(lj5a_2KJLERq~KYQB6I;yEGz&ZR*JPMO%Zz4e?lUI z#aB=Gxq%Lo`VGEvSe9A*_aS>6IK1STAdkHNUw0$wK9ef9!{i8xt%k;O7d9dgibf`S zrjC)OzBUo<Q zHKQ7;Ev2FKN)Lq7ztaCGZSDGQDC{V51-%^auCFhuI9|YKAeZpbsKhL*jC{K>mz=Eu z=UJl4UU3`L8FU0YUG)I<>~C#gZ#SL($GQ1U1GrxlfIV z<%`pQy=_Z9A)7}Uv7**2qPVOJiYxKw&u>5FG2a60mxkss3s!jJzJ&*r?@7OJ+$ zkLd&9$Nz|DbKYzVRa@l8^nvi>f5fvnZ?=W1E%IafK=}4Q;@O-x+d|bA`8ItZ{P-L3 zY|fi)p=yi#m_87G{EK)t=gqeGuTJooJ`jHVhj=#U&9+drMSe^l2tWQyJe%`oTd3Od z|G6#Iny8*fG2Vg@LliJ-#Z)Aa^(PULbg@LzfZ}dI@kI-y>EfJwJtA9RPt)z9%$SmN zsnQ`T`s*Vg*z1L<#%8A+eiSJRi7?H`In=JWgzADFaA=ap4~-_yG9pMWFJ3*6OLH4&LD<}x={mffd#a@;AN7hA9xw)DZUw;!Kq;w7N*n@Gjv((So zRkBt%u#ocUL!ipcq0n!yS^zCy76%^HB-h8UEZA^ZC?`FvcgC}PA*LGsRVGO~_9vlX zxyB$gvE-#<@i8_-RT==HQ7-+DT+6> z03hCGv$`suw})GK#66kySIJ|DY@eYHJ9%A2pKzDjpJTC3V)}iV_ClE}HNU<%aY&>q zHl3t`-PeQ!Jak94s0sxzUh^LOIoHvAWot>e5|Tc@4N#S(Mf>YA)TlajG5KUQCR$=D zC&}=IlK680)*mxWOc;{T5`i3Zv+L8?r5)*)=X(Uob$33=7O2bq z;PDY#)JHC)#C9G=&OuNK)UW2wMbOIr7>O*pw2Mrdx;-NDLa(dVO_zq0mHb4Ob%5VL zEdB!bqKvGA$54nR(v?2PLEe0U|4oJecY!G5w4JNLX7%`QcsDYyw3=`Uc`KTKMi5P4 zpTj-3gtyO$n?@iC&@GqYP02Xvq?s;)Z-$WV-59&pKGzwEx3_5$u!LydkTXf_(w_8< zl}_Yo>E=FYtc9bU5cM}J8?X5h9d4iE-Gbm>htP8DDsFkE8*4UDMun2iCQlfXk`oP| zfkSD2xCHe3h&Vf;stpfBz`38L1f`84A+xnm!ufPz~@LG@7UKmbrCRZWjKTs$DtMNQm*? zNo8P$`KTZ@?d(kvJRg8QaCKemd4Ljp(06S8NRuIeRq-wi^#%=8~~CPd^Ma1vt6m4 z?VjXT3VVE2n*8-~BP!7`5ESjHqnUlj+UD9$`a)^ zNO*HDq|?ec!Sy7q)~X=S-?& zeTt3Rfu{Tv+%VgRx0f`%{MvXDWv@M55Y)wWx{xbfD0Y!CVrf1w%;^PZ_{LsW0eg8` zZf2R8n@Eb0raXKIAPl}bZ4!T@LqrIbv8yCpvA*2(6h|V-J}Q19B_P7hXWN`3-v1$@ zl}V(uuPZZym(5TnMKt7xsg8Sl(EQSIr%KCjJ-H%5e3HNX4sF^UUJv|@`kyJC7bu0D za*uAmk*`g!2n5!d;uEp5{A(LiALTYn%ij7ucsZgdw2zXU9T`=LWlgcoUfq?g9vVhi zyw?S6=U)q(!}Z=pEBxdm1*~bk2?hjmd;e9f>U_|XM^;nj$*6sc$pJ4XK-QRTS`!z!I87CRlpBRm5xeA>k z+fY-f`!4;*-JNvl7cl1Y83bNwGF&SRdp)qKSs2RLd$fzDR}Kz(RsoT8JQzBHdV+Cw`A4E?sGd3l*ETKZr zrTa8r(UGqLqD9YOeh<&d53FG*@IBhJ2etXB8W+hpadt-ldh;83gfe@`(VC zZW9(c`biV5XVDdlUS5v;x(m1fByLx=)Y@_#s@9W@rrF(SU>k5Er?Wndm|1V4PKLc8 zSe1LS*X!f%`Y|*)pH{!&>nz~{EtWK_v;CYN4S?|+&T|rm zd_n^An^|K33_2Y zz4&h2vgHNM0d&c856(^5gfc?tx!;{rt`5Ev=r?;JDA>emw3uAZUaFH-BA59(yd_WK zgv4MY$%)SRH-l%auu~00P7Gw(*lY3)JJWJaT75wyAv*A*ZuYkiNuE54XE$io@#1{; zFBG`AdSJ%k9$s38)d`^K0U;fx_M39Kz(y;Ltd>N@VMSmTfS7 zn+SEG(P)pBdVMP)bcO)=cNZBs{Tuy&=6QFAj083ZaPQCnaZeQ9OTH~C{?LS=1zJs1F=tfOQ42Y z5ZJ#-`->b5)8@cQ?ENCqzlh^adgD(co#$|-RW|NMK+3~7*lBaY`bh|v2+S*SOv_$A z;;!bgb7!4|7Jj&PNCrKQWpxqFt8(Bq81XW7LL%3niIsFd;u}J(<7995CQj69rdZuW$|b z32e5`Dr0uQ-zyd@5G(j+w?6FT3-({G!|Q0hMz-j-tRio4UL0}HPMmB4Av*?~5JyHd-X3KCglee0YF@Wb(d?J9oTu`(Y z7x;AGOTN}q%R#1>sD8Up!fokziB-5|g~PFmv)9BrA2L?LBLGvYHn=bf&m)Ro3SW`U zx2l;CCTi3DxteH+zPCwS*PyZ5i7~-p@^KVp(FD4yr>gz~Fu&Lwk$R;smBfWDB<4!R zUIW*2g-jM3wF=-L%7dSFoH??CIyEgP2* zAkQLBsmuewMbZ6LKGyu!#ukKi3Wu|Y|WS3@p3Cju$O@BCuD_$*}>^jQTA??EWz zwN%vLVtk5Kls1f4O8}ZTqyNFI!nS5qFcwAA-QGHj1xEE{Zh@na!JUCiKyl#r{WTnv_<8+H;{dHi<1v-&(I!N&39 zS~ted*qP35t=*~sIX5<@!w1{Hna8NB$J)ap-{OlC?$T35pA-WcWE3;T7qO7_W;?pf+ zQ&HVWO2K@yjKcJ#zCVPpM_qN7ZyE!JkX0LfOGZf?bCX&&8|sxh#NE4|4wHW`w9iAF z2aBiRuTcY*9@p09j~O6h-6m7Ur{JdlMjjtAmS32vo3crLFTSuwi$739ixy}Q%oo{# zIT}{EB?)yB^1I*cQ1Z{s<>&9-D)z^&S)i@~JQgu7_E;C~dn2t1mDA@lptGFpjo~%~ z4k!{iwWulcnr{a^^>NPKJ~G#i6cA}sUTD);PSnYiz59p{-I1Ah0%f>p``ko6M;&nE z8ao?_fuk4tuK!{Q2E&&s2Bm9*^sQ^&y+Z@X{$v%be)^%KL6O8L}|XVXsS zWKzBQ1D;h90CI1RPaI@=f>?Vl{r!A9w(}vx3TPeG`1inSRg53*nW4wbY@Wn?DvLD@ zXo0Ct(w@(+t>{>c;lq7WF z&)CX9%^K0z%?d>!H|9UZZGG{8a5ZD^D&}x>IIeAOzHOu&4R7m9l4t_G?-ZVrx#R!( zo+wdj5Ja#DVO{(rytkRaIKC@;J@b0x&}EHrR|`h#ekMeA^;QKAbSqnu=jSN{v?O3W>lB`;2j6Yqzosn!v1hcwIx$R+LG{fjDk4}`IFbztCWIs zo44Hhy8P?7#-nG6(^0KhM3jU~J%%Czo_9X8Y%j;Gk+W=VSuCvm?RI|NV_Mi?n(g?7Q(7ND;IU)x=re^WRWE_vQg0?eDcr9Ve{$Im6M*cBrH;O} zN6fqQ_(_HWjc71zm{Sfv{ZF6*mXEw^zPKs#CQK+$D=Mr6`3A{8q{^;gDU$VLf!qAA zgFVcA5>Kb8vBN(!v-pfSo|s(bP;h1y@)29GPRi{_7Tm<}{eJAMU+P*vr_VZ>cFEE66a zph*49?~PhO1SMR#SgkZUX!D!gWu3#=WKiK6j@H|L*1!O|Y8-NZp}H&yc60PDEJqft zxQ-lA%^G(-aIwyNNfwi|C)~$7g2Y z_CjAJh8L7Mw8YQcmCK;|prI=Teh>?3S2*gqS*k;qQ!Q1!2FHn=u{pj3ID4iVX1Buw z4Q`79|jyo@YUIjbNGv zxv0D$LSP^AOH{ z-c{B5UkGNR?{7&m;1PDBdbGJ+U@TT9mPll_^~)TS+yC$kfD1s0xKf4yrC31iTQ?Fz zl!vH$1>ybZ-J4s8zvOQP*rpa*0wV&4cMp)~y%lfAtNes=C$5fYvNItCC7@G|E~J9l zK%V7hai5ODbJ+Qa;zNawdohQk_+K|7G?!4sF8KAA7P+7c0&* z51cJ3O8Ec)(#%h@diNt@-vx|GB=Pj~WY9VBI5lafSK0OluuRot5XL|t)dV=QqF*~t z!=L|2SoYkV&`nBR#B6Csp$iOyjFbV$$85MWK#L_P766?FjpSU2b1-zS){BSu>_-XRPQ&l>( zf>T&-54boFRjQpP2*R3fVRae3%j~20HK=2`AJDSf+5RA|l!PJ$FymxBsWs$*f!Q;f zi+!&or7U*th7r0yA;0-ylT_1oMsT3++1hp?pLB4&HQ)q;@04Qx9MV1hvQ>Gx6rlzp zR1c@hQPUb!O=}Hl4&F?yXqdqR8o>Yq-SWVXDSYI|xJw(P2~8!LtI_%(~EjQ_)XZVh>xK_Qc#rJZM_&~9DthL z^NC%2RKaaxcFOoL)6vVWrA+u!-5rZQV*tiN8G=6SNPwzks3`m!w5PU@1;3V_JO}Jd z_hwjG|H6h8J1!`@JUjsX{xDs9<FugTx{T9+!az| zInAh@{)Ur{KiB2IF|pzob?5c-IzN~_(k_px2i!m~j5QwJjq?@enYrBRiZl6sQu^D8 z67pBM5y|A6x?}D9RZxOiZBd;Q4Vmd9+8ns$Ak2i=14J{NAHy_939{phj*tiiPodmY z+>cyfbgy{;e113V(%*}Ifl*xIox%o0mf`e_<~7(9w?2Wv-V4v{r~H6aogeTeiAWLP zL=ZjiQ)MA4*O=ecgU2VwfqG6bnBDaJa;aWna`f&#ZfRHu7}>Hk>A2g(GeL^|kgjb) zG4qyY%J~|1s(Js=<2)XI>|$(MCgW3ETM0_+EAQ8rAwlPBKGXDzG`kR;o;yrkA9R~} za$S3dHR@4le^JHV`F*~h9tCd=5#@eyA14u)U+qILJX$>4Z$K){#YVd@OMNUa+bU8) z0UfWDitcd+=xE1 zfS=kx3N8eeCH?`dj(96&)1>GK*$a7AwTcGCxud8uwOMR-(PDhYNSRU+lUl?dlaGe2 zp=O)xP6828DcpevlHRnJF;BcRaN$UKEv4Fzj;d@}UI=w6{BB7InZ>*~z}D6i!XQ_X zu>r8z1C3RZQB6-t|A%}13O6Vlc;&>7eHAr!+iH(r-PA)Xplcru!FF6e5sH{Uc_x*-n*y897h&CCY_|^3aA9L_Ln(=tZZ3U zPlW1T5?SL|5vvPTyTun9&WvAYX=!$jSGj}yI5r6+G@T#>nM|rKa!~fD7ZKlk4Vm$@ zjy-sU2^0D=^be*O`lWl`Dhrl-#`5=%l2RUsa1K&L!e945nc*{avRG8VVOg;UTx_^E zr>Hwn5qde~uy(7QTnNPOgs^19Ngsk6{LHa2U4D-DUXtpm@C&C8#X`2i^COJ8wmx}vld?_Srfv$%zv!2S`POg+>tv;IHjhIajDPH+6~*H|*cACr38N(c%b>CB5Hu0bo?5|p|uR9iX5u6vKZ}pMCP)ceFruTR9g8Y_mDPV_R z2xh+-`d&yY1;I~GKsh@8HjOY(uk|4w5*VcnRRZKEG8Q0n>RSaX{*3(B*fT`M=ZG`1 z9c6|w_d0mOBO$-!SDu8&!#WG(B{Ck4*SH|<>r;1WMwKo=Vz`77i%4#$P={NstChDN z!N<{l0&Qb^OQAz2X)E7%6uBhy2c=wC`LyI?1neq#R=sd6XOICLpITPgYd(_cKnej2z^$15X;xznGKtYBnd#F{Adv1youN@Z_uW&%52>V*!c192{ z*n8)~RhY>BtpOicu?!t787sX_tcMzx56%u<+^Z**lM zv;aM|6VvQK@J$Cdlb&5<-MRHc*(^B3tCh(10G1do&b(fUt0$}S4T3!2)fFOXs}04+ zfwXFcDFHd0-6c7%-8z2wLlukRe@jC{9xNaXy-#3yP%lTFOL7HJHKU4^0}Wf$&Eyvl zihY?YPFK!MY~sfz{PfSxkiDu3i$nAj|GFmc*k(O(X~u4r&^lKCvzU{7itG&E3Qj6~ z7sKUIxtcXk#A>S?kaGaI#a)=(l#8zb8SWN~)Az&4Y$T>JRh^SG z4X{mnCd5cx6g1gFKq5(5*ulSUCh(Q5JloveN5&c{b!XgitPk4U_Y&_u5-?rf~8 zbH<`E85vn5hPU90jgFzatkZptTm363M30zPG3@52Kf`dnt*PAmZVhv!=+$y*U#!UR z(;P`JdKQF(Y?ps(c7qC}G%kdW>q$&mL9*r<=$&7W#Csz3*DnkJ%rA&Z+=$Sk8*^np z#^x~UMGqg9QOH|<7xC6i;R!SVh;kfPv)Y}%F2T0X2z1i zx$3FlndA<3!`hGAEydPn*kGaF7JxE;v?@{Iorp#P05U&Vh;NF+OH`q1VFu{z5;oB( z17pp%>snYP+z5TGJ*i^0biZ85=y`?D3f~nR;4l*2<2sk&vF!}H7RhB-(h4{z5i%3% zwQGo1^h-9nyYE`5zpO+3YR5INTXPJ$4tViLnUp+pq*|r6W^#FUm7mQ7IFIv4q zlnvF`)r!;+JR7SLU`;)11t>E5!W|^7)KSIpIOpGvYv9`L+V@U5lEfdc2#0rIH z)z>nhqM3}`5ZqHjsj@=qiKrmlLutUuZKXQlB>1aV^y7ZPw(_nj_xLt}E7SY1mNK!+ zCy+wwu>Th-Ao36Lu&|m+=li&3j@S#HEi9@GxkD`NN$ozSX$RYA_>oMiTFE)+QI;>uXALGx5M61egVcRhM23Tq^|exEo|IL?dA!ef@R zO&b)hpzx65Rgz_KFUtJt`BvrXG?L4zA(XDW+jLJUd#vo719a;c=%LA?<48GH(eDh# zAZbHgHZ_mrB0}q0906ikQGG262m;hs5BD%|pgObWMVOV%3SCw>`48ZvnaPK5arJ zU&c9fCiS}!iRvBANLVGWG}|+YPKENMQj&VbXW;JkaV6^f*<&Fg_UvCvq*^aVYrutv za1J5T-EAC-nU+T&?J|eGNRb*e5x)W+l?*=X+GK^-hpf2*Lm*i2SX8`Nn#AGwb$a@|XxA)!9 zKnK}qIJ7h$7%1^P=$0qOxBbHF{Q*I)vIl+lYchg5dQ_-Dm$VoTbbsVQmTq^JN|~W2Jeqzhk9G&E>Tx0Wx5jeE*H^@i zi3YXZ?qoA!T~~8e@Dm3o6L#oYb+d#Ha8NtGn`zM0>}`X#FXzgp!=vLtO_DVlvo-lM zr010M3ADhSxyA7m%a#q&aYxoXU8nu-o%qjGmYRbkv}JOeL8=l*{MpeGTosvoG36(1 zdzRo7^u2EIs-ccOA)K{olb?@`*R6qWVecJONYnMe(pwI`m&nL3VF}F<>gRPD7W^Q- z_ik{tJ0I%?E>$c`(ZR+edCyR%THh+#a2iR=R76gxI&q-8o?1cKFv@dK@VFw%3xAo3 zL4#fJQGg{S>pU2SnQc*cPN=jWduAmj7`zh%m~!!Xz9=#6F_#EI4~5yaXzn%pLq-3N z27Kev1=!tQu(&N(hKLRv~0c)PclbO+&w(28!_pv>T#c+wD?9V)RnaeDiz5 z)EwO|q*}pIiZ||CjkE|1tczv=JWYIMKPz&@Ha!}o3*5kXR zE;`leNhdpwR+AVts2J4z=XWld*<{8o>JsSuPW7O|^Ym^+`;MC92CpI%5E3jQbTO&y zrmHZVlI`|U(TGg}n|twnsQj}kW8W;3K%W>6nyEIjm0$~v$`%@6d;8YA7R2rmy{G6% z@`*_ zYYlcR?$cf29N6ugE6dl}p+z2Aaeg~YrSfJX>maU8Acdr3D$LKrpH0)iy)*q@ zSm@$aPH*TK4 z?jNXiXA0>*Oa8O`#?LnpRbIYR-M3Z`G0UY0ylQm?kBV!(Kr+=c5qf1HhS)AQxsz$J zF1Bz60=KBAVap=NhxUUDsBeayuRB(R!hv^05lI}gk+wwh!?yfVGzo>X*k&>(@4!9j zV>msILfo~<{o~GpJ>0|=$Bz0a;)K1h*^)aQs5Q=d4<(W$QB|YwwKKFoojflJVog+ zx*g#FpE^_`MoIUg;{L>zGQ@Ga5z^-)%s>Ky3JF+sIT{A+@ztE*Vy)21W-Q^Njt33)^!fC&?6N z8tpyIlYWK=0cQ4ITIlOsCS_1SOSpEzR%oi=6*QlIlH`L>Z2bEJ|2Y+GA%Y`FbNkry z0`Puu9?+|~TK5{;>s)=uY6&_gE-wV75lTB-`NHlgvev`B61|=it+#)9zP^TIBjfOv zMm2s~aXU|l=`j!6`64tE80TDYN(+^(Vo8y)SUtGG)=$l(MWfL!|>(h+SqWXwpC zJH^UnN^un$aNz^%-mC0q9KDc5@ZO_|v&3+Dk1&h=UtgbU$9OZ5T3Ej1_`&wrCU>vx zUU7o7%;#zoxsN%@(0=JNG*u#;%~=n~S+|#&U{Z)Rfys!N>%cfONRiZR?yw30C-wY= zZEtb4_nd~X+>7$G{t3Gei4=WV->NkgeMmvo7R`Op_Y{QX+}^g(I3e}bQ?&_RZ!d%D z`Kn&Udom9AO`=jS6a|pdNJHdTw@F2-u>anT>e1*wk%)yK($S{;Uf44{`e z91q9^F0h5vP7fwo7yK=A$0!Y`eZp!|0!d$wWAv%K1PWl>Ci`-?$5zC6$|uzc9(1%?|V4jh-4m)VAL zr}YZriO%smXlJ;u!dz0|3*o`brJ&6GzH}+R>`ZAzv>^9%yVdNR6*y=(gbhDMkVCER zdr?QS3oK~CgK|A4pn4{jA6{djxi4yb1PqMht(oY`V4~O9yv0_XXd_6haM0|S+0FzD zBtTfx+O^H64V0yUAiA-U{{wnJg};brQ~ff>gPOsGKP#189CI!+UVYrHVOHlGs6dgc z+fZxv7bE|oxNZJSx4i|XHKqS&5XEMt*}L(r3RQkMJpyZ z$VksE_->Xbh>F|(Ge*2x^vr*;+kxlkU7oFl6RJi@JQ*CpPtJ2m(J2I*pOt*ArgQ`f$&>tm<8EsV0+raj~H~^xV*x}8hrE1@g-W%fS?n8 zJ>}$-l+Qw1r$C(33=mLGu#1lk&#s9Ogau3vbO;lg)|~Bg*G=SyJyz7D5Cp2R`uo?{ zC&P8|PDDj|JJ@9oUL#k#$&fXu|QOw z>9b(j2c?u3FTt)<*NcgDN6tm~%whk}(Ecr;klBHDOn?t<5^yuE6R9s~3RBD*yO-v- zB79QMo;froeuT{hbP-Qp6x1)k3sbvtRnTPfCsi+x0cS3pMQYM+9?SD8!#dSSCOud? zu!g}1-`7uMi#;uqfmBX#Rq$=R;J%MBF(d4hImMG4EH~&65^6UDYGfn7RG!~|QVT$Z zgzpW8;Huo`KZu6F{f-ECYmY}_JFOVg@2usBVRkivCE5R$GFizA1pPIShmc3RwpIsj zimh=U2!H?p001a0Wn{Jg%vA(B4JTzA7eaF{H4p!ynYFM~hw?Hc@-?UH*09xT1K%%E z=d~?!Dua+Z zPf~InBU<}0RNp8UJ;59hN4$>K%1dKQRH+l77yVncNhbv}iN8_W-d8o${F=Ea2RQX! z(q;QANzy@5^tTWP&`W7x%D;H~dvJq|XsRoyxR#}&#y|ho)aK#t-_Uy&(>mEHEn8BD zDBY_sGLD2e#2yoD)t~Fat_K=7Q)^k62<$esaVT8)tN=-e;nCvTyN2pkO=~AadDMxnBiX(V_dUT!Qt=;$C&7?i2i$;FIz~_F$Kk!AP*vH-zSwrZ6u1 zS>(?nEmT$i4yq)F67YVv+_`$=*;>H}#rPKqY{fz%on)nC$B76F+!51r+sVgKHMwuO zxpWBNwHiiKDIV@6CUK(|)=08D5M5jMf>}t}J@3G7GJSym6}KJ1?t0R*tlOQF!8~U~ zaw9P=gduwTIz(D8z;goT;K*!&c)U@bug19fh2;?2Dkqc5Fx94cW`WM>-~@#Vh~EIU zIxq2PF6)WE4oK|8hZhn(jw{TXf!zE5KQPCO#{V_nuuy)f-VY~p2ES=*&p2-LjNQCV zZnS<7!42j#lCw0MRsnJ)r+9pD;A{--Su7%J_LUJmc7(4vYGtiQW2tu5l^e9kVBgI+ zT|g1Wijr zo?(6PU^$Ceu`T^_pMjQ68V7i#O=XyvojR5@X`ZziyswUPyL~9+r9kFerqARgz0Vm} zg-mqNP%R9ik80^v6}yUK^Uz$ch>XnK7tmRH%uDk?oNQM*zhN_q`FOEi1DvH@`?Cq> z%bb!uu{b%sRI6(6_c&W)+rZUEl>xjv#eUR^#lET)(1PE}3w3uAEsw0?y6^k%M4<&# z$x~l>{FZN>5$9)ras3h2zMHlB?c@;HvTR3}D2z~|k;PmIAmP#Ym)v=jcGx-j`2SBs zR|>qGU3eX?NzbVDH5H_&5M~P8W~Y{CCWgGTm?3W9mEa*+Vu=9{Hk41H9DmH0lZgPW zaq^J!L;cZC>18z+WaQRmX@oa9!j&< zSX-jl7GSkNZLV`)%gVe>XHJDc|8E7{+u$R0PN|~Nt&0-7?{a|za!jG~GX@uS<-PIx zDDLH;{;Hv!5806DOvbN zS*b1pK1yIM06R_r{CgX#0Tq(t{d_~}-o(dW-NMgHJmsO6;kpA!t4WZNvA~|fG%%QQ zy82{--oiD$fPkRDb?^5wAN^65_V{C<^gD2@kGTZNC>eHh5W@U?m;MHhqpa9B==(qu z8Co<4A%L#*0ZMWu+Wq>#@+AQPaOMb#?VXJP|8E7{+vM29xD{RPp8TJbS}bLY zk;_@^B9*2Jn)&te>)-BVKl-CB+MbkDM&)Bm@0eDM>GCH&$h=L%fTceUw$`dxg#O;MJgp*er{(a!l(zEXj%kygHA5K z9R$7BW{OsrDr@JR0-Bc#&y>XwK{a%;WtIuZz2xm`f#9=t#OH{9VL*y2nsFJTXKz_C zZFVi;u9O4-&>8??DuPEry7M_M7XSCpeWlyd z)dc;hVnoB}_C+ZIZh)1mrXZ?|njyv@@S1*hVLbVBl1H{FK7#`4kGd(mrlsu$Ql==1HE?Mx5SCT5z3}_7inW;E#JY9d`vL-pU-`-^nE^s(&tA&A| zCGufAG}e$;#SBsb4HAekYujH6@s2=8ZQIycNz)|B?tkO}+HP9TXzFgW4G3-bNXush z5~?JB)Ue2lPtF_hGP_QrLNvlQUq--nadRQ+1jS{Hw)f6~$xt{DI-gy2ID60_HAz3Y zjoy#&Jm=OWEq#+7i*58?uCQkU13l{T%dW9|akHNkm`HMzM2N5b;My(X_1q&6rYuAI z+{-PYHSWaqi5(ky?5>$k9{f-1g(K^me8h_b51hX?rbB5^$S;FWTzI*<#&KB?*#cCujU z0PHj=1(h4@!d1>kc>^XTu-So93nA0VR8H zJ-Hb2hWtF|kOI^+>zDMvuiKE*-%eL$xv2g%s$MmFlW-YD-QfTOBNxRXuZ@33I^C%< zVuRADUlKZ1F~68n?i_KT7NEozvR?_Io}y39M-IkfkY#am&dj^VQvEwPNVZkTwdR!b zF%abNFN*V3tex_92^UBU-z5V#)g&`8Sa{QYcYY?n9S*MTt87s|3-gUE5xFVhHPD~v zZD*xNCyl#Fx)J#3SLWBE^JfM+aYlnvJNW_s-= z!q!Q`f^;>6L`uzvtS75up5CeMjuv26-$P(x-gKAo5CJt1483gQgwKTkMx5CBKORI# zVn@|{Z9RCfI$Y3Ph7Bom`jy%C6WA7qvxQ<;9|I!RsC1(Nd;4s21K}njwVKeir z*g8*?4e`#kdO3C@qM7dYn+K#>)L+RUKrsCju#gIWG%y!Cudu$449n7t z4u{t|1-T)JN9UJaQO0X^vzoosCF~jSU;ee~=6V@c0Sd~qsw0#Z&tS4M0G}#*%Lhui zQ41lelNpN_BlzK4X#@wSX^sZf?;Zwm$6ZF-iK(C3F z@S3Y$F>LywQO~Vj&6z!-2eucp)~}LWV@y$^4x^#Y%=A4$M-%)p#iHb8kN^Mx0|W7# z9HpNRx9)L*o0U&yUovNeG@4VT2voX4HVL@I!HmqF#4}Xmf4!Mq>UV|KlSlBr@i2=9 z%3k^os>|F&y6RBOI>7KakugTx(>w2L7dq%qysOS=j3VFkdqX;Znca`jC z2guMj&r6Mb!wJMLhKpxxUz97lihsNVi{yGS*9K^z9>z5y^v;LI_x>l-LU4BDv>&t8 z=xX{s<3FZ|hcLrt0>Um38X9Jrs*HU@L-#Ljt-C+z=NKGmqBv(MP`}=zXxYn;xl#S2 zinrE>O4A(!xo2C;MqJAQyAV)do9WpGkV=$w?Yw>XmF$3W^xk z=uX*cLJ)SpnJBkanZoJBQ}rZC&9C&onpDfC@-x>hj*ygoMfycil+vU|+7w2Mz#Q}R zsJ*L6Svv5rr>r7Hi^^t6-QPhQ(3I6RzcIUBnWO?IN(=%6Cth4|&i-5*=lXY&M0!N` zmnDur5zIyoVMVBesYxe(Wfvh4wE-EZ#Xw@O*nyZE$FsAb-Yrd{6K%SklDY1$#`mj1 zs(k@dKZ|wgMA>0q(##aMg)FwUBPIy^S}x0lRf56(y&aLkFm13Yj+Z^1`Ghng_7cN@ zJ+kA{2H6hmlYHx^E^`R=A0DTZ(Qw(tO>`;GFjhosYZUOS17VZ zc`*LYGIrQFH>4Bc_G>i5A!}L@@k2ysX1}`y*t~NLIJaGbTTr-nNIgDHthJ+U{b1bC z{oaB=8NekjK8tFOW>4v=?x+?WB0MK^hHrhBj}PWwHNIiYoDHg+TNuc5&5w0R#>~9- z?lB7}#9JGT44kZsqAq5(tcB%~D}yJyxZfdW!#@h`DoqjU0MN2ZYG=IN*gRkG@q+m`)vHnNN;cGMp{Gz~tF<0mwEk^WN zPpHNO8s#N*F2>Z@G{*~4&T<)1pAsS!MI|WJse1KH(i`u)H)-R!8oXy~A*4gXhvrxv zS)V)yMr53EdsCSp|9{?X&}q(eB~mVT8Jq$4slXk?K8C%c1^5`$3$8YKQSpr+&Bp~r zDXeS_b;MNWqf=#wzCDqK2cqJz1dKV)*jR|YuW5(*00pD&8b~(~lKE*(1}+<1kP(?J zTbMWxYyhZL{u+na^AwHDSWjik^2Azi%SUp#03z4hpliKq+k!z$84Fp~0*&Svt%r zg1pghMLf(+fstp<8N4c!#G=dzm0tX)iOf20?bVdLhqsIzUMMsrcM<)4jpp1;A*422 zkTu?XYCSSr;p>hvIzuJxep9|2%cipOqzznIj^f5aiRetk7;Q7*5a~{daEMJ_X|q$% zk*0>YNkoe}8^H$wq<z@H_g}!-OK}J03+HPb4w-zoDiI+K3}xD%%#_OznY;QsKI~3H z-EN=08qygNBh0c=c)!tHGq7yoe5p_o2jqjrh^{mA00000a`ikzt0)*q65Mgu&xP`9 z*km9*Ul}EME~ZC{4@1lwLNu$Ta^17I_5j)h?9jiiF*Gz8aNr;-dCh8CKHXiZo%9Ta zffkMG2MjvN_zg<22K%0n{98b64peDpEMYfgiVL-bQ7alq@5tG&fUqD%3+`~2tQ606 z4rElDbeYJh&?CgBPCG`nNNiIXITmeMw-Zez# zui~%w16zh^Hk$&LQF3YA?;98`QL=rZ+04wh^?h3w`#GMfh_${sGK7*;C5*8mrTMCC z@|hCN2Q)GwnT7r$oWj~s{R>N$M>tKvKe5r2oD0Tl`#ZCy54>a@9G!>K=xuynbtZd0 zoT&?xltgSsBZg72^f`ZRgP+3L0h-`Q1Mh19h>*=yQJkENhvj;s$IH7fT^|4cG0uFz z;tB_EvR+SCs=SGW&Lsz{h=u=I@nwMtMy!YpsR4@w3SMPd;t=;7n^*Fl!<`=9+|^}^`P`mr#l-QqqX^yee(7SK-cP4qsHyp691hUc%e(0gLT|-9uThkI z(F?MQxZGuHT3xC>fu)5H@JMYwpv$YAUeQ&TKQ2l|N5(0812H9v+g3k!&b1ZPx#Kz# zZ`TkimimtQO@(91n{zWWP73w%HkgM%*x3$;yxbe5p?tJd*|tr68{5api1v;3Wx2zV zuZy{4S^Xs6? zr0Q}ufpK4jL^2=cQV{yM$~gL?x@R{JE=bp9I@Wr!v{D>AU}*p18JT3FN}5?L+G(R=S;D zE`-yk#47zN4>Bv}ipmeC-eFS#T`t4J0hB2DhKWt5q{Vk;ZLI`S{qN|}`)gb>^OUSe zMJlcf1^F{?__2&f?%cL_^*^r)>}z5~g1ZpXu&wP*-i_&%{QE$Z&!ef=4&6)+Bu=oN z3JP7nzPITul2%FdyJ zUV&EKL6+v7hlKg`Sy@%aF>2_KWDLGlZ){9Z-7pua^ir+7a|@89T~2TUEuQDmwWbil%RSUy~c z@WQs+=qz0XGUU7kOU9(k;wq9PS8I9}g}*&&Dd{Os4G|Ao%mC~Rt+ zhzV~IHyv$QSaj$u^yKTekpV3nl}|kSc7EdQ?$v{^py0{yWa=;B{Q}>=%ZX1EojRJn z@&N+zWT93kq>*u+Ix$164?!yEp8l_t&*zzn{T?FL8xN><)qF_s@L!M}BqbOFgZb4J zTEM(wcaDAPhbSLioOm(GsRsw$gLZK&LqxNn+!*b{c5b4nuM@Zf^363H_oku8%RK(q zX-_EGF-uF9TFr^n*Tvf6R9WJYFV2k+Q)^_?(NX;8AlvDjv$@~%XL`De)xo)f2Cvh{ zaDo?wf&-LFQ>s{i{X5U=B7Zu@14|axcqm4buaehPQg^A*;rZ8$OS`kqaVziqj|YX9 zYQPB0SE4Ys79oIz-iHC@Xm9FU;SG5P`3&lIC=*CNdlW#OZ zujQIi@@kr8{;FM^cjhM>?iH=zLl>8sU6+%cl`0`V`kJ+7!xxXn<%oVqks>j%fK)bJXZgTh;3AUj=Cm+?AOS*Y#rew_>)s-hb@g?{6$4!PFa#H)^m0ZGk0mC+4%SQMOE$E~l<+tTr@=t5;Z(%SHpf`hq`rz)TvVy8@k%@2CAb zv}CGpi($M@pK$*KSL$8<7bpM2O~zpP$}7~5ZM%QBI)!W-!mk;;L18KxmUSaI`Ekf9 z9;IytE4PNqtE{t;NiBSgHg$O?@}s3%(21p*7k}QuMZ_sqrWKlNl_Pd}FS73aArq4bc<+A`#A1m_lTH zfqK`Jh{mo zS|t1iaR^`JMv+~+FjN$s5u$zkIK@hr%idM}Bn`yOD$sRYr7mG_=y{ErS+1ZS1CtyG zyEny_G@)$`_|a$?XO;8Sb?<}Z(C1; z!B3dE2fSsvcZXqE zwwywI>y?zMLne#2(r^}3AGY8MmXgr?A^IK}wN%X>{laJ!i0%}6>?!vVu==Q9*`AoV zV>vst<}*j_@nOlJN`AbCozpT$TpDtLdXL4Gx%S zuM<-7@p(>Tq{R$;j1$y4hcx7#VGw;1BP|_1&+HYMobzp1RSTHXnHU_$P{~wo4PVe( zc+AyuGQxCyze13*4<|+d-^0Ts@QR0H4CI>eehV$6dV+EnOEfUXFeg}mO9B`o2i-g4 zt~2g~4shYO$)wK{Iy22|L{*MRh~>pIp#2gpt?df;g1h~q;9)gBO1--pMHa@!ap_n_ z?~c@w+OHjzi9XC>893~(Hc%BB`!=diM7mEEC?^u`P?A|WKf8I_$7wTSUR z%ZOlkv)4I~*^5M21He#Xb2Ob)#*GI^ymQgyv7UWl)E&2%nQxy0zX#M3ah^wt?l_Ds z7N$$?!u7#bog>d?Ak`?x>tU%YZ&`^j-&;?g#}OTXX5Ev#8AAiXKnX-d}@X=)FdSX({}q*%Z}7jvjbx-Ob#ak;Y}~lNRT0Z z+L?9|vM&f)TmgL*cXl^Gl5K|WW(?%sUQ77V%QPTvqLYY0qEBfm+~CQZwjoOx`w#l7 zpgdJwDSMj^nuE+f?@hPE*c*TV000000003v0C(RTKZjYfY{qo*qKo#jLc+)Bio+-K zu&4Jkh)itMP{RfXQUH2heRk)!1l{1{Vz4f@BT-aijSCcqAU_ht-}+!zo;Bphff>TW z&O47}X|9WU&;%}modo~gWX)Vc9)dkyBDE`z^TLQIrwrb7%u`pDZ2Yu0PXvO|`kBu-?RJVgc(t(*h1WItAH&F(U!cAh_ zM@KZYl+Qw1r$FU%Th?QOp80>XNNw*Z=?k0YIC}wMlvJHB|uK$H<({Zx=0;wnpCs-Ni&Z zM1InSz}5T`RRRcf_jUl2X{jWmxkg6FJa`-h8UEt)I?Wo_mdQHhU5Mo#Y~9AxI=N!t z$pSvLGjoi@>?RYQh*uoXNJ!cMWKJVn**q^hc_cm$4x3&&0QWTg#HrlZYKl`Ws)#5( zt8-NQDM{IfNTY?mI7?rhq*P&;HCH0g7aht?TN+12c=>Oh-hSwj_Hy{Yap6=fqEojW&$q)qvbnD;!?$;K#`WY^y05a$BSi78!Bu1FPn*x&S;R0^1xNC(an?P{Cgrk(>eH z&uN@^7I$zLkh`MjRNJ1oCHkfmiZy)StwZmwIUWVGr`Jowip6sFnOo}dzyFj68{T(+ zas|Cit0DLSnjUl86Dv1zuvgKL*9**rUuMcHLw*;#1uH*DUJBtY3|dDc9OqxquZ9kk z$UhgjxNa`1(lT$(7nj zduHWF-eO+woW>7h6X+YHX^i1cO($U?mtRAQgoe;H-fuH6o3-Eyt+gU`WspyhOtuqw z+9*G(|DIbsoJIR+gFq|5Dcxz`i)G}H*{VXCjrP>q1t*p&=!*C*`%0h^89D+i;eM71 z4eu~&-?MwmzfBAXMxZ~fFC4NC`NDP7dZ`rj=))4d1Y$Fkg|iQPr*}L7-4sr9ECs3& z3G$P#>`7+1NbB!hu^aMctyTypXogJ6*u=H1<0C($r_+`;G}(YJY&S=|>VxkMBSImU zgQaK~4-?FN7m0z(Qp8z|5h8C_ksr{`=mK>m8vUZMdjH0EkPy52e{V!|+H^AweOhRx zL-BnR48M$$&5Xol$&gz!ErSMq!tcVoIL1z<&!-)dV9wSZoo%3ug9yE0W+eZMrqW!< z)cxV$>JE5|zt}y-OgpYx)jP4vIlkDkGsktF``>Drpep|J<5*0@(o=IzIZSP#gf=@n zkQwXhzQ%ehOxVhb_~*t<&-Gtf6C*sh=8Os74T|w-c#6R0fv$tOyaukxCwoxZ3Z3a& z*Ew0y1Nv3?A>I47C?x8~!{ zkIu;KEUO9x*|;jdIt(icO8o~nQlSW~498Bv+aUh8v%7(ZpPvTL5IdPEAv0(~U1&?6 zCL4dr6lP287$kF33&FXO%bmWGUGVyeVSz+YJe)*8wh(^UY<^?UOIL`MM7tF2;gS!5 zdP7~hDmm=^mLk#>Y}znUWfVAK3jGv=CUC!q#fQ>oW9xrR%-0v5eR%dWe>!w0$UFVu zL1jPUHEpJsH=u0UEN!~B@PRZNK=nJ~P^zuni=w-vK}?alp0>gU4G56vn+ZhZtJsqN zE%Aamr-t)Yt(KbjFHw)J+`>AZ`Wy_Ua4^j9Z~y=R0qpkV1^CP6HeV=*9+g^}r=-zh z5%=Md0ENF==vYnqiqd;5^R=yr(F{TrUbMo2xTkL5tFae z?cO;GBmJ!J@yoVghr)gdR@xtC{fvf>o7W32)hv0z_Db-;pTFH7&V)^bYN5<7=Ld0<6@4MZAcc3YLAUA3_%cM>)|K_t8(dG zSZQ$Q)w|4_TFCNu^;IU0VzM!razMPwVakPbtS#xkfIKt*P*7ll-s2~ESt^|aw^Q=D zx+4mqJ~CEWE0K@;L!7A%RrKB;D|a^cBVH0Ll^f`4>^a{z8e6+0J9!Dx=wZAUzZT5i z!vtQW8|eMl1Z-!ZfsNdwL|WK*67_`s3#|tSZz@_BHQ-nuoLnpUAxw*oITOy!1SSugCWOO>|lxTn30LW!> zlIU@aXRyEw^Bsq%mmgd~#!GKJIcmiN6tYIZrNqy?s2(uhdqbah+nJ(N)S+yXeb zuxliPl530?!CC_IDy&b_rg6t7e?|1k28#c{Va2%E6$bU)HlN*n61P_a3+b0c3{ZCwwJ%kTSJhklg69E4G${@NY2vNz}gbGHbZ2*T@>KZW_fF=bF8V zGv2h|;8&dXKKX4(5g~g*WND;p!3lzG8F2O;F7Z#aUmajexXE5bfAaDtBE-fAxz8Jx z6al%}ff5(CaZb5j+^Y)GoUj8daB3qhakz{3lWhNDYRS)8=})npEXO4lm8WTuO)p0< zd+}KFyBH8h*#c(u2;<%YSy0BpAiB!?fE zRFy*dE&v;Ue9G;M!r2&?Q@Q9Vfgdn5^I4xTSe#-%% zDb~(5f~Ahq!h5EMOd=l_83R@+_@dCo4;5uqS8G5yT=pnIMQ#9Xw$emJ$Z1q9(CijF z@*Dsz4%KG|2ANL_2Bc2{p@DQwp1}+e-5crBaTqdmHwpGI;e?)XO-twCMv1aGQUPRh zztRR1$(?;Xo@h&Nk!JXBN}=RRs0&)9z2BQ?vJI`*$q5$S!N!IV{tN8N4J^DN~K-h-|m%}5f> z0ti;Y0NV4i6933HcaU^tiQi1xaE+O;^Hc_4iId~>bMqDrtv?&qg2?i7@0zTLz{7NpCwV}b>vIMV+8(%rn&ffH_$_IAz`{q5>I0D{b3R%zH(b8}M zTc;@!gU_uug{cx6sR=(H>ozSK?Oa8r!pqmu8{ z<{gO*^)c^0rh{4}He$CfPpFV7$rqGWVr8CD!{vk_zA!7jqzozXxm>nioFK-zt=*DkDZyx)XQA+=_Zpa;7P}6P^7hXR&7* zqyTD{1=c&6Zl&_KYvt&KG*@jsC>?MFkTlq>kgdfxtokDPCj01@(H`9fM79a1BO{Wb zlBo_Y3Vaf-$2II9Cke()bSVM#9I}^Jyhdq}#jO;m_F|JPE({3Hb78{mpKx~dNa|Z+ z$D+@ei2GeUHH&^HlyDO`D0(R!<=wtv#4?TzTds49TdzA~v)SR{b7e%(aIg4a6Vp6g z%vkq`IxI5w=*M|iLsoU4Uzu*7> z000008dGgj9y2}hJ<|pwKAV_SVODWiYh~v(`-YWCxljPz8S{)@P3rtneF_N9fi3$| z+(iw$)Ppik9sOBD;~A{FPH3KVBu81umk}T1Rns-Qu7RDmTM_rM1!G$L9FGkOqe}b! zZNksDrYBA!V@eG4rF{a$5Qut`D%mw?rUI7dSh@rdT||GCf2gbs?T5Dmc87i4hJ$76KO2Z(R_zJ?m|VS;D7x)swt=Qq}E^y=#{R4{kHF z*Aw4DqE&eg00001bIFTdl(l8}Bk+1TC^u8amqKYuZ(C#;P3E=#lq+erSYge~!k^B9 z+cr*0KJb#FX^o+;D*fA-C$Ej$RQ2ut%O&(KBiP+GwtzS_@t8H1x0AoGA(7Cyt;F$n zt5^ibgfM=K9Ep^*IDZY3`fV2oIl>7Nbc#4{sY3S~a)+R{hD6nb9N_(1)^mf$^%4~_ z%Q>|2I}ZzI+ho9*%k6*199~B{6zW!PkbnBI$UCEqpUCT7ox^h?Ra&P)*jMxZ= zn7qy!iX1fdVUz`nf2OrJdUtwLjc!-K*EH1vEl&}nsq2N$q=(2-gip6Q)QTcP} zjNPQysg?;79NYcf&C>uox?nKcHzAzh{N zlMnOj8W&pvbTwG5*gPU81vKE%`|7uc`k(>_ z&kIVI%Z74vvw~Mrl_&V`AJU`k(L!=q8F|{tpFMDdx}3Hl2tHGWJRW;1H}%2uEF?wchcNsX(7vF<7~HVT#weD z(7Hmi@0cAv0|1IkR~Pbio{oZpx;Pe%B@-YW#bj=@;lItvs2%(p5&_fsmXP^^81Mz% z%l=zNv-ubd+OcZP!Hu<1|BNV;HbEEwWzx6UCT6jyCL@~0J=Q=8M)bHmnhcG#TYu~8S zz@FaIlW2EqJ4nDxi~)D`ADBUH$nQg5s633MZXQU}fL-B_jx!d?AyYMASJaH|&o&rm z*LV}rjd2Rb|H5*FLoYBrxu0ufl^&Rm(DU-p8EvNr)U@0tV)P(TAif0I-_CaC)tfto zb0Wns#bzO_Tsi84Le$#dsr`?FTWjRBO37&1+-IWn{2Z8se0HE4TlDZC5`{O{dsRI+ zpI)d%G`5qiT3wS|`pfUQ9idH3I3n)qmwD%i(Lvhd39)V;JMc~Tw5;g*%&@?=!dOnR z3|2#Nwx+&F000000QVHLHylH)y-na4sHw`;6JQ;M%|Q1>yX(LGUmYA%<}?CX=(Hu5 zF}$&xwFx;#YsDAq8)tOaY*6#Xf}m-uW_EyTdeI zh?(zo<5~q?EuEes{GK!`5g52a>}u-^`DO^rBL-FN?28Gx$P!YF(S-eWG^6w!hcI9Z zK>>*w2=!V0by|z{Hs$qu6)3_&aR%%s2x5O&d39qZ{y8+x-F^3U!Li78yqtqn){e2P zp-pe2+#`Wq64_`XZ7P$<+WPL|wV>lT000000^9f}b4&~hsTLx)5wg^dhZ_RYnwcUL zie_5+dW&nA#1EKw+Sz+I(m@besqC{V_^LZjcYusUVs1)d6<0X+N6kF{VPn8xm>~FM z$N1peDrG;q@B6!Tpf4hWX5RLBT>Lg(idI+|zG7>dtKbgSey>Zo0V4p#8gffae6{;K zSa$K2t_2Hxl7C*1hHP=HU&@|RS}4Z|R`$U!vLyzj{$b&!TdQG7a=-(yoo7eF zT)IL#R5~RqYo*^lG3Y%&FgqauwfShcbbe&TAo-)?9U>m4l|PErG0 zJ<(?3$H+Y|wJLs>Ro$V(Nd+2{>FkP&BQ)YeMy(QgIC&UEVrqeP2lSKx&Sv8^4vn!% z0Udfnj~5^qEhie4NNw{pCtQq49h+LTXu+@6;YI1d%aK+qA%Z{CT_ltdFDqch&|8{8 zluQy|Z@U>iY(mA>2*(M{`Auf0s~F{fWYeZTsDSC-g4A9$+;4eUpnKIIz878U5R%5% ziJ~IT_CZ3twlZ{QuJTO_kdu*wp{^*o_=@j#TXf_O$j@UM|K zst&w!79;Qc?jQ}@x=4zx?*_7vAP?VT{%=;Fq#}kv?G{XlaP*jxjDAZ@+eE*#iKWnYPwjdA_3P` zQy?nzyhN}XR~@tbvD}2hq76c>$A-hG2gs_;1>x6c3Eu0#kjkZAM19)MNOofd5+$uxxW0e|Ok z?IHoZc>6ob`pLh%Fy;U}=nEl)y1B;NlqyfB!7w+dT6(C+ZOlouYeLg&3&E%7`J*bh zOqQn<6@ioJEuO21b$YXVlBSRnuC6iy98V*5^|vT)^GVBk!t1SQg& z^}mGAwb|npLtRn0x_6T^AXD!tP=eeYXjY{P!22^{b653g$VFT@qP;?GmDomwpLE zQr{aohs=Yc?bA)8HB9V=-Aw*N1(7enlZ$L9JUK{Q2{QMSvNVmiQ)1lUAR17qoK=@; z(TbElq~L=QZB%NmdlFLdo=%2mO4%#cge7gf#HK$HPs1cPEis;{6Jr|YsqGW=6W6_2#Xs-z|LK z;i}dPsr&HsQfiyt44}u=iU_qH9h(DY>IcIvm2V}`*MHE)LMTZ+>LWZzez?l2{$Cic zM9g_u*ew#FJBzCcA>z4!_I-Ej+Y{m!sL6;z;YaoZ@J40hmonnt8Th6S*Wy86I#(=|hw3}QQ!W3M*80>`^Jxl9uoLbQnJ-Xy& z>%#gQZhEvDnwEEX;=PhLO9}P7wIF+mQ52ZrmM;m$5*T>m#(N(ek}IbZq`gzOXiLvE zI&Irn)3$A!YudJL+qP}nwr$(SxAya%e{kv|W84h1R;g4a>FK$y@iG{*W?xofnI9+* zJ}d%w%pBOZ^>CWCBMPi74-0NX+}uSQbF!3|LG~10M>xNI(EGjl6J1}|>2!-ihQ_9E zxubgc@m118X-o9Iy4MMg)?*(opy)&-cApHZ()GFY9@)ouKb6Q#R<4kA;BVQ?GE@~` z(Zod(*-G5-S5+v~^lAirw=jBA0y|s6F(|n^YhD?AoDJkS8B&5dTemcAdU~@mS?rmG zj;*JaX9gXjyv}Q`Y!<8nB3W7jcBPZH&JLxZsPz{?rFfXCFvpxRFCNV_4J^=Fx^$)c1qY=z- z!^5J?cKRVf-RxbBfJ`rsHHn0h1rno^k#lvKnf8xU-f@P>v^_qi8{+y`Pm4Q-;E9eql(?m z7BIy3&2U+k#RHvqBbGi~EM6=3N5mt_ZVBUTPI&}6xPuB_qr2K_bTqaGR1+w;In7Tj zxXU7MpD_2c$h8n^ZQ1Te=!J}rvd%;e`uW$zQmV%JcUEyTZwBH5Mkus#D`&%l&T`qI zlvxF0Vxw1xSjUBGcq#?^?Agqn`D+&~)!3W9pWYwsu%tIG#bMEhc{g%^JWL#S z4?cW=`FSBb!pJqnIDTz;vx)#$%QW^qL%07HQsFmX)haDxQfk~$d4F%xAXo9{9= zIjcqIRQ)S}TD$*^cAfJC=nU|TclmZZ%h6WK;NB^(UQ(5pgx{s_H>A!>C>H@W?Ot!r zqbOyiN>rjk;Uay$b?BExSkS`4@GKMm4xdf^ZL!lu9YlHQF_=dP{GBDKqfvjG410p<}+$ZOv0;N<+h0F9yAH2B}icI{s`yy(HY ziEXuwy*G}9+Xp7 z3KzJeARgjSXujlN2pxvb5fXs48YlCaI=PKYg%Y{MvPVbRf&4w00b*|srpE*girTqQ zrE2!U#>eewbJ6aQvGQW%8sZ*YJJN(;+!Lf9cP!rE$3rGJ!jnEbI8bsX>K7ZW9gqoT zE>lP5eO-&>?u*xq%UdA^o~jlkmIW@cB_WGC!)jJQ%JfP(gU`;Rw~}`ga$7HG_5baf zFmhO(rAYzY>o(ANkuQm);7s@N&2>!0<_qPrTmX&~8FZBN{4V=Yj(@8Sejtf)mCgO1 zAD!3Ns9!;-fs%MSJ)|Pg7Jfh#P2L^(zM+!31>0q+N02N46Vp(DfiIvA8`bN=o;-4e zZU4F4v?FEn!?To*Zb{4XJc|`55{{BGSGt#=K}xSPjyRZjkUmXN!ui9+=zdRwA6E*2 z`b|GdCXSfXYb8SfjldUTv(n*YD*&`PW4XEr44rv78p{RuISg2(WlVuK6yExT5w)MM z-cO^;6x+jZvN{-h(8>FK8zz2|K^ zlweHho5>5l3G_h>p#AM$=tDzYGMf?S*m`l~a5hJqR*nHAg=n{L;VZ!>0G7pc+vC0# z!^91;CZjco-1Y3W@FzBAy55j;$pk=Dmb1axA@u?;nE$<``D3aM`UQSHY!+cOI5xbG zm7bN@p8uVt8V_tcVz+VRgnYuF zIxDF3xpPz{cY1YG@sCr%*0ma#M|_Oap*!|#vYyf)J-6!9%<`b0N7JWXjBnk~vh8c# zxx*-QAIgk|{hzYH>x8JB2%^N|FvgY`!&Db1fE+qqRe34L&ab}}^+xmFm@%52cI!9l zCS)F0#NA~I<0gVBK4}wkDzU&S>b?LelVs>je&)rIRUk-xXpW|XeBb8uv1Kao9!wWL z@&xncP7o%6mZtzgu^;2vUi#-jerpLN5SQ}!>&_j5Y}8%OYqy)r8EkP2fSn1uoVS1C z;0|JzjVwU!aaEtSg%p;C^Q*x{)L>wRVwre<;+U5To#?xLx4s6Cz3= zk5dOqSe@{{1A$f_LG*6@8H^W*^Qa>$kI$-5j~K7 znq;x9pJWIPrPiU0+Kf30$r~mWuUIZUqIYGuDlwMssjs}nw*)lCGSVE@q8csq+$Ldb z#=NweiBMV@`U-&^bENidQAeIhI@y{7l^odQ4x{&eZ2IDQcuo{Z`Zqc_s;n7)r&=q% zelpGjSu}%90@1F4b0*~h3A)HAKMr$iWTF@>6>QS-N`gi2%IZLve~9SKx7M0VHs`m~ zkh7ARhdmXkR(U&&(=KCH*zol6svQ51z*|wtm~!S(whAS7xmK^xzQ0ZB2ifN;ioIER z_1j^+>S4bm91|uzCzB^@oS`ZC-%JqBfMPBP?dzdF`n6VLA=slFoPT-&GJBD7vN)9F zIm?`5d{y6;)cp1^{)?)#ayrZbJk?{qwkgCy-Jo6`j39Z%3AeKnQXo06!1I0CAfWEa zOG9GbP%K=`k7_Mxo)2e1JZ?1kDJ^_3i|^V=>6cYL4VwD*_!$Q$EBO0R;fQ$so8#h( zt7PvEul(%}D$$VzHr zwBY&L2~JukboG+N1EoiiKwBPj)@2#bQ}-Q={6q_&)NA{&xrg%NYnA}h#ov*nWnj$1 zk6|pvqQ6t={>#$N%3x8mEwfD??(2rCAKLCp-g6Gz*omB7bvDHgrV3_t>SN z>^qyKkg)EJgz9zI3W$A^*Nsw2R8$>u=ynr)pR_pj*!k12TV^e#0a-~k1{umY@uWeh zfUp>O>^0LYb?TfWV-J0?&Wh&Y9&=ih00`tE8N{Y@*+WcL^{fXBeLVH=cSVDHd6xwd z=PAl6CVxZIU*>BzBkrndrHe_!4@T*!1E4Ty&N~7elnc$zFS_*`N0eyPwJ zuJGQRXSvUaI`0KYCGr&V+a+~=kPTZ;!$-9c`CM>Fe_cvJ#;xTBlSA=cf~yiQRInG# zq?^0E=E5k-Cnt)nekurLZ#e(H&O;NVBSXfEJjuUfAXR<~4j;wK+nvn@$h1LQHgfCv zKl#CiVK48HV0m0D>BdYBD{~%vpx`}nm1K$l4K6Yw8j-<>(%i5;y5VllRZg}oL z;~?8;jU(~E*?rieXgVIjWo2{(s4KLqdqAgpe0ZG;D;ryZnAIP57Pj^3WM=`=5`sYF zBQ;GktUr^24;xTP9KP`_JzJf^2J!Y~iRauvFm=TTMV7Afscp{hNT%9*YrEfH>@Wk)R^JWhv4PYt4DWmk}$ud6&LVOGtyW^P_OcdUEFzX)6N9?_C!2SDT13$ z;h1nn3B>y#nAY?qm6P_8hnwBOhVo7AGym?b7^voTCwel!?@Inh#*W^p#Ju^24DDSY zI zvIo722rV|hUi|ye=w~FF*)@7HILBmxLsq^wa*ZVt?{f!qg-a1F>$4roQ0U%rZ@SA8 zQsoS@wc>G7v%{3O24N5jG3TB0A=#5js()Va9Y;lVHy@6E5qg3Aq&C>1HbAp`GzLQK zys%yX?lW)ZL@Q0|o~~x}4NgUkrlKEi4O137|Al*;WWq}4h(bofcWdLt6R3NHzH|pqLb_rlf|wra_mB?;6z!f+GcwkAioQg$@f4YY2Z`okx-QQkg26 z))8u=x?sh1HZ*kObL$W)^5<173K6ef>Eo=F)==#cQltgp@<=nrUU!;a5UQe*D-hAk z>f7+>#DQ#8@AiuW5*MNB7-NlX^>|+gyqg151VE$tbKKbkpyQ)Z?o5Qd-kairqxo8A(VltRW|1ky^W1Z~)EE@)^N~Z;B zgFrtbyFJ-HoHp&8!2VuyV3UA5(r8fRlpZG1Q|P#0P7aU`#&OXhX-eELo6+g5RGE=c zEjA*p3AJli${$)YPz`$iq5Zju@?$58tAxS*hqI|Mw3n9DK!YTt@1G5XS>8MQwI8Ms z3Q&KF-_WadG`dUb9|Q3FHp`l;#2jYOX!|Z-9=yG%(;ZZRUDs1}I`Vd$kyklj65&0j zgoX=GfMV1cJ@j!dKe``u>(s-KHASWPAtn!6zQ1=(F#^d(Sceu8O{*g-wMR1Yqx5T69xNF{sh*@q-`VQ(uSrZ?? z&c6j_@O@&T6}XoHfdp!48Cdsu#jqK=G#wC<de8xf?99EQ@u6~LLkfb zH=@5Y8HZL136n(&9i>*B%FX8Jft%6i6J0A*m`%vRSv zp!F60yIf>jBy|hN5-3=?G-atfjXFX?;4XIjX)1LZq z;Z%KvukXyBYIIwG$ZIr7!^;Ygjj#SB+g2{SXrpIdg|p7Xd)*5NGrjw&PA_?iFk{{o zQD~$=hBozWv^NHRQvd!jiXB`IjToE#8M+O~;5r!6+Jzb>A@aFZwyKsa&v&=|Y*=6s(Jfq3RPU#M}%lJWv-vnqXj5|3I9pPVnV zSzw+sK=O#ILF1SxoY5I#HKP_D?;;CD?6HUt!fRc@yv*8!ULes!^+%S;)i<)#xwE;Z zqOGqggCqFH^(wNIZ;yepHtiJY45nibMdq67LW+W2LL<%jeYWQ#atE!W_J7^r4y;bhx%5sxYIS zgU;kdpp|{^V}3+oo}GwO$=6qxn!nvKe3s<$PxmR_Mp290oo&|ctny-y+m0ZzPu+oB zRKT+~;nAJk#&$meqQwkoK6ZbJsv4MB2wW{UQ+kU@*F^b=H~36N@sB!A5W+S$7x)nz zek2B8r@N3_UC7GlxL^TtMl!ZnTwi{#A2JiXlra@i*B}n(BMB8MXa8md6iYsaJI3+U zBq2lpU)HqbjttRPY*Wb*}P59eU zIoR2h`{Zbs0@Vou)2NUWfu$Xabbh#qYoY`wrIpFz+Tj32{61L0nN1>}PZlwv*Ab0= z-8$x^3k%rQ@M^7h=e?veV=SX&_&_to;e;O?0LbG;P(JJcZ=Vx+omSHzYISO*(S*4M z5E6gLpziGZU!ckHn_6;0Gg2}b0)^$%islHX#I%9Sw&Y`2-LutxwndhI)-RBCyV5aN zT1e%YgNmqCCksCt&2OwogxYKf@6X<1Zeqz6&%p%s&ulc>dyGp^#JP{W!6yj5=zi`L zZ2*8|`T&%R8h?q~GtalP^U_S)@!Oyf$FAqj_U;cI?@G-qZ(%?{XS=Qy9@(!3XjEnX znyffpFoHpq**Y84E`f^+dFV1h@MByj>}_G4&{I)(>peUudwzmDz5$&_;nK_gicA!! zmo8;;TWtvcA0*8iVaQ^>3z!$z@up%q?pF0xvvm>H4nDFbe~xp`u4U<_OotVb36cj* zbrq{M?zT_Jk?8>zhbAR@;8-REaGW?(EzL;B;pl)m8gWowTBmRtTe&J#Ji$hisUM=# zfHQwt?^J&*?}L~I4TRMOtpD6ViVL0kDjK~)O zDp+1%l*^LKV;dd=kfYsyXcUKW18o8Tz z&qwJjBcspVt~1RS{b%Jbe+EzpP%tk&Q2u`|-~Wvh;aH&rn@)`7v-o){805#$?TAr{ z;k!FM&>jT=m$7`mpEm#i*lKS#qpyAx_iO%tPYE(UFls(r1Ds{Xp1F71?UR4|K(9V3 z>cc~CMqzl3$6%O56KZz9A05QwT0h6NESp=;NAMcQvLC_+0DcqB9bjiDE*yeNsa6y! z)rHj2Jm>&_R1q%TIkkG#6K1`GPhCX2B<7{e^rb(*QP(CG&CV z#7ii#GUAj7!}eh?#2Xdu%VlcYoDVqK3ho8LMf>-AfZmQ~*e`pQp5xICMzf2zYzTFd zlEx^p-2y2GstN?*i zIMU7skNfLL>{hi%TJy-!Y*PTWBHbsVhM^ROLyx6pjTQ2HH&aT=l<^@!29_g3#p1oX zW@=H_11WiM_J4Xp{J754yVPSlP+VM#d3==x##1Jw_yhTg869zlMcYt-+h4D8kk|?g z>#S101Mu(Y0gHr{T|j%UM+OU|$R`Qs&R)_Lf*c%EFfvqr zQ1rZEWsKg?IT-qgnWQNKp`Ax;;puR|Q$N2+rh+PO9)8Mygm9*Fpz;@C@#wM>!YYOI zNodqh=WGmH1$x^bJ~lna(RJ^BMEAB}ome%ne zB7a^F-Gf1w_!{P5=I+D7s*kb-DsWdMlsub&(Fmtscovqtc2^g>B?bs^2Ml>!m4jVx zsQB)wU!E@#FfGm=xGiBRv5%(uF%Sskh_GlO%Y$tLd&Q(z_+;_%Z43^RYsDxX)h)_B zoOFGjwOKFGm&S3maK^y*wt^geAUdNs5IbFiy)2T}MVN{7G5A=!mxCKWxoYh%WJ2w$aS~cM zgxLz1YN^^$fKWW_J*F>E;U0U~98G#ke<1I^>%I<-A(@itV$3+bsU>XV2+@?pFFq_k z2ZY3p&V8X1bs$ujz}-JohFq?#ExjS3g|h-qMM={|qXA zGF6ZbrAGF|wjUQJgeB$?7i*MM7gYnq|CzV{lYo8Q1PRs3?B(z)o#;OpD33pLR?Nia z9yzQ_HEcZRYgAF>TjpzH0Ww-2#>Ht+djA}nHngS<(LFM{;9-?8e0T>&>;is8v83PvM z6s|mo0Ruf$Xvh7($r>05qXnbt8DhF7RSzs#hz!IPFKEE5pSwl)z&wiiq8#BJlJ)e( z!an+hViVBia67TS)>?P{qAc|2Ruhq6T%WdP$JeJqJJ{X@Efr=aop<>(x_;ESNfieg z53s3!3M1Edb_x+F-1AE3fc~|i(L3Ho969l^%98cdjhCeESu{G)ayKaa!$C>6lK{ncB%OqPQjPuQq=~|V; zW*iC0u{@u6hb7=CrgPw{lzBhL%>|D}cxf}DfK4xV4=dV`BL{GFR-Nbesh-v|QBn?6 zJ)tz1!$^#841M~jwQFD#))VcuX4|)~2L>=n>h7&9qF01ccL0~MqFMUO5^Lk}QdQ*cMbc}E;RQd z6O-l}K1QxZPQeekO42aQS@^Xqn9=E!X;VkT&-Vt~V{Q}ciZU=oLMSD0z7!k&1EHV+ zo54Tq<8aMN1Z53~;)bb;V`q|;mDr=S`mj(Ubc9OuDEl1U*E2%_{wlE9)ddJ2%)9NB zy^Ri%ZT@#umrLafG#xpU5mt;sOd%jX^^7SGC54fMv8?F`3YfyyVNTw@V!Pghn4&md z4cSDDE3uIU0Hf_U+H%?*RjbsLu4DaL!GOOJW6L3;4Ja)W0-&y>cAM1Oal_P1;j|6K zl9c~HwI@}fWRQe~mVl*`e}=@Ahybu;A^W zHY5kUL`0Ce4I7DXZuC}57<=+_^+EU;b~K}1IS-n#^xN3t2>70-R#oz2s--chiX(Q(Emtfco2LmowWk0 z)v)c8Q>%5-Zw(SM_xuBC0_8Ex`K11np~HMThH`>!#Kp>(y2`F3Q>@r~{=3a^3ZZ#lvb4OR({vM*_mJx-8z{x`SQJ{M z#Hpd9JK$kgi%siQ-J@S2^@yLWh+pd*F6f3rl@~=P1?2+(>BY6x-sI{7b0R-KxeZQu z0-PS~@|>15%G4U=_FhG`5o5HbFP(G(R?VmRHYgu?W1S(c|IUEr7#`S@RtV8mx*ytc^++*Zji9=J zx&VfsXBP9UUK^qLTi52;dR$7Id0Cw|83ks677!jdlr7U59wP z?7M_}K!YJg9|D~feD&>z{`SfTyxG5;ez(k4^KEcNNO3G_nj|q;(6l@WKw*m^_Ebzf z$^{rEH*Il8I>Adb-G<)^;E8htpvn%uH%)XazEl#y4zi%cMHls!k#^cl$GYf~k-+^0 z;e%U{;U4Rye4e5G(Q8hsqN0y9k^`HlJ#A85G6Dur?oXksrB>7q==&%;r~Eu@>3k!P z-!M+w#}*nfw$?+y{PDW0tj?!6AJy2evK>ie4>v$J4XHtq`3Tt}NLgF&035k;=37gL zmN2W-uYF;?Sh({RiJ^EU#rUOFy(SQ`g6wBJfIcS41sN$y^R^!PmypMHaqnMQG}J~2 zE*$4R>WXhIOfEXFhE17`&-3vY41LP7d!8ZA@uk3B(Mgceb9?-a_afOnse$2N)5d7fjZSTc86{>uYG>Sv}_6q zbXmN$)#X_==@0fkxg`OGTE1vy%!s|O-|d_7I~$TV5M;C$d&uPaG0$YZX2u*)9_KMFW1)o;! zAele$@}2Q-k8Bopc@DB1g_9Z`WX~0sk68;58r;M*vOYu6$~z_84IzM?(tH)7V(pmw+_fDdEw`wG1%-d4zE2cW_&q2 zG2@h@jxveRn<(iJ9))a-)IoytCrbpEHN-noM>kb+&#HKB?BC-C>{DpLa-E$zW47Lx z2>&o7f*<%k_O5&@C4Z@~&a@{L5mIx5kf&K@0}V6JJQ6My?3$24C%X$`1|R=r^2(D5 z>PEJtwLSP7P3(@}&V=^QUiW#~m6u=^^*N4pWHm%q%+&lz9Rvjhz7u^i;Z5`03E&3Pn z5qW97L|}yfTy>lHe7i%3ivp5<;o5Kll&mr$-;)t;gLSKDmqK>W9Yt_JkXkL7xgig71e;wPb zK3E{SCv7708>XLD6<9rOqT}Sm3oz`b#5#7^gQrc(e^%ar9OFV-Fa&FaVp#ydTfDZo zE9*M_oB9yFLUHQ_c*W$YYA~X;kDi|#hpVQnidCSQdeZLVcQ*7)kZeyP6JCUK1C|oT zk%sGyqO=Ss_vJcy>&O)URTGwK6a}2RE~a@xgLjyi`8)TS7+Yen20q1n-%WjFPj@M zo1(qwOhNn^xxf_;@l8Xun|!~hq258@IiAW5wd$4N5dT7mOH9~FlLtpUBZoY9Fj^lp zkJzMiRPvZ+B;Qvt1u=vPaPkbSit~Es@mYE2L0U*-&ngO|lxN+U@k3kL)2lpc$qo(z z*4M{W9_NmYbeN1KgwE8e6aW&H^r&ck+jLP}sS$(skM!4RX7RF!MGQ%uJ#5T;zHmoc<4|GP;wZCF0w)8$u_PRj0&Y-i9LRDaK%J+Yl3`Y8F(n809vO4np=Gd+7)rq zHTEYDF`(Z4EPk-9ji~QW)^Is%Yqf`g(CXQ)Und$;2|VnezTSmyohOR4o%@gF?jU}2m6u^=W3fVYPO6oG z9z&Cmaiq!EY>yp>*KSDtY zT=Ys=HwV(?(0ClANZ|_oa?PcJCZbKRXfs!ZdA&#({)=x*KY0&|6>)IS)?TNzccyIz z5BW`=_;V))XFD@4Q%q?uEL~vZQUpH`H_gQ7G!$ti>da5gvJp1dB<&cl_xmcLE++$n zPKt40eVNfo2nQLTLKc7Cl2U4X7{DZbQq1PEwqW)iT4>Et>g|y8PPiLUAF>!UX879)sW3bpU@i3?=YE zZh%R^(!@C;aX@A(gvHr)b@^vkg-;J7;wjr*Ab0byHEugVvJ!7dsDZiH(hjO%b%PQ| zd^^vZxCyh#ncG<8dhShZbvhBqSWeiIe<9BzRjns+%WsqF&dP$#S(Ae1v+0C~O!7I7qXZYFAtc678@3T;9>n9RAJvVI|zovbj z@FVmYTiAuaO*rLPw*J}$#}GR?Plz^Pv*)fBw{4Z%qjv48_`FxA+B7rF;+}7xXp{B0yFLIrz6D2l>`zGA+ zMMKy+gR6fByDen<&^Rff7v!A37)7*ktDZ^WQ7kz7$tD;SPBQ*)IY^X>hb!p+y~-Fk z6PY8JdZw{sI+J$!?Gb})iqJ)4*o^vu+Npe_YHDr)8GHwc>;H)Wy+WC(Q3R@PeU7-_ z3@7!{TC0TrL}`73nOtUG@ZD(lNOWoj^s(j-eOUuule+#r4ola{b7l>OBSwGr1oqNX z6|Q70$7P!!7|pN$rM0-zsk}YTC=#L1-2o#=+s)k64i96PPD@cbylQCQ{jM9P_`Glm zktAzuMB-shs|4SBI=mz|lku7&KGw)cv58TzaH5m;BP7$$4Sn2`I&zvElQvn%o+Axg z%?t_}<*TA_K!1!^6b+TCGMVfw$Au^`rgvDEN;W{PjyGC}@suivDrRM$CL-WD+(QE> zPnful=Rhc+7q+qLyfr2Z<}#((L!u3uJUgzM5!dkUAt-%0E1ozLzk4lK=;}_cqcy*jEr1tu0hP%zp8hfA|?qZ z#Dh{+J{V=m4!3O}2O9OHcFvL!M&a2=P$6BP;ikXc7>8f&*@Q zoRQZ*Qw2k)Z+KDc779eoapl0UA=UwtGzH`#r8*Qh3J1EuzOVS9{K6Bf>jKZ(QybZq zy$;DYHTjq_J99#*Nl@qokN)^B$h>+*PWral3jK^zxA5!Z9vBaTC%zx)TSb~VBib!E zZjYl9_+|!^+T5cMSe)Kq$|qWq zQ;kVn9&l~GECf=FU21G09aONoz8q~GZA2G%DY6qC34>3^Atk%eB0(74eTVi9K8)?@ zd(uM0^b4E_Qb%xCO<1h94VA}k2g$`e@n^k;=2Jq@^d)X+eD%1u$~vMr(uHfiMrg1J z-9MXKD0shmkF15yO1jWCk%z%HorLMFSjPe);S1F-wnA%TU|*yx^a1vDQ0K%X!g<~f zUI1Yr7pN+d(!GUPUYNJQM{#-E9iKk6`ZzzTtd+Uet*0YQC0yX~ry&RJqbpF_!ZEg? zO?JAI`!fK!J)q-jKXN5wT$xcqMO8+`HME~a z{LD9sr8cU748er8Uk0Mw?=>@2fUHp`4nJ& zwTd!ir^?|uY(J@UkxLKvK#d42@B#VQ?Mr>He) zn1H;ayD2l-AtWjBEk=#iKmw%`4~cG$z=JFk=9H`YvP~nE#y$xDz4rg_fW9;9*|Jj+ z;p(%TE#TK0*a=nFk_i|R@j6sKK)s%fRYg&SNQDcm)&u$POMo8_{O|>9|J?$W@#tv@ z2@WT7zCA%UT!fp<$!_|&V16*e)nW63bSddD#qWMmNxWWoqW$fD+t9D8;@T*vP>VRi;!a$BPzh-xm19n>lnr#NnMEyJC zt?EnnbA_JWwm)2`F+SYnosx=={^r?;r0jmaL!EQ+DBCm?=%Dpet3av(`HjXKx(iu%>;Wt{YKhdHLNoD%0uAO^hN>0nv!>Sr z*FCAO?1Q=EZpT_kiri%AL?KO$n5jJRI8EBf=;+@p%c=!7l3yJjT;glFdE`g^You{0 znuSLWgIFpHEaeA`eMrZJ{x^$3R+5|l`%cx(ni#vH^)FW%5}+j0uJvg7C#P!-#{cn6UE0}B!I(Rx?+JLBFYTD*M~=- zx#aNZJxBVbH_*206k3XJs!S7731M5CsLQwI(8Bv`i2Q*+h%$ZwEM{E1N^%(;kh60n zW}Gs-nRv{7cT1Cq)UnHWPfB(7$@$n9B>1maN&vn&QBPE#>Btw*^gN9FO=_PZVbAs|ZSst5_yt`&_2C*!++ z&pc@n$MPq@WnM}*`Xo1^14GGSA>ffTY{Th_h^X6KiRY_~c%|pehv2eaWC%U0TBHDb zgI&sE$7?PmWVdubce1m>XFqssC1@bki}pv5eO*U`S5|{7H%UiFAKvnCG#T30g&s|O zn|E$=@ks0e$j87(yr8yprJAnwO~CI?0gd=<<0uLWd+)f9it|#I!ccdS#lua~;H~J= zEccu&$gE<7jqJhXiDbG(M!fP@O*3ANU+8CuvT$Q!8v9?CqksywPi8~Fq08jSywP1E zl0ne=AEXMw9dd521R4!;F(feXUCW;}ORt;1_BhP30xX9LIU&aFKLg6TZ^vzygA5nV zq*x&-V3q`9V5@n;dj)&u`{M6EP-_zo52(vLL~Cp`ASqX7kr-s*xP7JUBn4%?0)xd&^#P(3M~2Xq@wGy*XSlKCQ}o&K38(9>D2Zy7MtO7NFj zFZya9oOpnxU>|PX$z=}N3bI5B!jlO&m!v$rz67rP z6XSHV&L{Wm*(t>G8-LeS$GIKq4t-ngL5lP?j+5Ms+3v=-G&FZf94K4#b@jX^vkgY@ zq)iH1;{sO*{oB!iXm%EsT)e)pfZlKzNFpX%$b@vRP{zB~pQ}>Nm>*A{W}%h}CEzQi zn2Vv4x8nAu9QH9L+4G2QXMGznOo2IP^K2fzf?e*|$ ze}!{pPV~j#oqq!^sXrxpKgg=lY_>lxwQQ%QfPm!wb&&&1wBRy>s{VtssJG(A2hTy; z`9%)ptZX8P1jyL;^i#TurO|sb^rJ(=E z)A`ajtma62FQ0*Mf0Gx0vXI<=_#}Kdv__cwFYLkO&sGs8mFEnocSna(?8-5A#h1jT zN~!mYP2lU37-50LKRvr3uSB0o5&PumK|^!KH=V}pHOpT#@I*47B$_1!KFIk!Mi`#M z4j@?l(cCawZd?)M33$^ldAsw4*Rao^skVA`D_xVyK_<67$fz^2w=f2(uSJ@=)10F)2C6nh&^#t{tKop9#q+r+bVXpQ+#>&~4 zrgt)oB1G8HQXw&bUGHS<)yJD+KDyaGcjWT@^02m#6(xs=mDC0Ij?E37U>;aSOpQwVUZE`&3t{KQ+6p?!CS5Q)ah06w{~n|+}GsB8k4ocVmX z_(0iC-=@xGm4IVdVq z{W11NrVCbj5}gFjU?S4lhcdjJLf}mVEH?0uH+0=;4$$`aXV{=RV6k}9Cfex8D4yPD%|8QAJ)Unbpc_vUDtAwXwVyd zyF4d*?{JM6DI&oA24BE<5_Lfiuc`z)j4vZ$TU#J4X%7g4`L$04XO=~c3%09Ozx?$; zR`$o%1taZ1XdM;N7g}eq!4*eIu@kG0w@~^swuqAVb1qSho^COSr^1mf(1HRiU-aeU zBbZmN7Q4Q6A&^b~oIholupYeRbg2LU002PyaqvW_M^6atw<>Vu zr!kr&pZ|>)7Q6ygzFE}k!_7OOuY{WPUSC;m!01Pz-7=yvyo?c<*gbX|WzOQvqLs95 zVm|4o`lAsl(O_2|^t4GhJ-!@-oIB$zH&TVK{+EIH7{cq?)qG5;p_EdWqd)*#T>7vv z)$Q9Qg37aymN~!WL=nyP_bjKQM z<$^B@3wW)Z+4(ybk1v|d3V-zFcKs8Tmb>sYB*LU_DJFv&I1`BshjgYf#8Q?Zk%tz@)8dG#vb*;VPLoM01(Ewo5k(uSGMj10T~S)dzth};qgnPleJ!inNh!w{e*>t5C!XRv0`lT4%lT&w64a(&uv^^2MS000000008ejm?W) zi5}=GIlkT7E1~b(gYfDk{FHK&wE$h5Y!s*hLWBSS000Mm@o_TFZD;*iYrASNP9&M- zJJmq*+fwtET#;Qr0@t3IC{lNcktNENL;g0(MBf$GWo-fb6IkCT%6!R^wcoBqeu%hP z57Ixa7TbMx9%T{VU5SNucoT^0{fOfbCz|jw)k6HhX;@dfDB+M9 jO)-#QWp&|JM>5jg{kwW|+KZ4MC;$Ke00ckd-VDG1ZAItr literal 0 HcmV?d00001 diff --git a/src/install/config/jmx.yaml b/src/install/config/jmx.yaml new file mode 100644 index 00000000000..09e6e02eec8 --- /dev/null +++ b/src/install/config/jmx.yaml @@ -0,0 +1,62 @@ +agentName: jmx +agentType: integration +title: 'JMX monitoring integration' +metaDescription: 'Install the JMX integration' +introFilePath: 'src/install/jmx/intro.mdx' +appInfo: + - optionType: dropdown1 + label: '' + placeholder: 'Select your environment' + options: + - value: 'linux' + displayName: 'Linux' + logo: 'linux' + - value: 'windows' + displayName: 'Windows' + logo: 'windows' + - value: 'ecs' + displayName: 'ECS' + logo: 'amazonECS' + - value: 'kubernetes' + displayName: 'Kubernetes' + logo: 'k8' + +steps: + - filePath: 'src/install/jmx/guided.mdx' + - filePath: 'src/install/jmx/default-requirements.mdx' + overrides: + - filePath: 'src/install/jmx/ecs/requirements-ecs.mdx' + selectedOptions: + - optionType: dropdown1 + options: + - value: 'ecs' + - filePath: 'src/install/jmx/kubernetes/requirements-k8s.mdx' + selectedOptions: + - optionType: dropdown1 + options: + - value: 'kubernetes' + - filePath: 'src/install/jmx/install-infra.mdx' + - filePath: 'src/install/jmx/linux/install-linux.mdx' + overrides: + - filePath: 'src/install/jmx/linux/install-linux.mdx' + selectedOptions: + - optionType: dropdown1 + options: + - value: 'linux' + - filePath: 'src/install/jmx/windows/install-windows.mdx' + selectedOptions: + - optionType: dropdown1 + options: + - value: 'windows' + - filePath: 'src/install/jmx/ecs/install-ecs.mdx' + selectedOptions: + - optionType: dropdown1 + options: + - value: 'ecs' + - filePath: 'src/install/jmx/kubernetes/install-k8s.mdx' + selectedOptions: + - optionType: dropdown1 + options: + - value: 'kubernetes' + - filePath: 'src/install/jmx/find-data.mdx' +whatsNextFilePath: 'src/install/jmx/whatsNext.mdx' \ No newline at end of file diff --git a/src/install/jmx/default-requirements.mdx b/src/install/jmx/default-requirements.mdx new file mode 100644 index 00000000000..cddca7f55de --- /dev/null +++ b/src/install/jmx/default-requirements.mdx @@ -0,0 +1,11 @@ +--- +headingText: Check the compatibility and requirements +componentType: default +--- + +Before installing the integration, make sure that you meet these requirements: + +* A New Relic account. Don't have one? [Sign up for free!](https://newrelic.com/signup) No credit card required. +* Java versions 8 or higher. +* If you need to use a different Java version than the one configured in `PATH`, follow [New Relic's configuration documentation on GitHub](https://github.com/newrelic/nrjmx#configuring-java-version). +* This integration doesn't support the IIOP protocol. diff --git a/src/install/jmx/ecs/install-ecs.mdx b/src/install/jmx/ecs/install-ecs.mdx new file mode 100644 index 00000000000..50597c9dc92 --- /dev/null +++ b/src/install/jmx/ecs/install-ecs.mdx @@ -0,0 +1,6 @@ +--- +componentType: default +headingText: Install the JMX monitoring integration +--- + +See how to [monitor services running on Amazon ECS](/docs/integrations/host-integrations/host-integrations-list/monitor-services-running-amazon-ecs). \ No newline at end of file diff --git a/src/install/jmx/ecs/requirements-ecs.mdx b/src/install/jmx/ecs/requirements-ecs.mdx new file mode 100644 index 00000000000..20d88506f06 --- /dev/null +++ b/src/install/jmx/ecs/requirements-ecs.mdx @@ -0,0 +1,11 @@ +--- +componentType: default +headingText: Check the compatibility and requirements +--- + + +Before installing the integration, make sure that you meet these requirements: + +* Java Runtime Environment 7 or higher. +* An [auto-scaling](https://aws.amazon.com/autoscaling) ECS cluster running Amazon Linux, CentOS, or RHEL that meets the infrastructure agent [compatibility and requirements](/docs/infrastructure/new-relic-infrastructure/getting-started/compatibility-requirements-new-relic-infrastructure). +* ECS tasks must have [network mode](https://docs.aws.amazon.com/AmazonECS/latest/developerguide/task_definition_parameters.html#network_mode) set to `none` or `bridge` (`awsvpc` and `host` not supported). diff --git a/src/install/jmx/find-data.mdx b/src/install/jmx/find-data.mdx new file mode 100644 index 00000000000..28d544be3af --- /dev/null +++ b/src/install/jmx/find-data.mdx @@ -0,0 +1,29 @@ +--- +componentType: default +headingText: Find and use data +--- + +import infrastructureInstallJmxDashboard from 'images/infrastructure_screenshot-jmx-dashboard.webp' + +1. Go to **[one.newrelic.com](https://one.newrelic.com) > Add data** and type **JMX**. + +2. Under **Dashboards**, click **JMX**. + + Installing the JMX dashboards + +3. A popup window opens. +4. Click **Edit** if you want to change the account. +5. Click **Setup JMX** or **Skip this step** if you already setup this datasource. +6. Click **Setup New Relic infrastructure agent** or **Skip this step** if you already setup this datasource. +6. Click **View dashboard**, and see your JMX data in New Relic. + + +JMX data is attached to the user-defined [event type](/docs/using-new-relic/data/understand-data/new-relic-data-types#events-new-relic) specified in the [configuration file](#metrics-collection). For example, if you are interested in monitoring Tomcat using the JMX integration, define an `event_type` called `TomcatSample`, and [query that event type](/docs/using-new-relic/data/understand-data/query-new-relic-data). + +You can [query this data](/docs/using-new-relic/data/understand-data/query-new-relic-data) for troubleshooting purposes or to create custom charts and dashboards. + +For more on how to find and use your data, see [understand integration data](/docs/infrastructure/integrations/find-use-infrastructure-integration-data). You can find a full list of metrics and their attributes at the bottom of this doc. \ No newline at end of file diff --git a/src/install/jmx/guided.mdx b/src/install/jmx/guided.mdx new file mode 100644 index 00000000000..86c24861c27 --- /dev/null +++ b/src/install/jmx/guided.mdx @@ -0,0 +1,9 @@ +--- +componentType: appInfoConfig +headingText: Choose your framework +--- + + + + + diff --git a/src/install/jmx/install-infra.mdx b/src/install/jmx/install-infra.mdx new file mode 100644 index 00000000000..cc24903bf40 --- /dev/null +++ b/src/install/jmx/install-infra.mdx @@ -0,0 +1,6 @@ +--- +componentType: default +headingText: Install the infrastructure agent +--- + +To use the JMX integration, you need to also [install the infrastructure agent](/docs/infrastructure/install-infrastructure-agent/get-started/install-infrastructure-agent-new-relic/) on the same host. The infrastructure agent monitors the host. The integration you'll install adds JMX-specific data. This data includes metrics for the database and instances. \ No newline at end of file diff --git a/src/install/jmx/intro.mdx b/src/install/jmx/intro.mdx new file mode 100644 index 00000000000..08b92655221 --- /dev/null +++ b/src/install/jmx/intro.mdx @@ -0,0 +1,38 @@ +--- +headingText: Before we start +componentType: default +--- + +Our JMX integration allows users to monitor any application that exposes metrics with JMX. The integration includes a default collection file. It collects key metrics from the JVM. + +Read on to install the integration and to see what data we collect. + + + + +If you're not running JMX in Kubernetes or ECS environments, we recommend our guided install. Our guided install uses our infrastructure agent and our CLI to set up the JMX integration. It also finds other applications and log sources in your environment. Then, it recommends which ones you should instrument. The guided install works with most setups. But if it doesn't suit your needs, there are other install options below. + + +Ready to get started? Click the relevant button, depending on which [data center region](/docs/accounts/accounts-billing/account-setup/choose-your-data-center) you use. When you're done with the install, return to this document to review the configuration options. + + + + Guided install, US region + + + + Guided install, EU region + + + +For a more permanent and scalable solution, we recommend the standard manual install of the agent. Keep reading for how to do that. + + diff --git a/src/install/jmx/kubernetes/install-k8s.mdx b/src/install/jmx/kubernetes/install-k8s.mdx new file mode 100644 index 00000000000..5e20c77f970 --- /dev/null +++ b/src/install/jmx/kubernetes/install-k8s.mdx @@ -0,0 +1,6 @@ +--- +componentType: default +headingText: Install the JMX monitoring integration +--- + +See how to [monitor services running on Kubernetes](/docs/monitor-service-running-kubernetes). \ No newline at end of file diff --git a/src/install/jmx/kubernetes/requirements-k8s.mdx b/src/install/jmx/kubernetes/requirements-k8s.mdx new file mode 100644 index 00000000000..5cc4718517e --- /dev/null +++ b/src/install/jmx/kubernetes/requirements-k8s.mdx @@ -0,0 +1,25 @@ +--- +componentType: default +headingText: Check the compatibility and requirements +--- + +Before installing the integration, make sure that you meet these requirements: + +* Java Runtime Environment 7 or higher. +* If you don't have one already, [create a New Relic account](https://newrelic.com/signup). It's free, forever. +* A Linux distribution compatible with New Relic infrastructure agent. +* Our integration is compatible and is continuously tested on Kubernetes versions 1.24 to 1.28. +* Kubernetes integration is compatible with different flavors. Check [this table](/docs/kubernetes-pixie/kubernetes-integration/get-started/kubernetes-integration-compatibility-requirements/) to have more info about it. +* If you're using Helm: + + - Make sure [Helm](https://github.com/helm/helm#install) is installed on your machine. Version 3 of the Kubernetes Integration requires Helm version 3. + + - Find and copy your license key. + + - Choose a display name for your cluster. For example, you could use the output of: + + ```shell + kubectl config current-context + ``` + + diff --git a/src/install/jmx/linux/install-linux.mdx b/src/install/jmx/linux/install-linux.mdx new file mode 100644 index 00000000000..2ee2868cccc --- /dev/null +++ b/src/install/jmx/linux/install-linux.mdx @@ -0,0 +1,46 @@ +--- +componentType: default +headingText: Configure the JMX integration +--- + +1. Change directory to the integrations configuration folder by running: + + ```shell + cd /etc/newrelic-infra/integrations.d + ``` + +2. Copy the sample configuration file by running: + + ```shell + sudo cp jmx-config.yml.sample jmx-config.yml + ``` + +3. Copy the JVM metrics configuration file: + + ```shell + sudo cp jvm-metrics.yml.sample jvm-metrics.yml + ``` + +4. Edit the `jmx-config.yml` file. This is an example of configuration: + + ```yml + integrations: + - name: nri-jmx + env: + COLLECTION_FILES: "/etc/newrelic-infra/integrations.d/jvm-metrics.yml,/etc/newrelic-infra/integrations.d/tomcat-metrics.yml" + JMX_HOST: jmx-host.localnet + JMX_PASS: admin + JMX_PORT: 9999 + JMX_USER: admin + interval: 15s + labels: + env: production + ``` + +5. **Optional**: If you're interested in monitoring Tomcat, use this sample metrics file: + + ```bash + sudo cp tomcat-metrics.yml.sample tomcat-metrics.yml + ``` + +6. Restart the infrastructure agent. See how to [restart the infrastructure agent in different Linux environments](/docs/infrastructure/install-infrastructure-agent/manage-your-agent/start-stop-restart-infrastructure-agent/#linux). diff --git a/src/install/jmx/whatsNext.mdx b/src/install/jmx/whatsNext.mdx new file mode 100644 index 00000000000..c22ef6ec5e7 --- /dev/null +++ b/src/install/jmx/whatsNext.mdx @@ -0,0 +1,1107 @@ +--- +componentType: default +headingText: What's next? +--- + + +This integration doesn't automatically update. For best results, regularly [update the integration package](/docs/integrations/host-integrations/installation/update-infrastructure-host-integration-package) and [the infrastructure agent](/docs/infrastructure/new-relic-infrastructure/installation/update-infrastructure-agent). + + +## Configuration options [#config-options] + +For the standard on-host installation, this integration comes with a YAML config file, `jmx-config.yml`. This configuration is where you can place required login credentials and configure how data is collected. Which options you change depends on your setup and preferences. It comes with a sample config file `jmx-config.yml.sample` that you can copy and edit. + +Specific settings related to JMX are defined using the `env` section of the configuration file. These settings control the connection to your JMX instance as well as other security settings and features. The list of valid settings is described in the next section of this document. + + + +The JMX integration collects both metrics and inventory information. This table shows what each configuration option applies to. + + + + + + + + + + + + + + + + + + + + + + + + + + + { + ' ' + } + + + + + + + + + + + + { + ' ' + } + + + + + + + + + + + + { + ' ' + } + + + + + + + + + + + + { + ' ' + } + + + + + + + + + + + + { + ' ' + } + + + + + + + + + + + + { + ' ' + } + + + + + + + + + + + + + + + + + + + + + + { + ' ' + } + + + + + + + + + + + + + + + + + + + + + + { + ' ' + } + + + + + + + + + + + + { + ' ' + } + + + + + + + + + + + + { + ' ' + } + + + + + + + + + + + + { + ' ' + } + + + + + + + + + + + + { + ' ' + } + + + + + + + + + + + + { + ' ' + } + + + + + + + + + + + + { + ' ' + } + + + + + + + + + + + + { + ' ' + } + + + + + + + + + + + { + ' ' + } + + + + + + + + + + +
+ Setting + + Description + + Default + + Applies To +
+ **JMX_HOST** + + The host JMX is running on. + + `localhost` + + M/I +
+ **JMX_PORT** + + The port JMX is running on. + + 9999 + + M/I +
+ **JMX_URI_PATH** + + The path portion of the JMX Service URI. This is useful for nonstandard + service uris. + + N/A + + M/I +
+ **JMX_USER** + + The username for the JMX connection. + + N/A + + M/I +
+ **JMX_PASS** + + The password for the JMX connection. + + N/A + + M/I +
+ **JMX_REMOTE** + + (JBoss specific) Whether or not to use the JMX remote URL connection format. + Connection defaults to JBoss Domain-mode if `true`. + + `false` + + M/I +
+ **JMX_REMOTE_JBOSS_STANDLONE** + + (JBoss specific) Whether or not to use the JBoss standalone connection + format. Only relevant if `jmx_remote` is set. + + `false` + + M/I +
+ **CONNECTION_URL** + + Full JMX endpoint URL. This replaces all connection arguments (above) by providing all parameters on one line. + + Example: `"service:jmx:rmi:///jndi/rmi://localhost:7199/jmxrmi"` + + N/A + + M/I +
+ **COLLECTION_FILES** + + A comma-separated list of full file paths to the metric collection + definition files. For on-host install, the default JVM metrics collection file is at `/etc/newrelic-infra/integrations.d/jvm-metrics.yml`. + + N/A + + M/I +
+ **COLLECTION_CONFIG** + +Configuration of the metrics collection as a JSON. + +Jvm Example: + +```java +COLLECTION_CONFIG='{"collect":[{"domain":"java.lang","event_type":"JVMSample","beans":[{"query":"type=GarbageCollector,name=*","attributes":["CollectionCount","CollectionTime"]},{"query":"type=Memory","attributes":["HeapMemoryUsage.Committed","HeapMemoryUsage.Init","HeapMemoryUsage.Max","HeapMemoryUsage.Used","NonHeapMemoryUsage.Committed","NonHeapMemoryUsage.Init","NonHeapMemoryUsage.Max","NonHeapMemoryUsage.Used"]},{"query":"type=Threading","attributes":["ThreadCount","TotalStartedThreadCount"]},{"query":"type=ClassLoading","attributes":["LoadedClassCount"]},{"query":"type=Compilation","attributes":["TotalCompilationTime"]}]}]}' +``` + +Tomcat Example: + +```java +COLLECTION_CONFIG={"collect":[{"domain":"Catalina","event_type":"TomcatSample","beans":[{"query":"type=UtilityExecutor","attributes":["completedTaskCount"]}]}]} +``` + +`COLLECTION_CONFIG` is useful to [configure nri-jmx in Kubernetes using annotations](#metrics-collection-kubernetes-annotations). + + N/A + + M/I +
+ **KEY_STORE** + + The filepath of the keystore containing the JMX client's SSL certificate. + + N/A + + M/I +
+ **KEY_STORE_PASSWORD** + + The password for the SSL key store. + + N/A + + M/I +
+ **LOCAL_ENTITY** + + Collect all metrics on the local entity. Only use when monitoring localhost. + + `false` + + M/I +
+ **TIMEOUT** + + The timeout for individual JMX queries, in milliseconds. + + 10000 + + M/I +
+ **TRUST_STORE** + + The filepath of the keystore containing the JMX server's SSL certificate. + + N/A + + M/I +
+ **TRUST_STORE_PASSWORD** + + The password for the trust store. + + N/A + + M/I +
+ **METRIC_LIMIT** + + Number of metrics that can be collected per entity. If this limit is + exceeded the entity will not be reported. A limit of 0 implies no limit. + + 200 + + M/I +
+ **METRICS** + + Set to `true` to enable metrics only collection. + + `false` + +
+ **INVENTORY** + + Set to `true` to enable inventory only collection. + + `false` + +
+ +You can define the values for these settings in several ways. + +* Adding the value directly in the config file. This is the most common way. +* Replacing the values from environment variables using the `{{}}` notation. This requires infrastructure agent v1.14.0 or higher. Read more [here](/docs/infrastructure/install-infrastructure-agent/configuration/configure-infrastructure-agent/#passthrough). +* Using secrets management. Use this to protect sensible information (such as passwords) from being exposed in plain text on the configuration file. For more information, see [secrets management](/docs/integrations/host-integrations/installation/secrets-management). + +
+ +You can customize your labels, too. Add key or value pair attributes to your metrics, which you can then use to query, filter or group your metrics on. + +Our default sample config file has examples of labels. These aren't mandatory, and you can remove, modify, or add new ones of your choice. + +```yml + labels: + env: production + role: jmx +``` + +
+ +### Metrics collection files [#metrics-collection] + +The metrics collection definition files are structured YAML files which tell the integration what metrics to collect. + +This is the default JVM metrics collection file: `/etc/newrelic-infra/integrations.d/jvm-metrics.yml` + + + You can write different collection files to ease organization and maintenance. + See [configuration file](#collection-example) for an example. + + + + +The integration collects and organizes metrics according to domains. You can find all metrics defined per domain sent to New Relic in a corresponding event type. This event type is either auto-generated or can be set by the user. Each file contains a single `collect:` block which contains an array of domains. For each domain, these keys are defined: + +* `domain`: The JMX domain; for example, `java.lang`. You can use wildcards to match multiple domains; for example, `java.*`. If you use a wildcard, `event_type` is required, and must be unique. This field is required. +* `event_type`: The [event type](/docs/data-apis/understand-data/new-relic-data-types/#event-data) name for a collection from this domain. If the domain is wildcarded, this is required, and must be unique. If the domain is not wildcarded and this is undefined by the user, this will be auto generated. For example, the domain `java.lang` will have event type `JavaLangSample`. For more information, see [Naming tips](#data-naming). +* `beans`: An array of [beans](#metrics-collection) to collect in this domain. + + + There is a limit of 200 metrics per instance in the configuration file. If you exceed the limit for a particular instance, New Relic won't receive it. If you're not seeing your data in New Relic, review the [troubleshooting + procedures](#troubleshoot) to identify if you've exceeded the limit. + + + + +Each domain has a variety of [beans](https://pubs.vmware.com/vfabric5/index.jsp?topic=/com.vmware.vfabric.hyperic.4.6/JMX_MBean_Query_for_JVMs.html) that you can collect. For each bean, these keys are defined: + +* `query`: The bean name to collect; for example,`type=GarbageCollector,name=YoungGen`. You can use wildcards; for example, `type=GarbageCollector,name=*`. This field is required. +* `exclude_regex`: An optional list of regex patterns that match beans to exclude from collection; for example, `type=GarbageCollector,name=.*`. +* `attributes`: A list of [attributes](#attributes) to collect. If unspecified, collects all attributes. + + + The `HashMap` and `ArrayList` data types are not supported. + + + + + +Each bean can contain attributes and may have an optional list of beans that it can exclude from collection. For each attribute, these keys are defined: + + + For map attributes, you must define either an `attr` or an `attr_regex` key. + + +* `attr`: An exact match of the attribute name. You can collect composite attributes by appending the composite member name to the attribute name with a dot; for example, `HeapMemoryUsage.Max`. + +* `attr_regex`: A regex pattern that matches the attributes to be collected. + +* `metric_type`: The New Relic metric type to collect this attribute. These are the options: + + * `gauge`: We will collect data as an instantaneous numeric measurement. + * `rate`: We will collect data showing the change in that metric per second. + * `delta`: We will collect data on the change in that metric since the last measurement. + * `attribute`: We will collect data as a string literal. + + If left unspecified, the JMX integration will attempt to infer the metric type based on the value returned. For example, if the metric is a number, it will collect it as `gauge`. If the metric is a string, it will collect it as `attribute`. + + If metrics are collected with an incorrect metric type, you can manually specify the correct metric type in the collection file. + +* `metric_name`: The name under which the metric will appear in New Relic. If unspecified, it will default to the attribute name. + +For more information about JMX queries, see the [Oracle ObjectName](https://docs.oracle.com/javase/7/docs/api/javax/management/ObjectName.html) documentation. + + + +### Collection configuration using Kubernetes annotations [#metrics-collection-kubernetes-annotations] + +You can use Kubernetes annotations to provide collection configuration. To achieve this, you need to deploy a `configMap` into the Kubernetes cluster that will create the configuration file for the `nri-jmx` application. + +In this configuration file you need to specify the command for [container auto-discovery](/docs/integrations/host-integrations/installation/container-auto-discovery), which will allow you to use placeholders in the integration configuration, including Kubernetes annotations. + +Example of a `configMap` to monitor JVM in a Tomcat application: + + + + ```yaml + nri-bundle: + newrelic-infrastructure: + integrations_config: + - name: jmx-config.yml + data: + discovery: + command: + # Use the following optional arguments: + # --namespaces: Comma separated list of namespaces to discover pods on + # --tls: Use secure (TLS) connection + # --port: Port used to connect to the kubelet. Default is 10255 + exec: /var/db/newrelic-infra/nri-discovery-kubernetes + match: + label.app: java + integrations: + - name: nri-jmx + env: + # Using the discovered IP as the host address + JMX_HOST: ${discovery.ip} + JMX_PORT: ${discovery.port} + COLLECTION_CONFIG: ${discovery.annotation.newrelic.config} + ``` + + Learn more about how to monitor on-host integrations [here](https://github.com/newrelic/helm-charts/tree/master/charts/nri-bundle#monitor-on-host-integrations) + + + + ```yaml + apiVersion: v1 + kind: ConfigMap + metadata: + name: nri-integration-cfg + data: + jmx-config.yml: | + --- + # Run auto discovery to find pods with label "app=java" + discovery: + command: + # Use the following optional arguments: + # --namespaces: Comma separated list of namespaces to discover pods on + # --tls: Use secure (TLS) connection + # --port: Port used to connect to the kubelet. Default is 10255 + exec: /var/db/newrelic-infra/nri-discovery-kubernetes + match: + label.app: java + integrations: + - name: nri-jmx + env: + # Using the discovered IP as the host address + JMX_HOST: ${discovery.ip} + JMX_PORT: ${discovery.port} + COLLECTION_CONFIG: ${discovery.annotation.newrelic.config} + ``` + + + +Next, use annotations to define collection configuration. For example, here's a Tomcat deployment with annotations: + +```yaml +apiVersion: apps/v1 +kind: Deployment +metadata: + name: tomcat-deployment + labels: + app: java +spec: + replicas: 1 + selector: + matchLabels: + app: java + template: + metadata: + annotations: + newrelic.config: >- + { + "collect": [ + { + "domain": "java.lang", + "event_type": "JVMSample", + "beans": [ + { + "query": "type=GarbageCollector,name=*", + "attributes": [ + "CollectionCount", + "CollectionTime" + ] + }, + { + "query": "type=Memory", + "attributes": [ + "HeapMemoryUsage.Committed", + "HeapMemoryUsage.Init", + "HeapMemoryUsage.Max", + "HeapMemoryUsage.Used", + "NonHeapMemoryUsage.Committed", + "NonHeapMemoryUsage.Init", + "NonHeapMemoryUsage.Max", + "NonHeapMemoryUsage.Used" + ] + }, + { + "query": "type=Threading", + "attributes": [ + "ThreadCount", + "TotalStartedThreadCount" + ] + }, + { + "query": "type=ClassLoading", + "attributes": [ + "LoadedClassCount" + ] + }, + { + "query": "type=Compilation", + "attributes": [ + "TotalCompilationTime" + ] + } + ] + } + ] + } + labels: + app: java + spec: + containers: + - name: tomcat + image: tomcat:10.0.12 + ports: + - containerPort: 9999 + env: + - name: CATALINA_OPTS + value: '-Dcom.sun.management.jmxremote -Dcom.sun.management.jmxremote.port=9999 -Dcom.sun.management.jmxremote.ssl=false -Dcom.sun.management.jmxremote.authenticate=false' +``` + +### Custom connectors [#custom-connector] + +JMX allows the use of custom connectors to communicate with the application. In order to use a custom connector, you have to include the custom connectors in the nrjmx classpath. + +By default, the sub-folder `connectors` is in the classpath. If this folder doen't exist, create it under the folder where nrjmx is installed. + +For example, to add support for JBoss, create a folder named `connectors` under the default (Linux) library path `/usr/lib/nrjmx/` (`/usr/lib/nrjmx/connectors/`) and copy the custom connector jar (`$JBOSS_HOME/bin/client/jboss-cli-client.jar`) into it. You can now execute JMX queries against JBoss. + +## Example configurations [#example-config] + +Example file configurations for an on-host install: + + + + ```yaml + integrations: + - name: nri-jmx + env: + COLLECTION_FILES: "/etc/newrelic-infra/integrations.d/jvm-metrics.yml,/etc/newrelic-infra/integrations.d/tomcat-metrics.yml" + JMX_HOST: jmx-host.localnet + JMX_PASS: admin + JMX_PORT: 9999 + JMX_USER: admin + interval: 15s + labels: + env: production + ``` + + + + ```yaml + collect: + # The event type for this domain will be JavaLangSample + - domain: java.lang + beans: + # Collect all beans of type Threading + - query: type=Threading + # Attributes can be either a string or a map + attribute: + # When unspecified, the metric_type is inferred + # and the metric name is just the attribute name + - ThreadCount + # If using a map attribute, a custom metric name can be set + - attr: TotalStartedThreadCount + metric_name: ThreadsStarted + # Attributes can be collected with regex matches and + # the metric type can be overridden if the integration + # can not correctly infer the type + - attr_regex: "ThreadCpu.*Enabled" + metric_type: attribute + - query: type=Memory + attributes: + # Composite attributes can be collected with this syntax + - HeapMemoryUsage.Max + - NonHeapMemoryUsage.Max + # Queries can be wildcarded where + - query: type=GarbageCollector,name=* + # If a specific bean is unwanted, it can be excluded + # with a regex match pattern. Useful if using a wildcard query + exclude_regex: + # This will match any bean where the name is YoungGen + - name=YoungGen + attributes: + - attr: LastGcInfo.GcThreadCount + metric_type: gauge + metric_name: GCThreadCount + # Domains can be wildcarded + - domain: java.util.* + # If the domain is wildcarded, a custom event must be defined + event_type: JavaUtilSample + beans: + # If no attributes are defined, all are collected by default + - query: type=Logging + ``` + + + +For more about the general structure of on-host integration configuration, see [Configuration](/docs/integrations/integrations-sdk/file-specifications/host-integration-configuration-overview). + +### Naming your data [#data-naming] + +We send and store metrics in the form of samples. This is a list of key-value pairs that include metric data and metadata. Each sample is stored as an [event](/docs/using-new-relic/data/understand-data/new-relic-data-types#events-new-relic) in our database. + +You are responsible for creating and naming the JMX data reported to New Relic. For this reason, New Relic strongly recommends following these conventions when naming your event types. To ensure you have a consistent naming scheme: + +* Use camel case. +* Use a name that clearly identifies what data it contains. + +Example: `MyorgApplicationSample` + +**Recommendation:** Use the same naming scheme for similar metrics across different applications. + +## Metric data [#metrics] + +The metrics show metadata for the [MBean](https://pubs.vmware.com/vfabric5/index.jsp?topic=/com.vmware.vfabric.hyperic.4.6/JMX_MBean_Query_for_JVMs.html) they are collecting from. You can use this metadata in [NRQL queries](/docs/insights/nrql-new-relic-query-language/using-nrql/introduction-nrql) to filter and facet the data so that the query returns only the data for the desired beans. You can also use it to identify the metrics, as the metric name may not be unique among all beans. + +Each event contains the following metadata: + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ Name + + Description +
+ `displayName` + + The JMX domain name for these metrics. +
+ `entityName` + + The JMX domain name for these metrics with the entity type “domain:” prepended. +
+ `host` + + The JMX host the metrics are being collected from. +
+ `query` + + The query used to collect these metrics. +
+ `bean` + + The bean whose attributes these metrics were collected from. +
+ `key:` + + For each key in the bean name, an attribute is added to the metric set called `“key:` with the value of the bean's key. +
+ +### Example NRQL query + +Here's an example of [NRQL](/docs/query-data/nrql-new-relic-query-language/getting-started/introduction-nrql) query taking advantage of metadata monitor all the collected JVM garbage collectors: + +```sql +SELECT latest(CollectionTime) +FROM JVMSample +FACET `key:name` +WHERE `key:type` = 'GarbageCollector' +``` + +### Metrics data attributes [#metrics-attributes] + +The JMX integration collects these metric data attributes: + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ Name + + Description +
+ `HeapMemoryUsage.Used` + + The total Java heap memory used. +
+ `HeapMemoryUsage.Committed` + + The total Java heap memory committed to be used. +
+ `HeapMemoryUsage.Init` + + The initial Java heap memory allocated. +
+ `HeapMemoryUsage.Max` + + The maximum Java heap memory available. +
+ `NonHeapMemoryUsage.Used` + + The total Java non-heap memory used. +
+ `NonHeapMemoryUsage.Committed` + + The total Java non-heap memory committed to be used. +
+ `NonHeapMemoryUsage.Init` + + The initial Java non-heap memory allocated. +
+ `NonHeapMemoryUsage.Max` + + The maximum Java non-heap memory available. +
+ `ThreadCount` + + The number of live threads. +
+ `CollectionCount` + + The total number of garbage collections that have occurred. +
+ `CollectionTime` + + The approximate accumulated garbage collection time elapsed. +
+ +## Inventory data [#inventory] + +The JMX integration captures the configuration parameters of the JMX integration. The data is available on the [Inventory page](/docs/infrastructure/new-relic-infrastructure/infrastructure-ui-pages/infrastructure-inventory-page-search-your-entire-infrastructure), under the **config/jmx** source. For more about inventory data, see [Understand integration data](/docs/infrastructure/integrations-getting-started/getting-started/understand-integration-data-data-types#inventory-data). + +## Troubleshooting [#troubleshoot] + +Troubleshooting tips: + + + + If you're having trouble with the integration, first [enable and search the logs](/docs/infrastructure/new-relic-infrastructure/troubleshooting/generate-logs-troubleshooting-infrastructure) for errors. + + + + If you suspect there is a domain sending more than 200 metrics, check the [log file](/docs/infrastructure/new-relic-infrastructure/troubleshooting/generate-logs-troubleshooting-infrastructure) for this message: + + ``` + "Domain x has n metrics, the current limit is 200. This domain will not be reported." + ``` + + If you see this error message, lower the number of metrics being sent for the reported domain. + + + { + ' ' + } + + + If you have missing metrics, ensure that the MBean query is valid by + attempting to run it with the [nrjmx tool](https://github.com/newrelic/nrjmx), or use your preferred tool for ensuring the query is valid in the JMXConsole. + + + { + ' ' + } + + + Confirm that the update of the configuration `jvm-metrics.yml` file, and + that the path to the file is enumerated in the `jmx-config.yml` file. + + + + You can use the CLI interactive tool [JMXTerm](https://docs.cyclopsgroup.org/jmxterm) for troubleshooting. Find documentation for JMXTerm in our [`nrjmx` troubleshooting page](https://github.com/newrelic/nrjmx/blob/master/TROUBLESHOOT.md). As of `nrjmx` v1.7.0, JMXTerm is no longer bundled with `nrjmx`, and needs to be downloaded independently. Check the [`nrjmx` installation instructions] \([https://github.com/newrelic/nrjmx#installation](https://github.com/newrelic/nrjmx#installation)). + + + + +## Check the source code [#source-code] + +This integration is open source software. That means you can [browse its source code](https://github.com/newrelic/nri-jmx) and send improvements, or create your own fork and build it. diff --git a/src/install/jmx/windows/install-windows.mdx b/src/install/jmx/windows/install-windows.mdx new file mode 100644 index 00000000000..bdcd698a97c --- /dev/null +++ b/src/install/jmx/windows/install-windows.mdx @@ -0,0 +1,37 @@ +--- +componentType: default +headingText: Install the JMX monitoring integration +--- + +1. Download the [nri-jmx MSI installer image](https://download.newrelic.com/infrastructure_agent/windows/integrations/nri-jmx/nri-jmx-amd64-installer.exe). + +2. In your terminal, run this command: + + ```shell + msiexec.exe /qn /i PATH\TO\nri-jmx-amd64-installer.exe + ``` + +3. Go to the integrations directory, `C:\Program Files\New Relic\newrelic-infra\integrations.d\`. Run this command to create a copy of the sample configuration file: + + ```shell + cp jmx-config.yml.sample jmx-config.yml + ``` + +4. Edit the `jmx-config.yml` file. This is an example of configuration: + + ```yml + integrations: + - name: nri-jmx + env: + COLLECTION_FILES: "/etc/newrelic-infra/integrations.d/jvm-metrics.yml,/etc/newrelic-infra/integrations.d/tomcat-metrics.yml" + JMX_HOST: jmx-host.localnet + JMX_PASS: admin + JMX_PORT: 9999 + JMX_USER: admin + interval: 15s + labels: + env: production + ``` + +5. Restart the infrastructure agent. See how to [restart the infrastructure agent](/docs/infrastructure/install-infrastructure-agent/manage-your-agent/start-stop-restart-infrastructure-agent/#windows). + From 0e696471605fdff95d7dd1a9544f3e24f31e665f Mon Sep 17 00:00:00 2001 From: Sunny Zanchi Date: Wed, 6 Mar 2024 17:17:55 -0500 Subject: [PATCH 018/124] build on PR open, match `netlify build` exactly --- .github/workflows/manual-deploy-comment.yml | 17 +++++++++++------ 1 file changed, 11 insertions(+), 6 deletions(-) diff --git a/.github/workflows/manual-deploy-comment.yml b/.github/workflows/manual-deploy-comment.yml index 8d60acb40b8..daa816415cd 100644 --- a/.github/workflows/manual-deploy-comment.yml +++ b/.github/workflows/manual-deploy-comment.yml @@ -3,10 +3,20 @@ name: Netlify build manual deploy comment on: issue_comment: types: [created] + pull_request: + types: [opened] jobs: deploy-preview: + # when a contributor comments 'netlify build', + # but only on pull requests, not issues. + # or if a contributor opens a PR for the first time. + if: | + (github.event.comment.body == 'netlify build' + && github.event.issue.pull_request) + || github.event.action == 'opened' runs-on: ubuntu-latest + steps: # we use `jq` to parse the GH API response - name: setup jq @@ -15,13 +25,8 @@ jobs: - name: send request to Netlify build hook env: GH_TOKEN: ${{ secrets.GITHUB_TOKEN }} - # when a contributor comments 'netlify build', - # but only on pull requests, not issues - if: | - contains(github.event.comment.body, 'netlify build') - && ${{ github.event.issue.pull_request }} run: | - gh_api_url=$(echo ${{ github.event.issue.pull_request.url }} | sed 's/https:\/\/api.github.com//') + gh_api_url=$(echo ${{ github.event.issue.pull_request.url || github.event.pull_request.url }} | sed 's/https:\/\/api.github.com//') gh_api_response=$(gh api $gh_api_url) branch_name=$(echo $gh_api_response | jq -r .head.ref) sha=$(echo $gh_api_response | jq -r .head.sha) From bb6fe9e039864c68253754ad8404e64e62b500f2 Mon Sep 17 00:00:00 2001 From: Sunny Zanchi Date: Wed, 6 Mar 2024 17:32:28 -0500 Subject: [PATCH 019/124] fix `error` state for input --- .github/workflows/build-notification.yml | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/.github/workflows/build-notification.yml b/.github/workflows/build-notification.yml index da862f43e29..7ba61dccf2d 100644 --- a/.github/workflows/build-notification.yml +++ b/.github/workflows/build-notification.yml @@ -15,7 +15,7 @@ on: options: - building - ready - - failed + - error deployUrl: description: URL of live branch deploy required: false @@ -60,7 +60,7 @@ jobs: END ) ;; - "failed") + "error") comment_body=$(cat <<-END ### Deploy Preview failed! @@ -92,8 +92,8 @@ jobs: -f context='netlify/build' \ /repos/${{ env.repo }}/statuses/${{ inputs.sha }} - - name: update PR check - failed - if: ${{ inputs.buildStatus == 'failed' }} + - name: update PR check - error + if: ${{ inputs.buildStatus == 'error' }} env: GH_TOKEN: ${{ secrets.GITHUB_TOKEN }} run: | From 29bad86a251740276676b365f770e193e9daac7e Mon Sep 17 00:00:00 2001 From: Sunny Zanchi Date: Wed, 6 Mar 2024 17:51:05 -0500 Subject: [PATCH 020/124] add new preview build info --- CONTRIBUTING.md | 10 ++++++---- 1 file changed, 6 insertions(+), 4 deletions(-) diff --git a/CONTRIBUTING.md b/CONTRIBUTING.md index b39416791f7..62ab4097cd4 100644 --- a/CONTRIBUTING.md +++ b/CONTRIBUTING.md @@ -105,8 +105,9 @@ If the workflows are enabled and running, you will want to disable them. You can 2. Make your changes. 3. Test your changes! Review the project's [READ ME](README.md) for instructions on how to build and run tests locally. 4. Submit a `Pull Request` to this project with your changes. -5. If/when your `PR` is accepted, the automation in this project will build the site and deploy a new version of the code to `docs.newrelic.com`. -6. And you are done! +5. A preview will start building automatically when a PR is opened. To update the preview after further commits, leave a comment on the PR that says `netlify build`. +6. If/when your `PR` is accepted, the automation in this project will build the site and deploy a new version of the code to `docs.newrelic.com`. +7. And you are done! ### Submitting a PR from a cloned repo @@ -116,8 +117,9 @@ If the workflows are enabled and running, you will want to disable them. You can 3. Make your changes. 4. Test your changes! Review the project's [READ ME](README.md) for instructions on how to build and run tests locally. 5. Submit a `Pull Request` to this project with your changes. -6. If/when your `PR` is accepted, the automation in this project will build the site and deploy a new version of the code to `docs.newrelic.com`. -7. And you are done! +6. A preview will start building automatically when a PR is opened. To update the preview after further commits, leave a comment on the PR that says `netlify build`. +7. If/when your `PR` is accepted, the automation in this project will build the site and deploy a new version of the code to `docs.newrelic.com`. +8. And you are done! ### Using the `develop` branch From 81831662223e22efaccdf8e12483bee35d7c6743 Mon Sep 17 00:00:00 2001 From: Sunny Zanchi Date: Wed, 6 Mar 2024 17:57:13 -0500 Subject: [PATCH 021/124] update automatic PR comment --- .github/workflows/auto-comment.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/auto-comment.yml b/.github/workflows/auto-comment.yml index f403ec4795b..5a53ab41129 100644 --- a/.github/workflows/auto-comment.yml +++ b/.github/workflows/auto-comment.yml @@ -12,7 +12,7 @@ jobs: Thanks for your pull request! Your PR is in a queue, and a writer will take a look soon. We generally publish small edits within one business day, and larger edits within three days. - Gatsby Cloud will automatically generate a preview of your request, and will comment with a link when the preview is ready (usually 20 to 30 minutes). + We will automatically generate a preview of your request, and will comment with a link when the preview is ready (usually 10 to 20 minutes). If you add any more commits, you can comment `netlify build` on this PR to update the preview. issuesOpened: | Hi @{{ author }} 👋 From 58a96fb7751e092f1f50be6ce45f85f773d905c3 Mon Sep 17 00:00:00 2001 From: Rob Siebens Date: Thu, 7 Mar 2024 10:46:32 -0800 Subject: [PATCH 022/124] fix(Logs): Add multiple log sources to Fluent Bit code snippet --- .../fluent-bit-plugin-log-forwarding.mdx | 17 +++++++++++------ 1 file changed, 11 insertions(+), 6 deletions(-) diff --git a/src/content/docs/logs/forward-logs/fluent-bit-plugin-log-forwarding.mdx b/src/content/docs/logs/forward-logs/fluent-bit-plugin-log-forwarding.mdx index 5f2e0481f72..f6713c81f71 100644 --- a/src/content/docs/logs/forward-logs/fluent-bit-plugin-log-forwarding.mdx +++ b/src/content/docs/logs/forward-logs/fluent-bit-plugin-log-forwarding.mdx @@ -84,22 +84,27 @@ Fluent Bit needs to know the location of the New Relic plugin and the New Relic Name tail Tag my.tag Path /PATH/TO/YOUR/LOG/FILE + # If you have multiple sources, just add another [INPUT] section like this: + # [INPUT] + # Name tail + # Tag my.other.tag + # Path /PATH/TO/SOME/LOG/FILE - # having multiple [FILTER] blocks allows one to control the flow of changes as they read top down. + # Having multiple [FILTER] blocks allows you to control the flow of changes as they read top down. [FILTER] Name modify - # here we only match on one tag, my.tag, defined in the [INPUT] section earlier + # Here we only match on one tag, my.tag, defined in the [INPUT] section earlier Match my.tag - # below, we're renaming the host.cpu attribute to CPU + # Below, we're renaming the host.cpu attribute to CPU Rename host.cpu CPU [FILTER] Name record_modifier - # match on all tags, *, so all logs get decorated per the Record clauses below. Record adds attributes + their values to each record. + # Match on all tags, *, so all logs get decorated per the Record clauses below. Record adds attributes + their values to each record. Match * - # adding a logtype attribute ensures your logs will be automatically parsed by our built-in parsing rules + # Adding a logtype attribute ensures your logs will be automatically parsed by our built-in parsing rules Record logtype nginx - # add the server's hostname to all logs generated + # Add the server's hostname to all logs generated Record hostname ${HOSTNAME} [OUTPUT] From 08e97743370d8560e7c32f4afeb169e67abd5958 Mon Sep 17 00:00:00 2001 From: Keegan Mullaney Date: Thu, 7 Mar 2024 11:00:46 -0800 Subject: [PATCH 023/124] docs: runtime updates --- .../enable-aws-lambda-monitoring.mdx | 4 +- ...erverless-monitoring-aws-lambda-legacy.mdx | 48 ++++++------------ .../instrument-your-own.mdx | 49 +++++++++++++------ .../get-started/architecture.mdx | 8 +-- 4 files changed, 53 insertions(+), 56 deletions(-) diff --git a/src/content/docs/serverless-function-monitoring/aws-lambda-monitoring/enable-lambda-monitoring/enable-aws-lambda-monitoring.mdx b/src/content/docs/serverless-function-monitoring/aws-lambda-monitoring/enable-lambda-monitoring/enable-aws-lambda-monitoring.mdx index 64007fba065..9f4e7c388dd 100644 --- a/src/content/docs/serverless-function-monitoring/aws-lambda-monitoring/enable-lambda-monitoring/enable-aws-lambda-monitoring.mdx +++ b/src/content/docs/serverless-function-monitoring/aws-lambda-monitoring/enable-lambda-monitoring/enable-aws-lambda-monitoring.mdx @@ -2,7 +2,7 @@ title: Enable monitoring for AWS Lambda metaDescription: Get started enabling New Relic's serverless monitoring for AWS Lambda. redirects: - - /docs/serverless-function-monitoring/aws-lambda-monitoring/enable-lambda-monitoring + - /docs/serverless-function-monitoring/aws-lambda-monitoring/enable-lambda-monitoring freshnessValidatedDate: never --- @@ -20,4 +20,4 @@ See also [legacy manual instrumentation for Lambda](/docs/serverless-function-mo If you haven't already, create your free New Relic account below to start monitoring your data today. - \ No newline at end of file + diff --git a/src/content/docs/serverless-function-monitoring/aws-lambda-monitoring/enable-lambda-monitoring/enable-serverless-monitoring-aws-lambda-legacy.mdx b/src/content/docs/serverless-function-monitoring/aws-lambda-monitoring/enable-lambda-monitoring/enable-serverless-monitoring-aws-lambda-legacy.mdx index 14b54903f3b..7229652a129 100644 --- a/src/content/docs/serverless-function-monitoring/aws-lambda-monitoring/enable-lambda-monitoring/enable-serverless-monitoring-aws-lambda-legacy.mdx +++ b/src/content/docs/serverless-function-monitoring/aws-lambda-monitoring/enable-lambda-monitoring/enable-serverless-monitoring-aws-lambda-legacy.mdx @@ -82,10 +82,8 @@ On this page, you will learn how to manually instrument your lambda function. It 7. Invoke the Lambda at least once. This creates a CloudWatch log group, which must be present for the next step to work. - Our wrapper gathers data about the Lambda execution, generates a JSON message, and logs it to CloudWatch Logs. Next, you have two options to send those logs to New Relic: - - * Add our [NewRelicLambdaExtension layer](https://github.com/newrelic/newrelic-lambda-extension). You can [see an example here](https://github.com/newrelic/newrelic-lambda-extension/tree/main/examples/sam/go). - * [Configure CloudWatch Logs](/docs/serverless-function-monitoring/aws-lambda-monitoring/enable-lambda-monitoring/instrument-your-own/#manual-stream-logs). + Our wrapper gathers data about the Lambda execution, generates a JSON message, and logs it to CloudWatch Logs. + Next, you'll [configure CloudWatch to send those logs to New Relic](/docs/serverless-function-monitoring/aws-lambda-monitoring/enable-lambda-monitoring/instrument-your-own/#manual-stream-logs). **OpenTracing 0.32.0, 0.33.0**: - * Lambda Tracer: [com.newrelic.opentracing:newrelic-java-lambda:2.2.3](https://search.maven.org/artifact/com.newrelic.opentracing/newrelic-java-lambda) - * Lambda SDK: [com.newrelic.opentracing:java-aws-lambda:2.1.1](https://search.maven.org/artifact/com.newrelic.opentracing/java-aws-lambda) + * Lambda Tracer: [com.newrelic.opentracing:newrelic-java-lambda:2.2.1](https://search.maven.org/artifact/com.newrelic.opentracing/newrelic-java-lambda) + * Lambda SDK: [com.newrelic.opentracing:java-aws-lambda:2.1.0](https://search.maven.org/artifact/com.newrelic.opentracing/java-aws-lambda) To instrument your Java Lambda: - 1. In your project's `build.gradle` file, include our OpenTracing AWS Lambda Tracer and the AWS Lambda OpenTracing SDK dependencies: + 1. In your project’s `build.gradle` file, include our OpenTracing AWS Lambda Tracer and the AWS Lambda OpenTracing SDK dependencies: ```java dependencies { - compile("com.newrelic.opentracing:java-aws-lambda:2.1.1") - compile("com.newrelic.opentracing:newrelic-java-lambda:2.2.3") + compile("com.newrelic.opentracing:java-aws-lambda:2.1.0") + compile("com.newrelic.opentracing:newrelic-java-lambda:2.2.1") compile("io.opentracing:opentracing-util:0.33.0") } ``` @@ -131,27 +129,20 @@ On this page, you will learn how to manually instrument your lambda function. It 8. Optional: In the Lambda console, enable debug logging by adding this environment variable: `NEW_RELIC_DEBUG` is `true`. 9. Invoke the Lambda at least once. This creates a CloudWatch log group, which must be present for the next step to work. - Our wrapper gathers data about the Lambda execution, generates a JSON message, and logs it to CloudWatch Logs. Next, you have two options to send those logs to New Relic: - - * Add our [NewRelicLambdaExtension layer](https://github.com/newrelic/newrelic-lambda-extension). You can [see an example here](https://github.com/newrelic/newrelic-lambda-extension/tree/main/examples/sam/go). - * [Configure CloudWatch Logs](/docs/serverless-function-monitoring/aws-lambda-monitoring/enable-lambda-monitoring/instrument-your-own/#manual-stream-logs). + Our wrapper gathers data about the Lambda execution, generates a JSON message, and logs it to CloudWatch Logs. Next, you'll [configure CloudWatch to send those logs to New Relic](/docs/serverless-function-monitoring/aws-lambda-monitoring/enable-lambda-monitoring/instrument-your-own/#manual-stream-logs). Please see the [AWS Lambda distributed tracing example](https://github.com/newrelic/newrelic-lambda-tracer-java/tree/main/examples/distributed-tracing-example) for a complete project that illustrates common use cases such as: - * Distributed tracing between Lambda functions - * Manual span creation (aka custom instrumentation) - * Tracing external calls - * Adding custom attributes (aka Tags) to spans + * Distributed tracing between Lambda functions + * Manual span creation (aka custom instrumentation) + * Tracing external calls + * Adding custom attributes (aka Tags) to spans - - Our legacy .NET NuGet package relies on the archived [OpenTracing](https://opentracing.io/) SDKs. It has been [deprecated as of Dec 31st, 2022](https://github.com/newrelic/newrelic-dotnet-agent/blob/main/src/AwsLambda/CHANGELOG.md). - - Our monitoring of .NET Core-based AWS Lambda functions doesn't use our standard [.NET Core APM agent](/docs/agents/net-agent/installation/compatibility-requirements-net-core-agent). Instead, it uses a NuGet package. To instrument your .NET Core Lambda: @@ -348,10 +339,7 @@ On this page, you will learn how to manually instrument your lambda function. It 7. Invoke the Lambda at least once. This creates a CloudWatch log group, which must be present for the next step to work. - Our wrapper gathers data about the Lambda execution, generates a JSON message, and logs it to CloudWatch Logs. Next, you have two options to send those logs to New Relic: - - * Add our [NewRelicLambdaExtension layer](https://github.com/newrelic/newrelic-lambda-extension). You can [see an example here](https://github.com/newrelic/newrelic-lambda-extension/tree/main/examples/sam/go). - * [Configure CloudWatch Logs](/docs/serverless-function-monitoring/aws-lambda-monitoring/enable-lambda-monitoring/instrument-your-own/#manual-stream-logs). + Our wrapper gathers data about the Lambda execution, generates a JSON message, and logs it to CloudWatch Logs. Next you'll [configure CloudWatch to send those logs to New Relic](/docs/serverless-function-monitoring/aws-lambda-monitoring/enable-lambda-monitoring/instrument-your-own/#manual-stream-logs). @@ -490,10 +475,7 @@ On this page, you will learn how to manually instrument your lambda function. It 9. Invoke the Lambda at least once. This creates a CloudWatch log group, which must be present for the next step to work. - The New Relic decorator gathers data about the Lambda execution, generates a JSON message, and logs it to CloudWatch Logs. Next, you have two options to send those logs to New Relic: - - * Add our [NewRelicLambdaExtension layer](https://github.com/newrelic/newrelic-lambda-extension). You can [see an example here](https://github.com/newrelic/newrelic-lambda-extension/tree/main/examples/sam/go). - * [Configure CloudWatch Logs](/docs/serverless-function-monitoring/aws-lambda-monitoring/enable-lambda-monitoring/instrument-your-own/#manual-stream-logs). + The New Relic decorator gathers data about the Lambda execution, generates a JSON message, and logs it to CloudWatch Logs. Next, [configure CloudWatch to send those logs to New Relic](/docs/serverless-function-monitoring/aws-lambda-monitoring/enable-lambda-monitoring/instrument-your-own/#manual-stream-logs). diff --git a/src/content/docs/serverless-function-monitoring/aws-lambda-monitoring/enable-lambda-monitoring/instrument-your-own.mdx b/src/content/docs/serverless-function-monitoring/aws-lambda-monitoring/enable-lambda-monitoring/instrument-your-own.mdx index a23d7ce63eb..c38d5489e25 100644 --- a/src/content/docs/serverless-function-monitoring/aws-lambda-monitoring/enable-lambda-monitoring/instrument-your-own.mdx +++ b/src/content/docs/serverless-function-monitoring/aws-lambda-monitoring/enable-lambda-monitoring/instrument-your-own.mdx @@ -16,7 +16,8 @@ There are many different deployment strategies for Lambda functions. New Relic o ### `newrelic-lambda` CLI quickstart [#quickstarts] -The CLI tool that we recommended for setting up the account link can also reconfigure your Lambda functions to use New Relic. +The CLI tool that we recommended for setting up the account link can also reconfigure your Lambda functions to use +New Relic. To install or upgrade the New Relic instrumentation layer, run: @@ -28,7 +29,8 @@ This command automatically finds the newest available layer for your Lambda's re This is a great way to quick-start instrumentation, and this tool can easily be integrated into your existing CI/CD processes. However, since it modifies existing Lambda function resources, when you deploy a code update to your function, you may inadvertently remove the New Relic instrumentation. Be sure to re-run the command above after every update, or (even better) integrate the layer and associated configuration with your existing deployment process. -Note that the CLI can operate on many functions in a batch: use `--function all`, `--function installed`, or `--function not-installed` to operate on all functions in a region, or only those with or without existing +Note that the CLI can operate on many functions in a batch: use `--function all`, `--function installed`, or +`--function not-installed` to operate on all functions in a region, or only those with or without existing New Relic instrumentation. ### Continuous deployment [#cont] @@ -40,9 +42,14 @@ In the long term, it's usually less work to integrate New Relic into your existi id="cloudformation" title="CloudFormation / SAM templates" > - AWS's Serverless Application Model, or SAM is a variant of CloudFormation templates that simplifies relating functions to the resources they depend on, and managing the lifecycle of an entire application. We use SAM and CloudFormation for most of our Lambda example functions, and many other tools are built on top of CloudFormation templates, providing an addition layer of abstraction. + AWS's Serverless Application Model, or SAM is a variant of CloudFormation templates that simplifies relating functions + to the resources they depend on, and managing the lifecycle of an entire application. We use SAM and CloudFormation for + most of our Lambda example functions, and many other tools are built on top of CloudFormation templates, providing an + addition layer of abstraction. - At its core, CloudFormation is a way to express the target state of an AWS Resource (such as a Lambda function) using YAML or JSON, and an execution service that makes API calls to other services (such as AWS Lambda) to achieve that target state. + At its core, CloudFormation is a way to express the target state of an AWS Resource (such as a Lambda function) using + YAML or JSON, and an execution service that makes API calls to other services (such as AWS Lambda) to achieve that + target state. Here's an example of a simple CloudFormation template for a Node.js Lambda function: @@ -87,9 +94,11 @@ In the long term, it's usually less work to integrate New Relic into your existi id="serverless" title="Serverless Framework" > - Serverless Framework is a popular development and deployment tool for serverless applications. It's written in Node.js, and for AWS, acts mostly as a higher-level abstraction on top of CloudFormation templates. It works well for Node, Python and Java functions. + Serverless Framework is a popular development and deployment tool for serverless applications. It's written in Node.js, + and for AWS, acts mostly as a higher-level abstraction on top of CloudFormation templates. It works well for Node, Python and Java functions. - New Relic offers a [Serverless Framework Plugin](https://github.com/newrelic/serverless-newrelic-lambda-layers) to simplify instrumentation of your Serverless Framework application. + New Relic offers a [Serverless Framework Plugin](https://github.com/newrelic/serverless-newrelic-lambda-layers) to + simplify instrumentation of your Serverless Framework application. #### Install the plugin [#install] @@ -105,7 +114,8 @@ In the long term, it's usually less work to integrate New Relic into your existi yarn add --dev serverless-newrelic-lambda-layers ``` - Find your [New Relic Account ID](/docs/accounts/install-new-relic/account-setup/account-id), your [New Relic Personal API Key](/docs/apis/get-started/intro-apis/types-new-relic-api-keys#personal-api-key) + Find your [New Relic Account ID](/docs/accounts/install-new-relic/account-setup/account-id), + your [New Relic Personal API Key](/docs/apis/get-started/intro-apis/types-new-relic-api-keys#personal-api-key) Then add the following to your `serverless.yaml` file: @@ -133,11 +143,13 @@ In the long term, it's usually less work to integrate New Relic into your existi ## Unusual integrations [#edge] -For most, one of the options above will work well. There's a chance that you can't use any of these solutions though. For guidance on how to customize your integration to fit your needs, read on. +For most, one of the options above will work well. There's a chance that you can't use any of these +solutions though. For guidance on how to customize your integration to fit your needs, read on. ### CloudWatch telemetry [#cloudwatch-telemetry] -The [CloudWatch path has its pros and cons](/docs/serverless-function-monitoring/aws-lambda-monitoring/get-started/architecture#cloudwatch) and is a viable option for sending telemetry to New Relic. +As [mentioned previously](/docs/serverless-function-monitoring/aws-lambda-monitoring/get-started/architecture#cloudwatch) +we used to recommend sending your telemetry through CloudWatch Logs. This path can still work, though it is deprecated. 1. Disable the extension by adding the `NEW_RELIC_LAMBDA_EXTENSION_ENABLED` environment variable to your function, with the value `false`. @@ -168,7 +180,8 @@ The [CloudWatch path has its pros and cons](/docs/serverless-function-monitoring ### Lambda console UI configuration [#console] -While it is more error prone and labor intensive than the approaches above, it's possible to manually alter the configuration of a Lambda function to use New Relic from the AWS Lambda Console, for Node.js, Python and Java. +While it is more error prone and labor intensive than the approaches above, it's possible to manually alter the +configuration of a Lambda function to use New Relic from the AWS Lambda Console, for Node.js, Python and Java. 1. Find the [layer](https://layers.newrelic-external.com/) that matches your runtime and region. 2. Copy the _Amazon Resource Name_ (ARN) of the most recent version and add it in the AWS Lambda console for your function. @@ -199,7 +212,8 @@ While it is more error prone and labor intensive than the approaches above, it's ] ``` -Note that for Go, you must make source code changes to your Lambda function to instrument it. Configuration changes are not enough. +Note that for Go, you must make source code changes to your Lambda function to instrument it. +Configuration changes are not enough. ### Layer customization [#cust] @@ -212,11 +226,18 @@ The layer contains several components, depending on your runtime: 3. A handler wrapper, which configures the agent, and intercepts invocations, to start the instrumentation process, then invokes your handler. -If you need a different wrapper, you can build your own layer, based on ours. See our [newrelic-lambda-layers GitHub repo](https://github.com/newrelic/newrelic-lambda-layers) for the code contained in our wrapper function. By creating [your own layer](https://docs.aws.amazon.com/lambda/latest/dg/configuration-layers.html) with a replacement wrapper, and applying it _after_ ours, your wrapper will overwrite the one we supply. Similarly, you can include your custom wrapper directly in your function. +If you need a different wrapper, you can build your own layer, based on ours. See our +[newrelic-lambda-layers GitHub repo](https://github.com/newrelic/newrelic-lambda-layers) for the code contained in +our wrapper function. By creating [your own layer](https://docs.aws.amazon.com/lambda/latest/dg/configuration-layers.html) +with a replacement wrapper, and applying it _after_ ours, your wrapper will overwrite the one we supply. Similarly, +you can include your custom wrapper directly in your function. -Similarly, if you are testing a custom build of the agent, perhaps to address some bug, you could modify our layer packaging scripts above to package your agent build, and build your own layer. +Similarly, if you are testing a custom build of the agent, perhaps to address some bug, you could modify our layer +packaging scripts above to package your agent build, and build your own layer. -We explicitly do not recommend that you package the agent with your Lambda function. While this is possible, it makes it difficult for you to upgrade the agent and receive bug fixes. The layer may conflict with your vendored agent. Such a configuration should be regarded as unsupported, though it can work. +We explicitly do not recommend that you package the agent with your Lambda function. While this is possible, it +makes it difficult for you to upgrade the agent and receive bug fixes. The layer may conflict with your vendored +agent. Such a configuration should be regarded as unsupported, though it can work. diff --git a/src/content/docs/serverless-function-monitoring/aws-lambda-monitoring/get-started/architecture.mdx b/src/content/docs/serverless-function-monitoring/aws-lambda-monitoring/get-started/architecture.mdx index 2b918c4af39..3e5d8869fd2 100644 --- a/src/content/docs/serverless-function-monitoring/aws-lambda-monitoring/get-started/architecture.mdx +++ b/src/content/docs/serverless-function-monitoring/aws-lambda-monitoring/get-started/architecture.mdx @@ -51,16 +51,10 @@ from the classic APM experience. Inside the [New Relic platform](/docs/new-relic Backed by NRDB and NRQL, you can also write custom [dashboards](/docs/query-your-data/explore-query-data/dashboards/introduction-dashboards/) and [alerts](/docs/alerts-applied-intelligence/new-relic-alerts/learn-alerts/introduction-alerts/) for your functions. -## The CloudWatch path [#cloudwatch] +## The legacy CloudWatch path [#cloudwatch] Older integrations send telemetry in a slightly different way. Instead of passing telemetry off to the extension, the agent writes it out to CloudWatch as a log line. By adding a log subscription filter to pipe your function logs into the [`aws-log-ingestion`](https://github.com/newrelic/aws-log-ingestion) Lambda function, we can recover that CloudWatch log line, and forward it on to New Relic, along with some other platform telemetry. In the past, we've seen that this approach has some considerable drawbacks. The AWS CloudWatch service can generate a lot of data. If you're on our Free edition, you may hit your data limit pretty quickly. If you're paying for data, you may find this service making up the largest share of the data you're sending to New Relic. - -There are also some advantages to the CloudWatch path: - -* Captures all logs from CloudWatch independently of your function's execution. There's less chance it will interfere with the normal operation, or impact the invocation duration, of your function. -* Useful for functions in a VPC that can't have outbound traffic to New Relic. -* Needed for [other forms of infra/database telemetry](/docs/infrastructure/amazon-integrations/aws-integrations-list/aws-rds-enhanced-monitoring-integration/). From d0416f793eec60f09013ff221500f1290bf377cf Mon Sep 17 00:00:00 2001 From: Keegan Mullaney Date: Thu, 7 Mar 2024 11:19:12 -0800 Subject: [PATCH 024/124] docs: remove .NET --- ...erverless-monitoring-aws-lambda-legacy.mdx | 215 +----------------- ...ity-requirements-aws-lambda-monitoring.mdx | 2 +- .../instrument-example.mdx | 2 +- 3 files changed, 8 insertions(+), 211 deletions(-) diff --git a/src/content/docs/serverless-function-monitoring/aws-lambda-monitoring/enable-lambda-monitoring/enable-serverless-monitoring-aws-lambda-legacy.mdx b/src/content/docs/serverless-function-monitoring/aws-lambda-monitoring/enable-lambda-monitoring/enable-serverless-monitoring-aws-lambda-legacy.mdx index 7229652a129..6e436eb23e7 100644 --- a/src/content/docs/serverless-function-monitoring/aws-lambda-monitoring/enable-lambda-monitoring/enable-serverless-monitoring-aws-lambda-legacy.mdx +++ b/src/content/docs/serverless-function-monitoring/aws-lambda-monitoring/enable-lambda-monitoring/enable-serverless-monitoring-aws-lambda-legacy.mdx @@ -102,18 +102,18 @@ On this page, you will learn how to manually instrument your lambda function. It * Lambda Tracer: [com.newrelic.opentracing:newrelic-java-lambda:1.1.1](https://search.maven.org/artifact/com.newrelic.opentracing/newrelic-java-lambda/1.1.1/jar) * Lambda SDK: [com.newrelic.opentracing:java-aws-lambda:1.0.0](https://search.maven.org/artifact/com.newrelic.opentracing/java-aws-lambda/1.0.0/jar) * **OpenTracing 0.32.0, 0.33.0**: - * Lambda Tracer: [com.newrelic.opentracing:newrelic-java-lambda:2.2.1](https://search.maven.org/artifact/com.newrelic.opentracing/newrelic-java-lambda) - * Lambda SDK: [com.newrelic.opentracing:java-aws-lambda:2.1.0](https://search.maven.org/artifact/com.newrelic.opentracing/java-aws-lambda) + * Lambda Tracer: [com.newrelic.opentracing:newrelic-java-lambda:2.2.3](https://search.maven.org/artifact/com.newrelic.opentracing/newrelic-java-lambda) + * Lambda SDK: [com.newrelic.opentracing:java-aws-lambda:2.1.1](https://search.maven.org/artifact/com.newrelic.opentracing/java-aws-lambda) To instrument your Java Lambda: - 1. In your project’s `build.gradle` file, include our OpenTracing AWS Lambda Tracer and the AWS Lambda OpenTracing SDK dependencies: + 1. In your project's `build.gradle` file, include our OpenTracing AWS Lambda Tracer and the AWS Lambda OpenTracing SDK dependencies: ```java dependencies { - compile("com.newrelic.opentracing:java-aws-lambda:2.1.0") - compile("com.newrelic.opentracing:newrelic-java-lambda:2.2.1") + compile("com.newrelic.opentracing:java-aws-lambda:2.1.1") + compile("com.newrelic.opentracing:newrelic-java-lambda:2.2.3") compile("io.opentracing:opentracing-util:0.33.0") } ``` @@ -139,209 +139,6 @@ On this page, you will learn how to manually instrument your lambda function. It * Adding custom attributes (aka Tags) to spans - - Our monitoring of .NET Core-based AWS Lambda functions doesn't use our standard [.NET Core APM agent](/docs/agents/net-agent/installation/compatibility-requirements-net-core-agent). Instead, it uses a NuGet package. - - To instrument your .NET Core Lambda: - - 1. In your Lambda Functions project, install the `NewRelic.OpenTracing.AmazonLambda.Tracer` NuGet package. - - Note: `NewRelic.OpenTracing.AmazonLambda.Tracer` depends on version 1.2.0+ of `Amazon.Lambda.APIGatewayEvent` NuGet package. If the environment already uses a lower version of `Amazon.Lambda.APIGatewayEvent`, the New Relic package may produce errors such as `System.MissingMethodException` . - - 2. Import the NuGet package and OpenTracing utils: - - ```cs - using OpenTracing.Util; - using NewRelic.OpenTracing.AmazonLambda; - ``` - - 3. Instrument your function, as shown in this example: - - ```cs - public class Function - { - static Function() - { - // Register The NewRelic Lambda Tracer Instance - GlobalTracer.Register(NewRelic.OpenTracing.AmazonLambda.LambdaTracer.Instance); - } - - public object FunctionWrapper(ILambdaContext context) - { - // Instantiate NewRelic TracingWrapper and pass your FunctionHandler as - // an argument - return new TracingRequestHandler().LambdaWrapper(FunctionHandler, context); - } - - /// - /// A simple function that takes a string and does a ToUpper - /// - /// - /// - /// - public object FunctionHandler(ILambdaContext context) - { ... } - - } - ``` - - - The arguments passed to `FunctionWrapper` must match the signature of `FunctionHandler`. - - - If your handler function returns a Task, the Lambda wrapper will block on the return task until it completes, so that it can measure the duration and capture exceptions, if any are present. In addition, you may also inherit from the `APIGatewayProxyFunction`. - - For an example, see below: - - - - ```cs - public async Task FunctionHandlerAsync(ILambdaContext lambdaContext) - { - return await new TracingRequestHandler().LambdaWrapper( - ActualFunctionHandlerAsync, lambdaContext); - } - - public async Task ActualFunctionHandlerAsync(ILambdaContext - lambdaContext) - { - // Function can make other async operations here - ... - } - ``` - - - - ```cs - public class LambdaFunction : APIGatewayProxyFunction - { - static LambdaFunction() - { - // Register The NewRelic Lambda Tracer Instance - OpenTracing.Util.GlobalTracer.Register(NewRelic.OpenTracing.AmazonLambda.LambdaTracer.Instance); - } - - public override Task FunctionHandlerAsync(APIGatewayProxyRequest request, ILambdaContext lambdaContext) - { - Task task = new TracingRequestHandler().LambdaWrapper(ActualFunctionHandlerAsync, request, lambdaContext); - return task; - } - - public Task ActualFunctionHandlerAsync(APIGatewayProxyRequest request, ILambdaContext lambdaContext) - { - return base.FunctionHandlerAsync(request, lambdaContext); - } - } - ``` - - - - 4. Optional for SQS and SNS: Starting in version 1.0 of our .NET Lambda Tracer, [distributed tracing](/docs/apm/distributed-tracing/getting-started/introduction-distributed-tracing) support has been added for SQS and SNS. To enable distributed tracing for SQS or SNS you will need to complete the items in this step as well as setup the environment variables in the step that follows this one. - - - Enabling distributed tracing support for SQS and SNS will disable automatic instrumentation for both of SQS and SNS and require the use of these wrappers to instrument them. - - - 1. Set the `NEW_RELIC_USE_DT_WRAPPER` environment variable to `true`. - 2. To instrument SQS and SNS calls you will need to use the provided wrappers. - - - - The SQS wrapper supports wrapping the following methods: - - * Amazon.SQS.AmazonSQSClient.SendMessageAsync(...) - * Amazon.SQS.AmazonSQSClient.SendMessageBatchAsync(...) - - Examples - - ```cs - - // SQS Client - AmazonSQSClient client = new AmazonSQSClient("AWS_SECRET_ACCESS_KEY", AWS_REGION); - - // SendMessageRequest - SendMessageRequest sendRequest = new SendMessageRequest("QUEUE_URI_STRING", "An SQS Message"); - Task responseOne = SQSWrapper.WrapRequest(client.SendMessageAsync, sendRequest); - - // String-based - Task responseTwo = SQSWrapper.WrapRequest(client.SendMessageAsync, "QUEUE_URI_STRING", "Another SQS Message"); - - // SendMessageBatchRequest - List batchEntries = new List(); - batchEntries.Add(new SendMessageBatchRequestEntry("id1", "First SQS Message")); - batchEntries.Add(new SendMessageBatchRequestEntry("id2", "Second SQS Message")); - batchEntries.Add(new SendMessageBatchRequestEntry("id3", "Third SQS Message")); - SendMessageBatchRequest sendBatchRequest = new SendMessageBatchRequest(QUEUE_URI, batchEntries); - Task response = SQSWrapper.WrapRequest(client.SendMessageBatchAsync, sendBatchRequest); - - // SendMessageBatchRequestEntry List - List moreBatchEntries = new List(); - batchEntries.Add(new SendMessageBatchRequestEntry("id4", "Fourth SQS Message")); - batchEntries.Add(new SendMessageBatchRequestEntry("id5", "Fifth SQS Message")); - batchEntries.Add(new SendMessageBatchRequestEntry("id6", "Sixth SQS Message")); - Task response = SQSWrapper.WrapRequest(client.SendMessageBatchAsync, moreBatchEntries); - - ``` - - - - The SNS wrapper supports wrapping the following methods: - - * Amazon.SimpleNotificationService.AmazonSimpleNotificationServiceClient.PublishAsync(...) - - Examples - - ```cs - - // SNS Client - AmazonSimpleNotificationServiceClient client = new Amazon.SimpleNotificationService.AmazonSimpleNotificationServiceClient("AWS_SECRET_ACCESS_KEY", AWS_REGION); - - // PublishRequest - Phone Number - PublishRequest phonePublishRequest = new PublishRequest(); - phonePublishRequest.PhoneNumber = +1XXX5555100; - phonePublishRequest.Message = "An SNS Message for phones"; - Task phoneResponse = SNSWrapper.WrapRequest(client.PublishAsync, phonePublishRequest); - - // PublishRequest - ARN - PublishRequest publishRequest = new PublishRequest("TOPIC_ARN", "An SNS Message"); - Task publishResponse = SNSWrapper.WrapRequest(client.PublishAsync, publishRequest); - - // String-based without subject - Task responseOne = SNSWrapper.WrapRequest(client.PublishAsync, "TOPIC_ARN", "Another SNS Message"); - - // String-based with subject - Task responseTwo = SNSWrapper.WrapRequest(client.PublishAsync, "TOPIC_ARN", "Yet Another SNS Message", "A Subject"); - - ``` - - - - 5. The following environment variables are not required for Lambda monitoring to function but they are required if you want your Lambda functions to be included in distributed traces. To enable [distributed tracing](/docs/apm/distributed-tracing/getting-started/introduction-distributed-tracing), set these environment variables in the [AWS Lambda console](https://docs.aws.amazon.com/lambda/latest/dg/env_variables.html): - * `NEW_RELIC_ACCOUNT_ID`: The [account ID](/docs/accounts/install-new-relic/account-setup/account-id) the Lambda is reporting to. - * `NEW_RELIC_TRUSTED_ACCOUNT_KEY`: This is also the [account ID](/docs/accounts/install-new-relic/account-setup/account-id). If your account is a child account, this needs to be the account ID for the root/parent account. - - 6. Ensure that the wrapper function (`FunctionWrapper` in above example) is set up as the function handler. - - 7. Invoke the Lambda at least once. This creates a CloudWatch log group, which must be present for the next step to work. - - Our wrapper gathers data about the Lambda execution, generates a JSON message, and logs it to CloudWatch Logs. Next you'll [configure CloudWatch to send those logs to New Relic](/docs/serverless-function-monitoring/aws-lambda-monitoring/enable-lambda-monitoring/instrument-your-own/#manual-stream-logs). - - \ No newline at end of file + From f884d8d2ea408e5aa5434f19eea9ce92da7f6b20 Mon Sep 17 00:00:00 2001 From: Rob Siebens Date: Thu, 7 Mar 2024 11:33:43 -0800 Subject: [PATCH 025/124] fix(Logs): Clarify you need different log file path... --- .../docs/logs/forward-logs/fluent-bit-plugin-log-forwarding.mdx | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/content/docs/logs/forward-logs/fluent-bit-plugin-log-forwarding.mdx b/src/content/docs/logs/forward-logs/fluent-bit-plugin-log-forwarding.mdx index f6713c81f71..e8536d2c58d 100644 --- a/src/content/docs/logs/forward-logs/fluent-bit-plugin-log-forwarding.mdx +++ b/src/content/docs/logs/forward-logs/fluent-bit-plugin-log-forwarding.mdx @@ -88,7 +88,7 @@ Fluent Bit needs to know the location of the New Relic plugin and the New Relic # [INPUT] # Name tail # Tag my.other.tag - # Path /PATH/TO/SOME/LOG/FILE + # Path /PATH/TO/SOME/OTHER/LOG/FILE # Having multiple [FILTER] blocks allows you to control the flow of changes as they read top down. [FILTER] From a6e1136a9f3c5ec5016c44578b39a4427d48fdaa Mon Sep 17 00:00:00 2001 From: Sadaf Arshad Date: Thu, 7 Mar 2024 11:46:41 -0800 Subject: [PATCH 026/124] add: Job manager name --- .../verified-script-execution-private-locations.mdx | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/content/docs/synthetics/synthetic-monitoring/private-locations/verified-script-execution-private-locations.mdx b/src/content/docs/synthetics/synthetic-monitoring/private-locations/verified-script-execution-private-locations.mdx index 065b1071f6e..261058f4a65 100644 --- a/src/content/docs/synthetics/synthetic-monitoring/private-locations/verified-script-execution-private-locations.mdx +++ b/src/content/docs/synthetics/synthetic-monitoring/private-locations/verified-script-execution-private-locations.mdx @@ -10,7 +10,7 @@ redirects: freshnessValidatedDate: never --- -To prevent others from using your private minions to assign [scripted browsers](/docs/synthetics/new-relic-synthetics/scripting-monitors/write-scripted-browsers) or [API tests](/docs/synthetics/new-relic-synthetics/scripting-monitors/write-api-tests), add verified script execution. Then, any changes to your minions will require a passphrase that is known only to you. +To prevent others from using your private minions or synthetic job managers to assign [scripted browsers](/docs/synthetics/new-relic-synthetics/scripting-monitors/write-scripted-browsers) or [API tests](/docs/synthetics/new-relic-synthetics/scripting-monitors/write-api-tests), add verified script execution. Then, any changes to your minions will require a passphrase that is known only to you. The private locations list in New Relic's UI includes a **VSE** column. A lock icon indicates that verified script execution has been set up for that location. From 56d35b2597e4871e0e392be8485a14eb75c6f54f Mon Sep 17 00:00:00 2001 From: marcelschlapfer Date: Thu, 7 Mar 2024 15:51:26 -0500 Subject: [PATCH 027/124] live_archives_api_search Add section for how to search via Nerdgraph API --- .../docs/logs/get-started/live-archives.mdx | 23 +++++++++++++++++++ 1 file changed, 23 insertions(+) diff --git a/src/content/docs/logs/get-started/live-archives.mdx b/src/content/docs/logs/get-started/live-archives.mdx index 88552d55249..34cb0fbd2d3 100644 --- a/src/content/docs/logs/get-started/live-archives.mdx +++ b/src/content/docs/logs/get-started/live-archives.mdx @@ -164,6 +164,29 @@ If you want to query using the same language you use for errors inbox or alerts, + +### Query live archives using Nerdgraph API [#api] + +You can also query your live archives data using the Nerdgraph API. To query live archives you will need the **Live archives query** capability. You must include the `{eventNamespaces: "Logging:Archive"}` in the nrql options to specify the live archives eventNamespace. + +Here is an example query: + +``` +query { + actor { + account(id: 1234567) { + nrql( + query: "SELECT count(*) FROM Log SINCE '2024-02-01 12:00:00' UNTIL '2024-02-01 13:00:00'" + options: {eventNamespaces: "Logging:Archive"} + async: true + ) { + results + } + } + } +} +``` + ### See your data consumption [#data-consumption] From 093dda27e38898faa124af3ec110e006fd1456f5 Mon Sep 17 00:00:00 2001 From: ndesai Date: Thu, 7 Mar 2024 14:26:59 -0600 Subject: [PATCH 028/124] added releases notes and docs update for hybrid agents. --- .../get-started-with-cordova-monitoring.mdx | 10 +- .../monitor-your-flutter-application.mdx | 25 +- ...introduction-new-relic-ionic-capacitor.mdx | 6 +- .../monitor-your-net-maui-application.mdx | 2 +- .../monitor-your-xamarin-application.mdx | 2 +- .../mobile-sdk/set-max-event-pool-size.mdx | 6 +- .../mobile-sdk/set-max-offline-storage.mdx | 408 +++++++++++++++++- .../monitor-your-react-native-application.mdx | 16 +- .../capacitor-agent-136.mdx | 16 + .../cordova-agent-627.mdx | 17 + .../flutter-agent-107.mdx | 12 + ...cframework-agent-749 => ios-agent-749.mdx} | 2 +- .../net-maui-agent-006.mdx | 13 + .../react-native-agent-136.mdx | 15 + .../unity-release-notes/unity-agent-132.mdx | 9 + .../unity-release-notes/unity-agent-133.mdx | 14 + .../xamarin-agent-004.mdx | 13 + 17 files changed, 548 insertions(+), 38 deletions(-) create mode 100644 src/content/docs/release-notes/mobile-release-notes/capacitor-release-notes/capacitor-agent-136.mdx create mode 100644 src/content/docs/release-notes/mobile-release-notes/cordova-release-notes/cordova-agent-627.mdx create mode 100644 src/content/docs/release-notes/mobile-release-notes/flutter-release-notes/flutter-agent-107.mdx rename src/content/docs/release-notes/mobile-release-notes/ios-release-notes/{xcframework-agent-749 => ios-agent-749.mdx} (98%) create mode 100644 src/content/docs/release-notes/mobile-release-notes/net-maui-release-notes/net-maui-agent-006.mdx create mode 100644 src/content/docs/release-notes/mobile-release-notes/react-native-release-notes/react-native-agent-136.mdx create mode 100644 src/content/docs/release-notes/mobile-release-notes/unity-release-notes/unity-agent-132.mdx create mode 100644 src/content/docs/release-notes/mobile-release-notes/unity-release-notes/unity-agent-133.mdx create mode 100644 src/content/docs/release-notes/mobile-release-notes/xamarin-release-notes/xamarin-agent-004.mdx diff --git a/src/content/docs/mobile-monitoring/new-relic-mobile-cordova-phonegap/get-started-with-cordova-monitoring.mdx b/src/content/docs/mobile-monitoring/new-relic-mobile-cordova-phonegap/get-started-with-cordova-monitoring.mdx index aedc0cb2dd5..04858028a4e 100644 --- a/src/content/docs/mobile-monitoring/new-relic-mobile-cordova-phonegap/get-started-with-cordova-monitoring.mdx +++ b/src/content/docs/mobile-monitoring/new-relic-mobile-cordova-phonegap/get-started-with-cordova-monitoring.mdx @@ -7,7 +7,7 @@ tags: metaDescription: "New Relic's Cordova agent for Android and iOS: Features, compatibility, requirements, installation, and upgrade procedures." redirects: - /docs/mobile-monitoring/new-relic-mobile-cordova-phonegap/get-started/new-relic-cordova-overview - - /docs/mobile-monitoring/new-relic-mobile-cordova-phonegap/get-started/introduction-new-relic-cordova + - /docs/mobile-monitoring/new-relic-mobile-cordova-phonegap/get-started/introduction-new-relic-cordova freshnessValidatedDate: never --- @@ -45,7 +45,7 @@ If you need to install the agent manually, follow these steps: ### Create an application token(s) [#app-token] - 1. Go to **[one.newrelic.com](https://onenr.io/02wdd6ngXwE) > Browser & Mobile > (choose Android or iOS)**, then complete the instrumentation steps in the UI. + 1. Go to **[one.newrelic.com](https://onenr.io/02wdd6ngXwE) > Browser & Mobile > (choose Android or iOS)**, then complete the instrumentation steps in the UI. 2. From **Step 4** in the UI, copy the application token(s) (one for iOS and Android if applicable). @@ -85,10 +85,12 @@ Add the following optional configurations to the `--variable` argument, which wi * `COLLECTOR_ADDRESS`: Specifies the URI authority component of the harvest data upload endpoint. * `CRASH_COLLECTOR_ADDRESS`: Specifies the authority component of the crash data upload URI. * `FEDRAMP_ENABLED`: Enable or disable reporting data using different endpoints for US government clients. - * Possible values are `true` and `false`. Defaults to `false`. + * Possible values are `true` and `false`. Defaults to `false`. +* `OFFLINE_STORAGE_ENABLED`: Enable or disable offline data storage when no internet connection is available. . + * Possible values are true and false. Defaults to true. These options are only available on Cordova agent v6.2.1 and higher. - + For example, if you wanted to disable crash reporting, call the following: ``` diff --git a/src/content/docs/mobile-monitoring/new-relic-mobile-flutter/monitor-your-flutter-application.mdx b/src/content/docs/mobile-monitoring/new-relic-mobile-flutter/monitor-your-flutter-application.mdx index 7eeda909e21..133f67a4c23 100644 --- a/src/content/docs/mobile-monitoring/new-relic-mobile-flutter/monitor-your-flutter-application.mdx +++ b/src/content/docs/mobile-monitoring/new-relic-mobile-flutter/monitor-your-flutter-application.mdx @@ -54,7 +54,7 @@ Before you install the Flutter agent, make sure your Flutter app meets these ver ### Add the Flutter agent to your project [#add-agent] -First, you'll need to add the Flutter agent into your dart project. In your `pubspec.yaml`, add the following to `dependencies`: +First, you'll need to add the Flutter agent into your dart project. In your `pubspec.yaml`, add the following to `dependencies`: ```dart dependencies: newrelic_mobile: 0.0.1 @@ -62,12 +62,12 @@ dependencies: ### Copy your application token [#app-token] -The application token is used for New Relic to authenticate your Flutter app's data. +The application token is used for New Relic to authenticate your Flutter app's data. To view and copy your application token in the New Relic UI: 1. Go to **[one.newrelic.com](https://one.newrelic.com/all-capabilities)**, click **Add data**, then click **Mobile**. -2. Select your Flutter app. +2. Select your Flutter app. 3. Go to **Settings > Application** and copy the displayed **Application token**. - + You'll add this application token in the next step. @@ -78,9 +78,9 @@ In your Flutter project, open `main.dart` and add the following code: import 'package:newrelic_mobile/newrelic_mobile.dart'; var appToken = ""; if (Platform.isAndroid) { - appToken = ""; // Replace with your application token copied from the New Relic UI. + appToken = ""; // Replace with your application token copied from the New Relic UI. } else if (Platform.isIOS) { - appToken = ""; // Replace with your application token copied from the New Relic UI. + appToken = ""; // Replace with your application token copied from the New Relic UI. } Config config = Config(accessToken: appToken, @@ -108,6 +108,8 @@ import 'package:newrelic_mobile/newrelic_mobile.dart'; httpInstrumentationEnabled:true, // Optional: Enable or disable reporting data using different endpoints for US government clients fedRampEnabled: false, + // Optional: Enable or disable offline data storage when no internet connection is available. + offlineStorageEnabled:true ); NewrelicMobile.instance.start(config, () { runApp(MyApp()); @@ -204,7 +206,7 @@ The following customizations are available for the Flutter agent. Record errors. - + [Record errors](/docs/mobile-monitoring/new-relic-mobile/mobile-sdk/record-errors) @@ -247,13 +249,11 @@ The following customizations are available for the Flutter agent. Shut down the agent. - [Shut down the agent](/docs/mobile-monitoring/new-relic-mobile/mobile-sdk/shut-down-agent) - - + Enable/disable default mobile monitoring settings. @@ -262,13 +262,10 @@ The following customizations are available for the Flutter agent. [Enable/disable monitoring features](/docs/mobile-monitoring/new-relic-mobile/mobile-sdk/configure-settings) - - - + Run a test crash report. - [Test crash reporting](/docs/mobile-monitoring/new-relic-mobile/mobile-sdk/test-crash-reporting) diff --git a/src/content/docs/mobile-monitoring/new-relic-mobile-ionic-capacitor/get-started/introduction-new-relic-ionic-capacitor.mdx b/src/content/docs/mobile-monitoring/new-relic-mobile-ionic-capacitor/get-started/introduction-new-relic-ionic-capacitor.mdx index 06b3f63ace2..0cd1d113702 100644 --- a/src/content/docs/mobile-monitoring/new-relic-mobile-ionic-capacitor/get-started/introduction-new-relic-ionic-capacitor.mdx +++ b/src/content/docs/mobile-monitoring/new-relic-mobile-ionic-capacitor/get-started/introduction-new-relic-ionic-capacitor.mdx @@ -41,7 +41,7 @@ If you need to install the agent manually, follow these steps: ### Create an application token(s) [#app-token] - 1. Go to **[one.newrelic.com](https://onenr.io/0EjOpynz0Q6) > Browser & Mobile > (choose Android or iOS)**, then complete the instrumentation steps in the UI. + 1. Go to **[one.newrelic.com](https://onenr.io/0EjOpynz0Q6) > Browser & Mobile > (choose Android or iOS)**, then complete the instrumentation steps in the UI. 2. From **Step 4** in the UI, copy the application token(s) (one for iOS and Android if applicable). @@ -110,6 +110,8 @@ let agentConfig : AgentConfiguration = { sendConsoleEvents: true, // Optional:Enable or disable reporting data using different endpoints for US government clients //fedRampEnabled: false + // Optional: Enable or disable offline data storage when no internet connection is available. + offlineStorageEnabled:true } NewRelicCapacitorPlugin.start({appKey:appToken, agentConfiguration:agentConfig}) ``` @@ -140,7 +142,7 @@ Make sure you paste your application token(s) into `appToken = ""` in the code a ```groovy apply plugin: "com.android.application" apply plugin: 'newrelic' // <-- add this - + ``` 4. Make sure your app requests `INTERNET` and `ACCESS_NETWORK_STATE` permissions by adding these lines to your `AndroidManifest.xml`: ``` diff --git a/src/content/docs/mobile-monitoring/new-relic-mobile-maui-dotnet/monitor-your-net-maui-application.mdx b/src/content/docs/mobile-monitoring/new-relic-mobile-maui-dotnet/monitor-your-net-maui-application.mdx index da3421a962b..045a54b9859 100644 --- a/src/content/docs/mobile-monitoring/new-relic-mobile-maui-dotnet/monitor-your-net-maui-application.mdx +++ b/src/content/docs/mobile-monitoring/new-relic-mobile-maui-dotnet/monitor-your-net-maui-application.mdx @@ -81,7 +81,7 @@ using NewRelic.MAUI.Plugin; CrossNewRelic.Current.HandleUncaughtException(); CrossNewRelic.Current.TrackShellNavigatedEvents(); // Set optional agent configuration - // Options are: crashReportingEnabled, loggingEnabled, logLevel, collectorAddress, crashCollectorAddress,analyticsEventEnabled, networkErrorRequestEnabled, networkRequestEnabled, interactionTracingEnabled,webViewInstrumentation, fedRampEnabled + // Options are: crashReportingEnabled, loggingEnabled, logLevel, collectorAddress, crashCollectorAddress,analyticsEventEnabled, networkErrorRequestEnabled, networkRequestEnabled, interactionTracingEnabled,webViewInstrumentation,fedRampEnabled,offlineStorageEnabled // AgentStartConfiguration agentConfig = new AgentStartConfiguration(crashReportingEnabled:false); if (DeviceInfo.Current.Platform == DevicePlatform.Android) diff --git a/src/content/docs/mobile-monitoring/new-relic-mobile-xamarin/monitor-your-xamarin-application.mdx b/src/content/docs/mobile-monitoring/new-relic-mobile-xamarin/monitor-your-xamarin-application.mdx index b277d4136c2..8352110be94 100644 --- a/src/content/docs/mobile-monitoring/new-relic-mobile-xamarin/monitor-your-xamarin-application.mdx +++ b/src/content/docs/mobile-monitoring/new-relic-mobile-xamarin/monitor-your-xamarin-application.mdx @@ -83,7 +83,7 @@ using NewRelic.Xamarin.Plugin; CrossNewRelicClient.Current.HandleUncaughtException(); CrossNewRelicClient.Current.TrackShellNavigatedEvents() // Set optional agent configuration - // Options are: crashReportingEnabled, loggingEnabled, logLevel, collectorAddress, crashCollectorAddress,analyticsEventEnabled, networkErrorRequestEnabled, networkRequestEnabled, interactionTracingEnabled,webViewInstrumentation, fedRampEnabled + // Options are: crashReportingEnabled, loggingEnabled, logLevel, collectorAddress, crashCollectorAddress,analyticsEventEnabled, networkErrorRequestEnabled, networkRequestEnabled, interactionTracingEnabled,webViewInstrumentation,fedRampEnabled,offlineStorageEnabled // AgentStartConfiguration agentConfig = new AgentStartConfiguration(crashReportingEnabled:false); if (Device.RuntimePlatform == Device.Android) diff --git a/src/content/docs/mobile-monitoring/new-relic-mobile/mobile-sdk/set-max-event-pool-size.mdx b/src/content/docs/mobile-monitoring/new-relic-mobile/mobile-sdk/set-max-event-pool-size.mdx index c8561982b83..ae07a39017c 100644 --- a/src/content/docs/mobile-monitoring/new-relic-mobile/mobile-sdk/set-max-event-pool-size.mdx +++ b/src/content/docs/mobile-monitoring/new-relic-mobile/mobile-sdk/set-max-event-pool-size.mdx @@ -70,7 +70,7 @@ NewRelic.setMaxEventPoolSize(maxSize: Int) Sets the maximum size of the event pool. By default, collects a maximum of 1,000 events per event harvest cycle, which is 600 seconds long by default. -This method controls the maximum size of the event pool stored in the memory until the next harvest cycle. When the pool size limit is reached, the New Relic Android agent will begin [sampling events](/docs/agents/manage-apm-agents/agent-data/new-relic-events-limits-sampling), discarding some old and some new events, until the pool of events are transmitted with the next harvest cycle. This method lets you override the maximum size of that event pool. +This method controls the maximum size of the event pool stored in the memory until the next harvest cycle. When the pool size limit is reached, the New Relic Android agent will begin [sampling events](/docs/agents/manage-apm-agents/agent-data/new-relic-events-limits-sampling), discarding some old and some new events, until the pool of events are transmitted with the next harvest cycle. This method lets you override the maximum size of that event pool. The default value for the event harvest cycle is 600 seconds. See [Set max event buffer time](/docs/mobile-monitoring/new-relic-mobile/mobile-sdk/set-max-event-buffer-time) to change the length of the event harvest cycle. @@ -170,7 +170,7 @@ To ensure that the new value is always applied, place this API call in the `appl Type - + Description @@ -606,5 +606,5 @@ Sets the maximum size of the event pool stored in memory until the next harvest ``` - + diff --git a/src/content/docs/mobile-monitoring/new-relic-mobile/mobile-sdk/set-max-offline-storage.mdx b/src/content/docs/mobile-monitoring/new-relic-mobile/mobile-sdk/set-max-offline-storage.mdx index 4346a21bcb0..3253f41b167 100644 --- a/src/content/docs/mobile-monitoring/new-relic-mobile/mobile-sdk/set-max-offline-storage.mdx +++ b/src/content/docs/mobile-monitoring/new-relic-mobile/mobile-sdk/set-max-offline-storage.mdx @@ -14,7 +14,7 @@ Sets the maximum size of total data that can be stored for offline storage. By default, mobile monitoring can collect a maximum of 100 megaBytes of offline storage. When a data payload fails to send because the device doesn't have an internet connection, it can be stored in the file system until an internet connection has been made. After a typical harvest payload has been successfully sent, all offline data is sent to New Relic and cleared from storage. -This method controls the maximum amount of offline storage that can be stored in the file system. When the size limit is reached, the New Relic mobile agent will discard the new payloads that couldn't be stored. This method lets you override the maximum size of that offline storage. +This method controls the maximum amount of offline storage that can be stored in the file system. When the size limit is reached, the New Relic mobile agent will discard the new payloads that couldn't be stored. This method lets you override the maximum size of that offline storage. @@ -25,11 +25,32 @@ This method controls the maximum amount of offline storage that can be stored in iOS + + Capacitor + + + Cordova + + + .NET MAUI + + + Flutter + + + React Native + + + Xamarin + + + Unity + - + Offline storage is enabled by default but can be disabled with a feature flag using the `disableFeatures` function. For details see [Offline storage](/docs/mobile-monitoring/new-relic-mobile/mobile-sdk/configure-settings/#android-offline-storage]. @@ -127,11 +148,9 @@ NewRelic.setMaxOfflineStorageSize(unsigned int $size) Parameter - Type - - + Description @@ -171,5 +190,384 @@ let poolSizeSet = NewRelic.setMaxOfflineStorageSize(1000) + + + + +Offline storage is enabled by default but can be disabled with a feature flag using the agent configuration. + + +## Syntax [#syntax] + +```typescript +setMaxOfflineStorageSize(options: { megabytes: number; }) => void +``` + +## Parameters [#parameters] + + + + + + + + + + + + + + + + + + + + + + +
+ Parameter + + Type + + Description +
+ `megabytes` + + `number` + + Required. Maximum size in megaBytes that can be stored in the file system. +
+ +## Example [#example] + +```typescript + NewRelicCapacitorPlugin.setMaxOfflineStorageSize({ megaBytes: 200 }) +``` + +
+ + + +Offline storage is enabled by default but can be disabled with a feature flag using the agent configuration. + + +## Syntax [#syntax] + +```typescript +setMaxOfflineStorageSize(megabytes: number): void; + +``` + + +## Parameters [#parameters] + + + + + + + + + + + + + + + + + + + + + + +
+ Parameter + + Type + + Description +
+ `megabytes` + + `number` + + Required. Maximum size in megaBytes that can be stored in the file system. +
+ +## Example [#example] + + ```js + NewRelic.setMaxOfflineStorageSize(200); + ``` + +
+ + +## Syntax [#syntax] + +```csharp +setMaxOfflineStorageSize(int megabytes): void; +``` + +## Parameters [#parameters] + + + + + + + + + + + + + + + + + + + + + + +
+ Parameter + + Type + + Description +
+ `megabytes` + + `int` + + Required. Maximum size in megaBytes that can be stored in the file system. +
+ +## Example [#example] + +``` C# + CrossNewRelic.Current.SetMaxOfflineStorageSize(200); +``` +
+
+ + + +## Syntax [#syntax] + +```typescript +setMaxOfflineStorageSize(int megabytes): void; +``` + +## Parameters [#parameters] + + + + + + + + + + + + + + + + + + + + + + +
+ Parameter + + Type + + Description +
+ `megabytes` + + `int` + + Required. Maximum size in megaBytes that can be stored in the file system. +
+ +## Example [#example] + + ```dart +NewrelicMobile.instance.setMaxOfflineStorageSize(200); + ``` + +
+ + +## Syntax [#syntax] + +```js +setMaxOfflineStorageSize(megabytes: number): void; +``` + + +## Parameters [#parameters] + + + + + + + + + + + + + + + + + + + + + + +
+ Parameter + + Type + + Description +
+ `megabytes` + + `number` + + Required. Maximum size in megaBytes that can be stored in the file system. +
+ +## Example [#example] + + ```js + NewRelic.setMaxOfflineStorageSize(200); + ``` + +
+ + +## Syntax [#syntax] + +```csharp +SetMaxOfflineStorageSize(int megabytes): void; +``` + +## Parameters [#parameters] + + + + + + + + + + + + + + + + + + + + + + +
+ Parameter + + Type + + Description +
+ `megabytes` + + `int` + + Required. Maximum size in megaBytes that can be stored in the file system.. +
+ +## Example [#example] + +``` csharp + CrossNewRelicClient.Current.SetMaxOfflineStorageSize(200); +``` + +
+ + + +## Syntax [#syntax] + +```csharp +SetMaxEventPoolSize(int maxPoolSize): void; +``` + + +## Parameters [#parameters] + + + + + + + + + + + + + + + + + + + + + + +
+ Parameter + + Type + + Description +
+ `maxPoolSize` + + `int` + + Required. Maximum size in megaBytes that can be stored in the file system.. +
+ +## Example [#example] + +``` csharp + NewRelicAgent.SetMaxOfflineStorageSize(200); +``` +
+
diff --git a/src/content/docs/mobile-monitoring/new-relic-monitoring-react-native/monitor-your-react-native-application.mdx b/src/content/docs/mobile-monitoring/new-relic-monitoring-react-native/monitor-your-react-native-application.mdx index ab747bda6e0..c76d88ff8f8 100644 --- a/src/content/docs/mobile-monitoring/new-relic-monitoring-react-native/monitor-your-react-native-application.mdx +++ b/src/content/docs/mobile-monitoring/new-relic-monitoring-react-native/monitor-your-react-native-application.mdx @@ -80,7 +80,7 @@ import {Platform} from 'react-native'; appToken = ''; } const agentConfiguration = { - + //Android Specific // Optional:Enable or disable collection of event data. analyticsEventEnabled: true, @@ -108,6 +108,8 @@ import {Platform} from 'react-native'; // crashCollectorAddress: "", // Optional:Enable or disable reporting data using different endpoints for US government clients // fedRampEnabled: false + // Optional: Enable or disable offline data storage when no internet connection is available. + // offlineStorageEnabled:true }; NewRelic.startAgent(appToken, agentConfiguration); NewRelic.setJSAppVersion(version); @@ -133,7 +135,7 @@ In the code above, replace `` and/or `` with y 1. [Install the New Relic native Android agent](/docs/mobile-monitoring/new-relic-mobile-android/install-configure/install-android-apps-gradle-android-studio). 2. Update `build.gradle`: - ``` + ``` buildscript { ... repositories { @@ -142,7 +144,7 @@ In the code above, replace `` and/or `` with y } dependencies { ... - classpath "com.newrelic.agent.android:agent-gradle-plugin:7.1.0" + classpath "com.newrelic.agent.android:agent-gradle-plugin:${latest_android_version}" } ``` 3. Update `app/build.gradle`: @@ -222,7 +224,7 @@ For the managed work flow, use the `expo prebuild --clean` command as described ### (Optional) Configure instrument routing and navigation -To instrument routing and navigation for your React Native apps: +To instrument routing and navigation for your React Native apps: @@ -409,7 +411,7 @@ The following customizations are available for the React Native agent. id="v1.2.0" title="React Native Agent v1.2.0 and higher" > - JavaScript errors and promise rejections can be seen in the `Handled Exceptions` tab in New Relic One. You will be able to see the event trail, attributes, and stack trace for each JavaScript error recorded. + JavaScript errors and promise rejections can be seen in the `Handled Exceptions` tab in New Relic One. You will be able to see the event trail, attributes, and stack trace for each JavaScript error recorded. You can also find these errors by running this query: diff --git a/src/content/docs/release-notes/mobile-release-notes/capacitor-release-notes/capacitor-agent-136.mdx b/src/content/docs/release-notes/mobile-release-notes/capacitor-release-notes/capacitor-agent-136.mdx new file mode 100644 index 00000000000..4088cf13b66 --- /dev/null +++ b/src/content/docs/release-notes/mobile-release-notes/capacitor-release-notes/capacitor-agent-136.mdx @@ -0,0 +1,16 @@ +--- +subject: Capacitor agent +releaseDate: '2024-03-05' +version: 1.3.6 +downloadLink: 'https://www.npmjs.com/package/@newrelic/newrelic-capacitor-plugin/v/1.3.6' +--- + +## New in this release + +* Added Offline Harvesting Feature: This new feature enables the preservation of harvest data that would otherwise be lost when the application lacks an internet connection. The stored harvests will be sent once the internet connection is re-established and the next harvest upload is successful. +* Introduced setMaxOfflineStorageSize API: This new API allows the user to determine the maximum volume of data that can be stored locally. This aids in better management and control of local data storage. +* Updated native iOS Agent: We've upgraded the native iOS agent to version 7.4.9, which includes performance improvements and bug fixes. +* Updated native Android Agent: We've also upgraded the native Android agent to version 7.3.0 bringing benefits like improved stability and enhanced features. +* Resolved an issue in the fetch instrumentation where the absence of a body led to failure in recording network requests by the agent. + +These enhancements help to improve overall user experience and application performance. diff --git a/src/content/docs/release-notes/mobile-release-notes/cordova-release-notes/cordova-agent-627.mdx b/src/content/docs/release-notes/mobile-release-notes/cordova-release-notes/cordova-agent-627.mdx new file mode 100644 index 00000000000..e145a132124 --- /dev/null +++ b/src/content/docs/release-notes/mobile-release-notes/cordova-release-notes/cordova-agent-627.mdx @@ -0,0 +1,17 @@ +--- +subject: Cordova agent +releaseDate: '2024-03-06' +version: 6.2.7 +downloadLink: 'https://github.com/newrelic/newrelic-cordova-plugin' +--- + +## New in this release + +* Added Offline Harvesting Feature: This new feature enables the preservation of harvest data that would otherwise be lost when the application lacks an internet connection. The stored harvests will be sent once the internet connection is re-established and the next harvest upload is successful. +* Introduced setMaxOfflineStorageSize API: This new API allows the user to determine the maximum volume of data that can be stored locally. This aids in better management and control of local data storage. +* Updated native iOS Agent: We've upgraded the native iOS agent to version 7.4.9, which includes performance improvements and bug fixes. +* Updated native Android Agent: We've also upgraded the native Android agent to version 7.3.0 bringing benefits like improved stability and enhanced features. +* Resolved an issue in the fetch instrumentation where the absence of a body led to failure in recording network requests by the agent. + +These enhancements help to improve overall user experience and application performance. + diff --git a/src/content/docs/release-notes/mobile-release-notes/flutter-release-notes/flutter-agent-107.mdx b/src/content/docs/release-notes/mobile-release-notes/flutter-release-notes/flutter-agent-107.mdx new file mode 100644 index 00000000000..18f075ea692 --- /dev/null +++ b/src/content/docs/release-notes/mobile-release-notes/flutter-release-notes/flutter-agent-107.mdx @@ -0,0 +1,12 @@ +--- +subject: Flutter agent +releaseDate: '2023-12-20' +version: 1.0.5 +downloadLink: 'https://pub.dev/packages/newrelic_mobile/versions/1.0.6' +--- + +# New in this release +* Added the ability to store harvest data that previously would be lost if the application doesn't have internet connection. These harvest are then sent after an internet connection is established and the next harvest successfully uploads. This feature is enabled by default. +* Updated the native Android agent to version 7.3.0. +* Updated the native iOS agent to version 7.4.9. +* fixes for Go Router Instrusmentation diff --git a/src/content/docs/release-notes/mobile-release-notes/ios-release-notes/xcframework-agent-749 b/src/content/docs/release-notes/mobile-release-notes/ios-release-notes/ios-agent-749.mdx similarity index 98% rename from src/content/docs/release-notes/mobile-release-notes/ios-release-notes/xcframework-agent-749 rename to src/content/docs/release-notes/mobile-release-notes/ios-release-notes/ios-agent-749.mdx index c07398225c3..53ca3c2460c 100644 --- a/src/content/docs/release-notes/mobile-release-notes/ios-release-notes/xcframework-agent-749 +++ b/src/content/docs/release-notes/mobile-release-notes/ios-release-notes/ios-agent-749.mdx @@ -1,5 +1,5 @@ --- -subject: XCFramework agent +subject: iOS agent releaseDate: '2024-02-28' version: 7.4.9 downloadLink: 'https://download.newrelic.com/ios_agent/NewRelic_XCFramework_Agent_7.4.9.zip' diff --git a/src/content/docs/release-notes/mobile-release-notes/net-maui-release-notes/net-maui-agent-006.mdx b/src/content/docs/release-notes/mobile-release-notes/net-maui-release-notes/net-maui-agent-006.mdx new file mode 100644 index 00000000000..0ecc4a5f9ee --- /dev/null +++ b/src/content/docs/release-notes/mobile-release-notes/net-maui-release-notes/net-maui-agent-006.mdx @@ -0,0 +1,13 @@ +--- +subject: .NET MAUI agent +releaseDate: '2024-03-06' +version: 0.0.6 +downloadLink: 'https://www.nuget.org/packages/NewRelic.MAUI.Plugin' +--- + +## New in this release + +* Added Offline Harvesting Feature: This new feature enables the preservation of harvest data that would otherwise be lost when the application lacks an internet connection. The stored harvests will be sent once the internet connection is re-established and the next harvest upload is successful. +* Introduced setMaxOfflineStorageSize API: This new API allows the user to determine the maximum volume of data that can be stored locally. This aids in better management and control of local data storage. +* Updated native iOS Agent: We've upgraded the native iOS agent to version 7.4.9, which includes performance improvements and bug fixes. +* Updated native Android Agent: We've also upgraded the native Android agent to version 7.3.0 bringing benefits like improved stability and enhanced features. diff --git a/src/content/docs/release-notes/mobile-release-notes/react-native-release-notes/react-native-agent-136.mdx b/src/content/docs/release-notes/mobile-release-notes/react-native-release-notes/react-native-agent-136.mdx new file mode 100644 index 00000000000..75d43271a69 --- /dev/null +++ b/src/content/docs/release-notes/mobile-release-notes/react-native-release-notes/react-native-agent-136.mdx @@ -0,0 +1,15 @@ +--- +subject: React Native agent +releaseDate: '2024-03-05' +version: 1.3.6 +downloadLink: 'https://www.npmjs.com/package/newrelic-react-native-agent/v/1.3.6' +--- + +## New in this release + +* Added Offline Harvesting Feature: This new feature enables the preservation of harvest data that would otherwise be lost when the application lacks an internet connection. The stored harvests will be sent once the internet connection is re-established and the next harvest upload is successful. +* Introduced setMaxOfflineStorageSize API: This new API allows the user to determine the maximum volume of data that can be stored locally. This aids in better management and control of local data storage. +* Updated native iOS Agent: We've upgraded the native iOS agent to version 7.4.9, which includes performance improvements and bug fixes. +* Updated native Android Agent: We've also upgraded the native Android agent to version 7.3.0 bringing benefits like improved stability and enhanced features. +* Added compatibility for Android dynamic features. +* Resolved an issue where events were not being reported in the event of a forceful termination of the application. diff --git a/src/content/docs/release-notes/mobile-release-notes/unity-release-notes/unity-agent-132.mdx b/src/content/docs/release-notes/mobile-release-notes/unity-release-notes/unity-agent-132.mdx new file mode 100644 index 00000000000..11963f3bedb --- /dev/null +++ b/src/content/docs/release-notes/mobile-release-notes/unity-release-notes/unity-agent-132.mdx @@ -0,0 +1,9 @@ +--- +subject: Unity agent +releaseDate: '2024-02-26' +version: 1.3.3 +downloadLink: 'https://github.com/newrelic/newrelic-unity-agent.git' +--- + +## New in this release +* Resolved an issue in the Unity editor where an "assembly not found" error occurred for the New Relic native integration on Windows, Mac, and web platforms. diff --git a/src/content/docs/release-notes/mobile-release-notes/unity-release-notes/unity-agent-133.mdx b/src/content/docs/release-notes/mobile-release-notes/unity-release-notes/unity-agent-133.mdx new file mode 100644 index 00000000000..9caf42c79cd --- /dev/null +++ b/src/content/docs/release-notes/mobile-release-notes/unity-release-notes/unity-agent-133.mdx @@ -0,0 +1,14 @@ +--- +subject: Unity agent +releaseDate: '2024-03-07' +version: 1.3.3 +downloadLink: 'https://github.com/newrelic/newrelic-unity-agent.git' +--- + +## New in this release +* Offline Harvesting Feature: Preserves harvest data during internet downtime, sending stored data once online. +* setMaxOfflineStorageSize API: Allows setting a maximum limit for local data storage. +* Upgraded native iOS Agent to 7.4.9: Offers performance upgrades and bug fixes. +* Upgraded native Android Agent to 7.3.0: Improves stability and adds enhanced features. +* UnityWebRequest Instrumentation Update: Fixes issue with replacement of constrained dispose calls, streamlining app building. + diff --git a/src/content/docs/release-notes/mobile-release-notes/xamarin-release-notes/xamarin-agent-004.mdx b/src/content/docs/release-notes/mobile-release-notes/xamarin-release-notes/xamarin-agent-004.mdx new file mode 100644 index 00000000000..00d7fa51c42 --- /dev/null +++ b/src/content/docs/release-notes/mobile-release-notes/xamarin-release-notes/xamarin-agent-004.mdx @@ -0,0 +1,13 @@ +--- +subject: Xamarin agent +releaseDate: '2024-03-06' +version: 0.0.4 +downloadLink: 'https://www.nuget.org/packages/NewRelic.Xamarin.Plugin' +--- + +## New in this release + +* Added Offline Monitoring Feature: This new feature enables the preservation of harvest data that would otherwise be lost when the application lacks an internet connection. The stored harvests will be sent once the internet connection is re-established and the next harvest upload is successful. +* Introduced setMaxOfflineStorageSize API: This new API allows the user to determine the maximum volume of data that can be stored locally. This aids in better management and control of local data storage. +* Updated native iOS Agent: We've upgraded the native iOS agent to version 7.4.9, which includes performance improvements and bug fixes. +* Updated native Android Agent: We've also upgraded the native Android agent to version 7.3.0 bringing benefits like improved stability and enhanced features. From f8377a92ec7cfe93a91ed1f1b548c4e7aba9eda3 Mon Sep 17 00:00:00 2001 From: Keegan Mullaney Date: Thu, 7 Mar 2024 20:55:56 -0800 Subject: [PATCH 029/124] fix wording --- .../compatibility-requirements-aws-lambda-monitoring.mdx | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/content/docs/serverless-function-monitoring/aws-lambda-monitoring/get-started/compatibility-requirements-aws-lambda-monitoring.mdx b/src/content/docs/serverless-function-monitoring/aws-lambda-monitoring/get-started/compatibility-requirements-aws-lambda-monitoring.mdx index 634cb3aadac..421b5f18544 100644 --- a/src/content/docs/serverless-function-monitoring/aws-lambda-monitoring/get-started/compatibility-requirements-aws-lambda-monitoring.mdx +++ b/src/content/docs/serverless-function-monitoring/aws-lambda-monitoring/get-started/compatibility-requirements-aws-lambda-monitoring.mdx @@ -23,7 +23,7 @@ Python and Node.js are by far the most popular languages in the Lambda ecosystem Similarly, Go uses the New Relic Go agent. New Relic recommends keeping the agent module up to date. Support is limited for agent versions older than 3.16.0. -To minimize performance impact, we've taken a different approach with Java. New Relic provides [OpenTracing](https://opentracing.io/) SDKs for these runtimes. This approach requires a bit more code to integrate. For newer runtimes, such as .NET 6, [Trace your .NET Lambda functions with New Relic and OpenTelemetry](/docs/serverless-function-monitoring/aws-lambda-monitoring/opentelemetry/lambda-opentelemetry-dotnet/) is available. +To minimize performance impact, we've taken a different approach with Java. New Relic provides the [OpenTracing](https://opentracing.io/) SDK for Java runtimes. This approach requires a bit more code to integrate. For newer runtimes, such as .NET 6, [Trace your .NET Lambda functions with New Relic and OpenTelemetry](/docs/serverless-function-monitoring/aws-lambda-monitoring/opentelemetry/lambda-opentelemetry-dotnet/) is available. For complete Lambda instrumentation, some of our agents included in our Lambda layers depend on a language-specific [AWS SDK](https://aws.amazon.com/tools/#sdk). If an AWS SDK is not used, Lambda data will appear as external service calls in the UI, with minimal detail. In other words, we rely on the AWS SDK to facilitate instrumentation of your function. From dc3dcd394f3819edf2e1cab46336c4c1f4c4ee8b Mon Sep 17 00:00:00 2001 From: ally sassman <42753584+ally-sassman@users.noreply.github.com> Date: Fri, 8 Mar 2024 09:39:33 -0800 Subject: [PATCH 030/124] fix(mobile): replace bracket with parentheses --- .../new-relic-mobile/mobile-sdk/set-max-offline-storage.mdx | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/content/docs/mobile-monitoring/new-relic-mobile/mobile-sdk/set-max-offline-storage.mdx b/src/content/docs/mobile-monitoring/new-relic-mobile/mobile-sdk/set-max-offline-storage.mdx index 4346a21bcb0..ccd599fefc4 100644 --- a/src/content/docs/mobile-monitoring/new-relic-mobile/mobile-sdk/set-max-offline-storage.mdx +++ b/src/content/docs/mobile-monitoring/new-relic-mobile/mobile-sdk/set-max-offline-storage.mdx @@ -31,7 +31,7 @@ This method controls the maximum amount of offline storage that can be stored in -Offline storage is enabled by default but can be disabled with a feature flag using the `disableFeatures` function. For details see [Offline storage](/docs/mobile-monitoring/new-relic-mobile/mobile-sdk/configure-settings/#android-offline-storage]. +Offline storage is enabled by default but can be disabled with a feature flag using the `disableFeatures` function. For details see [Offline storage](/docs/mobile-monitoring/new-relic-mobile/mobile-sdk/configure-settings/#android-offline-storage). ## Syntax [#syntax] @@ -102,7 +102,7 @@ NewRelic.setMaxOfflineStorageSize(1000) -Offline storage is enabled by default but can be disabled with a feature flag using the `disableFeatures` function. For details see [Offline storage](/docs/mobile-monitoring/new-relic-mobile/mobile-sdk/configure-settings/#ios-offline-storage]. +Offline storage is enabled by default but can be disabled with a feature flag using the `disableFeatures` function. For details see [Offline storage](/docs/mobile-monitoring/new-relic-mobile/mobile-sdk/configure-settings/#ios-offline-storage). ## Syntax [#syntax] From bfb861c78ffa738c117f84f1f715b13940e83628 Mon Sep 17 00:00:00 2001 From: Johnathan Date: Fri, 8 Mar 2024 11:04:37 -0800 Subject: [PATCH 031/124] Publish changes to our Compliance Docs Update dates and content for all compliance changes. --- .../fedramp-moderate.mdx | 67 ++++++++++--------- .../hipaa.mdx | 51 +++++++++----- .../{iso.mdx => iso-27001.mdx} | 58 +++++++++++----- .../soc2.mdx | 22 +++++- .../tisax.mdx | 4 +- .../compliance/data-encryption.mdx | 10 +-- .../security-privacy/compliance/hitrust.mdx | 51 +++++++++----- .../regulatory-audits-new-relic-services.mdx | 4 +- 8 files changed, 178 insertions(+), 89 deletions(-) rename src/content/docs/security/security-privacy/compliance/certificates-standards-regulations/{iso.mdx => iso-27001.mdx} (76%) diff --git a/src/content/docs/security/security-privacy/compliance/certificates-standards-regulations/fedramp-moderate.mdx b/src/content/docs/security/security-privacy/compliance/certificates-standards-regulations/fedramp-moderate.mdx index 92663e5992e..bbbcf0e0a93 100644 --- a/src/content/docs/security/security-privacy/compliance/certificates-standards-regulations/fedramp-moderate.mdx +++ b/src/content/docs/security/security-privacy/compliance/certificates-standards-regulations/fedramp-moderate.mdx @@ -44,11 +44,11 @@ The following applies to the New Relic platform: - [FedRAMP Moderate](https://marketplace.fedramp.gov/#!/product/new-relic?sort=productName) + [FedRAMP Moderate](https://marketplace.fedramp.gov/products/F1607057910) - 2022-OCT-19 + 2023-OCT-26 @@ -59,6 +59,41 @@ The following applies to the New Relic platform: New Relic platform + + + + [FedRAMP Moderate](https://marketplace.fedramp.gov/products/F1607057910) + + + + 2023-OCT-26 + + + + Azure + + + + Azure Native New Relic Service + + + + + + [FedRAMP Moderate](https://marketplace.fedramp.gov/products/F1607057910) + + + 2023-OCT-26 + + + + GCP + + + + Pixie: Community Cloud for Pixie + + @@ -140,20 +175,6 @@ The following services are not FedRAMP-authorized: - - - N/A - - - - GCP - - - - Pixie: Community Cloud for Pixie - - - N/A @@ -182,20 +203,6 @@ The following services are not FedRAMP-authorized: - - - N/A - - - - Azure - - - - Azure Native New Relic Service - - - N/A diff --git a/src/content/docs/security/security-privacy/compliance/certificates-standards-regulations/hipaa.mdx b/src/content/docs/security/security-privacy/compliance/certificates-standards-regulations/hipaa.mdx index 2c50cd78ced..a57e9900140 100644 --- a/src/content/docs/security/security-privacy/compliance/certificates-standards-regulations/hipaa.mdx +++ b/src/content/docs/security/security-privacy/compliance/certificates-standards-regulations/hipaa.mdx @@ -50,7 +50,7 @@ The following applies to the New Relic platform: - 2021-JUL-01 + 2024-MAR-08 @@ -61,6 +61,41 @@ The following applies to the New Relic platform: New Relic platform + + + + [HIPAA BAA FAQ](https://newrelic.com/termsandconditions/hipaabaaFAQ) + + + + 2024-MAR-08 + + + + Azure + + + + Azure Native New Relic Service + + + + + + [HIPAA BAA FAQ](https://newrelic.com/termsandconditions/hipaabaaFAQ) + + + 2024-MAR-08 + + + + GCP + + + + Pixie: Community Cloud for Pixie + + @@ -142,20 +177,6 @@ The following services are not covered under the BAA: - - - N/A - - - - GCP - - - - Pixie: Community Cloud for Pixie - - - N/A diff --git a/src/content/docs/security/security-privacy/compliance/certificates-standards-regulations/iso.mdx b/src/content/docs/security/security-privacy/compliance/certificates-standards-regulations/iso-27001.mdx similarity index 76% rename from src/content/docs/security/security-privacy/compliance/certificates-standards-regulations/iso.mdx rename to src/content/docs/security/security-privacy/compliance/certificates-standards-regulations/iso-27001.mdx index 33cfc109971..6cbbf7ccc0e 100644 --- a/src/content/docs/security/security-privacy/compliance/certificates-standards-regulations/iso.mdx +++ b/src/content/docs/security/security-privacy/compliance/certificates-standards-regulations/iso-27001.mdx @@ -8,7 +8,7 @@ metaDescription: Criteria and compliance with annual SOC 2 and FedRAMP audits by freshnessValidatedDate: never --- -The International Organization for Standardization 27001 Standard (ISO 27001) is an information security standard that ensures office sites, development centers, support centers and data centers are securely managed. These certifications run for 3 years (with renewal audits), and have annual touch point audits (surveillance audits). The scope of certification covered the Company’s locations in Portland, Oregon; San Francisco, California; Barcelona, Spain; Dublin, Ireland; Atlanta, Georgia; and London, United Kingdom. +The International Organization for Standardization 27001 Standard (ISO 27001) is an information security standard that ensures office sites, development centers, support centers and data centers are securely managed. These certifications run for 3 years and have annual touch point audits (surveillance audits). The scope of certification covers the Company’s locations in Portland, Oregon; San Francisco, California; Barcelona, Spain; and London, United Kingdom. ## Applicable document by service [#applicable-services] @@ -42,11 +42,11 @@ The following applies to the New Relic platform: - [ISO 27001:2013 Certificate](https://newrelic.com/sites/default/files/2021-11/V2_New_Relic_2021_ISO_27001_Initial_Certificate.pdf) + [ISO 27001:2013 Certificate](https://www.schellman.com/certificate-directory) - 2021-OCT-04 + 2023-NOV-01 @@ -54,7 +54,43 @@ The following applies to the New Relic platform: - New Relics Platform + New Relic Platform + + + + + + [ISO 27001:2013 Certificate](https://www.schellman.com/certificate-directory) + + + + 2023-NOV-01 + + + + Azure + + + + Azure Native New Relic Service + + + + + + [ISO 27001:2013 Certificate](https://www.schellman.com/certificate-directory) + + + + 2023-NOV-01 + + + + GCP + + + + Pixie: Community Cloud for Pixie @@ -128,20 +164,6 @@ The following services are not ISO 27001 certified: - - - N/A - - - - GCP - - - - Pixie: Community Cloud for Pixie - - - N/A diff --git a/src/content/docs/security/security-privacy/compliance/certificates-standards-regulations/soc2.mdx b/src/content/docs/security/security-privacy/compliance/certificates-standards-regulations/soc2.mdx index 8b261b69526..1030967d741 100644 --- a/src/content/docs/security/security-privacy/compliance/certificates-standards-regulations/soc2.mdx +++ b/src/content/docs/security/security-privacy/compliance/certificates-standards-regulations/soc2.mdx @@ -46,7 +46,7 @@ The following applies to the New Relic platform: - 2022-AUG-31 + 2023-AUG-31 @@ -64,7 +64,25 @@ The following applies to the New Relic platform: - 2022-AUG-31 + 2023-AUG-31 + + + + Azure + + + + Native New Relic Service + + + + + + [SOC 2 Type 2](https://us.aicpa.org/interestareas/frc/assuranceadvisoryservices/aicpasoc2report) + + + + 2023-AUG-31 diff --git a/src/content/docs/security/security-privacy/compliance/certificates-standards-regulations/tisax.mdx b/src/content/docs/security/security-privacy/compliance/certificates-standards-regulations/tisax.mdx index 83df71e2c68..c0481b57cf8 100644 --- a/src/content/docs/security/security-privacy/compliance/certificates-standards-regulations/tisax.mdx +++ b/src/content/docs/security/security-privacy/compliance/certificates-standards-regulations/tisax.mdx @@ -10,7 +10,7 @@ freshnessValidatedDate: never TISAX is a European automotive industry-standard information security assessment (ISA) catalog based on key aspects of information security such as data protection and connection to third parties. -For a copy of New Relic’s shared assessment, you must be a member of [ENX Association](https://portal.enx.com/en-US/). The scope of certifications covers the Company’s locations in Portland, Oregon; San Francisco, California; Barcelona, Spain; Dublin, Ireland; Atlanta, Georgia; and London, United Kingdom. +For a copy of New Relic’s shared assessment, you must be a member of the [ENX Association](https://portal.enx.com/en-US/). The scope of certification covers the Company’s locations in the US and the EU. ## Applicable document by service [#applicable-services] @@ -52,7 +52,7 @@ The following applies to the New Relic platform: - AWS, IBM & First Party + AWS & First Party diff --git a/src/content/docs/security/security-privacy/compliance/data-encryption.mdx b/src/content/docs/security/security-privacy/compliance/data-encryption.mdx index eaa49974128..11103f639de 100644 --- a/src/content/docs/security/security-privacy/compliance/data-encryption.mdx +++ b/src/content/docs/security/security-privacy/compliance/data-encryption.mdx @@ -12,9 +12,9 @@ redirects: freshnessValidatedDate: never --- -Whether your data is in transit to New Relic or at rest in our storage, we apply strong encryption measures to help prevent unauthorized access, threats, or theft. This includes [FIPS 140-2](https://csrc.nist.gov/publications/detail/fips/140/2/final) compliance as well as security accreditation for the Federal Risk and Authorization Management Program ([FedRAMP](https://www.fedramp.gov/)). +Whether your data is in transit to New Relic or at rest in our storage, we apply strong encryption measures to help prevent unauthorized access, threats, or theft. FIPS 140-2](https://csrc.nist.gov/publications/detail/fips/140/2/final) compliant encryption standards (using validated cryptographic modules) are available in AWS US and AWS EU regions. -New Relic is authorized for Moderate Impact SaaS Services ([FedRAMP Authorized Moderate](https://marketplace.fedramp.gov/#/product/new-relic?sort=productName&productNameSearch=new%20relic)) for accounts that meet specific criteria. As a cloud service provider, we are committed to ensuring our compliance with FedRAMP's requirements for the [confidentiality, integrity, and availability](https://www.fedramp.gov/understanding-baselines-and-impact-levels/) of your data. +New Relic is authorized for Moderate Impact SaaS Services ([FedRAMP Authorized Moderate](https://marketplace.fedramp.gov/products/F1607057910)) for accounts that meet specific criteria. As a cloud service provider, we are committed to ensuring our compliance with FedRAMP's requirements for the [confidentiality, integrity, and availability](https://www.fedramp.gov/understanding-baselines-and-impact-levels/) of your data. This document describes our data encryption methods, including who gets it, what data is encrypted, and how it works. For more information, see our [security documentation](/docs/security) and [Security website](https://newrelic.com/security), or contact your account representative. @@ -62,7 +62,7 @@ All New Relic customers benefit from the security provided with data encryption - Uses industry-standard transport layer security (TLS). Our preferred protocol for all domains is TLS 1.2. For more information about data transmission, firewalls, hosting, and storage, see our [data security documentation](/docs/security/new-relic-security/data-privacy/new-relic-security-protecting-your-data-content). + Uses industry-standard transport layer security (TLS). Our preferred protocol for all domains is TLS 1.3. For more information about data transmission, firewalls, hosting, and storage, see our [data security documentation](/docs/security/new-relic-security/data-privacy/new-relic-security-protecting-your-data-content). @@ -112,13 +112,13 @@ New Relic provides additional security by encrypting all data at rest (FIPS 140- - New Relic relies on the strongest cryptography available wherever your data is stored. For example, data in AWS is encrypted using an XTS-AES-256 block cipher implemented in a FIPS-validated cryptographic hardware module. Encryption keys are generated using the hardware module and are unique to each instance storage device. All encryption keys are destroyed when the instance stops or terminates, and they cannot be recovered. + New Relic applies encryption to the data stored. For example, data in AWS is encrypted using an XTS-AES-256 block cipher implemented in a FIPS-validated cryptographic hardware module. Encryption keys are generated using the hardware module and are unique to each instance storage device. All encryption keys are destroyed when the instance stops or terminates, and they cannot be recovered. As additional security measures: * Encryption at rest cannot be disabled. * External encryption keys cannot be provided. - Some customers continue to leverage additional encryption at rest mechanisms. If you have questions, please reach out to your account team. + diff --git a/src/content/docs/security/security-privacy/compliance/hitrust.mdx b/src/content/docs/security/security-privacy/compliance/hitrust.mdx index 6f7d09b7c33..a86313bd00c 100644 --- a/src/content/docs/security/security-privacy/compliance/hitrust.mdx +++ b/src/content/docs/security/security-privacy/compliance/hitrust.mdx @@ -44,7 +44,7 @@ HITRUST Alliance is a non-profit organization that champions programs that safeg - 2022-NOV-30 + 2023-OCT-27 @@ -55,6 +55,41 @@ HITRUST Alliance is a non-profit organization that champions programs that safeg New Relic platform + + + + HITRUST certificate + + + + 2023-OCT-27 + + + + Azure + + + + Azure Native New Relic Service + + + + + + HITRUST certificate + + + 2023-OCT-27 + + + + GCP + + + + Pixie: Community Cloud for Pixie + + @@ -154,20 +189,6 @@ HITRUST doesn't provide certification for the following services: - - - N/A - - - - GCP - - - - Pixie: Community Cloud for Pixie - - - N/A diff --git a/src/content/docs/security/security-privacy/compliance/regulatory-audits-new-relic-services.mdx b/src/content/docs/security/security-privacy/compliance/regulatory-audits-new-relic-services.mdx index 9a4565457e4..9cfcd89532f 100644 --- a/src/content/docs/security/security-privacy/compliance/regulatory-audits-new-relic-services.mdx +++ b/src/content/docs/security/security-privacy/compliance/regulatory-audits-new-relic-services.mdx @@ -13,7 +13,7 @@ freshnessValidatedDate: never This document describes New Relic's products and services as they relate to regulatory framework compliance status. -**Updated on January 9, 2023.** +**Updated on March 8, 2024.** ## Certifications, standards, and regulations [#cer-std-reg] @@ -22,7 +22,7 @@ For detailed information, see the documentation on the specific certifications, * [FedRAMP Moderate](/docs/security/security-privacy/compliance/certificates-standards-regulations/fedramp-moderate/) * [HIPAA enabled capabilities](/docs/security/security-privacy/compliance/certificates-standards-regulations/hipaa/) * [HITRUST compliance](/docs/security/security-privacy/compliance/hitrust) -* [ISO 27001](/docs/security/security-privacy/compliance/certificates-standards-regulations/iso/) +* [ISO 27001](/docs/security/security-privacy/compliance/certificates-standards-regulations/iso-27001/) * [SOC 2](/docs/security/security-privacy/compliance/certificates-standards-regulations/soc2/) * [TISAX](/docs/security/security-privacy/compliance/certificates-standards-regulations/tisax) From 330ee36e1389b47ed5116132eadeb6d8dd23c150 Mon Sep 17 00:00:00 2001 From: ndesai-newrelic <89222514+ndesai-newrelic@users.noreply.github.com> Date: Mon, 11 Mar 2024 09:36:27 -0500 Subject: [PATCH 032/124] Update src/content/docs/mobile-monitoring/new-relic-mobile-maui-dotnet/monitor-your-net-maui-application.mdx Co-authored-by: ally sassman <42753584+ally-sassman@users.noreply.github.com> --- .../monitor-your-net-maui-application.mdx | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/content/docs/mobile-monitoring/new-relic-mobile-maui-dotnet/monitor-your-net-maui-application.mdx b/src/content/docs/mobile-monitoring/new-relic-mobile-maui-dotnet/monitor-your-net-maui-application.mdx index 045a54b9859..f365c0447df 100644 --- a/src/content/docs/mobile-monitoring/new-relic-mobile-maui-dotnet/monitor-your-net-maui-application.mdx +++ b/src/content/docs/mobile-monitoring/new-relic-mobile-maui-dotnet/monitor-your-net-maui-application.mdx @@ -81,7 +81,7 @@ using NewRelic.MAUI.Plugin; CrossNewRelic.Current.HandleUncaughtException(); CrossNewRelic.Current.TrackShellNavigatedEvents(); // Set optional agent configuration - // Options are: crashReportingEnabled, loggingEnabled, logLevel, collectorAddress, crashCollectorAddress,analyticsEventEnabled, networkErrorRequestEnabled, networkRequestEnabled, interactionTracingEnabled,webViewInstrumentation,fedRampEnabled,offlineStorageEnabled + // Options are: crashReportingEnabled, loggingEnabled, logLevel, collectorAddress, crashCollectorAddress, analyticsEventEnabled, networkErrorRequestEnabled, networkRequestEnabled, interactionTracingEnabled, webViewInstrumentation, fedRampEnabled, offlineStorageEnabled // AgentStartConfiguration agentConfig = new AgentStartConfiguration(crashReportingEnabled:false); if (DeviceInfo.Current.Platform == DevicePlatform.Android) From eb39a2ae6e62331d693b24a55e41f084bb5260d4 Mon Sep 17 00:00:00 2001 From: ndesai-newrelic <89222514+ndesai-newrelic@users.noreply.github.com> Date: Mon, 11 Mar 2024 09:36:32 -0500 Subject: [PATCH 033/124] Update src/content/docs/mobile-monitoring/new-relic-mobile-xamarin/monitor-your-xamarin-application.mdx Co-authored-by: ally sassman <42753584+ally-sassman@users.noreply.github.com> --- .../monitor-your-xamarin-application.mdx | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/content/docs/mobile-monitoring/new-relic-mobile-xamarin/monitor-your-xamarin-application.mdx b/src/content/docs/mobile-monitoring/new-relic-mobile-xamarin/monitor-your-xamarin-application.mdx index 8352110be94..19e893312dd 100644 --- a/src/content/docs/mobile-monitoring/new-relic-mobile-xamarin/monitor-your-xamarin-application.mdx +++ b/src/content/docs/mobile-monitoring/new-relic-mobile-xamarin/monitor-your-xamarin-application.mdx @@ -83,7 +83,7 @@ using NewRelic.Xamarin.Plugin; CrossNewRelicClient.Current.HandleUncaughtException(); CrossNewRelicClient.Current.TrackShellNavigatedEvents() // Set optional agent configuration - // Options are: crashReportingEnabled, loggingEnabled, logLevel, collectorAddress, crashCollectorAddress,analyticsEventEnabled, networkErrorRequestEnabled, networkRequestEnabled, interactionTracingEnabled,webViewInstrumentation,fedRampEnabled,offlineStorageEnabled + // Options are: crashReportingEnabled, loggingEnabled, logLevel, collectorAddress, crashCollectorAddress, analyticsEventEnabled, networkErrorRequestEnabled, networkRequestEnabled, interactionTracingEnabled, webViewInstrumentation, fedRampEnabled, offlineStorageEnabled // AgentStartConfiguration agentConfig = new AgentStartConfiguration(crashReportingEnabled:false); if (Device.RuntimePlatform == Device.Android) From e600a576ec40f92388de459971d4f18d0a865736 Mon Sep 17 00:00:00 2001 From: ndesai-newrelic <89222514+ndesai-newrelic@users.noreply.github.com> Date: Mon, 11 Mar 2024 09:36:44 -0500 Subject: [PATCH 034/124] Update src/content/docs/release-notes/mobile-release-notes/capacitor-release-notes/capacitor-agent-136.mdx Co-authored-by: ally sassman <42753584+ally-sassman@users.noreply.github.com> --- .../capacitor-release-notes/capacitor-agent-136.mdx | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/src/content/docs/release-notes/mobile-release-notes/capacitor-release-notes/capacitor-agent-136.mdx b/src/content/docs/release-notes/mobile-release-notes/capacitor-release-notes/capacitor-agent-136.mdx index 4088cf13b66..a5bbe98d9a2 100644 --- a/src/content/docs/release-notes/mobile-release-notes/capacitor-release-notes/capacitor-agent-136.mdx +++ b/src/content/docs/release-notes/mobile-release-notes/capacitor-release-notes/capacitor-agent-136.mdx @@ -7,10 +7,10 @@ downloadLink: 'https://www.npmjs.com/package/@newrelic/newrelic-capacitor-plugin ## New in this release -* Added Offline Harvesting Feature: This new feature enables the preservation of harvest data that would otherwise be lost when the application lacks an internet connection. The stored harvests will be sent once the internet connection is re-established and the next harvest upload is successful. -* Introduced setMaxOfflineStorageSize API: This new API allows the user to determine the maximum volume of data that can be stored locally. This aids in better management and control of local data storage. -* Updated native iOS Agent: We've upgraded the native iOS agent to version 7.4.9, which includes performance improvements and bug fixes. -* Updated native Android Agent: We've also upgraded the native Android agent to version 7.3.0 bringing benefits like improved stability and enhanced features. +* Added offline harvesting feature: This new feature enables the preservation of harvest data that would otherwise be lost when the application lacks an internet connection. The stored harvests will be sent once the internet connection is re-established and the next harvest upload is successful. +* Introduced `setMaxOfflineStorageSize` API: This new API allows the user to determine the maximum volume of data that can be stored locally. This aids in better management and control of local data storage. +* Updated native iOS agent: We've upgraded the native iOS agent to version 7.4.9, which includes performance improvements and bug fixes. +* Updated native Android agent: We've also upgraded the native Android agent to version 7.3.0 bringing benefits like improved stability and enhanced features. * Resolved an issue in the fetch instrumentation where the absence of a body led to failure in recording network requests by the agent. These enhancements help to improve overall user experience and application performance. From 44446fd9af1137f14cf790aac862b17033b813d9 Mon Sep 17 00:00:00 2001 From: ndesai-newrelic <89222514+ndesai-newrelic@users.noreply.github.com> Date: Mon, 11 Mar 2024 09:36:55 -0500 Subject: [PATCH 035/124] Update src/content/docs/release-notes/mobile-release-notes/cordova-release-notes/cordova-agent-627.mdx Co-authored-by: ally sassman <42753584+ally-sassman@users.noreply.github.com> --- .../cordova-release-notes/cordova-agent-627.mdx | 9 ++++----- 1 file changed, 4 insertions(+), 5 deletions(-) diff --git a/src/content/docs/release-notes/mobile-release-notes/cordova-release-notes/cordova-agent-627.mdx b/src/content/docs/release-notes/mobile-release-notes/cordova-release-notes/cordova-agent-627.mdx index e145a132124..cf7a8abc78b 100644 --- a/src/content/docs/release-notes/mobile-release-notes/cordova-release-notes/cordova-agent-627.mdx +++ b/src/content/docs/release-notes/mobile-release-notes/cordova-release-notes/cordova-agent-627.mdx @@ -7,11 +7,10 @@ downloadLink: 'https://github.com/newrelic/newrelic-cordova-plugin' ## New in this release -* Added Offline Harvesting Feature: This new feature enables the preservation of harvest data that would otherwise be lost when the application lacks an internet connection. The stored harvests will be sent once the internet connection is re-established and the next harvest upload is successful. -* Introduced setMaxOfflineStorageSize API: This new API allows the user to determine the maximum volume of data that can be stored locally. This aids in better management and control of local data storage. -* Updated native iOS Agent: We've upgraded the native iOS agent to version 7.4.9, which includes performance improvements and bug fixes. -* Updated native Android Agent: We've also upgraded the native Android agent to version 7.3.0 bringing benefits like improved stability and enhanced features. +* Added offline harvesting feature: This new feature enables the preservation of harvest data that would otherwise be lost when the application lacks an internet connection. The stored harvests will be sent once the internet connection is re-established and the next harvest upload is successful. +* Introduced `setMaxOfflineStorageSize` API: This new API allows the user to determine the maximum volume of data that can be stored locally. This aids in better management and control of local data storage. +* Updated native iOS agent: We've upgraded the native iOS agent to version 7.4.9, which includes performance improvements and bug fixes. +* Updated native Android agent: We've also upgraded the native Android agent to version 7.3.0 bringing benefits like improved stability and enhanced features. * Resolved an issue in the fetch instrumentation where the absence of a body led to failure in recording network requests by the agent. - These enhancements help to improve overall user experience and application performance. From 937ac37c1b2a0cd8b4b532c9c0d69efc5f5e3a09 Mon Sep 17 00:00:00 2001 From: ndesai-newrelic <89222514+ndesai-newrelic@users.noreply.github.com> Date: Mon, 11 Mar 2024 09:37:09 -0500 Subject: [PATCH 036/124] Update src/content/docs/release-notes/mobile-release-notes/flutter-release-notes/flutter-agent-107.mdx Co-authored-by: ally sassman <42753584+ally-sassman@users.noreply.github.com> --- .../flutter-release-notes/flutter-agent-107.mdx | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/src/content/docs/release-notes/mobile-release-notes/flutter-release-notes/flutter-agent-107.mdx b/src/content/docs/release-notes/mobile-release-notes/flutter-release-notes/flutter-agent-107.mdx index 18f075ea692..a6b0c2e2548 100644 --- a/src/content/docs/release-notes/mobile-release-notes/flutter-release-notes/flutter-agent-107.mdx +++ b/src/content/docs/release-notes/mobile-release-notes/flutter-release-notes/flutter-agent-107.mdx @@ -5,8 +5,9 @@ version: 1.0.5 downloadLink: 'https://pub.dev/packages/newrelic_mobile/versions/1.0.6' --- -# New in this release +## New in this release + * Added the ability to store harvest data that previously would be lost if the application doesn't have internet connection. These harvest are then sent after an internet connection is established and the next harvest successfully uploads. This feature is enabled by default. * Updated the native Android agent to version 7.3.0. * Updated the native iOS agent to version 7.4.9. -* fixes for Go Router Instrusmentation +* Included fixes for Go Router instrumentation From 8565620b947238b6c030427f184263d35b74a6d6 Mon Sep 17 00:00:00 2001 From: ndesai-newrelic <89222514+ndesai-newrelic@users.noreply.github.com> Date: Mon, 11 Mar 2024 09:37:22 -0500 Subject: [PATCH 037/124] Update src/content/docs/release-notes/mobile-release-notes/net-maui-release-notes/net-maui-agent-006.mdx Co-authored-by: ally sassman <42753584+ally-sassman@users.noreply.github.com> --- .../net-maui-release-notes/net-maui-agent-006.mdx | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/src/content/docs/release-notes/mobile-release-notes/net-maui-release-notes/net-maui-agent-006.mdx b/src/content/docs/release-notes/mobile-release-notes/net-maui-release-notes/net-maui-agent-006.mdx index 0ecc4a5f9ee..7d412649fd1 100644 --- a/src/content/docs/release-notes/mobile-release-notes/net-maui-release-notes/net-maui-agent-006.mdx +++ b/src/content/docs/release-notes/mobile-release-notes/net-maui-release-notes/net-maui-agent-006.mdx @@ -7,7 +7,7 @@ downloadLink: 'https://www.nuget.org/packages/NewRelic.MAUI.Plugin' ## New in this release -* Added Offline Harvesting Feature: This new feature enables the preservation of harvest data that would otherwise be lost when the application lacks an internet connection. The stored harvests will be sent once the internet connection is re-established and the next harvest upload is successful. -* Introduced setMaxOfflineStorageSize API: This new API allows the user to determine the maximum volume of data that can be stored locally. This aids in better management and control of local data storage. -* Updated native iOS Agent: We've upgraded the native iOS agent to version 7.4.9, which includes performance improvements and bug fixes. -* Updated native Android Agent: We've also upgraded the native Android agent to version 7.3.0 bringing benefits like improved stability and enhanced features. +* Added offline harvesting feature: This new feature enables the preservation of harvest data that would otherwise be lost when the application lacks an internet connection. The stored harvests will be sent once the internet connection is re-established and the next harvest upload is successful. +* Introduced `setMaxOfflineStorageSize` API: This new API allows the user to determine the maximum volume of data that can be stored locally. This aids in better management and control of local data storage. +* Updated native iOS agent: We've upgraded the native iOS agent to version 7.4.9, which includes performance improvements and bug fixes. +* Updated native Android agent: We've also upgraded the native Android agent to version 7.3.0 bringing benefits like improved stability and enhanced features. From effb1eee12074e938d5fb9efe0bc09f54d816bdd Mon Sep 17 00:00:00 2001 From: ndesai-newrelic <89222514+ndesai-newrelic@users.noreply.github.com> Date: Mon, 11 Mar 2024 09:37:31 -0500 Subject: [PATCH 038/124] Update src/content/docs/release-notes/mobile-release-notes/react-native-release-notes/react-native-agent-136.mdx Co-authored-by: ally sassman <42753584+ally-sassman@users.noreply.github.com> --- .../react-native-release-notes/react-native-agent-136.mdx | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/src/content/docs/release-notes/mobile-release-notes/react-native-release-notes/react-native-agent-136.mdx b/src/content/docs/release-notes/mobile-release-notes/react-native-release-notes/react-native-agent-136.mdx index 75d43271a69..b595cb38947 100644 --- a/src/content/docs/release-notes/mobile-release-notes/react-native-release-notes/react-native-agent-136.mdx +++ b/src/content/docs/release-notes/mobile-release-notes/react-native-release-notes/react-native-agent-136.mdx @@ -7,9 +7,9 @@ downloadLink: 'https://www.npmjs.com/package/newrelic-react-native-agent/v/1.3.6 ## New in this release -* Added Offline Harvesting Feature: This new feature enables the preservation of harvest data that would otherwise be lost when the application lacks an internet connection. The stored harvests will be sent once the internet connection is re-established and the next harvest upload is successful. -* Introduced setMaxOfflineStorageSize API: This new API allows the user to determine the maximum volume of data that can be stored locally. This aids in better management and control of local data storage. -* Updated native iOS Agent: We've upgraded the native iOS agent to version 7.4.9, which includes performance improvements and bug fixes. -* Updated native Android Agent: We've also upgraded the native Android agent to version 7.3.0 bringing benefits like improved stability and enhanced features. +* Added offline harvesting feature: This new feature enables the preservation of harvest data that would otherwise be lost when the application lacks an internet connection. The stored harvests will be sent once the internet connection is re-established and the next harvest upload is successful. +* Introduced `setMaxOfflineStorageSize` API: This new API allows the user to determine the maximum volume of data that can be stored locally. This aids in better management and control of local data storage. +* Updated native iOS agent: We've upgraded the native iOS agent to version 7.4.9, which includes performance improvements and bug fixes. +* Updated native Android agent: We've also upgraded the native Android agent to version 7.3.0 bringing benefits like improved stability and enhanced features. * Added compatibility for Android dynamic features. * Resolved an issue where events were not being reported in the event of a forceful termination of the application. From f41caad19c3b3fbc417ff7337ea1a91dd04d7060 Mon Sep 17 00:00:00 2001 From: ndesai-newrelic <89222514+ndesai-newrelic@users.noreply.github.com> Date: Mon, 11 Mar 2024 09:37:52 -0500 Subject: [PATCH 039/124] Update src/content/docs/release-notes/mobile-release-notes/unity-release-notes/unity-agent-133.mdx Co-authored-by: ally sassman <42753584+ally-sassman@users.noreply.github.com> --- .../unity-release-notes/unity-agent-133.mdx | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/src/content/docs/release-notes/mobile-release-notes/unity-release-notes/unity-agent-133.mdx b/src/content/docs/release-notes/mobile-release-notes/unity-release-notes/unity-agent-133.mdx index 9caf42c79cd..bb1ce23cc86 100644 --- a/src/content/docs/release-notes/mobile-release-notes/unity-release-notes/unity-agent-133.mdx +++ b/src/content/docs/release-notes/mobile-release-notes/unity-release-notes/unity-agent-133.mdx @@ -6,9 +6,9 @@ downloadLink: 'https://github.com/newrelic/newrelic-unity-agent.git' --- ## New in this release -* Offline Harvesting Feature: Preserves harvest data during internet downtime, sending stored data once online. -* setMaxOfflineStorageSize API: Allows setting a maximum limit for local data storage. -* Upgraded native iOS Agent to 7.4.9: Offers performance upgrades and bug fixes. -* Upgraded native Android Agent to 7.3.0: Improves stability and adds enhanced features. -* UnityWebRequest Instrumentation Update: Fixes issue with replacement of constrained dispose calls, streamlining app building. +* Offline harvesting feature: Preserves harvest data during internet downtime, sending stored data once online. +* `setMaxOfflineStorageSize` API: Allows setting a maximum limit for local data storage. +* Upgraded native iOS agent to 7.4.9: Offers performance upgrades and bug fixes. +* Upgraded native Android agent to 7.3.0: Improves stability and adds enhanced features. +* `UnityWebRequest` instrumentation update: Fixes issue with replacement of constrained dispose calls, streamlining app building. From fb56d61d4bf5e4d53172c8c05675cc120d32594e Mon Sep 17 00:00:00 2001 From: ndesai-newrelic <89222514+ndesai-newrelic@users.noreply.github.com> Date: Mon, 11 Mar 2024 09:38:04 -0500 Subject: [PATCH 040/124] Update src/content/docs/release-notes/mobile-release-notes/xamarin-release-notes/xamarin-agent-004.mdx Co-authored-by: ally sassman <42753584+ally-sassman@users.noreply.github.com> --- .../xamarin-release-notes/xamarin-agent-004.mdx | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/src/content/docs/release-notes/mobile-release-notes/xamarin-release-notes/xamarin-agent-004.mdx b/src/content/docs/release-notes/mobile-release-notes/xamarin-release-notes/xamarin-agent-004.mdx index 00d7fa51c42..49f93b16f7e 100644 --- a/src/content/docs/release-notes/mobile-release-notes/xamarin-release-notes/xamarin-agent-004.mdx +++ b/src/content/docs/release-notes/mobile-release-notes/xamarin-release-notes/xamarin-agent-004.mdx @@ -7,7 +7,7 @@ downloadLink: 'https://www.nuget.org/packages/NewRelic.Xamarin.Plugin' ## New in this release -* Added Offline Monitoring Feature: This new feature enables the preservation of harvest data that would otherwise be lost when the application lacks an internet connection. The stored harvests will be sent once the internet connection is re-established and the next harvest upload is successful. -* Introduced setMaxOfflineStorageSize API: This new API allows the user to determine the maximum volume of data that can be stored locally. This aids in better management and control of local data storage. -* Updated native iOS Agent: We've upgraded the native iOS agent to version 7.4.9, which includes performance improvements and bug fixes. -* Updated native Android Agent: We've also upgraded the native Android agent to version 7.3.0 bringing benefits like improved stability and enhanced features. +* Added offline monitoring feature: This new feature enables the preservation of harvest data that would otherwise be lost when the application lacks an internet connection. The stored harvests will be sent once the internet connection is re-established and the next harvest upload is successful. +* Introduced `setMaxOfflineStorageSize` API: This new API allows the user to determine the maximum volume of data that can be stored locally. This aids in better management and control of local data storage. +* Updated native iOS agent: We've upgraded the native iOS agent to version 7.4.9, which includes performance improvements and bug fixes. +* Updated native Android agent: We've also upgraded the native Android agent to version 7.3.0 bringing benefits like improved stability and enhanced features. From 8be541191c52611d1f51a08607b436da3aefbd4a Mon Sep 17 00:00:00 2001 From: a-sassman Date: Mon, 11 Mar 2024 12:13:20 -0700 Subject: [PATCH 041/124] fix(mobile): update offline storage language --- .../mobile-sdk/configure-settings.mdx | 14 ++++++++------ .../mobile-sdk/set-max-offline-storage.mdx | 16 ++++++++++++++-- 2 files changed, 22 insertions(+), 8 deletions(-) diff --git a/src/content/docs/mobile-monitoring/new-relic-mobile/mobile-sdk/configure-settings.mdx b/src/content/docs/mobile-monitoring/new-relic-mobile/mobile-sdk/configure-settings.mdx index a19ad489f3e..d4e2b1e8625 100644 --- a/src/content/docs/mobile-monitoring/new-relic-mobile/mobile-sdk/configure-settings.mdx +++ b/src/content/docs/mobile-monitoring/new-relic-mobile/mobile-sdk/configure-settings.mdx @@ -451,13 +451,14 @@ To change settings, you have two options (if the setting supports it): Enable or disable offline data storage when no internet connection is available. - * To configure the amount of offline storage, see [Set max offline storage size](/docs/mobile-monitoring/new-relic-mobile/mobile-sdk/set-max-offline-storage/#android). - * Default value is `false`. + To configure the amount of offline storage, see [Set max offline storage size](/docs/mobile-monitoring/new-relic-mobile/mobile-sdk/set-max-offline-storage). + Offline storage is disabled by default. To enable it, add the following feature flag: + ```java - NewRelic.disableFeature(FeatureFlag.OfflineStorage) + NewRelic.enableFeature(FeatureFlag.OfflineStorage) ``` @@ -977,13 +978,14 @@ If you modify any of settings below, be sure to call the feature flag before the Enable or disable offline data storage when no internet connection is available. To configure the amount of offline storage, see [Set max offline storage size](/docs/mobile-monitoring/new-relic-mobile/mobile-sdk/set-max-offline-storage/#ios). - - Default value is `true`. + + Offline storage is disabled by default. To enable it, add the following feature flag: + ```swift - NewRelic.disableFeatures(NRMAFeatureFlags.NRFeatureFlag_OfflineStorage) + NewRelic.enableFeatures(NRMAFeatureFlags.NRFeatureFlag_OfflineStorage) ``` diff --git a/src/content/docs/mobile-monitoring/new-relic-mobile/mobile-sdk/set-max-offline-storage.mdx b/src/content/docs/mobile-monitoring/new-relic-mobile/mobile-sdk/set-max-offline-storage.mdx index ccd599fefc4..c8b71ea16cc 100644 --- a/src/content/docs/mobile-monitoring/new-relic-mobile/mobile-sdk/set-max-offline-storage.mdx +++ b/src/content/docs/mobile-monitoring/new-relic-mobile/mobile-sdk/set-max-offline-storage.mdx @@ -31,7 +31,13 @@ This method controls the maximum amount of offline storage that can be stored in -Offline storage is enabled by default but can be disabled with a feature flag using the `disableFeatures` function. For details see [Offline storage](/docs/mobile-monitoring/new-relic-mobile/mobile-sdk/configure-settings/#android-offline-storage). +Offline storage is enabled by default. To enable it, add the following feature flag: + +```java +NewRelic.disableFeature(FeatureFlag.OfflineStorage) +``` + +For details on adding feature flags, see [Configure mobile monitoring settings](docs/mobile-monitoring/new-relic-mobile/mobile-sdk/configure-settings/). ## Syntax [#syntax] @@ -102,7 +108,13 @@ NewRelic.setMaxOfflineStorageSize(1000) -Offline storage is enabled by default but can be disabled with a feature flag using the `disableFeatures` function. For details see [Offline storage](/docs/mobile-monitoring/new-relic-mobile/mobile-sdk/configure-settings/#ios-offline-storage). +Offline storage is disabled by default. To enable it, add the following feature flag: + +```swift +NewRelic.enableFeatures(NRMAFeatureFlags.NRFeatureFlag_OfflineStorage) +``` + +For details on adding feature flags, see [Configure mobile monitoring settings](docs/mobile-monitoring/new-relic-mobile/mobile-sdk/configure-settings). ## Syntax [#syntax] From 19ba013ed76cb713d44ba8d01a72b4d8580958e8 Mon Sep 17 00:00:00 2001 From: Bradley Camacho <42678939+bradleycamacho@users.noreply.github.com> Date: Mon, 11 Mar 2024 14:53:04 -0700 Subject: [PATCH 042/124] Fix callout image sizing --- .../tutorial-improve-app-performance/root-causes.mdx | 11 ++--------- 1 file changed, 2 insertions(+), 9 deletions(-) diff --git a/src/content/docs/tutorial-improve-app-performance/root-causes.mdx b/src/content/docs/tutorial-improve-app-performance/root-causes.mdx index 3bb18142fba..1838977dbc3 100644 --- a/src/content/docs/tutorial-improve-app-performance/root-causes.mdx +++ b/src/content/docs/tutorial-improve-app-performance/root-causes.mdx @@ -12,8 +12,6 @@ freshnessValidatedDate: never import journeyWebTrans from 'images/journey_screenshot-web-transactions.webp' -import journeyTime from 'images/journey_crop-time-picker.webp' - Your app is slow. Perhaps it's so slow it's causing downtime or issues in related services, or perhaps it's simply a slow back-end response that makes your UX just a little bit worse. What do you do about it? This tutorial walks you through how to use New Relic to triage your application and identify the root cause of your app's degraded performance. You'll start by "instrumenting" your app with an agent, which means installing a piece of code that reports data about your app to New Relic through language and framework specific integrations. Using this data in New Relic, you'll dig into the performance of your application and identify slow transactions, slow database queries, or slow external services as your issue—or possibly all three! @@ -83,13 +81,8 @@ Once you've installed an agent, go to **[one.newrelic.com](https Look at the **Web transactions time** chart. This chart displays the average response time of certain metrics within your app. As your chart populates with data, take note of strange spikes in any line or segment. At the same time, take note of any segments or lines that consistantly take a large amount of time. -Use the time picker to look for spikes over various time ranges. -Image showing the time picker for APM +Use the time picker in the top right of your page to look for spikes over various time ranges. + From a47167a427672d13f07759848e7b38cc0811cd12 Mon Sep 17 00:00:00 2001 From: a-sassman Date: Tue, 12 Mar 2024 12:37:05 -0700 Subject: [PATCH 043/124] fix(mobile): add back stopInteraction doc link --- src/nav/mobile-monitoring.yml | 1 + 1 file changed, 1 insertion(+) diff --git a/src/nav/mobile-monitoring.yml b/src/nav/mobile-monitoring.yml index b74a060a0c4..4d8cf8c79ed 100644 --- a/src/nav/mobile-monitoring.yml +++ b/src/nav/mobile-monitoring.yml @@ -218,6 +218,7 @@ pages: - title: Start interactions path: /docs/mobile-monitoring/new-relic-mobile/mobile-sdk/start-interaction - title: Stop interactions + path: /docs/mobile-monitoring/new-relic-mobile/mobile-sdk/stop-interaction - title: Test crash reporting path: /docs/mobile-monitoring/new-relic-mobile/mobile-sdk/test-crash-reporting - title: Track HTTP requests From 55a2c4e26c6ffb8a48da78dcf53240800db6af42 Mon Sep 17 00:00:00 2001 From: a-sassman Date: Tue, 12 Mar 2024 12:46:41 -0700 Subject: [PATCH 044/124] fix(mobile): add backslash to docs link --- .../new-relic-mobile/mobile-sdk/set-max-offline-storage.mdx | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/content/docs/mobile-monitoring/new-relic-mobile/mobile-sdk/set-max-offline-storage.mdx b/src/content/docs/mobile-monitoring/new-relic-mobile/mobile-sdk/set-max-offline-storage.mdx index 309547ac610..62c4254a7d6 100644 --- a/src/content/docs/mobile-monitoring/new-relic-mobile/mobile-sdk/set-max-offline-storage.mdx +++ b/src/content/docs/mobile-monitoring/new-relic-mobile/mobile-sdk/set-max-offline-storage.mdx @@ -58,7 +58,7 @@ Offline storage is enabled by default. To enable it, add the following feature f NewRelic.disableFeature(FeatureFlag.OfflineStorage) ``` -For details on adding feature flags, see [Configure mobile monitoring settings](docs/mobile-monitoring/new-relic-mobile/mobile-sdk/configure-settings/). +For details on adding feature flags, see [Configure mobile monitoring settings](/docs/mobile-monitoring/new-relic-mobile/mobile-sdk/configure-settings/). ## Syntax [#syntax] @@ -135,7 +135,7 @@ Offline storage is disabled by default. To enable it, add the following feature NewRelic.enableFeatures(NRMAFeatureFlags.NRFeatureFlag_OfflineStorage) ``` -For details on adding feature flags, see [Configure mobile monitoring settings](docs/mobile-monitoring/new-relic-mobile/mobile-sdk/configure-settings). +For details on adding feature flags, see [Configure mobile monitoring settings](/docs/mobile-monitoring/new-relic-mobile/mobile-sdk/configure-settings). ## Syntax [#syntax] From 90fe766f680f9b2a695b0ff153f03cb1307c6a9a Mon Sep 17 00:00:00 2001 From: ndesai Date: Tue, 12 Mar 2024 15:07:39 -0500 Subject: [PATCH 045/124] added configuration settings for offline storage --- .../mobile-sdk/configure-settings.mdx | 113 +++++++++++++++--- 1 file changed, 95 insertions(+), 18 deletions(-) diff --git a/src/content/docs/mobile-monitoring/new-relic-mobile/mobile-sdk/configure-settings.mdx b/src/content/docs/mobile-monitoring/new-relic-mobile/mobile-sdk/configure-settings.mdx index d4e2b1e8625..ade01cd2138 100644 --- a/src/content/docs/mobile-monitoring/new-relic-mobile/mobile-sdk/configure-settings.mdx +++ b/src/content/docs/mobile-monitoring/new-relic-mobile/mobile-sdk/configure-settings.mdx @@ -450,13 +450,13 @@ To change settings, you have two options (if the setting supports it): Enable or disable offline data storage when no internet connection is available. - + To configure the amount of offline storage, see [Set max offline storage size](/docs/mobile-monitoring/new-relic-mobile/mobile-sdk/set-max-offline-storage). - + Offline storage is disabled by default. To enable it, add the following feature flag: - + ```java NewRelic.enableFeature(FeatureFlag.OfflineStorage) ``` @@ -582,14 +582,14 @@ To configure feature flags, use the following method defined in `NewRelic.h:` Specifies the URI authority component of the harvest data upload endpoint. This endpoint is also used for handled exception uploads. - To replace data endpoint the agent will use when reporting data harvests, add `andCollectorAddress:` to your `NewRelic.start(withApplicationToken:)` method call. + To replace data endpoint the agent will use when reporting data harvests, add `andCollectorAddress:` to your `NewRelic.start(withApplicationToken:)` method call. Default value is `mobile-collector.newrelic.com`. ```swift - NewRelic.start(withApplicationToken:YOUR_APP_TOKEN - andCollectorAddress:"harvest-upload.domain.com" + NewRelic.start(withApplicationToken:YOUR_APP_TOKEN + andCollectorAddress:"harvest-upload.domain.com" andCrashCollectorAddress:"crash-upload.domain.com"); ``` @@ -605,8 +605,8 @@ To configure feature flags, use the following method defined in `NewRelic.h:` ```swift - NewRelic.start(withApplicationToken:YOUR_APP_TOKEN - andCollectorAddress:"harvest-upload.domain.com" + NewRelic.start(withApplicationToken:YOUR_APP_TOKEN + andCollectorAddress:"harvest-upload.domain.com" andCrashCollectorAddress:"crash-upload.domain.com"); ``` @@ -633,7 +633,7 @@ If you modify any of crash and error reporting settings below, be sure to call t Enable or disable crash reporting, which appears on the [**Crash analysis** page](/docs/mobile-monitoring/mobile-monitoring-ui/crashes/crash-analysis-group-filter-your-crashes). - + Specifies the URI authority component of the harvest data upload endpoint. This endpoint is also used for handled exception uploads. To replace data endpoint the agent will use when reporting data harvests, add `.usingCollectorAddress()` to your `NewRelic.withApplicationToken()` method call. @@ -978,12 +978,12 @@ If you modify any of settings below, be sure to call the feature flag before the Enable or disable offline data storage when no internet connection is available. To configure the amount of offline storage, see [Set max offline storage size](/docs/mobile-monitoring/new-relic-mobile/mobile-sdk/set-max-offline-storage/#ios). - + Offline storage is disabled by default. To enable it, add the following feature flag: - + ```swift NewRelic.enableFeatures(NRMAFeatureFlags.NRFeatureFlag_OfflineStorage) ``` @@ -1028,7 +1028,8 @@ let agentConfig : AgentConfiguration = { collectorAddress: "", crashCollectorAddress: "", sendConsoleEvents: false, - fedRampEnabled: false + fedRampEnabled: false, + offlineStorageEnabled:false } NewRelicCapacitorPlugin.start({appKey:appToken, agentConfiguration:agentConfig}) @@ -1193,6 +1194,19 @@ NewRelicCapacitorPlugin.start({appKey:appToken, agentConfiguration:agentConfig}) ``` + + + Enable or disable offline data storage when no internet connection is available. + + + + Offline storage is Enabled by default. To disable it, add the following feature flag: + + ```typescript + offlineStorageEnabled:false + ``` + + @@ -1211,6 +1225,7 @@ cordova plugin add https://github.com/newrelic/newrelic-cordova-plugin.git --variable IOS_APP_TOKEN="{ios-app-token}" --variable ANDROID_APP_TOKEN="{android-app-token}" --variable CRASH_REPORTING_ENABLED="false" +--variable OFFLINE_STORAGE_ENABLED="false" ``` ## Available configurations [#configurations] @@ -1360,6 +1375,18 @@ cordova plugin add https://github.com/newrelic/newrelic-cordova-plugin.git ``` + + + Enable or disable offline data storage when no internet connection is available. + + + Offline storage is Enabled by default. To disable it, add the following feature flag: + + ```typescript + FEDRAMP_ENABLED = "false" + ``` + + @@ -1385,8 +1412,8 @@ Here's a sample configuration: CrossNewRelic.Current.TrackShellNavigatedEvents(); // Set optional agent configuration - // Options are: crashReportingEnabled, loggingEnabled, logLevel, collectorAddress, crashCollectorAddress,analyticsEventEnabled, networkErrorRequestEnabled, networkRequestEnabled, interactionTracingEnabled,webViewInstrumentation, fedRampEnabled - AgentStartConfiguration agentConfig = new AgentStartConfiguration(crashReportingEnabled:false); + // Options are: crashReportingEnabled, loggingEnabled, logLevel, collectorAddress, crashCollectorAddress,analyticsEventEnabled, networkErrorRequestEnabled, networkRequestEnabled, interactionTracingEnabled,webViewInstrumentation, fedRampEnabled,offlineStorageEnabled + AgentStartConfiguration agentConfig = new AgentStartConfiguration(crashReportingEnabled:false,offlineStorageEnabled:false); if (DeviceInfo.Current.Platform == DevicePlatform.Android) { @@ -1535,6 +1562,18 @@ Here's a sample configuration: crashCollectorAddress: "crash-upload-delegate.domain.com" ``` + + + + Enable or disable offline data storage when no internet connection is available. + + + Offline storage is Enabled by default. To disable it, add the following feature flag: + + ```csharp + offlineStorageEnabled:false + ``` + @@ -1565,7 +1604,8 @@ Config config = Config( loggingEnabled: false, webViewInstrumentation: false, printStatementAsEventsEnabled: false, - httpInstrumentationEnabled:false); + httpInstrumentationEnabled:false, + offlineStorageEnabled:true); // NewrelicMobile.instance.start(config, () { // runApp(MyApp()); @@ -1727,6 +1767,18 @@ runZonedGuarded(() async { sendConsoleEvents: true ``` + + + + Enable or disable offline data storage when no internet connection is available. + + + Offline storage is Enabled by default. To disable it, add the following feature flag: + + ```typescript + offlineStorageEnabled:false + ``` + @@ -1769,7 +1821,8 @@ import {Platform} from 'react-native'; collectorAddress: "", crashCollectorAddress: "", sendConsoleEvents: false, - fedRampEnabled: false + fedRampEnabled: false, + offlineStorageEnabled:false }; @@ -1934,6 +1987,18 @@ AppRegistry.registerComponent(appName, () => App); fedRampEnabled: false ``` + + + + Enable or disable offline data storage when no internet connection is available. + + + Offline storage is Enabled by default. To disable it, add the following feature flag: + + ```typescript + offlineStorageEnabled:false + ``` + @@ -1959,8 +2024,8 @@ public App () CrossNewRelicClient.Current.TrackShellNavigatedEvents(); // Set optional agent configuration - // Options are: crashReportingEnabled, loggingEnabled, logLevel, collectorAddress, crashCollectorAddress,analyticsEventEnabled, networkErrorRequestEnabled, networkRequestEnabled, interactionTracingEnabled,webViewInstrumentation, fedRampEnabled - AgentStartConfiguration agentConfig = new AgentStartConfiguration(crashReportingEnabled:false); + // Options are: crashReportingEnabled, loggingEnabled, logLevel, collectorAddress, crashCollectorAddress,analyticsEventEnabled, networkErrorRequestEnabled, networkRequestEnabled, interactionTracingEnabled,webViewInstrumentation, fedRampEnabled,offlineStorageEnabled + AgentStartConfiguration agentConfig = new AgentStartConfiguration(crashReportingEnabled:false,offlineStorageEnabled:false); if (Device.RuntimePlatform == Device.Android) { @@ -2106,6 +2171,18 @@ public App () ``` + + + Enable or disable offline data storage when no internet connection is available. + + + Offline storage is Enabled by default. To disable it, add the following feature flag: + + ```typescript + offlineStorageEnabled:false + ``` + + From e04cb9ab5682a9bd962de2e47212c76ce55ed7c7 Mon Sep 17 00:00:00 2001 From: ndesai-newrelic <89222514+ndesai-newrelic@users.noreply.github.com> Date: Tue, 12 Mar 2024 15:11:09 -0500 Subject: [PATCH 046/124] Update src/content/docs/mobile-monitoring/new-relic-mobile/mobile-sdk/configure-settings.mdx Co-authored-by: ally sassman <42753584+ally-sassman@users.noreply.github.com> --- .../new-relic-mobile/mobile-sdk/configure-settings.mdx | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/content/docs/mobile-monitoring/new-relic-mobile/mobile-sdk/configure-settings.mdx b/src/content/docs/mobile-monitoring/new-relic-mobile/mobile-sdk/configure-settings.mdx index ade01cd2138..f1c480c2940 100644 --- a/src/content/docs/mobile-monitoring/new-relic-mobile/mobile-sdk/configure-settings.mdx +++ b/src/content/docs/mobile-monitoring/new-relic-mobile/mobile-sdk/configure-settings.mdx @@ -1029,7 +1029,7 @@ let agentConfig : AgentConfiguration = { crashCollectorAddress: "", sendConsoleEvents: false, fedRampEnabled: false, - offlineStorageEnabled:false + offlineStorageEnabled: false } NewRelicCapacitorPlugin.start({appKey:appToken, agentConfiguration:agentConfig}) From dec3226e4ebe7c2e5e2632a8bb331d2f98eedb20 Mon Sep 17 00:00:00 2001 From: ndesai-newrelic <89222514+ndesai-newrelic@users.noreply.github.com> Date: Tue, 12 Mar 2024 15:11:14 -0500 Subject: [PATCH 047/124] Update src/content/docs/mobile-monitoring/new-relic-mobile/mobile-sdk/configure-settings.mdx Co-authored-by: ally sassman <42753584+ally-sassman@users.noreply.github.com> --- .../new-relic-mobile/mobile-sdk/configure-settings.mdx | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/content/docs/mobile-monitoring/new-relic-mobile/mobile-sdk/configure-settings.mdx b/src/content/docs/mobile-monitoring/new-relic-mobile/mobile-sdk/configure-settings.mdx index f1c480c2940..91fb4dd80a3 100644 --- a/src/content/docs/mobile-monitoring/new-relic-mobile/mobile-sdk/configure-settings.mdx +++ b/src/content/docs/mobile-monitoring/new-relic-mobile/mobile-sdk/configure-settings.mdx @@ -1200,7 +1200,7 @@ NewRelicCapacitorPlugin.start({appKey:appToken, agentConfiguration:agentConfig}) - Offline storage is Enabled by default. To disable it, add the following feature flag: + Offline storage is enabled by default. To disable it, add the following feature flag: ```typescript offlineStorageEnabled:false From 4e18c8baa01887f8f860cb2d3228314f5f6980f1 Mon Sep 17 00:00:00 2001 From: ndesai-newrelic <89222514+ndesai-newrelic@users.noreply.github.com> Date: Tue, 12 Mar 2024 15:11:39 -0500 Subject: [PATCH 048/124] Update src/content/docs/mobile-monitoring/new-relic-mobile-cordova-phonegap/get-started-with-cordova-monitoring.mdx Co-authored-by: ally sassman <42753584+ally-sassman@users.noreply.github.com> --- .../get-started-with-cordova-monitoring.mdx | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/content/docs/mobile-monitoring/new-relic-mobile-cordova-phonegap/get-started-with-cordova-monitoring.mdx b/src/content/docs/mobile-monitoring/new-relic-mobile-cordova-phonegap/get-started-with-cordova-monitoring.mdx index 04858028a4e..3cc6c926cd4 100644 --- a/src/content/docs/mobile-monitoring/new-relic-mobile-cordova-phonegap/get-started-with-cordova-monitoring.mdx +++ b/src/content/docs/mobile-monitoring/new-relic-mobile-cordova-phonegap/get-started-with-cordova-monitoring.mdx @@ -86,7 +86,7 @@ Add the following optional configurations to the `--variable` argument, which wi * `CRASH_COLLECTOR_ADDRESS`: Specifies the authority component of the crash data upload URI. * `FEDRAMP_ENABLED`: Enable or disable reporting data using different endpoints for US government clients. * Possible values are `true` and `false`. Defaults to `false`. -* `OFFLINE_STORAGE_ENABLED`: Enable or disable offline data storage when no internet connection is available. . +* `OFFLINE_STORAGE_ENABLED`: Enable or disable offline data storage when no internet connection is available. * Possible values are true and false. Defaults to true. These options are only available on Cordova agent v6.2.1 and higher. From fc2a3964967f0474fb98662871f218e29f23b343 Mon Sep 17 00:00:00 2001 From: a-sassman Date: Tue, 12 Mar 2024 13:23:50 -0700 Subject: [PATCH 049/124] chore(mobile): add links to SDK page --- .../mobile-sdk/configure-settings.mdx | 24 +++++++++---------- 1 file changed, 12 insertions(+), 12 deletions(-) diff --git a/src/content/docs/mobile-monitoring/new-relic-mobile/mobile-sdk/configure-settings.mdx b/src/content/docs/mobile-monitoring/new-relic-mobile/mobile-sdk/configure-settings.mdx index 91fb4dd80a3..3e2f2ef64cd 100644 --- a/src/content/docs/mobile-monitoring/new-relic-mobile/mobile-sdk/configure-settings.mdx +++ b/src/content/docs/mobile-monitoring/new-relic-mobile/mobile-sdk/configure-settings.mdx @@ -1196,11 +1196,11 @@ NewRelicCapacitorPlugin.start({appKey:appToken, agentConfiguration:agentConfig}) - Enable or disable offline data storage when no internet connection is available. + Enable or disable offline data storage when no internet connection is available. To configure the amount of offline storage, see [Set max offline storage size](/docs/mobile-monitoring/new-relic-mobile/mobile-sdk/set-max-offline-storage/#capacitor). - Offline storage is enabled by default. To disable it, add the following feature flag: + Offline storage is enabled by default. To disable it, add the following feature flag: ```typescript offlineStorageEnabled:false @@ -1377,10 +1377,10 @@ cordova plugin add https://github.com/newrelic/newrelic-cordova-plugin.git - Enable or disable offline data storage when no internet connection is available. + Enable or disable offline data storage when no internet connection is available. To configure the amount of offline storage, see [Set max offline storage size](/docs/mobile-monitoring/new-relic-mobile/mobile-sdk/set-max-offline-storage/#cordova). - Offline storage is Enabled by default. To disable it, add the following feature flag: + Offline storage is enabled by default. To disable it, add the following feature flag: ```typescript FEDRAMP_ENABLED = "false" @@ -1565,10 +1565,10 @@ Here's a sample configuration: - Enable or disable offline data storage when no internet connection is available. + Enable or disable offline data storage when no internet connection is available. To configure the amount of offline storage, see [Set max offline storage size](/docs/mobile-monitoring/new-relic-mobile/mobile-sdk/set-max-offline-storage/#maui). - Offline storage is Enabled by default. To disable it, add the following feature flag: + Offline storage is enabled by default. To disable it, add the following feature flag: ```csharp offlineStorageEnabled:false @@ -1770,10 +1770,10 @@ runZonedGuarded(() async { - Enable or disable offline data storage when no internet connection is available. + Enable or disable offline data storage when no internet connection is available. To configure the amount of offline storage, see [Set max offline storage size](/docs/mobile-monitoring/new-relic-mobile/mobile-sdk/set-max-offline-storage/#flutter). - Offline storage is Enabled by default. To disable it, add the following feature flag: + Offline storage is enabled by default. To disable it, add the following feature flag: ```typescript offlineStorageEnabled:false @@ -1990,10 +1990,10 @@ AppRegistry.registerComponent(appName, () => App); - Enable or disable offline data storage when no internet connection is available. + Enable or disable offline data storage when no internet connection is available. To configure the amount of offline storage, see [Set max offline storage size](/docs/mobile-monitoring/new-relic-mobile/mobile-sdk/set-max-offline-storage/#react). - Offline storage is Enabled by default. To disable it, add the following feature flag: + Offline storage is enabled by default. To disable it, add the following feature flag: ```typescript offlineStorageEnabled:false @@ -2173,10 +2173,10 @@ public App () - Enable or disable offline data storage when no internet connection is available. + Enable or disable offline data storage when no internet connection is available. To configure the amount of offline storage, see [Set max offline storage size](/docs/mobile-monitoring/new-relic-mobile/mobile-sdk/set-max-offline-storage/#xamarin). - Offline storage is Enabled by default. To disable it, add the following feature flag: + Offline storage is enabled by default. To disable it, add the following feature flag: ```typescript offlineStorageEnabled:false From b4eef0524ef00763c94eeb1b6a1f9bcc789be3d2 Mon Sep 17 00:00:00 2001 From: Keegan Mullaney Date: Tue, 12 Mar 2024 13:56:42 -0700 Subject: [PATCH 050/124] align wording with synthetics job manager Wording of `custom npm modules` should be changed to `custom node modules`, which makes more sense and is how this feature is referred to in SJM docs. Also update `npm modules` to `hosted modules` which makes more sense in the context of `local` versus `hosted` modules. --- ...ontainerized-private-minion-cpm-configuration.mdx | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) diff --git a/src/content/docs/synthetics/synthetic-monitoring/private-locations/containerized-private-minion-cpm-configuration.mdx b/src/content/docs/synthetics/synthetic-monitoring/private-locations/containerized-private-minion-cpm-configuration.mdx index aeb1d4952a2..7a04c7fef54 100644 --- a/src/content/docs/synthetics/synthetic-monitoring/private-locations/containerized-private-minion-cpm-configuration.mdx +++ b/src/content/docs/synthetics/synthetic-monitoring/private-locations/containerized-private-minion-cpm-configuration.mdx @@ -38,9 +38,9 @@ All directories and files **must** be assigned * Each PV must have a separate copy of the directories. For example, a cluster with _n_ Minion replicas must have _n_ PVs, each with their own copy of directories * The directories and files must be added prior to the Minion boot up, otherwise the Minion must be restarted to detect the updates -## Custom npm modules [#custom-modules] +## Custom node modules [#custom-modules] -Custom npm modules are exclusive to the CPM. They allow you to provide an arbitrary set of [npm modules](https://docs.npmjs.com/about-packages-and-modules), and make them available for scripted monitors in synthetic monitoring. +Custom node modules are exclusive to the CPM. They allow you to provide an arbitrary set of [node modules](https://docs.npmjs.com/about-packages-and-modules), and make them available for scripted monitors in synthetic monitoring. To set up the modules: @@ -63,7 +63,7 @@ To set up the modules: └── package.json ⇦ the only mandatory file ``` - The `package.json` defines `dependencies` as both a local module (for example, `counter`) and an npm hosted modules (for example, `async` version `^2.6.1`): + The `package.json` defines `dependencies` as both a local module (for example, `counter`) and any hosted modules (for example, `async` version `^2.6.1`): ``` { @@ -71,8 +71,8 @@ To set up the modules: "version": "1.0.0", ⇦ optional "description": "example custom modules directory", ⇦ optional "dependencies": { - "async": "^2.6.1", ⇦ npm hosted module - "counter": "file:./counter" ⇦ Local module + "async": "^2.6.1", ⇦ hosted module + "counter": "file:./counter" ⇦ local module } } ``` @@ -138,7 +138,7 @@ Now you can add `"require('async');"` into the [script](/docs/synthetics/new-rel ### Change `package.json` for custom modules [#change-package-json] -Along with npm modules, you can also use [Node.js modules](/docs/synthetics/new-relic-synthetics/scripting-monitors/import-nodejs-modules). To change the custom modules used by your CPM, modify `package.json` and reboot the CPM. It will detect the change in configuration during the reboot, and then clean up and re-install. +Along with hosted modules, you can also use [Node.js modules](/docs/synthetics/new-relic-synthetics/scripting-monitors/import-nodejs-modules). To change the custom modules used by your CPM, modify `package.json` and reboot the CPM. It will detect the change in configuration during the reboot, and then clean up and re-install. Local modules: While your `package.json` can include any local module, these modules must reside inside the tree under your custom module directory. If stored outside the tree, the initialization process will fail and you will see an error message in the [docker logs](/docs/synthetics/new-relic-synthetics/private-locations/containerized-private-minion-cpm-maintenance-monitoring#monitor-docker-logs) after launching CPM. From 16a737e4a39e6bc282b6db2774b9740fb5bdd429 Mon Sep 17 00:00:00 2001 From: a-sassman Date: Tue, 12 Mar 2024 15:21:26 -0700 Subject: [PATCH 051/124] chore(mobile): add tab for Unity content on settings page --- .../mobile-sdk/configure-settings.mdx | 185 ++++++++++++++++++ 1 file changed, 185 insertions(+) diff --git a/src/content/docs/mobile-monitoring/new-relic-mobile/mobile-sdk/configure-settings.mdx b/src/content/docs/mobile-monitoring/new-relic-mobile/mobile-sdk/configure-settings.mdx index 3e2f2ef64cd..8b5ae2013ba 100644 --- a/src/content/docs/mobile-monitoring/new-relic-mobile/mobile-sdk/configure-settings.mdx +++ b/src/content/docs/mobile-monitoring/new-relic-mobile/mobile-sdk/configure-settings.mdx @@ -2187,5 +2187,190 @@ public App () + + + +The Unity agent SDK allows you to configure default settings to change the behavior of the agent. + +If you make any changes to the default settings, make sure to add the feature flags just after calling `appToken`. + +Here's a sample configuration: + +```csharp +public App () + { + InitializeComponent(); + + MainPage = new MainPage(); + Application.Current.PageAppearing += OnPageAppearing; + Application.Current.PageDisappearing += PageDisappearing; + + CrossNewRelicClient.Current.HandleUncaughtException(); + CrossNewRelicClient.Current.TrackShellNavigatedEvents(); + + // Set optional agent configuration + // Options are: crashReportingEnabled, loggingEnabled, logLevel, collectorAddress, crashCollectorAddress,analyticsEventEnabled, networkErrorRequestEnabled, networkRequestEnabled, interactionTracingEnabled,webViewInstrumentation, fedRampEnabled,offlineStorageEnabled + AgentStartConfiguration agentConfig = new AgentStartConfiguration(crashReportingEnabled:false,offlineStorageEnabled:false); + + if (Device.RuntimePlatform == Device.Android) + { + //CrossNewRelicClient.Current.Start(""); + // Start with optional agent configuration + CrossNewRelicClient.Current.Start(""); + // Start with optional agent configuration + CrossNewRelicClient.Current.Start(" + + + + Description + + + Example + + + + + + + (Android only) Enable or disable collection of event data. + + + ```csharp + analyticsEventEnabled: true + ``` + + + + + Enable or disable crash reporting. + + + ```csharp + crashReportingEnabled: true + ``` + + + + + Enable or disable agent logging. + + + ```csharp + loggingEnabled: true + ``` + + + + + Enable or disable reporting successful HTTP requests to the `MobileRequest` event type. + + + ```csharp + networkRequestEnabled: true + ``` + + + + + + Enable or disable reporting network and HTTP request errors to the `MobileRequestError` event type. + + + ```csharp + networkErrorRequestEnabled: true + ``` + + + + + Specifies the log level. Omit this field for the default log level. + + Options include: `ERROR` (least verbose), `WARNING`, `INFO`, `VERBOSE`, `AUDIT` (most verbose). + + + ```csharp + logLevel: NREnums.LogLevel.INFO + ``` + + + + + Set a specific collector address for sending data. Omit this field for default address. + + + ```csharp + collectorAddress: "crash-upload-delegate.domain.com" + ``` + + + + + + Set a specific crash collector address for sending crashes. Omit this field for default address. + + + ```csharp + crashCollectorAddress: "crash-upload-delegate.domain.com" + ``` + + + + + Enable or disable interaction tracing. Trace instrumentation still occurs, but no traces are harvested. This will disable default and custom interactions. by default false + + + ```csharp + interactionTracingEnabled: false + ``` + + + + + Enable/Disable automatic instrumentation of WebViews. + + + ```csharp + webViewInstrumentation: false + ``` + + + + + Enable or disable reporting data using different endpoints for US government clients. + + + ```csharp + fedRampEnabled: false + ``` + + + + + Enable or disable offline data storage when no internet connection is available. To configure the amount of offline storage, see [Set max offline storage size](/docs/mobile-monitoring/new-relic-mobile/mobile-sdk/set-max-offline-storage/#unity). + + + Offline storage is enabled by default. To disable it, add the following feature flag: + + ```typescript + offlineStorageEnabled:false + ``` + + + + + + From c899131c27debdf6d91a5991a0660eb7ef8d373b Mon Sep 17 00:00:00 2001 From: ndesai-newrelic <89222514+ndesai-newrelic@users.noreply.github.com> Date: Tue, 12 Mar 2024 18:52:16 -0500 Subject: [PATCH 052/124] Update src/content/docs/mobile-monitoring/new-relic-mobile/mobile-sdk/configure-settings.mdx Co-authored-by: ally sassman <42753584+ally-sassman@users.noreply.github.com> --- .../new-relic-mobile/mobile-sdk/configure-settings.mdx | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/content/docs/mobile-monitoring/new-relic-mobile/mobile-sdk/configure-settings.mdx b/src/content/docs/mobile-monitoring/new-relic-mobile/mobile-sdk/configure-settings.mdx index 8b5ae2013ba..214708a265c 100644 --- a/src/content/docs/mobile-monitoring/new-relic-mobile/mobile-sdk/configure-settings.mdx +++ b/src/content/docs/mobile-monitoring/new-relic-mobile/mobile-sdk/configure-settings.mdx @@ -1412,7 +1412,7 @@ Here's a sample configuration: CrossNewRelic.Current.TrackShellNavigatedEvents(); // Set optional agent configuration - // Options are: crashReportingEnabled, loggingEnabled, logLevel, collectorAddress, crashCollectorAddress,analyticsEventEnabled, networkErrorRequestEnabled, networkRequestEnabled, interactionTracingEnabled,webViewInstrumentation, fedRampEnabled,offlineStorageEnabled + // Options are: crashReportingEnabled, loggingEnabled, logLevel, collectorAddress, crashCollectorAddress,analyticsEventEnabled, networkErrorRequestEnabled, networkRequestEnabled, interactionTracingEnabled,webViewInstrumentation, fedRampEnabled, offlineStorageEnabled AgentStartConfiguration agentConfig = new AgentStartConfiguration(crashReportingEnabled:false,offlineStorageEnabled:false); if (DeviceInfo.Current.Platform == DevicePlatform.Android) From a469876ab6d68908fea068025c586a3a614d6519 Mon Sep 17 00:00:00 2001 From: ndesai-newrelic <89222514+ndesai-newrelic@users.noreply.github.com> Date: Tue, 12 Mar 2024 18:52:23 -0500 Subject: [PATCH 053/124] Update src/content/docs/mobile-monitoring/new-relic-mobile/mobile-sdk/configure-settings.mdx Co-authored-by: ally sassman <42753584+ally-sassman@users.noreply.github.com> --- .../new-relic-mobile/mobile-sdk/configure-settings.mdx | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/content/docs/mobile-monitoring/new-relic-mobile/mobile-sdk/configure-settings.mdx b/src/content/docs/mobile-monitoring/new-relic-mobile/mobile-sdk/configure-settings.mdx index 214708a265c..9a6d09bde60 100644 --- a/src/content/docs/mobile-monitoring/new-relic-mobile/mobile-sdk/configure-settings.mdx +++ b/src/content/docs/mobile-monitoring/new-relic-mobile/mobile-sdk/configure-settings.mdx @@ -2024,7 +2024,7 @@ public App () CrossNewRelicClient.Current.TrackShellNavigatedEvents(); // Set optional agent configuration - // Options are: crashReportingEnabled, loggingEnabled, logLevel, collectorAddress, crashCollectorAddress,analyticsEventEnabled, networkErrorRequestEnabled, networkRequestEnabled, interactionTracingEnabled,webViewInstrumentation, fedRampEnabled,offlineStorageEnabled + // Options are: crashReportingEnabled, loggingEnabled, logLevel, collectorAddress, crashCollectorAddress,analyticsEventEnabled, networkErrorRequestEnabled, networkRequestEnabled, interactionTracingEnabled,webViewInstrumentation, fedRampEnabled, offlineStorageEnabled AgentStartConfiguration agentConfig = new AgentStartConfiguration(crashReportingEnabled:false,offlineStorageEnabled:false); if (Device.RuntimePlatform == Device.Android) From 1dd0699c7735e13b3dcb91985ee12f1acc66780e Mon Sep 17 00:00:00 2001 From: ndesai-newrelic <89222514+ndesai-newrelic@users.noreply.github.com> Date: Tue, 12 Mar 2024 18:52:34 -0500 Subject: [PATCH 054/124] Update src/content/docs/release-notes/mobile-release-notes/react-native-release-notes/react-native-agent-136.mdx Co-authored-by: ally sassman <42753584+ally-sassman@users.noreply.github.com> --- .../react-native-release-notes/react-native-agent-136.mdx | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/content/docs/release-notes/mobile-release-notes/react-native-release-notes/react-native-agent-136.mdx b/src/content/docs/release-notes/mobile-release-notes/react-native-release-notes/react-native-agent-136.mdx index b595cb38947..495bcbd667a 100644 --- a/src/content/docs/release-notes/mobile-release-notes/react-native-release-notes/react-native-agent-136.mdx +++ b/src/content/docs/release-notes/mobile-release-notes/react-native-release-notes/react-native-agent-136.mdx @@ -8,7 +8,7 @@ downloadLink: 'https://www.npmjs.com/package/newrelic-react-native-agent/v/1.3.6 ## New in this release * Added offline harvesting feature: This new feature enables the preservation of harvest data that would otherwise be lost when the application lacks an internet connection. The stored harvests will be sent once the internet connection is re-established and the next harvest upload is successful. -* Introduced `setMaxOfflineStorageSize` API: This new API allows the user to determine the maximum volume of data that can be stored locally. This aids in better management and control of local data storage. +* Introduced [`setMaxOfflineStorageSize`](/docs/mobile-monitoring/new-relic-mobile/mobile-sdk/set-max-offline-storage/#react) API: This new API allows the user to determine the maximum volume of data that can be stored locally. This aids in better management and control of local data storage. * Updated native iOS agent: We've upgraded the native iOS agent to version 7.4.9, which includes performance improvements and bug fixes. * Updated native Android agent: We've also upgraded the native Android agent to version 7.3.0 bringing benefits like improved stability and enhanced features. * Added compatibility for Android dynamic features. From 7be392c030dd85d26c28834b10efd3d0312cde06 Mon Sep 17 00:00:00 2001 From: ndesai-newrelic <89222514+ndesai-newrelic@users.noreply.github.com> Date: Tue, 12 Mar 2024 18:52:41 -0500 Subject: [PATCH 055/124] Update src/content/docs/release-notes/mobile-release-notes/net-maui-release-notes/net-maui-agent-006.mdx Co-authored-by: ally sassman <42753584+ally-sassman@users.noreply.github.com> --- .../net-maui-release-notes/net-maui-agent-006.mdx | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/content/docs/release-notes/mobile-release-notes/net-maui-release-notes/net-maui-agent-006.mdx b/src/content/docs/release-notes/mobile-release-notes/net-maui-release-notes/net-maui-agent-006.mdx index 7d412649fd1..cfcc599715e 100644 --- a/src/content/docs/release-notes/mobile-release-notes/net-maui-release-notes/net-maui-agent-006.mdx +++ b/src/content/docs/release-notes/mobile-release-notes/net-maui-release-notes/net-maui-agent-006.mdx @@ -8,6 +8,6 @@ downloadLink: 'https://www.nuget.org/packages/NewRelic.MAUI.Plugin' ## New in this release * Added offline harvesting feature: This new feature enables the preservation of harvest data that would otherwise be lost when the application lacks an internet connection. The stored harvests will be sent once the internet connection is re-established and the next harvest upload is successful. -* Introduced `setMaxOfflineStorageSize` API: This new API allows the user to determine the maximum volume of data that can be stored locally. This aids in better management and control of local data storage. +* Introduced [`setMaxOfflineStorageSize`](/docs/mobile-monitoring/new-relic-mobile/mobile-sdk/set-max-offline-storage/#maui) API: This new API allows the user to determine the maximum volume of data that can be stored locally. This aids in better management and control of local data storage. * Updated native iOS agent: We've upgraded the native iOS agent to version 7.4.9, which includes performance improvements and bug fixes. * Updated native Android agent: We've also upgraded the native Android agent to version 7.3.0 bringing benefits like improved stability and enhanced features. From 7720e0c5ebcec0de13028b346b38599cce70b44d Mon Sep 17 00:00:00 2001 From: ndesai-newrelic <89222514+ndesai-newrelic@users.noreply.github.com> Date: Tue, 12 Mar 2024 18:52:49 -0500 Subject: [PATCH 056/124] Update src/content/docs/release-notes/mobile-release-notes/flutter-release-notes/flutter-agent-107.mdx Co-authored-by: ally sassman <42753584+ally-sassman@users.noreply.github.com> --- .../flutter-release-notes/flutter-agent-107.mdx | 1 + 1 file changed, 1 insertion(+) diff --git a/src/content/docs/release-notes/mobile-release-notes/flutter-release-notes/flutter-agent-107.mdx b/src/content/docs/release-notes/mobile-release-notes/flutter-release-notes/flutter-agent-107.mdx index a6b0c2e2548..4db676a905a 100644 --- a/src/content/docs/release-notes/mobile-release-notes/flutter-release-notes/flutter-agent-107.mdx +++ b/src/content/docs/release-notes/mobile-release-notes/flutter-release-notes/flutter-agent-107.mdx @@ -7,6 +7,7 @@ downloadLink: 'https://pub.dev/packages/newrelic_mobile/versions/1.0.6' ## New in this release +* Introduced [`setMaxOfflineStorageSize`](/docs/mobile-monitoring/new-relic-mobile/mobile-sdk/set-max-offline-storage/#flutter) API: This new API allows the user to determine the maximum volume of data that can be stored locally. This aids in better management and control of local data storage. * Added the ability to store harvest data that previously would be lost if the application doesn't have internet connection. These harvest are then sent after an internet connection is established and the next harvest successfully uploads. This feature is enabled by default. * Updated the native Android agent to version 7.3.0. * Updated the native iOS agent to version 7.4.9. From 12da382638c345e244af06e7c9dca417f1e7af10 Mon Sep 17 00:00:00 2001 From: ndesai-newrelic <89222514+ndesai-newrelic@users.noreply.github.com> Date: Tue, 12 Mar 2024 18:52:59 -0500 Subject: [PATCH 057/124] Update src/content/docs/release-notes/mobile-release-notes/capacitor-release-notes/capacitor-agent-136.mdx Co-authored-by: ally sassman <42753584+ally-sassman@users.noreply.github.com> --- .../capacitor-release-notes/capacitor-agent-136.mdx | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/content/docs/release-notes/mobile-release-notes/capacitor-release-notes/capacitor-agent-136.mdx b/src/content/docs/release-notes/mobile-release-notes/capacitor-release-notes/capacitor-agent-136.mdx index a5bbe98d9a2..5d815d4ace0 100644 --- a/src/content/docs/release-notes/mobile-release-notes/capacitor-release-notes/capacitor-agent-136.mdx +++ b/src/content/docs/release-notes/mobile-release-notes/capacitor-release-notes/capacitor-agent-136.mdx @@ -8,7 +8,7 @@ downloadLink: 'https://www.npmjs.com/package/@newrelic/newrelic-capacitor-plugin ## New in this release * Added offline harvesting feature: This new feature enables the preservation of harvest data that would otherwise be lost when the application lacks an internet connection. The stored harvests will be sent once the internet connection is re-established and the next harvest upload is successful. -* Introduced `setMaxOfflineStorageSize` API: This new API allows the user to determine the maximum volume of data that can be stored locally. This aids in better management and control of local data storage. +* Introduced [`setMaxOfflineStorageSize`]([`setMaxOfflineStorageSize`](/docs/mobile-monitoring/new-relic-mobile/mobile-sdk/set-max-offline-storage/#capacitor) API: This new API allows the user to determine the maximum volume of data that can be stored locally. This aids in better management and control of local data storage. * Updated native iOS agent: We've upgraded the native iOS agent to version 7.4.9, which includes performance improvements and bug fixes. * Updated native Android agent: We've also upgraded the native Android agent to version 7.3.0 bringing benefits like improved stability and enhanced features. * Resolved an issue in the fetch instrumentation where the absence of a body led to failure in recording network requests by the agent. From bbd47e46754d5c102b90d5661840845259184381 Mon Sep 17 00:00:00 2001 From: ndesai-newrelic <89222514+ndesai-newrelic@users.noreply.github.com> Date: Tue, 12 Mar 2024 18:53:06 -0500 Subject: [PATCH 058/124] Update src/content/docs/release-notes/mobile-release-notes/cordova-release-notes/cordova-agent-627.mdx Co-authored-by: ally sassman <42753584+ally-sassman@users.noreply.github.com> --- .../cordova-release-notes/cordova-agent-627.mdx | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/content/docs/release-notes/mobile-release-notes/cordova-release-notes/cordova-agent-627.mdx b/src/content/docs/release-notes/mobile-release-notes/cordova-release-notes/cordova-agent-627.mdx index cf7a8abc78b..68d4ea4b858 100644 --- a/src/content/docs/release-notes/mobile-release-notes/cordova-release-notes/cordova-agent-627.mdx +++ b/src/content/docs/release-notes/mobile-release-notes/cordova-release-notes/cordova-agent-627.mdx @@ -8,7 +8,7 @@ downloadLink: 'https://github.com/newrelic/newrelic-cordova-plugin' ## New in this release * Added offline harvesting feature: This new feature enables the preservation of harvest data that would otherwise be lost when the application lacks an internet connection. The stored harvests will be sent once the internet connection is re-established and the next harvest upload is successful. -* Introduced `setMaxOfflineStorageSize` API: This new API allows the user to determine the maximum volume of data that can be stored locally. This aids in better management and control of local data storage. +* Introduced [`setMaxOfflineStorageSize`](/docs/mobile-monitoring/new-relic-mobile/mobile-sdk/set-max-offline-storage/#cordova) API: This new API allows the user to determine the maximum volume of data that can be stored locally. This aids in better management and control of local data storage. * Updated native iOS agent: We've upgraded the native iOS agent to version 7.4.9, which includes performance improvements and bug fixes. * Updated native Android agent: We've also upgraded the native Android agent to version 7.3.0 bringing benefits like improved stability and enhanced features. * Resolved an issue in the fetch instrumentation where the absence of a body led to failure in recording network requests by the agent. From b955e7d4559d23a183c2cf4ceef0b9ef3c9da8cd Mon Sep 17 00:00:00 2001 From: ndesai-newrelic <89222514+ndesai-newrelic@users.noreply.github.com> Date: Tue, 12 Mar 2024 18:53:13 -0500 Subject: [PATCH 059/124] Update src/content/docs/mobile-monitoring/new-relic-mobile/mobile-sdk/configure-settings.mdx Co-authored-by: ally sassman <42753584+ally-sassman@users.noreply.github.com> --- .../new-relic-mobile/mobile-sdk/configure-settings.mdx | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/content/docs/mobile-monitoring/new-relic-mobile/mobile-sdk/configure-settings.mdx b/src/content/docs/mobile-monitoring/new-relic-mobile/mobile-sdk/configure-settings.mdx index 9a6d09bde60..6d290ee0126 100644 --- a/src/content/docs/mobile-monitoring/new-relic-mobile/mobile-sdk/configure-settings.mdx +++ b/src/content/docs/mobile-monitoring/new-relic-mobile/mobile-sdk/configure-settings.mdx @@ -2025,7 +2025,7 @@ public App () // Set optional agent configuration // Options are: crashReportingEnabled, loggingEnabled, logLevel, collectorAddress, crashCollectorAddress,analyticsEventEnabled, networkErrorRequestEnabled, networkRequestEnabled, interactionTracingEnabled,webViewInstrumentation, fedRampEnabled, offlineStorageEnabled - AgentStartConfiguration agentConfig = new AgentStartConfiguration(crashReportingEnabled:false,offlineStorageEnabled:false); + AgentStartConfiguration agentConfig = new AgentStartConfiguration(crashReportingEnabled: false, offlineStorageEnabled: false); if (Device.RuntimePlatform == Device.Android) { From 7dc9601b8ee0342dfea5fc66708b30f2529755c7 Mon Sep 17 00:00:00 2001 From: ndesai-newrelic <89222514+ndesai-newrelic@users.noreply.github.com> Date: Tue, 12 Mar 2024 18:53:20 -0500 Subject: [PATCH 060/124] Update src/content/docs/mobile-monitoring/new-relic-mobile/mobile-sdk/configure-settings.mdx Co-authored-by: ally sassman <42753584+ally-sassman@users.noreply.github.com> --- .../new-relic-mobile/mobile-sdk/configure-settings.mdx | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/content/docs/mobile-monitoring/new-relic-mobile/mobile-sdk/configure-settings.mdx b/src/content/docs/mobile-monitoring/new-relic-mobile/mobile-sdk/configure-settings.mdx index 6d290ee0126..8157acc641c 100644 --- a/src/content/docs/mobile-monitoring/new-relic-mobile/mobile-sdk/configure-settings.mdx +++ b/src/content/docs/mobile-monitoring/new-relic-mobile/mobile-sdk/configure-settings.mdx @@ -1996,7 +1996,7 @@ AppRegistry.registerComponent(appName, () => App); Offline storage is enabled by default. To disable it, add the following feature flag: ```typescript - offlineStorageEnabled:false + offlineStorageEnabled: false ``` From ae21a3c93e364fde116e4bb159250bb7f0a7f799 Mon Sep 17 00:00:00 2001 From: ndesai-newrelic <89222514+ndesai-newrelic@users.noreply.github.com> Date: Tue, 12 Mar 2024 18:53:27 -0500 Subject: [PATCH 061/124] Update src/content/docs/mobile-monitoring/new-relic-mobile/mobile-sdk/configure-settings.mdx Co-authored-by: ally sassman <42753584+ally-sassman@users.noreply.github.com> --- .../new-relic-mobile/mobile-sdk/configure-settings.mdx | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/content/docs/mobile-monitoring/new-relic-mobile/mobile-sdk/configure-settings.mdx b/src/content/docs/mobile-monitoring/new-relic-mobile/mobile-sdk/configure-settings.mdx index 8157acc641c..910943e02ff 100644 --- a/src/content/docs/mobile-monitoring/new-relic-mobile/mobile-sdk/configure-settings.mdx +++ b/src/content/docs/mobile-monitoring/new-relic-mobile/mobile-sdk/configure-settings.mdx @@ -1776,7 +1776,7 @@ runZonedGuarded(() async { Offline storage is enabled by default. To disable it, add the following feature flag: ```typescript - offlineStorageEnabled:false + offlineStorageEnabled: false ``` From d34e73d88f7e6605551e92f7078f68dfce572b04 Mon Sep 17 00:00:00 2001 From: ndesai-newrelic <89222514+ndesai-newrelic@users.noreply.github.com> Date: Tue, 12 Mar 2024 18:53:35 -0500 Subject: [PATCH 062/124] Update src/content/docs/mobile-monitoring/new-relic-mobile/mobile-sdk/configure-settings.mdx Co-authored-by: ally sassman <42753584+ally-sassman@users.noreply.github.com> --- .../new-relic-mobile/mobile-sdk/configure-settings.mdx | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/content/docs/mobile-monitoring/new-relic-mobile/mobile-sdk/configure-settings.mdx b/src/content/docs/mobile-monitoring/new-relic-mobile/mobile-sdk/configure-settings.mdx index 910943e02ff..00afa82b1da 100644 --- a/src/content/docs/mobile-monitoring/new-relic-mobile/mobile-sdk/configure-settings.mdx +++ b/src/content/docs/mobile-monitoring/new-relic-mobile/mobile-sdk/configure-settings.mdx @@ -1604,8 +1604,8 @@ Config config = Config( loggingEnabled: false, webViewInstrumentation: false, printStatementAsEventsEnabled: false, - httpInstrumentationEnabled:false, - offlineStorageEnabled:true); + httpInstrumentationEnabled: false, + offlineStorageEnabled: true); // NewrelicMobile.instance.start(config, () { // runApp(MyApp()); From 36cfce94222b4ab675f0a30a02a42a9a7bfc3b36 Mon Sep 17 00:00:00 2001 From: ndesai-newrelic <89222514+ndesai-newrelic@users.noreply.github.com> Date: Tue, 12 Mar 2024 18:53:42 -0500 Subject: [PATCH 063/124] Update src/content/docs/mobile-monitoring/new-relic-mobile/mobile-sdk/configure-settings.mdx Co-authored-by: ally sassman <42753584+ally-sassman@users.noreply.github.com> --- .../new-relic-mobile/mobile-sdk/configure-settings.mdx | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/content/docs/mobile-monitoring/new-relic-mobile/mobile-sdk/configure-settings.mdx b/src/content/docs/mobile-monitoring/new-relic-mobile/mobile-sdk/configure-settings.mdx index 00afa82b1da..837ca892c31 100644 --- a/src/content/docs/mobile-monitoring/new-relic-mobile/mobile-sdk/configure-settings.mdx +++ b/src/content/docs/mobile-monitoring/new-relic-mobile/mobile-sdk/configure-settings.mdx @@ -1571,7 +1571,7 @@ Here's a sample configuration: Offline storage is enabled by default. To disable it, add the following feature flag: ```csharp - offlineStorageEnabled:false + offlineStorageEnabled: false ``` From f3a99071c62b4aa40cf262bc75889bbcb199a595 Mon Sep 17 00:00:00 2001 From: ndesai-newrelic <89222514+ndesai-newrelic@users.noreply.github.com> Date: Tue, 12 Mar 2024 18:54:05 -0500 Subject: [PATCH 064/124] Update src/content/docs/mobile-monitoring/new-relic-mobile/mobile-sdk/configure-settings.mdx Co-authored-by: ally sassman <42753584+ally-sassman@users.noreply.github.com> --- .../new-relic-mobile/mobile-sdk/configure-settings.mdx | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/content/docs/mobile-monitoring/new-relic-mobile/mobile-sdk/configure-settings.mdx b/src/content/docs/mobile-monitoring/new-relic-mobile/mobile-sdk/configure-settings.mdx index 837ca892c31..63c70b30f96 100644 --- a/src/content/docs/mobile-monitoring/new-relic-mobile/mobile-sdk/configure-settings.mdx +++ b/src/content/docs/mobile-monitoring/new-relic-mobile/mobile-sdk/configure-settings.mdx @@ -1413,7 +1413,7 @@ Here's a sample configuration: // Set optional agent configuration // Options are: crashReportingEnabled, loggingEnabled, logLevel, collectorAddress, crashCollectorAddress,analyticsEventEnabled, networkErrorRequestEnabled, networkRequestEnabled, interactionTracingEnabled,webViewInstrumentation, fedRampEnabled, offlineStorageEnabled - AgentStartConfiguration agentConfig = new AgentStartConfiguration(crashReportingEnabled:false,offlineStorageEnabled:false); + AgentStartConfiguration agentConfig = new AgentStartConfiguration(crashReportingEnabled: false, offlineStorageEnabled: false); if (DeviceInfo.Current.Platform == DevicePlatform.Android) { From ea2073ce2a6edb560624295490352fdac38f2c54 Mon Sep 17 00:00:00 2001 From: nbaenam Date: Wed, 13 Mar 2024 13:24:59 +0100 Subject: [PATCH 065/124] feat(OHI rabbitmq): Added the install path options --- src/install/config/rabbitmq.yaml | 41 +++++++++++++++++-- src/install/rabbitmq/linux/install-apt.mdx | 14 +++++++ src/install/rabbitmq/linux/install-yum.mdx | 14 +++++++ src/install/rabbitmq/linux/install-zypper.mdx | 14 +++++++ src/install/rabbitmq/windows/install-msi.mdx | 10 +++++ 5 files changed, 90 insertions(+), 3 deletions(-) create mode 100644 src/install/rabbitmq/linux/install-apt.mdx create mode 100644 src/install/rabbitmq/linux/install-yum.mdx create mode 100644 src/install/rabbitmq/linux/install-zypper.mdx create mode 100644 src/install/rabbitmq/windows/install-msi.mdx diff --git a/src/install/config/rabbitmq.yaml b/src/install/config/rabbitmq.yaml index 3cdfa5d1743..69a3418dd2c 100644 --- a/src/install/config/rabbitmq.yaml +++ b/src/install/config/rabbitmq.yaml @@ -29,11 +29,26 @@ appInfo: - optionType: deployment label: "Choose your install path" placeholder: "Choose one:" - options: + options: + - value: "msi" + displayName: "Install using MSI files (Windows)" + logo: 'windows' + recommendedGuided: true + - value: "apt" + displayName: "Install using Apt (Debian, Ubuntu)" + recommendedGuided: true + - value: "yum" + logo: 'linux' + displayName: "Install using Yum (Amazon Linux, CentOS, RHEL)" + recommendedGuided: true + - value: "zypper" + displayName: "Install using Zypper (SLES)" + recommendedGuided: true + logo: 'linux' - value: "tar" displayName: "Install from tarball (Other Linux distros)" recommendedGuided: true - logo: 'linux' + logo: 'linux' steps: - filePath: 'src/install/rabbitmq/appInfo.mdx' @@ -55,13 +70,33 @@ steps: options: - value: 'ansible' - filePath: 'src/install/rabbitmq/install-infra.mdx' - - filePath: "src/install/rabbitmq/linux/install-tarball.mdx" + - filePath: "src/install/rabbitmq/linux/install-apt.mdx" overrides: + - filePath: "src/install/rabbitmq/linux/install-apt.mdx" + selectedOptions: + - optionType: deployment + options: + - value: "apt" - filePath: "src/install/rabbitmq/linux/install-tarball.mdx" selectedOptions: - optionType: deployment options: - value: "tar" + - filePath: "src/install/rabbitmq/linux/install-yum.mdx" + selectedOptions: + - optionType: deployment + options: + - value: "yum" + - filePath: "src/install/rabbitmq/linux/install-zypper.mdx" + selectedOptions: + - optionType: deployment + options: + - value: "zypper" + - filePath: "src/install/rabbitmq/windows/install-msi.mdx" + selectedOptions: + - optionType: deployment + options: + - value: "msi" - filePath: 'src/install/rabbitmq/linux/install-linux.mdx' overrides: - filePath: 'src/install/rabbitmq/linux/install-linux.mdx' diff --git a/src/install/rabbitmq/linux/install-apt.mdx b/src/install/rabbitmq/linux/install-apt.mdx new file mode 100644 index 00000000000..68126dadcc1 --- /dev/null +++ b/src/install/rabbitmq/linux/install-apt.mdx @@ -0,0 +1,14 @@ +--- +componentType: default +headingText: Download the RabbitMQ integration using APT +--- + +In your terminal, run these commands: + + ```shell + sudo apt-get update + ``` + + ```shell + sudo apt-get install nri-rabbitmq + ``` \ No newline at end of file diff --git a/src/install/rabbitmq/linux/install-yum.mdx b/src/install/rabbitmq/linux/install-yum.mdx new file mode 100644 index 00000000000..f274232f88e --- /dev/null +++ b/src/install/rabbitmq/linux/install-yum.mdx @@ -0,0 +1,14 @@ +--- +componentType: default +headingText: Download the RabbitMQ integration using Yum +--- + +In your terminal, run these commands: + + ```shell + sudo yum -q makecache -y --disablerepo='*' --enablerepo='newrelic-infra' + ``` + + ```shell + sudo yum install nri-rabbitmq + ``` \ No newline at end of file diff --git a/src/install/rabbitmq/linux/install-zypper.mdx b/src/install/rabbitmq/linux/install-zypper.mdx new file mode 100644 index 00000000000..053dc97b0bb --- /dev/null +++ b/src/install/rabbitmq/linux/install-zypper.mdx @@ -0,0 +1,14 @@ +--- +componentType: default +headingText: Download using Zypper +--- + +In your terminal, run these commands: + + ```shell + sudo zypper -n ref -r newrelic-infra + ``` + + ```shell + sudo zypper -n install nri-rabbitmq + ``` \ No newline at end of file diff --git a/src/install/rabbitmq/windows/install-msi.mdx b/src/install/rabbitmq/windows/install-msi.mdx new file mode 100644 index 00000000000..7d63824d6c0 --- /dev/null +++ b/src/install/rabbitmq/windows/install-msi.mdx @@ -0,0 +1,10 @@ +--- +componentType: default +headingText: Download using MSI +--- + +1. Download the latest .MSI installer image for the desired integration [from our repository](https://download.newrelic.com/infrastructure_agent/windows/integrations/). +2. In an admin account, run the install script using an absolute path. + ``` + msiexec.exe /qn /i PATH\TO\nri-rabbitmq-amd64.msi + ``` \ No newline at end of file From 070066fed6335f39ba4a7e9f661067b8c97d37f9 Mon Sep 17 00:00:00 2001 From: nbaenam Date: Wed, 13 Mar 2024 14:07:10 +0100 Subject: [PATCH 066/124] feat(OHI jmx): Added Bradley comments --- .../jmx-monitoring-install.mdx | 2 +- src/install/config/jmx.yaml | 37 +++++++++++++++++++ src/install/jmx/default-requirements.mdx | 2 +- src/install/jmx/find-data.mdx | 7 ++-- src/install/jmx/intro.mdx | 2 +- src/install/jmx/linux/install-apt.mdx | 14 +++++++ src/install/jmx/linux/install-tarball.mdx | 24 ++++++++++++ src/install/jmx/linux/install-yum.mdx | 14 +++++++ src/install/jmx/linux/install-zypper.mdx | 14 +++++++ 9 files changed, 109 insertions(+), 7 deletions(-) create mode 100644 src/install/jmx/linux/install-apt.mdx create mode 100644 src/install/jmx/linux/install-tarball.mdx create mode 100644 src/install/jmx/linux/install-yum.mdx create mode 100644 src/install/jmx/linux/install-zypper.mdx diff --git a/src/content/docs/infrastructure/host-integrations/host-integrations-list/jmx-monitoring-install.mdx b/src/content/docs/infrastructure/host-integrations/host-integrations-list/jmx-monitoring-install.mdx index d4e66743836..b3c787ef523 100644 --- a/src/content/docs/infrastructure/host-integrations/host-integrations-list/jmx-monitoring-install.mdx +++ b/src/content/docs/infrastructure/host-integrations/host-integrations-list/jmx-monitoring-install.mdx @@ -21,7 +21,7 @@ Our JMX [integration](/docs/integrations/host-integrations/getting-started/intro Before installing the integration, make sure that you meet the following requirements: * A New Relic account. Don't have one? [Sign up for free!](https://newrelic.com/signup) No credit card required. -* Java versions 8 or higher. +* Java version 8 or higher. * If you need to use a different Java version than the one configured in `PATH`, follow [New Relic's configuration documentation on GitHub](https://github.com/newrelic/nrjmx#configuring-java-version). * This integration does not support the IIOP protocol. diff --git a/src/install/config/jmx.yaml b/src/install/config/jmx.yaml index 09e6e02eec8..9ec427ee908 100644 --- a/src/install/config/jmx.yaml +++ b/src/install/config/jmx.yaml @@ -20,6 +20,21 @@ appInfo: - value: 'kubernetes' displayName: 'Kubernetes' logo: 'k8' + - optionType: deployment + label: 'Choose your install path' + placeholder: 'Choose one:' + options: + - value: 'apt' + displayName: 'Install using Apt (Debian, Ubuntu)' + - value: 'yum' + logo: 'linux' + displayName: 'Install using Yum (Amazon Linux, CentOS, RHEL)' + - value: 'zypper' + displayName: 'Install using Zypper (SLES)' + - value: 'tar' + displayName: 'Install from tarball (Other Linux distros)' + logo: 'linux' + steps: - filePath: 'src/install/jmx/guided.mdx' @@ -36,6 +51,28 @@ steps: options: - value: 'kubernetes' - filePath: 'src/install/jmx/install-infra.mdx' + - filePath: 'src/install/jmx/linux/install-apt.mdx' + overrides: + - filePath: 'src/install/jmx/linux/install-apt.mdx' + selectedOptions: + - optionType: deployment + options: + - value: 'apt' + - filePath: 'src/install/jmx/linux/install-yum.mdx' + selectedOptions: + - optionType: deployment + options: + - value: 'yum' + - filePath: 'src/install/jmx/linux/install-tarball.mdx' + selectedOptions: + - optionType: deployment + options: + - value: 'tar' + - filePath: 'src/install/jmx/linux/install-zypper.mdx' + selectedOptions: + - optionType: deployment + options: + - value: 'zypper' - filePath: 'src/install/jmx/linux/install-linux.mdx' overrides: - filePath: 'src/install/jmx/linux/install-linux.mdx' diff --git a/src/install/jmx/default-requirements.mdx b/src/install/jmx/default-requirements.mdx index cddca7f55de..350bcb6bdca 100644 --- a/src/install/jmx/default-requirements.mdx +++ b/src/install/jmx/default-requirements.mdx @@ -6,6 +6,6 @@ componentType: default Before installing the integration, make sure that you meet these requirements: * A New Relic account. Don't have one? [Sign up for free!](https://newrelic.com/signup) No credit card required. -* Java versions 8 or higher. +* Java version 8 or higher. * If you need to use a different Java version than the one configured in `PATH`, follow [New Relic's configuration documentation on GitHub](https://github.com/newrelic/nrjmx#configuring-java-version). * This integration doesn't support the IIOP protocol. diff --git a/src/install/jmx/find-data.mdx b/src/install/jmx/find-data.mdx index 28d544be3af..67ec3b12502 100644 --- a/src/install/jmx/find-data.mdx +++ b/src/install/jmx/find-data.mdx @@ -15,10 +15,9 @@ import infrastructureInstallJmxDashboard from 'images/infrastructure_screenshot- src={infrastructureInstallJmxDashboard} /> -3. A popup window opens. -4. Click **Edit** if you want to change the account. -5. Click **Setup JMX** or **Skip this step** if you already setup this datasource. -6. Click **Setup New Relic infrastructure agent** or **Skip this step** if you already setup this datasource. +3. Click **Edit** if you want to change the account. +4. Click **Setup JMX** or **Skip this step** if you already setup this datasource. +5. Click **Setup New Relic infrastructure agent** or **Skip this step** if you already setup this data source. 6. Click **View dashboard**, and see your JMX data in New Relic. diff --git a/src/install/jmx/intro.mdx b/src/install/jmx/intro.mdx index 08b92655221..eef390feb01 100644 --- a/src/install/jmx/intro.mdx +++ b/src/install/jmx/intro.mdx @@ -3,7 +3,7 @@ headingText: Before we start componentType: default --- -Our JMX integration allows users to monitor any application that exposes metrics with JMX. The integration includes a default collection file. It collects key metrics from the JVM. +Our JMX integration allows users to monitor any application that exposes metrics with JMX. The integration includes a default collection file. It collects key metrics from the JVM. The collected metrics vary by app server and include measurements of thread pools, HTTP sessions, and transactions. Read on to install the integration and to see what data we collect. diff --git a/src/install/jmx/linux/install-apt.mdx b/src/install/jmx/linux/install-apt.mdx new file mode 100644 index 00000000000..12b23dfd9b5 --- /dev/null +++ b/src/install/jmx/linux/install-apt.mdx @@ -0,0 +1,14 @@ +--- +componentType: default +headingText: Download the JMX integration using APT +--- + +In your terminal, run these commands: + + ```shell + sudo apt-get update + ``` + + ```shell + sudo apt-get install nri-jmx + ``` \ No newline at end of file diff --git a/src/install/jmx/linux/install-tarball.mdx b/src/install/jmx/linux/install-tarball.mdx new file mode 100644 index 00000000000..7d522d58017 --- /dev/null +++ b/src/install/jmx/linux/install-tarball.mdx @@ -0,0 +1,24 @@ +--- +componentType: default +headingText: Download using tarball +--- + + + We recommend [using your distribution package manager to install the infrastructure agent](/docs/infrastructure/install-configure-manage-infrastructure/linux-installation/install-infrastructure-linux-using-package-manager). If you choose to [manually install the agent](/docs/infrastructure/install-configure-manage-infrastructure/linux-installation/tarball-manual-install-infrastructure-linux), you may also want to install the on-host integrations from the provided tarballs. + + The manual install process isn't automated. If you opt for manual install, you must place the different files in the correct folders, and ensure that the agent has all the permissions to execute the integrations. + + + + To install an integration from a tarball: + + 1. Download the packaged integration file from the [tarball repository](https://download.newrelic.com/infrastructure_agent/binaries/linux/amd64/). + 2. Unpack the tarball file according to our [integration file structure and placement rules](/docs/integrations/integrations-sdk/getting-started/integration-file-structure-activation) so the agent can find the definitions, configurations, and executables of the integration. + 3. Place the binary that contains the definition file inside `newrelic-integrations` or `custom-integrations` in the [agent directory](/docs/infrastructure/install-configure-manage-infrastructure/linux-installation/tarball-manual-install-infrastructure-linux#agent-directory). + 4. Place the integration's config file under the [plugin directory](/docs/infrastructure/install-configure-manage-infrastructure/linux-installation/tarball-manual-install-infrastructure-linux#configure-plugin). + 5. Download the JMX tool from [our repository](https://download.newrelic.com/infrastructure_agent/binaries/linux/noarch/) and unpack it. Some notes on compatibility: + * For JMX integration version 2.3.3 or higher and Cassandra integration version 2.3.0 or higher, the `nrjmx` tool is included as a dependency. For this reason, when using a package manager, the `nrjmx` tool doesn't have to be installed manually. + * `nrjmx` requires Java 8 or higher. + * If you have `nrjmx` already installed and install `nri-jmx`, our JMX tool keeps the already-installed version. If you don't have `nrjmx` already installed, it gets the latest `nrjmx` release. + * By default, the `nrjmx` location is `/usr/bin/nrjmx/*`. To install in a different location, set the new path in the `NR_JMX_TOOL` environment variable. + diff --git a/src/install/jmx/linux/install-yum.mdx b/src/install/jmx/linux/install-yum.mdx new file mode 100644 index 00000000000..b013beace26 --- /dev/null +++ b/src/install/jmx/linux/install-yum.mdx @@ -0,0 +1,14 @@ +--- +componentType: default +headingText: Download the JMX integration using Yum +--- + +In your terminal, run these commands: + + ```shell + sudo yum -q makecache -y --disablerepo='*' --enablerepo='newrelic-infra' + ``` + + ```shell + sudo yum install nri-jmx + ``` \ No newline at end of file diff --git a/src/install/jmx/linux/install-zypper.mdx b/src/install/jmx/linux/install-zypper.mdx new file mode 100644 index 00000000000..d0fd0d81e89 --- /dev/null +++ b/src/install/jmx/linux/install-zypper.mdx @@ -0,0 +1,14 @@ +--- +componentType: default +headingText: Download using Zypper +--- + +In your terminal, run these commands: + + ```shell + sudo zypper -n ref -r newrelic-infra + ``` + + ```shell + sudo zypper -n install nri-jmx + ``` \ No newline at end of file From d40938f2aeeb0206263d722931009bce7194488e Mon Sep 17 00:00:00 2001 From: a-sassman Date: Wed, 13 Mar 2024 10:30:46 -0700 Subject: [PATCH 067/124] chore(mobile): add callouts for hybrid tabs --- .../mobile-sdk/set-max-offline-storage.mdx | 76 +++++++++++++++++-- 1 file changed, 69 insertions(+), 7 deletions(-) diff --git a/src/content/docs/mobile-monitoring/new-relic-mobile/mobile-sdk/set-max-offline-storage.mdx b/src/content/docs/mobile-monitoring/new-relic-mobile/mobile-sdk/set-max-offline-storage.mdx index 62c4254a7d6..e9b75724918 100644 --- a/src/content/docs/mobile-monitoring/new-relic-mobile/mobile-sdk/set-max-offline-storage.mdx +++ b/src/content/docs/mobile-monitoring/new-relic-mobile/mobile-sdk/set-max-offline-storage.mdx @@ -52,13 +52,13 @@ This method controls the maximum amount of offline storage that can be stored in -Offline storage is enabled by default. To enable it, add the following feature flag: +Offline storage is disabled by default. To enable it, add the following feature flag: ```java NewRelic.disableFeature(FeatureFlag.OfflineStorage) ``` -For details on adding feature flags, see [Configure mobile monitoring settings](/docs/mobile-monitoring/new-relic-mobile/mobile-sdk/configure-settings/). +For details on adding feature flags, see [Configure mobile monitoring settings](/docs/mobile-monitoring/new-relic-mobile/mobile-sdk/configure-settings/#android). ## Syntax [#syntax] @@ -135,7 +135,7 @@ Offline storage is disabled by default. To enable it, add the following feature NewRelic.enableFeatures(NRMAFeatureFlags.NRFeatureFlag_OfflineStorage) ``` -For details on adding feature flags, see [Configure mobile monitoring settings](/docs/mobile-monitoring/new-relic-mobile/mobile-sdk/configure-settings). +For details on adding feature flags, see [Configure mobile monitoring settings](/docs/mobile-monitoring/new-relic-mobile/mobile-sdk/configure-settings/#ios). ## Syntax [#syntax] @@ -205,8 +205,14 @@ let poolSizeSet = NewRelic.setMaxOfflineStorageSize(1000) - -Offline storage is enabled by default but can be disabled with a feature flag using the agent configuration. + +Offline storage is enabled by default. If you need to disable it, add the following feature flag: + +```typescript +offlineStorageEnabled: false +``` + +For details on adding feature flags, see [Configure mobile monitoring settings](/docs/mobile-monitoring/new-relic-mobile/mobile-sdk/configure-settings/#capacitor). ## Syntax [#syntax] @@ -261,8 +267,14 @@ setMaxOfflineStorageSize(options: { megabytes: number; }) => void - -Offline storage is enabled by default but can be disabled with a feature flag using the agent configuration. + +Offline storage is enabled by default. If you need to disable it, add the following feature flag: + +```typescript +FEDRAMP_ENABLED = "false" +``` + +For details on adding feature flags, see [Configure mobile monitoring settings](/docs/mobile-monitoring/new-relic-mobile/mobile-sdk/configure-settings/#cordova). ## Syntax [#syntax] @@ -319,6 +331,16 @@ setMaxOfflineStorageSize(megabytes: number): void; + +Offline storage is enabled by default. If you need to disable it, add the following feature flag: + +```csharp +offlineStorageEnabled: false +``` + +For details on adding feature flags, see [Configure mobile monitoring settings](/docs/mobile-monitoring/new-relic-mobile/mobile-sdk/configure-settings/#maui). + + ## Syntax [#syntax] ```csharp @@ -371,6 +393,16 @@ setMaxOfflineStorageSize(int megabytes): void; + +Offline storage is enabled by default. If you need to disable it, add the following feature flag: + +```typescript +offlineStorageEnabled: false +``` + +For details on adding feature flags, see [Configure mobile monitoring settings](/docs/mobile-monitoring/new-relic-mobile/mobile-sdk/configure-settings/#flutter). + + ## Syntax [#syntax] ```typescript @@ -423,6 +455,16 @@ NewrelicMobile.instance.setMaxOfflineStorageSize(200); + +Offline storage is enabled by default. If you need to disable it, add the following feature flag: + +```typescript +offlineStorageEnabled: false +``` + +For details on adding feature flags, see [Configure mobile monitoring settings](/docs/mobile-monitoring/new-relic-mobile/mobile-sdk/configure-settings/#react). + + ## Syntax [#syntax] ```js @@ -476,6 +518,16 @@ setMaxOfflineStorageSize(megabytes: number): void; + +Offline storage is enabled by default. If you need to disable it, add the following feature flag: + +```typescript +offlineStorageEnabled: false +``` + +For details on adding feature flags, see [Configure mobile monitoring settings](/docs/mobile-monitoring/new-relic-mobile/mobile-sdk/configure-settings/#xamarin). + + ## Syntax [#syntax] ```csharp @@ -529,6 +581,16 @@ SetMaxOfflineStorageSize(int megabytes): void; + +Offline storage is enabled by default. If you need to disable it, add the following feature flag: + +```typescript +offlineStorageEnabled: false +``` + +For details on adding feature flags, see [Configure mobile monitoring settings](/docs/mobile-monitoring/new-relic-mobile/mobile-sdk/configure-settings/#flutter). + + ## Syntax [#syntax] ```csharp From d86ea52528142deea45d14f81e5b1ecb8fe4c61d Mon Sep 17 00:00:00 2001 From: ndesai-newrelic <89222514+ndesai-newrelic@users.noreply.github.com> Date: Wed, 13 Mar 2024 12:34:26 -0500 Subject: [PATCH 068/124] Update src/content/docs/mobile-monitoring/new-relic-mobile/mobile-sdk/set-max-offline-storage.mdx Co-authored-by: ally sassman <42753584+ally-sassman@users.noreply.github.com> --- .../new-relic-mobile/mobile-sdk/set-max-offline-storage.mdx | 1 - 1 file changed, 1 deletion(-) diff --git a/src/content/docs/mobile-monitoring/new-relic-mobile/mobile-sdk/set-max-offline-storage.mdx b/src/content/docs/mobile-monitoring/new-relic-mobile/mobile-sdk/set-max-offline-storage.mdx index e9b75724918..36ad077222c 100644 --- a/src/content/docs/mobile-monitoring/new-relic-mobile/mobile-sdk/set-max-offline-storage.mdx +++ b/src/content/docs/mobile-monitoring/new-relic-mobile/mobile-sdk/set-max-offline-storage.mdx @@ -281,7 +281,6 @@ For details on adding feature flags, see [Configure mobile monitoring settings]( ```typescript setMaxOfflineStorageSize(megabytes: number): void; - ``` From 359bc492ab8a8cecd80969ef2770b27d19dba8c1 Mon Sep 17 00:00:00 2001 From: ally sassman <42753584+ally-sassman@users.noreply.github.com> Date: Wed, 13 Mar 2024 10:56:05 -0700 Subject: [PATCH 069/124] fix(mobile): style edits --- .../get-started-with-cordova-monitoring.mdx | 2 +- .../monitor-your-flutter-application.mdx | 2 +- .../get-started/introduction-new-relic-ionic-capacitor.mdx | 3 +-- .../new-relic-mobile/mobile-sdk/set-max-offline-storage.mdx | 2 +- .../capacitor-release-notes/capacitor-agent-136.mdx | 2 +- .../unity-release-notes/unity-agent-133.mdx | 2 +- .../xamarin-release-notes/xamarin-agent-004.mdx | 2 +- 7 files changed, 7 insertions(+), 8 deletions(-) diff --git a/src/content/docs/mobile-monitoring/new-relic-mobile-cordova-phonegap/get-started-with-cordova-monitoring.mdx b/src/content/docs/mobile-monitoring/new-relic-mobile-cordova-phonegap/get-started-with-cordova-monitoring.mdx index 3cc6c926cd4..dfa1f99ffcd 100644 --- a/src/content/docs/mobile-monitoring/new-relic-mobile-cordova-phonegap/get-started-with-cordova-monitoring.mdx +++ b/src/content/docs/mobile-monitoring/new-relic-mobile-cordova-phonegap/get-started-with-cordova-monitoring.mdx @@ -87,7 +87,7 @@ Add the following optional configurations to the `--variable` argument, which wi * `FEDRAMP_ENABLED`: Enable or disable reporting data using different endpoints for US government clients. * Possible values are `true` and `false`. Defaults to `false`. * `OFFLINE_STORAGE_ENABLED`: Enable or disable offline data storage when no internet connection is available. - * Possible values are true and false. Defaults to true. + * Possible values are `true` and `false`. Defaults to `true`. These options are only available on Cordova agent v6.2.1 and higher. diff --git a/src/content/docs/mobile-monitoring/new-relic-mobile-flutter/monitor-your-flutter-application.mdx b/src/content/docs/mobile-monitoring/new-relic-mobile-flutter/monitor-your-flutter-application.mdx index 133f67a4c23..c23bc9b61f1 100644 --- a/src/content/docs/mobile-monitoring/new-relic-mobile-flutter/monitor-your-flutter-application.mdx +++ b/src/content/docs/mobile-monitoring/new-relic-mobile-flutter/monitor-your-flutter-application.mdx @@ -109,7 +109,7 @@ import 'package:newrelic_mobile/newrelic_mobile.dart'; // Optional: Enable or disable reporting data using different endpoints for US government clients fedRampEnabled: false, // Optional: Enable or disable offline data storage when no internet connection is available. - offlineStorageEnabled:true + offlineStorageEnabled: true ); NewrelicMobile.instance.start(config, () { runApp(MyApp()); diff --git a/src/content/docs/mobile-monitoring/new-relic-mobile-ionic-capacitor/get-started/introduction-new-relic-ionic-capacitor.mdx b/src/content/docs/mobile-monitoring/new-relic-mobile-ionic-capacitor/get-started/introduction-new-relic-ionic-capacitor.mdx index 0cd1d113702..37c75e35a65 100644 --- a/src/content/docs/mobile-monitoring/new-relic-mobile-ionic-capacitor/get-started/introduction-new-relic-ionic-capacitor.mdx +++ b/src/content/docs/mobile-monitoring/new-relic-mobile-ionic-capacitor/get-started/introduction-new-relic-ionic-capacitor.mdx @@ -111,7 +111,7 @@ let agentConfig : AgentConfiguration = { // Optional:Enable or disable reporting data using different endpoints for US government clients //fedRampEnabled: false // Optional: Enable or disable offline data storage when no internet connection is available. - offlineStorageEnabled:true + offlineStorageEnabled: true } NewRelicCapacitorPlugin.start({appKey:appToken, agentConfiguration:agentConfig}) ``` @@ -142,7 +142,6 @@ Make sure you paste your application token(s) into `appToken = ""` in the code a ```groovy apply plugin: "com.android.application" apply plugin: 'newrelic' // <-- add this - ``` 4. Make sure your app requests `INTERNET` and `ACCESS_NETWORK_STATE` permissions by adding these lines to your `AndroidManifest.xml`: ``` diff --git a/src/content/docs/mobile-monitoring/new-relic-mobile/mobile-sdk/set-max-offline-storage.mdx b/src/content/docs/mobile-monitoring/new-relic-mobile/mobile-sdk/set-max-offline-storage.mdx index 36ad077222c..9c4bc7c0d53 100644 --- a/src/content/docs/mobile-monitoring/new-relic-mobile/mobile-sdk/set-max-offline-storage.mdx +++ b/src/content/docs/mobile-monitoring/new-relic-mobile/mobile-sdk/set-max-offline-storage.mdx @@ -271,7 +271,7 @@ setMaxOfflineStorageSize(options: { megabytes: number; }) => void Offline storage is enabled by default. If you need to disable it, add the following feature flag: ```typescript -FEDRAMP_ENABLED = "false" +OFFLINE_STORAGE_ENABLED = "false" ``` For details on adding feature flags, see [Configure mobile monitoring settings](/docs/mobile-monitoring/new-relic-mobile/mobile-sdk/configure-settings/#cordova). diff --git a/src/content/docs/release-notes/mobile-release-notes/capacitor-release-notes/capacitor-agent-136.mdx b/src/content/docs/release-notes/mobile-release-notes/capacitor-release-notes/capacitor-agent-136.mdx index 5d815d4ace0..3d8f912d02f 100644 --- a/src/content/docs/release-notes/mobile-release-notes/capacitor-release-notes/capacitor-agent-136.mdx +++ b/src/content/docs/release-notes/mobile-release-notes/capacitor-release-notes/capacitor-agent-136.mdx @@ -8,7 +8,7 @@ downloadLink: 'https://www.npmjs.com/package/@newrelic/newrelic-capacitor-plugin ## New in this release * Added offline harvesting feature: This new feature enables the preservation of harvest data that would otherwise be lost when the application lacks an internet connection. The stored harvests will be sent once the internet connection is re-established and the next harvest upload is successful. -* Introduced [`setMaxOfflineStorageSize`]([`setMaxOfflineStorageSize`](/docs/mobile-monitoring/new-relic-mobile/mobile-sdk/set-max-offline-storage/#capacitor) API: This new API allows the user to determine the maximum volume of data that can be stored locally. This aids in better management and control of local data storage. +* Introduced [`setMaxOfflineStorageSize`](/docs/mobile-monitoring/new-relic-mobile/mobile-sdk/set-max-offline-storage/#capacitor) API: This new API allows the user to determine the maximum volume of data that can be stored locally. This aids in better management and control of local data storage. * Updated native iOS agent: We've upgraded the native iOS agent to version 7.4.9, which includes performance improvements and bug fixes. * Updated native Android agent: We've also upgraded the native Android agent to version 7.3.0 bringing benefits like improved stability and enhanced features. * Resolved an issue in the fetch instrumentation where the absence of a body led to failure in recording network requests by the agent. diff --git a/src/content/docs/release-notes/mobile-release-notes/unity-release-notes/unity-agent-133.mdx b/src/content/docs/release-notes/mobile-release-notes/unity-release-notes/unity-agent-133.mdx index bb1ce23cc86..e6906cef383 100644 --- a/src/content/docs/release-notes/mobile-release-notes/unity-release-notes/unity-agent-133.mdx +++ b/src/content/docs/release-notes/mobile-release-notes/unity-release-notes/unity-agent-133.mdx @@ -7,7 +7,7 @@ downloadLink: 'https://github.com/newrelic/newrelic-unity-agent.git' ## New in this release * Offline harvesting feature: Preserves harvest data during internet downtime, sending stored data once online. -* `setMaxOfflineStorageSize` API: Allows setting a maximum limit for local data storage. +* [`setMaxOfflineStorageSize`](/docs/mobile-monitoring/new-relic-mobile/mobile-sdk/set-max-offline-storage/#unity) API: Allows setting a maximum limit for local data storage. * Upgraded native iOS agent to 7.4.9: Offers performance upgrades and bug fixes. * Upgraded native Android agent to 7.3.0: Improves stability and adds enhanced features. * `UnityWebRequest` instrumentation update: Fixes issue with replacement of constrained dispose calls, streamlining app building. diff --git a/src/content/docs/release-notes/mobile-release-notes/xamarin-release-notes/xamarin-agent-004.mdx b/src/content/docs/release-notes/mobile-release-notes/xamarin-release-notes/xamarin-agent-004.mdx index 49f93b16f7e..d5f05afd595 100644 --- a/src/content/docs/release-notes/mobile-release-notes/xamarin-release-notes/xamarin-agent-004.mdx +++ b/src/content/docs/release-notes/mobile-release-notes/xamarin-release-notes/xamarin-agent-004.mdx @@ -8,6 +8,6 @@ downloadLink: 'https://www.nuget.org/packages/NewRelic.Xamarin.Plugin' ## New in this release * Added offline monitoring feature: This new feature enables the preservation of harvest data that would otherwise be lost when the application lacks an internet connection. The stored harvests will be sent once the internet connection is re-established and the next harvest upload is successful. -* Introduced `setMaxOfflineStorageSize` API: This new API allows the user to determine the maximum volume of data that can be stored locally. This aids in better management and control of local data storage. +* Introduced [`setMaxOfflineStorageSize`](/docs/mobile-monitoring/new-relic-mobile/mobile-sdk/set-max-offline-storage/#unity) API: This new API allows the user to determine the maximum volume of data that can be stored locally. This aids in better management and control of local data storage. * Updated native iOS agent: We've upgraded the native iOS agent to version 7.4.9, which includes performance improvements and bug fixes. * Updated native Android agent: We've also upgraded the native Android agent to version 7.3.0 bringing benefits like improved stability and enhanced features. From a1a5693670fe18dff99ee3aabad0e09e442e9553 Mon Sep 17 00:00:00 2001 From: ally sassman <42753584+ally-sassman@users.noreply.github.com> Date: Wed, 13 Mar 2024 10:56:26 -0700 Subject: [PATCH 070/124] fix(mobile): add space before value --- .../new-relic-mobile/mobile-sdk/configure-settings.mdx | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/content/docs/mobile-monitoring/new-relic-mobile/mobile-sdk/configure-settings.mdx b/src/content/docs/mobile-monitoring/new-relic-mobile/mobile-sdk/configure-settings.mdx index 63c70b30f96..e6528ca8cf7 100644 --- a/src/content/docs/mobile-monitoring/new-relic-mobile/mobile-sdk/configure-settings.mdx +++ b/src/content/docs/mobile-monitoring/new-relic-mobile/mobile-sdk/configure-settings.mdx @@ -1203,7 +1203,7 @@ NewRelicCapacitorPlugin.start({appKey:appToken, agentConfiguration:agentConfig}) Offline storage is enabled by default. To disable it, add the following feature flag: ```typescript - offlineStorageEnabled:false + offlineStorageEnabled: false ``` From dad3a82206c4fdcf5d3f2f5371e0137b74e6bf86 Mon Sep 17 00:00:00 2001 From: ally sassman <42753584+ally-sassman@users.noreply.github.com> Date: Wed, 13 Mar 2024 10:56:34 -0700 Subject: [PATCH 071/124] fix(mobile): add space before value --- .../new-relic-mobile/mobile-sdk/configure-settings.mdx | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/content/docs/mobile-monitoring/new-relic-mobile/mobile-sdk/configure-settings.mdx b/src/content/docs/mobile-monitoring/new-relic-mobile/mobile-sdk/configure-settings.mdx index e6528ca8cf7..524b41fe898 100644 --- a/src/content/docs/mobile-monitoring/new-relic-mobile/mobile-sdk/configure-settings.mdx +++ b/src/content/docs/mobile-monitoring/new-relic-mobile/mobile-sdk/configure-settings.mdx @@ -2179,7 +2179,7 @@ public App () Offline storage is enabled by default. To disable it, add the following feature flag: ```typescript - offlineStorageEnabled:false + offlineStorageEnabled: false ``` From 2d6f7e8cbf0366418bc1ba0c5194ecb2d531b914 Mon Sep 17 00:00:00 2001 From: ally sassman <42753584+ally-sassman@users.noreply.github.com> Date: Wed, 13 Mar 2024 10:56:53 -0700 Subject: [PATCH 072/124] fix(mobile): add space before value --- .../new-relic-mobile/mobile-sdk/configure-settings.mdx | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/content/docs/mobile-monitoring/new-relic-mobile/mobile-sdk/configure-settings.mdx b/src/content/docs/mobile-monitoring/new-relic-mobile/mobile-sdk/configure-settings.mdx index 524b41fe898..657afe0fb24 100644 --- a/src/content/docs/mobile-monitoring/new-relic-mobile/mobile-sdk/configure-settings.mdx +++ b/src/content/docs/mobile-monitoring/new-relic-mobile/mobile-sdk/configure-settings.mdx @@ -2364,7 +2364,7 @@ public App () Offline storage is enabled by default. To disable it, add the following feature flag: ```typescript - offlineStorageEnabled:false + offlineStorageEnabled: false ``` From 0f5b0c14397b125395632a5a14867eacc45a5509 Mon Sep 17 00:00:00 2001 From: ndesai-newrelic <89222514+ndesai-newrelic@users.noreply.github.com> Date: Wed, 13 Mar 2024 12:57:52 -0500 Subject: [PATCH 073/124] Update src/content/docs/release-notes/mobile-release-notes/flutter-release-notes/flutter-agent-107.mdx Co-authored-by: ally sassman <42753584+ally-sassman@users.noreply.github.com> --- .../flutter-release-notes/flutter-agent-107.mdx | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/content/docs/release-notes/mobile-release-notes/flutter-release-notes/flutter-agent-107.mdx b/src/content/docs/release-notes/mobile-release-notes/flutter-release-notes/flutter-agent-107.mdx index 4db676a905a..77bd100dce8 100644 --- a/src/content/docs/release-notes/mobile-release-notes/flutter-release-notes/flutter-agent-107.mdx +++ b/src/content/docs/release-notes/mobile-release-notes/flutter-release-notes/flutter-agent-107.mdx @@ -1,6 +1,6 @@ --- subject: Flutter agent -releaseDate: '2023-12-20' +releaseDate: '2024-03-06' version: 1.0.5 downloadLink: 'https://pub.dev/packages/newrelic_mobile/versions/1.0.6' --- From 7963578dac7566b5393eea793a56a3559787b44b Mon Sep 17 00:00:00 2001 From: Johnathan Date: Wed, 13 Mar 2024 12:32:10 -0700 Subject: [PATCH 074/124] QA Edits Adding QA Edits to the PR --- .../fedramp-moderate.mdx | 54 ++++++++-------- .../hipaa.mdx | 57 ++++++++--------- .../compliance/data-encryption.mdx | 2 +- .../security-privacy/compliance/hitrust.mdx | 63 +++++++++---------- 4 files changed, 81 insertions(+), 95 deletions(-) diff --git a/src/content/docs/security/security-privacy/compliance/certificates-standards-regulations/fedramp-moderate.mdx b/src/content/docs/security/security-privacy/compliance/certificates-standards-regulations/fedramp-moderate.mdx index bbbcf0e0a93..0a483746d20 100644 --- a/src/content/docs/security/security-privacy/compliance/certificates-standards-regulations/fedramp-moderate.mdx +++ b/src/content/docs/security/security-privacy/compliance/certificates-standards-regulations/fedramp-moderate.mdx @@ -48,7 +48,7 @@ The following applies to the New Relic platform: - 2023-OCT-26 + 2023-OCT-18 @@ -59,14 +59,38 @@ The following applies to the New Relic platform: New Relic platform + + + +## Services not in scope [#not-scope] +The following services are not FedRAMP-authorized: + + + + + + + + + + + + + - -
+ Last updated + + Infrastructure + + Services +
[FedRAMP Moderate](https://marketplace.fedramp.gov/products/F1607057910) - 2023-OCT-26 + N/A @@ -83,7 +107,7 @@ The following applies to the New Relic platform: [FedRAMP Moderate](https://marketplace.fedramp.gov/products/F1607057910) - 2023-OCT-26 + N/A @@ -94,31 +118,7 @@ The following applies to the New Relic platform: Pixie: Community Cloud for Pixie
- -## Services not in scope [#not-scope] - -The following services are not FedRAMP-authorized: - - - - - - - - - - - - + +
- Last updated - - Infrastructure - - Services -
N/A diff --git a/src/content/docs/security/security-privacy/compliance/certificates-standards-regulations/hipaa.mdx b/src/content/docs/security/security-privacy/compliance/certificates-standards-regulations/hipaa.mdx index a57e9900140..ff297809e01 100644 --- a/src/content/docs/security/security-privacy/compliance/certificates-standards-regulations/hipaa.mdx +++ b/src/content/docs/security/security-privacy/compliance/certificates-standards-regulations/hipaa.mdx @@ -61,14 +61,34 @@ The following applies to the New Relic platform: New Relic platform
+ +## Services not in scope [#not-scope] +The following services are not covered under the BAA: + + + - + + + + + + + + + - - -
- [HIPAA BAA FAQ](https://newrelic.com/termsandconditions/hipaabaaFAQ) - + Last updated + + Infrastructure + + Services +
- 2024-MAR-08 + N/A @@ -82,10 +102,7 @@ The following applies to the New Relic platform:
- [HIPAA BAA FAQ](https://newrelic.com/termsandconditions/hipaabaaFAQ) - - 2024-MAR-08 + N/A @@ -96,31 +113,7 @@ The following applies to the New Relic platform: Pixie: Community Cloud for Pixie
- -## Services not in scope [#not-scope] - -The following services are not covered under the BAA: - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
- Last updated - - Infrastructure - - Services -
N/A diff --git a/src/content/docs/security/security-privacy/compliance/data-encryption.mdx b/src/content/docs/security/security-privacy/compliance/data-encryption.mdx index 11103f639de..5733fcd7c00 100644 --- a/src/content/docs/security/security-privacy/compliance/data-encryption.mdx +++ b/src/content/docs/security/security-privacy/compliance/data-encryption.mdx @@ -12,7 +12,7 @@ redirects: freshnessValidatedDate: never --- -Whether your data is in transit to New Relic or at rest in our storage, we apply strong encryption measures to help prevent unauthorized access, threats, or theft. FIPS 140-2](https://csrc.nist.gov/publications/detail/fips/140/2/final) compliant encryption standards (using validated cryptographic modules) are available in AWS US and AWS EU regions. +Whether your data is in transit to New Relic or at rest in our storage, we apply strong encryption measures to help prevent unauthorized access, threats, or theft. [FIPS 140-2](https://csrc.nist.gov/publications/detail/fips/140/2/final) compliant encryption standards (using validated cryptographic modules) are available in AWS US and AWS EU regions. New Relic is authorized for Moderate Impact SaaS Services ([FedRAMP Authorized Moderate](https://marketplace.fedramp.gov/products/F1607057910)) for accounts that meet specific criteria. As a cloud service provider, we are committed to ensuring our compliance with FedRAMP's requirements for the [confidentiality, integrity, and availability](https://www.fedramp.gov/understanding-baselines-and-impact-levels/) of your data. diff --git a/src/content/docs/security/security-privacy/compliance/hitrust.mdx b/src/content/docs/security/security-privacy/compliance/hitrust.mdx index a86313bd00c..33f1e8c40f3 100644 --- a/src/content/docs/security/security-privacy/compliance/hitrust.mdx +++ b/src/content/docs/security/security-privacy/compliance/hitrust.mdx @@ -55,41 +55,6 @@ HITRUST Alliance is a non-profit organization that champions programs that safeg New Relic platform
- HITRUST certificate - - 2023-OCT-27 - - Azure - - Azure Native New Relic Service -
- HITRUST certificate - - 2023-OCT-27 - - GCP - - Pixie: Community Cloud for Pixie -
@@ -119,6 +84,34 @@ HITRUST doesn't provide certification for the following services: + + + N/A + + + + Azure + + + + Azure Native New Relic Service + + + + + + N/A + + + + GCP + + + + Pixie: Community Cloud for Pixie + + + N/A From 99f2816bd6ae29fe9b738c20395187db3c73971b Mon Sep 17 00:00:00 2001 From: Liz Baker Date: Wed, 13 Mar 2024 12:36:24 -0700 Subject: [PATCH 075/124] chore: Change colors and bold rules --- .../components/NavItem.js | 31 ++++++++----------- .../components/NavLink.js | 1 - src/components/Navigation.js | 5 +-- 3 files changed, 16 insertions(+), 21 deletions(-) diff --git a/src/@newrelic/gatsby-theme-newrelic/components/NavItem.js b/src/@newrelic/gatsby-theme-newrelic/components/NavItem.js index 79a7fe1b42d..272f2467eaa 100644 --- a/src/@newrelic/gatsby-theme-newrelic/components/NavItem.js +++ b/src/@newrelic/gatsby-theme-newrelic/components/NavItem.js @@ -87,26 +87,18 @@ const NavItem = ({ --nav-link-padding: 1rem; display: ${matchesSearch || !searchTerm ? 'block' : 'none'}; padding-left: ${parent == null ? '8px' : 'var(--nav-link-padding)'}; - border-left: ${parent == null ? 'none' : 'solid #0D374A 2px'}; - span { - font-weight: 700; - } - ${depth > 0 && - css` - span { - font-weight: 600; - } - `} - ${depth > 1 && + border-left: ${parent == null + ? 'none' + : 'solid var(--system-background-hover-dark) 2px'}; + + ${isExpanded && + depth == 0 && css` - border-left: solid rgba(231, 246, 246, 0.1) 2px; - span { - font-weight: 500; + span, + svg { + opacity: 1 !important; } `} - a > div > span { - font-weight: 400; - } ${mobileBreakpoint && css` @@ -149,7 +141,10 @@ const NavItem = ({ `} ${isCurrentPage && css` - background: #0d374a; + background: var(--system-background-hover-dark); + span { + font-weight: 600; + } `} `} > diff --git a/src/@newrelic/gatsby-theme-newrelic/components/NavLink.js b/src/@newrelic/gatsby-theme-newrelic/components/NavLink.js index 3f770c8ebff..cc69d4138c5 100644 --- a/src/@newrelic/gatsby-theme-newrelic/components/NavLink.js +++ b/src/@newrelic/gatsby-theme-newrelic/components/NavLink.js @@ -45,7 +45,6 @@ const NavLink = ({ margin: 0 calc(var(--nav-link-padding) * -1); font-size: 0.875rem; text-decoration: none; - border-radius: 0.25rem; &:hover { color: var(--secondary-text-color); diff --git a/src/components/Navigation.js b/src/components/Navigation.js index 110e11c73ac..b3fd8e6b027 100644 --- a/src/components/Navigation.js +++ b/src/components/Navigation.js @@ -38,7 +38,8 @@ const Navigation = ({ nav, className }) => { } span, svg { - color: #afe2e3; + color: var(--system-text-secondary-dark); + opacity: 0.7; } `} id="nav" @@ -54,7 +55,7 @@ const Navigation = ({ nav, className }) => {

Date: Wed, 13 Mar 2024 12:51:28 -0700 Subject: [PATCH 076/124] chore: Use primary font color --- src/@newrelic/gatsby-theme-newrelic/components/NavItem.js | 5 ++--- src/components/Navigation.js | 2 +- 2 files changed, 3 insertions(+), 4 deletions(-) diff --git a/src/@newrelic/gatsby-theme-newrelic/components/NavItem.js b/src/@newrelic/gatsby-theme-newrelic/components/NavItem.js index 272f2467eaa..8dac067cf69 100644 --- a/src/@newrelic/gatsby-theme-newrelic/components/NavItem.js +++ b/src/@newrelic/gatsby-theme-newrelic/components/NavItem.js @@ -92,12 +92,11 @@ const NavItem = ({ : 'solid var(--system-background-hover-dark) 2px'}; ${isExpanded && - depth == 0 && + depth === 0 && css` span, svg { - opacity: 1 !important; - } + opacity: 1; `} ${mobileBreakpoint && diff --git a/src/components/Navigation.js b/src/components/Navigation.js index b3fd8e6b027..eceede96caa 100644 --- a/src/components/Navigation.js +++ b/src/components/Navigation.js @@ -38,7 +38,7 @@ const Navigation = ({ nav, className }) => { } span, svg { - color: var(--system-text-secondary-dark); + color: var(--system-text-primary-dark); opacity: 0.7; } `} From 827f4d22bec1b9e5262304a9a45d8e1929aff4b5 Mon Sep 17 00:00:00 2001 From: Liz Baker Date: Wed, 13 Mar 2024 14:47:17 -0700 Subject: [PATCH 077/124] chore: Add hover color --- src/@newrelic/gatsby-theme-newrelic/components/NavItem.js | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/src/@newrelic/gatsby-theme-newrelic/components/NavItem.js b/src/@newrelic/gatsby-theme-newrelic/components/NavItem.js index 8dac067cf69..b153272d2e1 100644 --- a/src/@newrelic/gatsby-theme-newrelic/components/NavItem.js +++ b/src/@newrelic/gatsby-theme-newrelic/components/NavItem.js @@ -129,7 +129,9 @@ const NavItem = ({ padding-left: ${root?.icon ? 'calc(var(--icon-size) + var(--icon-spacing))' : 'var(--nav-link-padding)'}; - + &:hover { + background: var(--system-background-hover-dark); + } ${mobileBreakpoint && css` @media screen and (max-width: ${mobileBreakpoint}) { From 7b1cfdaeb229a42706b54683981f5cda9a7d5840 Mon Sep 17 00:00:00 2001 From: Liz Baker Date: Wed, 13 Mar 2024 14:48:48 -0700 Subject: [PATCH 078/124] chore: Use decreased opacity on categories --- src/components/Navigation.js | 1 + 1 file changed, 1 insertion(+) diff --git a/src/components/Navigation.js b/src/components/Navigation.js index eceede96caa..0fb9b8db320 100644 --- a/src/components/Navigation.js +++ b/src/components/Navigation.js @@ -56,6 +56,7 @@ const Navigation = ({ nav, className }) => {

Date: Wed, 13 Mar 2024 15:24:16 -0700 Subject: [PATCH 079/124] chore(mobile): add unity instructions --- .../mobile-sdk/configure-settings.mdx | 193 ++---------------- ...obile_screenshot-crop_Unity-editor-UI.webp | Bin 0 -> 140795 bytes 2 files changed, 16 insertions(+), 177 deletions(-) create mode 100644 src/images/mobile_screenshot-crop_Unity-editor-UI.webp diff --git a/src/content/docs/mobile-monitoring/new-relic-mobile/mobile-sdk/configure-settings.mdx b/src/content/docs/mobile-monitoring/new-relic-mobile/mobile-sdk/configure-settings.mdx index 657afe0fb24..ebd982186f8 100644 --- a/src/content/docs/mobile-monitoring/new-relic-mobile/mobile-sdk/configure-settings.mdx +++ b/src/content/docs/mobile-monitoring/new-relic-mobile/mobile-sdk/configure-settings.mdx @@ -18,9 +18,11 @@ redirects: - /docs/mobile-monitoring/new-relic-mobile-ios/ios-sdk-api/disable-features - /docs/mobile-monitoring/new-relic-mobile-ios/ios-sdk-api/enable-features - /docs/mobile-monitoring/new-relic-mobile/mobile-sdk/enable-disable-features -freshnessValidatedDate: never +freshnessValidatedDate: 2024-03-14 --- +import mobileUnityEditorUI from 'images/mobile_screenshot-crop_Unity-editor-UI.webp' + @@ -47,12 +49,13 @@ freshnessValidatedDate: never Xamarin + + Unity + -## Description [#description] - Use the methods below to change default mobile monitoring settings. All settings, including the call to invoke the agent, are called in the `onCreate` method of the `MainActivity` class. To change settings, you have two options (if the setting supports it): @@ -2190,186 +2193,22 @@ public App () -The Unity agent SDK allows you to configure default settings to change the behavior of the agent. - -If you make any changes to the default settings, make sure to add the feature flags just after calling `appToken`. - -Here's a sample configuration: - -```csharp -public App () - { - InitializeComponent(); - - MainPage = new MainPage(); - Application.Current.PageAppearing += OnPageAppearing; - Application.Current.PageDisappearing += PageDisappearing; +New Relic offers default settings for mobile app monitoring in Unity. You can easily adjust these settings within the Unity editor to fit your specific needs. - CrossNewRelicClient.Current.HandleUncaughtException(); - CrossNewRelicClient.Current.TrackShellNavigatedEvents(); +To configure these settings: - // Set optional agent configuration - // Options are: crashReportingEnabled, loggingEnabled, logLevel, collectorAddress, crashCollectorAddress,analyticsEventEnabled, networkErrorRequestEnabled, networkRequestEnabled, interactionTracingEnabled,webViewInstrumentation, fedRampEnabled,offlineStorageEnabled - AgentStartConfiguration agentConfig = new AgentStartConfiguration(crashReportingEnabled:false,offlineStorageEnabled:false); +1. Launch the Unity Editor and open your Unity project. - if (Device.RuntimePlatform == Device.Android) - { - //CrossNewRelicClient.Current.Start(""); - // Start with optional agent configuration - CrossNewRelicClient.Current.Start(""); - // Start with optional agent configuration - CrossNewRelicClient.Current.Start(" New Relic > Getting Started > New Relic Configuration**. -## Available configurations [#configurations] +3. The left-hand **Inspector** window displays a list of default settings. Simply check the box next to a setting to enable it, or uncheck the box to disable it. - - - - - - - - - - - - - - - - - - - - - - - - + Screenshot of the Unity editor to configure settings - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
- Description - - Example -
- (Android only) Enable or disable collection of event data. - - ```csharp - analyticsEventEnabled: true - ``` -
- Enable or disable crash reporting. - - ```csharp - crashReportingEnabled: true - ``` -
- Enable or disable agent logging. - - ```csharp - loggingEnabled: true - ``` -
- Enable or disable reporting successful HTTP requests to the `MobileRequest` event type. - - ```csharp - networkRequestEnabled: true - ``` -
- Enable or disable reporting network and HTTP request errors to the `MobileRequestError` event type. - - ```csharp - networkErrorRequestEnabled: true - ``` -
- Specifies the log level. Omit this field for the default log level. - - Options include: `ERROR` (least verbose), `WARNING`, `INFO`, `VERBOSE`, `AUDIT` (most verbose). - - ```csharp - logLevel: NREnums.LogLevel.INFO - ``` -
- Set a specific collector address for sending data. Omit this field for default address. - - ```csharp - collectorAddress: "crash-upload-delegate.domain.com" - ``` -
- Set a specific crash collector address for sending crashes. Omit this field for default address. - - ```csharp - crashCollectorAddress: "crash-upload-delegate.domain.com" - ``` -
- Enable or disable interaction tracing. Trace instrumentation still occurs, but no traces are harvested. This will disable default and custom interactions. by default false - - ```csharp - interactionTracingEnabled: false - ``` -
- Enable/Disable automatic instrumentation of WebViews. - - ```csharp - webViewInstrumentation: false - ``` -
- Enable or disable reporting data using different endpoints for US government clients. - - ```csharp - fedRampEnabled: false - ``` -
- Enable or disable offline data storage when no internet connection is available. To configure the amount of offline storage, see [Set max offline storage size](/docs/mobile-monitoring/new-relic-mobile/mobile-sdk/set-max-offline-storage/#unity). - - Offline storage is enabled by default. To disable it, add the following feature flag: - - ```typescript - offlineStorageEnabled: false - ``` -
diff --git a/src/images/mobile_screenshot-crop_Unity-editor-UI.webp b/src/images/mobile_screenshot-crop_Unity-editor-UI.webp new file mode 100644 index 0000000000000000000000000000000000000000..04216e23d4510c23df562773fb82c1713fbda1fe GIT binary patch literal 140795 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≫H@RK6+dLNJMIiY2zyTu#X8D2&;ad$VX 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 z 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 z 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⪙cZ+v8^Xp^bfU*LFRAVa!~5&9Q2Rj7 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

HVE^2o7Gds5y@$UegZOJc8^aqtV z2zOTJMh}42&1kC+T83P0oo=}9{PoT&@70xQgpgmY?FDQ3=ZnU%_r>#L8CmzVvLt1_ z25j!BH#D+oT;f@hFDf0o!K?lB)f#LU5=-X9!Q{V_tl^i}dzLRJ(E#6E7Ay7i+EXM% z=g3;xgP5#jFBsEzHKSx%LLNoc>jmnfE|i+=3X8i&24H9g^3Teb-2s7oge_IlZ9^rqyC_Jqna0)$b~Oz%}}*V#rsH?VE*ytAweWp$Hsf5 zSn=)y4A6eKQT}NNn=VdA!&teCp%)NzJBftlY{-JHo`;WzOEai%E&{da7g{fm@Fpr#S7mUJ7LBRjti`$AZ$DaOYk{;R^6gxP=xeDGOw6*Hjp!h{ zk;cuv!!NGsM%NM`TGNm?csyB}bJUX+)f=>A<2?;EK;;3UO7a)0`5wyV#Buf=h`GVD z$0nxrC=?BLmKOw;Iy*b7%q1ER_xeK|$k&oYro@vzT9-#;do}Rhu&rJmKe8q71ECJS z9&%A1=!#R^!fLI}jOxZuFi7=F1ihfF&c&<(RyldKyM16Id1mnNVb>W&wuTlk5T*}lj_-N2V`Iw~~oz33`1%3dyl)O#Fa= zGhDmJJo?i2Rhc!k2W9KE6f2FTv{?sL2i1hZ3?EePQ|+3sxO4l-{y4L@xL!ei>{3sW zG+)^GP>`#3T#J-$vH$o2sk#-aDZepAnh093-QQYyTQqfHo~ST6VPVF2>!j1!al=;% znU!s+L(%PMQ_*qJs_7du;3+Q#oj)(a#rM69_CLP6>7(n7_{0_OUPP|vD_zbG(Z zZmvP^Gg`yM9I|^FXwi0Zt=9qRp7~Z@3iZ@}M}ct*(uz z=G}g~)o*Z|v6*IB^pc-zPd!m8_IzZBWiv>H9E@sznk4*~8+FB_`7&q9*Q%l=o)N1H z%30rU?_8?gCx4QK$1OMdi~*S~i_>dQ=PSyy%b0`Daj$XYaMM73vz8ma%{ctSt~$M% z!8m8BfTO6m1341hGG}D{#ZM4+uCUC#K2I?n&K@((!9?QAn%}MNW#QC)u=4gjXsOzj zf0ouFLbNMNZR{rgyV<9j%~T5aBZ2nkS_sN|bbII{cC9dV)|_RLbgnFDFH3#A%pTF3 zm_oX?a(vae&BY+kEkY>bdskw;-it*qqoSPK#et)CJ1*UR@-VsG`s{}9M{>h7;fjy2 zOP*_6SDCT`x9$Dv#b$Kg9*nPP(w~gX^*MJoJ*_N4J z=@|ToQCnH`-02mjX~R3MWIEZNJ(pN?IS)$vElN8{t=jds56ECXdK%Fgt#*0R_9yrl z;(aS)keq8H+kkHhadWR`*uPoat=&@R_?0!U$)RGFCnWKxKwrDX!ta7q`(yLAvCxiC z-0G510O>;I}aDdq*PbnO6%nRWAd%^v2r zW*J2!c@Wiznm)ji^jtr3c0c}k5Yt>E3-K__{cbHqs$TzP3w>aaE zZ@3MqTeJrPi4?E7P=s2FqCx;xy*E}q7PZ^R>zN$tP>UCS)nfe(iM+M5t_+mu(f@ss z!Whyz=QGc2#6{d9f6m~T-8c1dCHXi_?4^LrL+t-}H{g3*{`j6jil9=2#_)vv63#-N z7RwDFNrNQenu6?BgDwb>W=`!wgh+Eeg^k*t@%XAg zJ3{_h*RscesmjHLeEHWe{&Rl*{d_SiAQ~!^SY`Tm(a`WdLbboY@|FCk4_8kS{cIXv zvdP0{@f(0zu&m) z--iU5mJs5#xltqb_iOp}OL%FF^8eR^lKQKwO^uBw4V0dKnEGbe_&*$e|8qzj$vt2B z7vbVRJ{!SUP#e+~pEcw7*P)xroNDFi;n8W(A{Ms#?|0+;UOZ~)35mM<-`feWGP3Tf zK-4EwHEw2rp8VsP{?~{XQ4WATM)lTLR3K4mmP*0oUq^lHA(1^;<)`;i6-=oPQivz6F@l%MI||KBI2!K{Mcun0f?Jdcxm8|60mqk8_rxjaP-?*9O%zaC-$ literal 0 HcmV?d00001 From 1eca5d6bf90465fca667a163c3664a23ef5b9978 Mon Sep 17 00:00:00 2001 From: a-sassman Date: Wed, 13 Mar 2024 15:26:48 -0700 Subject: [PATCH 080/124] chore(mobile): add final unity step --- .../new-relic-mobile/mobile-sdk/configure-settings.mdx | 2 ++ .../mobile-sdk/set-max-offline-storage.mdx | 8 +------- 2 files changed, 3 insertions(+), 7 deletions(-) diff --git a/src/content/docs/mobile-monitoring/new-relic-mobile/mobile-sdk/configure-settings.mdx b/src/content/docs/mobile-monitoring/new-relic-mobile/mobile-sdk/configure-settings.mdx index ebd982186f8..4a6fc523a02 100644 --- a/src/content/docs/mobile-monitoring/new-relic-mobile/mobile-sdk/configure-settings.mdx +++ b/src/content/docs/mobile-monitoring/new-relic-mobile/mobile-sdk/configure-settings.mdx @@ -2203,6 +2203,8 @@ To configure these settings: 3. The left-hand **Inspector** window displays a list of default settings. Simply check the box next to a setting to enable it, or uncheck the box to disable it. +4. Click **Add component**. + Screenshot of the Unity editor to configure settings -Offline storage is enabled by default. If you need to disable it, add the following feature flag: - -```typescript -offlineStorageEnabled: false -``` - -For details on adding feature flags, see [Configure mobile monitoring settings](/docs/mobile-monitoring/new-relic-mobile/mobile-sdk/configure-settings/#flutter). +Offline storage is enabled by default. If you need to disable it, see [Configure mobile monitoring settings](/docs/mobile-monitoring/new-relic-mobile/mobile-sdk/configure-settings/#unity). ## Syntax [#syntax] From e0d5d4fb1964b9640654b145933cc88e1e44501c Mon Sep 17 00:00:00 2001 From: a-sassman Date: Wed, 13 Mar 2024 15:30:26 -0700 Subject: [PATCH 081/124] fix(mobile): fix incorrect unity code sample --- .../new-relic-mobile/mobile-sdk/set-max-offline-storage.mdx | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/src/content/docs/mobile-monitoring/new-relic-mobile/mobile-sdk/set-max-offline-storage.mdx b/src/content/docs/mobile-monitoring/new-relic-mobile/mobile-sdk/set-max-offline-storage.mdx index fa6e2bacbcf..d4c8d346bd7 100644 --- a/src/content/docs/mobile-monitoring/new-relic-mobile/mobile-sdk/set-max-offline-storage.mdx +++ b/src/content/docs/mobile-monitoring/new-relic-mobile/mobile-sdk/set-max-offline-storage.mdx @@ -587,7 +587,7 @@ Offline storage is enabled by default. If you need to disable it, see [Configure ## Syntax [#syntax] ```csharp -SetMaxEventPoolSize(int maxPoolSize): void; +SetMaxOfflineStorageSize(int maxOfflineStorageSize): void; ``` @@ -614,7 +614,7 @@ SetMaxEventPoolSize(int maxPoolSize): void; - `maxPoolSize` + `maxOfflineStorageSize` @@ -622,7 +622,7 @@ SetMaxEventPoolSize(int maxPoolSize): void; - Required. Maximum size in megaBytes that can be stored in the file system.. + Required. Maximum size in megaBytes that can be stored in the file system. From 781afbfb52f8d01c1bc323d69b1032f3f3b8dbce Mon Sep 17 00:00:00 2001 From: Sadaf Arshad Date: Wed, 13 Mar 2024 16:12:36 -0700 Subject: [PATCH 082/124] add: DoNotTranslate for bold terms --- .../private-locations/job-manager-configuration.mdx | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/content/docs/synthetics/synthetic-monitoring/private-locations/job-manager-configuration.mdx b/src/content/docs/synthetics/synthetic-monitoring/private-locations/job-manager-configuration.mdx index f6580571cba..e4a0c71724f 100644 --- a/src/content/docs/synthetics/synthetic-monitoring/private-locations/job-manager-configuration.mdx +++ b/src/content/docs/synthetics/synthetic-monitoring/private-locations/job-manager-configuration.mdx @@ -210,7 +210,7 @@ Environmental variables allow you to fine-tune the synthetics job manager config - If set, enables **verified script execution** and uses this value as a **passphrase**. + If set, enables **verified script execution** and uses this value as a **passphrase**. @@ -346,7 +346,7 @@ Environmental variables allow you to fine-tune the synthetics job manager config - If set, it enables **verified script execution**, and uses this value as a **passphrase**. + If set, it enables **verified script execution**, and uses this value as a **passphrase**. From a6f1c93b3de9848d656b66a664c502e82643ce45 Mon Sep 17 00:00:00 2001 From: Liz Baker Date: Thu, 14 Mar 2024 08:54:25 -0700 Subject: [PATCH 083/124] chore: Increase category font weight --- src/components/Navigation.js | 1 + 1 file changed, 1 insertion(+) diff --git a/src/components/Navigation.js b/src/components/Navigation.js index 0fb9b8db320..bb865b60311 100644 --- a/src/components/Navigation.js +++ b/src/components/Navigation.js @@ -59,6 +59,7 @@ const Navigation = ({ nav, className }) => { opacity: 0.7; margin: 0; font-size: 14px; + font-weight: 500; margin-top: 1rem; `} > From 0cf881164881fd9d18b37b29aa02bf38c33ceffa Mon Sep 17 00:00:00 2001 From: Johnathan Date: Thu, 14 Mar 2024 09:27:48 -0700 Subject: [PATCH 084/124] Removal of FedRAMP links --- .../fedramp-moderate.mdx | 7 ------- 1 file changed, 7 deletions(-) diff --git a/src/content/docs/security/security-privacy/compliance/certificates-standards-regulations/fedramp-moderate.mdx b/src/content/docs/security/security-privacy/compliance/certificates-standards-regulations/fedramp-moderate.mdx index 0a483746d20..fe76d5a7727 100644 --- a/src/content/docs/security/security-privacy/compliance/certificates-standards-regulations/fedramp-moderate.mdx +++ b/src/content/docs/security/security-privacy/compliance/certificates-standards-regulations/fedramp-moderate.mdx @@ -85,10 +85,6 @@ The following services are not FedRAMP-authorized: - - [FedRAMP Moderate](https://marketplace.fedramp.gov/products/F1607057910) - - N/A @@ -103,9 +99,6 @@ The following services are not FedRAMP-authorized: - - [FedRAMP Moderate](https://marketplace.fedramp.gov/products/F1607057910) - N/A From f3b30289dcd6e8481ac92367f56955a2faf0841c Mon Sep 17 00:00:00 2001 From: Johnathan Date: Thu, 14 Mar 2024 09:49:53 -0700 Subject: [PATCH 085/124] Updating .yml link for iso-27001 --- src/nav/new-relic-security.yml | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/nav/new-relic-security.yml b/src/nav/new-relic-security.yml index d36b34e9d25..8b1cf8a9499 100644 --- a/src/nav/new-relic-security.yml +++ b/src/nav/new-relic-security.yml @@ -29,8 +29,8 @@ pages: path: /docs/security/security-privacy/compliance/certificates-standards-regulations/hipaa - title: HITRUST CSF path: /docs/security/security-privacy/compliance/hitrust - - title: ISO - path: /docs/security/security-privacy/compliance/certificates-standards-regulations/iso + - title: ISO 27001 + path: /docs/security/security-privacy/compliance/certificates-standards-regulations/iso-27001 - title: SOC 2 path: /docs/security/security-privacy/compliance/certificates-standards-regulations/soc2 - title: TISAX From bad819bbe599a7fc7bcfdcc0a50a17385c6261a0 Mon Sep 17 00:00:00 2001 From: Clark McAdoo Date: Thu, 14 Mar 2024 15:52:34 -0500 Subject: [PATCH 086/124] fix: update left nav to clip at bottom of page --- src/layouts/MainLayout.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/layouts/MainLayout.js b/src/layouts/MainLayout.js index 46a380ec36f..46094e0594d 100644 --- a/src/layouts/MainLayout.js +++ b/src/layouts/MainLayout.js @@ -224,7 +224,7 @@ const MainLayout = ({ children, pageContext }) => { overflow-x: hidden; height: calc( 100vh - ${navHeaderHeight} - var(--global-header-height) - - 4rem + 3rem ); `} /> From fd8beafc4db1a7914b208d01de03b57d82931e30 Mon Sep 17 00:00:00 2001 From: Tabatha Zeitke Date: Thu, 14 Mar 2024 16:33:01 -0500 Subject: [PATCH 087/124] Hide pageTools on small screen widths --- src/templates/docPage.js | 7 ++----- 1 file changed, 2 insertions(+), 5 deletions(-) diff --git a/src/templates/docPage.js b/src/templates/docPage.js index b94dc2fc0c0..0b07b754006 100644 --- a/src/templates/docPage.js +++ b/src/templates/docPage.js @@ -99,13 +99,11 @@ const BasicDoc = ({ data, location, pageContext }) => { iframe { max-width: 100%; } - @media screen and (max-width: 1240px) { grid-template-areas: 'mt-disclaimer' 'page-title' - 'content' - 'page-tools'; + 'content'; grid-template-columns: minmax(0, 1fr); } `} @@ -160,8 +158,7 @@ const BasicDoc = ({ data, location, pageContext }) => { } @media screen and (max-width: 1240px) { - margin-top: 1rem; - position: static; + display: none; } `} > From d3ffc7fd818e67043d21cbc0cbf7124d893aea1a Mon Sep 17 00:00:00 2001 From: Max Lemieux Date: Thu, 14 Mar 2024 16:09:32 -0700 Subject: [PATCH 088/124] [chore] Update infrastructure-agent-configuration-settings.mdx fix spelling of "integrations" --- .../infrastructure-agent-configuration-settings.mdx | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/content/docs/infrastructure/install-infrastructure-agent/configuration/infrastructure-agent-configuration-settings.mdx b/src/content/docs/infrastructure/install-infrastructure-agent/configuration/infrastructure-agent-configuration-settings.mdx index be1c224a822..bd176e62918 100644 --- a/src/content/docs/infrastructure/install-infrastructure-agent/configuration/infrastructure-agent-configuration-settings.mdx +++ b/src/content/docs/infrastructure/install-infrastructure-agent/configuration/infrastructure-agent-configuration-settings.mdx @@ -1555,7 +1555,7 @@ Metrics can also be enriched with extended cloud metadata (including custom reso Linux: `etc/newrelic-infra/integrations.d/` - Windows: `\Program Files\NewRelic\newrelic-infra\inregrations.d` + Windows: `\Program Files\NewRelic\newrelic-infra\integrations.d` From 95ff6b1c38d56c4f3ad1ab47ba4efb7477033091 Mon Sep 17 00:00:00 2001 From: Rob Siebens Date: Thu, 14 Mar 2024 16:25:21 -0700 Subject: [PATCH 089/124] fix(Synthetics): Clarify custom and hosted modules --- .../containerized-private-minion-cpm-configuration.mdx | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/content/docs/synthetics/synthetic-monitoring/private-locations/containerized-private-minion-cpm-configuration.mdx b/src/content/docs/synthetics/synthetic-monitoring/private-locations/containerized-private-minion-cpm-configuration.mdx index 7a04c7fef54..5df6afd0997 100644 --- a/src/content/docs/synthetics/synthetic-monitoring/private-locations/containerized-private-minion-cpm-configuration.mdx +++ b/src/content/docs/synthetics/synthetic-monitoring/private-locations/containerized-private-minion-cpm-configuration.mdx @@ -138,7 +138,7 @@ Now you can add `"require('async');"` into the [script](/docs/synthetics/new-rel ### Change `package.json` for custom modules [#change-package-json] -Along with hosted modules, you can also use [Node.js modules](/docs/synthetics/new-relic-synthetics/scripting-monitors/import-nodejs-modules). To change the custom modules used by your CPM, modify `package.json` and reboot the CPM. It will detect the change in configuration during the reboot, and then clean up and re-install. +Along with custom and hosted modules, you can also use [Node.js modules](/docs/synthetics/new-relic-synthetics/scripting-monitors/import-nodejs-modules). To change the custom modules used by your CPM, modify `package.json` and reboot the CPM. It will detect the change in configuration during the reboot, and then clean up and re-install. Local modules: While your `package.json` can include any local module, these modules must reside inside the tree under your custom module directory. If stored outside the tree, the initialization process will fail and you will see an error message in the [docker logs](/docs/synthetics/new-relic-synthetics/private-locations/containerized-private-minion-cpm-maintenance-monitoring#monitor-docker-logs) after launching CPM. From 1236e76ab019f03495352e1afd12cedf8b3c9990 Mon Sep 17 00:00:00 2001 From: Rob Siebens Date: Thu, 14 Mar 2024 16:29:39 -0700 Subject: [PATCH 090/124] fix(AWS Lambda): Remove reference to .NET and OTel --- .../compatibility-requirements-aws-lambda-monitoring.mdx | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/content/docs/serverless-function-monitoring/aws-lambda-monitoring/get-started/compatibility-requirements-aws-lambda-monitoring.mdx b/src/content/docs/serverless-function-monitoring/aws-lambda-monitoring/get-started/compatibility-requirements-aws-lambda-monitoring.mdx index 421b5f18544..1808010a818 100644 --- a/src/content/docs/serverless-function-monitoring/aws-lambda-monitoring/get-started/compatibility-requirements-aws-lambda-monitoring.mdx +++ b/src/content/docs/serverless-function-monitoring/aws-lambda-monitoring/get-started/compatibility-requirements-aws-lambda-monitoring.mdx @@ -23,7 +23,7 @@ Python and Node.js are by far the most popular languages in the Lambda ecosystem Similarly, Go uses the New Relic Go agent. New Relic recommends keeping the agent module up to date. Support is limited for agent versions older than 3.16.0. -To minimize performance impact, we've taken a different approach with Java. New Relic provides the [OpenTracing](https://opentracing.io/) SDK for Java runtimes. This approach requires a bit more code to integrate. For newer runtimes, such as .NET 6, [Trace your .NET Lambda functions with New Relic and OpenTelemetry](/docs/serverless-function-monitoring/aws-lambda-monitoring/opentelemetry/lambda-opentelemetry-dotnet/) is available. +To minimize performance impact, we've taken a different approach with Java. New Relic provides the [OpenTracing](https://opentracing.io/) SDK for Java runtimes. This approach requires a bit more code to integrate. For complete Lambda instrumentation, some of our agents included in our Lambda layers depend on a language-specific [AWS SDK](https://aws.amazon.com/tools/#sdk). If an AWS SDK is not used, Lambda data will appear as external service calls in the UI, with minimal detail. In other words, we rely on the AWS SDK to facilitate instrumentation of your function. From a668f3b8f027aaeaccf93ab9451c1a7136c3bfec Mon Sep 17 00:00:00 2001 From: jmiraNR <71030271+jmiraNR@users.noreply.github.com> Date: Thu, 14 Mar 2024 17:45:44 -0600 Subject: [PATCH 091/124] Clarification of JP translation Clarification of JP translation --- .../logs/logs-context/java-configure-logs-context-all.mdx | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/i18n/content/jp/docs/logs/logs-context/java-configure-logs-context-all.mdx b/src/i18n/content/jp/docs/logs/logs-context/java-configure-logs-context-all.mdx index 74bb42be316..ffdf77a0d88 100644 --- a/src/i18n/content/jp/docs/logs/logs-context/java-configure-logs-context-all.mdx +++ b/src/i18n/content/jp/docs/logs/logs-context/java-configure-logs-context-all.mdx @@ -257,7 +257,7 @@ Java エージェントにログを転送させるのではなく、独自のロ 言語エージェントがログを転送および装飾できるようになる前は、手動ソリューションを使用してリンクメタデータを送信できました。 -このオプションは引き続きサポートされていますが、推奨されなくなりました。また、この方法では、コンテキストでログを有効にする前に、ログフォワーダーをインストールする必要があります。ログフォワーダーがない場合は、NewRelicUIで[インフラストラクチャエージェント](/docs/logs/forward-logs/forward-your-logs-using-infrastructure-agent/)を使用するように求められます。 +このオプションは引き続きサポートされていますが、おすすめしません。また、この方法では、コンテキストでログを有効にする前に、ログフォワーダーをインストールする必要があります。ログフォワーダーがない場合は、NewRelicUIで[インフラストラクチャエージェント](/docs/logs/forward-logs/forward-your-logs-using-infrastructure-agent/)を使用するように求められます。 既存のログ転送ソリューションを使用することにし、後でエージェントを更新してコンテキストで自動ログを使用することにした場合は、必ず**手動ログ転送を無効にしてください**。それ以外の場合、アプリは二重のログ行を送信します。アカウントによっては、これにより二重請求が発生する可能性があります。詳細については、手順に従って[特定のログフォワーダー](/docs/logs/forward-logs/enable-log-management-new-relic#log-forwarding)を無効にしてください。 @@ -767,4 +767,4 @@ Java エージェントにログを転送させるのではなく、独自のロ Springバージョン4以前では、ブリッジに[ApacheCommonsLogging](https://commons.apache.org/proper/commons-logging/guide.html)を使用しています。ブリッジの構成については、 [Springのドキュメント](https://docs.spring.io/spring/docs/4.3.12.RELEASE/spring-framework-reference/html/overview.html#overview-logging)を参照してください。 - \ No newline at end of file + From c9c9a0ffe008513098c5bebc0e38d22859727471 Mon Sep 17 00:00:00 2001 From: Rob Siebens Date: Thu, 14 Mar 2024 17:07:51 -0700 Subject: [PATCH 092/124] fix(synthetics): Clarify labels in installation doc. --- .../containerized-private-minion-cpm-configuration.mdx | 2 +- .../install-containerized-private-minions-cpms.mdx | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/src/content/docs/synthetics/synthetic-monitoring/private-locations/containerized-private-minion-cpm-configuration.mdx b/src/content/docs/synthetics/synthetic-monitoring/private-locations/containerized-private-minion-cpm-configuration.mdx index 5df6afd0997..976a2a35661 100644 --- a/src/content/docs/synthetics/synthetic-monitoring/private-locations/containerized-private-minion-cpm-configuration.mdx +++ b/src/content/docs/synthetics/synthetic-monitoring/private-locations/containerized-private-minion-cpm-configuration.mdx @@ -138,7 +138,7 @@ Now you can add `"require('async');"` into the [script](/docs/synthetics/new-rel ### Change `package.json` for custom modules [#change-package-json] -Along with custom and hosted modules, you can also use [Node.js modules](/docs/synthetics/new-relic-synthetics/scripting-monitors/import-nodejs-modules). To change the custom modules used by your CPM, modify `package.json` and reboot the CPM. It will detect the change in configuration during the reboot, and then clean up and re-install. +Along with local and hosted modules, you can also use [Node.js modules](/docs/synthetics/new-relic-synthetics/scripting-monitors/import-nodejs-modules). To change the custom modules used by your CPM, modify `package.json` and reboot the CPM. It will detect the change in configuration during the reboot, and then clean up and re-install. Local modules: While your `package.json` can include any local module, these modules must reside inside the tree under your custom module directory. If stored outside the tree, the initialization process will fail and you will see an error message in the [docker logs](/docs/synthetics/new-relic-synthetics/private-locations/containerized-private-minion-cpm-maintenance-monitoring#monitor-docker-logs) after launching CPM. diff --git a/src/content/docs/synthetics/synthetic-monitoring/private-locations/install-containerized-private-minions-cpms.mdx b/src/content/docs/synthetics/synthetic-monitoring/private-locations/install-containerized-private-minions-cpms.mdx index 7e628e75eed..2c9a9d4951f 100644 --- a/src/content/docs/synthetics/synthetic-monitoring/private-locations/install-containerized-private-minions-cpms.mdx +++ b/src/content/docs/synthetics/synthetic-monitoring/private-locations/install-containerized-private-minions-cpms.mdx @@ -579,7 +579,7 @@ Some of our open-source software is listed under multiple software licenses, and ## Configure CPM [#configuration] -You can configure the containerized private minion with custom npm modules, preserve data between launches, use environment variables, and more. For more information, see [CPM configuration](/docs/synthetics/new-relic-synthetics/private-locations/containerized-private-minion-cpm-configuration). +You can configure the containerized private minion with custom node modules, preserve data between launches, use environment variables, and more. For more information, see [CPM configuration](/docs/synthetics/new-relic-synthetics/private-locations/containerized-private-minion-cpm-configuration). ## Networks From fc6fff8a55eab1d6bcd0e92762765ccca33aa6e3 Mon Sep 17 00:00:00 2001 From: Rob Siebens Date: Thu, 14 Mar 2024 18:01:21 -0700 Subject: [PATCH 093/124] Rename file from legacy to layerless --- ....mdx => enable-serverless-monitoring-aws-lambda-layerless.mdx} | 0 1 file changed, 0 insertions(+), 0 deletions(-) rename src/content/docs/serverless-function-monitoring/aws-lambda-monitoring/enable-lambda-monitoring/{enable-serverless-monitoring-aws-lambda-legacy.mdx => enable-serverless-monitoring-aws-lambda-layerless.mdx} (100%) diff --git a/src/content/docs/serverless-function-monitoring/aws-lambda-monitoring/enable-lambda-monitoring/enable-serverless-monitoring-aws-lambda-legacy.mdx b/src/content/docs/serverless-function-monitoring/aws-lambda-monitoring/enable-lambda-monitoring/enable-serverless-monitoring-aws-lambda-layerless.mdx similarity index 100% rename from src/content/docs/serverless-function-monitoring/aws-lambda-monitoring/enable-lambda-monitoring/enable-serverless-monitoring-aws-lambda-legacy.mdx rename to src/content/docs/serverless-function-monitoring/aws-lambda-monitoring/enable-lambda-monitoring/enable-serverless-monitoring-aws-lambda-layerless.mdx From 2d9de12093a9e45065fbd948e5d676de4128e6de Mon Sep 17 00:00:00 2001 From: Rob Siebens Date: Thu, 14 Mar 2024 18:03:01 -0700 Subject: [PATCH 094/124] Update enable-serverless-monitoring-aws-lambda-layerless.mdx --- .../enable-serverless-monitoring-aws-lambda-layerless.mdx | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/src/content/docs/serverless-function-monitoring/aws-lambda-monitoring/enable-lambda-monitoring/enable-serverless-monitoring-aws-lambda-layerless.mdx b/src/content/docs/serverless-function-monitoring/aws-lambda-monitoring/enable-lambda-monitoring/enable-serverless-monitoring-aws-lambda-layerless.mdx index 6e436eb23e7..25f66e78971 100644 --- a/src/content/docs/serverless-function-monitoring/aws-lambda-monitoring/enable-lambda-monitoring/enable-serverless-monitoring-aws-lambda-layerless.mdx +++ b/src/content/docs/serverless-function-monitoring/aws-lambda-monitoring/enable-lambda-monitoring/enable-serverless-monitoring-aws-lambda-layerless.mdx @@ -1,5 +1,5 @@ --- -title: Legacy manual instrumentation for Lambda monitoring +title: Layerless instrumentation for Lambda monitoring metaDescription: Legacy instructions for manually enabling New Relic monitoring for AWS Lambda. redirects: - /docs/install-enable-new-relics-monitoring-aws-lambda @@ -8,6 +8,7 @@ redirects: - /docs/serverless-function-monitoring/aws-lambda-monitoring/get-started/enable-serverless-monitoring-aws-lambda - /docs/serverless-function-monitoring/aws-lambda-monitoring/enable-lambda-monitoring/enable-serverless-monitoring-aws-lambda - /docs/understand-dependencies/distributed-tracing/enable-configure/aws-lambda + - /docs/serverless-function-monitoring/aws-lambda-monitoring/enable-lambda-monitoring/enable-serverless-monitoring-aws-lambda-legacy freshnessValidatedDate: never --- From d2c7aa8d341f0e9385c07993c0e2be47689aee2e Mon Sep 17 00:00:00 2001 From: nr-opensource-bot Date: Fri, 15 Mar 2024 12:03:50 +0000 Subject: [PATCH 095/124] chore: add translations --- .../incident-workflows/incident-workflows.mdx | 2 +- .../alerts-applied-intelligence/overview.mdx | 2 - .../introduction-new-relic-apis.mdx | 2 - .../introduction-new-relic-nerdgraph.mdx | 2 - .../include-java-agent-jvm-argument.mdx | 2 - .../java-agent-configuration-config-file.mdx | 5782 +++++ .../introduction-new-relic-nodejs.mdx | 137 + .../install-nodejs-agent.mdx | 132 + ...ntainer-environments-install-php-agent.mdx | 134 + .../introduction-new-relic-php.mdx | 173 + .../php-agent-compatibility-requirements.mdx | 38 +- .../python-agent-configuration.mdx | 5205 +++++ .../backgroundtask-python-agent-api.mdx | 251 + .../apdex/apdex-measure-user-satisfaction.mdx | 315 + .../introduction-browser-monitoring.mdx | 1 - .../install-browser-monitoring-agent.mdx | 2 - .../start-here/what-is-codestream.mdx | 58 + .../event-api/introduction-event-api.mdx | 2 - .../understand-data/new-relic-data-types.mdx | 2 - .../introduction-distributed-tracing.mdx | 45 + .../get-started/aws-integrations-metrics.mdx | 18189 ++++++++++++++++ .../get-started-infrastructure-monitoring.mdx | 147 + .../install-infrastructure-agent.mdx | 115 + ...-infrastructure-monitoring-agent-linux.mdx | 670 + ...tart-stop-restart-infrastructure-agent.mdx | 409 + .../enable-log-management-new-relic.mdx | 235 + .../get-started-log-management.mdx | 103 + .../logs/log-api/introduction-log-api.mdx | 1036 + .../dashboards/introduction-dashboards.mdx | 273 + .../get-started-synthetic-monitoring.mdx | 251 + .../guide-to-monitoring-core-web-vitals.mdx | 303 + ...-password-email-address-login-problems.mdx | 10 +- .../incident-workflows/incident-workflows.mdx | 61 +- .../alerts-applied-intelligence/overview.mdx | 44 +- ...ntainer-environments-install-php-agent.mdx | 22 +- .../python-agent-configuration.mdx | 52 +- .../backgroundtask-python-agent-api.mdx | 28 +- .../get-started/aws-integrations-metrics.mdx | 4501 ++++ .../logs/log-api/introduction-log-api.mdx | 36 +- .../guide-to-monitoring-core-web-vitals.mdx | 115 +- ...-password-email-address-login-problems.mdx | 10 +- .../incident-workflows/incident-workflows.mdx | 61 +- .../alerts-applied-intelligence/overview.mdx | 44 +- .../introduction-new-relic-apis.mdx | 4 +- .../introduction-new-relic-nerdgraph.mdx | 17 +- .../introduction-new-relic-nodejs.mdx | 4 +- ...ntainer-environments-install-php-agent.mdx | 22 +- .../introduction-new-relic-php.mdx | 30 +- .../python-agent-configuration.mdx | 40 +- .../introduction-new-relic-python.mdx | 2 - .../backgroundtask-python-agent-api.mdx | 28 +- .../event-api/introduction-event-api.mdx | 32 +- .../introduction-distributed-tracing.mdx | 16 +- .../get-started/aws-integrations-metrics.mdx | 4501 ++++ .../requirements-infrastructure-agent.mdx | 35 +- .../logs/log-api/introduction-log-api.mdx | 36 +- .../introduction-new-relic-platform.mdx | 57 +- .../get-started-synthetic-monitoring.mdx | 21 +- .../guide-to-monitoring-core-web-vitals.mdx | 115 +- .../incident-workflows/incident-workflows.mdx | 2 +- .../alerts-applied-intelligence/overview.mdx | 2 - .../introduction-new-relic-apis.mdx | 2 - .../introduction-new-relic-nerdgraph.mdx | 2 - .../include-java-agent-jvm-argument.mdx | 2 - .../java-agent-configuration-config-file.mdx | 5782 +++++ .../introduction-new-relic-nodejs.mdx | 137 + .../install-nodejs-agent.mdx | 132 + ...ntainer-environments-install-php-agent.mdx | 134 + .../introduction-new-relic-php.mdx | 173 + .../php-agent-compatibility-requirements.mdx | 38 +- .../python-agent-configuration.mdx | 5205 +++++ .../backgroundtask-python-agent-api.mdx | 251 + .../apdex/apdex-measure-user-satisfaction.mdx | 315 + .../introduction-browser-monitoring.mdx | 1 - .../install-browser-monitoring-agent.mdx | 4 +- .../start-here/what-is-codestream.mdx | 58 + .../event-api/introduction-event-api.mdx | 2 - .../understand-data/new-relic-data-types.mdx | 2 - .../introduction-distributed-tracing.mdx | 45 + .../get-started/aws-integrations-metrics.mdx | 18189 ++++++++++++++++ .../get-started-infrastructure-monitoring.mdx | 147 + .../install-infrastructure-agent.mdx | 115 + ...-infrastructure-monitoring-agent-linux.mdx | 670 + ...tart-stop-restart-infrastructure-agent.mdx | 409 + .../enable-log-management-new-relic.mdx | 235 + .../get-started-log-management.mdx | 103 + .../logs/log-api/introduction-log-api.mdx | 1036 + .../dashboards/introduction-dashboards.mdx | 273 + .../get-started-synthetic-monitoring.mdx | 251 + .../guide-to-monitoring-core-web-vitals.mdx | 303 + 90 files changed, 77607 insertions(+), 375 deletions(-) create mode 100644 src/i18n/content/es/docs/apm/agents/java-agent/configuration/java-agent-configuration-config-file.mdx create mode 100644 src/i18n/content/es/docs/apm/agents/nodejs-agent/getting-started/introduction-new-relic-nodejs.mdx create mode 100644 src/i18n/content/es/docs/apm/agents/nodejs-agent/installation-configuration/install-nodejs-agent.mdx create mode 100644 src/i18n/content/es/docs/apm/agents/php-agent/advanced-installation/docker-other-container-environments-install-php-agent.mdx create mode 100644 src/i18n/content/es/docs/apm/agents/php-agent/getting-started/introduction-new-relic-php.mdx create mode 100644 src/i18n/content/es/docs/apm/agents/python-agent/configuration/python-agent-configuration.mdx create mode 100644 src/i18n/content/es/docs/apm/agents/python-agent/python-agent-api/backgroundtask-python-agent-api.mdx create mode 100644 src/i18n/content/es/docs/apm/new-relic-apm/apdex/apdex-measure-user-satisfaction.mdx create mode 100644 src/i18n/content/es/docs/codestream/start-here/what-is-codestream.mdx create mode 100644 src/i18n/content/es/docs/distributed-tracing/concepts/introduction-distributed-tracing.mdx create mode 100644 src/i18n/content/es/docs/infrastructure/amazon-integrations/get-started/aws-integrations-metrics.mdx create mode 100644 src/i18n/content/es/docs/infrastructure/infrastructure-monitoring/get-started/get-started-infrastructure-monitoring.mdx create mode 100644 src/i18n/content/es/docs/infrastructure/install-infrastructure-agent/get-started/install-infrastructure-agent.mdx create mode 100644 src/i18n/content/es/docs/infrastructure/install-infrastructure-agent/linux-installation/install-infrastructure-monitoring-agent-linux.mdx create mode 100644 src/i18n/content/es/docs/infrastructure/install-infrastructure-agent/manage-your-agent/start-stop-restart-infrastructure-agent.mdx create mode 100644 src/i18n/content/es/docs/logs/forward-logs/enable-log-management-new-relic.mdx create mode 100644 src/i18n/content/es/docs/logs/get-started/get-started-log-management.mdx create mode 100644 src/i18n/content/es/docs/logs/log-api/introduction-log-api.mdx create mode 100644 src/i18n/content/es/docs/query-your-data/explore-query-data/dashboards/introduction-dashboards.mdx create mode 100644 src/i18n/content/es/docs/synthetics/synthetic-monitoring/getting-started/get-started-synthetic-monitoring.mdx create mode 100644 src/i18n/content/es/docs/tutorial-improve-site-performance/guide-to-monitoring-core-web-vitals.mdx create mode 100644 src/i18n/content/pt/docs/apm/agents/java-agent/configuration/java-agent-configuration-config-file.mdx create mode 100644 src/i18n/content/pt/docs/apm/agents/nodejs-agent/getting-started/introduction-new-relic-nodejs.mdx create mode 100644 src/i18n/content/pt/docs/apm/agents/nodejs-agent/installation-configuration/install-nodejs-agent.mdx create mode 100644 src/i18n/content/pt/docs/apm/agents/php-agent/advanced-installation/docker-other-container-environments-install-php-agent.mdx create mode 100644 src/i18n/content/pt/docs/apm/agents/php-agent/getting-started/introduction-new-relic-php.mdx create mode 100644 src/i18n/content/pt/docs/apm/agents/python-agent/configuration/python-agent-configuration.mdx create mode 100644 src/i18n/content/pt/docs/apm/agents/python-agent/python-agent-api/backgroundtask-python-agent-api.mdx create mode 100644 src/i18n/content/pt/docs/apm/new-relic-apm/apdex/apdex-measure-user-satisfaction.mdx create mode 100644 src/i18n/content/pt/docs/codestream/start-here/what-is-codestream.mdx create mode 100644 src/i18n/content/pt/docs/distributed-tracing/concepts/introduction-distributed-tracing.mdx create mode 100644 src/i18n/content/pt/docs/infrastructure/amazon-integrations/get-started/aws-integrations-metrics.mdx create mode 100644 src/i18n/content/pt/docs/infrastructure/infrastructure-monitoring/get-started/get-started-infrastructure-monitoring.mdx create mode 100644 src/i18n/content/pt/docs/infrastructure/install-infrastructure-agent/get-started/install-infrastructure-agent.mdx create mode 100644 src/i18n/content/pt/docs/infrastructure/install-infrastructure-agent/linux-installation/install-infrastructure-monitoring-agent-linux.mdx create mode 100644 src/i18n/content/pt/docs/infrastructure/install-infrastructure-agent/manage-your-agent/start-stop-restart-infrastructure-agent.mdx create mode 100644 src/i18n/content/pt/docs/logs/forward-logs/enable-log-management-new-relic.mdx create mode 100644 src/i18n/content/pt/docs/logs/get-started/get-started-log-management.mdx create mode 100644 src/i18n/content/pt/docs/logs/log-api/introduction-log-api.mdx create mode 100644 src/i18n/content/pt/docs/query-your-data/explore-query-data/dashboards/introduction-dashboards.mdx create mode 100644 src/i18n/content/pt/docs/synthetics/synthetic-monitoring/getting-started/get-started-synthetic-monitoring.mdx create mode 100644 src/i18n/content/pt/docs/tutorial-improve-site-performance/guide-to-monitoring-core-web-vitals.mdx diff --git a/src/i18n/content/es/docs/alerts-applied-intelligence/applied-intelligence/incident-workflows/incident-workflows.mdx b/src/i18n/content/es/docs/alerts-applied-intelligence/applied-intelligence/incident-workflows/incident-workflows.mdx index 5df73c74876..eaa8b05f9c6 100644 --- a/src/i18n/content/es/docs/alerts-applied-intelligence/applied-intelligence/incident-workflows/incident-workflows.mdx +++ b/src/i18n/content/es/docs/alerts-applied-intelligence/applied-intelligence/incident-workflows/incident-workflows.mdx @@ -187,7 +187,7 @@ La característica de flujo de trabajo se encuentra en el menú id="enrichments" title="Cómo enriquecer los datos" > - Actualmente, solo puedes enviar salidas JSON o numéricas a [destinos](/docs/alerts-applied-intelligence/notifications/destinations/) de Webhook, Jira y ServiceNow, y solo imágenes a otros destinos como Slack, PagerDuty y correo electrónico. Para obtener mejores resultados en Webhook, Jira y ServiceNow, utilice una consulta que tenga un resultado de un solo valor, como `count`, `min` o `max`. + Actualmente, solo puedes enviar salidas JSON o numéricas a [destinos](/docs/alerts-applied-intelligence/notifications/destinations/) de Webhook y Jira. Además, solo puedes enviar imágenes a otros destinos como Slack, PagerDuty, ServiceNow (aplicación) y correo electrónico. Para obtener mejores resultados en Webhook y Jira, utilice una consulta que tenga un resultado de un solo valor, como `count`, `min` o `max`. Detalles sobre el uso de enriquecimientos: diff --git a/src/i18n/content/es/docs/alerts-applied-intelligence/overview.mdx b/src/i18n/content/es/docs/alerts-applied-intelligence/overview.mdx index 623c05f5a18..a236b339a5b 100644 --- a/src/i18n/content/es/docs/alerts-applied-intelligence/overview.mdx +++ b/src/i18n/content/es/docs/alerts-applied-intelligence/overview.mdx @@ -3,8 +3,6 @@ title: Introducción a la alerta y la inteligencia aplicada. metaDescription: 'An overview of how you can use alerts and applied intelligence to monitor your systems and be notified when things go wrong, and when they''re starting to go wrong.' tags: - Alerts and applied intelligence -signupBanner: - text: Monitor and improve your entire stack. 100GB free. Forever. freshnessValidatedDate: never translationType: machine --- diff --git a/src/i18n/content/es/docs/apis/intro-apis/introduction-new-relic-apis.mdx b/src/i18n/content/es/docs/apis/intro-apis/introduction-new-relic-apis.mdx index 326c9b99b91..1c0ab4b1552 100644 --- a/src/i18n/content/es/docs/apis/intro-apis/introduction-new-relic-apis.mdx +++ b/src/i18n/content/es/docs/apis/intro-apis/introduction-new-relic-apis.mdx @@ -5,8 +5,6 @@ tags: - Get started - Intro to APIs metaDescription: An introduction to New Relic's APIs. -signupBanner: - text: Monitor and improve your entire stack. 100GB free. Forever. freshnessValidatedDate: never translationType: machine --- diff --git a/src/i18n/content/es/docs/apis/nerdgraph/get-started/introduction-new-relic-nerdgraph.mdx b/src/i18n/content/es/docs/apis/nerdgraph/get-started/introduction-new-relic-nerdgraph.mdx index 8b582565031..4b2c9a8b657 100644 --- a/src/i18n/content/es/docs/apis/nerdgraph/get-started/introduction-new-relic-nerdgraph.mdx +++ b/src/i18n/content/es/docs/apis/nerdgraph/get-started/introduction-new-relic-nerdgraph.mdx @@ -5,8 +5,6 @@ tags: - NerdGraph - Get started metaDescription: 'NerdGraph is New Relic''s GraphQL-format API, used to query data and do some product configurations.' -signupBanner: - text: Monitor and improve your entire stack. 100GB free. Forever. freshnessValidatedDate: never translationType: machine --- diff --git a/src/i18n/content/es/docs/apm/agents/java-agent/additional-installation/include-java-agent-jvm-argument.mdx b/src/i18n/content/es/docs/apm/agents/java-agent/additional-installation/include-java-agent-jvm-argument.mdx index 2a06c03e4f1..419c2094ec0 100644 --- a/src/i18n/content/es/docs/apm/agents/java-agent/additional-installation/include-java-agent-jvm-argument.mdx +++ b/src/i18n/content/es/docs/apm/agents/java-agent/additional-installation/include-java-agent-jvm-argument.mdx @@ -6,8 +6,6 @@ tags: - Installation metaDescription: Detailed instructions on how to set APM's Java agent startup argument for your JVM or framework. tocUnlisted: true -signupBanner: - text: Monitor and improve your entire stack. 100GB free. Forever. freshnessValidatedDate: never translationType: machine --- diff --git a/src/i18n/content/es/docs/apm/agents/java-agent/configuration/java-agent-configuration-config-file.mdx b/src/i18n/content/es/docs/apm/agents/java-agent/configuration/java-agent-configuration-config-file.mdx new file mode 100644 index 00000000000..f9a4a08cf36 --- /dev/null +++ b/src/i18n/content/es/docs/apm/agents/java-agent/configuration/java-agent-configuration-config-file.mdx @@ -0,0 +1,5782 @@ +--- +title: 'Configuración del agente de Java: archivo de configuración' +tags: + - Agents + - Java agent + - Configuration +metaDescription: 'New Relic''s Java agent config settings for APM, including transaction tracer, errors, custom instrumentation, distributed tracing, system properties, etc.' +freshnessValidatedDate: never +translationType: machine +--- + +import apmJavaConfigPrecedence from 'images/apm_diagram_Java-config-precedence.webp' + +El agente de Java New Relic lee su configuración del archivo `newrelic.yml` . De forma predeterminada, el agente busca este archivo en el [directorio](/docs/agents/manage-apm-agents/troubleshooting/find-agent-root-directory#java-agent) que contiene `newrelic.jar`. Puede anular la ubicación del archivo de configuración estableciendo la propiedad del sistema [`newrelic.config.file`](#newrelic-config-file) en un nombre de archivo completo. + +Podrás configurar nuestro agente de Java para adaptarlo a tu entorno después de [crear una cuenta New Relic](https://newrelic.com/signup) (es gratis, para siempre) e [instalar el agente de Java](/docs/apm/agents/java-agent/installation/install-java-agent/). + +## Estructura del archivo de configuración [#Structure] + +El archivo `newrelic.yml` tiene secciones separadas para diferentes entornos: + +* Prueba +* Desarrollo +* De prueba +* Producción (predeterminado) + +New Relic aplica la configuración en la sección `common` a cada uno de estos entornos. Puede seleccionar otros entornos como predeterminados configurando la propiedad del sistema [`newrelic.environment`](#newrelic-environment) en el nombre del entorno. + + + Hay una [plantilla`newrelic.yml` ](/docs/java/java-agent-config-file-template)disponible. + + +Si edita `newrelic.yml`, tenga cuidado de ajustarse al [formato YAML](https://en.wikipedia.org/wiki/YAML). Utilice un validador YAML para asegurarse de que la sintaxis sea precisa antes de usar el archivo con el agente de Java de New Relic y siga estas reglas: + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + **Java agent newrelic.yml** + + + + **Requirements** + +
+ Formato + + Los archivos YML distinguen entre mayúsculas y minúsculas. +
+ Sangrías + + Todas las sangrías deben realizarse en incrementos de dos caracteres. Otras sangrías generarán un error `Unable to parse configuration file` al iniciar el agente. + + * Utilice el mismo nivel de sangría para los datos en la misma sección del archivo. + * Sangra las subsecciones con dos espacios adicionales. +
+ Cambios en el archivo + + Debe reiniciar su proceso de host JVM para que los cambios surtan efecto. + + **Exception:** Los cambios de propiedad en `log_level` y `audit_mode` no requieren reinicio. Los cambios de propiedad bajo interruptor no requieren reiniciar. +
+ +## Prioridad de los ajustes de configuración [#config-options-precedence] + +Para anular cualquier configuración en el archivo de configuración, utilice una [anulación de propiedad del sistema](#System_Properties). En ciertos entornos, [las variables de entorno](#Environment_Variables) también se pueden usar para anular tanto el archivo de configuración como las propiedades del sistema. Las variables de entorno existen principalmente para admitir Heroku. Cuando se utiliza, [la configuración del lado del servidor](/docs/agents/manage-apm-agents/configuration/server-side-agent-configuration) anula todas las demás configuraciones. + +java-config-order.png + +

+ Con el agente de Java, la configuración del lado del servidor anula todas las demás configuraciones. Las variables de entorno anulan las propiedades del sistema Java. Las propiedades de Java anulan los ajustes de configuración del usuario en su archivo `newrelic.yml` . La configuración del usuario anula la configuración predeterminada `newrelic.yml` . +
+ +## Configurar el directorio de extensiones de Java [#extensions-directory] + +El agente de Java lee los archivos de configuración al iniciar el proceso. Para identificar el directorio donde se encuentran los archivos, cree un directorio de extensiones nuevo o especifique uno existente: + + + + Para crear el directorio de extensiones: + + 1. Navegue hasta el directorio donde se encuentran `newrelic.jar` y `newrelic.yml` . Cree un directorio llamado `extensions`. + 2. En `newrelic.yml`, verifique que la propiedad [`extensions.dir`](#cfg-extensions-dir) no esté configurada. + + + + Para utilizar un directorio de extensiones de Java existente: + + 1. En su archivo `newrelic.yml` , busque la sección `common` . + 2. Utilice la propiedad [`extensions.dir`](#cfg-extensions-dir) para especificar la ubicación del archivo. + + + +## Ajustes de configuración generales [#General] + +Configure estas opciones en la sección `common` . Para [anular](#System_Properties) cualquiera de estas opciones, utilice una propiedad del sistema con el prefijo `newrelic.config` . + + + + + + + + + + + + + + + + + +
+ Tipo + + Cadena +
+ Por defecto + + (ninguno) +
+ + Esta configuración es **required**. Debe especificar la [clave de licencia](/docs/apis/intro-apis/new-relic-api-keys/#ingest-license-key) asociada con su cuenta New Relic. Esta clave vincula los datos de su agente a su cuenta en el servicio New Relic. +
+ + + + + + + + + + + + + + + + +
+ Tipo + + Cadena +
+ Por defecto + + (ninguno) +
+ + Esta configuración es **required**. Define el [nombre de la aplicación](/docs/site/naming-your-application) utilizada para informar datos a New Relic. + + Si [`enable_auto_app_naming`](#cfg-enable_auto_app_naming) es falso, el agente informa todos los datos a esta aplicación. De lo contrario, el agente reporta solo tareas en segundo plano (transacción para aplicaciones no web) a esta aplicación. + + Para informar datos a [más de una aplicación](/docs/java/multiple-application-names), separe los nombres de las aplicaciones con un punto y coma. Por ejemplo, para informar datos a **My Application** y **My Application 2** utilice esto: + + ```yml + app_name: My Application;My Application 2 + ``` + + Para conocer más métodos para nombrar su aplicación, consulte [Nombrar su aplicación Java](/docs/agents/java-agent/configuration/name-your-java-application). +
+ + + + + + + + + + + + + + + + +
+ Tipo + + Booleano +
+ Por defecto + + `true` +
+ + Bandera para habilitar al agente. Utilice esta configuración para forzar que el agente se ejecute o no. +
+ + + + + + + + + + + + + + + + +
+ Tipo + + Flotante +
+ Por defecto + + `1.0` +
+ + El umbral `apdex_t` en segundos para la puntuación [Apdex](/docs/site/apdex-measuring-user-satisfaction) de la aplicación. Para las versiones 1.2.008 o superiores del agente de Java, el valor `apdex_t` se establece en la UI y el valor en `newrelic.yml` se ignora. +
+ + + + + + + + + + + + + + + + +
+ Tipo + + Entero +
+ Por defecto + + (ninguno) +
+ + Número para diferenciar las JVM para la misma aplicación en la misma máquina. New Relic [usa host/port para ser único](/docs/agents/java-agent/configuration/hostname-logic-java#unique-identifier), por lo que puede distinguir las JVM colocando un modificador como este en los argumentos de inicio de cada JVM: + + ```ini + -Dnewrelic.config.appserver_port=8081 + ``` + + Una vez que haya utilizado `appserver_port` para nombrar las JVM y reiniciarlas, debería poder verlas individualmente en el menú desplegable y en la interfaz de creación de perfiles. + + + Esto es sólo un cambio para New Relic; en realidad, no afecta de ninguna manera el puerto en el que se comunica el host. + +
+ + + + + + + + + + + + + + + + +
+ Tipo + + Booleano +
+ Por defecto + + `false` +
+ + Permite el registro de texto sin formato de todos los datos enviados a New Relic en el archivo de registro del agente. Esta configuración es dinámica, por lo que al ejecutar agente notará cambios en `newrelic.yml` sin reiniciar la JVM. +
+ + + + + + + + + + + + + + + + +
+ Tipo + + Cadena +
+ Formato de valor + + `/path/to/ca/cert/bundle.pem` +
+ + Especifica una ruta a un paquete de certificado SSL personalizado que utilizará el agente para establecer una conexión segura con New Relic. Si su paquete de certificado SSL personalizado no incluye certificados que sean suficientes para conectarse a New Relic, deberá [fusionar los certificados requeridos en su paquete de certificados personalizado](/docs/agents/java-agent/troubleshooting/ssl-or-connection-errors-java). + + + Nuestra implementación de Java Flight Recorder que actualmente viene incluida con el agente de Java utiliza el SDK de telemetría. Especificar ca_bundle_path no actualizará el certificado que utiliza nuestra opción JFR para conectarse a New Relic. Si está utilizando un almacén de confianza personalizado y desea utilizar la implementación del agente de Java JFR, deberá agregar los certificados necesarios en su almacén de confianza personalizado. + +
+ + + + + + + + + + + + + + + + +
+ Tipo + + Booleano +
+ Por defecto + + `false` +
+ + Permite generar informes de datos por separado para cada aplicación web. Configúrelo en `true` para habilitar la compatibilidad con la denominación automática de aplicaciones. El nombre de cada aplicación web se detecta automáticamente y el agente reporta datos por separado para cada una. Esto proporciona un desglose del rendimiento más detallado para las aplicaciones web en New Relic. + + Para obtener más información, consulte [Nomenclatura automática de aplicaciones](/docs/agents/java-agent/configuration/automatic-application-naming). + + Para conocer más métodos para nombrar su aplicación, consulte [Nombrar su aplicación Java](/docs/agents/java-agent/configuration/name-your-java-application). +
+ + + + + + + + + + + + + + + + +
+ Tipo + + Booleano +
+ Por defecto + + `true` +
+ + Habilita la denominación de transacciones basada en componentes. Establezca en `true` para habilitar la denominación de transacciones basada en componentes. Establezca en `false` para utilizar el URI de una solicitud web como nombre de la transacción. Para más información, consulte [Naming transacción web](/docs/agents/java-agent/instrumentation/naming-web-transactions). + + + A menos que implemente la API de llamada para nombrar su transacción, es muy probable que deshabilitar el nombramiento de transacciones automáticas cause [problemas de agrupación métrica](/docs/features/metric-grouping-issues). + +
+ + + + + + + + + + + + + + + + +
+ Tipo + + Booleano +
+ Por defecto + + `true` +
+ + Habilita toda la instrumentación [mediante una anotación `@Trace` ](/docs/agents/java-agent/custom-instrumentation/java-instrumentation-annotation). Deshabilitar esto hace que se ignoren las anotaciones `@Trace` . +
+ + + + + + + + + + + + + + + + +
+ Tipo + + Cadena +
+ Por defecto + + [`https://insights-collector.newrelic.com/v1/accounts/events`](https://insights-collector.newrelic.com/v1/accounts/events) +
+ + Evento ingest URI utilizado por alguna característica del agente. Por defecto el extremo de ingestión de producción estadounidense. Se puede configurar manualmente para enviar eventos a otro extremo de ingesta (por ejemplo, producción de la UE: [`https://insights-collector.eu01.nr-data.net/v1/accounts/events`](https://insights-collector.eu01.nr-data.net/v1/accounts/events)). + + Los clientes que cumplen con FedRAMP deben utilizar el [extremo compatible con FedRAMP](docs/security/security-privacy/compliance/fedramp-compliant-endpoints/#event-api): `https://gov-insights-collector.newrelic.com/v1/accounts/events` +
+ + + + + + + + + + + + + + + + +
+ Tipo + + Cadena +
+ Por defecto + + (ninguno) +
+ + Define la ubicación del [directorio de extensiones](#extensions-directory) opcionales. Si esta propiedad no está configurada, el agente buscará un subdirectorio denominado `extensions` en el mismo directorio que `newrelic.jar` y `newrelic.yml`. +
+ + + + + + + + + + + + + + + + +
+ Tipo + + Booleano +
+ Por defecto + + `false` +
+ + Para habilitar [la alta seguridad](/docs/subscriptions/high-security) , esta propiedad debe establecerse en `true` y la propiedad de alta seguridad en la interfaz de usuario de New Relic debe estar habilitada. Habilitar la alta seguridad significa que SSL está activado, los parámetros de la cola de solicitudes y mensajes no se recopilan y la consulta no se puede enviar a New Relic en su forma original. + + + A partir del [agente de Java 3.48.0](/docs/release-notes/agent-release-notes/java-release-notes/java-agent-3480), SSL está habilitado de forma predeterminada y la opción de configuración para deshabilitarlo ha quedado obsoleta. A partir del [agente de Java 4.0.0](/docs/release-notes/agent-release-notes/java-release-notes/java-agent-400), se eliminó la capacidad de deshabilitar SSL. + +
+ + + + + + + + + + + + + + + + +
+ Tipo + + Cadena +
+ Por defecto + + (ninguno) +
+ + Proporciona la capacidad de configurar un [extremo compatible con FedRAMP](/docs/security/security-privacy/compliance/fedramp-compliant-endpoints/) para que lo utilice el agente, con el valor `gov-collector.newrelic.com`. +
+ + + + + + + + + + + + + + + + +
+ Tipo + + Cadena +
+ Por defecto + + (ninguno) +
+ + Una [Insert clave de API](/docs/apis/get-started/intro-apis/types-new-relic-api-keys#event-insert-key) válida para su cuenta. El agente no lo utiliza actualmente. +
+ + + + + + + + + + + + + + + + +
+ Tipo + + Cadena +
+ Por defecto + + `""` +
+ + Adjunte [etiqueta](/docs/apm/new-relic-apm/maintenance/labels-categories-organize-your-apps-servers) a esta aplicación. + + Tenga en cuenta que esta opción ahora habilita etiquetas, que reemplazaron la característica de etiqueta. Aún puedes consultar tus [etiquetas](/docs/new-relic-one/use-new-relic-one/core-concepts/tagging-use-tags-organize-group-what-you-monitor#labels) históricas. Se pueden adjuntar varias etiquetas utilizando un punto y coma como separador de la siguiente manera: + + ```ini + -Dnewrelic.config.labels="tagName1:tagValue1;tagName2:tagValue2;tagName3:tagValue3" + ``` +
+ + + + + + + + + + + + + + + + +
+ Tipo + + Booleano +
+ Por defecto + + FALSO +
+ + En casos excepcionales, podría producirse una pérdida de memoria con la instrumentación que utiliza la API legacy heredada para realizar un seguimiento del ciclo de vida de los servlets asíncronos o Jetty Continuations. La pérdida de memoria se manifestaría como transacciones filtradas que se suspendieron pero nunca se reanudaron. Esta configuración actúa como una solución para evitar que ocurra tal escenario. Se recomienda habilitar esta solución solo cuando se produzca una pérdida de memoria de este tipo. +
+ + + + + + + + + + + + + + + + +
+ Tipo + + Entero +
+ Por defecto + + `30` +
+ + Limita la cantidad de líneas que el agente recopila de cada rastreo del stack. Aumentar este valor puede afectar el rendimiento, porque aumenta la cantidad de memoria que utiliza el agente y la cantidad de datos enviados a New Relic. +
+ + + + + + + + + + + + + + + + +
+ Tipo + + Cadena +
+ Por defecto + + [`https://metric-api.newrelic.com/metric/v1`](https://metric-api.newrelic.com/metric/v1) +
+ + Métrica ingest URI utilizada por algún agente característico. Por defecto el extremo de ingestión de producción estadounidense. Se puede configurar manualmente para enviar métrica a otro extremo de ingesta (ejemplo de URI de producción de la UE: [`https://metric-api.eu.newrelic.com/metric/v1`](https://metric-api.eu.newrelic.com/metric/v1)). + + Los clientes que cumplen con FedRAMP deben utilizar el [extremo compatible con FedRAMP](docs/security/security-privacy/compliance/fedramp-compliant-endpoints/#metric-api): `https://gov-metric-api.newrelic.com/metric/v1` +
+ + + + + + + + + + + + + + + + +
+ Tipo + + Cadena +
+ Por defecto + + (ninguno) +
+ + El host proxy a través del cual conectarse al [recopilador New Relic](/docs/accounts-partnerships/education/getting-started-new-relic/glossary#collector). Si se utiliza un proxy, se requiere la configuración del host. Otras configuraciones de proxy son opcionales. +
+ + + + + + + + + + + + + + + + +
+ Tipo + + Cadena +
+ Por defecto + + (ninguno) +
+ + La contraseña para la autenticación de proxy. Si se utiliza un proxy, se requiere la configuración del host. Otras configuraciones de proxy son opcionales. La configuración de nombre de usuario y contraseña se utilizará para autenticarse en los desafíos de autenticación básica desde un servidor proxy. + + + El agente de Java admite autenticación básica (texto sin cifrar). + +
+ + + + + + + + + + + + + + + + +
+ Tipo + + Cadena +
+ Por defecto + + `8080` +
+ + El número de puerto del host proxy. Si se utiliza un proxy, se requiere la configuración del host. Otras configuraciones de proxy son opcionales. +
+ + + + + + + + + + + + + + + + +
+ Tipo + + Cadena +
+ Por defecto + + (ninguno) +
+ + El nombre de usuario para la autenticación de proxy, como la autenticación básica (texto sin cifrar). Si se utiliza un proxy, se requiere la configuración del host. Otras configuraciones de proxy son opcionales. La configuración de nombre de usuario y contraseña se utilizará para autenticarse en los desafíos de autenticación básica desde un servidor proxy. +
+ + + + + + + + + + + + + + + + +
+ Tipo + + Cadena +
+ Por defecto + + (ninguno) +
+ + El esquema de proxy utilizado. La configuración `proxy_scheme: "https"` permitirá que el agente se conecte a través de servidores proxy utilizando el esquema HTTPS. +
+ + + + + + + + + + + + + + + + +
+ Tipo + + Booleano +
+ Por defecto + + `false` +
+ + Si se informan errores para Reactor Netty. El valor predeterminado es falso. Si se establece en verdadero, se informarán los errores de Reactor Netty. + + + Sólo disponible en [agente de Java 6.3.0](/docs/release-notes/agent-release-notes/java-release-notes/java-agent-630) y superior. + + Tenga en cuenta que el valor predeterminado se cambió a falso a partir del agente de Java 6.5.0. + +
+ + + + + + + + + + + + + + + + +
+ Tipo + + Booleano +
+ Por defecto + + `false` +
+ + Habilite el apagado retrasado de JVM para darle al agente la oportunidad de enviar los datos métricos más recientes a New Relic antes del cierre de JVM. +
+ + + + + + + + + + + + + + + + +
+ Tipo + + Entero +
+ Por defecto + + `60` +
+ + La cantidad de segundos después de los cuales el agente utilizará la configuración [`send_data_on_exit`](#cfg-send_data_on_exit) . +
+ + + + + + + + + + + + + + + + +
+ Tipo + + Booleano +
+ Por defecto + + `true` +
+ + Habilite los informes de la configuración de JVM a New Relic. +
+ + + + + + + + + + + + + + + + +
+ Tipo + + Booleano +
+ Por defecto + + `true` +
+ + Cuando se establece en `true`, las propiedades de JVM se enviarán a New Relic. +
+ + + + + + + + + + + + + + + + +
+ Tipo + + Booleano +
+ Por defecto + + `true` +
+ + Requiere conexiones al recopilador New Relic para pasar por SSL. + + El agente se comunica con New Relic a través de HTTPS de forma predeterminada, y New Relic [requiere HTTPS](/docs/apis/rest-api-v2/troubleshooting/301-response-rest-api-calls) para todo el tráfico hacia y la API REST de New Relic. + + Este trabajo se realiza de forma asincrónica con los subprocesos que procesan el código de su aplicación, por lo que el tiempo de respuesta no se verá afectado directamente por este cambio. + + + A partir del [agente de Java 3.48.0](/docs/release-notes/agent-release-notes/java-release-notes/java-agent-3480), SSL está habilitado de forma predeterminada y la opción de configuración para deshabilitarlo ha quedado obsoleta. A partir del [agente de Java 4.0.0](/docs/release-notes/agent-release-notes/java-release-notes/java-agent-400), se eliminó la capacidad de deshabilitar SSL. + +
+ + + + + + + + + + + + + + + + +
+ Tipo + + Booleano +
+ Por defecto + + `false` +
+ + Permita que el agente se conecte al recolector New Relic inmediatamente después del inicio de la aplicación. +
+ + + + Esto se aplica al agente de Java [versión 3.44.0 o superior](/docs/release-notes/agent-release-notes/java-release-notes). + + + + + + + + + + + + + + + + +
+ Tipo + + Booleano +
+ Por defecto + + `false` +
+ + Para obtener detalles más concisos de la traza de la transacción, el agente no informa los futuros de Scala como segmentos de transacción, y esos futuros no contribuyen al [tiempo total de la transacción](/docs/data-analysis/user-interface-functions/view-your-data/response-time#response-time-total-time). + + Habilitar `scala_futures_as_segments` aumenta sus gastos generales. Si desea que Scala Futures se informe como segmentos de transacción para poder verlos en una traza de la transacción, puede habilitarlo: + + ```yml + scala_futures_as_segments: + enabled: true + ``` +
+
+ +## Variables de entorno [#Environment_Variables] + +Las variables de entorno tienen la máxima prioridad y anulan las propiedades del sistema y la configuración de yml. + +* Para configurar variables de entorno, utilice el comando `export VARNAME=value` . +* Para establecer variables de entorno de forma permanente, agregue la línea de exportación a un archivo como `~/.bashrc` o `~/.bash_profile`. + +Puede anular cualquier configuración de una propiedad del sistema o en `newrelic.yml` configurando una variable de entorno. La variable de entorno correspondiente a una configuración determinada en el archivo de configuración es el nombre de la configuración con el prefijo `NEW_RELIC` con todos los puntos (`.`) y guiones (`-`) reemplazados por guiones bajos (`_`). Por ejemplo, la variable de entorno para la configuración `log_level` es `NEW_RELIC_LOG_LEVEL`. + +Para configuraciones anidadas en secciones, anteponga el nombre de la sección al nombre de la configuración. Por ejemplo: + +```yml: + class_transformer: + com.newrelic.instrumentation.kafka-clients-spans-0.11.0.0: + enabled: true +``` + +La configuración anterior se convertiría a la siguiente variable de entorno: `NEW_RELIC_CLASS_TRANSFORMER_COM_NEWRELIC_INSTRUMENTATION_KAFKA_CLIENTS_SPANS_0_11_0_0_ENABLED` + + + La configuración del agente mediante variables de entorno requiere [agente de Java versión 4.10.0 o superior](/docs/agents/java-agent/installation/upgrade-java-agent). + + +## Propiedades del sistema [#System_Properties] + +Puede anular cualquier configuración en el archivo `newrelic.yml` estableciendo una propiedad del sistema. La propiedad del sistema correspondiente a una configuración determinada en el archivo de configuración es el nombre de la configuración con el prefijo `newrelic.config`. Por ejemplo, la propiedad del sistema para la configuración `log_level` es `newrelic.config.log_level`. + +Para configuraciones anidadas en secciones, anteponga el nombre de la sección al nombre de la configuración. Por ejemplo, la propiedad del sistema para la configuración `enabled` en la sección de transacciones es `newrelic.config.transaction_tracer.enabled`. + +Además de anular los ajustes de configuración, el agente reconoce estas propiedades del sistema: + + + + + + + + + + + + + + + + + +
+ Tipo + + Booleano +
+ Por defecto + + (ninguno) +
+ + A partir de la versión del agente `8.7.0`, si se establece en verdadero y el Agente se ejecuta con JBoss EAP/Wildfly, esto evitará que el agente requiera que el cargador de clases del sistema cargue cualquier clase del paquete `javax.management` . Esto se agrega para ayudar a solucionar problemas de inicio de la aplicación con los módulos JBoss cuando se utiliza la API de administración J2EE/Jakarta. Se proporciona más información en el [documento de resolución de problemas de](/docs/apm/agents/java-agent/troubleshooting/classloading-issues-from-jboss-and-wildfly) JBoss/Wildfly. +
+ + + + + + + + + + + + + + + + +
+ Tipo + + Booleano +
+ Por defecto + + (ninguno) +
+ + Indicador de expiración que permite que el agente se ejecute con versiones de Java no compatibles. +
+ + + + + + + + + + + + + + + + +
+ Tipo + + Cadena +
+ Por defecto + + (ninguno) +
+ + Establezca un [nombre para mostrar](/docs/agents/java-agent/configuration/hostname-logic-java#display-name) para decorar la etiqueta "host:puerto" en la UI de New Relic. Requiere agente de Java 3.17 o superior. +
+ + + + + + + + + + + + + + + + +
+ Tipo + + Cadena +
+ Por defecto + + (ninguno) +
+ + Cadena que contiene una ruta completa al archivo de configuración de newrelic. Si está vacío, el agente supone `newrelic.yml` está en el mismo directorio que `newrelic.jar`. +
+ + + + + + + + + + + + + + + + +
+ Tipo + + Booleano +
+ Por defecto + + (ninguno) +
+ + Habilite el registro de depuración. +
+ + + + + + + + + + + + + + + + +
+ Tipo + + Cadena +
+ Por defecto + + (ninguno) +
+ + Cadena que contiene la configuración del entorno que utilizará el agente. +
+ + + + + + + + + + + + + + + + +
+ Tipo + + Cadena +
+ Por defecto + + (ninguno) +
+ + Cadena que contiene el directorio de inicio del agente. El valor predeterminado es el mismo directorio que el archivo jar del agente. +
+ + + + + + + + + + + + + + + + +
+ Tipo + + Cadena +
+ Por defecto + + `newrelic_agent.log` +
+ + Cadena que contiene el nombre del agente archivo de log. +
+
+ +## Atributo [#attributes] + +Para configurar estas opciones, utilice la sección `attributes` . Para [anularlos](#System_Properties) , utilice una propiedad del sistema con el prefijo `newrelic.config.attributes` . + +Los atributos son pares de valores principales relacionados con la traza de la transacción, los errores de traza, y el evento transacción. Hay una sección `attribute` debajo de cada destino. Para obtener más información, consulte [agente de atributo Java](/docs/java/java-agent-attributes), [Habilitación y deshabilitación de atributos](/docs/java/enabling-and-disabling-attributes) y [ejemplos de atributos](/docs/java/attribute-examples). + + + + + + + + + + + + + + + + + +
+ Tipo + + Booleano +
+ Por defecto + + `true` +
+ + Esta configuración se puede utilizar para activar o desactivar todos los atributos. Por motivos de seguridad, la captura de atributos personalizados mediante el [Editor de instrumentación personalizada](/docs/agents/java-agent/custom-instrumentation/custom-instrumentation-editor-instrument-ui#options) está configurada en `false` de forma predeterminada. +
+ + + + + + + + + + + + + + + + +
+ Tipo + + Lista de cadenas +
+ Por defecto + + (ninguno) +
+ + Si los atributos están habilitados, las claves de atributos que se encuentran en esta lista se enviarán a New Relic. Separe las claves de la lista con una coma; Por ejemplo: + + ``` + key1, key2, key3 + ``` + + Consulte también las [reglas de atributos del agente](/docs/subscriptions/agent-attributes). +
+ + + + + + + + + + + + + + + + +
+ Tipo + + Lista de cadenas +
+ Por defecto + + (ninguno) +
+ + Todas las claves de atributos encontradas en esta lista no se enviarán a New Relic. Separe las claves de la lista con una coma; Por ejemplo: + + ``` + key1, key2, key3 + ``` + + Consulte también las [reglas de atributos del agente](/docs/subscriptions/agent-attributes). +
+ + + + + + + + + + + + + + + + +
+ Tipo + + Cadena +
+ Por defecto + + ambos +
+ + El informe de atributos se puede configurar a través de los siguientes medios. + + YAML: + + ``` + attributes: + http_attribute_mode: both + ``` + + Propiedad del sistema: + + ```properties + -Dnewrelic.config.attributes.http_attribute_mode=both + ``` + + Variable ambiental: + + ```properties + NEW_RELIC_ATTRIBUTES_HTTP_ATTRIBUTE=both + ``` + + Las opciones de configuración son: + + * `standard` : Los informes utilizarán estándares (es decir, OTEL) atributo. Se recomienda esta configuración. Minimizará el impacto en la funcionalidad y mantendrá el nivel más bajo de ingesta para los informes de atributos. + * `legacy` : Los informes se realizarán mediante el atributo HTTP reintroducido; esta configuración puede afectar la funcionalidad actual o futura. + * `both` : Esta es la configuración predeterminada, los informes se realizarán mediante el atributo HTTP reintroducido y el atributo OTEL. Esta configuración también aumentará su ingesta de datos. + + + Disponible desde [agente de Java versión 8.8.0](/docs/release-notes/agent-release-notes/java-release-notes/java-agent-880). La configuración predeterminada, `both`, aumentará la ingesta de datos. Para evitar un aumento en la ingesta de datos, debe anular el valor predeterminado configurando `http_attribute_mode` en `legacy` o `standard`. + +
+
+ +## Instrumentación asíncrona [#async_config] + +Estas opciones se configuran directamente en la sección `common` y se pueden [anular](#System_Properties) mediante una propiedad del sistema con prefijo. + + + + + + + + + + + + + + + + + +
+ Tipo + + Entero +
+ Predeterminado (segundos) + + `180` +
+ + La cantidad de segundos después de los cuales el agente caducará automáticamente un token asíncrono que no ha caducado explícitamente con `token.expire()`. Para obtener instrucciones de uso, consulte [token: conectar subprocesos asíncronos](/docs/agents/java-agent/java-agent-api/java-agent-api-asynchronous-applications#tokens). + + + Aumentar este valor puede afectar el rendimiento, porque aumenta la cantidad de memoria que utiliza el agente y evita que se informe de transacciones debido a que el token no ha caducado. + +
+ + + + + + + + + + + + + + + + +
+ Tipo + + Entero +
+ Predeterminado (segundos) + + `600` +
+ + La cantidad de segundos después de los cuales el agente finalizará automáticamente un segmento que no haya finalizado explícitamente con `segment.end()` o `segment.ignore()`. Para obtener instrucciones de uso, consulte [Segmentos: actividad asíncrona arbitraria de tiempo](/docs/agents/java-agent/java-agent-api/java-agent-api-asynchronous-applications#segments). + + + Aumentar este valor puede afectar el rendimiento, porque aumenta la cantidad de memoria que utiliza el agente y evita que se informen transacciones debido a segmentos no finalizados. + +
+
+ +## monitoreo del navegador [#Browser_Monitoring] + +Estas opciones se configuran en la sección `browser_monitoring` y se pueden [anular](#System_Properties) utilizando una propiedad del sistema con el prefijo `newrelic.config.browser_monitoring` . + +El monitoreo del navegador le brinda información valiosa sobre el rendimiento que el usuario real está experimentando con su sitio web. Esto se logra midiendo el tiempo que le toma al navegador de su usuario descargar y representar sus páginas web inyectando una pequeña cantidad de código JavaScript en el encabezado y pie de página de cada página. + + + + + + + + + + + + + + + + + +
+ Tipo + + Booleano +
+ Por defecto + + `true` +
+ + De forma predeterminada, el agente inserta automáticamente la API de llamada en JSP compilados para inyectar el JavaScript de monitoreo en las páginas web. Establezca este atributo en `false` para desactivar este comportamiento. +
+ + + + + + + + + + + + + + + + +
+ Tipo + + Lista de cadenas separadas por comas +
+ Por defecto + + (ninguno) +
+ + Cuando [`auto_instrument`](#bm-auto_instrument) es `true`, de forma predeterminada todas las páginas están instrumentadas. Enumere todas las páginas que desea que la instrumentación automática omita aquí. Aún puede utilizar instrumentación manual en estas páginas. + + Por ejemplo: + + ```yml + browser_monitoring: + disabled_auto_pages: /WEB-INF/jsp/testpage_1.jsp, /WEB-INF/jsp/testpage_2.jsp + ``` +
+ + + + + + + + + + + + + + + + +
+ Tipo + + Booleano +
+ Por defecto + + `false` +
+ + Esta configuración se puede utilizar para activar o desactivar todos los atributos de monitoreo del navegador. Estos son los [datos que puedes consultar](/docs/query-your-data/explore-query-data/explore-data/introduction-querying-new-relic-data). Si `attributes.enabled` es falso en el nivel raíz, no se enviará ningún atributo en el monitoreo del navegador independientemente de cómo esté configurada esta propiedad en `browser_monitoring` . +
+ + + + + + + + + + + + + + + + +
+ Tipo + + Lista de cadenas +
+ Por defecto + + (ninguno) +
+ + Si los atributos están habilitados para `browser_monitoring`, todas las claves de atributos que se encuentran en esta lista se enviarán a New Relic en las vistas de página. Para obtener más información, consulte las [reglas de atributos del agente](/docs/apm/other-features/attributes/agent-attributes). +
+ + + + + + + + + + + + + + + + +
+ Tipo + + Lista de cadenas +
+ Por defecto + + (ninguno) +
+ + Todas las claves de atributos que se encuentran en esta lista no se enviarán a New Relic en las visitas a la página. Para obtener más información, consulte las [reglas de atributos del agente](/docs/apm/other-features/attributes/agent-attributes). +
+
+ +## Interruptor + +Estas configuraciones personalizan el comportamiento del [interruptor Java](/docs/agents/java-agent/custom-instrumentation/circuit-breaker-java-custom-instrumentation). Estas configuraciones no están incluidas en `newrelic.yml` de forma predeterminada. No es necesario reiniciar su JVM después de cambiarlos. + +Si desea personalizar el interruptor, agréguelo en la sección `common` : + +```yml +common: &default_settings​ + OTHER_CONFIG_SETTINGS + circuitbreaker: + enabled: true + memory_threshold: 20 + gc_cpu_threshold: 10 +``` + + + + + + + + + + + + + + + + + +
+ Tipo + + Booleano +
+ Por defecto + + `true` +
+ + Si su aplicación se comporta como se esperaba, es posible que desee desactivar el interruptor. +
+ + + + + + + + + + + + + + + + +
+ Tipo + + Entero (0 a 100) +
+ Por defecto + + `20` +
+ + Personalice el porcentaje de memoria dinámica libre por debajo del cual debería activarse el interruptor. Cuando el porcentaje de memoria dinámica libre es menor que `memory_threshold` y el tiempo de CPU dedicado a la recolección de basura es mayor que `gc_cpu_threshold`, el interruptor se activa. Para que sea menos probable que el interruptor se dispare, disminuya `memory_threshold` y/o aumente `gc_cpu_threshold`. Ajuste estos valores según sea necesario, según el rendimiento operativo y el comportamiento de su aplicación. +
+ + + + + + + + + + + + + + + + +
+ Tipo + + Entero (0 a 100) +
+ Por defecto + + `10` +
+ + Personalice el porcentaje de tiempo de CPU de recolección de basura por encima del cual debería activarse el interruptor. Cuando el porcentaje de memoria de montón libre es menor que `memory_threshold` y el tiempo de CPU dedicado a la recolección de basura es mayor que `gc_cpu_threshold`, el interruptor se activa. Para que sea menos probable que el interruptor se dispare, disminuya `memory_threshold` y/o aumente `gc_cpu_threshold`. Ajuste estos valores según sea necesario, según el rendimiento operativo y el comportamiento de su aplicación. +
+
+ +## Utilización de la plataforma en la nube [#utilization] + +Establezca la configuración de utilización de la plataforma en la nube en la sección `utilization` y se puede anular con la propiedad del sistema con el prefijo `newrelic.config.utilization` . + +El agente recopila información de utilización y la envía al servicio New Relic. El agente puede recopilar información de Amazon Web Services (AWS), Azure, Google Cloud Platform y Pivotal Cloud Foundry instancia. También recopilará información relacionada con el contenedor Docker y los servicios de Kubernetes. + + + + + + + + + + + + + + + + + +
+ Tipo + + Booleano +
+ Por defecto + + `true` +
+ + Determina si el agente sondea la API de metadatos de AWS. +
+ + + + + + + + + + + + + + + + +
+ Tipo + + Booleano +
+ Por defecto + + `true` +
+ + Determina si el agente sondea la API de metadatos de Azure. +
+ + + + + + + + + + + + + + + + +
+ Tipo + + Booleano +
+ Por defecto + + `true` +
+ + Determina si el agente sondea la API de metadatos de Google Cloud Platform. +
+ + + + + + + + + + + + + + + + +
+ Tipo + + Booleano +
+ Por defecto + + `true` +
+ + Determina si el agente informa la variable de entorno `KUBERNETES_SERVICE_HOST` . +
+ + + + + + + + + + + + + + + + +
+ Tipo + + Booleano +
+ Por defecto + + `true` +
+ + Determina si el agente lee las variables de entorno de Pivotal Cloud Foundry. +
+ + + + + + + + + + + + + + + + +
+ Tipo + + Booleano +
+ Por defecto + + `true` +
+ + Determina si el agente lee la información Docker del sistema de archivos. +
+
+ +## Métrica a nivel de código + +Las métricas a nivel de código le brindan información detallada y valiosa sobre el rendimiento de su código a nivel de método. Verá la métrica de cada método que se haya instrumentado automáticamente o que haya sido instrumentado mediante la anotación @Trace. Para obtener más información sobre métricas a nivel de código, consulte [Monitoreo de desempeño con CodeStream](/docs/codestream/how-use-codestream/performance-monitoring). + +Establezca las opciones métricas a nivel de código en la sección `code_level_metrics` . Se pueden [anular](#System_Properties) con una propiedad del sistema con el prefijo `newrelic.config.code_level_metrics` . + + + + + + + + + + + + + + + + + +
+ Tipo + + Booleano +
+ Por defecto + + `true` +
+ + [La métrica a nivel de código](/docs/codestream/observability/code-level-metrics) está deshabilitada de forma predeterminada en la versión 7.10.0 del agente. Establezca esto en verdadero para activarlo. A partir de la versión 7.11.0 del agente, el valor predeterminado es, como se indicó anteriormente, `true`. +
+
+ +## Configuración Errors Inbox [#errors-inbox-configuration] + +Configurar una de las siguientes etiquetas le ayudará a identificar qué versiones de su software están produciendo los errores. + +* `NEW_RELIC_METADATA_SERVICE_VERSION` creará `tags.service.version` en los datos del evento que contienen la versión de su código que se desplegará, en muchos casos una versión semántica como 1.2.3, pero no siempre. +* `NEW_RELIC_METADATA_RELEASE_TAG `creará `tags.releaseTag` en los datos del evento que contienen la etiqueta de lanzamiento (como v0.1.209 o release-209). +* `NEW_RELIC_METADATA_COMMIT` creará `tags.commit` en los datos del evento que contienen el sha de confirmación. Puede utilizar el sha completo o utilizar sólo los primeros siete caracteres (por ejemplo, 734713b). + +Una próxima versión de Errors Inbox rastreará automáticamente qué versiones de su software están produciendo errores. Los datos de la versión se mostrarán en [CodeStream](/docs/codestream/how-use-codestream/performance-monitoring/#buildsha). + +## Rastreador multiaplicación [#Cross_Application_Tracer] + + + El seguimiento de aplicaciones múltiples ha quedado obsoleto a partir de la versión 7.4.0 del agente y se eliminará en una versión futura del agente. + + En lugar de utilizar el rastreo multiaplicación, recomendamos nuestra característica [rastreo distribuido](#distributed-tracing) . rastreo distribuido es una mejora de la característica de rastreo multiaplicación y se recomienda para sistemas distribuidos grandes. + + +Configure las opciones de seguimiento de múltiples aplicaciones en la sección `cross_application_tracer` . Estas configuraciones se pueden [anular](#System_Properties) con una propiedad del sistema con el prefijo `newrelic.config.cross_application_tracer` . + +[El rastreo de aplicaciones múltiples](/docs/apm/transactions/cross-application-traces/cross-application-tracing) agrega encabezados de solicitud y respuesta a llamadas externas utilizando la biblioteca Apache HttpClient. Esto proporciona mejores datos de rendimiento cuando otro agente de New Relic llama al monitor de aplicaciones. + + + + + + + + + + + + + + + + + +
+ Tipo + + Booleano +
+ Por defecto + + `true` +
+ + [El rastreo multiaplicación](/docs/apm/transactions/cross-application-traces/cross-application-tracing) está habilitado por defecto. Establezca esto en falso para desactivarlo. +
+
+ +## Evento personalizado [#Custom_Events] + +Establezca la configuración del evento personalizado en la sección `custom_insights_events` . Puede [anular](#System_Properties) esta configuración con una propiedad del sistema con el prefijo `newrelic.config.custom_insights_events` . + +APM le permite [registrar datos de eventos personalizados](/docs/insights/insights-data-sources/custom-data/insert-custom-events-new-relic-apm-agents) a través del agente de lenguaje de API de New Relic, que [luego puede consultar](/docs/query-your-data/explore-query-data/explore-data/introduction-querying-new-relic-data). + + + Para versiones de agente de Java anteriores a 4.1.0, Se reconoce la siguiente configuración YAML: + + ```yml + custom_insights_events.enabled: true + custom_insights_events.max_samples_stored: 5000 + ``` + + Para las versiones del agente 4.1.0 y superiores, la configuración YAML utiliza el formato de sección anidada: + + ```yml + custom_insights_events: + enabled: false + max_samples_stored: 5000 + ``` + + + + + + + + + + + + + + + + + + +
+ Tipo + + Booleano +
+ Por defecto + + `true` +
+ + Esto habilita el servicio de evento personalizado. +
+ + + + + + + + + + + + + + + + +
+ Tipo + + Entero +
+ Por defecto + + `255` +
+ + El tamaño máximo de un valor de atributo, después del cual el valor se truncará. El valor predeterminado es `255` bytes (en codificación de juego de caracteres UTF-8) y el límite máximo es `4095`. + + Esta configuración existe en el agente de Java versión 8.9.0+. +
+ + + + + + + + + + + + + + + + +
+ Tipo + + Entero +
+ Por defecto + + `30000` +
+ + El número máximo de eventos personalizados muestreados se informa cada 60 segundos. +
+
+ +## Transformador de clase [#Class_Transformer] + +Establezca la configuración relacionada con la instrumentación en la sección `class_transformer` . Puede anular esta configuración con una [propiedad del sistema](#System_Properties) con prefijo `newrelic.config.class_transformer` o una [variable de entorno](#Environment_Variables) con prefijo `NEW_RELIC_CLASS_TRANSFORMER_` . + + + + + + + + + + + + + + + + + +
+ Tipo + + Booleano +
+ Por defecto + + FALSO +
+ + Cuando está habilitada, la denominación mejorada de transacciones Spring nombrará cualquier transacción que se origine en un controlador Spring después de la ruta definida y el método HTTP. Por ejemplo: `/customer/v1/edit (POST)`. Esto incluye controladores que implementan o amplían interfaces/clases con anotaciones relacionadas con WebMVC (`@RestController`, `@Controller`, `@RequestMapping`, etc.). + + De forma predeterminada, esto está configurado en `false`, que nombrará la transacción para esos tipos de controladores según el nombre de clase y el método del controlador. Por ejemplo; `CustomerController/edit`. Esta es la lógica de nomenclatura heredada de versiones anteriores del agente. Los controladores "estándar", con todas las anotaciones relevantes presentes en la clase real, seguirán recibiendo nombres según la ruta y el método HTTP. + + Esta configuración existe en el agente de Java versión 8.9.0+. +
+ + + + + + + + + + + + + + + + +
+ Tipo + + Cadena +
+ Por defecto + + (ninguno) +
+ + Cadena que contiene el nombre completo de la clase de anotación que utiliza el agente para determinar qué métodos especificados por el usuario instrumentar. Para obtener más información sobre anotaciones personalizadas, consulte [Colección Java métrica personalizada](/docs/java/java-custom-metric-collection). +
+ + + + + + + + + + + + + + + + +
+ Tipo + + Booleano +
+ Por defecto + + `false` +
+ + Habilite esta opción para capturar el nombre `userPrincipal` . Este nombre se incluye como traza de la transacción (con nombres de atributo `user` y `enduser.id`), y [se puede consultar](/docs/query-your-data/explore-query-data/explore-data/introduction-querying-new-relic-data). Esto también le permite ver en [Errors Inbox cuántos usuarios se ven afectados por un grupo de errores](/docs/errors-inbox/error-users-impacted/). +
+
+ +## rastreo distribuido [#dt-main] + + + Habilitar rastreo distribuido deshabilita [el rastreo de múltiples aplicaciones](#Cross_Application_Tracer) y tiene otros efectos en la característica APM. Antes de habilitar, lea la [guía de transición](/docs/transition-guide-distributed-tracing). + + Requiere [agente de Java versión 4.3.0 o superior](/docs/agents/java-agent/installation/upgrade-java-agent). + + +[rastreo distribuido](/docs/understand-dependencies/distributed-tracing/get-started/introduction-distributed-tracing) te permite ver el camino que sigue una solicitud a medida que viaja a través de un sistema distribuido. Está activado de forma predeterminada para el agente de Java versión 7.4.0 o superior. + +En el archivo de configuración, puede anular esto manualmente en la sección `distributed_tracing` . También puede anular esto utilizando una propiedad del sistema con prefijo (`newrelic.config.distributed_tracing`) o una variable de entorno (`NEW_RELIC_DISTRIBUTED_TRACING_ENABLED`). Vea los ejemplos a continuación. + +Para obtener más información sobre cómo configurar rastreo distribuido, consulte [Habilitar rastreo distribuido para su aplicación Java](/docs/apm/agents/go-agent/instrumentation/distributed-tracing-go-agent). + + + + + + + + + + + + + + + + + +
+ Tipo + + Booleano +
+ Por defecto + + `true` +
+ + Establezca esto en `false` para deshabilitar el rastreo distribuido. Por ejemplo, en el archivo de configuración, usarías: + + ```yml + distributed_tracing: + enabled: false + ``` + + Aquí hay otras opciones para desactivar rastreo distribuido: + + [Propiedad del sistema](/docs/agents/java-agent/configuration/java-agent-configuration-config-file#System_Properties): + + ```ini + -Dnewrelic.config.distributed_tracing.enabled=false + ``` + + Variables ambientales: + + ```ini + NEW_RELIC_DISTRIBUTED_TRACING_ENABLED=false + ``` +
+ + + + + + + + + + + + + + + + +
+ Tipo + + Booleano +
+ Por defecto + + `false` +
+ + De forma predeterminada, las versiones compatibles del agente utilizan tanto el encabezado `newrelic` como los encabezados W3C Trace Context para rastreo distribuido. El encabezado rastreo distribuido `newrelic` permite la interoperabilidad con agentes más antiguos que no admiten encabezados W3C Trace Context . Las versiones del agente que admiten encabezados W3C Trace Context los priorizarán sobre `newrelic` encabezados para rastreo distribuido. + + Si no desea utilizar el encabezado `newrelic`, configurarlo en `true` hará que el agente excluya el encabezado `newrelic` y solo use encabezados W3C Trace Context para rastreo distribuido. + + Por ejemplo, para excluir `newrelic` encabezados en el archivo de configuración, usaría: + + ```yml + distributed_tracing: + exclude_newrelic_header: true + ``` + + Para excluir `newrelic` encabezados usando una [propiedad del sistema](/docs/agents/java-agent/configuration/java-agent-configuration-config-file#System_Properties), usaría: + + ```ini + -Dnewrelic.config.distributed_tracing.exclude_newrelic_header=true + ``` +
+
+ +## Recolector de errores [#Error_Collector] + +Establezca la configuración del selector de errores en la sección `error_collector` . A menos que se indique lo contrario, puede [anular](#System_Properties) esta configuración con una propiedad del sistema con el prefijo `newrelic.config.error_collector` . El recolector de errores captura información sobre excepciones no detectadas y las envía a New Relic para su visualización. + + + Para saber cómo configurar errores para el agente de Java, incluido cómo configurar errores a través de la UI, consulte [configuración de errores del agente de Java](/docs/agents/java-agent/configuration/java-agent-error-configuration). + + + + + + + + + + + + + + + + + + +
+ Tipo + + Booleano +
+ Por defecto + + `true` +
+ + Habilitar la recopilación de errores. +
+ + + + + + + + + + + + + + + + +
+ Tipo + + Sección que contiene una lista de cadenas `class_name` completas +
+ Por defecto + + (ninguno) +
+ + Los nombres de clases de excepción especificados se ignorarán y no afectarán la tasa de errores ni la puntuación de Apdex, ni se informarán a APM. **Cannot be specified by system property.** + + Esta configuración es dinámica, por lo que al ejecutar agente notará cambios en `newrelic.yml` sin reiniciar la JVM. + + Por ejemplo: + + ```yml + error_collector: + ignore_classes: + - "com.example.MyException" + - "com.example.DifferentException" + ``` + + Se puede utilizar una variable de entorno para enumerar los nombres de clases de excepción que desea ignorar: + + ```ini + NEW_RELIC_ERROR_COLLECTOR_IGNORE_CLASSES="[\"com.example.MyException\", \"com.example.DifferentException\"]" + ``` +
+ + + + + + + + + + + + + + + + +
+ Tipo + + Sección que contiene un `class_name` completo y una lista de `messages` por clase de error +
+ Por defecto + + (ninguno) +
+ + Especifique nombres de clases de excepción que el agente debe ignorar. Los mensajes ignorados no afectarán la tasa de errores o la puntuación Apdex, ni serán reportados a APM. Contiene `yaml` pares que constan de: + + * Un nombre de clase de excepción completo que no debe informarse a APM + + Y + + * Una lista de excepciones `message`con las que comparar (se requiere al menos una) + + Si el nombre de la clase de excepción coincide con un error pero el mensaje no, entonces se ignorará ese error **will not** . Las cadenas de mensajes utilizan `contains` para hacer coincidir. Un mensaje no se puede proporcionar por sí solo y siempre debe ir acompañado de un nombre de clase completo. **Cannot be specified by system property.** + + Esta configuración es dinámica, por lo que al ejecutar agente notará cambios en `newrelic.yml` sin reiniciar la JVM. + + Por ejemplo: + + ```yml + error_collector: + ignore_messages: + com.example.MyException: + - "Some error message to ignore" + - "Some other error message to ignore" + com.example.DifferentException: + - "Some different error message to ignore" + ``` + + Se puede utilizar una variable de entorno para enumerar nombres de clases de excepción y mensajes que desea ignorar: + + ```ini + NEW_RELIC_ERROR_COLLECTOR_IGNORE_MESSAGES="{\"com.example.MyException\": [\"Some error message to ignore\", \"Some other error message to ignore\"], \"com.example.DifferentException\": [\"Some different error message to ignore\"]}" + ``` +
+ + + + + + + + + + + + + + + + +
+ Tipo + + Lista de cadenas y rangos separados por comas +
+ Por defecto + + `404` +
+ + Una lista separada por comas compuesta por rangos individuales y discontinuos de códigos de estado HTTP que no deben tratarse como errores. + + Si esta propiedad se comenta en el archivo de configuración `newrelic.yml` , el código de estado 404 se ignorará automáticamente. Cuando se utiliza [la configuración del lado del servidor](/docs/agents/manage-apm-agents/configuration/server-side-agent-configuration), se debe especificar el código de estado 404 para que se ignore. + + Esta configuración es dinámica, por lo que al ejecutar agente notará cambios en `newrelic.yml` sin reiniciar la JVM. + + Por ejemplo: + + ```yml + error_collector: + ignore_status_codes: 404,507-511 + ``` +
+ + + + + + + + + + + + + + + + +
+ Tipo + + Sección que contiene una lista de cadenas `class_name` completas +
+ Por defecto + + (ninguno) +
+ + Evita que clases de excepción específicas afecten la tasa de errores o la puntuación de Apdex y al mismo tiempo informa los errores a APM. **Cannot be specified by system property.** + + Esta configuración es dinámica, por lo que al ejecutar agente notará cambios en `newrelic.yml` sin reiniciar la JVM. + + Por ejemplo: + + ```yml + error_collector: + expected_classes: + - "com.example.MyException" + - "com.example.DifferentException" + ``` + + Se puede utilizar una variable de entorno para enumerar los nombres de clases de excepción esperadas: + + ```ini + NEW_RELIC_ERROR_COLLECTOR_EXPECTED_CLASSES="[\"com.example.MyException\", \"com.example.DifferentException\"]" + ``` +
+ + + + + + + + + + + + + + + + +
+ Tipo + + Sección que contiene un `class_name` completo y una lista de `messages` por clase de error +
+ Por defecto + + (ninguno) +
+ + Contiene pares de yaml que constan de un nombre de clase de excepción completo que debe marcarse como se esperaba y, por lo tanto, evitar que afecte la tasa de errores o la puntuación de Apdex y una lista de excepciones `message`con las que comparar, la última de las cuales es obligatoria al menos una. . Si el nombre de la clase de excepción coincide con un error pero el mensaje no, entonces ese error **will not** se marcará como se esperaba y, por lo tanto, afectará la tasa de errores y la puntuación de Apdex. + + Las cadenas de mensajes utilizan `contains` para hacer coincidir. Un mensaje no se puede proporcionar por sí solo y siempre debe ir acompañado de un nombre de clase completo. **Cannot be specified by system property.** + + Esta configuración es dinámica, por lo que al ejecutar agente notará cambios en `newrelic.yml` sin reiniciar la JVM. + + Por ejemplo: + + ```yml + error_collector: + expected_messages: + com.example.MyException: + - "Some expected error message" + - "Some other expected error message" + com.example.DifferentException: + - "Some different expected error message" + ``` + + Se puede utilizar una variable de entorno para enumerar los nombres y mensajes de clases de excepción esperados: + + ```ini + NEW_RELIC_ERROR_COLLECTOR_EXPECTED_MESSAGES="{\"com.example.MyException\": [\"Some error message to ignore\", \"Some other error message to ignore\"], \"com.example.DifferentException\": [\"Some different error message to ignore\"]}" + ``` +
+ + + + + + + + + + + + + + + + +
+ Tipo + + Lista de cadenas y rangos separados por comas +
+ Por defecto + + (ninguno) +
+ + Una lista separada por comas compuesta por rangos individuales y discontinuos de códigos de estado HTTP que se marcarán como se esperaba y, por lo tanto, se evitará que afecten la tasa de errores o la puntuación Apdex. + + Esta configuración es dinámica, por lo que al ejecutar agente notará cambios en `newrelic.yml` sin reiniciar la JVM. + + Por ejemplo: + + ```yml + error_collector: + expected_status_codes: 415,500-506 + ``` + + Los códigos de estado esperados también pueden estar con la variable de entorno `NEW_RELIC_ERROR_COLLECTOR_EXPECTED_STATUS_CODES` . +
+ + + + + + + + + + + + + + + + +
+ Tipo + + Booleano +
+ Por defecto + + `true` +
+ + Esta configuración se puede utilizar para activar o desactivar todos los atributos para errores de traza. Si `attributes.enabled` es `false` en el nivel raíz, no se enviará ningún atributo a los errores de traza independientemente de cómo se establezca esta propiedad en `error_collector`. +
+ + + + + + + + + + + + + + + + +
+ Tipo + + Lista de cadenas +
+ Por defecto + + (ninguno) +
+ + Si los atributos están habilitados para errores de traza, todas las claves de atributos que se encuentran en esta lista se enviarán a New Relic en errores de traza. Para obtener más información, consulte las [reglas de atributos del agente](/docs/apm/other-features/attributes/agent-attributes). +
+ + + + + + + + + + + + + + + + +
+ Tipo + + Lista de cadenas +
+ Por defecto + + (ninguno) +
+ + Las claves de atributos que se encuentran en esta lista no se enviarán a New Relic en caso de errores de traza. Para obtener más información, consulte las [reglas de atributos del agente](/docs/apm/other-features/attributes/agent-attributes). +
+ + + + + + + + + + + + + + + + +
+ Tipo + + Booleano +
+ Por defecto + + `true` +
+ + Cuando se detectan varios errores en una transacción, solo se informará el último error de forma predeterminada. En cambio, establecer esta propiedad en `false` informará solo el primer error que se detecte. Para obtener más información, consulte la [API NoticeError](/docs/agents/java-agent/configuration/java-agent-error-configuration/). Por ejemplo: + + ```yml + error_collector: + ignoreErrorPriority: false + ``` +
+ + + + + + + + + + + + + + + + +
+ Tipo + + Lista de cadenas separadas por comas +
+ Por defecto + + (ninguno) +
+ + Todos los nombres de clases de excepción especificados no se tratarán como errores. Obsoleto a partir de agente de Java 3.40.0 y reemplazado por [`ignore_classes`](#ec-ignore_classes). + + Por ejemplo: + + ```yml + error_collector: + ignore_errors: some.other.MyException + ``` +
+
+ +## Rastreador externo [#External_Tracer] + +Configure las opciones de seguimiento externo en la sección `external_tracer` . Estas opciones se pueden [anular](#System_Properties) con una propiedad del sistema con el prefijo `newrelic.config.external_tracer` . + + + + + + + + + + + + + + + + + +
+ Tipo + + Booleano +
+ Por defecto + + `false` +
+ + Esta configuración se puede utilizar para controlar la recopilación de URI de solicitud saliente para errores y la traza de la transacción. Establezca esto en verdadero para deshabilitar la recopilación de esta información. +
+
+ +## Configuración del nombre de host [#hostname_configuration] + +Establezca las opciones de configuración del nombre de host en la sección `process_host` . Estas opciones se pueden [anular](#System_Properties) con una propiedad del sistema con el prefijo `newrelic.config.process_host` . + +Utilice estas propiedades para configurar el nombre de host que se muestra en la UI: + + + + + + + + + + + + + + + + + +
+ Tipo + + Cadena +
+ Por defecto + + (ninguno) +
+ + Establezca un [nombre para mostrar](/docs/agents/java-agent/configuration/hostname-logic-java#display-name) para decorar la etiqueta "host:puerto" en la UI de New Relic. +
+ + + + + + + + + + + + + + + + +
+ Tipo + + Cadena +
+ Por defecto + + `4` +
+ + Si no se puede determinar el nombre del host, se utilizará la dirección IP del host. Esta propiedad determina si se debe utilizar la dirección IPv4 o IPv6. El valor predeterminado es IPv4. +
+
+ +## Rastreo infinito + + + Requisitos: + + * [agente de Java 5.12.1 o superior](/docs/agents/java-agent/installation/update-java-agent). + * El seguimiento infinito no funciona si `enable_auto_app_naming` está habilitado. + + +Para activar Infinite Tracing, habilite rastreo distribuido y agregue la configuración adicional a continuación. Para ver un ejemplo, consulte [Agente de idioma: Configurar rastreo distribuido](/docs/understand-dependencies/distributed-tracing/enable-configure/language-agents-enable-distributed-tracing#java-config). + + + + + + + + + + + + + + + + + +
+ Tipo + + Cadena +
+ Por defecto + + (ninguno) +
+ + Para obtener ayuda para obtener una entrada de host de observador de traza Infinite Tracing válida, consulte [buscar o crear un observador de traza](/docs/understand-dependencies/distributed-tracing/enable-configure/language-agents-enable-distributed-tracing#provision-trace-observer). + + Puedes configurar esto a través de YAML: + + ```yml + infinite_tracing: + trace_observer: + host: YOUR_TRACE_OBSERVER_HOST + ``` + + También puede utilizar la propiedad del sistema `newrelic.config.infinite_tracing.trace_observer.host` o la variable de entorno `NEW_RELIC_INFINITE_TRACING_TRACE_OBSERVER_HOST`. +
+
+ +## Instrumentación + +Estas opciones se configuran en la sección `instrumentation` y se pueden anular mediante una propiedad del sistema con el prefijo `newrelic.config.instrumentation` . + + + + + + + + + + + + + + + + + +
+ Tipo + + Booleano +
+ Por defecto + + false +
+ + De forma predeterminada, las anotaciones [@TraceLambda](/docs/apm/agents/java-agent/api-guides/java-agent-api-instrument-using-annotation/#tracelambda) están deshabilitadas. Para utilizar la funcionalidad de anotación para rastrear métodos lambda, debe habilitar explícitamente la característica de la siguiente manera: + + Puedes configurar esto a través de YAML: + + ```yml + instrumentation: + trace_lambda: + enabled: true + ``` + + También puede utilizar la propiedad del sistema `newrelic.config.instrumentation.trace_lambda.enabled=true` o la variable de entorno `NEW_RELIC_INSTRUMENTATION_TRACE_LAMBDA_ENABLED`. +
+
+ +## Recolector de Jar + +El agente de Java recopila información sobre archivos jar y sus versiones en el classpath de la aplicación. + +Establezca la configuración de la colección jar en la sección `jar_collector` . Estas opciones de configuración se pueden [anular](#System_Properties) con una propiedad del sistema con el prefijo `newrelic.config.jar_collector` . Las opciones incluyen: + + + + + + + + + + + + + + + + + +
+ Tipo + + Booleano +
+ Por defecto + + `true` +
+ + Se utiliza para habilitar/deshabilitar la recopilación y los informes de jar. +
+ + + + + + + + + + + + + + + + +
+ Tipo + + Booleano +
+ Por defecto + + `true` +
+ + Se utiliza para habilitar/deshabilitar la colección de archivos temporales. Los archivos jar temporales son aquellos que residen en el directorio especificado por la propiedad del sistema `java.io.tmpdir`. +
+ + + + + + + + + + + + + + + + +
+ Tipo + + Entero +
+ Por defecto + + `10` +
+ + El número máximo de archivos jar para procesar por segundo. Debe ser positivo. +
+
+ +## JFR (perfiles en tiempo real) + +El agente de Java utiliza Java Flight Recorder (JFR) para recopilar datos JVM de alta fidelidad para [la creación de perfiles en tiempo real](/docs/agents/java-agent/features/real-time-profiling-java-using-jfr-metrics/). + +Configure la creación de perfiles en tiempo real en la sección `jfr` del agente YAML con [propiedades del sistema](#System_Properties) con el prefijo `newrelic.config.jfr.` o con [variables de entorno](#Environment_Variables) con el prefijo `NEW_RELIC_JFR_`. + + + + + + + + + + + + + + + + + +
+ Tipo + + Booleano +
+ Por defecto + + `false` +
+ + Configúrelo en `true` para habilitar [la creación de perfiles en tiempo real con JFR](/docs/agents/java-agent/features/real-time-profiling-java-using-jfr-metrics/). Esta configuración se aplicará dinámicamente y no requiere reiniciar JVM. + + + La creación de perfiles en tiempo real con JFR está activada de forma predeterminada en el agente de Java [versión 7.1.0](/docs/release-notes/agent-release-notes/java-release-notes). Si tiene cualquier otro agente versión 7.0.0 o superior, puede activar JFR cambiando el valor a `true`. + +
+ + + + + + + + + + + + + + + + +
+ Tipo + + Booleano +
+ Por defecto + + `false` +
+ + Establezca en `true` para habilitar el registro de auditoría que mostrará todas las métricas y eventos JFR en cada lote de cosecha. El registro de auditoría es extremadamente detallado y sólo debe usarse con fines de resolución de problemas. + + + Esto se aplica al agente de Java [versión 7.0.0 o superior](/docs/release-notes/agent-release-notes/java-release-notes). + +
+
+ +## JMX + +Para configurar estas opciones, utilice la sección `jmx` . Para [anularlos](#System_Properties) , utilice una propiedad del sistema con el prefijo `newrelic.config.jmx` . + +El agente de Java utiliza JMX para recopilar datos de JVM. Además, el agente puede exponer metadatos de enlace a través de JMX que pueden ser utilizados por otros sistemas de seguimiento. + + + + + + + + + + + + + + + + + +
+ Tipo + + Booleano +
+ Por defecto + + `true` +
+ + Esta configuración se puede utilizar para activar o desactivar todas las funciones de JMX. +
+ + + + + + + + + + + + + + + + +
+ Tipo + + Booleano +
+ Por defecto + + `false` +
+ + Esta configuración se puede habilitar para permitir que el agente de Java exponga metadatos de enlace a través de JMX remoto. + + + Esto se aplica al agente de Java [versión 6.1.0 o superior](/docs/release-notes/agent-release-notes/java-release-notes). + +
+
+ +## Kafka cola de mensajes [#kafka-message-queues] + +Puede encontrar información detallada sobre la configuración de la instrumentación de Kafka en la página [instrumentado Kafka cola de mensajes](docs/apm/agents/java-agent/instrumentation/java-agent-instrument-kafka-message-queues/) . + +* \[Kafka evento collection(/docs/agente APM/java-instrumentación del agente/agente de Java-instrumentado-kafka-cola de mensajes/#collect-kafka-evento) +* [Nodo Kafka métrico](/docs/apm/agents/java-agent/instrumentation/java-agent-instrument-kafka-message-queues/#kafka-node-metrics) +* [Evento de configuración de Kafka](/docs/apm/agents/java-agent/instrumentation/java-agent-instrument-kafka-message-queues/#kafka-config) +* [Kafka transmite la transacción](/docs/apm/agents/java-agent/instrumentation/java-agent-instrument-kafka-message-queues/#collect-kafka-streams-transactions) +* [Kafka conectar transacción](/docs/apm/agents/java-agent/instrumentation/java-agent-instrument-kafka-message-queues/#collect-kafka-connect-transactions) +* [Kafka rastreo distribuido](/docs/apm/agents/java-agent/instrumentation/java-agent-instrument-kafka-message-queues/#collect-kafka-distributed-traces) + +## Logs en contexto [#logs-in-context] + +A partir de la versión `7.6.0` del agente de Java, se agregó compatibilidad con [el contexto de inicio de sesión](/docs/logs/logs-context/java-configure-logs-context-all) al agente, lo que facilita su uso en el marco de registro compatible. Para obtener sugerencias sobre cómo utilizar el agente de Java para iniciar sesión en contexto, consulte [Java iniciar sesión en contexto](/docs/logs/logs-context/java-configure-logs-context-all). + +El cambio de estas configuraciones en el archivo de configuración de su agente local ocurre dinámicamente y no requiere reiniciar el agente para que esos cambios surtan efecto. Una configuración de ejemplo: + +```yml +application_logging: + enabled: true + forwarding: + enabled: true + max_samples_stored: 10000 + context_data: + enabled: false + include: + exclude: + metrics: + enabled: true + local_decorating: + enabled: false +``` + +Establezca la configuración del contexto de inicio de sesión en la sección `application_logging` . Esto se puede [anular](/docs/apm/agents/java-agent/configuration/java-agent-configuration-config-file#System_Properties) con una propiedad del sistema con el prefijo `newrelic.config.application_logging` . La única opción disponible es: + + + + + + + + + + + + + + + + + +
+ Tipo + + Booleano +
+ Por defecto + + `true` +
+ + Configúrelo en `true` para habilitar la característica principal de inicio de sesión en contexto. Cuando está habilitado, se habilita instrumentación adicional framework de registro, independientemente de si los registros se decoran o se envían a New Relic. + + + Las versiones 7.7.0 y superiores del agente tienen esta característica habilitada en el archivo de configuración del agente de forma predeterminada. + + + Establezca en `false` para deshabilitar completamente esta característica, incluida la recopilación de log métrica. +
+
+ +### Reenvío de log [#log-forwarding] + +Si está utilizando un framework de registro compatible y desea utilizar el agente para enviar su registro de aplicación a New Relic, puede controlarlo a través de la configuración en la sección `forwarding`. Estas configuraciones pueden ser anuladas por la propiedad del sistema con el prefijo `newrelic.config.application_logging.forwarding` . Las opciones disponibles son: + + + + + + + + + + + + + + + + + +
+ Tipo + + Booleano +
+ Por defecto + + `true` +
+ + Habilita el envío de log de aplicación a New Relic. + + + Las versiones del agente 7.7.0 y superiores tienen esta característica habilitada en el archivo de configuración del agente de forma predeterminada. + + El uso de la característica de reenvío de registros aumentará su ingesta de datos, lo que puede afectar su facturación. Para obtener más información, consulte nuestra documentación sobre [el seguimiento de su ingesta de datos](/docs/apm/new-relic-apm/getting-started/get-started-logs-context#ingest). + + Si ya tiene una solución de reenvío de registros y está actualizando su agente para usar el registro automático en contexto, asegúrese de **disable your old log forwarder**. De lo contrario, su aplicación enviará líneas log dobles. Dependiendo de su cuenta, esto podría resultar en una doble facturación. Para obtener más información, siga los procedimientos para desactivar su [reenviador de registros específico](/docs/logs/forward-logs/enable-log-management-new-relic#log-forwarding). + + + Establece esto en `true` para que tu registro decorado se envíe a New Relic. + + Establezca esto en `false` si no desea que su registro decorado se envíe a New Relic. +
+ + + + + + + + + + + + + + + + +
+ Tipo + + Entero +
+ Por defecto + + `10000` +
+ + Un entero positivo que especifica el número máximo de líneas de registro por minuto que se enviarán. + + Establezca esto en `0` para deshabilitar efectivamente el envío de registros. + + + Esto controla la cantidad de registros enviados _por minuto_. Establecer `max_samples_stored` en `0`, o cualquier valor menor que `12`, _no_ deshabilita la característica en sí, aunque sí da como resultado que no se envíen líneas log a New Relic. + + + Establezca esto en un valor más bajo para reducir la cantidad de líneas log enviadas (puede causar muestreo log ). Establezca esto en un valor más alto para enviar más líneas log . + + Cada log recibe la misma prioridad que su transacción asociada. Los registros que ocurren fuera de una transacción recibirán una prioridad aleatoria. Es posible que algunos registros no se incluyan porque están limitados por `max_samples_stored`. Por ejemplo, si el registro `max_samples_stored` se establece en 10 000 y la transacción 1 tiene 10 000 entradas log , solo se registrarán las entradas log de la transacción 1. Si la transacción 1 tiene menos de 10 000 registros, recibirá todos los registros de la transacción 1. Si todavía hay espacio, recibirás todo el registro de la transacción 2, y así sucesivamente. + + Si después de todo se registran los registros de transacciones muestreadas y no han alcanzado el límite en `max_samples_stored`, entonces se envían mensajes de registro de transacciones que no estaban en nuestro muestreo. Si queda alguno, se registran mensajes de registro fuera de la transacción. +
+
+ +#### Log datos de contexto [#log-context-data] + +El agente de Java puede capturar datos de contexto (Contexto de diagnóstico asignado en logback/slf4j, ThreadContext en log4j2) y agregar su contenido como atributo en el registro reenviado a New Relic. Puedes controlarlo a través de la configuración en la sección `context_data` , anidada en la sección `forwarding` . Estas configuraciones pueden ser anuladas por la propiedad del sistema con el prefijo `newrelic.config.application_logging.forwarding.context_data` . Las opciones disponibles son: + + + + + + + + + + + + + + + + + +
+ Tipo + + Booleano +
+ Por defecto + + `false` +
+ + Establezca esto en `true` envío de datos de contexto como atributo log a New Relic. + + Establezca esto en `false` si no desea que los datos de contexto en el registro se envíen a New Relic. +
+ + + + + + + + + + + + + + + + +
+ Tipo + + Lista de cadenas +
+ Por defecto + + (ninguno) +
+ + Si `context_data` está habilitado para el reenvío de registros, todas las claves de atributos que se encuentran en esta lista se enviarán a New Relic en los log . Si esta lista está vacía, se enviarán todos los atributos. +
+ + + + + + + + + + + + + + + + +
+ Tipo + + Lista de cadenas +
+ Por defecto + + (ninguno) +
+ + Si `context_data` está habilitado para el reenvío de registros, todas las claves de atributos que se encuentran en esta lista NO se enviarán a New Relic en log . + + La lista de inclusión y exclusión sigue las reglas `Exclude overrides include`, `More specific rules take priority`, `Keys are case-sensitive` y `Use an asterisk for wildcards` definidas en [las reglas de atributo](/docs/apm/agents/java-agent/configuration/java-agent-configuration-config-file). +
+
+ +### Log métrico [#log-metrics] + +Además de permitirle decorar y enviar líneas log individuales, el agente de Java puede capturar datos métricos de registro. Puede encontrar estos datos en el gráfico de registro en la UI de New Relic. Puede configurar los ajustes log métrica en la sección `metrics`. Puede anular esta configuración con la propiedad del sistema con el prefijo `newrelic.config.application_logging.metrics` . La única opción disponible es: + + + + + + + + + + + + + + + + + +
+ Tipo + + Booleano +
+ Por defecto + + `true` +
+ + Permite capturar información métrica sobre su registro y nivel de registros, que se muestra en un gráfico en la página APM **Summary** . + + Deje esto configurado en `true` para permitir que el agente capture información métrica sobre su registro. + + Establezca esto en `false` para desactivar esta característica. + + + Si desactiva la recopilación de log métrica, el gráfico log en la página de resumen aparecerá en blanco. + +
+
+ +### Decoración log [#log-decorating] + +Puede configurar los ajustes de decoración log en la sección `local_decorating`. Puede utilizar esto para controlar cómo se decoran las líneas log locales. Puede anular esta configuración con una propiedad del sistema con el prefijo `newrelic.config.application_logging.local_decorating` . La única opción disponible es: + + + + + + + + + + + + + + + + + +
+ Tipo + + Booleano +
+ Por defecto + + `false` +
+ + Esto controla si las líneas log almacenadas localmente están decoradas o no. Esto es independiente de si el reenvío de registros está habilitado o no y se utiliza para ayudar a los clientes que desean utilizar una solución de reenvío de registros separada. + + Establezca esto en `true` para que el agente agregue metadatos de enlace de contexto de inicio de sesión a líneas log almacenadas localmente por el marco compatible. + + + Habilitar la decoración log locales agregará metadatos de enlace a sus archivos de registro de aplicación, lo que resultará en un aumento en el almacenamiento en disco. Desactive esta característica si es inaceptable. + + No es necesario utilizar la decoración log local cuando el reenvío de logs está habilitado. Hacerlo hará que se agreguen metadatos de enlace a su mensaje de registro innecesariamente, lo que puede distraer visualmente. + + + Establezca esto en `false` para desactivar la característica de decoración local. Esto _no_ afectará la decoración de las líneas log que se envían a New Relic. +
+
+ +## Configuración de registro [#Logging-Configuration] + +Estas son parte de las variables de configuración generales. Se desglosan aquí porque con frecuencia se modifican para la depuración. + +Algunas de las variables de configuración de registro son dinámicas y no necesitan reiniciar el host para que surtan efecto. Por ejemplo, si los archivos de registro crecen demasiado rápido, [`log_level`](#cfg-log_level) se puede configurar en una configuración menos detallada para reducir la tasa de informes. + +A continuación se muestra el orden de prioridad y explicación de las variables de configuración que afectan la rotación log . + +* Si `log_daily` es `true`: + + * Un valor `log_limit_in_kbytes` mayor que cero dará como resultado una política de activación compuesta, donde el registro se actualizará una vez al día o cuando se alcance el tamaño definido, reteniendo hasta `log_file_count` archivos + * Un valor de `log_limit_in_kbytes` igual a cero dará como resultado que el registro se actualice una vez al día y conserve hasta `log_file_count` archivos + +* Si `log_daily` es `false` y `log_limit_in_kbytes` > 0, se configurará una política basada en el tamaño, donde el registro se actualizará cuando se alcance el tamaño definido, reteniendo hasta `log_file_count` archivos + +* Si `log_daily` es `false` y `log_limit_in_kbytes` = 0, no se configurará ninguna lógica de archivo de registro continuo + +Dependiendo de la tasa de crecimiento, es posible que el tamaño del archivo de registro exceda el valor configurado en una pequeña cantidad. + + + + + + + + + + + + + + + + + +
+ Tipo + + Booleano +
+ Por defecto + + `false` +
+ + Establezca en `true` para actualizar el registro diariamente. +
+ + + + + + + + + + + + + + + + +
+ Tipo + + Entero +
+ Por defecto + + `1` +
+ + El número máximo de archivos de registro que se deben conservar cuando se utiliza la rotación log . +
+ + + + + + + + + + + + + + + + +
+ Tipo + + Cadena +
+ Por defecto + + `newrelic_agent.log` +
+ + El nombre del archivo de registro no calificado o la cadena `STDOUT` que iniciará log en la salida estándar. +
+ + + + + + + + + + + + + + + + +
+ Tipo + + Cadena +
+ Por defecto + + `logs` subdirectorio donde se encuentra `newrelic.jar` +
+ + El camino del archivo de registro. + + + Si se especifica `log_file_path` , el directorio ya debe existir. Si se utiliza el valor predeterminado, el agente intentará crear el directorio. + +
+ + + + + + + + + + + + + + + + +
+ Tipo + + Cadena +
+ Por defecto + + `info` +
+ + El nivel de detalle log . Cuando cambie esta configuración en el archivo de configuración yaml del agente, se actualizará dinámicamente. Sin embargo, la variable de entorno y la propiedad del sistema no se actualizarán dinámicamente. + + El agente utiliza su propio archivo de registro para mantener su registro separado del de su aplicación. Las opciones válidas, en orden de detalle, son: + + * `off` + + * `severe` + + * `warning` + + * `info` + + * `fine` + + * `finer` + + * `finest` + + + No utilice el registro `debug` o `trace` a menos que el soporte de New Relic le solicite que los utilice. Estos niveles de registro pueden generar gastos generales excesivos. Para la mayoría de situaciones, use `info`. + + + Esta configuración es dinámica, por lo que al ejecutar agente notará cambios en `newrelic.yml` sin reiniciar la JVM. +
+ + + + + + + + + + + + + + + + +
+ Tipo + + Entero +
+ Por defecto + + `0` +
+ + El tamaño del archivo de registro en kilobytes al que se rota el archivo de registro. Establezca en `0` para no tener límite. +
+
+ +## Rastreador de mensajes [#Transaction_Tracer] + +Configure las opciones del rastreador de mensajes en la sección `message_tracer` . Puede [anular](#System_Properties) esta configuración con una propiedad del sistema con el prefijo `newrelic.config.message_tracer` . + + + + + + + + + + + + + + + + + +
+ Tipo + + Booleano +
+ Por defecto + + `true` +
+ + Agrega propiedades de mensaje al atributo tracer. Establezca esto en `false` para desactivarlo. +
+
+ +## Agente de seguridad [#sec-agent] + +[La prueba de seguridad de aplicaciones interactivas (IAST) del agente New Relic Security](/docs/iast/introduction/) prueba su aplicación en busca de vulnerabilidades explotables reproduciendo la solicitud HTTP generada con carga vulnerable. + + + Ejecute IAST con despliegue no productivo solo para evitar exponer vulnerabilidades en su software de producción. + + +Puede establecer la configuración del agente New Relic Security en la sección `security` . Estas configuraciones se pueden [anular](#System_Properties) con una propiedad del sistema con el prefijo `newrelic.config.security` . Las opciones incluyen: + + + + + + + + + + + + + + + + + +
+ Tipo + + Booleano +
+ Por defecto + + `false` +
+ + Para deshabilitar completamente todas las funciones de seguridad, establezca este indicador en falso. Esta propiedad se lee solo una vez al inicio de la aplicación. El valor predeterminado es falso. +
+ + + + + + + + + + + + + + + + +
+ Tipo + + Booleano +
+ Por defecto + + `false` +
+ + Determina si los datos de seguridad se envían a New Relic o no. Cuando esto está deshabilitado y agente.enabled es verdadero, el módulo de seguridad se ejecutará pero no se enviarán datos. El valor predeterminado es falso. +
+ + + + + + + + + + + + + + + + +
+ Tipo + + Cadena +
+ Por defecto + + `IAST` +
+ + Modo de suministro de New Relic Security: IAST. El valor predeterminado es IAST. Debido a la naturaleza invasiva del escaneo IAST, NO habilite este modo ni en un entorno de producción ni en un entorno donde se procesen datos de producción. +
+ + + + + + + + + + + + + + + + +
+ Tipo + + Cadena +
+ Por defecto + + `wss://csec.nr-data.net` +
+ + URL de conexión SaaS de New Relic Security. Este es el extremo al que el agente de seguridad envía datos, debe coincidir con ese entorno que has configurado para el APM agente de Java. + + Producción de EE. UU.: wss://csec.nr-data.net +
+ + + + + + + + + + + + + + + + +
+ Tipo + + Booleano +
+ Por defecto + + `true` +
+ + Habilite la detección de eventos de seguridad de RCI. El valor predeterminado es verdadero. +
+ + + + + + + + + + + + + + + + +
+ Tipo + + Booleano +
+ Por defecto + + `true` +
+ + Habilite la detección de eventos de seguridad RXSS. El valor predeterminado es verdadero. +
+ + + + + + + + + + + + + + + + +
+ Tipo + + Booleano +
+ Por defecto + + `true` +
+ + Habilite la detección de eventos de seguridad de deserialización. El valor predeterminado es verdadero. +
+
+ + + El modo de pruebas de seguridad de aplicaciones interactivas (IAST) New Relic Security requiere [agente de Java versión 8.4.0 o superior](/docs/agents/java-agent/installation/upgrade-java-agent). + + +## Detección de transacciones lentas + +El agente ahora puede detectar transacciones lentas a través del evento `SlowTransaction` desde la versión `8.7.0` del agente de Java. Estos eventos se registran cuando la duración de la transacción excede un cierto umbral. De forma predeterminada, el umbral es 600.000 milisegundos (10 minutos). + +La detección de transacciones lentas se establece en `slow_transactions` y se puede [anular](#System_Properties) utilizando una propiedad del sistema con el prefijo `newrelic.config.slow_transactions` . Las opciones incluyen: + + + + + + + + + + + + + + + + + +
+ Tipo + + Booleano +
+ Por defecto + + `true` +
+ + Se utiliza para habilitar/deshabilitar la detección de transacciones lentas. +
+ + + + + + + + + + + + + + + + +
+ Tipo + + Entero +
+ Por defecto + + `600000` +
+ + Determina cuánto tiempo debe tardar una transacción en milisegundos para que se informe un evento `SlowTransaction` . +
+
+ +## Evento de duración + +[Span evento](/docs/apm/distributed-tracing/ui-data/span-event) son reportados para [rastreo distribuido](#distributed-tracing). Debes habilitar rastreo distribuido para reportar span evento. + +Establezca la configuración del evento span en la sección `span_events` . Estas configuraciones se pueden [anular](#System_Properties) con una propiedad del sistema con el prefijo `newrelic.config.span_events` . Las opciones incluyen: + + + + + + + + + + + + + + + + + +
+ Tipo + + Booleano +
+ Por defecto + + `true` +
+ + Se utiliza para habilitar/deshabilitar el informe de eventos de extensión. +
+ + + + + + + + + + + + + + + + + + + + + + +
+ Tipo + + Entero +
+ Por defecto + + `2000` +
+ máx. + + `10000` +
+ + Determina el número de eventos de intervalo que se pueden capturar durante un ciclo de recolección de agente. Disponible en agente de Java 7.4.0 y superior. + + + Aumentar el número de eventos de intervalo puede generar una sobrecarga adicional del agente. + +
+ + + + + + + + + + + + + + + + +
+ Tipo + + Booleano +
+ Por defecto + + `true` +
+ + Esta configuración se puede utilizar para activar o desactivar todos los atributos del evento span. Si `attributes.enabled` en el nivel raíz es `false`, no se enviará ningún atributo al evento span independientemente de cómo esté configurada esta propiedad (`span_events.attributes.enabled`). +
+ + + + + + + + + + + + + + + + +
+ Tipo + + Lista de cadenas +
+ Por defecto + + (ninguno) +
+ + Si los atributos están habilitados para el evento span, todas las claves de atributos que se encuentran en esta lista se enviarán a New Relic en `span_events`. Para obtener más información, consulte las [reglas de atributos del agente](/docs/apm/other-features/attributes/agent-attributes). +
+ + + + + + + + + + + + + + + + +
+ Tipo + + Lista de cadenas +
+ Por defecto + + (ninguno) +
+ + Todas las claves de atributos que se encuentran en esta lista no se enviarán a New Relic en el evento span. Para obtener más información, consulte las [reglas de atributos del agente](/docs/apm/other-features/attributes/agent-attributes). +
+
+ + + El filtrado de atributos de eventos Span requiere [agente de Java versión 4.10.0 o superior](/docs/agents/java-agent/installation/upgrade-java-agent). + + +## Excepciones de tira [#strip_exceptions] + +Configure las opciones de excepciones de tira en la sección `strip_exception_messages` . Estas opciones se pueden [anular](#System_Properties) con una propiedad del sistema con el prefijo `newrelic.config.strip_exception_messages` . Habilite esta configuración para controlar si los mensajes de excepción de Java se informan a New Relic. + + + + + + + + + + + + + + + + + +
+ Tipo + + Booleano +
+ Por defecto + + `false` +
+ + De forma predeterminada, está configurado en `false`, lo que significa que el agente envía mensajes de todas las excepciones al [recolector de New Relic](/docs/accounts-partnerships/education/getting-started-new-relic/glossary#collector). + + * Si lo configura en `true`, el agente elimina las excepciones de los mensajes para evitar que capture información confidencial sin darse cuenta. + * Si habilita [el modo de alta seguridad](/docs/agents/manage-apm-agents/configuration/high-security-mode), se establece automáticamente en `true`. + * Si configura `enabled` en `true` pero desea que el agente capture mensajes de excepciones específicas, agregue las excepciones a su [lista de 'permitidos'](#strip_exception_messages_whitelist). +
+ + + + + + + + + + + + + + + + +
+ Tipo + + Cadena +
+ Por defecto + + (ninguno) +
+ + + Esta configuración ha quedado obsoleta a partir de la versión 5.10.0 del agente y se eliminará en una versión futura del agente. En su lugar, utilice `allowed_classes`. + + + Si configura `enabled` en `true` pero desea que el agente capture mensajes para excepciones específicas, agregue cada excepción a `whitelist`, separada por una coma. +
+ + + + + + + + + + + + + + + + +
+ Tipo + + Cadena +
+ Por defecto + + (ninguno) +
+ + Si configura `enabled` en `true` pero desea que el agente capture mensajes para excepciones específicas, agregue cada excepción a `allowed_classes`, separada por una coma. +
+
+ +## Hilo generador de perfiles [#Thread_Profiler] + +Configure las opciones del hilo generador de perfiles en la sección `thread_profiler` . Estas opciones se pueden [anular](#System_Properties) con una propiedad del sistema con el prefijo `newrelic.config.thread_profiler` . + +El generador de perfiles de subprocesos mide el tiempo de reloj, el tiempo de CPU y el recuento de llamadas a métodos en los subprocesos de su aplicación a medida que se ejecutan. + + + + + + + + + + + + + + + + + +
+ Tipo + + Booleano +
+ Por defecto + + `true` +
+ + Habilitar el hilo generador de perfiles. +
+
+ +## Evento de transacción [#Transaction_Events] + +Configure las opciones del evento de transacción en la sección `transaction_events` . Estas opciones se pueden [anular](#System_Properties) con una propiedad del sistema con el prefijo `newrelic.config.transaction_events` . + +Los datos del evento de transacción se utilizan para mostrar histograma y percentil en la UI. + + + Anteriormente, esta sección se llamaba `analytics_events`. Si su archivo de configuración todavía usa `analytics_events`, actualice su agente para usar `transaction_events`. + + + + + + + + + + + + + + + + + + +
+ Tipo + + Booleano +
+ Por defecto + + `true` +
+ + Habilitar el servicio de transacción evento. +
+ + + + + + + + + + + + + + + + + + + + + + +
+ Tipo + + Entero +
+ Por defecto + + `2000` +
+ máx. + + `10000` +
+ + El número máximo de eventos de transacción muestreados informados cada 60 segundos. +
+ + + + + + + + + + + + + + + + +
+ Tipo + + Lista de mapas +
+ Por defecto + + (ninguno) +
+ + + A diferencia de otras configuraciones, `custom_request_headers` deben emparejarse y configurarse en el archivo `newrelic.yml` . No pueden sobrescribirse con argumentos de la máquina virtual Java (propiedad del sistema) o variables de entorno. + + + Una lista de mapas con las claves emparejadas `header_name` y el `header_alias` opcional. Elija uno o más encabezados de solicitud HTTP personalizados para agregar como atributo de transacción. + + Puede enumerar múltiples configuraciones de encabezado: + + ```yml + transaction_events: + custom_request_headers: + - + header_name: "X-Custom-Header-1" + - + header_name: "X-Custom-Header-2" + header_alias: "CustomHeader2alias" + ``` + + En el primer conjunto de mapas, el agente captura y reporta `X-Custom-Header-1` como el nombre del encabezado para un valor correspondiente del objeto de solicitud. El `header_name` también será el nombre del atributo enviado a New Relic. + + En el segundo conjunto de mapas, el encabezado de la solicitud es `X-Custom-Header-2`, pero `CustomHeader2alias` es el nombre enviado a New Relic. +
+ + + + + + + + + + + + + + + + +
+ Tipo + + Booleano +
+ Por defecto + + `true` +
+ + Esta configuración se puede utilizar para activar o desactivar todos los atributos del evento de transacción. Si `attributes.enabled` es `false` en el nivel raíz, no se enviará ningún atributo al evento de transacción independientemente de cómo se establezca esta propiedad en `transaction_events`. +
+ + + + + + + + + + + + + + + + +
+ Tipo + + Lista de cadenas +
+ Por defecto + + (ninguno) +
+ + Si los atributos están habilitados para el evento de transacción, todas las claves de atributos que se encuentran en esta lista se enviarán a New Relic en el evento de transacción. Para obtener más información, consulte las [reglas de atributos del agente](/docs/apm/other-features/attributes/agent-attributes). +
+ + + + + + + + + + + + + + + + +
+ Tipo + + Lista de cadenas +
+ Por defecto + + (ninguno) +
+ + Todas las claves de atributos que se encuentran en esta lista no se enviarán a New Relic en el evento de transacción. Para obtener más información, consulte las [reglas de atributos del agente](/docs/apm/other-features/attributes/agent-attributes). +
+
+ +## Segmentos de transacciones + +Configure las opciones de segmentos de transacciones en la sección `transaction_segments` . Estas opciones se pueden [anular](#System_Properties) con una propiedad del sistema con el prefijo `newrelic.config.transaction_segments` . + +Los segmentos representan piezas de trabajo discretas (generalmente llamadas a métodos) y se muestran dentro de [la traza de la transacción](/docs/traces/transaction-traces). + + + El filtrado de atributos del segmento de transacciones requiere [agente de Java versión 4.10.0 o superior](/docs/agents/java-agent/installation/upgrade-java-agent). + + + + + + + + + + + + + + + + + + +
+ Tipo + + Booleano +
+ Por defecto + + `true` +
+ + Esta configuración se puede utilizar para activar o desactivar todos los atributos de los segmentos de transacciones. Si `attributes.enabled` en el nivel raíz es `false`, no se enviará ningún atributo a los segmentos de transacciones independientemente de cómo esté configurada esta propiedad (`transaction_segments.attributes.enabled`). +
+ + + + + + + + + + + + + + + + +
+ Tipo + + Lista de cadenas +
+ Por defecto + + (ninguno) +
+ + Si los atributos están habilitados para los segmentos de transacciones, todas las claves de atributos que se encuentran en esta lista se enviarán a New Relic en los segmentos de transacciones. Para obtener más información, consulte las [reglas de atributos del agente](/docs/apm/other-features/attributes/agent-attributes). +
+ + + + + + + + + + + + + + + + +
+ Tipo + + Lista de cadenas +
+ Por defecto + + (ninguno) +
+ + Todas las claves de atributos que se encuentran en esta lista no se enviarán a New Relic en los segmentos de transacción. Para obtener más información, consulte las [reglas de atributos del agente](/docs/apm/other-features/attributes/agent-attributes). +
+
+ +## Rastreador de transacciones + +Configure las opciones del rastreador de transacciones en la sección `transaction_tracer` . Estas opciones se pueden [anular](#System_Properties) con una propiedad del sistema con el prefijo `newrelic.config.transaction_tracer` . + +[El seguimiento de transacciones](/docs/traces/transaction-traces) captura información detallada sobre transacciones lentas y la envía al servicio New Relic. La transacción incluye la secuencia exacta de llamadas de las transacciones, incluidas las declaraciones de consulta emitidas. + + + No utilice corchetes `[suffix]` al final del nombre de su transacción. New Relic elimina automáticamente los corchetes del nombre. En su lugar, utilice paréntesis `(suffix)` u otros símbolos si es necesario. + + + + + + + + + + + + + + + + + + +
+ Tipo + + Booleano +
+ Por defecto + + `true` +
+ + El rastreador de transacciones está habilitado de forma predeterminada. Establezca esto en `false` para desactivarlo. +
+ + + + + + + + + + + + + + + + +
+ Tipo + + Booleano +
+ Por defecto + + `true` +
+ + Determina si el agente capturará el plan `EXPLAIN` para consulta lenta. [Solo es compatible con MySQL y PostgreSQL.](/docs/agents/java-agent/getting-started/compatibility-requirements-java-agent#JDBC) +
+ + + + + + + + + + + + + + + + +
+ Tipo + + Flotante +
+ Por defecto + + `0.5` +
+ + Umbral en segundos para el tiempo de ejecución de la consulta por debajo del cual no se capturarán la consulta lenta y el plan `EXPLAIN` ([si es compatible](/docs/agents/java-agent/getting-started/compatibility-requirements-java-agent#JDBC)). Relevante para consulta lenta solo cuando `record_sql` está configurado en `raw` o `obfuscated`. Relevante para los planes `EXPLAIN` solo cuando `explain_enabled` está establecido en `true`. +
+ + + + + + + + + + + + + + + + +
+ Tipo + + Entero +
+ Por defecto + + `2000` +
+ + El límite de caracteres para la cadena de consulta SQL. Si tiene muchas consultas SQL lentas con grandes cantidades de información, esto podría afectar negativamente el rendimiento o la rapidez con la que ve sus datos en New Relic. Aumente el valor gradualmente hasta encontrar el equilibrio adecuado entre información y rendimiento. +
+ + + + + + + + + + + + + + + + +
+ Tipo + + Booleano +
+ Por defecto + + `false` +
+ + Establezca en `true` para habilitar el registro de consultas en el archivo de registro del agente en lugar de cargarlo en New Relic. Las consultas se registran utilizando el modo `record_sql` . +
+ + + + + + + + + + + + + + + + +
+ Tipo + + Cadena +
+ Por defecto + + `obfuscated` +
+ + Cuando el rastreador de transacciones está activado, las declaraciones de consulta se pueden registrar opcionalmente. La grabadora tiene tres modos: + + * `off`: No enviar consulta. + * `raw`: Envíe la declaración de consulta en su forma original. + * `obfuscated`: elimina los literales numéricos y de cadena. +
+ + + + + + + + + + + + + + + + +
+ Tipo + + Booleano +
+ Por defecto + + `false` + + El valor predeterminado es `true` hasta la versión 3.12.1 del agente de Java. cuando se cambió a `false`. +
+ + Esta opción es solo para Play 2.x+. La instrumentación de Play/Scala puede usar `Thread.getStackTrace()` para mejorar el nombre del rastreador, pero a costa de una mayor sobrecarga. +
+ + + + + + + + + + + + + + + + +
+ Tipo + + Entero +
+ Por defecto + + `0.5` +
+ + Define un umbral (en segundos) para recopilar el rastreo del stack de una llamada SQL. Cuando las sentencias SQL superen este umbral, el agente capturará el rastreo actual de la pila. Esto es útil para identificar de dónde se originan las llamadas SQL largas. +
+ + + + + + + + + + + + + + + + +
+ Tipo + + Entero +
+ Por defecto + + `20` +
+ + Utilice esta configuración para controlar la variedad de su traza de la transacción. `top_n` es un número entero que representa el número de transacciones lentas y únicas para las que se creará la traza. + + * Si desea que la traza de la transacción refleje con mayor precisión la transacción más lenta real en su aplicación, establezca este valor en **lower**. + + * Si desea probar una matriz de transacción más diversa, haga el valor **higher**. + + Un valor de `0` significaría que **only** la transacción más lenta siempre es la traza. Sin embargo, se considera que esto no es óptimo porque es posible que tenga una o dos transacciones que siempre sean las más lentas, y ver repetidamente esa misma traza de la transacción probablemente no le dará mucho valor. + + Si la misma transacción suele ser la más lenta, la configuración `top_n` permite que el agente de Java (con el tiempo) muestree las transacciones `n` más lentas. Esto le brinda mayor variedad y más información valiosa para su aplicación. +
+ + + + + + + + + + + + + + + + +
+ Tipo + + Cadena (flotante) +
+ Por defecto + + `apdex_f` +
+ + El umbral de tiempo utilizado para determinar cuándo una transacción es elegible para ser traza. Cuando el tiempo de respuesta de la transacción supere este umbral, se registrará una [traza de la transacción](/docs/apm/transactions/transaction-traces/transaction-traces) y se enviará a New Relic. + + El valor predeterminado es `apdex_f` (predeterminado), que establece el umbral en el nivel [Apdex](/docs/site/apdex-measuring-user-satisfaction) ["Frustrated"](/docs/accounts-partnerships/education/getting-started-new-relic/glossary#apdex_f) (cuatro veces el `apdex_t` valor ). También puede establecer un umbral de tiempo específico ingresando un valor flotante que represente una cantidad de segundos. +
+ + + + + + + + + + + + + + + + +
+ Tipo + + Cadena +
+ Por defecto + + (ninguno) +
+ + + Esta configuración ha quedado obsoleta a partir de la versión 5.10.0 del agente y se eliminará en una versión futura del agente. En su lugar, utilice `collect_slow_queries_from`. + + + De forma predeterminada, [el modo de alta seguridad](/docs/accounts-partnerships/accounts/security/high-security) no permite que el agente recopile [consulta lenta](/docs/apm/applications-menu/monitoring/viewing-slow-query-details). Habilite esta opción para recopilar consultas de Cassandra desde el controlador DataStax, incluso con la alta seguridad habilitada. Si no utiliza alta seguridad, el agente cobra consulta lenta automáticamente. + + Para el controlador DataStax 2.1.2, añade esta regla a tu lista de 'permitidos': + + ```yml + transaction_tracer: + slow_query_whitelist: + 'com.newrelic.instrumentation.cassandra-datastax-2.1.2' + ``` + + Para el controlador DataStax 3.0.0, añade esta regla a tu lista de 'permitidos': + + ```yml + transaction_tracer: + slow_query_whitelist: + 'com.newrelic.instrumentation.cassandra-datastax-3.0.0' + ``` +
+ + + + + + + + + + + + + + + + +
+ Tipo + + Cadena +
+ Por defecto + + (ninguno) +
+ + De forma predeterminada, [el modo de alta seguridad](/docs/accounts-partnerships/accounts/security/high-security) no permite que el agente recopile [consulta lenta](/docs/apm/applications-menu/monitoring/viewing-slow-query-details). Habilite esta opción para recopilar consultas de Cassandra desde el controlador DataStax, incluso con la alta seguridad habilitada. Si no utiliza alta seguridad, el agente cobra consulta lenta automáticamente. + + Para el controlador DataStax 2.1.2, añade esta regla a tu lista de 'permitidos': + + ```yml + transaction_tracer: + collect_slow_queries_from: + 'com.newrelic.instrumentation.cassandra-datastax-2.1.2' + ``` + + Para el controlador DataStax 3.0.0, añade esta regla a tu lista de 'permitidos': + + ```yml + transaction_tracer: + collect_slow_queries_from: + 'com.newrelic.instrumentation.cassandra-datastax-3.0.0' + ``` +
+ + + + + + + + + + + + + + + + +
+ Tipo + + Booleano +
+ Por defecto + + `true` +
+ + Esta configuración se puede utilizar para activar o desactivar todos los atributos de la traza de la transacción. Si `attributes.enabled` en el nivel raíz es `false`, no se enviará ningún atributo a la traza de la transacción independientemente de cómo esté configurada esta propiedad (`transaction_tracer.attributes.enabled`). +
+ + + + + + + + + + + + + + + + +
+ Tipo + + Lista de cadenas +
+ Por defecto + + (ninguno) +
+ + Si los atributos están habilitados para la traza de la transacción, todas las claves de atributos que se encuentran en esta lista se enviarán a New Relic en la traza de la transacción. Para obtener más información, consulte las [reglas de atributos del agente](/docs/apm/other-features/attributes/agent-attributes). +
+ + + + + + + + + + + + + + + + +
+ Tipo + + Lista de cadenas +
+ Por defecto + + (ninguno) +
+ + Todas las claves de atributos que se encuentran en esta lista no se enviarán a New Relic en la traza de la transacción. Para obtener más información, consulte las [reglas de atributos del agente](/docs/apm/other-features/attributes/agent-attributes). +
+ + + + + + + + + + + + + + + + +
+ Tipo + + Entero +
+ Por defecto + + `3000` +
+ + Limita la cantidad de tokens que se pueden crear por transacción. Aumentar este valor puede afectar el rendimiento, porque aumenta la cantidad de memoria que utiliza el agente y la cantidad de datos enviados a New Relic. +
+ + + + + + + + + + + + + + + + +
+ Tipo + + Entero +
+ Por defecto + + `3000` +
+ + Limita la cantidad de segmentos que se pueden crear por transacción. Aumentar este valor puede afectar el rendimiento, porque aumenta la cantidad de memoria que utiliza el agente y la cantidad de datos enviados a New Relic. +
+
\ No newline at end of file diff --git a/src/i18n/content/es/docs/apm/agents/nodejs-agent/getting-started/introduction-new-relic-nodejs.mdx b/src/i18n/content/es/docs/apm/agents/nodejs-agent/getting-started/introduction-new-relic-nodejs.mdx new file mode 100644 index 00000000000..3c1083655f2 --- /dev/null +++ b/src/i18n/content/es/docs/apm/agents/nodejs-agent/getting-started/introduction-new-relic-nodejs.mdx @@ -0,0 +1,137 @@ +--- +title: Introducción a New Relic para Node.js +tags: + - Agents + - Nodejs agent + - Getting started +metaDescription: 'For system requirements, installation and configuration procedures, and troubleshooting tips for New Relic''s Node.js agent, start here.' +freshnessValidatedDate: never +translationType: machine +--- + +Identifique y resuelva problemas hasta la línea de código con el monitoreo de Node.js de New Relic. Con características como [mapas de servicios](/docs/data-analysis/service-maps/get-started/introduction-service-maps), [Errors Inbox](/docs/errors-inbox/errors-inbox), [contexto de inicio de sesión](/docs/apm/new-relic-apm/getting-started/get-started-logs-context) y más, nuestro agente Node.js lo ayuda a obtener una imagen completa del entorno de su aplicación. + +## Por qué es importante [#why] + +Muchas solicitudes de aplicaciones Node.js se basan en URL sin formato. Nuestra solución es diferente. New Relic para Node.js supone que puede agrupar solicitudes a su aplicación en transacciones en lugar de solicitudes HTTP. Las transacciones se definen dando un nombre a una o más rutas de solicitud. Estos nombres se utilizan para: + +* Visualiza dónde pasa el tiempo tu aplicación (en desgloses de transacciones). +* Identifique solicitudes lentas. +* Grupo métrico. +* Mostrarle qué partes de su aplicación sufren un rendimiento lento de la base de datos. + +## Instalacion [#install] + +Para instalar nuestro agente, primero debe [registrarse en New Relic](https://newrelic.com/signup) . Una vez que haya iniciado sesión, siga las instrucciones o utilice nuestro iniciador para que los datos fluyan. + +* Revisar el [requisito del sistema](/docs/agents/nodejs-agent/getting-started/compatibility-requirements-nodejs-agent). +* [Lea los documentos de instalación](/docs/agents/nodejs-agent/installation-configuration/install-nodejs-agent). +* Vaya directamente a la UI de New Relic para [agregar datos de Node.js.](https://one.newrelic.com/launcher/nr1-core.settings?pane=eyJuZXJkbGV0SWQiOiJ0dWNzb24ucGxnLWluc3RydW1lbnQtZXZlcnl0aGluZyJ9&cards%5B0%5D=eyJuZXJkbGV0SWQiOiJzZXR1cC1uZXJkbGV0cy5zZXR1cC1ub2RlLWludGVncmF0aW9uIiwiYWNjb3VudElkIjoyNjQwNDA5fQ==&platform%5BaccountId%5D=1) + +## Amplíe su instrumentación [#extend-instrumentation] + +Después de instalar el agente Node.js, amplíe su instrumentación: + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ Amplíe su instrumentación + + Comentarios +
+ Personalización + + * Implementar [instrumentación personalizada de Node.js.](/docs/agents/nodejs-agent/supported-features/nodejs-custom-instrumentation) + * [Recopila métrica personalizada a través de una llamada API](/docs/agents/nodejs-agent/supported-features/nodejs-custom-metrics). + * Utilice nuestra [API del agente Node.js](/docs/agents/nodejs-agent/supported-features/nodejs-agent-api) para controlar, personalizar o ampliar la funcionalidad del agente. +
+ Telemetría de código abierto + + * Para crear su propia integración, utilice nuestro [SDK de telemetría de Node.js.](/docs/data-ingest-apis/get-data-new-relic/new-relic-sdks/telemetry-sdks-send-custom-telemetry-data-new-relic) + * Para obtener visibilidad de su carga GraphQL, utilice nuestro [complemento Apollo Server](/docs/agents/nodejs-agent/supported-features/apollo-server-plugin-nodejs). +
+ Logs en contexto + + * Para enriquecer los datos de [Winston](https://github.com/winstonjs/winston) o [Pino](https://github.com/pinojs/pino) log , utilice nuestra solución [de contexto de inicio de sesión](/docs/logs/logs-context/configure-logs-context-nodejs) automático para Node.js. +
+ Traza + + * Habilitar [rastreo distribuido](/docs/apm/distributed-tracing/getting-started/introduction-distributed-tracing). +
+ Mediciones de máquina virtual (VM) + + * Recopile [datos clave de intervalo de tiempo de métrica](/docs/agents/nodejs-agent/supported-features/node-vm-measurements) de la máquina virtual Node.js. + * [Vea estadísticas detalladas de la máquina virtual (VM)](/docs/agents/nodejs-agent/supported-features/node-vms-statistics-page) en la UI de New Relic. +
+ Actividad del usuario final + + * Integre el agente de Node.js con + + [](/docs/browser/new-relic-browser/getting-started/new-relic-browser) + + . + + * Obtenga visibilidad de la actividad del usuario con [el monitoreo del proceso de sincronización de carga de la página del navegador](/docs/agents/nodejs-agent/supported-features/page-load-timing-nodejs). +
+ +## Ver el registro de sus datos de infraestructura y APM [#logs-context] + +También puede reunir los datos de su registro y de la aplicación para que la resolución de problemas sea más fácil y rápida. Con [el inicio de sesión de APM en contexto](/docs/apm/new-relic-apm/getting-started/get-started-logs-context), puede ver el mensaje de registro relacionado con sus errores y la traza directamente en UI de su aplicación. También puede ver el inicio de sesión en el contexto de [los datos de su infraestructura](/docs/logs/forward-logs/forward-your-logs-using-infrastructure-agent/), como el clúster de Kubernetes. No es necesario cambiar a otra página de UI en New Relic. + +## Solucionar problemas de su instalación [#troubleshooting] + +Si tiene problemas con su agente de Node.js, consulte nuestros documentos de resolución de problemas. Algunos de los documentos de resolución de problemas más importantes en esa sección incluyen: + +* [Gran uso de memoria](/docs/agents/nodejs-agent/troubleshooting/troubleshooting-large-memory-usage-nodejs): si instaló el agente Node.js y su uso de memoria ha aumentado, consulte estas posibles soluciones. +* [Resolución de problemas de instalación de Node.js](/docs/agents/nodejs-agent/troubleshooting/troubleshooting-your-nodejs-installation): Pruebe estos pasos si no ve ningún dato, no puede archivar el registro o encuentra otros problemas de instalación con el agente de Node.js. +* [resolución de problemas de instrumentación browser ](/docs/agents/nodejs-agent/troubleshooting/troubleshooting-page-load-timing-nodejs): Si tiene problemas con los datos del navegador, consulte estos consejos adicionales para Node.js. + +Si necesita más ayuda, obtenga asistencia en [support.newrelic.com](https://support.newrelic.com). + +## Comprueba el código fuente [#source-code] + +Nuestro agente Node.js es un software de código abierto. Puedes [explorar el código fuente](https://github.com/newrelic/node-newrelic) y enviar mejoras, o crear tu propia bifurcación y compilarla. Para obtener más información, consulte el [archivo README de node-newrelic en GitHub](https://github.com/newrelic/node-newrelic/blob/main/README.md). \ No newline at end of file diff --git a/src/i18n/content/es/docs/apm/agents/nodejs-agent/installation-configuration/install-nodejs-agent.mdx b/src/i18n/content/es/docs/apm/agents/nodejs-agent/installation-configuration/install-nodejs-agent.mdx new file mode 100644 index 00000000000..50970be8795 --- /dev/null +++ b/src/i18n/content/es/docs/apm/agents/nodejs-agent/installation-configuration/install-nodejs-agent.mdx @@ -0,0 +1,132 @@ +--- +title: Instalar el agente Node.js +tags: + - Agents + - Nodejs agent + - Installation and configuration +metaDescription: Procedures and resources to install New Relic's Node.js agent. +freshnessValidatedDate: never +translationType: machine +--- + +Para completar una instalación básica del agente Node.js, puede utilizar nuestra instalación guiada para una instalación automatizada (elija UE si se encuentra en la UE) o seguir las instrucciones de este documento. De cualquier manera, necesita una cuenta New Relic si aún no tiene una. (¡ [Es gratis, para siempre!](/docs/accounts/accounts-billing/new-relic-one-pricing-billing/new-relic-one-pricing-billing/#how-pricing-works)) + + + + Obtener una cuenta + + + + Iniciar la instalación del agente + + + + Instalación de la UE + + + +Nuestro agente Node.js está disponible públicamente en el [repositorio de administrador de paquetes (npm) de Node](https://npmjs.org/package/newrelic) , así como en [GitHub](https://github.com/newrelic/node-newrelic). + +## Instalar el agente Node.js [#installing] + + + Si está utilizando el agente en un contenedor Docker, [instálelo en cada contenedor](/docs/agents/nodejs-agent/installation-configuration/install-new-relic-nodejs-agent-docker). + + +Para instalar el agente Node.js: + +1. Crea una cuenta New Relic . ¿No tienes uno? [¡Registrate gratis!](https://newrelic.com/signup) No se requiere tarjeta de crédito. + +2. Asegúrese de cumplir con el [requisito del sistema](/docs/agents/nodejs-agent/getting-started/compatibility-requirements-nodejs-agent). En particular, asegúrese de utilizar una versión compatible de Node.js. + +3. Utilice el comando `npm install newrelic` para cada aplicación que desee monitor. Si su aplicación utiliza [uno de estos módulos de servidor Apollo,](/docs/apm/agents/nodejs-agent/extend-your-instrumentation/apollo-server-plugin-nodejs/) instale nuestro complemento Apollo con `npm install @newrelic/apollo-server-plugin`. [Puede encontrar más detalles sobre el uso de `@newrelic/apollo-server-plugin` aquí](https://github.com/newrelic/newrelic-node-apollo-server-plugin/tree/main#readme). + + + Si utiliza Next.js, utilice nuestro [agente`@newrelic/next` ](https://github.com/newrelic/newrelic-node-nextjs)independiente en lugar del agente `newrelic` . [Aquí hay un ejemplo de aplicación Next.js](https://github.com/newrelic/newrelic-node-nextjs#example-project) + + +4. Desde `node_modules/newrelic`, copie `newrelic.js` en el directorio raíz de su aplicación. + +5. Configure el agente a través del archivo `newrelic.js` o mediante [la variable de entorno](/docs/agents/nodejs-agent/installation-configuration/nodejs-agent-configuration#environment): + + * Personalice la configuración `license_key` con + + + + . + + * Personalice la configuración [`app_name`](/docs/agents/nodejs-agent/installation-configuration/nodejs-agent-configuration#app_name) con uno o más [nombres de aplicaciones significativos](/docs/apm/new-relic-apm/installation-and-configuration/naming-your-application). + +6. Agregue `-r newrelic` al script de inicio de su aplicación. Por ejemplo, si el punto de entrada de su aplicación es `./dist/server.js` , entonces usaría el indicador require de esta manera: + + ```bash + node -r newrelic ./dist/server.js + ``` + + Un comando Docker de ejemplo: + + ```dockerfile + CMD ["node", "-r", "newrelic", "server.js"] + ``` + + + Para Next.js utilice `-r @newrelic/next` en lugar de `-r newrelic`. + + Si está utilizando Nest.JS y el comando `nest start` para iniciar la aplicación, modifique su binario de inicio para cargar el agente New Relic: `nest start --exec 'node -r newrelic'`. [Aquí hay un ejemplo de aplicación Nest.js.](https://github.com/newrelic/newrelic-node-examples/tree/main/nestjs) + + + Más información sobre la [opción de línea de comando de Node.js `-r` aquí](https://nodejs.org/api/cli.html#-r---require-module). + + + Si no puede utilizar el indicador de requisito `-r` , también puede utilizar `require('newrelic')` como primera línea del módulo principal de su aplicación. **Note** Si está utilizando [Babel](https://babeljs.io/docs/en/index.html) o un transpilador similar `require('newrelic')` causará problemas de instrumentación. + + Si ninguna de estas opciones funciona para usted (por ejemplo, cargar de forma asincrónica la clave de API desde una ubicación remota durante el arranque de la aplicación), también puede agregar instrumentación estándar a un [módulo compatible](https://github.com/newrelic/node-newrelic/blob/0113eb5f0e707dc662a17d262a841503bab88841/lib/instrumentations.js#L6#L6) ya cargado usando [`newrelic.instrumentLoadedModule`](/docs/apm/agents/nodejs-agent/api-guides/nodejs-agent-api/#instrumentLoadedModule): + + ```js + // module loaded before newrelic + const expressModule = require('express'); + + // load the agent + const newrelic = require('newrelic'); + + // instrument express after the agent has been loaded + newrelic.instrumentLoadedModule( + 'express', // the module's name, as a string + expressModule // the module instance + ); + ``` + + +7. Opcional: para obtener [estadísticas adicionales a nivel de tiempo de ejecución de Node.js](/docs/agents/nodejs-agent/supported-features/node-vms-statistics-page), asegúrese de que el [paquete`@newrelic/native-metrics` esté instalado](/docs/agents/nodejs-agent/supported-features/node-vm-measurements). + +8. Genere algo de tráfico y luego espere unos minutos hasta que aparezcan los datos en la [UIde APM](/docs/apm/applications-menu/monitoring/apm-overview-page). + +Puede [personalizar aún más el comportamiento de su agente](/docs/agents/nodejs-agent/installation-configuration/nodejs-agent-configuration) a través de `newrelic.js` o una variable de entorno. Para mantener la configuración del agente separada de su aplicación, edite la [variable ambiental`NEW_RELIC_HOME` ](/docs/agents/nodejs-agent/installation-configuration/nodejs-agent-configuration#home). + +Para obtener más información, consulte nuestro [documento API](/docs/apm/agents/nodejs-agent/api-guides/nodejs-agent-api/). + + + +## Ver el registro de sus datos de infraestructura y APM [#logs-context] + +También puede reunir los datos de su registro y de la aplicación para que la resolución de problemas sea más fácil y rápida. Con [el contexto de inicio de sesión](/docs/logs/logs-context/configure-logs-context-nodejs/), puede ver el mensaje de registro relacionado con sus errores y la traza directamente en UI de su aplicación. También puede ver el inicio de sesión en el contexto de [los datos de su infraestructura](/docs/logs/forward-logs/forward-your-logs-using-infrastructure-agent/), como el clúster de Kubernetes. No es necesario cambiar a otra página de UI. + +## Mantenga actualizado su agente de Node.js [#upgrading] + +Para asegurarse de tener la versión más actualizada de New Relic, consulte las [notas de la versión de Node.js.](/docs/release-notes/agent-release-notes/nodejs-release-notes) Cuando corresponde, las notas de la versión incluyen un enlace de descarga con instrucciones sobre cómo [actualizar el agente Node.js.](/docs/agents/nodejs-agent/installation-configuration/upgrade-nodejs-agent) + +## Resolución de problemas [#troubleshoot] + +Después de actualizar el agente, genere algo de tráfico y espere unos minutos. Si no aparecen datos en la UI de New Relic, consulte los [procedimientos de resolución de problemas](/docs/agents/nodejs-agent/troubleshooting/troubleshooting-your-nodejs-installation). \ No newline at end of file diff --git a/src/i18n/content/es/docs/apm/agents/php-agent/advanced-installation/docker-other-container-environments-install-php-agent.mdx b/src/i18n/content/es/docs/apm/agents/php-agent/advanced-installation/docker-other-container-environments-install-php-agent.mdx new file mode 100644 index 00000000000..0f0e7d204ce --- /dev/null +++ b/src/i18n/content/es/docs/apm/agents/php-agent/advanced-installation/docker-other-container-environments-install-php-agent.mdx @@ -0,0 +1,134 @@ +--- +title: 'Docker y otros entornos de contenedores: instale el agente PHP' +tags: + - Agents + - PHP agent + - Advanced installation +metaDescription: How to install New Relic's PHP agent inside a Docker container or other container to monitor your PHP apps. +freshnessValidatedDate: never +translationType: machine +--- + +Puede instalar el agente PHP en un contenedor Docker u otro contenedor para monitor una o más de sus aplicaciones PHP. Esto es compatible con contenedores que cumplen con los [requisitos y la compatibilidad del agente PHP](/docs/agents/php-agent/getting-started/php-agent-compatibility-requirements) estándar. + + + El daemon del agente PHP transmite datos a New Relic periódicamente durante el [ciclo de recolección](/docs/using-new-relic/welcome-new-relic/getting-started/glossary#harvest-cycle) de un minuto de duración. Si inicia y derriba contenedores con frecuencia, asegúrese de dejar el contenedor daemon ejecutándose el tiempo suficiente para transmitir los datos restantes. + + +## Opciones de contenedor [#overview] + +El agente PHP requiere dos componentes para funcionar: el agente PHP (uno para cada aplicación) y un [demonio](/docs/agents/php-agent/getting-started/new-relic-daemon-processes), que agrega datos enviados desde uno o más agentes y los envía a New Relic. Por este motivo, existen dos opciones para habilitar el agente PHP para entornos contenedor: + +* [Instale el agente y daemon en contenedores diferentes.](#install-diff-containers) Esta es la configuración recomendada. +* [Instale el agente y daemon en el mismo contenedor.](#install-same-container) Esto puede resultar útil si desea reducir el número de contenedores. + +## Instale el agente y daemon en contenedores diferentes [#install-diff-containers] + +La instalación del agente y daemon en contenedores diferentes se admite en las versiones PHP Agnet 9.2 y superiores. + +Para ver una aplicación de ejemplo, vaya al [Foro de soporte de New Relic](https://discuss.newrelic.com/t/relic-solution-php-agent-and-daemon-containers/84841). Si está utilizando contenedores de aplicaciones de corta duración, le recomendamos que utilice un contenedor separado para el daemon del agente PHP. + + + Los datos transmitidos desde el agente al daemon **no** están cifrados. La única excepción a esto es la [ofuscación de SQL](/docs/agents/php-agent/configuration/php-agent-configuration#inivar-tt-sql) que ocurre antes de enviar datos al daemon. Si el agente y daemon se ejecutan en hosts diferentes, le recomendamos que utilice una conexión de red privada entre el agente y daemon. + + +### Configurar el contenedor daemon [#daemon-container] + +Si usa Docker, puede extraer nuestra imagen de demonio desde [docker Hub](https://hub.docker.com/r/newrelic/php-daemon): + +1. Ejecute este comando: `docker pull newrelic/php-daemon`. +2. Para personalizar la imagen, siga los pasos en [Docker Hub](https://hub.docker.com/r/newrelic/php-daemon). + +También puedes crear tu propia imagen daemon : + +1. Para instalar el daemon, descargue el paquete del agente PHP desde [el sitio de descarga de archivos tar](/docs/agents/php-agent/installation/php-agent-installation-tar-file) de New Relic y ejecute el script `newrelic-install` con el argumento `install_daemon`. +2. Inicie el daemon usando los argumentos `--address` y `--watchdog-foreground`. + +El argumento `--address` establece un puerto para que el daemon acepte conexiones. El argumento `--watchdog-foreground` garantiza que el daemon se ejecute en primer plano. + +### Configurar el contenedor del agente PHP [#agent-container] + +Para configurar el contenedor del agente PHP para Docker: + +1. Asegúrese de que haya una instalación de PHP disponible en el contenedor. Por ejemplo, utilice una imagen Docker publicada como `php:7.1`. + +2. Para instalar el agente, descargue el paquete del agente PHP desde [el sitio de descarga de archivos tar](/docs/agents/php-agent/installation/php-agent-installation-tar-file) de New Relic y ejecute el script `newrelic-install` con el argumento `install` . + +3. En el archivo `newrelic.ini` , configure el nombre de la aplicación y + + + + con las entradas `newrelic.appname` y `newrelic.license` . + +4. Dirija al agente al daemon configurando la opción `newrelic.daemon.address` en el archivo `newrelic.ini`. Asegúrese de que el valor de esta opción sea `HOST:PORT`, donde `HOST` es el nombre o la dirección IP del host donde se ejecuta el daemon y `PORT` es el número de puerto donde el daemon está escuchando. + +## Instalar agente y daemon en el mismo contenedor [#install-same-container] + + + De forma predeterminada, la primera transacción hace que el agente active el inicio daemon y la inicialización de la conexión de la aplicación. Por motivos de rendimiento, el agente no espera a que se completen esas operaciones antes de inicializar la conexión. Esto puede resultar en la pérdida de las primeras transacciones después del inicio de un contenedor. Para evitar esta pérdida, establezca las entradas `newrelic.daemon.start_timeout` y `newrelic.daemon.app_connect_timeout` en el archivo `newrelic.ini` con nuestros [valores recomendados](https://discuss.newrelic.com/t/php-troubleshooting-framework-configuration/119980) de 5 y 15 respectivamente. + + +Para configurar el agente PHP y daemon en el mismo contenedor Docker : + +1. Asegúrese de que haya una instalación de PHP disponible en el contenedor. Por ejemplo: podrías usar una imagen Docker publicada como `php:7.1`. + +2. Para instalar el agente, descargue el paquete del agente PHP desde [el sitio de descarga de archivos tar](/docs/agents/php-agent/installation/php-agent-installation-tar-file) de New Relic y ejecute el script `newrelic-install` con el argumento `install` . + +3. Establezca el nombre de la aplicación y + + + + mediante las entradas `newrelic.license` y `newrelic.appname` en el archivo `newrelic.ini` . + + + + ```dockerfile + FROM php:7.1 + + RUN \ + curl -L PHP_AGENT_URL | tar -C /tmp -zx && \ + export NR_INSTALL_USE_CP_NOT_LN=1 && \ + export NR_INSTALL_SILENT=1 && \ + /tmp/newrelic-php5-*/newrelic-install install && \ + rm -rf /tmp/newrelic-php5-* /tmp/nrinstall* && \ + sed -i \ + -e 's/"REPLACE_WITH_REAL_KEY"/"YOUR_LICENSE_KEY"/' \ + -e 's/newrelic.appname = "PHP Application"/newrelic.appname = "YOUR_APPLICATION_NAME"/' \ + -e 's/;newrelic.daemon.app_connect_timeout =.*/newrelic.daemon.app_connect_timeout=15s/' \ + -e 's/;newrelic.daemon.start_timeout =.*/newrelic.daemon.start_timeout=5s/' \ + /usr/local/etc/php/conf.d/newrelic.ini + ``` + + Debes editar tres partes de este Dockerfile de ejemplo: + + * `PHP_AGENT_URL`: La URL de descarga para la versión de su agente PHP. Para encontrar la versión más reciente del agente, vaya a + + **[download.newrelic.com/php_agent/release/](https://download.newrelic.com/php_agent/release/)** + + . + + * `YOUR_LICENSE_KEY`: Reemplace esto con su + + + + . Tenga en cuenta que `"REPLACE_WITH_REAL_KEY"` es una cadena real en el archivo + + **newrelic.ini** + + predeterminado para el agente PHP. No edites esa cadena. El comando `sed` reemplaza esa cadena predeterminada con la clave real de 40 caracteres, entre comillas. + + * `YOUR_APPLICATION_NAME`: Reemplace con el nombre de su aplicación, entre comillas. + + + + + Aquí hay algunos recursos de resolución de problemas Docker : + + * [Monitoreo de contenedores que ejecutan un único script PHP](https://discuss.newrelic.com/t/relic-solution-single-php-script-docker-containers/80386) + * [Consejos de resolución de problemas para el agente PHP.](https://discuss.newrelic.com/t/php-troubleshooting-framework-configuration/119980) + + + \ No newline at end of file diff --git a/src/i18n/content/es/docs/apm/agents/php-agent/getting-started/introduction-new-relic-php.mdx b/src/i18n/content/es/docs/apm/agents/php-agent/getting-started/introduction-new-relic-php.mdx new file mode 100644 index 00000000000..a5be3a71a82 --- /dev/null +++ b/src/i18n/content/es/docs/apm/agents/php-agent/getting-started/introduction-new-relic-php.mdx @@ -0,0 +1,173 @@ +--- +title: Introducción a New Relic para PHP +tags: + - Agents + - PHP agent + - Getting started +metaDescription: 'For an overview of New Relic''s PHP agent (compatibility, requirements, installation, configuration, troubleshooting, known issues), start here.' +freshnessValidatedDate: never +translationType: machine +--- + +import apmPhpSummaryPage from 'images/apm_screenshot-full_php-summary-page.webp' + +import apmPhpAgentDiagram from 'images/apm_diagram_php-agent-diagram.webp' + +Nuestro agente PHP monitorea su aplicación para ayudarlo [a identificar y resolver problemas de rendimiento](#monitor-performance). También puede ampliar el monitoreo del rendimiento del agente para [recopilar y analizar datos comerciales](#business-data) para ayudarlo a mejorar la experiencia de los clientes y tomar decisiones comerciales impulsadas por datos. + +Utilice el agente PHP de New Relic para resolver los problemas de rendimiento de su aplicación con nuestro [tutorial Mi aplicación es lenta](/docs/journey-app-slow/root-causes/). + +## monitor el rendimiento de la aplicación [#monitor-performance] + +PHP - APM Summary + +
+ **[one.newrelic.com > All capabilities](https://one.newrelic.com/all-capabilities) > APM & services > (select an app) > Summary**: Después de instalar el agente PHP, vea un resumen del rendimiento de su aplicación. +
+ + + **View the big picture of your app** + + +* monitor [el Apdex de su aplicación (satisfacción del usuario)](/docs/apm/new-relic-apm/apdex/apdex-measuring-user-satisfaction) +* Obtenga un [resumen de alto nivel de su aplicación](/docs/apm/applications-menu/monitoring/apm-overview-page) +* Crea [mapas arquitectónicos](/docs/data-analysis/user-interface-functions/view-your-data/service-maps-visualize-monitor-apps-entire-architecture) de tu aplicación + + + **Find errors and problems quickly** + + +* Seguimiento [de clave de transacción](/docs/apm/transactions/key-transactions/key-transactions-tracking-important-transactions-or-events) +* [Busque y cree gráficos personalizables](/docs/insights/new-relic-insights/explore/metric-explorer-search-chart-metrics-sent-new-relic-agents) para el intervalo de tiempo de datos métricos más importantes para usted, incluida cualquier [métrica personalizada](/docs/agents/manage-apm-agents/agent-data/custom-metrics) que envíe a New Relic. +* [alerta](/docs/alerts/alert-policies/understanding-alert-policies/alerting-new-relic) a tu equipo cuando ocurren errores o problemas antes de que afecten a tu usuario +* Seguimiento del rendimiento [después de un despliegue](/docs/agents/php-agent/features/recording-deployments-using-php-script) + + + **Drill down into performance details** + + +* Examinar [la traza de la transacción](/docs/apm/transactions/transaction-traces/transaction-traces)a nivel de código +* Examinar [consulta de la base de datos traza](/docs/apm/transactions/transaction-traces/sql-statements) +* Examinar [error traza](/docs/apm/applications-menu/events/viewing-apm-errors-error-traces) + + + **View logs for your infrastructure data** + + +Reúna los datos de su registro y de la aplicación para que la resolución de problemas sea más fácil y rápida. No es necesario cambiar a otra página de UI. + +* Con [el contexto de inicio de sesión](/docs/logs/logs-context/configure-logs-context-php/), puede ver el mensaje de registro relacionado con sus errores y la traza directamente en UI de su aplicación. +* También puede ver el inicio de sesión en el contexto de [los datos de su infraestructura](/docs/logs/forward-logs/forward-your-logs-using-infrastructure-agent/), como el clúster de Kubernetes. + + + **Analyze business data** + + +Utilice el agente PHP para organizar, consultar y visualizar sus datos para responder preguntas clave sobre el rendimiento de la aplicación y la experiencia de los clientes. + +* Utilice [el atributo de transacción predeterminado](/docs/insights/new-relic-insights/decorating-events/apm-default-attributes-insights) o [agregue el suyo propio](/docs/insights/new-relic-insights/decorating-events/insights-custom-attributes) +* consulta tus datos [mediante NRQL](/docs/insights/new-relic-insights/using-new-relic-query-language/using-nrql) +* Envía [tus propios datos del evento](/docs/insights/new-relic-insights/adding-querying-data/inserting-custom-events-new-relic-apm-agents#php-att) +* Cree y comparta [un panel](/docs/insights/new-relic-insights/managing-dashboards-data)interactivo y personalizable + +## Arquitectura + +El agente PHP tiene dos binarios que trabajan juntos para reenviar datos a New Relic: + +* El agente maneja la instrumentación automática y API de su código PHP. +* El daemon actúa como un proxy entre el agente y la plataforma New Relic. + +Puede conectar hasta 500 aplicaciones/agente a un daemon. El daemon impone [el muestreo](/docs/agents/manage-apm-agents/agent-data/new-relic-events-limits-sampling) cuando se alcanzan los límites del ciclo de recolección, así que considere esto al decidir cuántas aplicaciones/agentes conectar a un solo daemon. + + + La cantidad de aplicaciones/agentes por daemon puede ser menor cuando se ejecuta en un contenedor Docker separado, dependiendo de la capacidad de la conexión entre contenedores. + + +This diagram shows the flow of data from the PHP agent to New Relic. + +
+ El flujo de datos desde su aplicación PHP a New Relic. +
+ +El flujo de trabajo entre su aplicación y New Relic debe ocurrir en este orden: + +1. El agente establece una conexión de socket con el daemon enviando la primera carga útil de datos de instrumentación. +2. El daemon establece un enlace HTTPS con la plataforma New Relic. El daemon debe invocarse antes de que se invoque su aplicación instrumentada. Esto se llama [modo agente](/docs/agents/php-agent/advanced-installation/starting-php-daemon-advanced) y es el predeterminado. + +Para evitar perder datos reportados, asegúrese de que su aplicación instrumentada no envíe transacciones antes de que se establezcan ambas conexiones. + +## Instalar el agente [#installation] + +Antes de instalar el agente PHP, asegúrese de que su sistema cumpla con el [requisito del sistema](/docs/agents/php-agent/getting-started/php-agent-compatibility-requirements). El agente PHP admite muchos de los [marcos](/docs/agents/php-agent/getting-started/php-agent-compatibility-requirements#frameworks), [bases de datos](/docs/agents/php-agent/getting-started/php-agent-compatibility-requirements#databases) y [bibliotecas](/docs/agents/php-agent/getting-started/php-agent-compatibility-requirements#databases) de PHP más comunes. También puede utilizar el agente en un [entorno flexible de Google App Engine (GAE)](/docs/agents/php-agent/advanced-installation/install-new-relic-php-agent-gae-flexible-environment). + + + Si está [instalando el agente en un servicio de alojamiento compartido](/docs/agents/php-agent/installation/install-php-agent-shared-hosting-service), asegúrese de tener permisos de root para instalar el agente o comuníquese con su proveedor de alojamiento para obtener asistencia técnica. + + +Para instalar el agente, primero [regístrese en New Relic](https://newrelic.com/signup) . Una vez que inicie sesión, use nuestro iniciador o consulte las instrucciones para una instalación específica. + + + Agregar datos PHP + + +Para **standard installations**, consulte: + +* [Descripción general de la instalación del agente PHP](/docs/agents/php-agent/installation/php-agent-installation-overview) (los pasos de instalación básicos para las configuraciones más comunes). +* [Instalación en RedHat o CentOS](/docs/agents/php-agent/installation/php-agent-installation-redhat-and-centos) +* [Instalación en Ubuntu o Debian](/docs/agents/php-agent/installation/php-agent-installation-ubuntu-and-debian) +* [Instalación con archivo tar](/docs/agents/php-agent/installation/php-agent-installation-tar-file) (método genérico para usar en cualquier sistema compatible, como variantes de Linux, OpenSolaris, SmartOS, FreeBSD, macOS, etc.) +* [El script newrelic-install](/docs/agents/php-agent/installation/newrelic-install-script) (cómo utilizar el script interactivo que automatiza algunas tareas de instalación) + +Para otros tipos de instalación de PHP y temas **advanced installation** , consulte: + +* [Instalación del agente PHP: PHP no estándar](/docs/agents/php-agent/installation/php-agent-installation-non-standard-php) +* [Iniciar el daemonPHP](/docs/agents/php-agent/installation/starting-php-daemon-advanced) (una instalación estándar de New Relic inicia el daemon automáticamente, pero también puede [daemon manualmente](/docs/agents/php-agent/installation/starting-php-daemon-advanced#selecting-external)) +* [Modo silencioso para el script de instalación](/docs/agents/php-agent/installation/running-php-install-script-silent-mode) +* [Instalación del entorno flexible de Google App Engine (GAE)](/docs/agents/php-agent/advanced-installation/install-new-relic-php-agent-gae-flexible-environment) para el agente PHP de New Relic + +## Configurar el agente [#configuration] + +El agente incluye una variedad de [opciones de configuración](/docs/agents/php-agent/configuration/php-agent-configuration) para personalizar y ajustar aún más su instalación. + + + La parte más importante de la configuración del agente es darle a su aplicación un [nombre descriptivo](/docs/agents/php-agent/configuration/php-agent-configuration#inivar-appname). New Relic [usa el nombre de esta aplicación para métrica agregada](/docs/agents/manage-apm-agents/app-naming/name-your-application#app-name) cuando tienes varias aplicaciones o hosts. + + +Después de cambiar las opciones de configuración del agente, reinicie su servidor web. + +## Ampliar la instrumentación del agente [#extend] + +Después de instalar el agente, vaya más allá y amplíe la instrumentación del agente: + +* [Tiempo de carga de la página](/docs/agents/php-agent/features/page-load-timing-php): integre el agente PHP con + + [](/docs/browser/new-relic-browser/getting-started/new-relic-browser) + + para obtener visibilidad de la actividad del usuario final. + +* [instrumentación personalizada](/docs/agents/php-agent/features/php-custom-instrumentation): transacción instrumentada no capturada como parte de nuestro framework de instrumentación. + +* [API del agente](/docs/agents/php-agent/configuration/php-agent-api): utilice la API del agente para personalizar el comportamiento del agente. Por ejemplo, puede recopilar métricas personalizadas, marcar un error o ignorar por completo una transacción en particular. + +* [Atributo de agente](/docs/agents/php-agent/attributes/php-agent-attributes): Personaliza el [atributo](/docs/agents/manage-apm-agents/agent-metrics/agent-attributes) adjunto a la transacción. La personalización de atributos le permite evitar el envío de atributos sensibles o recopilar atributos adicionales para una visibilidad más profunda de su transacción. + +## Solucionar problemas de su instalación [#troubleshoot] + +Si tiene problemas, consulte los documentos de resolución de problemas del agente PHP. Algunos de los documentos de resolución de problemas más importantes en esa sección incluyen: + +* [No aparecen datos (PHP)](/docs/agents/php-agent/troubleshooting/no-data-appears-php) +* [Determinar los requisitos de permisos](/docs/agents/php-agent/troubleshooting/determining-permissions-requirements) +* [La configuración INI no tiene efecto inmediatamente](/docs/agents/php-agent/troubleshooting/ini-settings-not-taking-effect-immediately) +* [Por qué y cuándo reiniciar su servidor web (PHP)](/docs/agents/php-agent/troubleshooting/why-when-restart-your-web-server-php) \ No newline at end of file diff --git a/src/i18n/content/es/docs/apm/agents/php-agent/getting-started/php-agent-compatibility-requirements.mdx b/src/i18n/content/es/docs/apm/agents/php-agent/getting-started/php-agent-compatibility-requirements.mdx index 7812123fe69..81dab402862 100644 --- a/src/i18n/content/es/docs/apm/agents/php-agent/getting-started/php-agent-compatibility-requirements.mdx +++ b/src/i18n/content/es/docs/apm/agents/php-agent/getting-started/php-agent-compatibility-requirements.mdx @@ -189,17 +189,21 @@ Se admiten los siguientes frameworks: - CakePHP 2.x + [Drupal 7.x, 8.x, 9.1-9.5](/docs/agents/php-agent/frameworks-libraries/drupal-specific-functionality) - Magento 1.x y 2.x, CE y EE + Magento 2.x, CE y EE - CodeIgniter 2.x + Joomla 3.x + + + Joomla 3.x no es compatible con PHP 8.x. + @@ -209,7 +213,7 @@ Se admiten los siguientes frameworks: - [Drupal 6.x, 7.x, 8.x, 9.1-9.5](/docs/agents/php-agent/frameworks-libraries/drupal-specific-functionality) + Laminas 3.x @@ -219,21 +223,17 @@ Se admiten los siguientes frameworks: - Joomla 3.x - - - Joomla 3.x no es compatible con PHP 8.x. - + Laravel 6.x, 7.x, 8.x, 9.x y 10.x - Symfony 3.x, 4.x y 5.x + Symfony 4.x y 5.x - Laminas 3.x + Lumen 6.x, 7.x, 8.x, 9.x y 10.x @@ -241,23 +241,11 @@ Se admiten los siguientes frameworks: - - - Laravel 6.x, 7.x, 8.x, 9.x y 10.x - - - - Lumen 6.x, 7.x, 8.x, 9.x y 10.x - - + - Framework Zend 1.x, 2.x y 3.x - - - - Yii 1.x + Zend Framework 3.x diff --git a/src/i18n/content/es/docs/apm/agents/python-agent/configuration/python-agent-configuration.mdx b/src/i18n/content/es/docs/apm/agents/python-agent/configuration/python-agent-configuration.mdx new file mode 100644 index 00000000000..ef39335063c --- /dev/null +++ b/src/i18n/content/es/docs/apm/agents/python-agent/configuration/python-agent-configuration.mdx @@ -0,0 +1,5205 @@ +--- +title: Configuración del agente Python +tags: + - Agents + - Python agent + - Configuration +metaDescription: 'How to configure the Python agent, including editing the Python agent config file and setting environment variables.' +freshnessValidatedDate: never +translationType: machine +--- + +import apmConfigSettings from 'images/apm_diagram_config-settings.webp' + +[Nuestro agente Python](/docs/agents/python-agent/getting-started/introduction-new-relic-python) le permite cambiar el comportamiento predeterminado del agente usando opciones de configuración. + +La única configuración de configuración del agente Python requerida es . La clave de licencia identifica la cuenta donde el agente reporta los datos de la aplicación. Dependiendo de cómo aloje su aplicación, la clave de licencia se puede proporcionar a través de un archivo de configuración o una variable de entorno. + +## Métodos de configuración y precedencia. [#options] + +La forma principal de configurar el agente Python es a través del [archivo de configuración](#agent-configuration-file), que se genera como parte del [proceso de instalación](/docs/agents/python-agent/installation-configuration/python-agent-installation) estándar. También es posible establecer un número limitado de opciones de configuración mediante [la configuración del lado del servidor en la UI](#server-side-configuration) o mediante el uso [de variables de entorno](#environment-variables). También puede especificar algunas configuraciones por solicitud pasando la configuración con el [diccionario de entorno de solicitudes WSGI](#per-request-configuration). + +El agente Python sigue este orden de precedencia para la configuración: + +diagram-python-config-precedence.png + +
+ Con el agente Python, las opciones por solicitud anulan la configuración del lado del servidor. Si está habilitada, la configuración del lado del servidor anula los valores correspondientes a **all** en el archivo de configuración del agente, incluso si los valores del lado del servidor se dejan en blanco. El archivo de configuración del agente anula las variables de entorno. Las variables de entorno anulan los valores predeterminados del agente. +
+ +Aquí hay descripciones detalladas de cada método de configuración: + + + + Normalmente configura su agente Python desde un archivo de configuración local en el sistema host del agente. Proporcione la ruta al archivo de configuración al inicio utilizando uno de estos métodos: + + * Cuando llame a [`newrelic.agent.initialize()`](/docs/agents/python-agent/customization-extension/python-management-api#mgmt), proporcione la ruta al archivo de configuración como primer argumento. + + O + + * Establezca la variable de entorno `NEW_RELIC_CONFIG_FILE` . Si utiliza el script contenedor `newrelic-admin` , debe usar la variable de entorno porque el script contenedor llama al agente automáticamente. + + El archivo de configuración utiliza una estructura similar a los archivos `.ini` de Microsoft Windows. Para obtener más información, consulte la [documentación sobre el formato de archivo](http://docs.python.org/library/configparser.html) del módulo Python ConfigParser. + + + Se incluye un archivo de configuración de muestra con el agente Python como `newrelic/newrelic.ini`. También puede generar uno a partir del script `newrelic-admin` usando el comando `generate-config` o descargar una copia desde [nuestro repositorio de descargas](https://download.newrelic.com/python_agent/release/). + + + + + [La configuración del lado del servidor](/docs/agents/manage-apm-agents/configuration/server-side-agent-configuration) le permite configurar ciertas configuraciones en la UI de New Relic. Esto aplica sus cambios automáticamente a todos los agentes incluso si se ejecutan en varios hosts. Cuando esté disponible, este documento incluye las etiquetas de la UI para la configuración del lado del servidor en opciones de configuración individuales como **Server-side label**. + + + Si la configuración del lado del servidor está habilitada, el agente ignora cualquier valor en el archivo de configuración que **could** se establezca en la UI. Incluso si el valor de la UI está vacío, el agente lo trata como una cadena vacía y no utiliza el archivo de configuración del agente. + + + + + Las variables de entorno le permiten anular los valores predeterminados para ciertas configuraciones principales. Si la configuración equivalente aparece explícitamente en el archivo de configuración del agente, la configuración del archivo de configuración tiene prioridad sobre la variable de entorno. Cuando estén disponibles, las variables de entorno se documentan a continuación en opciones de configuración individuales como **Environ variable**. + + Para configuraciones simples, puede usar las variables de entorno junto con [la configuración del lado del servidor](#server-side-configuration) y evitar el archivo de configuración del agente por completo. Esta es la configuración predeterminada con [Heroku](/docs/agents/python-agent/hosting-services/python-agent-heroku), donde la instalación del complemento New Relic completa automáticamente las variables de entorno necesarias. + + Si está utilizando New Relic CodeStream para monitor el rendimiento de su IDE, es posible que también desee [asociar el repositorio con sus servicios](/docs/codestream/how-use-codestream/performance-monitoring#repo-association) y [asociar SHA de compilación o etiqueta de lanzamiento con errores](/docs/codestream/how-use-codestream/performance-monitoring#buildsha). + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + **Environment variable** + + + + **Configuration setting** + +
+ `NEW_RELIC_LICENSE_KEY` + + `license_key` +
+ `NEW_RELIC_APP_NAME` + + `app_name` +
+ `NEW_RELIC_MONITOR_MODE` + + `monitor_mode` +
+ `NEW_RELIC_DEVELOPER_MODE` + + `developer_mode` +
+ `NEW_RELIC_LOG` + + `log_file` +
+ `NEW_RELIC_LOG_LEVEL` + + `log_level` +
+ `NEW_RELIC_HIGH_SECURITY` + + `high_security` +
+ `NEW_RELIC_PROXY_SCHEME` + + `proxy_scheme` +
+ `NEW_RELIC_PROXY_HOST` + + `proxy_host` +
+ `NEW_RELIC_PROXY_PORT` + + `proxy_port` +
+ `NEW_RELIC_PROXY_USER` + + `proxy_user` +
+ `NEW_RELIC_PROXY_PASS` + + `proxy_pass` +
+ `NEW_RELIC_AUDIT_LOG` + + `audit_log_file` +
+ `NEW_RELIC_STARTUP_TIMEOUT` + + `startup_timeout` +
+ `NEW_RELIC_SHUTDOWN_TIMEOUT` + + `shutdown_timeout` +
+ `NEW_RELIC_LABELS` + + `labels` +
+ `NEW_RELIC_PROCESS_HOST_DISPLAY_NAME` + + `process_host.display_name` +
+ `NEW_RELIC_API_KEY` + + `api_key` +
+ `NEW_RELIC_CA_BUNDLE_PATH` + + `ca_bundle_path` +
+ `NEW_RELIC_DISTRIBUTED_TRACING_ENABLED` + + `distributed_tracing.enabled` +
+ `NEW_RELIC_ANALYTICS_EVENTS_MAX_SAMPLES_STORED` + + `event_harvest_config.harvest_limits.analytic_event_data` +
+ `NEW_RELIC_CUSTOM_INSIGHTS_EVENTS_MAX_SAMPLES_STORED` + + `event_harvest_config.harvest_limits.custom_event_data` +
+ `NEW_RELIC_ML_INSIGHTS_EVENTS_MAX_SAMPLES_STORED` + + `event_harvest_config.harvest_limits.ml_event_data` +
+ `NEW_RELIC_SPAN_EVENTS_MAX_SAMPLES_STORED` + + `event_harvest_config.harvest_limits.span_event_data` +
+ `NEW_RELIC_ERROR_COLLECTOR_MAX_EVENT_SAMPLES_STORED` + + `event_harvest_config.harvest_limits.error_event_data` +
+ `NEW_RELIC_FEATURE_FLAG` + + `feature_flag` +
+
+ + + Para ciertos servidores WSGI, puede anular el [nombre de la aplicación](#app_name) y [capturar la configuración del atributo](#attributes) por solicitud. Esto es posible con servidores WSGI donde puede definir pares principales de valores adicionales que se pasan al diccionario de entorno WSGI por solicitud. + + Establezca estos valores con las cadenas `on`, `off`, `true`, `false`, `1` y `0`. Si se establece desde un mecanismo de configuración implementado usando código Python, también se aceptarán los objetos Python que se evalúen como Verdadero o Falso. + + + + En el servidor Apache/mod_wsgi, puede utilizar la directiva `SetEnv` para anular la configuración (opcionalmente dentro de un bloque `Location` o `Directory` ). Por ejemplo, podría anular el [nombre de la aplicación](#app_name) para un host virtual completo o para un subconjunto de URL manejadas por la aplicación WSGI para ese host virtual. + + + + Además de poder anular ciertas configuraciones de agente, puede establecer otras configuraciones por solicitud con su clave de entorno WSGI: + + + + Si se establece en `true`, esta transacción web se informará como una [transacción no web](/docs/apm/transactions/intro-transactions/monitor-background-processes-other-non-web-transactions). + + + + Si se establece en `true`, esta transacción web no se informará. + + + + Si se establece en `true`, no se generará ninguna métrica de Apdex para esta transacción web. + + + + Si se establece en `true`, esta transacción web no se puede registrar en una [traza de la transacción](/docs/apm/transactions/transaction-traces/transaction-traces). + + + + Si se establece en `true`, esto deshabilita la inserción automática del encabezado/pie de página de JavaScript para el tiempo de carga de la página (a veces denominado monitoreo de usuarios reales o RUM). Solo se aplica si la inserción automática está [disponible para su frameworkweb](/docs/agents/python-agent/supported-features/page-load-timing-python#restrictions_on_instrumentation). + + + + + El uso de un middleware WSGI para establecer estos valores no funcionará cuando se aplicó el contenedor de aplicación WSGI del propio agente Python en un ámbito externo. En estos casos deberá realizar llamadas a la API del agente para lograr el mismo resultado. + + +
+ +## Configuración de múltiples entornos [#config-file-deployment-environments] + +El agente lee su configuración principal desde una sección de configuración del agente llamada `newrelic`. Puede proporcionar anulaciones para entornos de implementación específicos (por ejemplo, Desarrollo, prueba, Producción) en secciones adicionales. Anteponga estas secciones con `[newrelic:environment]`, donde `environment` se reemplaza con el nombre de su entorno. + +Para especificar que el agente debe utilizar una configuración basada en el entorno, utilice uno de estos métodos: + +* Cuando llame a [`newrelic.agent.initialize()`](/docs/agents/python-agent/customization-extension/python-management-api#mgmt), proporcione el nombre del entorno como segundo argumento. + + O + +* Establezca la variable de entorno `NEW_RELIC_ENVIRONMENT` en el nombre del entorno. + +Si no se especifica ningún entorno, el agente utilizará la configuración predeterminada como se especifica en la sección de configuración del agente `newrelic` . + +La estructura básica del archivo de configuración es: + +```ini +[newrelic] +... default settings + +[newrelic:development] +... override settings + +[newrelic:staging] +... override settings + +[newrelic:production] +... override settings +``` + +## Ajustes de configuración generales [#general-settings] + +Estas configuraciones están disponibles en el archivo de configuración del agente. + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ Tipo + + Cadena +
+ Por defecto + + (ninguno) +
+ [Establecer en](#options) + + Archivo de configuración, variable de entorno +
+ [Variable ambiental](#environment-variables) + + `NEW_RELIC_LICENSE_KEY` +
+ + Especifica el de tu cuenta New Relic. Esta clave asocia la métrica de tu aplicación con tu cuenta New Relic. +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ Tipo + + Cadena +
+ Por defecto + + `Python Application` +
+ [Establecer en](#options) + + Opción por solicitud, archivo de configuración, variable de entorno +
+ [Opción por solicitud](#per-request-configuration) + + `newrelic.app_name` +
+ [Variable ambiental](#environment-variables) + + `NEW_RELIC_APP_NAME` +
+ + El [nombre de la aplicación](/docs/apm/new-relic-apm/installation-configuration/name-your-application) utilizada para agregar datos en la UI de New Relic. Para informar datos a [varias aplicaciones al mismo tiempo](/docs/apm/new-relic-apm/installation-configuration/using-multiple-names-app), especifique una lista de nombres separados por un punto y coma `;`. No coloque un espacio antes del punto y coma, lo que hace que el analizador de configuración de Python interprete el nombre como un comentario incrustado. +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ Tipo + + Booleano +
+ Por defecto + + `true` +
+ [Establecer en](#options) + + Archivo de configuración, variable de entorno +
+ [Variable ambiental](#environment-variables) + + `NEW_RELIC_MONITOR_MODE` +
+ + Cuando `true`, el agente recopila datos de rendimiento sobre su aplicación e informa estos datos a nuestro [recolector de datos](/docs/accounts-partnerships/education/getting-started-new-relic/glossary#collector). +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ Tipo + + Booleano +
+ Por defecto + + `false` +
+ [Establecer en](#options) + + Archivo de configuración, variable de entorno +
+ [Variable ambiental](#environment-variables) + + `NEW_RELIC_DEVELOPER_MODE` +
+ + Cuando `true`, el agente instrumentará su aplicación web, pero no enviará ningún dato real. En este modo fuera de línea, no se le facturará por un agente activo. + + Utilice el modo de desarrolladores para probar [nuevas versiones del agente](/docs/release-notes/agent-release-notes/python-release-notes) o pruebe el agente con paquetes de terceros en un entorno de desarrolladores. El modo fuera de línea no es una forma de ejecutar el APM localmente, porque las métricas que recopila el agente no se informan en ninguna parte. +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ Tipo + + Cadena +
+ Por defecto + + (ninguno) +
+ [Establecer en](#options) + + Archivo de configuración, variable de entorno +
+ [Variable ambiental](#environment-variables) + + `NEW_RELIC_LOG` +
+ + Establece el nombre de un archivo de registro, que es útil para depurar problemas con el agente. Esto no está configurado de forma predeterminada, ya que el agente no conoce el usuario principal del proceso de su aplicación web ni en qué directorios ese proceso tiene permiso para escribir. Para obtener información detallada, consulte [Registro del agente Python](/docs/agents/python-agent/installation-configuration/python-agent-logging). + + Independientemente de lo que establezca, asegúrese de que los permisos para el directorio que lo contiene y el archivo en sí sean correctos, y que el usuario que ejecuta su aplicación web pueda escribir en el archivo. + + + Utilice una ruta absoluta a menos que esté seguro de cuál será el directorio de trabajo de su aplicación al inicio. Si no puede escribir un archivo de registro, también puede usar `stderr` y enviarlo a la salida de error estándar. Esto normalmente daría como resultado que aparezca un resultado en log de su servidor web. + +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ Tipo + + Cadena +
+ Por defecto + + `info` +
+ [Establecer en](#options) + + Archivo de configuración, variable de entorno +
+ [Variable ambiental](#environment-variables) + + `NEW_RELIC_LOG_LEVEL` +
+ + Establece el nivel de detalle del mensaje de registro, si ha configurado la [ubicación del archivo de registro](#log_file). Este `log_level` no afectará el nivel de registros del módulo de registro de Python. Los valores posibles, en orden creciente de detalle, son `critical`, `error`, `warning`, `info` y `debug`. + + Para informar problemas con los agentes, la configuración más útil es `debug`. Sin embargo, `debug` genera mucha información muy rápidamente, por lo que no mantenga el agente en este nivel durante más tiempo del necesario para reproducir el problema. +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ Tipo + + Booleano +
+ Por defecto + + `false` +
+ [Establecer en](#options) + + Archivo de configuración, variable de entorno +
+ [Variable ambiental](#environment-variables) + + `NEW_RELIC_HIGH_SECURITY` +
+ + El modo de alta seguridad impone ciertas configuraciones de seguridad y evita que se anulen, de modo que no se nos envíen datos confidenciales. Habilitar el modo de alta seguridad significa que los parámetros de solicitud no se recopilan y no se puede enviar SQL sin formato. + + Para activar el modo de alta seguridad, configúrelo en `true` en el archivo de configuración local **.ini** **and** actívelo desde la página **Account settings** . Para obtener más información, consulte [Alta seguridad](/docs/accounts-partnerships/accounts/security/high-security). +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ Tipo + + cadena +
+ Por defecto + + (ninguno) +
+ [Establecer en](#options) + + Archivo de configuración, variable de entorno +
+ Variables ambientales + + `NEW_RELIC_PROXY_SCHEME` + + `NEW_RELIC_PROXY_HOST` + + `NEW_RELIC_PROXY_PORT` + + `NEW_RELIC_PROXY_USER` + + `NEW_RELIC_PROXY_PASS` +
+ + De forma predeterminada, el agente Python intenta conectarse directamente a nuestros servidores. Si hay un firewall entre su host y nuestro [recolector](/docs/accounts-partnerships/education/getting-started-new-relic/glossary#collector) que requiere que use un proxy HTTP, configure `proxy_host` y `proxy_port` con los valores requeridos para su proxy HTTP. Si la autenticación de proxy la implementa el proxy HTTP, configure también `proxy_user` y `proxy_pass`. + + La configuración `proxy_scheme` dicta qué esquema de protocolo se utiliza para comunicarse con el proxy HTTP. Cuando se establece en `http`, el agente utiliza un túnel SSL a través del proxy HTTP para el cifrado de un extremo a otro. + + En lugar de configurar las configuraciones `proxy_scheme`, `proxy_host` y `proxy_port` , también puede configurar la configuración `proxy_host` en un URI válido para el proxy. Incluya el esquema, el host y el puerto; por ejemplo, `http://proxy-host:8000`. Esto también funciona si configura los detalles del proxy HTTP con la variable de entorno `NEW_RELIC_PROXY_HOST` . +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ Tipo + + Cadena +
+ Por defecto + + (ninguno) +
+ [Establecer en](#options) + + Archivo de configuración, variable de entorno +
+ [Variable ambiental](#environment-variables) + + `NEW_RELIC_AUDIT_LOG` +
+ + Establece el nombre del archivo de registro de auditoría. Si se establece, el agente registra los detalles de los mensajes que se transmiten entre el proceso del monitor y el [recolector](/docs/accounts-partnerships/education/getting-started-new-relic/glossary#collector). Esto le permite evaluar la seguridad del agente Python. + + Utilice una ruta absoluta a menos que esté seguro de cuál será el directorio de trabajo de su aplicación al inicio. Independientemente de lo que establezca, asegúrese de que los permisos para el directorio que lo contiene y el archivo en sí sean correctos. También asegúrese de que el usuario principal de su aplicación web pueda escribir en el archivo. + + + No utilice el registro de auditoría de forma continua, especialmente en un entorno de producción. Debido a que el agente no trunca ni rota el archivo de registro, el archivo de registro puede crecer muy rápidamente. + +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ Tipo + + Cadena +
+ Por defecto + + (ninguno) +
+ [Establecer en](#options) + + Archivo de configuración, variable de entorno +
+ [Variable ambiental](#environment-variables) + + `NEW_RELIC_LABELS` +
+ + Agrega [etiqueta](/docs/apm/new-relic-apm/maintenance/labels-categories-organize-your-apps-servers). Especifique _nombre:valor_ separado por dos puntos `:` y separe la etiqueta adicional con punto y coma `;`. + + + + ```ini + labels = Server:One;Data Center:Primary + ``` + + +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ Tipo + + Cadena +
+ Por defecto + + (ninguno) +
+ [Establecer en](#options) + + Archivo de configuración, variable de entorno +
+ [Variable ambiental](#environment-variables) + + `NEW_RELIC_PROCESS_HOST_DISPLAY_NAME` +
+ + Establece el nombre de host que se [mostrará en la UIde APM](/docs/apm/new-relic-apm/maintenance/add-rename-remove-hosts#display_name). Si se establece, esto anula el nombre de host predeterminado que el agente captura automáticamente. +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ Tipo + + Cadena +
+ Por defecto + + (ninguno) +
+ [Establecer en](#options) + + Archivo de configuración, variable de entorno +
+ [Variable ambiental](#environment-variables) + + `NEW_RELIC_API_KEY` +
+ + Establece [api_key](/docs/apis/rest-api-v2/requirements/api-keys) que se usará con [newrelic-admin record-deploy](/docs/agents/python-agent/installation-configuration/python-agent-admin-script#record-deploy). +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ Tipo + + Cadena +
+ Por defecto + + (ninguno) +
+ [Establecer en](#options) + + Archivo de configuración, variable de entorno +
+ [Variable ambiental](#environment-variables) + + `NEW_RELIC_CA_BUNDLE_PATH` +
+ + Anulación manual de la ruta a su paquete de CA local. Este paquete de CA se utilizará para validar el certificado SSL presentado por nuestro servicio de recopilación de datos. + + + Esta opción de configuración solo está disponible en las versiones 4.2.0 y posteriores del agente Python. + +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ Tipo + + Flotante +
+ Por defecto + + `0.5` +
+ [Establecer en](#options) + + Archivo de configuración, variable de entorno +
+ [Variable ambiental](#environment-variables) + + `NEW_RELIC_APDEX_T` +
+ + Registraremos la traza de la transacción cuando superen este umbral. El formato es una cantidad de segundos (se permiten puntos decimales). + + Consulte nuestra entrada del glosario para [apdex_t](/docs/using-new-relic/welcome-new-relic/get-started/glossary/#apdex_t) + + + Esto solo se establece en el archivo de configuración o en la variable de entorno si se establece `serverless_mode` , que está habilitado para AWS Lambda. De lo contrario, el valor local `apdex_t` se anula por el valor en la configuración de la aplicación UI que luego se usa para establecer el valor `apdex_f` . + +
+
+ +## Atributo + +Los atributos son pares de valores principales que proporcionan información para la traza de la transacción, errores de traza, y evento de transacción. Además de configurar el atributo para los cuatro destinos con las configuraciones generales del atributo a continuación, también se pueden configurar por destino. + +Para obtener más información, consulte [Atributo del agente Python](/docs/agents/python-agent/attributes/python-agent-attributes), [Habilitación y deshabilitación de atributo](/docs/agents/python-agent/attributes/enabling-disabling-attributes-python) y [Ejemplos de atributos](/docs/agents/python-agent/attributes/python-attribute-examples). + + + + + + + + + + + + + + + + + + + + + + + +
+ Tipo + + Booleano +
+ Por defecto + + `true` +
+ [Establecer en](#options) + + Archivo de configuración +
+ + Esta configuración se puede utilizar para activar o desactivar todos los atributos. +
+ + + + + + + + + + + + + + + + + + + + + + +
+ Tipo + + Lista de cadenas +
+ Por defecto + + (ninguno) +
+ [Establecer en](#options) + + Archivo de configuración +
+ + Si los atributos están habilitados, se nos enviarán las claves de atributos que se encuentran en esta lista. Las claves de la lista deben estar separadas por espacios como se muestra a continuación: + + ``` + key1 key2 key3 + ``` + + Las reglas para los atributos se pueden encontrar [en la página de atributos del agente](/docs/subscriptions/agent-attributes). +
+ + + + + + + + + + + + + + + + + + + + + + +
+ Tipo + + Lista de cadenas +
+ Por defecto + + (ninguno) +
+ [Establecer en](#options) + + Archivo de configuración +
+ + No se nos enviarán todas las claves de atributos que se encuentran en esta lista. Las claves de la lista deben estar separadas por espacios como se muestra a continuación: + + ``` + key1 key2 key3 + ``` + + Las reglas para los atributos se pueden encontrar [en la página de atributos del agente](/docs/subscriptions/agent-attributes). +
+
+ +## Configuración del rastreador de transacciones [#txn-tracer-settings] + + + No utilice corchetes `[suffix]` al final del nombre de su transacción. El agente elimina automáticamente los corchetes del nombre. En su lugar, utilice paréntesis `(suffix)` u otros símbolos si es necesario. + + +Para obtener más información sobre la traza de la transacción, consulte [traza de la transacción](/docs/traces/transaction-traces). + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ Tipo + + Booleano +
+ Por defecto + + `true` +
+ [Establecer en](#options) + + Configuración del lado del servidor, archivo de configuración +
+ [Etiqueta del lado del servidor](#server-side-configuration) + + `Enable transaction tracing?` +
+ + Si está habilitado, el rastreador de transacciones [captura información detallada sobre transacciones lentas](/docs/apm/transactions/transaction-traces/transaction-traces). +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ Tipo + + Positivo flotante o cadena (`apdex_f`) +
+ Por defecto + + `apdex_f` +
+ [Establecer en](#options) + + Configuración del lado del servidor, archivo de configuración +
+ [Etiqueta del lado del servidor](#server-side-configuration) + + `Threshold` +
+ + Umbral en segundos para saber cuándo recoger una traza de la transacción. Cuando el tiempo de respuesta de una acción del controlador excede este umbral, el agente registra una traza de la transacción. Los valores válidos son cualquier valor flotante positivo o `apdex_f` (cuatro veces [apdex_t](/docs/using-new-relic/welcome-new-relic/get-started/glossary/#apdex_t)). +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ Tipo + + Cadena +
+ Por defecto + + `obfuscated` +
+ [Establecer en](#options) + + Configuración del lado del servidor, archivo de configuración +
+ [Etiqueta del lado del servidor](#server-side-configuration) + + `Record SQL?` +
+ + Cuando el rastreador de transacciones está [habilitado](#txn-tracer-enabled), el agente puede registrar declaraciones SQL. La grabadora tiene tres modos: `off` (no envía SQL), `raw` (envía la instrucción SQL en su forma original) y `obfuscated` (elimina literales numéricos y de cadena). + + La mayoría de los marcos web (incluido Django) parametrizan las consultas SQL para que en realidad no contengan los valores utilizados para completar la consulta. Si utiliza el modo `raw` con uno de estos marcos, el agente Python solo verá el SQL antes de la inserción de valores. El SQL parametrizado se parecerá mucho al modo `obfuscated` . +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ Tipo + + Flotante +
+ Por defecto + + `0.5` +
+ [Establecer en](#options) + + Configuración del lado del servidor, archivo de configuración +
+ [Etiqueta del lado del servidor](#server-side-configuration) + + `Stack trace threshold` +
+ + Umbral en segundos para saber cuándo recopilar el rastreo del stack de las llamadas SQL. Cuando las sentencias SQL superan este umbral, el agente captura el rastreo actual de la pila. Esto es útil para identificar dónde se originan las llamadas SQL largas en una aplicación. +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ Tipo + + Booleano +
+ Por defecto + + `true` +
+ [Establecer en](#options) + + Configuración del lado del servidor, archivo de configuración +
+ [Etiqueta del lado del servidor](#server-side-configuration) + + `Enable SQL query plans?` +
+ + Determina si el agente Python capturará planes de consulta para consultas SQL lentas. Sólo es compatible con MySQL y PostgreSQL. +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ Tipo + + Flotante +
+ Por defecto + + `0.5` +
+ [Establecer en](#options) + + Configuración del lado del servidor, archivo de configuración +
+ [Etiqueta del lado del servidor](#server-side-configuration) + + `Query plan threshold` +
+ + Las consultas en la traza de la transacción que superen este umbral informarán [los datos de consulta lenta](/docs/apm/applications-menu/monitoring/viewing-slow-query-details) y cualquier plan explicativo disponible. La recopilación del plan de explicación no se realizará si [`transaction_tracer.explain_enabled`](#txn-tracer-explain-threshold) es `false`. +
+ + + + + + + + + + + + + + + + + + + + + + +
+ Tipo + + Booleano +
+ Por defecto + + `true` +
+ [Establecer en](#options) + + Archivo de configuración +
+ + Esta configuración se puede utilizar para activar o desactivar todos los atributos de la traza de la transacción. Si `attributes.enabled` en el nivel raíz es `false`, no se enviará ningún atributo a la traza de la transacción independientemente de cómo se establezca esta configuración (`transaction_tracer.attributes.enabled`). +
+ + + + + + + + + + + + + + + + + + + + + + +
+ Tipo + + Lista de cadenas +
+ Por defecto + + (ninguno) +
+ [Establecer en](#options) + + Archivo de configuración +
+ + Si los atributos están habilitados para la traza de la transacción, todas las claves de atributos que se encuentran en esta lista nos serán enviadas en la traza de la transacción. Para obtener más información, consulte las [reglas de atributos del agente](/docs/apm/other-features/attributes/agent-attributes). +
+ + + + + + + + + + + + + + + + + + + + + + +
+ Tipo + + Lista de cadenas +
+ Por defecto + + (ninguno) +
+ [Establecer en](#options) + + Archivo de configuración +
+ + Todas las claves de atributos encontradas en esta lista no se enviarán en la traza de la transacción. Para obtener más información, consulte las [reglas de atributos del agente](/docs/apm/other-features/attributes/agent-attributes). +
+ + + + + + + + + + + + + + + + + + + + + + +
+ Tipo + + Cadena +
+ Por defecto + + (ninguno) +
+ [Establecer en](#options) + + Archivo de configuración +
+ + Para las funciones o métodos especificados, el agente capturará instrumentación de temporización de funciones adicional. Especifique estos nombres en el formato `module:function` o `module:class.function`. + + Es posible utilizar comodines (globbing) para nombres de funciones y clases utilizando patrones admitidos por el módulo [fnmatch](https://docs.python.org/3/library/fnmatch.html) . Las rutas de los módulos no son compatibles con comodines. Especifique los patrones en el formato `module:function*` o `module:class.*`. + + Por ejemplo, si desea agregar seguimiento de funciones a todas las funciones de validación en el siguiente archivo: + + + my-app/common/utils.py + + + ```py + def validate_credentials(): + … + def validate_status(): + … + def format_message(): + … + ``` + + Agregue la siguiente línea al archivo de configuración del agente para incluir el seguimiento de funciones en todas las funciones de validación en `my-app/common/utils.py` mediante el uso de comodines. + + + my-app/newrelic.ini + + + ```ini + [newrelic] + ... + transaction_tracer.function_trace = common.utils:validate* + ``` + + + Wilcarding requiere [la versión 6.4.4.161 o superior del agente Python](/docs/agents/python-agent/installation-configuration/upgrade-python-agent). + +
+
+ +## Configuración del segmento de transacción [#txn-segment-settings] + +Aquí están las configuraciones del segmento de transacciones disponibles a través del archivo de configuración del agente. + + + + + + + + + + + + + + + + + + + + + + + +
+ Tipo + + Booleano +
+ Por defecto + + `true` +
+ [Establecer en](#options) + + Archivo de configuración +
+ + Esta configuración se puede utilizar para activar o desactivar todos los atributos de los segmentos de traza de la transacción. Si `attributes.enabled` en el nivel raíz es `false`, no se enviará ningún atributo a los segmentos de la traza de la transacción independientemente de cómo se establezca esta configuración (`transaction_segments.attributes.enabled`). +
+ + + + + + + + + + + + + + + + + + + + + + +
+ Tipo + + Lista de cadenas +
+ Por defecto + + (ninguno) +
+ [Establecer en](#options) + + Archivo de configuración +
+ + Si los atributos están habilitados para segmentos de traza de la transacción, todas las claves de atributos que se encuentran en esta lista se enviarán en segmentos de traza de la transacción. Para obtener más información, consulte las [reglas de atributos del agente](/docs/apm/other-features/attributes/agent-attributes). +
+ + + + + + + + + + + + + + + + + + + + + + +
+ Tipo + + Lista de cadenas +
+ Por defecto + + (ninguno) +
+ [Establecer en](#options) + + Archivo de configuración +
+ + Todas las claves de atributos que se encuentran en esta lista no se enviarán en segmentos de la traza de la transacción. Para obtener más información, consulte las [reglas de atributos del agente](/docs/apm/other-features/attributes/agent-attributes). +
+
+ +## Configuración del selector de errores [#error-collector-settings] + +Estos son los ajustes del recolector de errores disponibles a través del archivo de configuración del agente. + + + Para obtener una descripción general de la configuración de errores en APM, consulte [Administrar errores en APM](/docs/agents/manage-apm-agents/agent-data/manage-errors-apm-collect-ignore-mark-expected). + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ Tipo + + Booleano +
+ Por defecto + + `true` +
+ [Establecer en](#options) + + Configuración del lado del servidor, archivo de configuración +
+ [Etiqueta del lado del servidor](#server-side-configuration) + + `Enable error collection?` +
+ + Si está habilitado, el recolector de errores captura información sobre excepciones no detectadas. +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ Tipo + + Cadena +
+ Por defecto + + (ninguno) +
+ [Establecer en](#options) + + Configuración del lado del servidor, archivo de configuración +
+ [Etiqueta del lado del servidor](#server-side-configuration) + + `Ignore these errors` +
+ + Para dejar de recopilar errores específicos, configúrelo en una lista separada por espacios de los nombres de tipos de excepción de Python que se van a ignorar. Utilice el formulario `module:class` para el nombre de la excepción. + + + Antes de la versión 6.4.0 del agente, esta configuración se denominaba `error_collector.ignore_errors`. Si su archivo de configuración todavía usa `ignore_errors`, actualice su agente para usar `ignore_classes`. + +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ Tipo + + Cadena +
+ Por defecto + + `100-102 200-208 226 300-308 404` +
+ [Establecer en](#options) + + Configuración del lado del servidor, archivo de configuración +
+ [Etiqueta del lado del servidor](#server-side-configuration) + + `Ignore these status codes` +
+ + Enumera los códigos de estado HTTP que el agente debe ignorar en lugar de registrar como errores. Enumere códigos de estado adicionales como números enteros separados por espacios y especifique rangos con un guión `-` como separador entre los valores inicial y final. Para agregar uno de los códigos predeterminados a su lista de 'permitidos', anteponga el código con un signo de exclamación `!`. + + Esta configuración solo es compatible con algunos marcos web, ya que algunos marcos no utilizan excepciones para devolver respuestas HTTP. + + + Esta opción de configuración solo se puede establecer en la configuración del lado del servidor en las versiones 6.4.0 y posteriores del agente Python. + +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ Tipo + + Cadena +
+ Por defecto + + (ninguno) +
+ [Establecer en](#options) + + Configuración del lado del servidor, archivo de configuración +
+ [Etiqueta del lado del servidor](#server-side-configuration) + + `Expect these error class names` +
+ + Evita que clases de excepción específicas afecten la tasa de errores o la puntuación Apdex y al mismo tiempo informa los errores a APM. Establezca esto en una lista separada por espacios de los nombres de tipos de excepción de Python que se esperan. Utilice el formulario `module:class` para el nombre de la excepción. + + + Esta opción de configuración solo está disponible en las versiones 6.4.0 y posteriores del agente Python. + +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ Tipo + + Cadena +
+ Por defecto + + (ninguno) +
+ [Establecer en](#options) + + Configuración del lado del servidor, archivo de configuración +
+ [Etiqueta del lado del servidor](#server-side-configuration) + + `Expect these status codes` +
+ + Evita que códigos de estado HTTP específicos afecten la tasa de errores o la puntuación Apdex y al mismo tiempo informa los errores a APM. Enumere los códigos de estado como números enteros separados por espacios y especifique rangos con un guión `-` como separador entre los valores inicial y final. Para negar uno de los códigos de su lista, anteponga el código con un signo de exclamación `!`. + + Esta configuración solo es compatible con algunos marcos web, ya que algunos marcos no utilizan excepciones para devolver respuestas HTTP. + + + Esta opción de configuración solo está disponible en las versiones 6.4.0 y posteriores del agente Python. + +
+ + + + + + + + + + + + + + + + + + + + + + +
+ Tipo + + Booleano +
+ Por defecto + + `true` +
+ [Establecer en](#options) + + Archivo de configuración +
+ + Esta configuración se puede utilizar para activar o desactivar todos los atributos para errores de traza. Si `attributes.enabled` es `false` en el nivel raíz, entonces no se enviará ningún atributo a los errores de traza independientemente de cómo esté establecida esta configuración (`error_collector.attributes.enabled`). +
+ + + + + + + + + + + + + + + + + + + + + + +
+ Tipo + + Lista de cadenas +
+ Por defecto + + (ninguno) +
+ [Establecer en](#options) + + Archivo de configuración +
+ + Si los atributos están habilitados para errores de traza, todas las claves de atributos que se encuentran en esta lista se enviarán a errores de traza. Para obtener más información, consulte las [reglas de atributos del agente](/docs/apm/other-features/attributes/agent-attributes). +
+ + + + + + + + + + + + + + + + + + + + + + +
+ Tipo + + Lista de cadenas +
+ Por defecto + + (ninguno) +
+ [Establecer en](#options) + + Archivo de configuración +
+ + Las claves de atributos que se encuentran en esta lista no se enviarán a errores de traza. Para obtener más información, consulte las [reglas de atributos del agente](/docs/apm/other-features/attributes/agent-attributes). +
+ + + + + + + + + + + + + + + + + + + + + + +
+ Tipo + + Booleano +
+ Por defecto + + `true` +
+ [Establecer en](#options) + + Archivo de configuración +
+ + Si está habilitado, el recolector de errores captura datos de eventos para análisis avanzados. Para obtener más información, consulte [Errores de APM](/docs/apm/applications-menu/events/view-apm-errors-error-traces). +
+
+ +## Monitoreo de la configuración del navegador [#browser-settings] + +Aquí hay monitoreo de la configuración del navegador disponible a través del archivo de configuración del agente. + + + + + + + + + + + + + + + + + + + + + + + +
+ Tipo + + Booleano +
+ Por defecto + + `true` +
+ [Establecer en](#options) + + Archivo de configuración +
+ + Habilita el monitoreo del navegador. Para obtener más información, consulte [Tiempo de carga de la página en Python](/docs/python/page-load-timing-in-python). + + + Antes de habilitar el monitoreo del navegador en el archivo de configuración, [habilítelo en la configuración de la aplicación en la UIdel monitoreo del navegador](/docs/browser/new-relic-browser/installation-configuration/adding-apps-new-relic-browser#select-apm-app). + +
+ + + + + + + + + + + + + + + + + + + + + + +
+ Tipo + + Booleano +
+ Por defecto + + `true` +
+ [Establecer en](#options) + + Archivo de configuración +
+ + Para [el marco web Python compatible](/docs/agents/python-agent/supported-features/page-load-timing-python#restrictions_on_instrumentation), esta configuración permite la inserción automática del monitoreo de fragmentos de JavaScript del navegador. +
+ + + + + + + + + + + + + + + + + + + + + + +
+ Tipo + + Cadena +
+ Por defecto + + `text/html` +
+ [Establecer en](#options) + + Archivo de configuración +
+ + Especifique los `Content-Type` HTML (s) que nuestro agente de monitoreo de navegador debe auto-instrumentado. Agregue entradas adicionales en una lista separada por espacios. + + + + Si está generando respuestas de página HTML y utiliza el `Content-Type` de `application/xhtml+xml`, puede anular los tipos de contenido permitidos para enumerar tanto este tipo de contenido como el `text/html` predeterminado usando: + + ```ini + browser_monitoring.content_type = text/html application/xhtml+xml + ``` + + + El fragmento de JavaScript de monitoreo del navegador evita que la página se valide como `application/xhtml+xml`, aunque la página debe cargarse y representarse en el navegador final del usuario. + + + +
+ + + + + + + + + + + + + + + + + + + + + + +
+ Tipo + + Booleano +
+ Por defecto + + `false` +
+ [Establecer en](#options) + + Archivo de configuración +
+ + Esta configuración se puede utilizar para activar o desactivar todos los atributos de monitoreo del navegador. Estos son los datos que se envían al evento de vista de página. Si `attributes.enabled` es falso en el nivel raíz, no se enviará ningún atributo en el monitoreo del navegador independientemente de cómo esté establecida la configuración (`browser_monitoring.attributes.enabled`). +
+ + + + + + + + + + + + + + + + + + + + + + +
+ Tipo + + Lista de cadenas +
+ Por defecto + + (ninguno) +
+ [Establecer en](#options) + + Archivo de configuración +
+ + Si los atributos están habilitados para `browser_monitoring`, todas las claves de atributos que se encuentran en esta lista se enviarán en las vistas de página. Para obtener más información, consulte las [reglas de atributos del agente](/docs/apm/other-features/attributes/agent-attributes). +
+ + + + + + + + + + + + + + + + + + + + + + +
+ Tipo + + Lista de cadenas +
+ Por defecto + + (ninguno) +
+ [Establecer en](#options) + + Archivo de configuración +
+ + Todas las claves de atributos que se encuentran en esta lista no se enviarán en las visitas a la página. Para obtener más información, consulte las [reglas de atributos del agente](/docs/apm/other-features/attributes/agent-attributes). +
+
+ +## Configuración de eventos de transacción + +Aquí están las configuraciones de eventos de transacción disponibles a través del archivo de configuración del agente. + + + Estos ajustes de configuración solían llamarse `analytic_events`. Si su archivo de configuración todavía usa `analytic_events`, actualice su agente para usar `transaction_events`. + + + + + + + + + + + + + + + + + + + + + + + + +
+ Tipo + + Booleano +
+ Por defecto + + `true` +
+ [Establecer en](#options) + + Archivo de configuración +
+ + transacción evento data permite el uso de información adicional como [histograma](/docs/applications-menu/histograms-viewing-data-distribution) y [percentil](/docs/applications-menu/percentiles-comparing-ranked-data). +
+ + + + + + + + + + + + + + + + + + + + + + +
+ Tipo + + Booleano +
+ Por defecto + + `true` +
+ [Establecer en](#options) + + Archivo de configuración +
+ + Esta configuración se puede utilizar para activar o desactivar todos los atributos del evento de transacción. Si `attributes.enabled` es `false` en el nivel raíz, no se enviará ningún atributo al evento de transacción independientemente de cómo se establezca esta configuración (`transaction_events.attributes.enabled`). +
+ + + + + + + + + + + + + + + + + + + + + + +
+ Tipo + + Lista de cadenas +
+ Por defecto + + (ninguno) +
+ [Establecer en](#options) + + Archivo de configuración +
+ + Si los atributos están habilitados para el evento de transacción, todas las claves de atributos que se encuentran en esta lista se enviarán en el evento de transacción. Para obtener más información, consulte las [reglas de atributos del agente](/docs/apm/other-features/attributes/agent-attributes). +
+ + + + + + + + + + + + + + + + +
+ Tipo + + Lista de cadenas +
+ Por defecto + + (ninguno) +
+ + Todas las claves de atributos encontradas en esta lista no se enviarán en el evento de transacción. Tenga en cuenta que excluir atributo del evento de transacción no excluye del evento span. Para obtener más información, consulte las [reglas de atributos del agente](/docs/apm/other-features/attributes/agent-attributes). +
+
+ +## Configuración personalizada del evento + +Aquí hay configuraciones de evento personalizado disponibles a través del archivo de configuración del agente. + + + + + + + + + + + + + + + + + + + + + + + +
+ Tipo + + Booleano +
+ Por defecto + + `true` +
+ [Establecer en](#options) + + Archivo de configuración +
+ + Permitir la grabación del evento en la API de eventos a través de [`record_custom_event()`](/docs/agents/python-agent/python-agent-api/recordcustomevent-python-agent-api/). +
+
+ +## Configuración del rastreador de almacenamiento de datos. + +Estas configuraciones del rastreador de almacenamiento de datos están disponibles a través del archivo de configuración del agente: + + + + + + + + + + + + + + + + + + + + + + + +
+ Tipo + + Booleano +
+ Por defecto + + `true` +
+ [Establecer en](#options) + + Archivo de configuración +
+ + Cuando está habilitado, el agente recopila la instancia de almacenamiento de datos métrica (como host y puerto) para algún controlador de la base de datos. Estos también se informan sobre consulta lenta traza y traza de la transacción. +
+ + + + + + + + + + + + + + + + + + + + + + +
+ Tipo + + Booleano +
+ Por defecto + + `true` +
+ [Establecer en](#options) + + Archivo de configuración +
+ + Cuando está habilitado, el agente recopila el nombre de la base de datos para algún controlador de la base de datos. El nombre de la base de datos se informa en consulta lenta traza y traza de la transacción. +
+
+ +## Configuración del rastreo distribuido [#dt-main] + +Rastreo distribuido te permite ver el camino que sigue una solicitud a medida que viaja a través de un sistema distribuido. A partir de [la versión 7.0.0.166 o superior del agente Python](/docs/agents/python-agent/installation-configuration/upgrade-python-agent), rastreo distribuido está habilitado de forma predeterminada. + + + Habilitar rastreo distribuido deshabilita [el rastreo de múltiples aplicaciones](#cross-application-tracer) y tiene otros efectos en la característica APM. Si migra desde el rastreo multiaplicación, lea la [guía de transición](/docs/transition-guide-distributed-tracing). + + +Para obtener más información, consulte [rastreo distribuido para sus servicios de Python](/docs/apm/agents/python-agent/configuration/distributed-tracing-python-agent). + +La configuración incluye: + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ Tipo + + Booleano +
+ Por defecto + + `true` +
+ [Establecer en](#options) + + Archivo de configuración, variable de entorno +
+ [Variable ambiental](#environment-variables) + + `NEW_RELIC_DISTRIBUTED_TRACING_ENABLED` +
+ + Permite [distribuir rastreo](/docs/distributed-tracing/concepts/introduction-distributed-tracing) +
+
+ +## Configuración del evento span [#txn-span-events-settings] + +[Span evento](/docs/apm/distributed-tracing/getting-started/how-new-relic-distributed-tracing-works#data-structure) se recogen para [rastreo distribuido](#distributed-tracing-settings). rastreo distribuido debe estar habilitado para reportar span evento. Las opciones de configuración incluyen: + + + + + + + + + + + + + + + + + + + + + + + +
+ Tipo + + Booleano +
+ Por defecto + + `true` +
+ [Establecer en](#options) + + Archivo de configuración +
+ + Esta configuración se puede utilizar para activar o desactivar si el agente Python envía intervalos. +
+ + + + + + + + + + + + + + + + + + + + + + +
+ Tipo + + Booleano +
+ Por defecto + + `true` +
+ [Establecer en](#options) + + Archivo de configuración +
+ + Esta configuración se puede utilizar para activar o desactivar todos [los atributos](/docs/using-new-relic/welcome-new-relic/getting-started/glossary#attribute) del evento span. Si `attributes.enabled` en el nivel raíz es `false`, no se enviará ningún atributo al evento span independientemente de cómo se establezca esta configuración (`span_events.attributes.enabled`). Para obtener más información, consulte las [reglas de atributos del agente](/docs/apm/other-features/attributes/agent-attributes). +
+ + + + + + + + + + + + + + + + + + + + + + +
+ Tipo + + Lista de cadenas +
+ Por defecto + + (ninguno) +
+ [Establecer en](#options) + + Archivo de configuración +
+ + Si los atributos están habilitados para el evento span, todas las claves de atributos que se encuentran en esta lista se enviarán en el evento span. Para obtener más información, consulte las [reglas de atributos del agente](/docs/apm/other-features/attributes/agent-attributes). +
+ + + + + + + + + + + + + + + + + + + + + + +
+ Tipo + + Lista de cadenas +
+ Por defecto + + (ninguno) +
+ [Establecer en](#options) + + Archivo de configuración +
+ + Todas las claves de atributos encontradas en esta lista no se enviarán en el evento span. Para obtener más información, consulte las [reglas de atributos del agente](/docs/apm/other-features/attributes/agent-attributes). +
+
+ +## Configuración de cosecha de eventos [#event-harvest-config] + +La configuración de recolección de eventos limita la cantidad de datos de tipo evento enviados a New Relic. Cuando utilice estas configuraciones, considere estos puntos importantes: + +* La configuración de evento Harvest afecta los límites de una única instancia del agente, y no de toda la aplicación. Consulte el ejemplo de uso a continuación para saber cómo establecer límites en toda una aplicación. + +* [La transmisión en tiempo real](/docs/agents/manage-apm-agents/agent-data/real-time-streaming) envía datos cada cinco segundos (12 veces por minuto), pero la configuración de recolección de eventos aún afecta la tasa de eventos por + + **minute** + + . Habilitar o deshabilitar la transmisión en tiempo real no requiere cambiar esta configuración. + +* Con la transmisión en tiempo real (habilitada de forma predeterminada), New Relic mostrará los límites de recolección de eventos para la entidad en intervalos de cinco segundos. Esto significa, por ejemplo, que cuando estableces un valor límite de 1200 en el archivo de configuración, lo verás como 100 en New Relic. + +### Ejemplo de uso + +Digamos que una aplicación se implementa en 10 hosts, cada uno de los cuales ejecuta cuatro procesos por host. Para limitar el número de eventos de extensión a 10 000 eventos por minuto para toda la aplicación, divida ese número entre 10 hosts. Luego divida nuevamente entre cuatro procesos por host. + +10000 / (10 \* 4) = 250 + +Según ese cálculo, la configuración final es: + +event_harvest_config.harvest_limits.span_event_data = 250 + + + Debido a la forma en que New Relic recopila datos (12 veces por minuto), si el recuento de datos del evento es inferior a 12, aparecerá como 0 en New Relic. + + +Los ajustes de configuración de Event Harvest incluyen: + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ Tipo + + Entero +
+ Por defecto + + `1200` +
+ [Establecer en](#options) + + Archivo de configuración +
+ [Variable ambiental](#environment-variables) + + `NEW_RELIC_ANALYTICS_EVENTS_MAX_SAMPLES_STORED` +
+ + Límite de evento analítico por minuto enviado por una instancia del agente Python a New Relic. +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ Tipo + + Entero +
+ Por defecto + + `3600` +
+ [Establecer en](#options) + + Archivo de configuración +
+ [Variable ambiental](#environment-variables) + + `NEW_RELIC_CUSTOM_INSIGHTS_EVENTS_MAX_SAMPLES_STORED` +
+ + Límite de evento personalizado por minuto enviado por una instancia del agente Python a New Relic. evento personalizado se crean a través del SDK de telemetría de Python. +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ Tipo + + Entero +
+ Por defecto + + `2000` +
+ [Establecer en](#options) + + Archivo de configuración +
+ [Variable ambiental](#environment-variables) + + `NEW_RELIC_SPAN_EVENTS_MAX_SAMPLES_STORED` +
+ + Límite de evento de duración por minuto enviado por una instancia del agente Python a New Relic. +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ Tipo + + Entero +
+ Por defecto + + 100 +
+ [Establecer en](#options) + + Archivo de configuración +
+ [Variable ambiental](#environment-variables) + + `NEW_RELIC_ERROR_COLLECTOR_MAX_EVENT_SAMPLES_STORED` +
+ + Límite de evento de error por minuto enviado por una instancia del agente Python a New Relic. +
+
+ +## Configuración de visibilidad del bucle de eventos [#event-loop] + + + Requiere [la versión 5.0.0.124 o superior del agente Python](/docs/agents/python-agent/installation-configuration/upgrade-python-agent). + + +La visibilidad del bucle de eventos muestra información sobre transacciones que bloquean el bucle de eventos. El agente generará información sobre transacciones que han esperado una cantidad de tiempo significativa para adquirir el control del bucle de eventos. La configuración incluye: + + + + + + + + + + + + + + + + + + + + + + + +
+ Tipo + + Booleano +
+ Por defecto + + `true` +
+ [Establecer en](#options) + + Archivo de configuración +
+ + Establezca esto en `false` para deshabilitar la información del bucle de eventos. +
+ + + + + + + + + + + + + + + + + + + + + + +
+ Tipo + + Flotante +
+ Por defecto + + `0.1` +
+ [Establecer en](#options) + + Archivo de configuración +
+ + Umbral en segundos durante cuánto tiempo una transacción debe bloquear el bucle de eventos antes de generar información del bucle de eventos. +
+
+ +## Configuración métrica del tiempo de ejecución de la recolección de basura [#garbage-collection-runtime-metrics] + + + Requiere [la versión 6.2.0.156 o superior del agente Python](/docs/agents/python-agent/installation-configuration/upgrade-python-agent). + + +Estas configuraciones métricas del tiempo de ejecución de recolección de basura están disponibles a través del archivo de configuración del agente: + + + + + + + + + + + + + + + + + + + + + + + +
+ Tipo + + Booleano +
+ Por defecto + + false +
+ [Establecer en](#options) + + Archivo de configuración +
+ + Cuando esté habilitado, el agente generará y enviará recolección de basura métrica. +
+ + + + + + + + + + + + + + + + + + + + + + +
+ Tipo + + Entero +
+ Por defecto + + 5 +
+ [Establecer en](#options) + + Archivo de configuración +
+ + El agente informa el recuento métrico de objetos para los tipos de objetos más comunes que recopila el recolector de basura. Para cada tipo de objeto, esta configuración le permite establecer el número máximo de métricas individuales que se muestrearán. +
+
+ +## Configuraciones métricas a nivel de código [#codestream-integration] + +Las siguientes configuraciones están disponibles para la configuración de código métrico a nivel en el agente. + + + + + + + + + + + + + + + + + + + + + + + +
+ Tipo + + Booleano +
+ Por defecto + + `true` +
+ [Establecer en](#options) + + Archivo de configuración +
+ + Establezca esto en `false` para deshabilitar la recopilación de atributos del agente para métricas a nivel de código. +
+ + + + Esto solo se puede configurar a través de una variable de entorno. + + + + + + + + + + + + + + + + + + + + + + +
+ Tipo + + Entero +
+ Por defecto + + `None` +
+ [Establecer en](#options) + + Variable ambiental +
+ + El compromiso sha. Se puede utilizar el sha completo o solo los primeros siete caracteres (por ejemplo, 734713b). +
+ + + + Esto solo se puede configurar a través de una variable de entorno. + + + + + + + + + + + + + + + + + + + + + + +
+ Tipo + + Cadena +
+ Por defecto + + `None` +
+ [Establecer en](#options) + + Variable ambiental +
+ + Una etiqueta de lanzamiento (como v0.1.209 o release-209). +
+
+ +## Configuración Errors Inbox [#errors-inbox-configuration] + +Configurar una de las siguientes etiquetas le ayudará a identificar qué versiones de su software están produciendo los errores. + +* `NEW_RELIC_METADATA_SERVICE_VERSION` creará tags.service.version en los datos del evento que contienen la versión de su código que se desplegará, en muchos casos una versión semántica como 1.2.3, pero no siempre. +* `NEW_RELIC_METADATA_RELEASE_TAG `creará tags.releaseTag en los datos del evento que contienen la etiqueta de lanzamiento (como v0.1.209 o release-209). +* `NEW_RELIC_METADATA_COMMIT` creará tags.commit on event data containing the commit sha. Se puede utilizar el sha completo o sólo los primeros siete caracteres (por ejemplo, 734713b). + +Una próxima versión de Errors Inbox rastreará automáticamente qué versiones de su software están produciendo errores. Todos los datos de la versión también se mostrarán en [CodeStream](/docs/codestream/how-use-codestream/performance-monitoring/#buildsha). + +## Configuración de registro de aplicaciones [#application-logging] + +Las siguientes configuraciones están disponibles para la configuración del inicio de sesión de la aplicación en el agente. + +Para obtener algunos consejos sobre cómo configurar el registro para el agente Python, consulte [Configurar el registro de Python en contexto](/docs/logs/logs-context/configure-logs-context-python). + + + Requiere [la versión 7.12.0.176 o superior del agente Python](/docs/agents/python-agent/installation-configuration/upgrade-python-agent). + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ Tipo + + Booleano +
+ Por defecto + + `true` +
+ [Establecer en](#options) + + Archivo de configuración, variable de entorno +
+ [Variable ambiental](#environment-variables) + + `NEW_RELIC_APPLICATION_LOGGING_ENABLED` +
+ + Si es `true`, habilita la decoración log y la recopilación de registro de eventos y registro métrico si estas configuraciones subcaracterísticas también están habilitadas. Si `false`, no se habilita ninguna característica de instrumentación de registro. +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ Tipo + + Booleano +
+ Por defecto + + `true` +
+ [Establecer en](#options) + + Archivo de configuración, variable de entorno +
+ [Variable ambiental](#environment-variables) + + `NEW_RELIC_APPLICATION_LOGGING_FORWARDING_ENABLED` +
+ + Si es `true`, el agente captura log emitidos por su aplicación y los reenvía a New Relic. `application_logging.enabled` también debe ser `true` para que esta configuración surta efecto. + + + Si ya está enviando el registro de su aplicación a New Relic utilizando una solución de reenvío de registros existente, asegúrese de desactivarla antes de habilitar el reenvío de registros en el agente, para evitar que se le facture por datos log duplicados. + +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ Tipo + + Booleano +
+ Por defecto + + `false` +
+ [Establecer en](#options) + + Archivo de configuración, variable de entorno +
+ [Variable ambiental](#environment-variables) + + `NEW_RELIC_APPLICATION_LOGGING_FORWARDING_CONTEXT_DATA_ENABLED` +
+ + Si es `true`, el agente capturará los datos de contexto disponibles (extras, atributo de mensaje de diccionario, atributo proporcionado por el marco de registro) y agregará su contenido como atributo en el registro reenviado a New Relic. Puede controlar este comportamiento a través de la configuración en la sección `application_logging.forwarding.context_data` . +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ Tipo + + Lista de cadenas +
+ Por defecto + + (ninguno) +
+ [Establecer en](#options) + + Archivo de configuración, variable de entorno +
+ [Variable ambiental](#environment-variables) + + `NEW_RELIC_APPLICATION_LOGGING_FORWARDING_CONTEXT_DATA_INCLUDE` +
+ + Si los atributos están habilitados para `context_data`, todas las claves de atributos que se encuentran en esta lista nos serán enviadas en la traza de la transacción. Para obtener más información, consulte las [reglas de atributos del agente](/docs/apm/other-features/attributes/agent-attributes). + + + Al agregar un atributo de contexto, el agente antepone las claves con `context.` para el atributo del contexto del framework de registro y `message.` para el atributo del contexto de mensaje del diccionario. + + Estos prefijos NO se incluyen cuando se comparan con reglas de filtrado de inclusión/exclusión. + +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ Tipo + + Lista de cadenas +
+ Por defecto + + (ninguno) +
+ [Establecer en](#options) + + Archivo de configuración, variable de entorno +
+ [Variable ambiental](#environment-variables) + + `NEW_RELIC_APPLICATION_LOGGING_FORWARDING_CONTEXT_DATA_EXCLUDE` +
+ + Todas las claves de atributos encontradas en esta lista no se enviarán en context_data. Para obtener más información, consulte las [reglas de atributos del agente](/docs/apm/other-features/attributes/agent-attributes). + + + Al agregar un atributo de contexto, el agente antepone las claves con `context.` para el atributo del contexto del framework de registro y `message.` para el atributo del contexto de mensaje del diccionario. + + Estos prefijos NO se incluyen cuando se comparan con reglas de filtrado de inclusión/exclusión. + +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ Tipo + + Entero +
+ Por defecto + + 10000 +
+ [Establecer en](#options) + + Archivo de configuración, variable de entorno +
+ [Variable ambiental](#environment-variables) + + `NEW_RELIC_APPLICATION_LOGGING_FORWARDING_MAX_SAMPLES_STORED` +
+ + Número de log para enviar por minuto a New Relic. Esta configuración controla el consumo general de memoria cuando se utiliza la característica de reenvío de registros. + + Establezca esto en un valor más bajo para reducir la cantidad de líneas log enviadas (puede causar muestreo log ). Establezca esto en un valor más alto para enviar más líneas log . + + Cada log recibe la misma prioridad que su transacción asociada. Los registros que ocurren fuera de una transacción recibirán una prioridad aleatoria. Es posible que algunos registros no se incluyan porque están limitados por `max_samples_stored`. Por ejemplo, si el registro `max_samples_stored` se establece en 10 000 y la transacción 1 tiene 10 000 entradas log , solo se registrarán las entradas log de la transacción 1. Si la transacción 1 tiene menos de 10 000 registros, recibirá todos los registros de la transacción 1. Si todavía hay espacio, recibirás todo el registro de la transacción 2, y así sucesivamente. + + Si después de todo se registran los registros de transacciones muestreadas y no han alcanzado el límite en `max_samples_stored`, entonces se envían mensajes de registro de transacciones que no estaban en nuestro muestreo. Si queda alguno, se registran mensajes de registro fuera de la transacción. +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ Tipo + + Booleano +
+ Por defecto + + `true` +
+ [Establecer en](#options) + + Archivo de configuración, variable de entorno +
+ [Variable ambiental](#environment-variables) + + `NEW_RELIC_APPLICATION_LOGGING_METRICS_ENABLED` +
+ + Si es `true`, el agente captura métricas relacionadas con las líneas log que envía su aplicación. `application_logging.enabled` también debe ser `true` para que esta configuración surta efecto. +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ Tipo + + Booleano +
+ Por defecto + + `false` +
+ [Establecer en](#options) + + Archivo de configuración, variable de entorno +
+ [Variable ambiental](#environment-variables) + + `NEW_RELIC_APPLICATION_LOGGING_LOCAL_DECORATING_ENABLED` +
+ + Si es `true`, el agente decora el registro con metadatos para vincularlo a entidad, hosts, traza y spans. `application_logging.enabled` también debe ser `true` para que esta configuración surta efecto. +
+
+ +## Configuración de instrumentación [#instrumentation-settings] + + + Requiere [la versión 8.7.1 o superior del agente Python](/docs/agents/python-agent/installation-configuration/upgrade-python-agent). + + +Estas configuraciones específicas del paquete de instrumentación están disponibles a través del archivo de configuración del agente: + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ Tipo + + Booleano +
+ Por defecto + + false +
+ [Establecer en](#options) + + Archivo de configuración +
+ [Variable ambiental](#environment-variables) + + `NEW_RELIC_INSTRUMENTATION_GRAPHQL_CAPTURE_INTROSPECTION_QUERIES` +
+ + Cuando esté habilitado, el agente capturará transacciones para consulta de introspección en GraphQL. +
+
+ +## Configuración de aprendizaje automático [#ml-settings] + + + Requiere [la versión 9.1.0 o superior del agente Python](/docs/agents/python-agent/installation-configuration/upgrade-python-agent). + + +Las siguientes configuraciones están disponibles para la configuración de datos de aprendizaje automático en el agente. + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ Tipo + + Booleano +
+ Por defecto + + `false` +
+ [Establecer en](#options) + + Archivo de configuración, variable de entorno +
+ [Variable ambiental](#environment-variables) + + `NEW_RELIC_MACHINE_LEARNING_ENABLED` +
+ + Configúrelo en `true` para habilitar la recopilación de atributos del agente para el aprendizaje automático métrico. +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ Tipo + + Booleano +
+ Por defecto + + `false` +
+ [Establecer en](#options) + + Archivo de configuración, variable de entorno +
+ [Variable ambiental](#environment-variables) + + `NEW_RELIC_MACHINE_LEARNING_INFERENCE_EVENT_VALUE_ENABLED` +
+ + Establezca en `true` para habilitar la captura del valor de inferencia sin procesar. +
+ + + + + + + + + + + + + + + + + + + + + + +
+ Tipo + + Booleano +
+ Por defecto + + `false` +
+ [Establecer en](#options) + + Archivo de configuración +
+ + Permitir la grabación de eventos de aprendizaje automático en la API de eventos a través de [`record_ml_event()`](/docs/agents/python-agent/python-agent-api/recordmlevent-python-agent-api/). +
+
+ +## Otros ajustes de configuración [#other-settings] + +Aquí hay una variedad de otras configuraciones disponibles a través del archivo de configuración del agente. + + + + + + + + + + + + + + + + + +
+ Tipo + + Booleano +
+ Por defecto + + `true` +
+ + Si es `true`, el agente detecta automáticamente que se está ejecutando en un entorno de AWS. +
+ + + + + + + + + + + + + + + + +
+ Tipo + + Booleano +
+ Por defecto + + `true` +
+ + Si es `true`, el agente detecta automáticamente que se está ejecutando en un entorno de Azure. +
+ + + + + + + + + + + + + + + + +
+ Tipo + + Booleano +
+ Por defecto + + `true` +
+ + Si es `true`, el agente detecta automáticamente que se está ejecutando en un entorno de Google Cloud Platform. +
+ + + + + + + + + + + + + + + + +
+ Tipo + + Booleano +
+ Por defecto + + `true` +
+ + Si es `true`, el agente detecta automáticamente que se está ejecutando en un entorno de Pivotal Cloud Foundry. +
+ + + + + + + + + + + + + + + + +
+ Tipo + + Booleano +
+ Por defecto + + `true` +
+ + Si es `true`, el agente detecta automáticamente que se está ejecutando en Docker. +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ Tipo + + Booleano +
+ Por defecto + + `true` +
+ [Establecer en](#options) + + Configuración del lado del servidor, archivo de configuración +
+ [Etiqueta del lado del servidor](#server-side-configuration) + + `Enable Slow SQL?` +
+ + Si está habilitado, el agente captura detalles de la consulta de base de datos SQL de larga duración. +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ Tipo + + Booleano +
+ Por defecto + + `true` +
+ [Establecer en](#options) + + Configuración del lado del servidor, archivo de configuración +
+ [Etiqueta del lado del servidor](#server-side-configuration) + + `Enable thread profiler?` +
+ + Le permite programar [sesiones de creación de perfiles de subprocesos](/docs/apm/applications-menu/events/thread-profiler-dashboard). El generador de perfiles de subprocesos capturará periódicamente una instantánea de la stack de llamadas para cada subproceso activo en la aplicación para construir un árbol de llamadas estadísticamente representativo. +
+ + + + + + + + + + + + + + + + + + + + + + +
+ Tipo + + Booleano +
+ Por defecto + + `false` +
+ [Establecer en](#options) + + Archivo de configuración +
+ + Permite [el seguimiento de múltiples aplicaciones](/docs/apm/transactions/cross-application-traces/introduction-cross-application-traces), que conectan sus aplicaciones y servicios dentro de su arquitectura orientada a servicios. +
+ + + + + + + + + + + + + + + + + + + + + + +
+ Tipo + + Booleano +
+ Por defecto + + `false` +
+ [Establecer en](#options) + + Archivo de configuración +
+ + Si está habilitado, los mensajes de excepción se eliminarán de la traza de error antes de enviarlos al [recolector](/docs/accounts-partnerships/education/getting-started-new-relic/glossary#collector), para evitar la captura inadvertida de información confidencial. Esta opción se habilita automáticamente en el modo de alta seguridad. +
+ + + + + + + + + + + + + + + + + + + + + + +
+ Tipo + + Cadena +
+ Por defecto + + (ninguno) +
+ [Establecer en](#options) + + Archivo de configuración +
+ + A las excepciones enumeradas en su lista de 'permitidos' no se les eliminarán los mensajes, incluso si `strip_exception_messages.enabled` es `true`. La lista de 'permitidos' es una cadena de tipos de excepción separados por espacios, cada uno en forma de `module:exception_name`. Enumere las excepciones integradas como `exception_name`; no es necesario anteponerles `module:` . + + + **Example: Built-in exception and user-defined exception** + + + ```py + KeyError my_module:MyException + ``` +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ Tipo + + Flotante +
+ Por defecto + + `0.0` +
+ [Establecer en](#options) + + Archivo de configuración, variable de entorno +
+ [Variable ambiental](#environment-variables) + + `NEW_RELIC_STARTUP_TIMEOUT` +
+ + De forma predeterminada, el agente se inicia cuando recibe la primera transacción (ya sea web o [no web](/docs/apm/transactions/intro-transactions/monitor-background-processes-other-non-web-transactions)). Luego, el agente comienza en paralelo, asegurándose de que esta solicitud inicial no se retrase. Sin embargo, el agente no registra los detalles de esta solicitud inicial porque no puede recopilar datos hasta que se complete el registro. Esta es la configuración recomendada para la mayoría de las aplicaciones web para no retrasar las primeras dos transacciones mientras se inicia New Relic. + + Para anular esto, puede establecer un tiempo de espera de inicio en segundos. Luego, el agente pausará la transacción inicial y esperará a que se complete el registro. Esto puede resultar útil cuando se instrumenta una única ejecución de programa o tarea, donde el proceso se ejecuta una vez y finaliza inmediatamente. + + + Dado que `startup_timeout` retrasa el inicio de su aplicación, recomendamos establecer un tiempo de espera de inicio únicamente para los sistemas de cola de tareas en segundo plano, no para las aplicaciones web. + +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ Tipo + + Flotante +
+ Por defecto + + `2.5` +
+ [Establecer en](#options) + + Archivo de configuración, variable de entorno +
+ [Variable ambiental](#environment-variables) + + `NEW_RELIC_SHUTDOWN_TIMEOUT` +
+ + Al cerrar el proceso, el agente intenta una carga final al [recolector](/docs/accounts-partnerships/education/getting-started-new-relic/glossary#collector). Para evitar que el agente se ejecute indefinidamente en caso de un problema, el proceso se cierra normalmente si se alcanza el umbral `shutdown_timeout` . Este apagado puede provocar la pérdida de datos, pero el agente prioriza los datos métricos clave durante el proceso de carga. + + Para los sistemas de cola de tareas en segundo plano, especialmente aquellos que ejecutan una pequeña cantidad de tareas por proceso, es posible que desee aumentar el tiempo de espera de apagado para garantizar que el agente pueda cargar todos los datos al cerrar el proceso. + + + El agente tiene por defecto un tiempo de espera de 2,5 segundos porque Apache y muchos otros servidores web tienen un tiempo de espera de finalización de proceso de 3,0 segundos. El agente sale a los 2,5 segundos para permitir que se ejecute `atexit` código de limpieza registrado para que se ejecute el proceso. + +
+ + + + + + + + + + + + + + + + + + + + + + +
+ Tipo + + Cadena +
+ Por defecto + + `gzip` +
+ [Establecer en](#options) + + Archivo de configuración +
+ + Si se alcanza el umbral de compresión de datos en la carga útil, el agente comprime los datos utilizando la compresión gzip de forma predeterminada. La opción de configuración `compression_content_encoding` se puede establecer en `deflate` para usar compresión desinflada. +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ Tipo + + Booleano +
+ Por defecto + + verdadero +
+ [Establecer en](#options) + + Archivo de configuración, variable de entorno +
+ [Variable ambiental](#environment-variables) + + `NEW_RELIC_PACKAGE_REPORTING_ENABLED` +
+ + Si esta configuración está habilitada, capturará información del paquete y la versión al iniciar el agente que se muestra en la pestaña del entorno APM. En aplicaciones que tienen una gran cantidad de paquetes, tener esta configuración habilitada puede causar un aumento de CPU, ya que captura toda la información del paquete y la versión. Se recomienda en esos casos desactivar esta configuración. Deshabilitar esta configuración deshabilitará la capacidad de detectar vulnerabilidades en paquetes obsoletos. +
+
+ +## Heroku + + + + + + + + + + + + + + + + + + + + + + + +
+ Tipo + + Booleano +
+ Por defecto + + `true` +
+ Variable ambiental + + `NEW_RELIC_HEROKU_USE_DYNO_NAMES` +
+ + Si es `true`, el agente utiliza nombres de dinamómetro Heroku como nombre de host. +
+ + + + + + + + + + + + + + + + + + + + + + +
+ Tipo + + Matriz +
+ Por defecto + + `["scheduler", "run"]` +
+ Variable ambiental + + `NEW_RELIC_HEROKU_DYNO_NAME_PREFIXES_TO_SHORTEN` +
+ + Normalmente, el agente informa los nombres de los dinamómetros con un punto final y un ID de proceso (por ejemplo, **worker.3**). Puede eliminar estos datos finales especificando los prefijos que desea informar sin datos finales (por ejemplo, **worker**). +
+
+ +## Instrumentación incorporada [#builtin-instrumentation] + +El agente de Python instrumentó una variedad de paquetes/módulos de Python. Esta instrumentación solo ocurre cuando una aplicación importa el paquete/módulo Python objetivo. + +Para deshabilitar la instrumentación predeterminada, proporcione una sección especial `import-hook` correspondiente al nombre del módulo que activó la instrumentación. Luego establezca la configuración `enabled` en `false` para deshabilitar la instrumentación de ese módulo. + + + + Agregue lo siguiente al archivo de configuración: + + ```ini + [import-hook:MySQLdb] + enabled = false + ``` + + \ No newline at end of file diff --git a/src/i18n/content/es/docs/apm/agents/python-agent/python-agent-api/backgroundtask-python-agent-api.mdx b/src/i18n/content/es/docs/apm/agents/python-agent/python-agent-api/backgroundtask-python-agent-api.mdx new file mode 100644 index 00000000000..90fb722ebe7 --- /dev/null +++ b/src/i18n/content/es/docs/apm/agents/python-agent/python-agent-api/backgroundtask-python-agent-api.mdx @@ -0,0 +1,251 @@ +--- +title: background_task (API del agente Python) +type: apiDoc +shortDescription: Se utiliza para instrumentar una tarea en segundo plano u otra transacción no web de tiempo de ejecución finito. +tags: + - Agents + - Python agent + - Python agent API +metaDescription: 'Python API: Used to instrument a background task or other non-web transaction of finite run time.' +freshnessValidatedDate: never +translationType: machine +--- + +## Sintaxis + +```py +newrelic.agent.background_task(application=None, name=None, group=None) +``` + +Se utiliza para instrumentar una tarea en segundo plano u otra transacción no web de tiempo de ejecución finito. + +## Descripción + +Este decorador de Python se puede utilizar para instrumentar tareas en segundo plano u otras [transacciones sin red](/docs/apm/transactions/intro-transactions/monitor-background-processes-other-non-web-transactions) de tiempo de ejecución finito. Por lo general, esto se utiliza para instrumentar actividades no web, como procesos de trabajo, sistemas basados en trabajos y secuencias de comandos independientes. Las tareas marcadas como en segundo plano se muestran como transacción no web en la UI de APM y separadas de transacción web. + + + Si una función aún no está instrumentada, puede usar [`function_trace()`](/docs/apm/agents/python-agent/python-agent-api/functiontrace-python-agent-api) para crear una traza de función para esa función dentro de una tarea en segundo plano. O puede utilizar el [archivo de configuración](/docs/apm/agents/python-agent/custom-instrumentation/python-custom-instrumentation-config-file/#listing_functions) para instrumentar funciones no instrumentadas. + + +Si se llama a una función que utiliza el decorador de tareas en segundo plano dentro del contexto de una transacción web, entonces la transacción web se marca como una tarea en segundo plano. La medición del tiempo empleado comienza cuando se inicia la transacción web original. + +Si no puede utilizar el decorador, uno de estos formatos de llamada puede resultar más útil: + +* **The context manager** + + : Si las tareas a monitorear solo se determinarán en tiempo de ejecución (y no en el momento de importación), puede usar el administrador de contexto `BackgroundTask` para encapsular directamente la ejecución de un bloque de código. (Este es el administrador de contexto utilizado por `BackgroundTaskWrapper`). + +* **The wrapper** + + : Si sabe de antemano dónde están las funciones específicas que desea rastrear, puede utilizar el decorador `background_task` . Pero si no conoce todas las funciones que deben trazarse (por ejemplo, si se buscan dinámicamente como parte de un sistema de enrutamiento), entonces debe usar `BackgroundTaskWrapper` para ajustar la función en ese momento. de inscripción o en el momento de la convocatoria. + +* **The path-based wrapper** + + : El formulario contenedor basado en ruta es `wrap_background_task`. + +Para obtener más información sobre las diferencias y los usos de estas formas de funciones, consulte [Formatos de llamada de variables](/docs/python-agent-api-different-call-forms). + +## Parámetros + +### Parámetro decorador y administrador de contexto [#main-params] + +```py +newrelic.agent.background_task(application=None, name=None, group=None) +``` + +```py +newrelic.agent.BackgroundTask(application=None, name=None, group=None) +``` + +Parámetro para estas llamadas: + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ Parámetro + + Descripción +
+ `application` + + _Instancia de aplicación_ + + Requerido. La aplicación bajo la cual se reportarán los datos. El valor predeterminado es `None`. Si se deja sin valor, se utilizará la aplicación especificada en la [configuración](/docs/agents/python-agent/installation-configuration/python-agent-configuration) del agente (archivo de configuración o variable de entorno). + + Para obtener más información sobre cómo generar un objeto de aplicación, consulte el método [`application()`](/docs/agents/python-agent/python-agent-api/application) . + + La aplicación, incluso si se especifica, aún se puede anular si `newrelic.app_name` está definido en el diccionario de entorno de solicitud por aplicación WSGI. +
+ `name` + + _cadena_ + + Requerido. El nombre de la transacción. El valor predeterminado es `None`. De forma predeterminada, el nombre será el nombre de la función a la que se aplicó el decorador, pero puede anularlo proporcionando este nombre. +
+ `group` + + _cadena_ + + Opcional. El `group` representa la estructura de nombres para el parámetro `name` . Esto se utiliza en la UI para establecer el [tipo de transacción](/docs/apm/applications-menu/monitoring/transactions-page#tx_functions). + + Si no se proporciona, el grupo tiene como valor predeterminado `Function` con la expectativa de que el nombre tenga el formato `module:class.function` o `module:function` y represente el nombre de la función que se está ejecutando. Si está creando un grupo personalizado, le recomendamos que le ponga el prefijo `Python/`. +
+ +### Parámetro de envoltura: [#wrapper-params] + +```py +newrelic.agent.BackgroundTaskWrapper(wrapped, application=None, name=None, group=None) +``` + +`BackgroundTaskWrapper` toma los mismos [parámetros](#main-params) que el decorador `background_task` y este parámetro `wrapped` adicional: + + + + + + + + + + + + + + + + + +
+ Parámetro + + Descripción +
+ `wrapped` + + _método_ + + Requerido. El método para ser trazada. +
+ +### Parámetro basado en ruta: [#path-based-params] + +```py +newrelic.agent.wrap_background_task(module, object_path, application=None, name=None, group=None) +``` + +`wrap_background_task` toma el mismo [parámetro](#main-params) que el decorador `background_task` más estos parámetros adicionales: + + + + + + + + + + + + + + + + + + + + + + + +
+ Parámetro + + Descripción +
+ `module` + + _módulo_ o _cadena_ + + Requerido. El módulo que contiene la función/actividad no web que está instrumentado. +
+ `object_path` + + _cadena_ + + Requerido. La ruta al módulo. +
+ +## Ejemplos + +### `background_task` ejemplo de decorador [#bg_task_example] + +A continuación se muestra un ejemplo del uso del decorador `background_task` : + +```py +@newrelic.agent.background_task() +def task(): + ... +``` + +### `BackgroundTask` ejemplo de administrador de contexto [#context-mgr-example] + +Un ejemplo de uso de `BackgroundTask`: + +```py +application = newrelic.agent.application() +name = newrelic.agent.callable_name(task) + +with BackgroundTask(application, name): + task() +``` + +Aquí hay otro ejemplo con más parámetros: + +```py +application = newrelic.agent.register_application(timeout=10.0) + +def execute_task(task_name): + with newrelic.agent.BackgroundTask(application, name=task_name, group='Task'): + ... +``` + +### `BackgroundTaskWrapper` ejemplo [#wrapper-example] + +Un ejemplo de uso de `BackgroundTaskWrapper`: + +```py +task = newrelic.agent.BackgroundTaskWrapper(get_next_task()) +result = task(*args, **kwargs) +``` + +En este ejemplo, si esta llamada se realizó en una transacción web que está siendo monitoreada por un agente, la llamada reclasificará la transacción web como una tarea en segundo plano. Sin embargo, si la llamada se realizó en un subproceso o rutina en segundo plano, entonces se iniciaría la grabación de una nueva transacción de tarea en segundo plano que rastrea lo que ocurre hasta que regresa la llamada. + +## Resolución de problemas + +Si la transacción de la tarea en segundo plano no aparece en la UI, esto podría deberse a que la transacción creada por la tarea en segundo plano nunca se cerró o la tarea duró demasiado. Si una tarea en segundo plano se ejecuta durante más de 20 minutos, el servidor la descarta porque se considera demasiado antigua para conservarla. Las tareas en segundo plano no deben ejecutarse durante más de 20 minutos y, si lo hacen, deben dividirse en varias tareas en segundo plano. \ No newline at end of file diff --git a/src/i18n/content/es/docs/apm/new-relic-apm/apdex/apdex-measure-user-satisfaction.mdx b/src/i18n/content/es/docs/apm/new-relic-apm/apdex/apdex-measure-user-satisfaction.mdx new file mode 100644 index 00000000000..fc983cc81bf --- /dev/null +++ b/src/i18n/content/es/docs/apm/new-relic-apm/apdex/apdex-measure-user-satisfaction.mdx @@ -0,0 +1,315 @@ +--- +title: 'Apdex: Medir la satisfacción del usuario' +tags: + - APM + - Apdex +metaDescription: 'New Relic uses Apdex to measure whether users are satisfied, tolerating, or dissatisfied with your app''s response time.' +freshnessValidatedDate: never +translationType: machine +--- + +[Apdex](https://www.apdex.org/) es un estándar de la industria para medir la satisfacción del usuario con el tiempo de respuesta de aplicaciones y servicios web. Es una solución de Acuerdo de Nivel de Servicio (SLA) simplificada que le ayuda a ver qué tan satisfechos están los usuarios con su aplicación a través de métricas como la puntuación Apdex y el porcentaje de insatisfacción en lugar de métricas tradicionales fácilmente sesgadas como el tiempo de respuesta promedio. + +Establecer un umbral útil para sus niveles de Apdex le ayudará a: + +* Vea de un vistazo la satisfacción general de su usuario final con su aplicación. +* Obtenga la cantidad adecuada de traza para solucionar problemas y mejorar el rendimiento de la aplicación. + +¿Listo para comenzar? Regístrese para obtener una cuenta si aún no lo ha hecho, luego haga clic en un logotipo para instalar un agente APM y comenzar a medir la satisfacción del usuario. ¡Solo toma unos minutos! + + + + + + + + + + + + + + + + + + + +Para obtener más información, mire este breve vídeo de YouTube (aprox. 3:50 minutos). + +
@@ -74,9 +74,9 @@ New Relicのメール設定に関する一般的な情報については、[メ > 初めてサインアップする場合は、当社では確認メールを送信するため、セットアッププロセスやサインインを完了できます。オリジナルのアカウント確認メールが見つからない場合は、以下の手順に従います。 - 1. **[login.newrelic.com/login](https://login.newrelic.com/login)**にあるNew Relicのログインページに移動してください。 + 1. New Relic のログイン ページ ( **[login.newrelic.com/login](https://login.newrelic.com/login)** ) に移動します。 - 2. **Forgot your password**を選択し、これらの手順を完了します。 + 2. **Forgot your password**を選択し、これらの手順を完了します。 メールが届かない場合は、[スパムフィルター](/docs/accounts-partnerships/accounts/account-setup/create-your-new-relic-account#email-whitelist)を確認してください。該当する場合は、[メールの許可リストにNew Relicを追加します](/docs/accounts/accounts/account-maintenance/account-email-settings#email-whitelist)。さらに支援が必要な場合は、[support.newrelic.com](https://support.newrelic.com)でサポートを受けてください。 @@ -120,7 +120,7 @@ New Relicのメール設定に関する一般的な情報については、[メ * キャッシュ問題が発生しています。ブラウザのキャッシュをクリアするか、プライベートブラウジングウィンドウを使ってから同じリンクで再度実行してください。 - **プライベートブラウジング**(別名**シークレットモード**)はプライバシー機能で、閲覧履歴やWebキャッシュを無効にします。プライベートブラウジングウィンドウを開くには、ほとんどのブラウジングアプリケーションに対して、Windowsではキーボードショートカット`CTRL+Shift+N`、Macでは`Command+Shift+N`を使用できます。 + **Private browsing**は、 **incognito mode**とも呼ばれ、閲覧履歴と Web キャッシュを無効にするプライバシー機能です。 プライベート ブラウジング ウィンドウを開くには、ほとんどのブラウジング アプリケーションで Windows ではキーボード ショートカット`CTRL+Shift+N` 、Mac では`Command+Shift+N`を使用できます。 これでも問題が解決されない場合は、[support.newrelic.com](https://support.newrelic.com) でサポートを受けてください。 @@ -155,7 +155,7 @@ New Relicのメール設定に関する一般的な情報については、[メ id="two-week-option" title="SAMLシングルサインオン(SSO)の問題によりログインできません" > - 組織でSAMLシングルサインオン(SSO)ソリューションを使用している場合は、ログインするときに**Password**フィールドをスキップできます。パスワードをリセットする必要がある場合は、組織のシステムアドミニストレーターか、必要に応じてIT部門に連絡してください。 + 組織で SAML シングル サインオン (SSO) ソリューションを使用している場合は、ログイン時に**Password**フィールドをスキップできます。 パスワードをリセットする必要がある場合は、組織のシステム アドミニストレーターまたは IT 部門に連絡してください。 SAML SSO設定を最近有効にした、または変更しており、ログインできないアドミニストレーターの場合、設定で問題が生じる場合があります。当社の[新しいユーザーモデル](/docs/accounts/original-accounts-billing/original-product-based-pricing/overview-user-models)のお客様は、特別のリカバリフローを使用して問題を解決できます。SSOを迂回し、組織に1回限りアクセスするには、[login.newrelic.com/recovery_access](http://login.newrelic.com/recovery_access)をご覧ください。 diff --git a/src/i18n/content/jp/docs/alerts-applied-intelligence/applied-intelligence/incident-workflows/incident-workflows.mdx b/src/i18n/content/jp/docs/alerts-applied-intelligence/applied-intelligence/incident-workflows/incident-workflows.mdx index 727c8aba2e8..75a42b1087b 100644 --- a/src/i18n/content/jp/docs/alerts-applied-intelligence/applied-intelligence/incident-workflows/incident-workflows.mdx +++ b/src/i18n/content/jp/docs/alerts-applied-intelligence/applied-intelligence/incident-workflows/incident-workflows.mdx @@ -22,7 +22,7 @@ translationType: machine ## ワークフローはどのようにトリガーされますか? [#workflows-triggered] -ワークフローは、ワークフロー フィルターと一致する通知トリガーに一致する課題の課題イベントによってトリガーされます。ワークフローはデフォルトで推奨されるトリガーで構成されていますが、3 つのドットをクリックして **\[次の場合に通知]**を選択することで、各宛先の通知をいつトリガーするかを制御できます。 **Activated** 通知トリガーも有効にする必要があります。 +ワークフローは、ワークフロー フィルターと一致する通知トリガーに一致する課題の課題イベントによってトリガーされます。 ワークフローはデフォルトで推奨トリガーを使用して構成されていますが、3 つの点をクリックして**Notify when**を選択すると、宛先ごとに通知をトリガーするタイミングを制御できます。 **Activated**通知トリガーも有効にする必要があります。 次のイベントは、ワークフローをトリガーし、関連する宛先エンドポイントに通知を送信します。 @@ -152,9 +152,9 @@ translationType: machine ## ワークフローの追加 [#add-workflow] -ワークフロー機能は、 **Alerts & AI** メニューの下にあります。 +ワークフロー機能は、 **Alerts & AI**メニューの下にあります。 -1. **[one.newrelic.com > All capabilities](https://one.newrelic.com/all-capabilities) > Alerts & AI > Enrich and Notify > Workflow > Add a workflow**に移動します。 +1. **[one.newrelic.com > All capabilities](https://one.newrelic.com/all-capabilities) > Alerts & AI > Enrich and Notify > Workflow > Add a workflow**に移動します。 2. ワークフローの名称を入力してください。このフィールドは必須で、ユニークである必要があります。 @@ -167,7 +167,7 @@ translationType: machine 4. 属性、演算子、および値を選択してクエリを作成し、伝えたい問題を絞り込みます。 - ワークフロー フィルターは、過去の問題からのデータと、条件メタデータからのいくつかの静的な値 (条件名など) を自動的に入力します。探している値が見つからない場合は、値を入力して**Enter new**を選択します。フィルタが過去の問題と一致しないという警告が発生することがあります。 + ワークフロー フィルターには、過去の問題のデータと、条件メタデータ (条件名など) の静的な値が自動的に入力されます。 探している値が見つからない場合は、値を入力して**Enter new**を選択します。 フィルターが過去の問題と一致しないという警告が表示される場合があります。 5. 推奨: チーム タグで問題をフィルター処理して、エンティティが問題に含まれている場合にすべてのチームに通知できるようにします。手順は、以下のデモにあります。 @@ -187,7 +187,7 @@ translationType: machine id="enrichments" title="データを充実させる方法" > - 現在、JSON または数値出力は Webhook、Jira、ServiceNow [の宛先](/docs/alerts-applied-intelligence/notifications/destinations/)にのみ送信でき、画像は Slack、Pagerduty、電子メールなどの他の宛先にのみ送信できます。Webhook、Jira、ServiceNow でより良い結果を得るには、 `count`、 `min`、または `max`などの単一値出力を持つクエリを使用します。 + 現在、JSON または数値出力は Webhook および Jira[の宛先](/docs/alerts-applied-intelligence/notifications/destinations/)にのみ送信できます。 また、画像は Slack、 PagerDuty 、ServiceNow (アプリ)、電子メールなどの他の宛先にのみ送信できます。 Webhook と Jira でより良い結果を得るには、 `count` 、 `min` 、または`max`などの単一値出力を持つクエリを使用します。 エンリッチメントの使用に関する詳細: @@ -226,19 +226,30 @@ translationType: machine title="ノーティファイア" > * ワークフローを保存して有効にするには、ノーティファイアを含める必要があります。 + * 通知機能を設定するには、通知先を設定する必要があります。 - * **デスティネーション** メニュー項目から設定するか、各デスティネーションチャンネル画面のデスティネーション選択ドロップダウンにある **Create new destination item** から設定することができます。 + + * **Destination** + + メニュー項目を使用するか、各宛先チャンネル画面の宛先選択ドロップダウンの + + **Create new destination item** + + を使用して設定できます。 + * 通知先には、サードパーティのプラットフォームに通知を送信するために必要な認証情報と、当社の課題のフィールドを送信先のプラットフォームのフィールドにマッピングすることで、送信されるメッセージをカスタマイズするオプションが含まれます。 + * 送信先の設定やメッセージテンプレートの設定方法については、 [「通知」に関するドキュメント](/docs/alerts-applied-intelligence/notifications/destinations/) をご参照ください。 + * (オプション) 通知者ごとに取得する通知をマークできます。それ以外の場合、通知はデフォルトで各ノーティファイアに送信されます。 -8. 通知機能の要件を完了したら、 **\[メッセージを更新]** をクリックします。 +8. 通知者の要件を満たしたら、 **update message**をクリックします。 9. オプション: ワークフローをテストします。アカウントの既存のデータを使用して、新しい構成でサンプル通知を送信します。テストは、フィルターに一致する既存の問題がある場合にのみ機能します。データがない場合は、次のメッセージが表示されます: `We don't see any issues matching your filter. That doesn't mean it won't work` 。 -10. **Update workflow** \[ワークフローの更新]をクリックしてワークフローを完了します。 +10. **Update workflow**をクリックしてワークフローを完了します。 デフォルトでは、アカウントごとに最大 1000 のワークフローを作成できます。アカウント担当者に連絡して、上限の引き上げをリクエストできます。 @@ -250,31 +261,47 @@ translationType: machine 問題通知ログは、ワークフローによって生成されたすべての通知を追跡するための詳細な記録をユーザーに提供します。この情報により、問題のトラブルシューティングが行われ、ワークフローのパフォーマンスが監視され、通知が正しい宛先に送信されていることを確認できます。その結果、ユーザーは発生する可能性のある問題を迅速に特定し、必要に応じて修正措置を講じることができます。 -問題通知ログにアクセスするには、 **[one.newrelic.com > Alerts & AI > Workflows](https://one.newrelic.com/alerts-ai/workflows)**に移動し、 **Issue notification log**をクリックします。 +問題通知ログにアクセスするには、 **[one.newrelic.com > Alerts & AI > Workflows](https://one.newrelic.com/alerts-ai/workflows)**に移動し、 **Issue notification log**をクリックします。 ### 問題通知ログの移動 [#navigate-notification-log] 問題通知ログには、次の列が表示されます。 -1. **時刻:** この列には、ワークフロー通知が送信された時刻が表示されます。 +1. **Time:** -2. **ステータス:** この列には、通知のステータスが表示されます。 + この列には、ワークフロー通知が送信された時間が表示されます。 + +2. **Status:** + + この列には、通知のステータスが表示されます。 * 送信済み: New Relic から通知が正常に送信されました。 * 失敗: 通知は New Relic から正常に送信されませんでした。 * Deferred: 通知は New Relic から正常に送信されましたが、ベンダーによって削除されました。 -3. **送信先:** この列には、ワークフロー通知を受信する送信先の種類 (Slack や電子メールなど) が表示されます。 +3. **Destination:** + + この列には、ワークフロー通知を受信する宛先の種類 (Slack や電子メールなど) が表示されます。 + +4. **Issue Name:** + + この列には、ワークフロー通知をトリガーした問題の名前が表示されます。 + +5. **Trigger Event:** + + この列には、ワークフロー通知をトリガーした発行イベントが表示されます。 イベントをクリックすると、ワークフローがどのようにトリガーされるかに関する詳細情報が表示されます。 + +6. **Workflow:** -4. **問題名:** この列には、ワークフロー通知をトリガーした問題の名前が表示されます。 + この列には、通知をトリガーしたワークフローが表示されます。 -5. **トリガー イベント:** この列には、ワークフロー通知をトリガーした課題イベントが表示されます。イベントをクリックすると、ワークフローがどのようにトリガーされるかについての詳細が表示されます。 +7. **Error Details:** -6. **ワークフロー:** この列には、通知をトリガーしたワークフローが表示されます。 + 通知が失敗した場合、この列には追加の詳細が表示されます。 -7. **エラーの詳細:** この列には、通知が失敗した場合の追加の詳細が表示されます。 +8. **Notification Result:** -8. **通知結果:** 通知が正常に送信された場合、この列にはサード パーティ (Slack スレッドや JIRA チケットなど) の証拠へのリンクが表示されます。 + この列には、通知が正常に送信された場合、サードパーティの証拠 (Slack スレッドや JIRA チケットなど) へのリンクが表示されます。 ## NrAiNotification [#NrAiNotification] diff --git a/src/i18n/content/jp/docs/alerts-applied-intelligence/overview.mdx b/src/i18n/content/jp/docs/alerts-applied-intelligence/overview.mdx index 429ab1685f4..ff9a8716c0f 100644 --- a/src/i18n/content/jp/docs/alerts-applied-intelligence/overview.mdx +++ b/src/i18n/content/jp/docs/alerts-applied-intelligence/overview.mdx @@ -11,7 +11,7 @@ import alertsOverviewPage from 'images/alerts_screenshot-full_alerts-and-ai-over import accountsAlertingConcepts from 'images/accounts_diagram_alerting-concepts.webp' -ニューレリックは、テレメトリ データのあらゆるエンティティまたはストリームの問題に関する情報を取得できる柔軟なシステムです。 監視するデータ、超過した場合に問題を意味するしきい値、誰にどのように通知するかを定義します。 応用インテリジェンスは、異常な動作を特定し、関連する問題を関連付け、根本原因の分析を支援することで、潜在的な問題についてチームに通知するエンジンです。 +New Relic は、テレメトリーデータのエンティティまたはストリームの問題に関する情報を取得できる柔軟なシステムです。 監視するデータ、超過した場合に問題を意味する閾値、誰にどのように通知するかを定義します。 アプライドインテリジェンスは、異常な動作を特定し、関連する問題を関連付け、根本原因の分析を支援することで、潜在的な問題についてチームに通知するエンジンです。 New Relic のアラートと応用インテリジェンスは、何が重要かを把握し、抑制されたノイズを管理し、アラート疲労を軽減するのに役立ちます。 @@ -37,7 +37,7 @@ New Relic の応用インテリジェンスにより、次のことが可能に />
- メインの \[アラートと AI] ページを開くには、 **[one.newrelic.com](https://one.newrelic.com/all-capabilities) > Alerts & AI**に移動します。 + メインの \[アラートと AI] ページを開くには、 **[one.newrelic.com](https://one.newrelic.com/all-capabilities) > Alerts & AI**に移動します。
アラート条件を設定して通知を受信するには、いくつかの手順を実行する必要があります。開始するために必要なすべての手順については[、チュートリアル シリーズ](/docs/tutorial-create-alerts/create-new-relic-alerts/)をご覧ください。 @@ -77,7 +77,9 @@ New Relic の応用インテリジェンスにより、次のことが可能に - **[条件](/docs/alerts-applied-intelligence/new-relic-alerts/alert-conditions/create-alert-conditions/)** + + **[Condition](/docs/alerts-applied-intelligence/new-relic-alerts/alert-conditions/create-alert-conditions/)** + @@ -87,7 +89,9 @@ New Relic の応用インテリジェンスにより、次のことが可能に - **[決定](/docs/alerts-applied-intelligence/applied-intelligence/incident-intelligence/change-applied-intelligence-correlation-logic-decisions/)** + + **[Decision](/docs/alerts-applied-intelligence/applied-intelligence/incident-intelligence/change-applied-intelligence-correlation-logic-decisions/)** + @@ -97,7 +101,9 @@ New Relic の応用インテリジェンスにより、次のことが可能に - **[行き先](/docs/alerts-applied-intelligence/notifications/destinations/)** + + **[Destination](/docs/alerts-applied-intelligence/notifications/destinations/)** + @@ -107,7 +113,9 @@ New Relic の応用インテリジェンスにより、次のことが可能に - **[イベント](/docs/data-apis/understand-data/new-relic-data-types/#events-new-relic)** + + **[Event](/docs/data-apis/understand-data/new-relic-data-types/#events-new-relic)** + @@ -117,7 +125,9 @@ New Relic の応用インテリジェンスにより、次のことが可能に - **[インシデント](/docs/alerts-applied-intelligence/new-relic-alerts/alert-incidents/view-event-details-incidents/)** + + **[Incident](/docs/alerts-applied-intelligence/new-relic-alerts/alert-incidents/view-event-details-incidents/)** + @@ -127,7 +137,9 @@ New Relic の応用インテリジェンスにより、次のことが可能に - **[問題](/docs/new-relic-solutions/get-started/glossary/#issue)** + + **[Issue](/docs/new-relic-solutions/get-started/glossary/#issue)** + @@ -137,7 +149,9 @@ New Relic の応用インテリジェンスにより、次のことが可能に - **[通知](/docs/alerts-applied-intelligence/notifications/intro-notifications/)** + + **[Notification](/docs/alerts-applied-intelligence/notifications/intro-notifications/)** + @@ -147,7 +161,9 @@ New Relic の応用インテリジェンスにより、次のことが可能に - **[ポリシー](/docs/alerts-applied-intelligence/new-relic-alerts/alert-policies/create-edit-or-find-alert-policy/)** + + **[Policy](/docs/alerts-applied-intelligence/new-relic-alerts/alert-policies/create-edit-or-find-alert-policy/)** + @@ -157,7 +173,9 @@ New Relic の応用インテリジェンスにより、次のことが可能に - **[閾値](/docs/alerts-applied-intelligence/new-relic-alerts/advanced-alerts/advanced-techniques/set-thresholds-alert-condition)** + + **[Threshold](/docs/alerts-applied-intelligence/new-relic-alerts/advanced-alerts/advanced-techniques/set-thresholds-alert-condition)** + @@ -167,7 +185,9 @@ New Relic の応用インテリジェンスにより、次のことが可能に - **[ワークフロー](/docs/alerts-applied-intelligence/applied-intelligence/incident-workflows/incident-workflows/)** + + **[Workflow](/docs/alerts-applied-intelligence/applied-intelligence/incident-workflows/incident-workflows/)** + diff --git a/src/i18n/content/jp/docs/apm/agents/php-agent/advanced-installation/docker-other-container-environments-install-php-agent.mdx b/src/i18n/content/jp/docs/apm/agents/php-agent/advanced-installation/docker-other-container-environments-install-php-agent.mdx index a7bd220ae13..c4d3a7d75c7 100644 --- a/src/i18n/content/jp/docs/apm/agents/php-agent/advanced-installation/docker-other-container-environments-install-php-agent.mdx +++ b/src/i18n/content/jp/docs/apm/agents/php-agent/advanced-installation/docker-other-container-environments-install-php-agent.mdx @@ -54,11 +54,11 @@ PHPのエージェントコンテナをDocker用に設定するには、以下 2. エージェントをインストールするには、New Relicの[tarファイルダウンロードサイト](/docs/agents/php-agent/installation/php-agent-installation-tar-file)からPHPエージェントパッケージをダウンロードし、 `install`引数を指定して`newrelic-install`スクリプトを実行します。 -3. `newrelic.ini`ファイルで、アプリケーション名を設定し、 +3. `newrelic.ini`ファイルで、アプリケーション名と - `newrelic.appname`および`newrelic.license`エントリで。 + `newrelic.appname`エントリと`newrelic.license`エントリで設定します。 4. `newrelic.ini`ファイルで`newrelic.daemon.address`オプションを設定して、エージェントをデーモンにポイントします。このオプションの値が`HOST:PORT`であることを確認してください。ここで、 `HOST`はデーモンが実行されているホストの名前またはIPアドレスであり、 `PORT`はデーモンがリッスンしているポート番号です。 @@ -74,11 +74,11 @@ PHPのエージェントとデーモンを同じDockerコンテナにセット 2. エージェントをインストールするには、New Relicの[tarファイルダウンロードサイト](/docs/agents/php-agent/installation/php-agent-installation-tar-file)からPHPエージェントパッケージをダウンロードし、 `install`引数を指定して`newrelic-install`スクリプトを実行します。 -3. アプリケーション名を設定し、 +3. `newrelic.ini`ファイルの`newrelic.license`エントリと`newrelic.appname`エントリを介してアプリケーション名と - `newrelic.ini`ファイルの`newrelic.license`および`newrelic.appname`エントリを介して。 + を設定します。 **[download.newrelic.com/php_agent/release/](https://download.newrelic.com/php_agent/release/)** + + に移動します。 + + * `YOUR_LICENSE_KEY`: これを - . `"REPLACE_WITH_REAL_KEY"` 、PHP エージェントのデフォルトの **newrelic.ini** ファイル内の実際の文字列であることに注意してください。 その文字列は編集しないでください。`sed`コマンドは、そのデフォルトの文字列を引用符で囲んだ実際の 40 文字のキーに置き換えます。 + に置き換えます。 `"REPLACE_WITH_REAL_KEY"` 、PHP エージェントのデフォルトの + + **newrelic.ini** + + ファイル内の実際の文字列であることに注意してください。 その文字列は編集しないでください。 `sed`コマンドは、デフォルトの文字列を引用符で囲んだ実際の 40 文字のキーに置き換えます。 * `YOUR_APPLICATION_NAME`:アプリケーション名を引用符で囲んで置き換えます。 diff --git a/src/i18n/content/jp/docs/apm/agents/python-agent/configuration/python-agent-configuration.mdx b/src/i18n/content/jp/docs/apm/agents/python-agent/configuration/python-agent-configuration.mdx index fe58c2c3b09..1146e3eb267 100644 --- a/src/i18n/content/jp/docs/apm/agents/python-agent/configuration/python-agent-configuration.mdx +++ b/src/i18n/content/jp/docs/apm/agents/python-agent/configuration/python-agent-configuration.mdx @@ -13,7 +13,7 @@ import apmConfigSettings from 'images/apm_diagram_config-settings.webp' [Pythonエージェント](/docs/agents/python-agent/getting-started/introduction-new-relic-python)では、構成オプションを使用してデフォルトのエージェント動作エージェントを変更できます。 -唯一必要な Python エージェント構成設定は、 . ライセンス キーは、エージェントがアプリケーション データをレポートするアカウントを識別します。アプリケーションのホスト方法に応じて、構成ファイルまたは環境変数を介してライセンス キーを提供できます。 +唯一必要な Python エージェント構成設定はです。 ライセンスキーは、エージェントがアプリケーション データを報告するアカウントを識別します。 アプリケーションをホストする方法に応じて、ライセンスキーは設定ファイルまたは環境変数を介して提供できます。 ## 構成方法と優先順位 [#options] @@ -28,7 +28,7 @@ Pythonエージェントは、次の優先順位に従って構成されます />
- Pythonエージェントでは、リクエストごとのオプションがサーバー側の構成を上書きします。有効にすると、サーバー側の値が空白のままになっている場合でも、サーバー側の構成によってエージェント構成ファイル内の対応する**すべて**の値が上書きされます。エージェント設定ファイルは環境変数を上書きします。環境変数は、エージェントのデフォルトをオーバーライドします。 + Python エージェントを使用すると、リクエストごとのオプションがサーバー側の設定をオーバーライドします。 有効にすると、サーバー側の値が空白のままであっても、サーバー側の構成はエージェント構成ファイル内の**all**に対応する値をオーバーライドします。 エージェント構成ファイルは環境変数をオーバーライドします。 環境変数はエージェントのデフォルトをオーバーライドします。
各構成方法の詳細な説明は次のとおりです。 @@ -59,10 +59,10 @@ Pythonエージェントは、次の優先順位に従って構成されます id="server-side-configuration" title="サーバー側の構成" > - [サーバー側の構成では、NewRelicUIで特定の設定を構成](/docs/agents/manage-apm-agents/configuration/server-side-agent-configuration)できます。これにより、複数のホストにまたがって実行されている場合でも、すべてのエージェントに変更が自動的に適用されます。利用可能な場合、このドキュメントには、サーバー**側のラベル**として、個々の構成オプションの下にサーバー側の構成のUIラベルが含まれています。 + [サーバーサイド設定を使用すると、](/docs/agents/manage-apm-agents/configuration/server-side-agent-configuration) New Relic UI で特定の設定を構成できます。 これにより、エージェントが複数のホストで実行されている場合でも、すべてのエージェントに変更が自動的に適用されます。 可能な場合、このドキュメントには、個々の構成オプションの下にサーバー側構成の UI ラベルが**Server-side label**として含まれています。 - サーバー側の構成が有効になっている場合、エージェントはUIで設定**できる**構成ファイルの値をすべて無視します。 UI値が空の場合でも、エージェントはこれを空の文字列として扱い、エージェント構成ファイルを使用しません。 + サーバー側構成が有効な場合、エージェントは UI で設定される構成ファイル内の値**could**を無視します。 UI 値が空の場合でも、エージェントはこれを空の文字列として扱い、エージェント構成ファイルを使用しません。 @@ -71,7 +71,7 @@ Pythonエージェントは、次の優先順位に従って構成されます id="environment-variables" title="環境変数" > - 環境変数を使用すると、特定のコア設定のデフォルトをオーバーライドできます。同等の設定がエージェント構成ファイルに明示的にリストされている場合、構成ファイルの設定は環境変数よりも優先されます。利用可能な場合、環境変数は、 **Environ変数**として個々の構成オプションの下に以下に記載されています。 + 環境変数を使用すると、特定のコア設定のデフォルトをオーバーライドできます。 同等の設定がエージェント構成ファイルに明示的にリストされている場合、構成ファイルの設定が環境変数よりも優先されます。 利用可能な場合、環境変数は、以下の個々の構成オプションの下に**Environ variable**として記載されています。 単純な構成の場合、[サーバー側の構成](#server-side-configuration)と組み合わせて環境変数を使用し、エージェント構成ファイルを完全に回避できます。これは[Heroku](/docs/agents/python-agent/hosting-services/python-agent-heroku)のデフォルト設定であり、New Relicアドオンをインストールすると、必要な環境変数が自動的に入力されます。 @@ -81,11 +81,15 @@ Pythonエージェントは、次の優先順位に従って構成されます - **環境変数** + + **Environment variable** + - **構成設定** + + **Configuration setting** + @@ -500,7 +504,7 @@ Pythonエージェントは、次の優先順位に従って構成されます - を指定します New Relic アカウントの。 このキーは、アプリのメトリクスを New Relic アカウントに関連付けます。 + New Relic アカウントのを指定します。 このキーは、アプリのメトリクスを New Relic アカウントに関連付けます。 **.ini**構成ファイルで`true`に設定します**and** **Account settings**ページから有効にします。 詳細については、 [「高セキュリティ」](/docs/accounts-partnerships/accounts/security/high-security)を参照してください。 、およびトランザクション イベント。以下の一般的な属性設定を使用して 4 つの宛先すべての属性を構成するだけでなく、宛先ごとに属性を構成することもできます。 +属性は、境界トレース、トレース エラー、 、およびトランザクション イベントの情報を提供するキーの値のペアです。 以下の一般的なプロパティ設定を使用して 4 つの宛先すべての属性を構成するだけでなく、宛先ごとに属性を構成することもできます。 詳細については、 [Pythonエージェント属性](/docs/agents/python-agent/attributes/python-agent-attributes)、属性の[有効化と無効化](/docs/agents/python-agent/attributes/enabling-disabling-attributes-python)、および[属性の例](/docs/agents/python-agent/attributes/python-attribute-examples)を参照してください。 @@ -3051,7 +3055,7 @@ Pythonエージェントは、次の優先順位に従って構成されます @@ -3276,7 +3280,13 @@ Pythonエージェントは、次の優先順位に従って構成されます イベントハーベスト設定は、NewRelicに送信されるイベントタイプデータの量を制限します。これらの設定を使用するときは、次の重要な点を考慮してください。 * イベントハーベスト設定は、アプリケーション全体ではなく、エージェントの単一インスタンスの制限に影響します。アプリケーション全体に制限を設定する方法については、以下の使用例を参照してください。 -* [リアルタイムストリーミング](/docs/agents/manage-apm-agents/agent-data/real-time-streaming)は5秒ごと(1分あたり12回)にデータを送信しますが、イベントハーベスト設定は1**分**あたりのイベントのレートに影響します。リアルタイムストリーミングを有効または無効にするために、これらの設定を変更する必要はありません。 + +* [リアルタイム ストリーミングは](/docs/agents/manage-apm-agents/agent-data/real-time-streaming)5 秒ごと (1 分あたり 12 回) にデータを送信しますが、イベント収集設定は + + **minute** + + あたりのイベントのレートに影響します。 リアルタイム ストリーミングを有効または無効にする場合、これらの設定を変更する必要はありません。 + * リアルタイム ストリーミング (デフォルトで有効) を使用すると、New Relic はエンティティのイベント収集制限を 5 秒間隔で表示します。これは、たとえば、構成ファイルで 1200 の制限値を設定すると、New Relic では 100 として表示されることを意味します。 ### 使用例 @@ -3369,7 +3379,7 @@ event_harvest_config.harvest_limits.span_event_data= 250 @@ -4495,7 +4505,7 @@ Python エージェントのログを構成するためのヒントについて[
- `1200` + `3600`
@@ -4526,7 +4536,7 @@ Python エージェントのログを構成するためのヒントについて[
@@ -4557,7 +4567,7 @@ Python エージェントのログを構成するためのヒントについて[
@@ -4588,7 +4598,7 @@ Python エージェントのログを構成するためのヒントについて[
@@ -4619,7 +4629,7 @@ Python エージェントのログを構成するためのヒントについて[
@@ -4872,7 +4882,9 @@ Python エージェントのログを構成するためのヒントについて[ 許可リストにリストされている例外は、 `strip_exception_messages.enabled`が`true`であっても、メッセージが削除されることはありません。許可リストは、スペースで区切られた例外タイプの文字列であり、それぞれ`module:exception_name`の形式です。組み込みの例外を`exception_name`としてリストします;それらの前に`module:`を付ける必要はありません。 - **例:組み込みの例外とユーザー定義の例外** + + **Example: Built-in exception and user-defined exception** + ```py KeyError my_module:MyException @@ -5168,7 +5180,7 @@ Python エージェントのログを構成するためのヒントについて[
- 通常、エージェントは、末尾にドットとプロセスIDが付いたdyno名を報告します(たとえば、 **worker.3** )。末尾のデータなしでレポートするプレフィックスを指定することで、この末尾のデータを削除できます(たとえば、 **worker** )。 + 通常、エージェントは、末尾にドットとプロセス ID を付けて dyno 名を報告します (例: **worker.3** )。末尾のデータなしで報告するプレフィックスを指定することで、この末尾のデータを削除できます (たとえば、 **worker** )。
diff --git a/src/i18n/content/jp/docs/apm/agents/python-agent/python-agent-api/backgroundtask-python-agent-api.mdx b/src/i18n/content/jp/docs/apm/agents/python-agent/python-agent-api/backgroundtask-python-agent-api.mdx index 0fb1f3542a2..cc35b801ac8 100644 --- a/src/i18n/content/jp/docs/apm/agents/python-agent/python-agent-api/backgroundtask-python-agent-api.mdx +++ b/src/i18n/content/jp/docs/apm/agents/python-agent/python-agent-api/backgroundtask-python-agent-api.mdx @@ -1,12 +1,12 @@ --- title: background_task (PythonエージェントAPI) type: apiDoc -shortDescription: バックグラウンドタスクやその他の非ウェブトランザクションを計測するために使用されます。 +shortDescription: インストゥルメントがバックグラウンド タスクまたは有限ランタイムの他の非ウェブ開催に使用されます。 tags: - Agents - Python agent - Python agent API -metaDescription: 'Python API: Used to instrument a background task or other non-web transaction.' +metaDescription: 'Python API: Used to instrument a background task or other non-web transaction of finite run time.' freshnessValidatedDate: never translationType: machine --- @@ -17,11 +17,11 @@ translationType: machine newrelic.agent.background_task(application=None, name=None, group=None) ``` -バックグラウンドタスクやその他の非ウェブトランザクションを計測するために使用されます。 +インストゥルメントがバックグラウンド タスクまたは有限ランタイムの他の非ウェブ開催に使用されます。 ## 説明 -この Python デコレーターは、バックグラウンドタスクやその他の [非ウェブトランザクションを計測するために使用することができます](/docs/apm/transactions/intro-transactions/monitor-background-processes-other-non-web-transactions) 。これは通常、ワーカープロセス、ジョブベースのシステム、およびスタンドアロンのスクリプトなどの非ウェブアクティビティを計測するために使用されます。バックグラウンドタスクとしてマークされたトランザクションは、APM UIにおいて非ウェブトランザクションとして表示され、ウェブトランザクションから分離されます。 +この Python デコレータは、インストゥルメントされたバックグラウンド タスクやその他の有限ランタイムの[非ウェブサイト](/docs/apm/transactions/intro-transactions/monitor-background-processes-other-non-web-transactions)に使用できます。 これは通常、ワーカー プロセス、ジョブベースのシステム、スタンドアロン スクリプトなど、インストゥルメントされた非 Web アクティビティに使用されます。 バックグラウンド タスクとしてマークされたトランザクションは、APM UI では非ウェブサイトとして表示され、ウェブサイトから分離されます。 関数がまだインストルメント化されていない場合は、 [`function_trace()`](/docs/apm/agents/python-agent/python-agent-api/functiontrace-python-agent-api) を使用して、バックグラウンド タスク内でその関数の関数トレースを作成できます。または、 [構成ファイルを](/docs/apm/agents/python-agent/custom-instrumentation/python-custom-instrumentation-config-file/#listing_functions) 使用して、計測されていない機能を計測することもできます。 @@ -31,9 +31,17 @@ newrelic.agent.background_task(application=None, name=None, group=None) デコレーターを使用できない場合は、これらの呼び出し形式のいずれかを使用すると便利です。 -* **コンテキスト マネージャー**: 監視対象のタスクが実行時のみに決定される (インポート時ではない) 場合は、 `BackgroundTask` コンテキスト マネージャーを使用して、コード ブロックの実行を直接ラップできます。(これは、 `BackgroundTaskWrapper`によって使用されるコンテキスト マネージャーです。) -* **ラッパー**: 追跡したい特定の関数がどこにあるかが事前にわかっている場合は、 `background_task` デコレータを使用できます。ただし、トレースする必要があるすべての関数がわからない場合 (たとえば、関数がルーティング システムの一部として動的に検索されている場合)、その時点で `BackgroundTaskWrapper` を使用して関数をラップする必要があります。登録時または電話時。 -* **パスベースのラッパー**: パスベースのラッパー形式は `wrap_background_task`です。 +* **The context manager** + + : 監視対象のタスクが実行時のみに決定される (インポート時ではない) 場合は、 `BackgroundTask`コンテキスト マネージャーを使用して、コード ブロックの実行を直接ラップできます。 (これは、 `BackgroundTaskWrapper`によって使用されるコンテキスト マネージャーです。) + +* **The wrapper** + + : 追跡したい特定の関数がどこにあるかが事前にわかっている場合は、 `background_task`デコレータを使用できます。 ただし、トレースする必要があるすべての関数がわからない場合 (たとえば、関数がルーティング システムの一部として動的に検索されている場合)、その時点で`BackgroundTaskWrapper`を使用して関数をラップする必要があります。登録時または電話時。 + +* **The path-based wrapper** + + : パスベースのラッパー フォームは`wrap_background_task`です。 これらの関数形式の違いや用途については、 [Variable Call Formats](/docs/python-agent-api-different-call-forms) を参照してください。 @@ -236,4 +244,8 @@ task = newrelic.agent.BackgroundTaskWrapper(get_next_task()) result = task(*args, **kwargs) ``` -この例では、この呼び出しがエージェントによって監視されているウェブ・トランザクション内で行われた場合、呼び出しはウェブ・トランザクションをバックグラウンド・タスクとして再分類します。しかし、この呼び出しがバックグラウンドのスレッドやコルーチン内で行われた場合は、呼び出しが戻るまでの間に発生したことを追跡する新しいバックグラウンド・タスク・トランザクションの記録が開始されます。 \ No newline at end of file +この例では、この呼び出しがエージェントによって監視されているウェブ・トランザクション内で行われた場合、呼び出しはウェブ・トランザクションをバックグラウンド・タスクとして再分類します。しかし、この呼び出しがバックグラウンドのスレッドやコルーチン内で行われた場合は、呼び出しが戻るまでの間に発生したことを追跡する新しいバックグラウンド・タスク・トランザクションの記録が開始されます。 + +## トラブルシューティング + +バックグラウンド タスクのトランザクションが UI に表示されない場合は、バックグラウンド タスクによって作成されたトランザクションが終了しなかったか、タスクの実行時間が長すぎたことが考えられます。 バックグラウンド タスクが 20 分を超えて実行される場合、そのタスクは保持するには古すぎると見なされるため、サーバーによって削除されます。 バックグラウンド タスクは 20 分を超えて実行しないでください。実行する場合は、複数のバックグラウンド タスクに分割する必要があります。 \ No newline at end of file diff --git a/src/i18n/content/jp/docs/infrastructure/amazon-integrations/get-started/aws-integrations-metrics.mdx b/src/i18n/content/jp/docs/infrastructure/amazon-integrations/get-started/aws-integrations-metrics.mdx index 9acbeec23b5..7fea722d83d 100644 --- a/src/i18n/content/jp/docs/infrastructure/amazon-integrations/get-started/aws-integrations-metrics.mdx +++ b/src/i18n/content/jp/docs/infrastructure/amazon-integrations/get-started/aws-integrations-metrics.mdx @@ -76,6 +76,4507 @@ ApiName ディメンションを持つメトリックのみに一致します: これらのマッピングは追加されなくなり、上記の一般ルールで定義されているように、すべての新しいメトリクスを元の AWS 名で保存することに専念しています。以下は、接尾辞`.by + dimensionName`が付いているすべてのメトリクスの完全なリストです。 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ 元のメトリクス名 + + 元のディメンション名 + + 接尾辞付きのメトリクス名 +
+ `aws.apigateway.4XXError` + + `Api` + + `aws.apigateway.4XXError.byApi` +
+ `aws.apigateway.4XXError` + + `ResourceWithMetrics` + + `aws.apigateway.4XXError.byResourceWithMetrics` +
+ `aws.apigateway.4XXError` + + `Stage` + + `aws.apigateway.4XXError.byStage` +
+ `aws.apigateway.5XXError` + + `Api` + + `aws.apigateway.5XXError.byApi` +
+ `aws.apigateway.5XXError` + + `ResourceWithMetrics` + + `aws.apigateway.5XXError.byResourceWithMetrics` +
+ `aws.apigateway.5XXError` + + `Stage` + + `aws.apigateway.5XXError.byStage` +
+ `aws.apigateway.CacheHitCount` + + `Api` + + `aws.apigateway.CacheHitCount.byApi` +
+ `aws.apigateway.CacheHitCount` + + `ResourceWithMetrics` + + `aws.apigateway.CacheHitCount.byResourceWithMetrics` +
+ `aws.apigateway.CacheHitCount` + + `Stage` + + `aws.apigateway.CacheHitCount.byStage` +
+ `aws.apigateway.CacheMissCount` + + `Api` + + `aws.apigateway.CacheMissCount.byApi` +
+ `aws.apigateway.CacheMissCount` + + `ResourceWithMetrics` + + `aws.apigateway.CacheMissCount.byResourceWithMetrics` +
+ `aws.apigateway.CacheMissCount` + + `Stage` + + `aws.apigateway.CacheMissCount.byStage` +
+ `aws.apigateway.Count` + + `Api` + + `aws.apigateway.Count.byApi` +
+ `aws.apigateway.Count` + + `ResourceWithMetrics` + + `aws.apigateway.Count.byResourceWithMetrics` +
+ `aws.apigateway.Count` + + `Stage` + + `aws.apigateway.Count.byStage` +
+ `aws.apigateway.IntegrationLatency` + + `Api` + + `aws.apigateway.IntegrationLatency.byApi` +
+ `aws.apigateway.IntegrationLatency` + + `ResourceWithMetrics` + + `aws.apigateway.IntegrationLatency.byResourceWithMetrics` +
+ `aws.apigateway.IntegrationLatency` + + `Stage` + + `aws.apigateway.IntegrationLatency.byStage` +
+ `aws.apigateway.Latency` + + `Api` + + `aws.apigateway.Latency.byApi` +
+ `aws.apigateway.Latency` + + `ResourceWithMetrics` + + `aws.apigateway.Latency.byResourceWithMetrics` +
+ `aws.apigateway.Latency` + + `Stage` + + `aws.apigateway.Latency.byStage` +
+ `aws.applicationelb.RequestCount` + + `Alb` + + `aws.applicationelb.RequestCount.byAlb` +
+ `aws.applicationelb.RequestCount` + + `TargetGroup` + + `aws.applicationelb.RequestCount.byTargetGroup` +
+ `aws.docdb.BackupRetentionPeriodStorageUsed` + + `Cluster` + + `aws.docdb.BackupRetentionPeriodStorageUsed.byCluster` +
+ `aws.docdb.BackupRetentionPeriodStorageUsed` + + `ClusterByRole` + + `aws.docdb.BackupRetentionPeriodStorageUsed.byClusterByRole` +
+ `aws.docdb.BackupRetentionPeriodStorageUsed` + + `Instance` + + `aws.docdb.BackupRetentionPeriodStorageUsed.byInstance` +
+ `aws.docdb.BufferCacheHitRatio` + + `Cluster` + + `aws.docdb.BufferCacheHitRatio.byCluster` +
+ `aws.docdb.BufferCacheHitRatio` + + `ClusterByRole` + + `aws.docdb.BufferCacheHitRatio.byClusterByRole` +
+ `aws.docdb.BufferCacheHitRatio` + + `Instance` + + `aws.docdb.BufferCacheHitRatio.byInstance` +
+ `aws.docdb.CPUUtilization` + + `Cluster` + + `aws.docdb.CPUUtilization.byCluster` +
+ `aws.docdb.CPUUtilization` + + `ClusterByRole` + + `aws.docdb.CPUUtilization.byClusterByRole` +
+ `aws.docdb.CPUUtilization` + + `Instance` + + `aws.docdb.CPUUtilization.byInstance` +
+ `aws.docdb.DatabaseConnections` + + `Cluster` + + `aws.docdb.DatabaseConnections.byCluster` +
+ `aws.docdb.DatabaseConnections` + + `ClusterByRole` + + `aws.docdb.DatabaseConnections.byClusterByRole` +
+ `aws.docdb.DatabaseConnections` + + `Instance` + + `aws.docdb.DatabaseConnections.byInstance` +
+ `aws.docdb.DBClusterReplicaLagMaximum` + + `Cluster` + + `aws.docdb.DBClusterReplicaLagMaximum.byCluster` +
+ `aws.docdb.DBClusterReplicaLagMaximum` + + `ClusterByRole` + + `aws.docdb.DBClusterReplicaLagMaximum.byClusterByRole` +
+ `aws.docdb.DBClusterReplicaLagMaximum` + + `Instance` + + `aws.docdb.DBClusterReplicaLagMaximum.byInstance` +
+ `aws.docdb.DBClusterReplicaLagMinimum` + + `Cluster` + + `aws.docdb.DBClusterReplicaLagMinimum.byCluster` +
+ `aws.docdb.DBClusterReplicaLagMinimum` + + `ClusterByRole` + + `aws.docdb.DBClusterReplicaLagMinimum.byClusterByRole` +
+ `aws.docdb.DBClusterReplicaLagMinimum` + + `Instance` + + `aws.docdb.DBClusterReplicaLagMinimum.byInstance` +
+ `aws.docdb.DBInstanceReplicaLag` + + `Cluster` + + `aws.docdb.DBInstanceReplicaLag.byCluster` +
+ `aws.docdb.DBInstanceReplicaLag` + + `ClusterByRole` + + `aws.docdb.DBInstanceReplicaLag.byClusterByRole` +
+ `aws.docdb.DBInstanceReplicaLag` + + `Instance` + + `aws.docdb.DBInstanceReplicaLag.byInstance` +
+ `aws.docdb.DiskQueueDepth` + + `Cluster` + + `aws.docdb.DiskQueueDepth.byCluster` +
+ `aws.docdb.DiskQueueDepth` + + `ClusterByRole` + + `aws.docdb.DiskQueueDepth.byClusterByRole` +
+ `aws.docdb.DiskQueueDepth` + + `Instance` + + `aws.docdb.DiskQueueDepth.byInstance` +
+ `aws.docdb.EngineUptime` + + `Cluster` + + `aws.docdb.EngineUptime.byCluster` +
+ `aws.docdb.EngineUptime` + + `ClusterByRole` + + `aws.docdb.EngineUptime.byClusterByRole` +
+ `aws.docdb.EngineUptime` + + `Instance` + + `aws.docdb.EngineUptime.byInstance` +
+ `aws.docdb.FreeableMemory` + + `Cluster` + + `aws.docdb.FreeableMemory.byCluster` +
+ `aws.docdb.FreeableMemory` + + `ClusterByRole` + + `aws.docdb.FreeableMemory.byClusterByRole` +
+ `aws.docdb.FreeableMemory` + + `Instance` + + `aws.docdb.FreeableMemory.byInstance` +
+ `aws.docdb.FreeLocalStorage` + + `Cluster` + + `aws.docdb.FreeLocalStorage.byCluster` +
+ `aws.docdb.FreeLocalStorage` + + `ClusterByRole` + + `aws.docdb.FreeLocalStorage.byClusterByRole` +
+ `aws.docdb.FreeLocalStorage` + + `Instance` + + `aws.docdb.FreeLocalStorage.byInstance` +
+ `aws.docdb.NetworkReceiveThroughput` + + `Cluster` + + `aws.docdb.NetworkReceiveThroughput.byCluster` +
+ `aws.docdb.NetworkReceiveThroughput` + + `ClusterByRole` + + `aws.docdb.NetworkReceiveThroughput.byClusterByRole` +
+ `aws.docdb.NetworkReceiveThroughput` + + `Instance` + + `aws.docdb.NetworkReceiveThroughput.byInstance` +
+ `aws.docdb.NetworkThroughput` + + `Cluster` + + `aws.docdb.NetworkThroughput.byCluster` +
+ `aws.docdb.NetworkThroughput` + + `ClusterByRole` + + `aws.docdb.NetworkThroughput.byClusterByRole` +
+ `aws.docdb.NetworkThroughput` + + `Instance` + + `aws.docdb.NetworkThroughput.byInstance` +
+ `aws.docdb.NetworkTransmitThroughput` + + `Cluster` + + `aws.docdb.NetworkTransmitThroughput.byCluster` +
+ `aws.docdb.NetworkTransmitThroughput` + + `ClusterByRole` + + `aws.docdb.NetworkTransmitThroughput.byClusterByRole` +
+ `aws.docdb.NetworkTransmitThroughput` + + `Instance` + + `aws.docdb.NetworkTransmitThroughput.byInstance` +
+ `aws.docdb.ReadIOPS` + + `Cluster` + + `aws.docdb.ReadIOPS.byCluster` +
+ `aws.docdb.ReadIOPS` + + `ClusterByRole` + + `aws.docdb.ReadIOPS.byClusterByRole` +
+ `aws.docdb.ReadIOPS` + + `Instance` + + `aws.docdb.ReadIOPS.byInstance` +
+ `aws.docdb.ReadLatency` + + `Cluster` + + `aws.docdb.ReadLatency.byCluster` +
+ `aws.docdb.ReadLatency` + + `ClusterByRole` + + `aws.docdb.ReadLatency.byClusterByRole` +
+ `aws.docdb.ReadLatency` + + `Instance` + + `aws.docdb.ReadLatency.byInstance` +
+ `aws.docdb.ReadThroughput` + + `Cluster` + + `aws.docdb.ReadThroughput.byCluster` +
+ `aws.docdb.ReadThroughput` + + `ClusterByRole` + + `aws.docdb.ReadThroughput.byClusterByRole` +
+ `aws.docdb.ReadThroughput` + + `Instance` + + `aws.docdb.ReadThroughput.byInstance` +
+ `aws.docdb.SnapshotStorageUsed` + + `Cluster` + + `aws.docdb.SnapshotStorageUsed.byCluster` +
+ `aws.docdb.SnapshotStorageUsed` + + `ClusterByRole` + + `aws.docdb.SnapshotStorageUsed.byClusterByRole` +
+ `aws.docdb.SnapshotStorageUsed` + + `Instance` + + `aws.docdb.SnapshotStorageUsed.byInstance` +
+ `aws.docdb.SwapUsage` + + `Cluster` + + `aws.docdb.SwapUsage.byCluster` +
+ `aws.docdb.SwapUsage` + + `ClusterByRole` + + `aws.docdb.SwapUsage.byClusterByRole` +
+ `aws.docdb.SwapUsage` + + `Instance` + + `aws.docdb.SwapUsage.byInstance` +
+ `aws.docdb.TotalBackupStorageBilled` + + `Cluster` + + `aws.docdb.TotalBackupStorageBilled.byCluster` +
+ `aws.docdb.TotalBackupStorageBilled` + + `ClusterByRole` + + `aws.docdb.TotalBackupStorageBilled.byClusterByRole` +
+ `aws.docdb.TotalBackupStorageBilled` + + + `Instance` + + `aws.docdb.TotalBackupStorageBilled.byInstance` +
+ `aws.docdb.VolumeBytesUsed` + + `Cluster` + + `aws.docdb.VolumeBytesUsed.byCluster` +
+ `aws.docdb.VolumeBytesUsed` + + `ClusterByRole` + + `aws.docdb.VolumeBytesUsed.byClusterByRole` +
+ `aws.docdb.VolumeBytesUsed` + + `Instance` + + `aws.docdb.VolumeBytesUsed.byInstance` +
+ `aws.docdb.VolumeReadIOPs` + + `Cluster` + + `aws.docdb.VolumeReadIOPs.byCluster` +
+ `aws.docdb.VolumeReadIOPs` + + `ClusterByRole` + + `aws.docdb.VolumeReadIOPs.byClusterByRole` +
+ `aws.docdb.VolumeReadIOPs` + + `Instance` + + `aws.docdb.VolumeReadIOPs.byInstance` +
+ `aws.docdb.VolumeWriteIOPs` + + `Cluster` + + `aws.docdb.VolumeWriteIOPs.byCluster` +
+ `aws.docdb.VolumeWriteIOPs` + + `ClusterByRole` + + `aws.docdb.VolumeWriteIOPs.byClusterByRole` +
+ `aws.docdb.VolumeWriteIOPs` + + `Instance` + + `aws.docdb.VolumeWriteIOPs.byInstance` +
+ `aws.docdb.WriteIOPS` + + `Cluster` + + `aws.docdb.WriteIOPS.byCluster` +
+ `aws.docdb.WriteIOPS` + + `ClusterByRole` + + `aws.docdb.WriteIOPS.byClusterByRole` +
+ `aws.docdb.WriteIOPS` + + `Instance` + + `aws.docdb.WriteIOPS.byInstance` +
+ `aws.docdb.WriteLatency` + + `Cluster` + + `aws.docdb.WriteLatency.byCluster` +
+ `aws.docdb.WriteLatency` + + `ClusterByRole` + + `aws.docdb.WriteLatency.byClusterByRole` +
+ `aws.docdb.WriteLatency` + + `Instance` + + `aws.docdb.WriteLatency.byInstance` +
+ `aws.docdb.WriteThroughput` + + `Cluster` + + `aws.docdb.WriteThroughput.byCluster` +
+ `aws.docdb.WriteThroughput` + + `ClusterByRole` + + `aws.docdb.WriteThroughput.byClusterByRole` +
+ `aws.docdb.WriteThroughput` + + `Instance` + + `aws.docdb.WriteThroughput.byInstance` +
+ `aws.dynamodb.ConsumedReadCapacityUnits` + + `GlobalSecondaryIndex` + + `aws.dynamodb.ConsumedReadCapacityUnits.byGlobalSecondaryIndex` +
+ `aws.dynamodb.ConsumedWriteCapacityUnits` + + `GlobalSecondaryIndex` + + `aws.dynamodb.ConsumedWriteCapacityUnits.byGlobalSecondaryIndex` +
+ `aws.dynamodb.ProvisionedReadCapacityUnits` + + `GlobalSecondaryIndex` + + `aws.dynamodb.ProvisionedReadCapacityUnits.byGlobalSecondaryIndex` +
+ `aws.dynamodb.ProvisionedWriteCapacityUnits` + + `GlobalSecondaryIndex` + + `aws.dynamodb.ProvisionedWriteCapacityUnits.byGlobalSecondaryIndex` +
+ `aws.dynamodb.ReadThrottleEvents` + + `GlobalSecondaryIndex` + + `aws.dynamodb.ReadThrottleEvents.byGlobalSecondaryIndex` +
+ `aws.dynamodb.WriteThrottleEvents` + + `GlobalSecondaryIndex` + + `aws.dynamodb.WriteThrottleEvents.byGlobalSecondaryIndex` +
+ `aws.ecs.activeServicesCount` + + `Cluster` + + `aws.ecs.activeServicesCount.byCluster` +
+ `aws.ecs.CPUUtilization` + + `Cluster` + + `aws.ecs.CPUUtilization.byCluster` +
+ `aws.ecs.CPUUtilization` + + `Service` + + `aws.ecs.CPUUtilization.byService` +
+ `aws.ecs.desiredCount` + + `Service` + + `aws.ecs.desiredCount.byService` +
+ `aws.ecs.MemoryUtilization` + + `Cluster` + + `aws.ecs.MemoryUtilization.byCluster` +
+ `aws.ecs.MemoryUtilization` + + `Service` + + `aws.ecs.MemoryUtilization.byService` +
+ `aws.ecs.pendingCount` + + `Service` + + `aws.ecs.pendingCount.byService` +
+ `aws.ecs.pendingTasksCount` + + `Cluster` + + `aws.ecs.pendingTasksCount.byCluster` +
+ `aws.ecs.registeredContainerInstancesCount` + + `Cluster` + + `aws.ecs.registeredContainerInstancesCount.byCluster` +
+ `aws.ecs.runningCount` + + `Service` + + `aws.ecs.runningCount.byService` +
+ `aws.ecs.runningTasksCount` + + `Cluster` + + `aws.ecs.runningTasksCount.byCluster` +
+ `aws.es.CPUUtilization` + + `Cluster` + + `aws.es.CPUUtilization.byCluster` +
+ `aws.es.CPUUtilization` + + `Node` + + `aws.es.CPUUtilization.byNode` +
+ `aws.es.FreeStorageSpace` + + `Cluster` + + `aws.es.FreeStorageSpace.byCluster` +
+ `aws.es.FreeStorageSpace` + + `Node` + + `aws.es.FreeStorageSpace.byNode` +
+ `aws.es.IndexingLatency` + + `Cluster` + + `aws.es.IndexingLatency.byCluster` +
+ `aws.es.IndexingLatency` + + `Node` + + `aws.es.IndexingLatency.byNode` +
+ `aws.es.IndexingRate` + + `Cluster` + + `aws.es.IndexingRate.byCluster` +
+ `aws.es.IndexingRate` + + `Node` + + `aws.es.IndexingRate.byNode` +
+ `aws.es.JVMGCOldCollectionCount` + + `Cluster` + + `aws.es.JVMGCOldCollectionCount.byCluster` +
+ `aws.es.JVMGCOldCollectionCount` + + `Node` + + `aws.es.JVMGCOldCollectionCount.byNode` +
+ `aws.es.JVMGCOldCollectionTime` + + `Cluster` + + `aws.es.JVMGCOldCollectionTime.byCluster` +
+ `aws.es.JVMGCOldCollectionTime` + + `Node` + + `aws.es.JVMGCOldCollectionTime.byNode` +
+ `aws.es.JVMGCYoungCollectionCount` + + `Cluster` + + `aws.es.JVMGCYoungCollectionCount.byCluster` +
+ `aws.es.JVMGCYoungCollectionCount` + + `Node` + + `aws.es.JVMGCYoungCollectionCount.byNode` +
+ `aws.es.JVMGCYoungCollectionTime` + + `Cluster` + + `aws.es.JVMGCYoungCollectionTime.byCluster` +
+ `aws.es.JVMGCYoungCollectionTime` + + `Node` + + `aws.es.JVMGCYoungCollectionTime.byNode` +
+ `aws.es.JVMMemoryPressure` + + `Cluster` + + `aws.es.JVMMemoryPressure.byCluster` +
+ `aws.es.JVMMemoryPressure` + + `Node` + + `aws.es.JVMMemoryPressure.byNode` +
+ `aws.es.SearchLatency` + + `Cluster` + + `aws.es.SearchLatency.byCluster` +
+ `aws.es.SearchLatency` + + `Node` + + `aws.es.SearchLatency.byNode` +
+ `aws.es.SearchRate` + + `Cluster` + + `aws.es.SearchRate.byCluster` +
+ `aws.es.SearchRate` + + `Node` + + `aws.es.SearchRate.byNode` +
+ `aws.es.SysMemoryUtilization` + + `Cluster` + + `aws.es.SysMemoryUtilization.byCluster` +
+ `aws.es.SysMemoryUtilization` + + `Node` + + `aws.es.SysMemoryUtilization.byNode` +
+ `aws.es.ThreadpoolBulkQueue` + + `Cluster` + + `aws.es.ThreadpoolBulkQueue.byCluster` +
+ `aws.es.ThreadpoolBulkQueue` + + `Node` + + `aws.es.ThreadpoolBulkQueue.byNode` +
+ `aws.es.ThreadpoolBulkRejected` + + `Cluster` + + `aws.es.ThreadpoolBulkRejected.byCluster` +
+ `aws.es.ThreadpoolBulkRejected` + + `Node` + + `aws.es.ThreadpoolBulkRejected.byNode` +
+ `aws.es.ThreadpoolBulkThreads` + + `Cluster` + + `aws.es.ThreadpoolBulkThreads.byCluster` +
+ `aws.es.ThreadpoolBulkThreads` + + `Node` + + `aws.es.ThreadpoolBulkThreads.byNode` +
+ `aws.es.ThreadpoolForce_mergeQueue` + + `Cluster` + + `aws.es.ThreadpoolForce_mergeQueue.byCluster` +
+ `aws.es.ThreadpoolForce_mergeQueue` + + `Node` + + `aws.es.ThreadpoolForce_mergeQueue.byNode` +
+ `aws.es.ThreadpoolForce_mergeRejected` + + `Cluster` + + `aws.es.ThreadpoolForce_mergeRejected.byCluster` +
+ `aws.es.ThreadpoolForce_mergeRejected` + + `Node` + + `aws.es.ThreadpoolForce_mergeRejected.byNode` +
+ `aws.es.ThreadpoolForce_mergeThreads` + + `Cluster` + + `aws.es.ThreadpoolForce_mergeThreads.byCluster` +
+ `aws.es.ThreadpoolForce_mergeThreads` + + `Node` + + `aws.es.ThreadpoolForce_mergeThreads.byNode` +
+ `aws.es.ThreadpoolIndexQueue` + + `Cluster` + + `aws.es.ThreadpoolIndexQueue.byCluster` +
+ `aws.es.ThreadpoolIndexQueue` + + `Node` + + `aws.es.ThreadpoolIndexQueue.byNode` +
+ `aws.es.ThreadpoolIndexRejected` + + `Cluster` + + `aws.es.ThreadpoolIndexRejected.byCluster` +
+ `aws.es.ThreadpoolIndexRejected` + + `Node` + + `aws.es.ThreadpoolIndexRejected.byNode` +
+ `aws.es.ThreadpoolIndexThreads` + + `Cluster` + + `aws.es.ThreadpoolIndexThreads.byCluster` +
+ `aws.es.ThreadpoolIndexThreads` + + `Node` + + `aws.es.ThreadpoolIndexThreads.byNode` +
+ `aws.es.ThreadpoolSearchQueue` + + `Cluster` + + `aws.es.ThreadpoolSearchQueue.byCluster` +
+ `aws.es.ThreadpoolSearchQueue` + + `Node` + + `aws.es.ThreadpoolSearchQueue.byNode` +
+ `aws.es.ThreadpoolSearchRejected` + + `Cluster` + + `aws.es.ThreadpoolSearchRejected.byCluster` +
+ `aws.es.ThreadpoolSearchRejected` + + `Node` + + `aws.es.ThreadpoolSearchRejected.byNode` +
+ `aws.es.ThreadpoolSearchThreads` + + `Cluster` + + `aws.es.ThreadpoolSearchThreads.byCluster` +
+ `aws.es.ThreadpoolSearchThreads` + + `Node` + + `aws.es.ThreadpoolSearchThreads.byNode` +
+ `aws.kafka.BytesInPerSec` + + `Broker` + + `aws.kafka.BytesInPerSec.byBroker` +
+ `aws.kafka.BytesInPerSec` + + `Topic` + + `aws.kafka.BytesInPerSec.byTopic` +
+ `aws.kafka.BytesOutPerSec` + + `Broker` + + `aws.kafka.BytesOutPerSec.byBroker` +
+ `aws.kafka.BytesOutPerSec` + + `Topic` + + `aws.kafka.BytesOutPerSec.byTopic` +
+ `aws.kafka.FetchMessageConversionsPerSec` + + `Broker` + + `aws.kafka.FetchMessageConversionsPerSec.byBroker` +
+ `aws.kafka.FetchMessageConversionsPerSec` + + `Topic` + + `aws.kafka.FetchMessageConversionsPerSec.byTopic` +
+ `aws.kafka.MessagesInPerSec` + + `Broker` + + `aws.kafka.MessagesInPerSec.byBroker` +
+ `aws.kafka.MessagesInPerSec` + + `Topic` + + `aws.kafka.MessagesInPerSec.byTopic` +
+ `aws.kafka.ProduceMessageConversionsPerSec` + + `Broker` + + `aws.kafka.ProduceMessageConversionsPerSec.byBroker` +
+ `aws.kafka.ProduceMessageConversionsPerSec` + + `Topic` + + `aws.kafka.ProduceMessageConversionsPerSec.byTopic` +
+ `aws.kinesis.IncomingBytes` + + `Stream` + + `aws.kinesis.IncomingBytes.byStream` +
+ `aws.kinesis.IncomingBytes` + + `StreamShard` + + `aws.kinesis.IncomingBytes.byStreamShard` +
+ `aws.kinesis.IncomingRecords` + + `Stream` + + `aws.kinesis.IncomingRecords.byStream` +
+ `aws.kinesis.IncomingRecords` + + `StreamShard` + + `aws.kinesis.IncomingRecords.byStreamShard` +
+ `aws.kinesis.ReadProvisionedThroughputExceeded` + + `Stream` + + `aws.kinesis.ReadProvisionedThroughputExceeded.byStream` +
+ `aws.kinesis.ReadProvisionedThroughputExceeded` + + `StreamShard` + + `aws.kinesis.ReadProvisionedThroughputExceeded.byStreamShard` +
+ `aws.kinesis.WriteProvisionedThroughputExceeded` + + `Stream` + + `aws.kinesis.WriteProvisionedThroughputExceeded.byStream` +
+ `aws.kinesis.WriteProvisionedThroughputExceeded` + + `StreamShard` + + `aws.kinesis.WriteProvisionedThroughputExceeded.byStreamShard` +
+ `aws.lambda.ConcurrentExecutions` + + `Function` + + `aws.lambda.ConcurrentExecutions.byFunction` +
+ `aws.lambda.ConcurrentExecutions` + + `Region` + + `aws.lambda.ConcurrentExecutions.byRegion` +
+ `aws.lambda.DeadLetterErrors` + + `Function` + + `aws.lambda.DeadLetterErrors.byFunction` +
+ `aws.lambda.DeadLetterErrors` + + `FunctionAlias` + + `aws.lambda.DeadLetterErrors.byFunctionAlias` +
+ `aws.lambda.Duration` + + `Function` + + `aws.lambda.Duration.byFunction` +
+ `aws.lambda.Duration` + + `FunctionAlias` + + `aws.lambda.Duration.byFunctionAlias` +
+ `aws.lambda.Errors` + + `Function` + + `aws.lambda.Errors.byFunction` +
+ `aws.lambda.Errors` + + `FunctionAlias` + + `aws.lambda.Errors.byFunctionAlias` +
+ `aws.lambda.Invocations` + + `Function` + + `aws.lambda.Invocations.byFunction` +
+ `aws.lambda.Invocations` + + `FunctionAlias` + + `aws.lambda.Invocations.byFunctionAlias` +
+ `aws.lambda.IteratorAge` + + `Function` + + `aws.lambda.IteratorAge.byFunction` +
+ `aws.lambda.IteratorAge` + + `FunctionAlias` + + `aws.lambda.IteratorAge.byFunctionAlias` +
+ `aws.lambda.ProvisionedConcurrencyInvocations` + + `Function` + + `aws.lambda.ProvisionedConcurrencyInvocations.byFunction` +
+ `aws.lambda.ProvisionedConcurrencyInvocations` + + `FunctionAlias` + + `aws.lambda.ProvisionedConcurrencyInvocations.byFunctionAlias` +
+ `aws.lambda.ProvisionedConcurrencySpilloverInvocations` + + `Function` + + `aws.lambda.ProvisionedConcurrencySpilloverInvocations.byFunction` +
+ `aws.lambda.ProvisionedConcurrencySpilloverInvocations` + + `FunctionAlias` + + `aws.lambda.ProvisionedConcurrencySpilloverInvocations.byFunctionAlias` +
+ `aws.lambda.ProvisionedConcurrencyUtilization` + + `FunctionAlias` + + `aws.lambda.ProvisionedConcurrencyUtilization.byFunctionAlias` +
+ `aws.lambda.ProvisionedConcurrentExecutions` + + `Function` + + `aws.lambda.ProvisionedConcurrentExecutions.byFunction` +
+ `aws.lambda.ProvisionedConcurrentExecutions` + + `FunctionAlias` + + `aws.lambda.ProvisionedConcurrentExecutions.byFunctionAlias` +
+ `aws.lambda.Throttles` + + `Function` + + `aws.lambda.Throttles.byFunction` +
+ `aws.lambda.Throttles` + + `FunctionAlias` + + `aws.lambda.Throttles.byFunctionAlias` +
+ `aws.neptune.BackupRetentionPeriodStorageUsed` + + `Cluster` + + `aws.neptune.BackupRetentionPeriodStorageUsed.byCluster` +
+ `aws.neptune.BackupRetentionPeriodStorageUsed` + + `ClusterByRole` + + `aws.neptune.BackupRetentionPeriodStorageUsed.byClusterByRole` +
+ `aws.neptune.BackupRetentionPeriodStorageUsed` + + `Instance` + + `aws.neptune.BackupRetentionPeriodStorageUsed.byInstance` +
+ `aws.neptune.ClusterReplicaLag` + + `Cluster` + + `aws.neptune.ClusterReplicaLag.byCluster` +
+ `aws.neptune.ClusterReplicaLag` + + `ClusterByRole` + + `aws.neptune.ClusterReplicaLag.byClusterByRole` +
+ `aws.neptune.ClusterReplicaLag` + + `Instance` + + `aws.neptune.ClusterReplicaLag.byInstance` +
+ `aws.neptune.ClusterReplicaLagMaximum` + + `Cluster` + + `aws.neptune.ClusterReplicaLagMaximum.byCluster` +
+ `aws.neptune.ClusterReplicaLagMaximum` + + `ClusterByRole` + + `aws.neptune.ClusterReplicaLagMaximum.byClusterByRole` +
+ `aws.neptune.ClusterReplicaLagMaximum` + + `Instance` + + `aws.neptune.ClusterReplicaLagMaximum.byInstance` +
+ `aws.neptune.ClusterReplicaLagMinimum` + + `Cluster` + + `aws.neptune.ClusterReplicaLagMinimum.byCluster` +
+ `aws.neptune.ClusterReplicaLagMinimum` + + `ClusterByRole` + + `aws.neptune.ClusterReplicaLagMinimum.byClusterByRole` +
+ `aws.neptune.ClusterReplicaLagMinimum` + + `Instance` + + `aws.neptune.ClusterReplicaLagMinimum.byInstance` +
+ `aws.neptune.CPUUtilization` + + `Cluster` + + `aws.neptune.CPUUtilization.byCluster` +
+ `aws.neptune.CPUUtilization` + + `ClusterByRole` + + `aws.neptune.CPUUtilization.byClusterByRole` +
+ `aws.neptune.CPUUtilization` + + `Instance` + + `aws.neptune.CPUUtilization.byInstance` +
+ `aws.neptune.EngineUptime` + + `Cluster` + + `aws.neptune.EngineUptime.byCluster` +
+ `aws.neptune.EngineUptime` + + `ClusterByRole` + + `aws.neptune.EngineUptime.byClusterByRole` +
+ `aws.neptune.EngineUptime` + + `Instance` + + `aws.neptune.EngineUptime.byInstance` +
+ `aws.neptune.FreeableMemory` + + `Cluster` + + `aws.neptune.FreeableMemory.byCluster` +
+ `aws.neptune.FreeableMemory` + + `ClusterByRole` + + `aws.neptune.FreeableMemory.byClusterByRole` +
+ `aws.neptune.FreeableMemory` + + `Instance` + + `aws.neptune.FreeableMemory.byInstance` +
+ `aws.neptune.GremlinRequestsPerSec` + + `Cluster` + + `aws.neptune.GremlinRequestsPerSec.byCluster` +
+ `aws.neptune.GremlinRequestsPerSec` + + `ClusterByRole` + + `aws.neptune.GremlinRequestsPerSec.byClusterByRole` +
+ `aws.neptune.GremlinRequestsPerSec` + + `Instance` + + `aws.neptune.GremlinRequestsPerSec.byInstance` +
+ `aws.neptune.GremlinWebSocketOpenConnections` + + `Cluster` + + `aws.neptune.GremlinWebSocketOpenConnections.byCluster` +
+ `aws.neptune.GremlinWebSocketOpenConnections` + + `ClusterByRole` + + `aws.neptune.GremlinWebSocketOpenConnections.byClusterByRole` +
+ `aws.neptune.GremlinWebSocketOpenConnections` + + `Instance` + + `aws.neptune.GremlinWebSocketOpenConnections.byInstance` +
+ `aws.neptune.LoaderRequestsPerSec` + + `Cluster` + + `aws.neptune.LoaderRequestsPerSec.byCluster` +
+ `aws.neptune.LoaderRequestsPerSec` + + `ClusterByRole` + + `aws.neptune.LoaderRequestsPerSec.byClusterByRole` +
+ `aws.neptune.LoaderRequestsPerSec` + + `Instance` + + `aws.neptune.LoaderRequestsPerSec.byInstance` +
+ `aws.neptune.MainRequestQueuePendingRequests` + + `Cluster` + + `aws.neptune.MainRequestQueuePendingRequests.byCluster` +
+ `aws.neptune.MainRequestQueuePendingRequests` + + `ClusterByRole` + + `aws.neptune.MainRequestQueuePendingRequests.byClusterByRole` +
+ `aws.neptune.MainRequestQueuePendingRequests` + + `Instance` + + `aws.neptune.MainRequestQueuePendingRequests.byInstance` +
+ `aws.neptune.NetworkReceiveThroughput` + + `Cluster` + + `aws.neptune.NetworkReceiveThroughput.byCluster` +
+ `aws.neptune.NetworkReceiveThroughput` + + `ClusterByRole` + + `aws.neptune.NetworkReceiveThroughput.byClusterByRole` +
+ `aws.neptune.NetworkReceiveThroughput` + + `Instance` + + `aws.neptune.NetworkReceiveThroughput.byInstance` +
+ `aws.neptune.NetworkThroughput` + + `Cluster` + + `aws.neptune.NetworkThroughput.byCluster` +
+ `aws.neptune.NetworkThroughput` + + `ClusterByRole` + + `aws.neptune.NetworkThroughput.byClusterByRole` +
+ `aws.neptune.NetworkThroughput` + + `Instance` + + `aws.neptune.NetworkThroughput.byInstance` +
+ `aws.neptune.NetworkTransmitThroughput` + + `Cluster` + + `aws.neptune.NetworkTransmitThroughput.byCluster` +
+ `aws.neptune.NetworkTransmitThroughput` + + `ClusterByRole` + + `aws.neptune.NetworkTransmitThroughput.byClusterByRole` +
+ `aws.neptune.NetworkTransmitThroughput` + + `Instance` + + `aws.neptune.NetworkTransmitThroughput.byInstance` +
+ `aws.neptune.NumTxCommitted` + + `Cluster` + + `aws.neptune.NumTxCommitted.byCluster` +
+ `aws.neptune.NumTxCommitted` + + `ClusterByRole` + + `aws.neptune.NumTxCommitted.byClusterByRole` +
+ `aws.neptune.NumTxCommitted` + + `Instance` + + `aws.neptune.NumTxCommitted.byInstance` +
+ `aws.neptune.NumTxOpened` + + `Cluster` + + `aws.neptune.NumTxOpened.byCluster` +
+ `aws.neptune.NumTxOpened` + + `ClusterByRole` + + `aws.neptune.NumTxOpened.byClusterByRole` +
+ `aws.neptune.NumTxOpened` + + `Instance` + + `aws.neptune.NumTxOpened.byInstance` +
+ `aws.neptune.NumTxRolledBack` + + `Cluster` + + `aws.neptune.NumTxRolledBack.byCluster` +
+ `aws.neptune.NumTxRolledBack` + + `ClusterByRole` + + `aws.neptune.NumTxRolledBack.byClusterByRole` +
+ `aws.neptune.NumTxRolledBack` + + `Instance` + + `aws.neptune.NumTxRolledBack.byInstance` +
+ `aws.neptune.SnapshotStorageUsed` + + `Cluster` + + `aws.neptune.SnapshotStorageUsed.byCluster` +
+ `aws.neptune.SnapshotStorageUsed` + + `ClusterByRole` + + `aws.neptune.SnapshotStorageUsed.byClusterByRole` +
+ `aws.neptune.SnapshotStorageUsed` + + `Instance` + + `aws.neptune.SnapshotStorageUsed.byInstance` +
+ `aws.neptune.SparqlRequestsPerSec` + + `Cluster` + + `aws.neptune.SparqlRequestsPerSec.byCluster` +
+ `aws.neptune.SparqlRequestsPerSec` + + `ClusterByRole` + + `aws.neptune.SparqlRequestsPerSec.byClusterByRole` +
+ `aws.neptune.SparqlRequestsPerSec` + + `Instance` + + `aws.neptune.SparqlRequestsPerSec.byInstance` +
+ `aws.neptune.TotalBackupStorageBilled` + + `Cluster` + + `aws.neptune.TotalBackupStorageBilled.byCluster` +
+ `aws.neptune.TotalBackupStorageBilled` + + `ClusterByRole` + + `aws.neptune.TotalBackupStorageBilled.byClusterByRole` +
+ `aws.neptune.TotalBackupStorageBilled` + + `Instance` + + `aws.neptune.TotalBackupStorageBilled.byInstance` +
+ `aws.neptune.TotalClientErrorsPerSec` + + `Cluster` + + `aws.neptune.TotalClientErrorsPerSec.byCluster` +
+ `aws.neptune.TotalClientErrorsPerSec` + + `ClusterByRole` + + `aws.neptune.TotalClientErrorsPerSec.byClusterByRole` +
+ `aws.neptune.TotalClientErrorsPerSec` + + `Instance` + + `aws.neptune.TotalClientErrorsPerSec.byInstance` +
+ `aws.neptune.TotalRequestsPerSec` + + `Cluster` + + `aws.neptune.TotalRequestsPerSec.byCluster` +
+ `aws.neptune.TotalRequestsPerSec` + + `ClusterByRole` + + `aws.neptune.TotalRequestsPerSec.byClusterByRole` +
+ `aws.neptune.TotalRequestsPerSec` + + `Instance` + + `aws.neptune.TotalRequestsPerSec.byInstance` +
+ `aws.neptune.TotalServerErrorsPerSec` + + `Cluster` + + `aws.neptune.TotalServerErrorsPerSec.byCluster` +
+ `aws.neptune.TotalServerErrorsPerSec` + + `ClusterByRole` + + `aws.neptune.TotalServerErrorsPerSec.byClusterByRole` +
+ `aws.neptune.TotalServerErrorsPerSec` + + `Instance` + + `aws.neptune.TotalServerErrorsPerSec.byInstance` +
+ `aws.neptune.VolumeBytesUsed` + + `Cluster` + + `aws.neptune.VolumeBytesUsed.byCluster` +
+ `aws.neptune.VolumeBytesUsed` + + `ClusterByRole` + + `aws.neptune.VolumeBytesUsed.byClusterByRole` +
+ `aws.neptune.VolumeBytesUsed` + + `Instance` + + `aws.neptune.VolumeBytesUsed.byInstance` +
+ `aws.neptune.VolumeReadIOPs` + + `Cluster` + + `aws.neptune.VolumeReadIOPs.byCluster` +
+ `aws.neptune.VolumeReadIOPs` + + `ClusterByRole` + + `aws.neptune.VolumeReadIOPs.byClusterByRole` +
+ `aws.neptune.VolumeReadIOPs` + + `Instance` + + `aws.neptune.VolumeReadIOPs.byInstance` +
+ `aws.neptune.VolumeWriteIOPs` + + `Cluster` + + `aws.neptune.VolumeWriteIOPs.byCluster` +
+ `aws.neptune.VolumeWriteIOPs` + + `ClusterByRole` + + `aws.neptune.VolumeWriteIOPs.byClusterByRole` +
+ `aws.neptune.VolumeWriteIOPs` + + `Instance` + + `aws.neptune.VolumeWriteIOPs.byInstance` +
+ `aws.rds.VolumeBytesUsed` + + `DbCluster` + + `aws.rds.VolumeBytesUsed.byDbCluster` +
+ `aws.rds.VolumeReadIOPs` + + `DbCluster` + + `aws.rds.VolumeReadIOPs.byDbCluster` +
+ `aws.rds.VolumeWriteIOPs` + + `DbCluster` + + `aws.rds.VolumeWriteIOPs.byDbCluster` +
+ `aws.redshift.CPUUtilization` + + `Cluster` + + `aws.redshift.CPUUtilization.byCluster` +
+ `aws.redshift.CPUUtilization` + + `Node` + + `aws.redshift.CPUUtilization.byNode` +
+ `aws.redshift.DatabaseConnections` + + `Cluster` + + `aws.redshift.DatabaseConnections.byCluster` +
+ `aws.redshift.DatabaseConnections` + + `Node` + + `aws.redshift.DatabaseConnections.byNode` +
+ `aws.redshift.HealthStatus` + + `Cluster` + + `aws.redshift.HealthStatus.byCluster` +
+ `aws.redshift.HealthStatus` + + `Node` + + `aws.redshift.HealthStatus.byNode` +
+ `aws.redshift.MaintenanceMode` + + `Cluster` + + `aws.redshift.MaintenanceMode.byCluster` +
+ `aws.redshift.MaintenanceMode` + + `Node` + + `aws.redshift.MaintenanceMode.byNode` +
+ `aws.redshift.NetworkReceiveThroughput` + + `Cluster` + + `aws.redshift.NetworkReceiveThroughput.byCluster` +
+ `aws.redshift.NetworkReceiveThroughput` + + `Node` + + `aws.redshift.NetworkReceiveThroughput.byNode` +
+ `aws.redshift.NetworkTransmitThroughput` + + `Cluster` + + `aws.redshift.NetworkTransmitThroughput.byCluster` +
+ `aws.redshift.NetworkTransmitThroughput` + + `Node` + + `aws.redshift.NetworkTransmitThroughput.byNode` +
+ `aws.redshift.PercentageDiskSpaceUsed` + + `Cluster` + + `aws.redshift.PercentageDiskSpaceUsed.byCluster` +
+ `aws.redshift.PercentageDiskSpaceUsed` + + `Node` + + `aws.redshift.PercentageDiskSpaceUsed.byNode` +
+ `aws.redshift.ReadIOPS` + + `Cluster` + + `aws.redshift.ReadIOPS.byCluster` +
+ `aws.redshift.ReadIOPS` + + `Node` + + `aws.redshift.ReadIOPS.byNode` +
+ `aws.redshift.ReadLatency` + + `Cluster` + + `aws.redshift.ReadLatency.byCluster` +
+ `aws.redshift.ReadLatency` + + `Node` + + `aws.redshift.ReadLatency.byNode` +
+ `aws.redshift.ReadThroughput` + + `Cluster` + + `aws.redshift.ReadThroughput.byCluster` +
+ `aws.redshift.ReadThroughput` + + `Node` + + `aws.redshift.ReadThroughput.byNode` +
+ `aws.redshift.WriteIOPS` + + `Cluster` + + `aws.redshift.WriteIOPS.byCluster` +
+ `aws.redshift.WriteIOPS` + + `Node` + + `aws.redshift.WriteIOPS.byNode` +
+ `aws.redshift.WriteLatency` + + `Cluster` + + `aws.redshift.WriteLatency.byCluster` +
+ `aws.redshift.WriteLatency` + + `Node` + + `aws.redshift.WriteLatency.byNode` +
+ `aws.redshift.WriteThroughput` + + `Cluster` + + `aws.redshift.WriteThroughput.byCluster` +
+ `aws.redshift.WriteThroughput` + + `Node` + + `aws.redshift.WriteThroughput.byNode` +
+ `aws.states.ConsumedCapacity` + + `ApiUsage` + + `aws.states.ConsumedCapacity.byApiUsage` +
+ `aws.states.ConsumedCapacity` + + `Service` + + `aws.states.ConsumedCapacity.byService` +
+ `aws.states.ProvisionedBucketSize` + + `ApiUsage` + + `aws.states.ProvisionedBucketSize.byApiUsage` +
+ `aws.states.ProvisionedBucketSize` + + `Service` + + `aws.states.ProvisionedBucketSize.byService` +
+ `aws.states.ProvisionedRefillRate` + + `ApiUsage` + + `aws.states.ProvisionedRefillRate.byApiUsage` +
+ `aws.states.ProvisionedRefillRate` + + `Service` + + `aws.states.ProvisionedRefillRate.byService` +
+ `aws.states.ThrottledEvents` + + `ApiUsage` + + `aws.states.ThrottledEvents.byApiUsage` +
+ `aws.states.ThrottledEvents` + + `Service` + + `aws.states.ThrottledEvents.byService` +
+ ## APIポーリングメトリクス [#aws-metrics-table] 各ポーリング統合で利用可能なメトリクスとその名前のリファレンスについては、[個別の統合に関するドキュメントを参照してください](/docs/infrastructure/amazon-integrations/get-started/introduction-aws-integrations/)。 diff --git a/src/i18n/content/jp/docs/logs/log-api/introduction-log-api.mdx b/src/i18n/content/jp/docs/logs/log-api/introduction-log-api.mdx index 75e7d1a57c0..2b637ffe2dd 100644 --- a/src/i18n/content/jp/docs/logs/log-api/introduction-log-api.mdx +++ b/src/i18n/content/jp/docs/logs/log-api/introduction-log-api.mdx @@ -41,11 +41,9 @@ https://gov-log-api.newrelic.com/log/v1 Log APIを使ってログデータをNew Relicアカウントに送信する。 -1. あなたの +1. - - - . + を入手してください。 2. JSON ペイロードの [制限と制限文字](#limits) を確認してください。 @@ -61,7 +59,7 @@ Log APIを使ってログデータをNew Relicアカウントに送信する。 6. いくつかのトラフィックを生成し、数分待ってから、 [あなたのアカウント](#what-next) のデータをチェックしてください。 -有効にした後にデータが表示されない場合は、 機能については、[トラブルシューティング手順](/docs/logs/log-management/troubleshooting/no-log-data-appears-ui/)に従ってください。 +機能を有効にしてもデータが表示されない場合は、[トラブルシューティング手順](/docs/logs/log-management/troubleshooting/no-log-data-appears-ui/)に従ってください。 ## HTTPヘッダー [#json-headers] @@ -102,7 +100,7 @@ Gzip圧縮されたJSONフォーマットが受け入れられます。圧縮さ ## 認証 [#authentication] -あなたの Log API へのリクエストを認証し、送信されたログ メッセージが書き込まれる New Relic アカウントを決定します。HTTP ヘッダーまたはクエリ文字列パラメーターとして渡す必要があります。 +は、Log API に対するリクエストを認証する役割を果たし、送信されたログメッセージが書き込まれる New Relic アカウントを決定します。 これは、HTTP ヘッダーまたはクエリ文字列パラメーターとして渡す必要があります。 ### オプション1:HTTPヘッダーを使った認証 [#auth-header] @@ -128,7 +126,7 @@ Gzip圧縮されたJSONフォーマットが受け入れられます。圧縮さ - 新しいレリック . [クエリ パラメータを介してこれを送信する](#query-parameters)こともできます。 + New Relic 。 [これをクエリ経由で送信すること](#query-parameters)もできます。 @@ -160,7 +158,7 @@ Gzip圧縮されたJSONフォーマットが受け入れられます。圧縮さ - あなたの . [これを HTTP ヘッダー経由で送信する](#auth-header)こともできます。 + あなたの 。 [これを HTTP ヘッダー経由で送信する](#auth-header)こともできます。 @@ -243,7 +241,7 @@ JSONメッセージは、簡略化された属性セットまたは詳細な属 - これは、デフォルトで検索される **メインの** ログメッセージフィールドです。 + これは、デフォルトで検索される**main**ログメッセージ フィールドです @@ -298,7 +296,7 @@ JSONメッセージは、簡略化された属性セットまたは詳細な属 id="detailed-json" title="詳細なJSONボディメッセージ" > - 詳細フォーマットを使用してボディを作成する場合は、1つまたは複数のJSONオブジェクトを含む、 **JSON配列** でなければなりません。それぞれのJSONオブジェクトは、以下のフォーマットで構成されています。 + 詳細形式を使用して本文を作成する場合、それは 1 つ以上の JSON オブジェクトを含む**JSON array**である必要があり、それぞれの形式は次のとおりです。 @@ -472,10 +470,22 @@ JSONメッセージは、簡略化された属性セットまたは詳細な属 Log APIに送信するログの制限。 -* ペイロード合計サイズ: **POSTあたり最大1MB(10^6バイト)**。圧縮の使用を強く推奨します。 -* ペイロードは** UTF-8 **としてエンコードする必要があります。 +* ペイロードの合計サイズ: + + **1MB(10^6 bytes) maximum per POST** + + 。 圧縮を使用することを強くお勧めします。 + +* ペイロードは + + **UTF-8** + + としてエンコードする必要があります。 + * イベントごとの属性の数。最大255個 + * 属性名の長さ:255文字 + * 属性値の長さ:最初の4,094文字は、 `message`などの同じ名前の`Log`イベントフィールドとしてNRDBに格納されます。文字列値が4,094文字を超える場合、長い文字列を[blob](/docs/logs/ui-data/long-logs-blobs)として格納します。 一部の特定の属性には、追加の制限があります。 @@ -525,7 +535,7 @@ Log APIに送信されるログのレート制限。 ### ログのペイロードフォーマット [#payload-format] -有効なJSONペイロードであれば何でも受け付けます。ペイロードは、 **UTF-8** としてエンコードされている必要があります。 +有効な JSON ペイロードはすべて受け入れられます。 ペイロードは**UTF-8**としてエンコードされる必要があります。 ## JSONメッセージ属性 [#attributes] diff --git a/src/i18n/content/jp/docs/tutorial-improve-site-performance/guide-to-monitoring-core-web-vitals.mdx b/src/i18n/content/jp/docs/tutorial-improve-site-performance/guide-to-monitoring-core-web-vitals.mdx index b054ebe17af..ec69d76224d 100644 --- a/src/i18n/content/jp/docs/tutorial-improve-site-performance/guide-to-monitoring-core-web-vitals.mdx +++ b/src/i18n/content/jp/docs/tutorial-improve-site-performance/guide-to-monitoring-core-web-vitals.mdx @@ -29,11 +29,7 @@ import browserSessionTraces from 'images/browser_screenshot-crop_session-traces. ## ウェブの重要な要素を理解する [#understand] -すでに New Relic でブラウザ アプリを監視している場合は、 **[one.newrelic.com > All capabilities](https://one.newrelic.com/all-capabilities) > Browser > (アプリを選択) > Monitor > Web vitals**に移動します。 - - - 一部のお客様の場合、 **Web Vitals**が ( \[**モニター**] の下ではなく) \[**その他のビュー**] の下にある場合があります。 - +すでに New Relic を使用してbrowserアプリを監視している場合は、**[one.newrelic.com > All capabilities](https://one.newrelic.com/all-capabilities) > Browser > (select an app) > Monitor > Web vitals** に進みます。
- **[one.newrelic.com > All capabilities](https://one.newrelic.com/all-capabilities) > Browser > (アプリを選択) > Monitor > Web vitals**: サイト全体のコア Web バイタル、お気に入りの主要な Web ページを追跡し、期間でフィルターします。 + **[one.newrelic.com > All capabilities](https://one.newrelic.com/all-capabilities) > Browser > (select an app) > Monitor > Web vitals**: サイト全体のコアウェブバイタル、お気に入りの主要なウェブページを追跡し、期間ごとにフィルターします。
3 つの主要な Web Vitals は次のとおりです。 @@ -75,7 +71,9 @@ import browserSessionTraces from 'images/browser_screenshot-crop_session-traces.
- **最大のコンテンツペイント** + + **Largest contentful paint** + @@ -93,7 +91,9 @@ import browserSessionTraces from 'images/browser_screenshot-crop_session-traces.
- **First input delay** + + **First input delay** + @@ -111,7 +111,9 @@ import browserSessionTraces from 'images/browser_screenshot-crop_session-traces.
- **累積レイアウトシフト** + + **Cumulative layout shift** + @@ -129,11 +131,11 @@ import browserSessionTraces from 'images/browser_screenshot-crop_session-traces.
-**優れ**た Web Vitals は、組織がお金を節約し、SEO を向上させるのに役立ちます。**不十分**または**改善が必要**は、組織に対するユーザーの否定的な認識を反映している可能性があり、顧客の不満やビジネス チャンスの損失につながる可能性があります。 +**Good** Web Vitals は、組織のコスト削減と SEO の向上に役立ちます。 **Poor**または**Needs improvement** 、組織に対するユーザーの否定的な認識を反映している可能性があり、顧客の不満やビジネス チャンスの損失につながる可能性があります。 ## 特定のページにドリルダウンする [#drill-down] -重要なページ (e コマースのチェックアウト ページなど) についての情報が必要な場合は、 **Page URL** \[ページ URL] テーブルでそのページを見つけます。コア Web バイタルに寄与しているものの詳細が表示され、エンド ユーザーがサイトのこれらの領域をどのように体験しているかを理解するために使用できます。たとえば、Chrome ブラウザのパフォーマンス低下のパターンに気付いた場合は、そのユーザー ベースに対する今後の改善策を厳選できます。 +インサイトを重要なページ (e コマースのチェックアウト ページなど) に含める場合は、 **Page URL**テーブルで見つけます。 コアウェブバイタルに寄与しているものの詳細が表示され、エンドユーザーがサイトのこれらの領域をどのように体験しているかを理解するために使用できます。 たとえば、Chrome ブラウザのパフォーマンス低下のパターンに気付いた場合は、そのユーザー ベースに対する今後の改善策を厳選できます。
- **[one.newrelic.com > All capabilities](https://one.newrelic.com/all-capabilities) > Browser > (アプリを選択) > Monitor > Web vitals > (ページ URL をクリック)**: 最も影響力のある Web ページのコア Web Vitals の内訳を表示します。 + **[one.newrelic.com > All capabilities](https://one.newrelic.com/all-capabilities) > Browser > (select an app) > Monitor > Web vitals > (click on a page URL)**: 最も影響力のある Web ページのコアバイウェブタルの内訳を表示します。
## 主要な属性によるフィルタリング [#key-attributes] -バックエンドの変更やパフォーマンスの問題がコア Web Vitals にどのように影響したかなど、特定のことを調査したい場合は、\[**フィルター**] ツールを使用して任意のキー属性をフィルター処理できます。 +バックエンドの変更やパフォーマンスの問題がコアウェブバイタルにどのような影響を与えたかなど、特定のことを調査したい場合は、 **Filter by**ツールを使用して主要な属性をフィルタリングできます。
- **[one.newrelic.com > All capabilities](https://one.newrelic.com/all-capabilities) > Browser > (アプリを選択) > Monitor > Web vitals > (フィルターの追加)**: フィルター ツールを使用して、主要な属性によってコア Web Vitals をフィルターします。 + **[one.newrelic.com > All capabilities](https://one.newrelic.com/all-capabilities) > Browser > (select an app) > Monitor > Web vitals > (add filters)**: フィルタ ツールを使用して、主要な属性によってコアウェブバイタルをフィルタリングします。
ほぼすべてのキー属性でフィルタリングできますが、役に立つ例をいくつか読んでください。 @@ -166,21 +168,54 @@ import browserSessionTraces from 'images/browser_screenshot-crop_session-traces. id="device" title="デバイスの種類別" > - デスクトップとモバイルのパフォーマンスを比較し、2 つのプラットフォーム間で主要な Web Vitals がどのように異なるかを比較したいとします。これを**Web Vitals**で調査するには: + デスクトップとモバイルのパフォーマンスを比較し、コアウェブバイタルが 2 つのプラットフォームでどのように異なるかを比較したいとします。 **Web vitals**でこれを調査するには: + + 1. **Filter by** + + フィールドで、 + + **Attribute** + + `deviceType`に、 + + **Value** + + `desktop`に設定します。 + + 2. 重複したbrowserで、 + + **Attribute** - 1. **Filter by**フィールドで、 **Attribute**を`deviceType`に、 **Value**を`desktop`に設定します。 - 2. 複製ブラウザーで、**属性**を`deviceType`に、**値**を`mobile`に設定し、結果を比較します。 + を `deviceType` に、 + + **Value** + + を `mobile` に設定し、結果を比較します。
- 11 月 1 日の午後 12 時ごろ、エンドユーザーがサイトのチェックアウト ページでパフォーマンスの問題を報告したとします。このユーザーに何が起こったのかを確認したいとします。 **Web Vitals**でこれを調査するには: + 11 月 1 日の午後 12 時ごろ、エンドユーザーがサイトのチェックアウト ページでパフォーマンスの問題を報告したとします。このユーザーに何が起こったのかを確認したいとします。 **Web vitals**でこれを調査するには: 1. 時間範囲を 11 月 1 日の午前 11 時から午後 1 時までに設定します。 - 2. \[**ページ URL** ] テーブルで、チェックアウト ページの URL をクリックします。 - 3. **Filter by**フィールドで、 **Attribute**を`userID`に、 **Value**を`user ID`に設定します。 + + 2. **Page URL** + + テーブルで、チェックアウト ページの URL をクリックします。 + + 3. **Filter by** + + フィールドで、 + + **Attribute** + + `userID`に、 + + **Value** + + `user ID`に設定します。 - あなたの組織が、11 月 10 日の午前 8 時にサイトのホームページの画像を最近更新したとします。その変更が主要な Web Vitals に影響を与えたかどうかを確認したいとします。これを**Web Vitals**で調査するには: + たとえば、あなたの組織が最近、11 月 10 日午前 8 時にサイトのホームページの画像を更新し、その変更がコアウェブバイタルに影響を与えたかどうかを確認したいとします。 **Web vitals**でこれを調査するには: 1. 時間範囲を 11 月 10 日の午前 7 時から午前 9 時までに設定します。 - 2. \[**ページ URL** ] テーブルで、ホームページの URL をクリックします。 - 3. **Filter by**フィールドで、 **Attribute**を`elementTagName`に、 **Value**を`IMG`に設定します。 + + 2. **Page URL** + + テーブルで、ホームページ URL をクリックします。 + + 3. **Filter by** + + フィールドで、 + + **Attribute** + + `elementTagName`に、 + + **Value** + + `IMG`に設定します。
@@ -214,9 +263,23 @@ New Relic は、特定のページ上のユーザーのセッションに関す セッション トレースを使用して、さまざまなユーザー セッションにわたるパターンを見つけることをお勧めします。コアの Web Vitals スコアの 1 つを改善できる場合、オプションの 1 つは、セッション トレースを調べて、さまざまなユーザー セッション間でどのような共通属性が共有されているかを確認することです。セッション トレースがサイトの改善にどのように役立つかを示す例を次に示します。 -1. **Web Vitals** タブで、パフォーマンスが低下しているページをクリックします。上の画像を例として使用すると、サイトの全体的な LCP スコアは良好ですが、個々のページの一部には改善が必要であることがわかります。 -2. **Web Vitals** ページの **Page URL** セクションを見ると、ホームページ URL の LCP スコアが 4 秒を超えていることがわかります。これはすべてのユーザーに影響するエラーによるものですか、それとも 1 種類のユーザーのみに影響するものですか?たとえば、特定のバージョンの Chrome または特定のオペレーティング システムを使用しているユーザーがページの読み込み時間が遅いことに気付いた場合、問題の特定の原因をより適切にトラブルシューティングできます。 -3. トラブルシューティングする URL をクリックすると、新しいウィンドウが表示されます。LCP スコアがサイト全体の LCP スコアよりもはるかに高いことに気づきました。このページの下部にある **Session traces** \[セッション トレース] セクションまでスクロールすると、実際のユーザー セッションのさまざまなサンプルが表示されます。これらのセッションでは、ユーザーが AJAX リクエスト、DOM ロードに関連する問題、JavaScript イベント、またはその他のエラーをどのように経験したかについて、より詳細な情報を得ることができます。 +1. **Web vitals** + + タブで、パフォーマンスが低下しているページをクリックします。 上の画像を例として使用すると、サイトの全体的な LCP スコアは良好ですが、個々のページの一部には改善が必要であることがわかります。 + +2. **Web vitals** + + ページの + + **Page URLs** + + セクションを見ると、ホームページ URL の LCP スコアが 4 秒を超えていることがわかります。 これはすべてのユーザーに影響するエラーによるものですか、それとも 1 種類のユーザーのみに影響するものですか? たとえば、特定のバージョンの Chrome または特定の OS を使用しているユーザーでページロードタイムが遅いことに気付いた場合、問題の特定の原因をより適切にトラブルシューティングできます。 + +3. トラブルシューティングする URL をクリックすると、新しいウィンドウが表示されます。 LCP スコアがサイト全体の LCP スコアよりもはるかに高いことに気づきました。 このページの下部にある + + **Session traces** + + セクションまでスクロールすると、実際のユーザー セッションのさまざまなサンプルが表示されます。 これらのセッションでは、ユーザーが AJAX リクエスト、DOM 読み込みに関連する問題、JavaScript イベント、またはその他のエラーをどのように経験したかについて、より詳細な情報を得ることができます。 ランダム化されたセッションからのデータは、Web ページとの数百または数千のユーザー操作全体のパターンを見つけるのに役立ちます。このランダムに選択されたデータにパターンが現れた場合、問題を解決するための計画によってページ スコアが向上するという確信が持てます。 diff --git a/src/i18n/content/kr/docs/accounts/accounts-billing/account-setup/troubleshoot-new-relics-password-email-address-login-problems.mdx b/src/i18n/content/kr/docs/accounts/accounts-billing/account-setup/troubleshoot-new-relics-password-email-address-login-problems.mdx index d9707b509da..34ab3ff4a99 100644 --- a/src/i18n/content/kr/docs/accounts/accounts-billing/account-setup/troubleshoot-new-relics-password-email-address-login-problems.mdx +++ b/src/i18n/content/kr/docs/accounts/accounts-billing/account-setup/troubleshoot-new-relics-password-email-address-login-problems.mdx @@ -34,7 +34,7 @@ New Relic에 성공적으로 로그인했지만 원하는 계정이나 데이터 1. [New Relic의 로그인 페이지](https://login.newrelic.com/login) 로 이동합니다. - 2. **Forgot your password** \[암호 분실을] 선택하고 지침을 따릅니다. + 2. **Forgot your password** 선택하고 지침을 따릅니다. 비밀번호 재설정 링크는 12시간 후에 만료됩니다. New Relic에서 이메일을 빨리 받지 못한 경우 [스팸 필터를](/docs/accounts-partnerships/accounts/account-setup/create-your-new-relic-account#email-whitelist)확인하거나 조직의 이메일 관리자에게 문제 해결 제안을 문의하거나 [support.newrelic.com](https://support.newrelic.com)에서 지원을 받으십시오. @@ -74,9 +74,9 @@ New Relic 이메일 설정에 대한 일반적인 정보는 [이메일 설정 > 처음 가입하면 설정 프로세스를 완료하고 로그인할 수 있도록 확인 이메일이 전송됩니다. 원래 계정 확인 이메일을 찾을 수 없는 경우: - 1. new Relic의 로그인 페이지( **[login.newrelic.com/login](https://login.newrelic.com/login)** )로 이동합니다. + 1. **[login.newrelic.com/login](https://login.newrelic.com/login)** 에 있는 뉴렐릭의 로그인 페이지로 이동하세요. - 2. **Forgot your password** \[암호 분실을] 선택하고 해당 단계를 완료합니다. + 2. **Forgot your password** 선택하고 해당 단계를 완료하세요. 이메일을 받지 못한 경우 [스팸 필터를](/docs/accounts-partnerships/accounts/account-setup/create-your-new-relic-account#email-whitelist)확인하십시오. 해당하는 경우 [이메일 허용 목록에 New Relic을 추가합니다](/docs/accounts/accounts/account-maintenance/account-email-settings#email-whitelist). 도움이 더 필요하면 [support.newrelic.com](https://support.newrelic.com)에서 지원을 받으세요. @@ -120,7 +120,7 @@ New Relic 이메일 설정에 대한 일반적인 정보는 [이메일 설정 * 캐싱 문제가 발생했습니다. 링크를 다시 시도하기 전에 브라우징 캐시를 지우거나 개인 브라우징 창을 사용하십시오. - **시크릿 모드** 라고도 하는 **개인** 정보 탐색은 탐색 기록 및 웹 캐시를 비활성화하는 개인 정보 보호 기능입니다. 시크릿 브라우징 창을 열려면 대부분의 브라우징 응용 프로그램에 대해 Windows의 경우 키보드 단축키 `CTRL+Shift+N` , Mac의 경우 `Command+Shift+N` 를 사용할 수 있습니다. + **Private browsing****incognito mode** 이라고도 하는 은 검색 기록과 웹 캐시를 비활성화하는 개인정보 보호 기능입니다. 시크릿 브라우징 창을 열려면 대부분의 브라우징 애플리케이션에서 Windows의 경우 키보드 단축키 `CTRL+Shift+N` , Mac의 경우 `Command+Shift+N` 사용할 수 있습니다. 그래도 문제가 해결되지 않으면 [support.newrelic.com](https://support.newrelic.com) 에서 지원을 받으십시오. @@ -155,7 +155,7 @@ New Relic 이메일 설정에 대한 일반적인 정보는 [이메일 설정 id="two-week-option" title="SAML 싱글 사인온(SSO) 문제로 인해 로그인할 수 없음" > - 조직에서 SAML SSO(Single Sign On) 솔루션을 사용하는 경우 로그인할 때 **암호** 필드를 건너뛸 수 있습니다. 암호를 재설정해야 하는 경우 조직의 시스템 관리자나 해당하는 IT 부서에 문의하십시오. + 조직에서 SAML SSO(Single Sign On) 솔루션을 사용하는 경우 로그인할 때 **Password** 필드를 건너뛸 수 있습니다. 비밀번호를 재설정해야 하는 경우 해당 조직의 시스템 관리자나 IT 부서에 문의하세요. 최근에 SAML SSO 설정을 활성화하거나 변경한 관리자가 로그인할 수 없는 경우 구성에 문제가 있을 수 있습니다.[최신 사용자 모델](/docs/accounts/original-accounts-billing/original-product-based-pricing/overview-user-models) 을 사용하는 고객은 특별한 복구 흐름을 사용하여 문제를 해결할 수 있습니다.[login.newrelic.com/recovery_access를](http://login.newrelic.com/recovery_access) 방문하십시오.SSO를 우회하고 조직에 대한 일회성 액세스 권한을 얻습니다. diff --git a/src/i18n/content/kr/docs/alerts-applied-intelligence/applied-intelligence/incident-workflows/incident-workflows.mdx b/src/i18n/content/kr/docs/alerts-applied-intelligence/applied-intelligence/incident-workflows/incident-workflows.mdx index f7fb34cfe33..a01ac4127ce 100644 --- a/src/i18n/content/kr/docs/alerts-applied-intelligence/applied-intelligence/incident-workflows/incident-workflows.mdx +++ b/src/i18n/content/kr/docs/alerts-applied-intelligence/applied-intelligence/incident-workflows/incident-workflows.mdx @@ -22,7 +22,7 @@ translationType: machine ## 워크플로는 어떻게 트리거됩니까? [#workflows-triggered] -워크플로 필터 및 일치하는 알림 트리거와 일치하는 문제에 대한 문제 이벤트에 의해 워크플로가 트리거됩니다. 워크플로는 기본적으로 권장 트리거로 구성되지만 3개의 점을 클릭한 다음 **Notify when**선택하여 각 대상에 대한 알림을 트리거할 시기를 제어할 수 있습니다. **Activated** 알림 트리거도 활성화해야 합니다. +A 워크플로우는 워크플로우 필터와 일치하는 공지 트리거와 일치하는 이슈에 대한 이슈 이벤트에 의해 트리거됩니다. 워크플로우는 기본적으로 추천 트리거로 구성되어 있지만, 점 3개를 클릭한 후 **Notify when** 선택하면 각 목적지에 대한 공지를 언제 트리거할지 제어할 수 있습니다. **Activated** 공지 트리거도 활성화되어야 합니다. 다음 이벤트는 워크플로를 트리거하고 관련 대상 끝점에 알림을 보냅니다. @@ -152,9 +152,9 @@ translationType: machine ## 워크플로 추가 [#add-workflow] -워크플로 기능은 **Alerts & AI** 메뉴 아래에 있습니다. +워크플로우 기능은 **Alerts & AI** 메뉴 아래에 있습니다. -1. **[one.newrelic.com > All capabilities](https://one.newrelic.com/all-capabilities) > Alerts & AI > Enrich and Notify > Workflow > Add a workflow** 로 이동합니다. +1. **[one.newrelic.com > All capabilities](https://one.newrelic.com/all-capabilities) > Alerts & AI > Enrich and Notify > Workflow > Add a workflow** 으)로 이동합니다. 2. 워크플로의 이름을 지정합니다. 이 필드는 필수이며 고유해야 합니다. @@ -167,7 +167,7 @@ translationType: machine 4. 전달하려는 올바른 문제의 범위를 좁히기 위해 속성, 연산자 및 값을 선택하여 쿼리를 작성합니다. - 워크플로 필터는 과거 문제의 데이터와 조건 메타데이터의 일부 정적 값(예: 조건 이름)으로 자동으로 채워집니다. 찾고 있는 값을 찾을 수 없으면 값을 입력하고 **Enter new** 를 선택합니다. 필터가 이전 문제와 일치하지 않는다는 경고가 가끔 발생합니다. + 워크플로우 필터는 과거 이슈의 데이터와 조건 메타데이터(예: 조건 이름)의 일부 정적 값으로 자동으로 채워집니다. 원하는 값을 찾을 수 없으면 값을 입력하고 **Enter new** 을 선택하세요. 필터가 이전 문제와 일치하지 않는다는 경고가 가끔 발생합니다. 5. 권장 사항: 팀 태그별로 문제를 필터링하여 해당 엔터티가 문제에 포함될 때 모든 팀이 알림을 받을 수 있도록 합니다. 단계는 아래 데모에서 찾을 수 있습니다. @@ -187,7 +187,7 @@ translationType: machine id="enrichments" title="데이터를 보강하는 방법" > - 현재 JSON 또는 숫자 출력만 Webhook, Jira 및 ServiceNow [대상](/docs/alerts-applied-intelligence/notifications/destinations/)으로 보낼 수 있고 이미지만 Slack, Pagerduty 및 이메일과 같은 다른 대상으로 보낼 수 있습니다. Webhook, Jira 및 ServiceNow에서 더 나은 결과를 얻으려면 `count`, `min`또는 `max`와 같은 단일 값 출력이 있는 쿼리를 사용하십시오. + 현재는 JSON 또는 숫자 출력만 Webhook 및 Jira [대상](/docs/alerts-applied-intelligence/notifications/destinations/) 으로 보낼 수 있습니다. 또한 Slack, PagerDuty, ServiceNow(앱) 및 이메일과 같은 다른 대상으로만 이미지를 보낼 수 있습니다. Webhook 및 Jira에서 더 나은 결과를 얻으려면 `count`, `min` 또는 `max` 와 같은 단일 값 출력이 있는 쿼리를 사용하십시오. 인리치먼트 사용에 대한 세부 정보: @@ -226,19 +226,30 @@ translationType: machine title="알리미" > * 워크플로를 저장하고 활성화하려면 알리미를 포함해야 합니다. + * 알리미를 설정하려면 알림 대상을 구성해야 합니다. - * **대상** 메뉴 항목을 통해 설정하거나 각 대상 채널 화면의 대상 선택 드롭다운에서 **새 대상 만들기** 항목을 통해 설정할 수 있습니다. + + * **Destination** + + 메뉴 항목을 통해 설정하거나 각 대상 채널 화면의 대상 선택 드롭다운에 있는 + + **Create new destination item** + + 통해 설정할 수 있습니다. + * 알림 대상에는 타사 플랫폼에 알림을 보내는 데 필요한 자격 증명과 문제의 필드를 대상 플랫폼의 필드로 매핑하여 보낸 메시지를 사용자 지정하는 옵션이 포함됩니다. + * 대상을 설정하고 메시지 템플릿을 구성하는 방법을 배우려면 [알림에 대한 설명서를 확인하십시오](/docs/alerts-applied-intelligence/notifications/destinations/) . + * (선택 사항) 각 알리미에 대해 받고 싶은 알림을 표시할 수 있습니다. 그렇지 않으면 알림이 기본적으로 각 알리미에게 전송됩니다. -8. 알리미 요구 사항을 완료하면 **update message** 클릭하십시오. +8. 알리미 요구사항을 완료한 후 **update message** 클릭하세요. 9. 선택 사항: 워크플로를 테스트합니다. 계정의 기존 데이터를 사용하여 새 구성에 대한 샘플 알림을 보냅니다. 테스트는 필터와 일치하는 기존 문제가 있는 경우에만 작동합니다. 데이터가 없으면 다음 메시지가 표시됩니다. `We don't see any issues matching your filter. That doesn't mean it won't work` . -10. 워크플로를 완료하려면 **Update workflow** \[워크플로 업데이트] 를 클릭하세요. +10. **Update workflow** 클릭하면 워크플로우가 완료됩니다. 기본적으로 계정당 최대 1000개의 워크플로를 보유할 수 있습니다. 계정 담당자에게 문의하여 더 높은 한도를 요청할 수 있습니다. @@ -250,31 +261,47 @@ translationType: machine 문제 알림 로그는 워크플로에서 생성된 모든 알림을 추적할 수 있는 자세한 기록을 사용자에게 제공합니다. 이 정보는 문제를 해결하고 워크플로 성능을 모니터링하며 알림이 올바른 대상으로 전송되는지 확인합니다. 결과적으로 사용자는 발생할 수 있는 모든 문제를 신속하게 식별하고 필요에 따라 수정 조치를 취할 수 있습니다. -문제 알림 로그에 액세스하려면 **[one.newrelic.com > Alerts & AI > Workflows](https://one.newrelic.com/alerts-ai/workflows)**로 이동한 다음 **Issue notification log 를**클릭하십시오. +문제 공지 로그에 액세스하려면 **[one.newrelic.com > Alerts & AI > Workflows](https://one.newrelic.com/alerts-ai/workflows)** 으로 이동한 다음 **Issue notification log** 클릭하세요. ### 문제 알림 로그 탐색 [#navigate-notification-log] 문제 알림 로그에는 다음 열이 표시됩니다. -1. **Time:** 이 열에는 워크플로 알림이 전송된 시간이 표시됩니다. +1. **Time:** -2. **Status:** 이 열에는 알림 상태가 표시됩니다. + 워크플로우 공지가 전송된 시간을 표시하는 열입니다. + +2. **Status:** + + 공지사항의 상태를 표시하는 열입니다. * 전송됨: 알림이 New Relic에서 성공적으로 전송되었습니다. * 실패: 알림이 New Relic에서 성공적으로 전송되지 않았습니다. * 지연됨: 알림이 New Relic에서 성공적으로 전송되었지만 공급업체에서 삭제되었습니다. -3. **대상:** 이 열에는 워크플로 알림을 받는 대상 유형(예: Slack 또는 이메일)이 표시됩니다. +3. **Destination:** + + 워크플로우 공지를 받는 대상 유형(예: Slack 또는 이메일)을 표시하는 열입니다. + +4. **Issue Name:** + + 해당 컬럼은 해당 이슈의 명칭을 표시하는 컬럼입니다. + +5. **Trigger Event:** + + 코리아플로우 공지를 촉발한 이슈 이벤트를 표시하는 컬럼입니다. 해당 이벤트를 클릭하시면 플로우 흐름이 어떻게 발생하는지에 대한 자세한 정보를 보실 수 있습니다. + +6. **Workflow:** -4. **Issue Name:** 이 열에는 워크플로 알림을 트리거한 문제의 이름이 표시됩니다. + 공지를 촉발시킨 워크플로우를 표시하는 컬럼입니다. -5. **Trigger Event:** 이 열에는 워크플로 알림을 트리거한 문제 이벤트가 표시됩니다. 이벤트를 클릭하면 워크플로가 트리거되는 방법에 대한 자세한 정보가 제공됩니다. +7. **Error Details:** -6. **Workflow:** 이 열에는 알림을 트리거한 워크플로가 표시됩니다. + 이 열에는 공지가 실패한 경우 추가 세부 정보가 표시됩니다. -7. **Error Details:** 이 열에는 알림이 실패한 경우 추가 세부 정보가 표시됩니다. +8. **Notification Result:** -8. **알림 결과:** 이 열에는 알림이 성공적으로 전송된 경우 타사의 증거(예: Slack 스레드 또는 JIRA 티켓)에 대한 링크가 표시됩니다. + 이 열에는 공지가 성공적으로 전송된 경우 제3자(예: Slack 스레드 또는 JIRA 지원 케이스)의 증거에 대한 링크가 표시됩니다. ## NrAi 알림 [#NrAiNotification] diff --git a/src/i18n/content/kr/docs/alerts-applied-intelligence/overview.mdx b/src/i18n/content/kr/docs/alerts-applied-intelligence/overview.mdx index 2ae7f121028..fb0fdddacde 100644 --- a/src/i18n/content/kr/docs/alerts-applied-intelligence/overview.mdx +++ b/src/i18n/content/kr/docs/alerts-applied-intelligence/overview.mdx @@ -11,7 +11,7 @@ import alertsOverviewPage from 'images/alerts_screenshot-full_alerts-and-ai-over import accountsAlertingConcepts from 'images/accounts_diagram_alerting-concepts.webp' -New Relic 모든 엔터티 또는 원격 측정 데이터 스트림의 문제에 대한 정보를 얻을 수 있는 유연한 시스템입니다. 감시할 데이터, 초과 시 문제를 의미하는 임계값, 알림을 받을 사람 및 방법을 정의합니다. 응용 인텔리전스는 비정상적인 동작을 식별하고 관련 문제의 상관 관계를 파악하며 근본 원인 분석을 지원하여 팀에 잠재적인 문제를 알리는 엔진입니다. +뉴렐릭 은 텔레메트리 데이터의 모든 부분 또는 스트림에 대한 문제에 대한 정보를 얻을 수 있는 유연한 시스템입니다. 감시할 데이터, 노인 값, 초과 시 문제를 의미하는 경계, 알림을 받을 사람 및 방법을 정의합니다. 응용 인텔리전스는 비정상적인 동작을 식별하고 관련 문제의 상관 관계를 파악하며 근본 원인 분석을 지원하여 팀에 잠재적인 문제를 알리는 엔진입니다. New Relic의 경고 및 응용 인텔리전스는 무엇이 중요한지 파악하고 억제된 소음을 관리하며 경고 피로를 완화하는 데 도움이 됩니다. @@ -37,7 +37,7 @@ New Relic 응용 인텔리전스를 통해 다음을 수행할 수 있습니다. />
- 기본 경고 및 AI 페이지를 열려면 **[one.newrelic.com](https://one.newrelic.com/all-capabilities) > Alerts & AI** 로 이동하세요. + 기본 알림 및 AI 페이지를 열려면 **[one.newrelic.com](https://one.newrelic.com/all-capabilities) > Alerts & AI** 으로 이동하세요.
경고 조건을 설정하고 알림을 받으려면 몇 가지 단계를 수행해야 합니다. 시작하는 데 필요한 모든 단계는 [튜토리얼 시리즈를](/docs/tutorial-create-alerts/create-new-relic-alerts/) 확인하세요. @@ -77,7 +77,9 @@ New Relic 응용 인텔리전스를 통해 다음을 수행할 수 있습니다. - **[상태](/docs/alerts-applied-intelligence/new-relic-alerts/alert-conditions/create-alert-conditions/)** + + **[Condition](/docs/alerts-applied-intelligence/new-relic-alerts/alert-conditions/create-alert-conditions/)** + @@ -87,7 +89,9 @@ New Relic 응용 인텔리전스를 통해 다음을 수행할 수 있습니다. - **[결정](/docs/alerts-applied-intelligence/applied-intelligence/incident-intelligence/change-applied-intelligence-correlation-logic-decisions/)** + + **[Decision](/docs/alerts-applied-intelligence/applied-intelligence/incident-intelligence/change-applied-intelligence-correlation-logic-decisions/)** + @@ -97,7 +101,9 @@ New Relic 응용 인텔리전스를 통해 다음을 수행할 수 있습니다. - **[목적지](/docs/alerts-applied-intelligence/notifications/destinations/)** + + **[Destination](/docs/alerts-applied-intelligence/notifications/destinations/)** + @@ -107,7 +113,9 @@ New Relic 응용 인텔리전스를 통해 다음을 수행할 수 있습니다. - **[이벤트](/docs/data-apis/understand-data/new-relic-data-types/#events-new-relic)** + + **[Event](/docs/data-apis/understand-data/new-relic-data-types/#events-new-relic)** + @@ -117,7 +125,9 @@ New Relic 응용 인텔리전스를 통해 다음을 수행할 수 있습니다. - **[사건](/docs/alerts-applied-intelligence/new-relic-alerts/alert-incidents/view-event-details-incidents/)** + + **[Incident](/docs/alerts-applied-intelligence/new-relic-alerts/alert-incidents/view-event-details-incidents/)** + @@ -127,7 +137,9 @@ New Relic 응용 인텔리전스를 통해 다음을 수행할 수 있습니다. - **[문제](/docs/new-relic-solutions/get-started/glossary/#issue)** + + **[Issue](/docs/new-relic-solutions/get-started/glossary/#issue)** + @@ -137,7 +149,9 @@ New Relic 응용 인텔리전스를 통해 다음을 수행할 수 있습니다. - **[공고](/docs/alerts-applied-intelligence/notifications/intro-notifications/)** + + **[Notification](/docs/alerts-applied-intelligence/notifications/intro-notifications/)** + @@ -147,7 +161,9 @@ New Relic 응용 인텔리전스를 통해 다음을 수행할 수 있습니다. - **[정책](/docs/alerts-applied-intelligence/new-relic-alerts/alert-policies/create-edit-or-find-alert-policy/)** + + **[Policy](/docs/alerts-applied-intelligence/new-relic-alerts/alert-policies/create-edit-or-find-alert-policy/)** + @@ -157,7 +173,9 @@ New Relic 응용 인텔리전스를 통해 다음을 수행할 수 있습니다. - **[한계점](/docs/alerts-applied-intelligence/new-relic-alerts/advanced-alerts/advanced-techniques/set-thresholds-alert-condition)** + + **[Threshold](/docs/alerts-applied-intelligence/new-relic-alerts/advanced-alerts/advanced-techniques/set-thresholds-alert-condition)** + @@ -167,7 +185,9 @@ New Relic 응용 인텔리전스를 통해 다음을 수행할 수 있습니다. - **[워크플로](/docs/alerts-applied-intelligence/applied-intelligence/incident-workflows/incident-workflows/)** + + **[Workflow](/docs/alerts-applied-intelligence/applied-intelligence/incident-workflows/incident-workflows/)** + diff --git a/src/i18n/content/kr/docs/apis/intro-apis/introduction-new-relic-apis.mdx b/src/i18n/content/kr/docs/apis/intro-apis/introduction-new-relic-apis.mdx index 1a400148713..86c0e895e81 100644 --- a/src/i18n/content/kr/docs/apis/intro-apis/introduction-new-relic-apis.mdx +++ b/src/i18n/content/kr/docs/apis/intro-apis/introduction-new-relic-apis.mdx @@ -89,7 +89,7 @@ NerdGraph는 최신 API이며 이전 API 중 일부를 한 곳에 모으려는 ## 기능별 API [#product-apis] -APM, 인프라 모니터링, ,및 경고와 같은 New Relic 도구 및 기능은 종종 함께 사용되며 때로는 기능이 겹칠 수 있습니다. 이것이 바로 여러 API가 각 영역과 관련될 수 있는 이유입니다. 일부 API 기능은 [기능 및 데이터에 대한 액세스 권한](/docs/accounts/accounts-billing/general-account-settings/factors-affecting-access-features-data) 에 따라 달라집니다. +APM, 인프라 모니터링, 및 알림과 같은 뉴렐릭 도구 및 기능은 함께 사용되는 경우가 많으며 때로는 기능이 겹칠 수 있습니다. 이것이 바로 여러 API가 각 영역과 관련될 수 있는 이유입니다. 일부 API 기능은 [기능 및 데이터에 대한 액세스 권한](/docs/accounts/accounts-billing/general-account-settings/factors-affecting-access-features-data) 에 따라 달라집니다. ,및 경고와 같 id="mobile-api" title="모바일 모니터링" > - 그만큼 관련 API 리소스는 다음과 같습니다. + 관련 API 리소스는 다음과 같습니다. diff --git a/src/i18n/content/kr/docs/apis/nerdgraph/get-started/introduction-new-relic-nerdgraph.mdx b/src/i18n/content/kr/docs/apis/nerdgraph/get-started/introduction-new-relic-nerdgraph.mdx index 7147d7a6af2..b0453f24738 100644 --- a/src/i18n/content/kr/docs/apis/nerdgraph/get-started/introduction-new-relic-nerdgraph.mdx +++ b/src/i18n/content/kr/docs/apis/nerdgraph/get-started/introduction-new-relic-nerdgraph.mdx @@ -25,11 +25,11 @@ NerdGraph는 오버페칭이나 언더페칭 없이 필요한 데이터를 정 시작하기 전에: -* 뉴렐릭 계정이 있어야 +* 뉴렐릭 계정이 필요하며 해당 계정을 사용하면 쿼리 및 변형에 포함해야 하는 API - 쿼리 및 변형을 포함하는 데 필요한 API에 액세스할 수 있습니다. + 에 액세스할 수 있습니다. * 사용자 유형 및 할당된 역할은 NerdGraph 권한에 영향을 줄 수 있습니다. 자세한 내용은 [액세스에 영향을 미치는 요소](/docs/accounts/accounts-billing/account-structure/factors-affecting-access-features-data#user-permissions) 를 참조하십시오. @@ -57,8 +57,13 @@ NerdGraph API를 시험 사용하는 손쉬운 방법은 NerdGraph API 탐색기 NerdGraph 기능은 두 가지 주요 범주로 나눌 수 있습니다. -* **데이터 쿼리.** 프로그래밍 방식의 워크플로에서 데이터를 사용하거나 맞춤형 데이터 시각화를 위한 [New Relic 앱](https://developer.newrelic.com/build-apps) 을 구축하는 등 다양한 목적으로 데이터를 가져올 수 있습니다. -* **기능 구성.** 다양한 구성을 사용할 수 있으며 시간이 지나면 더 많이 추가될 것입니다. 태그 추가, 워크로드 구성 또는 "골든 메트릭" 사용자 지정과 같은 작업을 수행할 수 있습니다. +* **Querying data.** + + 프로그래밍 방식의 워크플로우에서 사용하거나 사용자 지정 데이터 시각화를 위한 [뉴렐릭 앱을](https://developer.newrelic.com/build-apps) 구축하는 등 다양한 목적으로 데이터를 가져올 수 있습니다. + +* **Configuring features.** + + 다양한 설정을 사용할 수 있으며 시간이 지남에 따라 더 많은 설정이 추가될 예정입니다. 태그 추가, 워크로드 구성, "골든 메트릭" 사용자 지정 등의 작업을 수행할 수 있습니다. NerdGraph를 사용하여 광범위한 데이터를 반환하고 구성할 수 있습니다. NerdGraph가 무엇을 할 수 있는지 확인하는 한 가지 방법은 쿼리 작성을 시작하고 [NerdGraph 탐색기](/docs/apis/nerdgraph/get-started/nerdgraph-explorer)를 사용하여 스키마를 탐색하는 것입니다. @@ -222,9 +227,9 @@ NerdGraph를 사용하여 광범위한 데이터를 반환하고 구성할 수 * [애플리케이션 토큰 검색](/docs/apis/nerdgraph/examples/mobile-monitoring-config-nerdgraph/#get-mobile-token) - * [](/docs/apis/nerdgraph/examples/mobile-monitoring-config-nerdgraph/#configure-mobile-application) + * [구성의 예](/docs/apis/nerdgraph/examples/mobile-monitoring-config-nerdgraph/#configure-mobile-application) - [구성의 예](/docs/apis/nerdgraph/examples/mobile-monitoring-config-nerdgraph/#configure-mobile-application) + [](/docs/apis/nerdgraph/examples/mobile-monitoring-config-nerdgraph/#configure-mobile-application) diff --git a/src/i18n/content/kr/docs/apm/agents/nodejs-agent/getting-started/introduction-new-relic-nodejs.mdx b/src/i18n/content/kr/docs/apm/agents/nodejs-agent/getting-started/introduction-new-relic-nodejs.mdx index 13f5df62062..88374872f0a 100644 --- a/src/i18n/content/kr/docs/apm/agents/nodejs-agent/getting-started/introduction-new-relic-nodejs.mdx +++ b/src/i18n/content/kr/docs/apm/agents/nodejs-agent/getting-started/introduction-new-relic-nodejs.mdx @@ -106,11 +106,11 @@ Node.js 에이전트를 설치한 후 계측을 확장합니다. diff --git a/src/i18n/content/kr/docs/apm/agents/php-agent/advanced-installation/docker-other-container-environments-install-php-agent.mdx b/src/i18n/content/kr/docs/apm/agents/php-agent/advanced-installation/docker-other-container-environments-install-php-agent.mdx index f62c76c5d07..6451e3b7ae5 100644 --- a/src/i18n/content/kr/docs/apm/agents/php-agent/advanced-installation/docker-other-container-environments-install-php-agent.mdx +++ b/src/i18n/content/kr/docs/apm/agents/php-agent/advanced-installation/docker-other-container-environments-install-php-agent.mdx @@ -54,11 +54,11 @@ Docker용 PHP 에이전트 컨테이너를 설정하려면: 2. 에이전트를 설치하려면 New Relic의 [tar 파일 다운로드 사이트](/docs/agents/php-agent/installation/php-agent-installation-tar-file) 에서 PHP 에이전트 패키지를 다운로드하고 `install` 인수와 함께 `newrelic-install` 스크립트를 실행합니다. -3. `newrelic.ini` 파일에서 애플리케이션 이름을 설정하고 +3. `newrelic.ini` 파일에서 `newrelic.appname` 및 `newrelic.license` 항목을 사용하여 애플리케이션 이름과 - `newrelic.appname` 및 `newrelic.license` 항목으로 . + 설정합니다. 4. `newrelic.ini` 파일에서 `newrelic.daemon.address` 옵션을 설정하여 에이전트가 데몬을 가리키도록 합니다. 이 옵션의 값이 `HOST:PORT` 인지 확인하십시오. 여기서 `HOST` 은 데몬이 실행 중인 호스트의 이름 또는 IP 주소이고 `PORT` 는 데몬이 수신 대기하는 포트 번호입니다. @@ -74,11 +74,11 @@ Docker용 PHP 에이전트 컨테이너를 설정하려면: 2. 에이전트를 설치하려면 New Relic의 [tar 파일 다운로드 사이트](/docs/agents/php-agent/installation/php-agent-installation-tar-file) 에서 PHP 에이전트 패키지를 다운로드하고 `install` 인수와 함께 `newrelic-install` 스크립트를 실행합니다. -3. 애플리케이션 이름을 설정하고 +3. `newrelic.ini` 파일의 `newrelic.license` 및 `newrelic.appname` 항목을 통해 애플리케이션 이름과 - `newrelic.ini` 파일의 `newrelic.license` 및 `newrelic.appname` 항목을 통해. + 설정합니다. **[download.newrelic.com/php_agent/release/](https://download.newrelic.com/php_agent/release/)** + + 로 이동하세요. + + * `YOUR_LICENSE_KEY`: 이것을 - . `"REPLACE_WITH_REAL_KEY"` 는 PHP 에이전트의 기본 **newrelic.ini** 파일에 있는 실제 문자열입니다. 해당 문자열을 편집하지 마십시오. `sed` 명령은 기본 문자열을 따옴표로 묶인 실제 40자 키로 바꿉니다. + 로 바꾸세요. `"REPLACE_WITH_REAL_KEY"` 은 PHP 에이전트의 기본 + + **newrelic.ini** + + 파일에 있는 실제 문자열입니다. 해당 문자열을 편집하지 마세요. `sed` 명령은 기본 문자열을 따옴표로 묶은 실제 40자 키로 바꿉니다. * `YOUR_APPLICATION_NAME`: 따옴표로 묶인 애플리케이션 이름으로 바꿉니다. diff --git a/src/i18n/content/kr/docs/apm/agents/php-agent/getting-started/introduction-new-relic-php.mdx b/src/i18n/content/kr/docs/apm/agents/php-agent/getting-started/introduction-new-relic-php.mdx index 07101b65eb4..e7d668760a2 100644 --- a/src/i18n/content/kr/docs/apm/agents/php-agent/getting-started/introduction-new-relic-php.mdx +++ b/src/i18n/content/kr/docs/apm/agents/php-agent/getting-started/introduction-new-relic-php.mdx @@ -26,36 +26,46 @@ New Relic PHP 에이전트를 사용하여 [My app is slow 자습서](/docs/jour />
- **[one.newrelic.com > All capabilties](https://one.newrelic.com/all-capabilities) > APM & services > (앱 선택) > Summary**: PHP 에이전트를 설치한 후 앱의 성능 요약을 봅니다. + **[one.newrelic.com > All capabilities](https://one.newrelic.com/all-capabilities) > APM & services > (select an app) > Summary**: PHP 에이전트를 설치한 후 앱 성능 요약을 확인하세요.
-**앱의 큰 그림 보기** + + **View the big picture of your app** + * 앱의 [Apdex(사용자 만족도)](/docs/apm/new-relic-apm/apdex/apdex-measuring-user-satisfaction) 모니터링 * [앱에 대한 대략적인 요약 보기](/docs/apm/applications-menu/monitoring/apm-overview-page) * 앱의 [아키텍처 맵](/docs/data-analysis/user-interface-functions/view-your-data/service-maps-visualize-monitor-apps-entire-architecture) 만들기 -**오류 및 문제를 빠르게 찾기** + + **Find errors and problems quickly** + * [주요 거래](/docs/apm/transactions/key-transactions/key-transactions-tracking-important-transactions-or-events) 추적 * New Relic에 보내는 모든 [사용자 지정 메트릭](/docs/agents/manage-apm-agents/agent-data/custom-metrics) 을 포함하여 가장 중요한 메트릭 타임슬라이스 데이터에 대한 [사용자 지정 가능한 차트를 검색하고 만듭니다](/docs/insights/new-relic-insights/explore/metric-explorer-search-chart-metrics-sent-new-relic-agents) . * [오류나](/docs/alerts/alert-policies/understanding-alert-policies/alerting-new-relic) 문제가 사용자에게 영향을 미치기 전에 발생하면 팀에 알립니다. * [배포 후](/docs/agents/php-agent/features/recording-deployments-using-php-script) 성능 추적 -**성능 세부정보 드릴다운** + + **Drill down into performance details** + * 코드 수준 [트랜잭션 추적](/docs/apm/transactions/transaction-traces/transaction-traces) 검사 * [데이터베이스 쿼리 추적](/docs/apm/transactions/transaction-traces/sql-statements) 검사 * [오류 추적](/docs/apm/applications-menu/events/viewing-apm-errors-error-traces) 검사 -**인프라 데이터에 대한 로그 보기** + + **View logs for your infrastructure data** + 로그와 애플리케이션의 데이터를 함께 가져와 문제 해결을 더 쉽고 빠르게 만듭니다. 다른 UI 페이지로 전환할 필요가 없습니다. * [컨텍스트의 로그를](/docs/logs/logs-context/configure-logs-context-php/) 사용하면 앱의 UI에서 직접 오류 및 추적과 관련된 로그 메시지를 볼 수 있습니다. * Kubernetes 클러스터와 같은 [인프라 데이터](/docs/logs/forward-logs/forward-your-logs-using-infrastructure-agent/) 컨텍스트에서 로그를 볼 수도 있습니다. -**비즈니스 데이터 분석** + + **Analyze business data** + PHP 에이전트를 사용하여 데이터를 구성, 쿼리 및 시각화하여 애플리케이션 성능 및 고객 경험에 대한 주요 질문에 답하십시오. @@ -112,7 +122,7 @@ PHP 에이전트를 설치하기 전에 시스템이 [시스템 요구 사항](/ PHP 데이터 추가 -**표준 설치** 의 경우 다음을 참조하십시오. +**standard installations** 에 대해서는 다음을 참조하세요. * [PHP 에이전트 설치 개요](/docs/agents/php-agent/installation/php-agent-installation-overview) (가장 일반적인 설정을 위한 기본 설치 단계). * [RedHat 또는 CentOS에 설치](/docs/agents/php-agent/installation/php-agent-installation-redhat-and-centos) @@ -120,7 +130,7 @@ PHP 에이전트를 설치하기 전에 시스템이 [시스템 요구 사항](/ * [tar 아카이브로 설치](/docs/agents/php-agent/installation/php-agent-installation-tar-file) (Linux 변형, OpenSolaris, SmartOS, FreeBSD, macOS 등과 같은 지원되는 모든 시스템에서 사용하는 일반적인 방법) * [newrelic-install 스크립트](/docs/agents/php-agent/installation/newrelic-install-script) (일부 설치 작업을 자동화하는 대화형 스크립트를 사용하는 방법) -다른 유형의 PHP 설치 및 **고급 설치** 주제는 다음을 참조하십시오. +다른 유형의 PHP 설치 및 **advanced installation** 주제는 다음을 참조하세요. * [PHP 에이전트 설치: 비표준 PHP](/docs/agents/php-agent/installation/php-agent-installation-non-standard-php) * [PHP 데몬 시작](/docs/agents/php-agent/installation/starting-php-daemon-advanced) (표준 New Relic 설치는 데몬을 자동으로 시작하지만 [수동으로 데몬을 시작할](/docs/agents/php-agent/installation/starting-php-daemon-advanced#selecting-external) 수도 있음) @@ -141,11 +151,11 @@ PHP 에이전트를 설치하기 전에 시스템이 [시스템 요구 사항](/ 에이전트를 설치한 후 더 나아가 에이전트의 계측을 확장합니다. -* [페이지 로드 타이밍](/docs/agents/php-agent/features/page-load-timing-php): PHP 에이전트를 다음과 통합합니다. +* [페이지 로드 타이밍](/docs/agents/php-agent/features/page-load-timing-php): PHP 에이전트를 [](/docs/browser/new-relic-browser/getting-started/new-relic-browser) - 최종 사용자 활동에 대한 가시성을 확보합니다. + 와 통합하여 최종 사용자 활동에 대한 가시성을 확보합니다. * [사용자 정의 계측](/docs/agents/php-agent/features/php-custom-instrumentation) : 프레임워크 계측의 일부로 캡처되지 않은 계측 트랜잭션. diff --git a/src/i18n/content/kr/docs/apm/agents/python-agent/configuration/python-agent-configuration.mdx b/src/i18n/content/kr/docs/apm/agents/python-agent/configuration/python-agent-configuration.mdx index 05b9d36e68e..4e8532f4069 100644 --- a/src/i18n/content/kr/docs/apm/agents/python-agent/configuration/python-agent-configuration.mdx +++ b/src/i18n/content/kr/docs/apm/agents/python-agent/configuration/python-agent-configuration.mdx @@ -13,7 +13,7 @@ import apmConfigSettings from 'images/apm_diagram_config-settings.webp' [Python 에이전트](/docs/agents/python-agent/getting-started/introduction-new-relic-python) 를 사용하면 구성 옵션을 사용하여 기본 에이전트 동작 에이전트를 변경할 수 있습니다. -유일하게 필요한 Python 에이전트 구성 설정은 . 라이센스 키는 에이전트가 애플리케이션 데이터를 보고하는 계정을 식별합니다. 애플리케이션을 호스팅하는 방법에 따라 라이센스 키는 구성 파일 또는 환경 변수를 통해 제공될 수 있습니다. +유일한 필수 Python 에이전트 구성 설정은 입니다. 볼륨 키는 에이전트가 애플리케이션 데이터를 보고하는 계정을 식별합니다. 애플리케이션을 호스팅하는 방법에 따라 라이센스 키는 설정 파일이나 환경 변수를 통해 제공될 수 있습니다. ## 구성 방법 및 우선 순위 [#options] @@ -28,7 +28,7 @@ Python 에이전트는 구성에 대해 다음과 같은 우선 순위를 따릅 />
- Python 에이전트를 사용하면 요청별 옵션이 서버 측 구성을 재정의합니다. 활성화된 경우 서버 측 값이 비어 있는 경우에도 서버 측 구성이 에이전트 구성 파일의 **모든** 해당 값을 재정의합니다. 에이전트 구성 파일은 환경 변수를 재정의합니다. 환경 변수는 에이전트 기본값을 재정의합니다. + Python 에이전트를 사용하면 요청별 옵션이 서버 측 구성을 재정의합니다. 활성화된 경우 서버 측 구성은 서버 측 값이 비어 있는 경우에도 에이전트 구성 파일의 **all** 해당 값을 재정의합니다. 에이전트 구성 파일은 환경 변수를 재정의합니다. 환경 변수는 에이전트 기본값을 재정의합니다.
각 구성 방법에 대한 자세한 설명은 다음과 같습니다. @@ -59,10 +59,10 @@ Python 에이전트는 구성에 대해 다음과 같은 우선 순위를 따릅 id="server-side-configuration" title="서버 측 구성" > - [서버 측 구성](/docs/agents/manage-apm-agents/configuration/server-side-agent-configuration) 을 사용하면 New Relic UI에서 특정 설정을 구성할 수 있습니다. 이렇게 하면 변경 사항이 여러 호스트에서 실행되는 경우에도 모든 에이전트에 자동으로 적용됩니다. 사용 가능한 경우 이 문서에는 개별 구성 옵션 아래의 서버 측 구성에 대한 UI 레이블이 서버 **측 레이블** 로 포함됩니다. + [서버 측 설정을 사용](/docs/agents/manage-apm-agents/configuration/server-side-agent-configuration) 하면 뉴렐릭 UI의 특정 설정을 구성할 수 있습니다. 이렇게 하면 여러 호스트에서 실행되는 경우에도 모든 에이전트에 변경 사항이 자동으로 적용됩니다. 사용 가능한 경우 이 문서에는 개별 구성 옵션 아래에 서버 측 구성에 대한 UI 레이블이 **Server-side label** 으로 포함되어 있습니다. - 서버 측 구성이 활성화된 경우 에이전트는 UI에서 설정할 **수** 있는 구성 파일의 모든 값을 무시합니다. UI 값이 비어 있어도 에이전트는 이를 빈 문자열로 처리하여 에이전트 구성 파일을 사용하지 않습니다. + 서버 측 구성이 활성화된 경우 에이전트는 UI에 설정된 **could** 구성 파일의 모든 값을 무시합니다. UI 값이 비어 있어도 에이전트는 이를 빈 문자열로 처리하고 에이전트 구성 파일을 사용하지 않습니다. @@ -71,7 +71,7 @@ Python 에이전트는 구성에 대해 다음과 같은 우선 순위를 따릅 id="environment-variables" title="환경 변수" > - 환경 변수를 사용하면 특정 핵심 설정에 대한 기본값을 재정의할 수 있습니다. 동등한 설정이 에이전트 구성 파일에 명시적으로 나열되어 있으면 구성 파일 설정이 환경 변수보다 우선합니다. 사용 가능한 경우 환경 변수는 개별 구성 옵션 아래에서 **Environ 변수** 로 문서화됩니다. + 환경 변수를 사용하면 특정 핵심 설정에 대한 기본값을 재정의할 수 있습니다. 동등한 설정이 에이전트 구성 파일에 명시적으로 나열되어 있는 경우 구성 파일 설정이 환경 변수보다 우선합니다. 사용 가능한 경우 환경 변수는 아래 개별 구성 옵션 아래에 **Environ variable** 으로 설명되어 있습니다. 간단한 구성의 경우 [서버 측 구성](#server-side-configuration) 과 함께 환경 변수를 사용하고 에이전트 구성 파일을 완전히 피할 수 있습니다. 이것은 New Relic 애드온을 설치하면 필요한 환경 변수가 자동으로 채워지는 [Heroku](/docs/agents/python-agent/hosting-services/python-agent-heroku) 의 기본 설정입니다. @@ -81,11 +81,15 @@ Python 에이전트는 구성에 대해 다음과 같은 우선 순위를 따릅
@@ -500,7 +504,7 @@ Python 에이전트는 구성에 대해 다음과 같은 우선 순위를 따릅
- * Node.js 에이전트를 다음과 통합합니다. + * Node.js 에이전트를 [](/docs/browser/new-relic-browser/getting-started/new-relic-browser) - . + 과 통합합니다. * [브라우저 모니터링의 페이지 로드 타이밍 프로세스를](/docs/agents/nodejs-agent/supported-features/page-load-timing-nodejs) 통해 사용자 활동에 대한 가시성을 확보합니다.
- **환경 변수** + + **Environment variable** + - **구성 설정** + + **Configuration setting** +
- 지정합니다 귀하의 New Relic 계정. 이 키는 앱의 지표를 New Relic 계정과 연결합니다. + 뉴렐릭 계정의 을(를) 지정합니다. 이 키는 앱의 지표를 뉴렐릭 계정과 연결합니다.
**.ini** 구성 파일에서 `true` 로 설정하고 **and** **Account settings** 페이지에서 활성화하세요. 자세한 내용은 [높은 보안을](/docs/accounts-partnerships/accounts/security/high-security) 참조하세요. , 거래 이벤트 등이 있습니다. 아래 일반 속성 설정을 사용하여 4개 대상 모두에 대한 속성을 구성하는 것 외에도 대상별로 구성할 수도 있습니다. +속성은 프로세서 트레이스, 트레이스 오류, 및 트랜잭션 이벤트에 대한 정보를 제공하는 핵심 가치 쌍입니다. 아래의 일반 속성 설정을 사용하여 4개 대상 모두에 대한 속성을 구성하는 것 외에도 대상별로 구성할 수도 있습니다. 자세한 내용은 [Python 에이전트 속성](/docs/agents/python-agent/attributes/python-agent-attributes) , 속성 [활성화 및 비활성화](/docs/agents/python-agent/attributes/enabling-disabling-attributes-python) 및 [속성 예제](/docs/agents/python-agent/attributes/python-attribute-examples) 를 참조하십시오. @@ -3276,7 +3280,13 @@ Python 에이전트는 구성에 대해 다음과 같은 우선 순위를 따릅 이벤트 수집 설정은 New Relic으로 전송되는 이벤트 유형 데이터의 양을 제한합니다. 이러한 설정을 사용할 때 다음과 같은 중요한 사항을 고려하십시오. * 이벤트 수집 설정은 전체 애플리케이션이 아니라 에이전트의 단일 인스턴스에 대한 제한에 영향을 줍니다. 전체 애플리케이션에서 제한을 설정하는 방법은 아래 사용 예를 참조하십시오. -* [실시간 스트리밍](/docs/agents/manage-apm-agents/agent-data/real-time-streaming) 은 5초마다(분당 12회) 데이터를 전송하지만 이벤트 수집 설정은 여전히 **분당** 이벤트 비율에 영향을 줍니다. 실시간 스트리밍을 활성화하거나 비활성화하기 위해 이러한 설정을 변경할 필요가 없습니다. + +* [실시간 스트리밍은](/docs/agents/manage-apm-agents/agent-data/real-time-streaming) 5초마다(분당 12회) 데이터를 전송하지만 이벤트 수집 설정은 여전히 + + **minute** + + 당 이벤트 속도에 영향을 미칩니다. 실시간 스트리밍을 활성화하거나 비활성화하기 위해 이러한 설정을 변경할 필요는 없습니다. + * 실시간 스트리밍(기본적으로 활성화됨)을 사용하면 New Relic은 5초 간격으로 엔터티에 대한 이벤트 수집 제한을 표시합니다. 예를 들어 구성 파일에서 제한 값을 1200으로 설정하면 New Relic에서 100으로 표시됩니다. ### 사용 예 @@ -3369,7 +3379,7 @@ event_harvest_config.harvest_limits.span_event_data = 250 - `1200` + `3600` @@ -4872,7 +4882,9 @@ Python 에이전트에 대한 로그 구성에 대한 몇 가지 팁 [은 컨텍 허용 목록에 나열된 예외는 `strip_exception_messages.enabled` 이 `true` 인 경우에도 메시지가 제거되지 않습니다. 허용 목록은 공백으로 구분된 예외 유형 문자열이며 각각 `module:exception_name` 형식입니다. 기본 제공 예외를 `exception_name` 으로 나열합니다. 앞에 `module:` 를 붙일 필요가 없습니다. - **예: 내장 예외 및 사용자 정의 예외** + + **Example: Built-in exception and user-defined exception** + ```py KeyError my_module:MyException @@ -5168,7 +5180,7 @@ Python 에이전트에 대한 로그 구성에 대한 몇 가지 팁 [은 컨텍 - 일반적으로 에이전트는 후행 점 및 프로세스 ID가 있는 dyno 이름을 보고합니다(예: **worker.3** ). 후행 데이터 없이 보고할 접두사를 지정하여 이 후행 데이터를 제거할 수 있습니다(예: **worker** ). + 일반적으로 에이전트는 뒤에 점과 프로세스 ID가 있는 dyno 이름을 보고합니다(예: **worker.3** ). 후행 데이터 없이 보고할 접두사를 지정하여 이 후행 데이터를 제거할 수 있습니다(예: **worker** ).
diff --git a/src/i18n/content/kr/docs/apm/agents/python-agent/getting-started/introduction-new-relic-python.mdx b/src/i18n/content/kr/docs/apm/agents/python-agent/getting-started/introduction-new-relic-python.mdx index 37d59a2c191..b8d76a6ff33 100644 --- a/src/i18n/content/kr/docs/apm/agents/python-agent/getting-started/introduction-new-relic-python.mdx +++ b/src/i18n/content/kr/docs/apm/agents/python-agent/getting-started/introduction-new-relic-python.mdx @@ -5,8 +5,6 @@ tags: - Python agent - Getting started metaDescription: An introduction to New Relic application performance monitoring (APM) for Python applications. -signupBanner: - text: Monitor and improve your entire stack. 100GB free. Forever. freshnessValidatedDate: never translationType: machine --- diff --git a/src/i18n/content/kr/docs/apm/agents/python-agent/python-agent-api/backgroundtask-python-agent-api.mdx b/src/i18n/content/kr/docs/apm/agents/python-agent/python-agent-api/backgroundtask-python-agent-api.mdx index 30b0e621aaf..882b15e8f46 100644 --- a/src/i18n/content/kr/docs/apm/agents/python-agent/python-agent-api/backgroundtask-python-agent-api.mdx +++ b/src/i18n/content/kr/docs/apm/agents/python-agent/python-agent-api/backgroundtask-python-agent-api.mdx @@ -1,12 +1,12 @@ --- title: background_task(파이썬 에이전트 API) type: apiDoc -shortDescription: 백그라운드 작업 또는 기타 웹이 아닌 트랜잭션을 계측하는 데 사용됩니다. +shortDescription: 백그라운드 작업이나 유한 런타임의 기타 SSL을 제거하는 데 사용됩니다. tags: - Agents - Python agent - Python agent API -metaDescription: 'Python API: Used to instrument a background task or other non-web transaction.' +metaDescription: 'Python API: Used to instrument a background task or other non-web transaction of finite run time.' freshnessValidatedDate: never translationType: machine --- @@ -17,11 +17,11 @@ translationType: machine newrelic.agent.background_task(application=None, name=None, group=None) ``` -백그라운드 작업 또는 기타 웹이 아닌 트랜잭션을 계측하는 데 사용됩니다. +백그라운드 작업이나 유한 런타임의 기타 SSL을 제거하는 데 사용됩니다. ## 설명 -이 Python 데코레이터는 백그라운드 작업 또는 기타 [웹이 아닌 트랜잭션](/docs/apm/transactions/intro-transactions/monitor-background-processes-other-non-web-transactions) 을 계측하는 데 사용할 수 있습니다. 이것은 일반적으로 작업자 프로세스, 작업 기반 시스템 및 독립 실행형 스크립트와 같은 웹이 아닌 활동을 계측하는 데 사용됩니다. 백그라운드 작업으로 표시된 트랜잭션은 APM UI에서 웹이 아닌 트랜잭션으로 표시되며 웹 트랜잭션과 구분됩니다. +이 Python 데코레이터는 제한된 런타임의 백그라운드 작업이나 기타 [비 웹 프로세서](/docs/apm/transactions/intro-transactions/monitor-background-processes-other-non-web-transactions) 에 사용될 수 있습니다. 이는 일반적으로 작업자 프로세스, 작업 기반 시스템 및 독립 실행형 스크립트와 같은 비웹 활동에 사용됩니다. 백그라운드 작업으로 표시된 트랜잭션은 APM UI에서 비웹 프로세서로 표시되며 웹 트랜잭션과 분리됩니다. 함수가 아직 계측되지 않은 경우 [`function_trace()`](/docs/apm/agents/python-agent/python-agent-api/functiontrace-python-agent-api) 사용하여 백그라운드 작업 내에서 해당 함수에 대한 함수 추적을 만들 수 있습니다. 또는 [구성 파일을](/docs/apm/agents/python-agent/custom-instrumentation/python-custom-instrumentation-config-file/#listing_functions) 사용하여 계측되지 않은 기능을 계측할 수 있습니다. @@ -31,9 +31,17 @@ newrelic.agent.background_task(application=None, name=None, group=None) 데코레이터를 사용할 수 없는 경우 다음 호출 형식 중 하나가 더 유용할 수 있습니다. -* **컨텍스트 관리자** : 모니터링할 작업이 런타임에만 결정되고 가져오기 시간에는 결정되지 않는 경우 `BackgroundTask` 컨텍스트 관리자를 사용하여 코드 블록 실행을 직접 래핑할 수 있습니다. (이것은 `BackgroundTaskWrapper` 에서 사용하는 컨텍스트 관리자입니다.) -* **래퍼** : 추적하려는 특정 기능이 어디에 있는지 미리 알고 있으면 `background_task` 데코레이터를 사용할 수 있습니다. 그러나 추적해야 하는 모든 함수를 모르는 경우(예: 라우팅 시스템의 일부로 동적으로 조회되는 경우) `BackgroundTaskWrapper` 을 사용하여 해당 시간에 함수를 래핑해야 합니다. 등록 시 또는 호출 시. -* **경로 기반 래퍼** : 경로 기반 래퍼 형식은 `wrap_background_task` 입니다. +* **The context manager** + + : 모니터링할 작업이 런타임에만 결정되고 가져오기 시간에는 결정되지 않는 경우 `BackgroundTask` 컨텍스트 관리자를 사용하여 코드 블록 실행을 직접 래핑할 수 있습니다. (이것은 `BackgroundTaskWrapper` 에서 사용하는 컨텍스트 관리자입니다.) + +* **The wrapper** + + : 추적하려는 특정 함수가 어디에 있는지 미리 알고 있다면 `background_task` 데코레이터를 사용할 수 있습니다. 하지만 트레이스가 되어야 하는 모든 기능을 모르는 경우(예를 들어 라우팅 시스템의 일부로 동적으로 조회되는 경우) `BackgroundTaskWrapper` 을 사용하여 해당 기능을 래핑해야 합니다. 등록시 또는 전화시. + +* **The path-based wrapper** + + : 경로 기반 래퍼 형식은 `wrap_background_task` 입니다. 이러한 함수 형식의 차이점과 사용에 대한 자세한 내용은 [변수 호출 형식](/docs/python-agent-api-different-call-forms) 을 참조하세요. @@ -236,4 +244,8 @@ task = newrelic.agent.BackgroundTaskWrapper(get_next_task()) result = task(*args, **kwargs) ``` -이 예에서 에이전트가 모니터링하는 웹 트랜잭션에서 이 호출이 이루어진 경우 호출은 웹 트랜잭션을 백그라운드 작업으로 재분류합니다. 그러나 호출이 백그라운드 스레드 또는 코루틴에서 이루어진 경우 호출이 반환될 때까지 발생하는 것을 추적하는 새로운 백그라운드 작업 트랜잭션의 기록을 시작합니다. \ No newline at end of file +이 예에서 에이전트가 모니터링하는 웹 트랜잭션에서 이 호출이 이루어진 경우 호출은 웹 트랜잭션을 백그라운드 작업으로 재분류합니다. 그러나 호출이 백그라운드 스레드 또는 코루틴에서 이루어진 경우 호출이 반환될 때까지 발생하는 것을 추적하는 새로운 백그라운드 작업 트랜잭션의 기록을 시작합니다. + +## 문제점 해결 + +백그라운드 작업의 트랜잭션이 UI에 표시되지 않는 경우 이는 백그라운드 작업에 의해 생성된 트랜잭션이 종료되지 않았거나 작업이 너무 오래 실행되었기 때문일 수 있습니다. 백그라운드 작업이 20분 이상 실행되면 너무 오래되어 보관할 수 없다고 간주되어 서버에서 삭제됩니다. 백그라운드 작업은 20분 이상 실행되어서는 안 되며, 실행되는 경우 여러 백그라운드 작업으로 나누어야 합니다. \ No newline at end of file diff --git a/src/i18n/content/kr/docs/data-apis/ingest-apis/event-api/introduction-event-api.mdx b/src/i18n/content/kr/docs/data-apis/ingest-apis/event-api/introduction-event-api.mdx index d02d68bc7b3..4e21fbf9065 100644 --- a/src/i18n/content/kr/docs/data-apis/ingest-apis/event-api/introduction-event-api.mdx +++ b/src/i18n/content/kr/docs/data-apis/ingest-apis/event-api/introduction-event-api.mdx @@ -93,19 +93,23 @@ Event API를 사용하면 사용자 지정 [이벤트 데이터](/docs/using-new New Relic 계정에 맞춤 이벤트를 보내려면: -1. 도착 +1. 데이터를 보고하려는 계정에 대해 - 데이터를 보고하려는 계정에 대해. + 를 가져옵니다. 2. 맞춤 이벤트 또는 속성을 만들기 전에 [NRQL에서 사용하는 예약어](/docs/insights/insights-data-sources/custom-data/insights-custom-data-requirements-limits#reserved-words)목록을 검토하세요. 3. 애플리케이션을 계측하거나 API를 쿼리하거나 다른 방법을 사용하여 이벤트에 대한 [JSON을 생성](#instrument) 합니다. -4. **POST** 요청에서 curl을 사용하여 [압축된 JSON 페이로드](#submit-event) (예: `gzip` 또는 `deflate` )를 HTTPS 엔드포인트에 제출합니다. +4. **POST** -5. **권장 사항:** [구문 분석 오류가](#errors-parsing) 발생할 때 알리도록 [NRQL 경고 조건](/docs/alerts/new-relic-alerts/defining-conditions/create-alert-conditions-nrql-queries) 을 설정합니다. + 요청에서 컬을 사용하여 [압축된 JSON 페이로드](#submit-event) (예: `gzip` 또는 `deflate`)를 HTTPS 엔드포인트에 제출합니다. + +5. **Recommendation:** + + [구문 분석 오류가 발생할 때 알려주도록 NRQL 공지 조건을](/docs/alerts/new-relic-alerts/defining-conditions/create-alert-conditions-nrql-queries) [](#errors-parsing)설정하세요. 이벤트 API는 사용자 정의 이벤트에 허용되는 [크기, 비율 및 문자를 제한](#limits) 합니다. 또한 NRQL에서 사용할 수 있는 다른 데이터와 마찬가지로 사용자 지정 이벤트는 생성된 후에 업데이트하거나 삭제할 수 없습니다. 사용자 지정 이벤트에 문제가 있는 경우 [문제 해결 절차](#verify) 를 따르거나 새 사용자 지정 이벤트를 만드십시오. @@ -140,7 +144,7 @@ New Relic 계정에 맞춤 이벤트를 보내려면: - **필수:** 이벤트의 이름입니다. + **Required:** 이벤트의 이름입니다. @@ -205,7 +209,7 @@ New Relic 계정에 맞춤 이벤트를 보내려면: id="json-example" title="JSON 예시" > - 다음은 API로 전송하기 위한 일반적인 JSON 데이터 세트의 예입니다. 이 호출은 두 개의 **구매** 유형 이벤트를 JSON 배열로 보냅니다. JSON 배열을 사용하여 단일 HTTP 호출에 여러 이벤트를 추가할 수 있습니다. + 다음은 API를 통해 전송하기 위한 일반적인 JSON 데이터 세트의 예입니다. 이 호출은 두 개의 **Purchase** 유형 이벤트를 JSON으로 다시 보냅니다. JSON을 다시 사용하여 단일 HTTP 호출에 여러 이벤트를 추가할 수 있습니다. ```json [ @@ -232,9 +236,9 @@ New Relic 계정에 맞춤 이벤트를 보내려면: > 이벤트 API를 통해 전송된 이벤트에는 다음 크기 및 속도 제한이 적용됩니다. - * 페이로드 총 크기: **POST당 최대 1MB(10^6바이트)** . 압축을 사용하는 것이 좋습니다. + * 페이로드 총 크기: **1MB(10^6 bytes) maximum per POST**. 압축을 사용하는 것이 좋습니다. - * 페이로드는 **UTF-8** 로 인코딩되어야 합니다. + * 페이로드는 **UTF-8** 으로 인코딩되어야 합니다. * 이벤트당 최대 속성 수: 255 @@ -310,11 +314,11 @@ New Relic 계정에 맞춤 이벤트를 보내려면: HTTP 요청을 생성하기 전에 다음을 포함하여 [형식](/docs/insights/new-relic-insights/decorating-events/insights-custom-attributes) 이 올바른지 확인하십시오. -* `Api-Key` 에 올바른 +* `Api-Key` 에는 올바른 - . + 이 포함되어 있습니다. * `Content-Type` 은(는) `application/json` 입니다. @@ -336,7 +340,7 @@ API는 [HTTP/1.1 영구 연결](https://www.w3.org/Protocols/rfc2616/rfc2616-sec * 10초 시간 초과: 10초를 초과하는 API 호출은 시간 초과됩니다. * 대용량 페이로드: 100KB를 초과하는 페이로드는 응답 시간이 증가할 수 있습니다. -**권장 사항:** 성공 메시지를 확인하는 것 외에도 데이터의 NRQL 쿼리를 만들어 사용 가능한지 확인합니다. +**Recommendation:** 성공 메시지를 확인하는 것 외에도 데이터에 대한 NRQL 쿼리를 만들어 사용 가능한지 확인하세요. - 키 누락 또는 유효하지 않음: 유효하지 않은 라이센스 키입니다. 유효한 등록 . `License` 유형의 키를 사용해야 합니다. `Browser` , `Mobile` 또는 `User` 키는 작동하지 않습니다. + 누락되었거나 잘못된 키: 잘못된 인스턴스 키입니다. 유효한 을(를) 등록하세요. `License` 유형의 키를 사용해야 합니다. `Browser`, `Mobile` 또는 `User` 키는 작동하지 않습니다. @@ -581,7 +585,7 @@ API는 [HTTP/1.1 영구 연결](https://www.w3.org/Protocols/rfc2616/rfc2616-sec ## NrIntegrationError를 사용한 쿼리 및 경고 [#nrIntegration] -[`NrIntegrationError` 이벤트를](/docs/telemetry-data-platform/manage-data/nrintegrationerror) 사용하면 쿼리하고 설정할 수 있습니다. 귀하의 New Relic 계정으로 전송되는 사용자 정의 데이터에 대해. **권장 사항:** 구문 분석 오류에 대한 알림을 받으려면 `NrIntegrationError` 에 대한 [NRQL 알림 조건을 생성하세요](/docs/alerts/new-relic-alerts/defining-conditions/create-alert-conditions-nrql-queries) . 다음 예제 NRQL 쿼리를 사용하세요. +[`NrIntegrationError` 이벤트를 사용](/docs/telemetry-data-platform/manage-data/nrintegrationerror) 하면 뉴렐릭 계정으로 전송되는 맞춤 데이터에 대해 쿼리하고 설정할 수 있습니다. **Recommendation:** 구문 분석 오류에 대한 경고를 받으려면 `NrIntegrationError` 에 대한 [NRQL 공지 조건을 생성하세요](/docs/alerts/new-relic-alerts/defining-conditions/create-alert-conditions-nrql-queries) . 다음 예제 NRQL 쿼리를 사용하세요. ```sql SELECT message FROM NrIntegrationError WHERE newRelicFeature = 'Event API' AND category = 'EventApiException' @@ -629,7 +633,7 @@ SELECT message FROM NrIntegrationError WHERE newRelicFeature = 'Event API' AND c - 의 처음 6개 문자는 오류를 생성한 요청에 사용됩니다. + 오류를 생성한 요청에 사용된 의 처음 6개 문자입니다. diff --git a/src/i18n/content/kr/docs/distributed-tracing/concepts/introduction-distributed-tracing.mdx b/src/i18n/content/kr/docs/distributed-tracing/concepts/introduction-distributed-tracing.mdx index 5c4c4de528b..e1e88a5093b 100644 --- a/src/i18n/content/kr/docs/distributed-tracing/concepts/introduction-distributed-tracing.mdx +++ b/src/i18n/content/kr/docs/distributed-tracing/concepts/introduction-distributed-tracing.mdx @@ -6,7 +6,7 @@ tags: - Get started metaDescription: What is distributed tracing? An intro to New Relic's distributed tracing feature. freshnessValidatedDate: never -translationType: human +translationType: machine --- import distributedtracingIntrotoDistTracing from 'images/distributed-tracing_diagram_intro-to-dist-tracing.webp' @@ -15,7 +15,7 @@ import distributedtracingIntrotoDistTracing from 'images/distributed-tracing_dia 요청은 완료에 도달하기 위해 다양한 서비스를 통과할 수 있으며 이러한 서비스는 컨테이너, 서버리스 환경, 가상 머신, 다양한 클라우드 공급자 또는 온프레미스 등 다양한 위치에 있을 수 있습니다. 여러 서비스에서 전체 요청의 경로를 볼 수 있으면 장애 또는 성능 문제를 신속하게 찾아낼 수 있습니다. -분산 추적은 요청이 한 서비스에서 다른 서비스로 이동할 때 데이터를 수집하여 여정의 각 세그먼트를 범위로 기록합니다. 이러한 범위에는 요청의 각 세그먼트에 대한 중요한 세부 정보가 포함되어 있으며 결국 하나의 추적으로 결합됩니다. 완료된 추적은 전체 요청에 대한 그림을 제공합니다. +분산 추적은 요청이 한 서비스에서 다른 서비스로 이동할 때 데이터를 수집하여 여정의 각 세그먼트를 범위로 기록합니다. 이러한 범위에는 요청의 각 세그먼트에 대한 중요한 세부 정보가 포함되어 있으며 결국 하나의 추적으로 결합됩니다. 완료된 추적은 전체 요청의 그림을 제공합니다.
- 다음은 에이전트가 각 서비스에 소요된 시간을 측정하는 웹 트랜잭션의 예입니다. 그런 다음 에이전트는 해당 타이밍 정보를 뉴렐릭에 스팬으로 보내고 스팬은 하나의 분산 추적으로 결합됩니다. + 다음은 에이전트가 각 서비스에 소요된 시간을 측정하는 웹 트랜잭션의 예입니다. 그런 다음 에이전트는 해당 타이밍 정보를 New Relic에 스팬으로 보내고 스팬은 하나의 분산 추적으로 결합됩니다.
## 바로 시작하시겠습니까? [#start-now] -아직 계정이 없으시면, 아래에서 무료 뉴렐릭 계정을 생성해 지금 바로 데이터 모니터링을 시작하십시오. +아직 하지 않았다면 아래에서 무료 New Relic 계정을 만들어 오늘 데이터 모니터링을 시작하십시오. -분산 추적에 익숙해지고 바로 시작하려면 [설정 옵션](/docs/distributed-tracing/enable-configure/quick-start)을 확인하십시오. +분산 추적에 익숙하고 바로 시작하려면 [설정 옵션 을](/docs/distributed-tracing/enable-configure/quick-start) 확인하십시오. -## 시작하기 전에 좀 더 자세한 정보가 필요하십니까? [#learn-more] +## 시작하기 전에 자세히 알아보시겠습니까? [#learn-more] -다음의 분산 추적 관련 항목을 참조하십시오. +다음 분산 추적 항목을 참조하십시오. * [분산 추적은 어떻게 작동하며 어떤 유형의 분산 추적을 사용할 수 있습니까?](/docs/distributed-tracing/concepts/how-new-relic-distributed-tracing-works/) * [분산 추적 UI를 사용하여 요청 문제를 해결하려면 어떻게 해야 합니까?](/docs/distributed-tracing/ui-data/understand-use-distributed-tracing-ui/) * [분산 추적 출시를 어떻게 계획해야 합니까?](/docs/distributed-tracing/concepts/distributed-tracing-planning-guide/) -* [Infinite Tracing이라는 고급 기능은 무엇입니까?](/docs/understand-dependencies/distributed-tracing/infinite-tracing/introduction-infinite-tracing/) \ No newline at end of file +* [무한 추적이라는 고급 기능은 무엇입니까?](/docs/understand-dependencies/distributed-tracing/infinite-tracing/introduction-infinite-tracing/) \ No newline at end of file diff --git a/src/i18n/content/kr/docs/infrastructure/amazon-integrations/get-started/aws-integrations-metrics.mdx b/src/i18n/content/kr/docs/infrastructure/amazon-integrations/get-started/aws-integrations-metrics.mdx index b4244e6989a..389694283e9 100644 --- a/src/i18n/content/kr/docs/infrastructure/amazon-integrations/get-started/aws-integrations-metrics.mdx +++ b/src/i18n/content/kr/docs/infrastructure/amazon-integrations/get-started/aws-integrations-metrics.mdx @@ -76,6 +76,4507 @@ ApiName 측정기준과 일치하는 측정항목만 일치합니다. 우리는 더 이상 이러한 매핑을 추가하지 않으며 위의 일반 규칙에 정의된 대로 모든 새로운 지표를 원래 AWS 이름으로 보존하기 위해 최선을 다하고 있습니다. 다음은 `.by + dimensionName` 접미사가 붙은 모든 측정항목의 전체 목록입니다. + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ 원래 지표 이름 + + 원래 차원 이름 + + 접미사가 붙은 지표 이름 +
+ `aws.apigateway.4XXError` + + `Api` + + `aws.apigateway.4XXError.byApi` +
+ `aws.apigateway.4XXError` + + `ResourceWithMetrics` + + `aws.apigateway.4XXError.byResourceWithMetrics` +
+ `aws.apigateway.4XXError` + + `Stage` + + `aws.apigateway.4XXError.byStage` +
+ `aws.apigateway.5XXError` + + `Api` + + `aws.apigateway.5XXError.byApi` +
+ `aws.apigateway.5XXError` + + `ResourceWithMetrics` + + `aws.apigateway.5XXError.byResourceWithMetrics` +
+ `aws.apigateway.5XXError` + + `Stage` + + `aws.apigateway.5XXError.byStage` +
+ `aws.apigateway.CacheHitCount` + + `Api` + + `aws.apigateway.CacheHitCount.byApi` +
+ `aws.apigateway.CacheHitCount` + + `ResourceWithMetrics` + + `aws.apigateway.CacheHitCount.byResourceWithMetrics` +
+ `aws.apigateway.CacheHitCount` + + `Stage` + + `aws.apigateway.CacheHitCount.byStage` +
+ `aws.apigateway.CacheMissCount` + + `Api` + + `aws.apigateway.CacheMissCount.byApi` +
+ `aws.apigateway.CacheMissCount` + + `ResourceWithMetrics` + + `aws.apigateway.CacheMissCount.byResourceWithMetrics` +
+ `aws.apigateway.CacheMissCount` + + `Stage` + + `aws.apigateway.CacheMissCount.byStage` +
+ `aws.apigateway.Count` + + `Api` + + `aws.apigateway.Count.byApi` +
+ `aws.apigateway.Count` + + `ResourceWithMetrics` + + `aws.apigateway.Count.byResourceWithMetrics` +
+ `aws.apigateway.Count` + + `Stage` + + `aws.apigateway.Count.byStage` +
+ `aws.apigateway.IntegrationLatency` + + `Api` + + `aws.apigateway.IntegrationLatency.byApi` +
+ `aws.apigateway.IntegrationLatency` + + `ResourceWithMetrics` + + `aws.apigateway.IntegrationLatency.byResourceWithMetrics` +
+ `aws.apigateway.IntegrationLatency` + + `Stage` + + `aws.apigateway.IntegrationLatency.byStage` +
+ `aws.apigateway.Latency` + + `Api` + + `aws.apigateway.Latency.byApi` +
+ `aws.apigateway.Latency` + + `ResourceWithMetrics` + + `aws.apigateway.Latency.byResourceWithMetrics` +
+ `aws.apigateway.Latency` + + `Stage` + + `aws.apigateway.Latency.byStage` +
+ `aws.applicationelb.RequestCount` + + `Alb` + + `aws.applicationelb.RequestCount.byAlb` +
+ `aws.applicationelb.RequestCount` + + `TargetGroup` + + `aws.applicationelb.RequestCount.byTargetGroup` +
+ `aws.docdb.BackupRetentionPeriodStorageUsed` + + `Cluster` + + `aws.docdb.BackupRetentionPeriodStorageUsed.byCluster` +
+ `aws.docdb.BackupRetentionPeriodStorageUsed` + + `ClusterByRole` + + `aws.docdb.BackupRetentionPeriodStorageUsed.byClusterByRole` +
+ `aws.docdb.BackupRetentionPeriodStorageUsed` + + `Instance` + + `aws.docdb.BackupRetentionPeriodStorageUsed.byInstance` +
+ `aws.docdb.BufferCacheHitRatio` + + `Cluster` + + `aws.docdb.BufferCacheHitRatio.byCluster` +
+ `aws.docdb.BufferCacheHitRatio` + + `ClusterByRole` + + `aws.docdb.BufferCacheHitRatio.byClusterByRole` +
+ `aws.docdb.BufferCacheHitRatio` + + `Instance` + + `aws.docdb.BufferCacheHitRatio.byInstance` +
+ `aws.docdb.CPUUtilization` + + `Cluster` + + `aws.docdb.CPUUtilization.byCluster` +
+ `aws.docdb.CPUUtilization` + + `ClusterByRole` + + `aws.docdb.CPUUtilization.byClusterByRole` +
+ `aws.docdb.CPUUtilization` + + `Instance` + + `aws.docdb.CPUUtilization.byInstance` +
+ `aws.docdb.DatabaseConnections` + + `Cluster` + + `aws.docdb.DatabaseConnections.byCluster` +
+ `aws.docdb.DatabaseConnections` + + `ClusterByRole` + + `aws.docdb.DatabaseConnections.byClusterByRole` +
+ `aws.docdb.DatabaseConnections` + + `Instance` + + `aws.docdb.DatabaseConnections.byInstance` +
+ `aws.docdb.DBClusterReplicaLagMaximum` + + `Cluster` + + `aws.docdb.DBClusterReplicaLagMaximum.byCluster` +
+ `aws.docdb.DBClusterReplicaLagMaximum` + + `ClusterByRole` + + `aws.docdb.DBClusterReplicaLagMaximum.byClusterByRole` +
+ `aws.docdb.DBClusterReplicaLagMaximum` + + `Instance` + + `aws.docdb.DBClusterReplicaLagMaximum.byInstance` +
+ `aws.docdb.DBClusterReplicaLagMinimum` + + `Cluster` + + `aws.docdb.DBClusterReplicaLagMinimum.byCluster` +
+ `aws.docdb.DBClusterReplicaLagMinimum` + + `ClusterByRole` + + `aws.docdb.DBClusterReplicaLagMinimum.byClusterByRole` +
+ `aws.docdb.DBClusterReplicaLagMinimum` + + `Instance` + + `aws.docdb.DBClusterReplicaLagMinimum.byInstance` +
+ `aws.docdb.DBInstanceReplicaLag` + + `Cluster` + + `aws.docdb.DBInstanceReplicaLag.byCluster` +
+ `aws.docdb.DBInstanceReplicaLag` + + `ClusterByRole` + + `aws.docdb.DBInstanceReplicaLag.byClusterByRole` +
+ `aws.docdb.DBInstanceReplicaLag` + + `Instance` + + `aws.docdb.DBInstanceReplicaLag.byInstance` +
+ `aws.docdb.DiskQueueDepth` + + `Cluster` + + `aws.docdb.DiskQueueDepth.byCluster` +
+ `aws.docdb.DiskQueueDepth` + + `ClusterByRole` + + `aws.docdb.DiskQueueDepth.byClusterByRole` +
+ `aws.docdb.DiskQueueDepth` + + `Instance` + + `aws.docdb.DiskQueueDepth.byInstance` +
+ `aws.docdb.EngineUptime` + + `Cluster` + + `aws.docdb.EngineUptime.byCluster` +
+ `aws.docdb.EngineUptime` + + `ClusterByRole` + + `aws.docdb.EngineUptime.byClusterByRole` +
+ `aws.docdb.EngineUptime` + + `Instance` + + `aws.docdb.EngineUptime.byInstance` +
+ `aws.docdb.FreeableMemory` + + `Cluster` + + `aws.docdb.FreeableMemory.byCluster` +
+ `aws.docdb.FreeableMemory` + + `ClusterByRole` + + `aws.docdb.FreeableMemory.byClusterByRole` +
+ `aws.docdb.FreeableMemory` + + `Instance` + + `aws.docdb.FreeableMemory.byInstance` +
+ `aws.docdb.FreeLocalStorage` + + `Cluster` + + `aws.docdb.FreeLocalStorage.byCluster` +
+ `aws.docdb.FreeLocalStorage` + + `ClusterByRole` + + `aws.docdb.FreeLocalStorage.byClusterByRole` +
+ `aws.docdb.FreeLocalStorage` + + `Instance` + + `aws.docdb.FreeLocalStorage.byInstance` +
+ `aws.docdb.NetworkReceiveThroughput` + + `Cluster` + + `aws.docdb.NetworkReceiveThroughput.byCluster` +
+ `aws.docdb.NetworkReceiveThroughput` + + `ClusterByRole` + + `aws.docdb.NetworkReceiveThroughput.byClusterByRole` +
+ `aws.docdb.NetworkReceiveThroughput` + + `Instance` + + `aws.docdb.NetworkReceiveThroughput.byInstance` +
+ `aws.docdb.NetworkThroughput` + + `Cluster` + + `aws.docdb.NetworkThroughput.byCluster` +
+ `aws.docdb.NetworkThroughput` + + `ClusterByRole` + + `aws.docdb.NetworkThroughput.byClusterByRole` +
+ `aws.docdb.NetworkThroughput` + + `Instance` + + `aws.docdb.NetworkThroughput.byInstance` +
+ `aws.docdb.NetworkTransmitThroughput` + + `Cluster` + + `aws.docdb.NetworkTransmitThroughput.byCluster` +
+ `aws.docdb.NetworkTransmitThroughput` + + `ClusterByRole` + + `aws.docdb.NetworkTransmitThroughput.byClusterByRole` +
+ `aws.docdb.NetworkTransmitThroughput` + + `Instance` + + `aws.docdb.NetworkTransmitThroughput.byInstance` +
+ `aws.docdb.ReadIOPS` + + `Cluster` + + `aws.docdb.ReadIOPS.byCluster` +
+ `aws.docdb.ReadIOPS` + + `ClusterByRole` + + `aws.docdb.ReadIOPS.byClusterByRole` +
+ `aws.docdb.ReadIOPS` + + `Instance` + + `aws.docdb.ReadIOPS.byInstance` +
+ `aws.docdb.ReadLatency` + + `Cluster` + + `aws.docdb.ReadLatency.byCluster` +
+ `aws.docdb.ReadLatency` + + `ClusterByRole` + + `aws.docdb.ReadLatency.byClusterByRole` +
+ `aws.docdb.ReadLatency` + + `Instance` + + `aws.docdb.ReadLatency.byInstance` +
+ `aws.docdb.ReadThroughput` + + `Cluster` + + `aws.docdb.ReadThroughput.byCluster` +
+ `aws.docdb.ReadThroughput` + + `ClusterByRole` + + `aws.docdb.ReadThroughput.byClusterByRole` +
+ `aws.docdb.ReadThroughput` + + `Instance` + + `aws.docdb.ReadThroughput.byInstance` +
+ `aws.docdb.SnapshotStorageUsed` + + `Cluster` + + `aws.docdb.SnapshotStorageUsed.byCluster` +
+ `aws.docdb.SnapshotStorageUsed` + + `ClusterByRole` + + `aws.docdb.SnapshotStorageUsed.byClusterByRole` +
+ `aws.docdb.SnapshotStorageUsed` + + `Instance` + + `aws.docdb.SnapshotStorageUsed.byInstance` +
+ `aws.docdb.SwapUsage` + + `Cluster` + + `aws.docdb.SwapUsage.byCluster` +
+ `aws.docdb.SwapUsage` + + `ClusterByRole` + + `aws.docdb.SwapUsage.byClusterByRole` +
+ `aws.docdb.SwapUsage` + + `Instance` + + `aws.docdb.SwapUsage.byInstance` +
+ `aws.docdb.TotalBackupStorageBilled` + + `Cluster` + + `aws.docdb.TotalBackupStorageBilled.byCluster` +
+ `aws.docdb.TotalBackupStorageBilled` + + `ClusterByRole` + + `aws.docdb.TotalBackupStorageBilled.byClusterByRole` +
+ `aws.docdb.TotalBackupStorageBilled` + + + `Instance` + + `aws.docdb.TotalBackupStorageBilled.byInstance` +
+ `aws.docdb.VolumeBytesUsed` + + `Cluster` + + `aws.docdb.VolumeBytesUsed.byCluster` +
+ `aws.docdb.VolumeBytesUsed` + + `ClusterByRole` + + `aws.docdb.VolumeBytesUsed.byClusterByRole` +
+ `aws.docdb.VolumeBytesUsed` + + `Instance` + + `aws.docdb.VolumeBytesUsed.byInstance` +
+ `aws.docdb.VolumeReadIOPs` + + `Cluster` + + `aws.docdb.VolumeReadIOPs.byCluster` +
+ `aws.docdb.VolumeReadIOPs` + + `ClusterByRole` + + `aws.docdb.VolumeReadIOPs.byClusterByRole` +
+ `aws.docdb.VolumeReadIOPs` + + `Instance` + + `aws.docdb.VolumeReadIOPs.byInstance` +
+ `aws.docdb.VolumeWriteIOPs` + + `Cluster` + + `aws.docdb.VolumeWriteIOPs.byCluster` +
+ `aws.docdb.VolumeWriteIOPs` + + `ClusterByRole` + + `aws.docdb.VolumeWriteIOPs.byClusterByRole` +
+ `aws.docdb.VolumeWriteIOPs` + + `Instance` + + `aws.docdb.VolumeWriteIOPs.byInstance` +
+ `aws.docdb.WriteIOPS` + + `Cluster` + + `aws.docdb.WriteIOPS.byCluster` +
+ `aws.docdb.WriteIOPS` + + `ClusterByRole` + + `aws.docdb.WriteIOPS.byClusterByRole` +
+ `aws.docdb.WriteIOPS` + + `Instance` + + `aws.docdb.WriteIOPS.byInstance` +
+ `aws.docdb.WriteLatency` + + `Cluster` + + `aws.docdb.WriteLatency.byCluster` +
+ `aws.docdb.WriteLatency` + + `ClusterByRole` + + `aws.docdb.WriteLatency.byClusterByRole` +
+ `aws.docdb.WriteLatency` + + `Instance` + + `aws.docdb.WriteLatency.byInstance` +
+ `aws.docdb.WriteThroughput` + + `Cluster` + + `aws.docdb.WriteThroughput.byCluster` +
+ `aws.docdb.WriteThroughput` + + `ClusterByRole` + + `aws.docdb.WriteThroughput.byClusterByRole` +
+ `aws.docdb.WriteThroughput` + + `Instance` + + `aws.docdb.WriteThroughput.byInstance` +
+ `aws.dynamodb.ConsumedReadCapacityUnits` + + `GlobalSecondaryIndex` + + `aws.dynamodb.ConsumedReadCapacityUnits.byGlobalSecondaryIndex` +
+ `aws.dynamodb.ConsumedWriteCapacityUnits` + + `GlobalSecondaryIndex` + + `aws.dynamodb.ConsumedWriteCapacityUnits.byGlobalSecondaryIndex` +
+ `aws.dynamodb.ProvisionedReadCapacityUnits` + + `GlobalSecondaryIndex` + + `aws.dynamodb.ProvisionedReadCapacityUnits.byGlobalSecondaryIndex` +
+ `aws.dynamodb.ProvisionedWriteCapacityUnits` + + `GlobalSecondaryIndex` + + `aws.dynamodb.ProvisionedWriteCapacityUnits.byGlobalSecondaryIndex` +
+ `aws.dynamodb.ReadThrottleEvents` + + `GlobalSecondaryIndex` + + `aws.dynamodb.ReadThrottleEvents.byGlobalSecondaryIndex` +
+ `aws.dynamodb.WriteThrottleEvents` + + `GlobalSecondaryIndex` + + `aws.dynamodb.WriteThrottleEvents.byGlobalSecondaryIndex` +
+ `aws.ecs.activeServicesCount` + + `Cluster` + + `aws.ecs.activeServicesCount.byCluster` +
+ `aws.ecs.CPUUtilization` + + `Cluster` + + `aws.ecs.CPUUtilization.byCluster` +
+ `aws.ecs.CPUUtilization` + + `Service` + + `aws.ecs.CPUUtilization.byService` +
+ `aws.ecs.desiredCount` + + `Service` + + `aws.ecs.desiredCount.byService` +
+ `aws.ecs.MemoryUtilization` + + `Cluster` + + `aws.ecs.MemoryUtilization.byCluster` +
+ `aws.ecs.MemoryUtilization` + + `Service` + + `aws.ecs.MemoryUtilization.byService` +
+ `aws.ecs.pendingCount` + + `Service` + + `aws.ecs.pendingCount.byService` +
+ `aws.ecs.pendingTasksCount` + + `Cluster` + + `aws.ecs.pendingTasksCount.byCluster` +
+ `aws.ecs.registeredContainerInstancesCount` + + `Cluster` + + `aws.ecs.registeredContainerInstancesCount.byCluster` +
+ `aws.ecs.runningCount` + + `Service` + + `aws.ecs.runningCount.byService` +
+ `aws.ecs.runningTasksCount` + + `Cluster` + + `aws.ecs.runningTasksCount.byCluster` +
+ `aws.es.CPUUtilization` + + `Cluster` + + `aws.es.CPUUtilization.byCluster` +
+ `aws.es.CPUUtilization` + + `Node` + + `aws.es.CPUUtilization.byNode` +
+ `aws.es.FreeStorageSpace` + + `Cluster` + + `aws.es.FreeStorageSpace.byCluster` +
+ `aws.es.FreeStorageSpace` + + `Node` + + `aws.es.FreeStorageSpace.byNode` +
+ `aws.es.IndexingLatency` + + `Cluster` + + `aws.es.IndexingLatency.byCluster` +
+ `aws.es.IndexingLatency` + + `Node` + + `aws.es.IndexingLatency.byNode` +
+ `aws.es.IndexingRate` + + `Cluster` + + `aws.es.IndexingRate.byCluster` +
+ `aws.es.IndexingRate` + + `Node` + + `aws.es.IndexingRate.byNode` +
+ `aws.es.JVMGCOldCollectionCount` + + `Cluster` + + `aws.es.JVMGCOldCollectionCount.byCluster` +
+ `aws.es.JVMGCOldCollectionCount` + + `Node` + + `aws.es.JVMGCOldCollectionCount.byNode` +
+ `aws.es.JVMGCOldCollectionTime` + + `Cluster` + + `aws.es.JVMGCOldCollectionTime.byCluster` +
+ `aws.es.JVMGCOldCollectionTime` + + `Node` + + `aws.es.JVMGCOldCollectionTime.byNode` +
+ `aws.es.JVMGCYoungCollectionCount` + + `Cluster` + + `aws.es.JVMGCYoungCollectionCount.byCluster` +
+ `aws.es.JVMGCYoungCollectionCount` + + `Node` + + `aws.es.JVMGCYoungCollectionCount.byNode` +
+ `aws.es.JVMGCYoungCollectionTime` + + `Cluster` + + `aws.es.JVMGCYoungCollectionTime.byCluster` +
+ `aws.es.JVMGCYoungCollectionTime` + + `Node` + + `aws.es.JVMGCYoungCollectionTime.byNode` +
+ `aws.es.JVMMemoryPressure` + + `Cluster` + + `aws.es.JVMMemoryPressure.byCluster` +
+ `aws.es.JVMMemoryPressure` + + `Node` + + `aws.es.JVMMemoryPressure.byNode` +
+ `aws.es.SearchLatency` + + `Cluster` + + `aws.es.SearchLatency.byCluster` +
+ `aws.es.SearchLatency` + + `Node` + + `aws.es.SearchLatency.byNode` +
+ `aws.es.SearchRate` + + `Cluster` + + `aws.es.SearchRate.byCluster` +
+ `aws.es.SearchRate` + + `Node` + + `aws.es.SearchRate.byNode` +
+ `aws.es.SysMemoryUtilization` + + `Cluster` + + `aws.es.SysMemoryUtilization.byCluster` +
+ `aws.es.SysMemoryUtilization` + + `Node` + + `aws.es.SysMemoryUtilization.byNode` +
+ `aws.es.ThreadpoolBulkQueue` + + `Cluster` + + `aws.es.ThreadpoolBulkQueue.byCluster` +
+ `aws.es.ThreadpoolBulkQueue` + + `Node` + + `aws.es.ThreadpoolBulkQueue.byNode` +
+ `aws.es.ThreadpoolBulkRejected` + + `Cluster` + + `aws.es.ThreadpoolBulkRejected.byCluster` +
+ `aws.es.ThreadpoolBulkRejected` + + `Node` + + `aws.es.ThreadpoolBulkRejected.byNode` +
+ `aws.es.ThreadpoolBulkThreads` + + `Cluster` + + `aws.es.ThreadpoolBulkThreads.byCluster` +
+ `aws.es.ThreadpoolBulkThreads` + + `Node` + + `aws.es.ThreadpoolBulkThreads.byNode` +
+ `aws.es.ThreadpoolForce_mergeQueue` + + `Cluster` + + `aws.es.ThreadpoolForce_mergeQueue.byCluster` +
+ `aws.es.ThreadpoolForce_mergeQueue` + + `Node` + + `aws.es.ThreadpoolForce_mergeQueue.byNode` +
+ `aws.es.ThreadpoolForce_mergeRejected` + + `Cluster` + + `aws.es.ThreadpoolForce_mergeRejected.byCluster` +
+ `aws.es.ThreadpoolForce_mergeRejected` + + `Node` + + `aws.es.ThreadpoolForce_mergeRejected.byNode` +
+ `aws.es.ThreadpoolForce_mergeThreads` + + `Cluster` + + `aws.es.ThreadpoolForce_mergeThreads.byCluster` +
+ `aws.es.ThreadpoolForce_mergeThreads` + + `Node` + + `aws.es.ThreadpoolForce_mergeThreads.byNode` +
+ `aws.es.ThreadpoolIndexQueue` + + `Cluster` + + `aws.es.ThreadpoolIndexQueue.byCluster` +
+ `aws.es.ThreadpoolIndexQueue` + + `Node` + + `aws.es.ThreadpoolIndexQueue.byNode` +
+ `aws.es.ThreadpoolIndexRejected` + + `Cluster` + + `aws.es.ThreadpoolIndexRejected.byCluster` +
+ `aws.es.ThreadpoolIndexRejected` + + `Node` + + `aws.es.ThreadpoolIndexRejected.byNode` +
+ `aws.es.ThreadpoolIndexThreads` + + `Cluster` + + `aws.es.ThreadpoolIndexThreads.byCluster` +
+ `aws.es.ThreadpoolIndexThreads` + + `Node` + + `aws.es.ThreadpoolIndexThreads.byNode` +
+ `aws.es.ThreadpoolSearchQueue` + + `Cluster` + + `aws.es.ThreadpoolSearchQueue.byCluster` +
+ `aws.es.ThreadpoolSearchQueue` + + `Node` + + `aws.es.ThreadpoolSearchQueue.byNode` +
+ `aws.es.ThreadpoolSearchRejected` + + `Cluster` + + `aws.es.ThreadpoolSearchRejected.byCluster` +
+ `aws.es.ThreadpoolSearchRejected` + + `Node` + + `aws.es.ThreadpoolSearchRejected.byNode` +
+ `aws.es.ThreadpoolSearchThreads` + + `Cluster` + + `aws.es.ThreadpoolSearchThreads.byCluster` +
+ `aws.es.ThreadpoolSearchThreads` + + `Node` + + `aws.es.ThreadpoolSearchThreads.byNode` +
+ `aws.kafka.BytesInPerSec` + + `Broker` + + `aws.kafka.BytesInPerSec.byBroker` +
+ `aws.kafka.BytesInPerSec` + + `Topic` + + `aws.kafka.BytesInPerSec.byTopic` +
+ `aws.kafka.BytesOutPerSec` + + `Broker` + + `aws.kafka.BytesOutPerSec.byBroker` +
+ `aws.kafka.BytesOutPerSec` + + `Topic` + + `aws.kafka.BytesOutPerSec.byTopic` +
+ `aws.kafka.FetchMessageConversionsPerSec` + + `Broker` + + `aws.kafka.FetchMessageConversionsPerSec.byBroker` +
+ `aws.kafka.FetchMessageConversionsPerSec` + + `Topic` + + `aws.kafka.FetchMessageConversionsPerSec.byTopic` +
+ `aws.kafka.MessagesInPerSec` + + `Broker` + + `aws.kafka.MessagesInPerSec.byBroker` +
+ `aws.kafka.MessagesInPerSec` + + `Topic` + + `aws.kafka.MessagesInPerSec.byTopic` +
+ `aws.kafka.ProduceMessageConversionsPerSec` + + `Broker` + + `aws.kafka.ProduceMessageConversionsPerSec.byBroker` +
+ `aws.kafka.ProduceMessageConversionsPerSec` + + `Topic` + + `aws.kafka.ProduceMessageConversionsPerSec.byTopic` +
+ `aws.kinesis.IncomingBytes` + + `Stream` + + `aws.kinesis.IncomingBytes.byStream` +
+ `aws.kinesis.IncomingBytes` + + `StreamShard` + + `aws.kinesis.IncomingBytes.byStreamShard` +
+ `aws.kinesis.IncomingRecords` + + `Stream` + + `aws.kinesis.IncomingRecords.byStream` +
+ `aws.kinesis.IncomingRecords` + + `StreamShard` + + `aws.kinesis.IncomingRecords.byStreamShard` +
+ `aws.kinesis.ReadProvisionedThroughputExceeded` + + `Stream` + + `aws.kinesis.ReadProvisionedThroughputExceeded.byStream` +
+ `aws.kinesis.ReadProvisionedThroughputExceeded` + + `StreamShard` + + `aws.kinesis.ReadProvisionedThroughputExceeded.byStreamShard` +
+ `aws.kinesis.WriteProvisionedThroughputExceeded` + + `Stream` + + `aws.kinesis.WriteProvisionedThroughputExceeded.byStream` +
+ `aws.kinesis.WriteProvisionedThroughputExceeded` + + `StreamShard` + + `aws.kinesis.WriteProvisionedThroughputExceeded.byStreamShard` +
+ `aws.lambda.ConcurrentExecutions` + + `Function` + + `aws.lambda.ConcurrentExecutions.byFunction` +
+ `aws.lambda.ConcurrentExecutions` + + `Region` + + `aws.lambda.ConcurrentExecutions.byRegion` +
+ `aws.lambda.DeadLetterErrors` + + `Function` + + `aws.lambda.DeadLetterErrors.byFunction` +
+ `aws.lambda.DeadLetterErrors` + + `FunctionAlias` + + `aws.lambda.DeadLetterErrors.byFunctionAlias` +
+ `aws.lambda.Duration` + + `Function` + + `aws.lambda.Duration.byFunction` +
+ `aws.lambda.Duration` + + `FunctionAlias` + + `aws.lambda.Duration.byFunctionAlias` +
+ `aws.lambda.Errors` + + `Function` + + `aws.lambda.Errors.byFunction` +
+ `aws.lambda.Errors` + + `FunctionAlias` + + `aws.lambda.Errors.byFunctionAlias` +
+ `aws.lambda.Invocations` + + `Function` + + `aws.lambda.Invocations.byFunction` +
+ `aws.lambda.Invocations` + + `FunctionAlias` + + `aws.lambda.Invocations.byFunctionAlias` +
+ `aws.lambda.IteratorAge` + + `Function` + + `aws.lambda.IteratorAge.byFunction` +
+ `aws.lambda.IteratorAge` + + `FunctionAlias` + + `aws.lambda.IteratorAge.byFunctionAlias` +
+ `aws.lambda.ProvisionedConcurrencyInvocations` + + `Function` + + `aws.lambda.ProvisionedConcurrencyInvocations.byFunction` +
+ `aws.lambda.ProvisionedConcurrencyInvocations` + + `FunctionAlias` + + `aws.lambda.ProvisionedConcurrencyInvocations.byFunctionAlias` +
+ `aws.lambda.ProvisionedConcurrencySpilloverInvocations` + + `Function` + + `aws.lambda.ProvisionedConcurrencySpilloverInvocations.byFunction` +
+ `aws.lambda.ProvisionedConcurrencySpilloverInvocations` + + `FunctionAlias` + + `aws.lambda.ProvisionedConcurrencySpilloverInvocations.byFunctionAlias` +
+ `aws.lambda.ProvisionedConcurrencyUtilization` + + `FunctionAlias` + + `aws.lambda.ProvisionedConcurrencyUtilization.byFunctionAlias` +
+ `aws.lambda.ProvisionedConcurrentExecutions` + + `Function` + + `aws.lambda.ProvisionedConcurrentExecutions.byFunction` +
+ `aws.lambda.ProvisionedConcurrentExecutions` + + `FunctionAlias` + + `aws.lambda.ProvisionedConcurrentExecutions.byFunctionAlias` +
+ `aws.lambda.Throttles` + + `Function` + + `aws.lambda.Throttles.byFunction` +
+ `aws.lambda.Throttles` + + `FunctionAlias` + + `aws.lambda.Throttles.byFunctionAlias` +
+ `aws.neptune.BackupRetentionPeriodStorageUsed` + + `Cluster` + + `aws.neptune.BackupRetentionPeriodStorageUsed.byCluster` +
+ `aws.neptune.BackupRetentionPeriodStorageUsed` + + `ClusterByRole` + + `aws.neptune.BackupRetentionPeriodStorageUsed.byClusterByRole` +
+ `aws.neptune.BackupRetentionPeriodStorageUsed` + + `Instance` + + `aws.neptune.BackupRetentionPeriodStorageUsed.byInstance` +
+ `aws.neptune.ClusterReplicaLag` + + `Cluster` + + `aws.neptune.ClusterReplicaLag.byCluster` +
+ `aws.neptune.ClusterReplicaLag` + + `ClusterByRole` + + `aws.neptune.ClusterReplicaLag.byClusterByRole` +
+ `aws.neptune.ClusterReplicaLag` + + `Instance` + + `aws.neptune.ClusterReplicaLag.byInstance` +
+ `aws.neptune.ClusterReplicaLagMaximum` + + `Cluster` + + `aws.neptune.ClusterReplicaLagMaximum.byCluster` +
+ `aws.neptune.ClusterReplicaLagMaximum` + + `ClusterByRole` + + `aws.neptune.ClusterReplicaLagMaximum.byClusterByRole` +
+ `aws.neptune.ClusterReplicaLagMaximum` + + `Instance` + + `aws.neptune.ClusterReplicaLagMaximum.byInstance` +
+ `aws.neptune.ClusterReplicaLagMinimum` + + `Cluster` + + `aws.neptune.ClusterReplicaLagMinimum.byCluster` +
+ `aws.neptune.ClusterReplicaLagMinimum` + + `ClusterByRole` + + `aws.neptune.ClusterReplicaLagMinimum.byClusterByRole` +
+ `aws.neptune.ClusterReplicaLagMinimum` + + `Instance` + + `aws.neptune.ClusterReplicaLagMinimum.byInstance` +
+ `aws.neptune.CPUUtilization` + + `Cluster` + + `aws.neptune.CPUUtilization.byCluster` +
+ `aws.neptune.CPUUtilization` + + `ClusterByRole` + + `aws.neptune.CPUUtilization.byClusterByRole` +
+ `aws.neptune.CPUUtilization` + + `Instance` + + `aws.neptune.CPUUtilization.byInstance` +
+ `aws.neptune.EngineUptime` + + `Cluster` + + `aws.neptune.EngineUptime.byCluster` +
+ `aws.neptune.EngineUptime` + + `ClusterByRole` + + `aws.neptune.EngineUptime.byClusterByRole` +
+ `aws.neptune.EngineUptime` + + `Instance` + + `aws.neptune.EngineUptime.byInstance` +
+ `aws.neptune.FreeableMemory` + + `Cluster` + + `aws.neptune.FreeableMemory.byCluster` +
+ `aws.neptune.FreeableMemory` + + `ClusterByRole` + + `aws.neptune.FreeableMemory.byClusterByRole` +
+ `aws.neptune.FreeableMemory` + + `Instance` + + `aws.neptune.FreeableMemory.byInstance` +
+ `aws.neptune.GremlinRequestsPerSec` + + `Cluster` + + `aws.neptune.GremlinRequestsPerSec.byCluster` +
+ `aws.neptune.GremlinRequestsPerSec` + + `ClusterByRole` + + `aws.neptune.GremlinRequestsPerSec.byClusterByRole` +
+ `aws.neptune.GremlinRequestsPerSec` + + `Instance` + + `aws.neptune.GremlinRequestsPerSec.byInstance` +
+ `aws.neptune.GremlinWebSocketOpenConnections` + + `Cluster` + + `aws.neptune.GremlinWebSocketOpenConnections.byCluster` +
+ `aws.neptune.GremlinWebSocketOpenConnections` + + `ClusterByRole` + + `aws.neptune.GremlinWebSocketOpenConnections.byClusterByRole` +
+ `aws.neptune.GremlinWebSocketOpenConnections` + + `Instance` + + `aws.neptune.GremlinWebSocketOpenConnections.byInstance` +
+ `aws.neptune.LoaderRequestsPerSec` + + `Cluster` + + `aws.neptune.LoaderRequestsPerSec.byCluster` +
+ `aws.neptune.LoaderRequestsPerSec` + + `ClusterByRole` + + `aws.neptune.LoaderRequestsPerSec.byClusterByRole` +
+ `aws.neptune.LoaderRequestsPerSec` + + `Instance` + + `aws.neptune.LoaderRequestsPerSec.byInstance` +
+ `aws.neptune.MainRequestQueuePendingRequests` + + `Cluster` + + `aws.neptune.MainRequestQueuePendingRequests.byCluster` +
+ `aws.neptune.MainRequestQueuePendingRequests` + + `ClusterByRole` + + `aws.neptune.MainRequestQueuePendingRequests.byClusterByRole` +
+ `aws.neptune.MainRequestQueuePendingRequests` + + `Instance` + + `aws.neptune.MainRequestQueuePendingRequests.byInstance` +
+ `aws.neptune.NetworkReceiveThroughput` + + `Cluster` + + `aws.neptune.NetworkReceiveThroughput.byCluster` +
+ `aws.neptune.NetworkReceiveThroughput` + + `ClusterByRole` + + `aws.neptune.NetworkReceiveThroughput.byClusterByRole` +
+ `aws.neptune.NetworkReceiveThroughput` + + `Instance` + + `aws.neptune.NetworkReceiveThroughput.byInstance` +
+ `aws.neptune.NetworkThroughput` + + `Cluster` + + `aws.neptune.NetworkThroughput.byCluster` +
+ `aws.neptune.NetworkThroughput` + + `ClusterByRole` + + `aws.neptune.NetworkThroughput.byClusterByRole` +
+ `aws.neptune.NetworkThroughput` + + `Instance` + + `aws.neptune.NetworkThroughput.byInstance` +
+ `aws.neptune.NetworkTransmitThroughput` + + `Cluster` + + `aws.neptune.NetworkTransmitThroughput.byCluster` +
+ `aws.neptune.NetworkTransmitThroughput` + + `ClusterByRole` + + `aws.neptune.NetworkTransmitThroughput.byClusterByRole` +
+ `aws.neptune.NetworkTransmitThroughput` + + `Instance` + + `aws.neptune.NetworkTransmitThroughput.byInstance` +
+ `aws.neptune.NumTxCommitted` + + `Cluster` + + `aws.neptune.NumTxCommitted.byCluster` +
+ `aws.neptune.NumTxCommitted` + + `ClusterByRole` + + `aws.neptune.NumTxCommitted.byClusterByRole` +
+ `aws.neptune.NumTxCommitted` + + `Instance` + + `aws.neptune.NumTxCommitted.byInstance` +
+ `aws.neptune.NumTxOpened` + + `Cluster` + + `aws.neptune.NumTxOpened.byCluster` +
+ `aws.neptune.NumTxOpened` + + `ClusterByRole` + + `aws.neptune.NumTxOpened.byClusterByRole` +
+ `aws.neptune.NumTxOpened` + + `Instance` + + `aws.neptune.NumTxOpened.byInstance` +
+ `aws.neptune.NumTxRolledBack` + + `Cluster` + + `aws.neptune.NumTxRolledBack.byCluster` +
+ `aws.neptune.NumTxRolledBack` + + `ClusterByRole` + + `aws.neptune.NumTxRolledBack.byClusterByRole` +
+ `aws.neptune.NumTxRolledBack` + + `Instance` + + `aws.neptune.NumTxRolledBack.byInstance` +
+ `aws.neptune.SnapshotStorageUsed` + + `Cluster` + + `aws.neptune.SnapshotStorageUsed.byCluster` +
+ `aws.neptune.SnapshotStorageUsed` + + `ClusterByRole` + + `aws.neptune.SnapshotStorageUsed.byClusterByRole` +
+ `aws.neptune.SnapshotStorageUsed` + + `Instance` + + `aws.neptune.SnapshotStorageUsed.byInstance` +
+ `aws.neptune.SparqlRequestsPerSec` + + `Cluster` + + `aws.neptune.SparqlRequestsPerSec.byCluster` +
+ `aws.neptune.SparqlRequestsPerSec` + + `ClusterByRole` + + `aws.neptune.SparqlRequestsPerSec.byClusterByRole` +
+ `aws.neptune.SparqlRequestsPerSec` + + `Instance` + + `aws.neptune.SparqlRequestsPerSec.byInstance` +
+ `aws.neptune.TotalBackupStorageBilled` + + `Cluster` + + `aws.neptune.TotalBackupStorageBilled.byCluster` +
+ `aws.neptune.TotalBackupStorageBilled` + + `ClusterByRole` + + `aws.neptune.TotalBackupStorageBilled.byClusterByRole` +
+ `aws.neptune.TotalBackupStorageBilled` + + `Instance` + + `aws.neptune.TotalBackupStorageBilled.byInstance` +
+ `aws.neptune.TotalClientErrorsPerSec` + + `Cluster` + + `aws.neptune.TotalClientErrorsPerSec.byCluster` +
+ `aws.neptune.TotalClientErrorsPerSec` + + `ClusterByRole` + + `aws.neptune.TotalClientErrorsPerSec.byClusterByRole` +
+ `aws.neptune.TotalClientErrorsPerSec` + + `Instance` + + `aws.neptune.TotalClientErrorsPerSec.byInstance` +
+ `aws.neptune.TotalRequestsPerSec` + + `Cluster` + + `aws.neptune.TotalRequestsPerSec.byCluster` +
+ `aws.neptune.TotalRequestsPerSec` + + `ClusterByRole` + + `aws.neptune.TotalRequestsPerSec.byClusterByRole` +
+ `aws.neptune.TotalRequestsPerSec` + + `Instance` + + `aws.neptune.TotalRequestsPerSec.byInstance` +
+ `aws.neptune.TotalServerErrorsPerSec` + + `Cluster` + + `aws.neptune.TotalServerErrorsPerSec.byCluster` +
+ `aws.neptune.TotalServerErrorsPerSec` + + `ClusterByRole` + + `aws.neptune.TotalServerErrorsPerSec.byClusterByRole` +
+ `aws.neptune.TotalServerErrorsPerSec` + + `Instance` + + `aws.neptune.TotalServerErrorsPerSec.byInstance` +
+ `aws.neptune.VolumeBytesUsed` + + `Cluster` + + `aws.neptune.VolumeBytesUsed.byCluster` +
+ `aws.neptune.VolumeBytesUsed` + + `ClusterByRole` + + `aws.neptune.VolumeBytesUsed.byClusterByRole` +
+ `aws.neptune.VolumeBytesUsed` + + `Instance` + + `aws.neptune.VolumeBytesUsed.byInstance` +
+ `aws.neptune.VolumeReadIOPs` + + `Cluster` + + `aws.neptune.VolumeReadIOPs.byCluster` +
+ `aws.neptune.VolumeReadIOPs` + + `ClusterByRole` + + `aws.neptune.VolumeReadIOPs.byClusterByRole` +
+ `aws.neptune.VolumeReadIOPs` + + `Instance` + + `aws.neptune.VolumeReadIOPs.byInstance` +
+ `aws.neptune.VolumeWriteIOPs` + + `Cluster` + + `aws.neptune.VolumeWriteIOPs.byCluster` +
+ `aws.neptune.VolumeWriteIOPs` + + `ClusterByRole` + + `aws.neptune.VolumeWriteIOPs.byClusterByRole` +
+ `aws.neptune.VolumeWriteIOPs` + + `Instance` + + `aws.neptune.VolumeWriteIOPs.byInstance` +
+ `aws.rds.VolumeBytesUsed` + + `DbCluster` + + `aws.rds.VolumeBytesUsed.byDbCluster` +
+ `aws.rds.VolumeReadIOPs` + + `DbCluster` + + `aws.rds.VolumeReadIOPs.byDbCluster` +
+ `aws.rds.VolumeWriteIOPs` + + `DbCluster` + + `aws.rds.VolumeWriteIOPs.byDbCluster` +
+ `aws.redshift.CPUUtilization` + + `Cluster` + + `aws.redshift.CPUUtilization.byCluster` +
+ `aws.redshift.CPUUtilization` + + `Node` + + `aws.redshift.CPUUtilization.byNode` +
+ `aws.redshift.DatabaseConnections` + + `Cluster` + + `aws.redshift.DatabaseConnections.byCluster` +
+ `aws.redshift.DatabaseConnections` + + `Node` + + `aws.redshift.DatabaseConnections.byNode` +
+ `aws.redshift.HealthStatus` + + `Cluster` + + `aws.redshift.HealthStatus.byCluster` +
+ `aws.redshift.HealthStatus` + + `Node` + + `aws.redshift.HealthStatus.byNode` +
+ `aws.redshift.MaintenanceMode` + + `Cluster` + + `aws.redshift.MaintenanceMode.byCluster` +
+ `aws.redshift.MaintenanceMode` + + `Node` + + `aws.redshift.MaintenanceMode.byNode` +
+ `aws.redshift.NetworkReceiveThroughput` + + `Cluster` + + `aws.redshift.NetworkReceiveThroughput.byCluster` +
+ `aws.redshift.NetworkReceiveThroughput` + + `Node` + + `aws.redshift.NetworkReceiveThroughput.byNode` +
+ `aws.redshift.NetworkTransmitThroughput` + + `Cluster` + + `aws.redshift.NetworkTransmitThroughput.byCluster` +
+ `aws.redshift.NetworkTransmitThroughput` + + `Node` + + `aws.redshift.NetworkTransmitThroughput.byNode` +
+ `aws.redshift.PercentageDiskSpaceUsed` + + `Cluster` + + `aws.redshift.PercentageDiskSpaceUsed.byCluster` +
+ `aws.redshift.PercentageDiskSpaceUsed` + + `Node` + + `aws.redshift.PercentageDiskSpaceUsed.byNode` +
+ `aws.redshift.ReadIOPS` + + `Cluster` + + `aws.redshift.ReadIOPS.byCluster` +
+ `aws.redshift.ReadIOPS` + + `Node` + + `aws.redshift.ReadIOPS.byNode` +
+ `aws.redshift.ReadLatency` + + `Cluster` + + `aws.redshift.ReadLatency.byCluster` +
+ `aws.redshift.ReadLatency` + + `Node` + + `aws.redshift.ReadLatency.byNode` +
+ `aws.redshift.ReadThroughput` + + `Cluster` + + `aws.redshift.ReadThroughput.byCluster` +
+ `aws.redshift.ReadThroughput` + + `Node` + + `aws.redshift.ReadThroughput.byNode` +
+ `aws.redshift.WriteIOPS` + + `Cluster` + + `aws.redshift.WriteIOPS.byCluster` +
+ `aws.redshift.WriteIOPS` + + `Node` + + `aws.redshift.WriteIOPS.byNode` +
+ `aws.redshift.WriteLatency` + + `Cluster` + + `aws.redshift.WriteLatency.byCluster` +
+ `aws.redshift.WriteLatency` + + `Node` + + `aws.redshift.WriteLatency.byNode` +
+ `aws.redshift.WriteThroughput` + + `Cluster` + + `aws.redshift.WriteThroughput.byCluster` +
+ `aws.redshift.WriteThroughput` + + `Node` + + `aws.redshift.WriteThroughput.byNode` +
+ `aws.states.ConsumedCapacity` + + `ApiUsage` + + `aws.states.ConsumedCapacity.byApiUsage` +
+ `aws.states.ConsumedCapacity` + + `Service` + + `aws.states.ConsumedCapacity.byService` +
+ `aws.states.ProvisionedBucketSize` + + `ApiUsage` + + `aws.states.ProvisionedBucketSize.byApiUsage` +
+ `aws.states.ProvisionedBucketSize` + + `Service` + + `aws.states.ProvisionedBucketSize.byService` +
+ `aws.states.ProvisionedRefillRate` + + `ApiUsage` + + `aws.states.ProvisionedRefillRate.byApiUsage` +
+ `aws.states.ProvisionedRefillRate` + + `Service` + + `aws.states.ProvisionedRefillRate.byService` +
+ `aws.states.ThrottledEvents` + + `ApiUsage` + + `aws.states.ThrottledEvents.byApiUsage` +
+ `aws.states.ThrottledEvents` + + `Service` + + `aws.states.ThrottledEvents.byService` +
+ ## API 폴링 측정항목 [#aws-metrics-table] 각 폴링 통합 및 해당 이름에서 사용 가능한 측정항목에 대한 참조는 [개별 통합에 대한 문서를 확인하세요](/docs/infrastructure/amazon-integrations/get-started/introduction-aws-integrations/). diff --git a/src/i18n/content/kr/docs/infrastructure/install-infrastructure-agent/get-started/requirements-infrastructure-agent.mdx b/src/i18n/content/kr/docs/infrastructure/install-infrastructure-agent/get-started/requirements-infrastructure-agent.mdx index ea9bead17ae..6379284e6df 100644 --- a/src/i18n/content/kr/docs/infrastructure/install-infrastructure-agent/get-started/requirements-infrastructure-agent.mdx +++ b/src/i18n/content/kr/docs/infrastructure/install-infrastructure-agent/get-started/requirements-infrastructure-agent.mdx @@ -45,10 +45,21 @@ import osPuppet from 'images/os_icon_puppet.webp' 인프라 에이전트는 다음 프로세서 아키텍처를 지원합니다. -* **Linux** : x86 프로세서 아키텍처용 64비트(64비트 패키지 관리자 및 종속성도 필요) -* **Windows** : x86 프로세서 아키텍처의 경우 32비트 및 64비트 모두 -* **ARM** : [AWS Graviton 2 프로세서](https://aws.amazon.com/ec2/graviton/) 를 포함한 arm64 아키텍처는 호환되는 Linux 운영 체제에서 지원됩니다. 호스트 내 통합도 지원됩니다(Oracle 통합 제외). -* **macOS** : 64비트 x86 및 Apple 실리콘 모두. +* **Linux** + + : x86 프로세서 아키텍처용 64비트(64비트 패키지 매니저 및 의존성/종속성 필요) + +* **Windows** + + : x86 프로세서 아키텍처용 32비트 및 64비트 모두 + +* **ARM** + + : [AWS Graviton 2 프로세서를](https://aws.amazon.com/ec2/graviton/) 포함한 arm64 아키텍처는 호환되는 Linux 운영 체제에서 지원됩니다. 온호스트 통합도 지원됩니다(Oracle 통합 제외). + +* **macOS** + + : 64비트 x86 및 Apple Silicon 모두. ## 운영체제 @@ -160,7 +171,7 @@ import osPuppet from 'images/os_icon_puppet.webp' - 버전 12.1, 12.2, 12.3, 12.4, 12.5, 15, 15.1, 15.2, 15.3, 15.4, 15.5 + 버전 12.5, 15.2, 15.3, 15.4, 15.5 @@ -221,9 +232,17 @@ Amazon BottleRocket 워크로드를 모니터링할 수도 있습니다. 인프라 에이전트에는 다음 권한이 필요합니다. -* **Linux** : 기본적으로 [에이전트는 root 로 실행 및 설치됩니다](/docs/infrastructure/new-relic-infrastructure/installation/install-infrastructure-agent-linux#agent-mode-intro) . 권한 있는 실행 모드 또는 [권한](/docs/infrastructure/new-relic-infrastructure/installation/install-infrastructure-agent-linux#install-privileged) [없는](/docs/infrastructure/new-relic-infrastructure/installation/install-infrastructure-agent-linux#install-unprivileged) 실행 모드를 선택할 수도 있습니다. -* **Windows** : 에이전트는 관리자 계정으로 설치해야 하며 실행하려면 관리자 권한이 필요합니다. -* **macOS** : 에이전트는 모든 사용자 계정에서 설치할 수 있습니다. +* **Linux** + + : 기본적으로 [에이전트는 루트로 실행되고 설치됩니다](/docs/infrastructure/new-relic-infrastructure/installation/install-infrastructure-agent-linux#agent-mode-intro). [권한 있는](/docs/infrastructure/new-relic-infrastructure/installation/install-infrastructure-agent-linux#install-privileged) 실행 모드 또는 [권한 없는](/docs/infrastructure/new-relic-infrastructure/installation/install-infrastructure-agent-linux#install-unprivileged) 실행 모드를 선택할 수도 있습니다. + +* **Windows** + + : 에이전트는 관리자 계정으로 설치해야 하며, 실행하려면 관리자 권한이 필요합니다. + +* **macOS** + + : 에이전트는 모든 사용자 계정에서 설치할 수 있습니다. ## 도서관 diff --git a/src/i18n/content/kr/docs/logs/log-api/introduction-log-api.mdx b/src/i18n/content/kr/docs/logs/log-api/introduction-log-api.mdx index cc8c4e38e82..50ea2a2f8ad 100644 --- a/src/i18n/content/kr/docs/logs/log-api/introduction-log-api.mdx +++ b/src/i18n/content/kr/docs/logs/log-api/introduction-log-api.mdx @@ -41,11 +41,9 @@ https://gov-log-api.newrelic.com/log/v1 Log API를 통해 New Relic 계정에 로그 데이터를 보내려면: -1. 당신의 +1. - - - . + 을(를) 받으세요. 2. JSON 페이로드에 대한 [제한 및 제한된 문자](#limits) 를 검토하십시오. @@ -61,7 +59,7 @@ Log API를 통해 New Relic 계정에 로그 데이터를 보내려면: 6. 트래픽을 생성하고 몇 분 정도 기다린 다음 [계정에서 데이터를 확인하십시오](#what-next) . -활성화한 후 데이터가 나타나지 않으면 기능을 사용하려면 [문제 해결 절차를](/docs/logs/log-management/troubleshooting/no-log-data-appears-ui/) 따르세요. +기능을 활성화한 후에도 데이터가 나타나지 않으면 [문제 해결, 문제 해결 절차를](/docs/logs/log-management/troubleshooting/no-log-data-appears-ui/) 따르세요. ## HTTP 헤더 [#json-headers] @@ -102,7 +100,7 @@ Gzip으로 압축된 JSON 형식이 허용됩니다. 압축된 JSON을 보내는 ## 입증 [#authentication] -당신의 Log API에 대한 요청을 인증하고 제출된 로그 메시지가 기록될 New Relic 계정을 결정합니다. HTTP 헤더 또는 쿼리 문자열 매개변수로 전달되어야 합니다. +귀하의 은(는) 로그인 API에 대한 요청을 인증하는 역할을 하며 제출된 로그 메시지가 기록될 뉴렐릭 계정을 결정합니다. HTTP 헤더나 쿼리 문자열로 전달되어야 합니다. ### 옵션 1: HTTP 헤더를 사용하여 인증 [#auth-header] @@ -128,7 +126,7 @@ Gzip으로 압축된 JSON 형식이 허용됩니다. 압축된 JSON을 보내는 - New Relic . [쿼리 매개변수를 통해 보낼](#query-parameters) 수도 있습니다. + 뉴렐릭 . [쿼리를 통해 이를 보낼](#query-parameters) 수도 있습니다. @@ -160,7 +158,7 @@ Gzip으로 압축된 JSON 형식이 허용됩니다. 압축된 JSON을 보내는 - 당신의 . [HTTP 헤더를 통해 보낼](#auth-header)수도 있습니다. + 귀하의 . [HTTP 헤더를 통해 이를 보낼](#auth-header) 수도 있습니다. @@ -243,7 +241,7 @@ Gzip으로 압축된 JSON 형식이 허용됩니다. 압축된 JSON을 보내는 - 기본적으로 검색되는 **기본** 로그 메시지 필드입니다. + 기본적으로 검색되는 **main** 로그 메시지 필드입니다. @@ -298,7 +296,7 @@ Gzip으로 압축된 JSON 형식이 허용됩니다. 압축된 JSON을 보내는 id="detailed-json" title="자세한 JSON 본문 메시지" > - 자세한 형식을 사용하여 본문을 만들 때 각각 다음 형식을 가진 하나 이상의 JSON 개체를 포함하는 **JSON 배열** 이어야 합니다. + 세부 형식을 사용하여 본문을 생성하는 경우 각 JSON 객체는 다음 형식을 갖는 하나 이상의 JSON 객체를 포함하는 **JSON array** 이어야 합니다. @@ -472,10 +470,22 @@ Gzip으로 압축된 JSON 형식이 허용됩니다. 압축된 JSON을 보내는 Log API로 전송되는 로그에 대한 제한 사항: -* 페이로드 총 크기: **POST당 최대 1MB(10^6바이트)** . 압축을 사용하는 것이 좋습니다. -* 페이로드는 **UTF-8** 로 인코딩되어야 합니다. +* 페이로드 총 크기: + + **1MB(10^6 bytes) maximum per POST** + + . 압축을 사용하는 것이 좋습니다. + +* 페이로드는 + + **UTF-8** + + 으로 인코딩되어야 합니다. + * 이벤트당 속성 수: 최대 255개. + * 속성 이름 길이: 255자. + * 속성 값의 길이: 처음 4,094자는 NRDB에 `message` 과 같은 이름이 같은 `Log` 이벤트 필드로 저장됩니다. 문자열 값이 4,094자를 초과하면 긴 문자열을 [blob](/docs/logs/ui-data/long-logs-blobs) 으로 저장합니다. 일부 특정 속성에는 추가 제한 사항이 있습니다. @@ -525,7 +535,7 @@ Log API로 전송된 로그의 속도 제한: ### 로그 페이로드 형식 [#payload-format] -모든 유효한 JSON 페이로드를 허용합니다. 페이로드는 **UTF-8** 로 인코딩되어야 합니다. +유효한 JSON 페이로드는 모두 허용됩니다. 페이로드는 **UTF-8** 으로 인코딩되어야 합니다. ## JSON 메시지 속성 [#attributes] diff --git a/src/i18n/content/kr/docs/new-relic-solutions/new-relic-one/introduction-new-relic-platform.mdx b/src/i18n/content/kr/docs/new-relic-solutions/new-relic-one/introduction-new-relic-platform.mdx index 825c8cfeac1..2e72f79f525 100644 --- a/src/i18n/content/kr/docs/new-relic-solutions/new-relic-one/introduction-new-relic-platform.mdx +++ b/src/i18n/content/kr/docs/new-relic-solutions/new-relic-one/introduction-new-relic-platform.mdx @@ -35,7 +35,7 @@ import accountsUserMenuLocation from 'images/accounts_screenshot-full_user-menu- 이제 [New Relic 계정을 만들고](https://newrelic.com/signup) [몇 가지 관찰 가능성 도구를 설치했으므로](/docs/new-relic-solutions/get-started/implementation-guide-intro)플랫폼을 탐색하기 위한 몇 가지 팁이 필요할 것입니다. -New Relic에 액세스하려면 **[one.newrelic.com](https://one.newrelic.com/all-capabilities)**으로 이동하십시오. EU 데이터 센터 계정이 있는 경우 **[one.eu.newrelic.com](https://one.eu.newrelic.com)**으로 이동합니다. +뉴렐릭에 액세스하려면 **[one.newrelic.com](https://one.newrelic.com/all-capabilities)** 로 이동하세요. EU 데이터 센터 계정이 있는 경우 **[one.eu.newrelic.com](https://one.eu.newrelic.com)** 로 이동하세요. 아래는 더 중요한 New Relic 경험을 다루는 15분짜리 비디오입니다. 이 비디오는 [전체 플랫폼 사용자가](/docs/accounts/accounts-billing/new-relic-one-user-management/user-type) 플랫폼을 경험하는 방법을 보여줍니다. @@ -108,7 +108,7 @@ New Relic에 액세스하려면 **[one.newrelic.com](https://one.newrelic.com/al - New Relic을 처음 사용하는 경우 왼쪽 메뉴를 사용자 정의할 수 있습니다. 그렇게 하려면 [**모든 기능** 페이지](https://one.newrelic.com/all-capabilities) 로 이동하여 핵심 기능과 경험을 찾으십시오. 그런 다음 자주 사용하게 될 기능을 고정할 수 있습니다. + 뉴렐릭을 처음 사용하신다면 왼쪽 메뉴를 맞춤설정하실 수도 있습니다. 그렇게 하려면 [**All capabilities** 페이지](https://one.newrelic.com/all-capabilities) 로 이동하여 핵심 기능과 경험을 찾아보세요. 그런 다음 자주 사용할 것으로 생각되는 기능을 고정할 수 있습니다.
- **List**, **Navigator**및 **Lookout** 보기를 통해 전체 시스템에서 진행 중인 상황을 빠르게 이해할 수 있습니다. + **List**, **Navigator****Lookout** 보기는 전체 시스템에서 진행 중인 상황을 빠르게 이해하는 데 도움이 됩니다.
- 전체 시스템이 어떻게 작동하는지 파악하려면 **All entities** 를 클릭하십시오. [엔터티](/docs/new-relic-solutions/new-relic-one/core-concepts/what-entity-new-relic) 라는 용어는 애플리케이션, 호스트, 데이터베이스 서비스 등 New Relic이 모니터링하는 것을 가리킬 때 사용합니다. + 전체 시스템이 어떻게 작동하는지 알아보려면 **All entities** 클릭하세요. 우리는 애플리케이션, 호스트, 데이터베이스 서비스 등 뉴렐릭이 모니터링하는 것을 지칭하기 위해 [부분이라는](/docs/new-relic-solutions/new-relic-one/core-concepts/what-entity-new-relic) 용어를 사용합니다. - **All entities** \[모든 엔터티] 를 클릭하면 엔터티 목록 보기라고도 하는 엔터티 탐색기 보기가 나타납니다. 오른쪽 상단에서 **List** \[목록이] 어떻게 선택되었는지 확인하십시오. + **All entities** 클릭하면 분할 목록 보기라고도 알려진 분할 탐색기 보기가 표시됩니다. 오른쪽 상단에서 **List** 어떻게 선택되었는지 확인하세요. - 이 보기는 모니터링 중인 모든 항목의 개요를 범주로 분류하여 보여줍니다([이 범주에 대해 알아보기](/docs/new-relic-solutions/new-relic-one/core-concepts/new-relic-explorer-view-performance-across-apps-services-hosts/#find)). 모니터링되는 엔터티가 많은 경우 경고 인시던트가 있는 엔터티에 우선 순위를 두고 각 범주에 몇 개만 표시될 수 있습니다. 모든 범주에 대해 **View all** \[모두 보기를] 클릭하여 해당 범주의 더 많은 엔터티를 볼 수 있습니다. + 이 보기에는 모니터링 중인 모든 항목의 개요가 범주별로 분류되어 표시됩니다([이 범주에 대해 자세히 알아보기](/docs/new-relic-solutions/new-relic-one/core-concepts/new-relic-explorer-view-performance-across-apps-services-hosts/#find)). 모니터링하는 부분이 많은 경우 각 범주별로 몇 가지만 표시할 수 있으며, 인시던트에게 경고를 보낸 항목에 우선순위를 둡니다. 모든 카테고리에 대해 **View all** 클릭하면 해당 카테고리의 더 많은 부분을 볼 수 있습니다. 모니터링하는 모든 항목을 탐색하는 또 다른 방법으로 왼쪽 엔터티 범주 메뉴를 위아래로 스크롤할 수도 있습니다. - 이 보기에서 **Navigator** 및 **Lookout** 환경으로 전환할 수 있으며 전체 시스템을 한 눈에 이해하는 데에도 도움이 됩니다. [시스템에 대한 이러한 상위 수준 보기에 대해 자세히 알아보십시오](/docs/new-relic-solutions/new-relic-one/core-concepts/new-relic-explorer-view-performance-across-apps-services-hosts). + 이 보기에서는 전체 시스템을 한눈에 이해하는 데도 도움이 되는 **Navigator****Lookout** 환경으로 전환할 수 있습니다. [시스템에 대한 높은 수준의 보기에 대해 자세히 알아보세요](/docs/new-relic-solutions/new-relic-one/core-concepts/new-relic-explorer-view-performance-across-apps-services-hosts). - New Relic에는 강력한 검색 기능도 있습니다. 검색하려면 왼쪽에서 **Quick Find** \[빠른 찾기를] 클릭하세요. 무엇을 검색하든 모니터링되는 서비스, 모니터링되는 호스트, 사용자 지정 대시보드 등 다양한 위치에서 해당 단어가 나타나는 위치가 표시됩니다. New Relic으로 모니터링하는 항목이 많을수록 검색 버튼을 더 많이 사용할 가능성이 높습니다. 검색 작동 방식에 대한 자세한 내용은 [검색 을](/docs/new-relic-solutions/new-relic-one/ui-data/basic-ui-features/#search) 참조하세요. + 뉴렐릭에는 강력한 검색 기능도 있습니다. 검색하려면 왼쪽의 **Quick Find** 클릭하세요. 무엇을 검색하든 모니터링되는 서비스, 모니터링되는 호스트, 사용자 정의 대시보드 등 다양한 위치에서 해당 단어가 나타나는 위치가 표시됩니다. 뉴렐릭으로 모니터링하는 항목이 많을수록 검색 버튼을 더 많이 사용할 가능성이 높습니다. 검색 작동 방식에 대한 자세한 내용은 [검색 을](/docs/new-relic-solutions/new-relic-one/ui-data/basic-ui-features/#search) 참조하세요.
@@ -186,7 +186,7 @@ New Relic에 액세스하려면 **[one.newrelic.com](https://one.newrelic.com/al src={chartOptions} /> - 모든 New Relic 차트에는 팀원과의 공유 옵션, 생성 옵션 등 다양한 옵션이 있습니다. 차트에 표시된 측정항목 및 차트의 기본 쿼리를 보고 수정하기 위한 옵션입니다. [차트 옵션에 대해 자세히 알아보세요.](/docs/new-relic-solutions/new-relic-one/ui-data/basic-ui-features) + 모든 뉴렐릭 차트에는 팀원과 공유하는 옵션, 차트에 표시된 지표에 대한 생성 옵션, 차트의 기본 쿼리를 보고 편집하는 옵션 등 다양한 옵션을 사용할 수 있습니다. [차트 옵션에 대해 자세히 알아보세요.](/docs/new-relic-solutions/new-relic-one/ui-data/basic-ui-features) @@ -198,8 +198,17 @@ New Relic에 액세스하려면 **[one.newrelic.com](https://one.newrelic.com/al 분산 추적에 도달하는 몇 가지 방법이 있습니다. - * 글로벌 분산 추적의 경우 **[one.newrelic.com > All capabilities](https://one.newrelic.com/all-capabilities) > Traces** 으로 이동하십시오. 이것은 계정과 엔터티 전체에서 추적을 보여줍니다. - * 엔터티별 추적. 모니터링되는 특정 엔터티(예: APM 모니터링 앱)로 이동하여 **분산 추적을** 클릭할 수도 있습니다. 그러면 해당 특정 엔터티와 관련된 추적이 표시됩니다. + * 전역 분산 추적의 경우 다음으로 이동하세요. + + **[one.newrelic.com > All capabilities](https://one.newrelic.com/all-capabilities) > Traces** + + . 이는 귀하의 계정 전체와 파티션의 트레이스를 보여줍니다. + + * 파티션별 추적. 모니터링되는 특정 분할(예: APM 모니터링 앱)로 이동하여 거기에서 + + **Distributed tracing** + + 클릭할 수도 있습니다. 그것은 특정 파티션과 관련된 트레이스를 보여줍니다. **Service map** 클릭하면 해당 서비스가 모니터링되는 다른 부분과 어떻게 관련되는지 시각적 지도를 볼 수 있습니다. 자세한 내용은 [서비스 맵을](/docs/new-relic-solutions/new-relic-one/ui-data/service-maps/introduction-service-maps) 참조하세요. **Metrics and events** 탐색기](https://one.newrelic.com/data-explorer) 로 이동하세요. @@ -256,7 +265,7 @@ New Relic에 액세스하려면 **[one.newrelic.com](https://one.newrelic.com/al ## 뉴스 및 업데이트 [#whats-new] -또한 **Help** \[도움말]이라고 표시된 사용자 메뉴 근처에서 [**What's new?** \[새로운 소식\] 게시물](/whats-new) 에 액세스할 수 있습니다.이는 흥미로운 새 기능과 중요한 변경 사항에 대한 공지입니다. +또한 **Help** 라고 표시된 사용자 메뉴 근처에서 [**What's new?** 게시물에](/whats-new) 액세스할 수 있습니다. 이는 흥미로운 새 기능과 중요한 변경 사항에 대한 공지입니다. New Relic 플랫폼에 대한 소개는 [New Relic 알아보기 를](/docs/new-relic-solutions/new-relic-one/introduction-new-relic-one)참조하십시오. 이 문서는 플랫폼 검색, 차트 옵션, 공유 옵션 등을 포함한 몇 가지 기본 플랫폼 경험에 대해 자세히 설명합니다. @@ -284,7 +293,7 @@ New Relic 플랫폼에 대한 소개는 [New Relic 알아보기 를](/docs/new-r
@@ -364,7 +373,7 @@ New Relic 플랫폼에 대한 소개는 [New Relic 알아보기 를](/docs/new-r @@ -374,7 +383,7 @@ New Relic 플랫폼에 대한 소개는 [New Relic 알아보기 를](/docs/new-r @@ -383,16 +392,22 @@ New Relic 플랫폼에 대한 소개는 [New Relic 알아보기 를](/docs/new-r 공유에 대한 몇 가지 참고 사항: * 공유하는 사람은 해당 계정의 데이터를 볼 수 있는 액세스 권한이 없을 수 있습니다. 이를 해결하려면 팀에서 New Relic 사용자 관리 기능을 가진 누군가가 해당 사람을 계정에 추가해야 합니다. + * 누군가 사용자 정의 대시보드에 액세스할 수 없는 경우 비공개로 설정되어 있을 수 있습니다. [대시보드 권한](/docs/query-your-data/explore-query-data/dashboards/introduction-dashboards#dashboards-permissions) 에 대해 자세히 알아보세요. -* 일부 공유 옵션에는 관련 시간 범위가 있어 나중에 보는 데 영향을 줄 수 있습니다. 예를 들어 차트의 **차트 가져오기 링크** 옵션을 사용하고 해당 차트가 '지난 30분'으로 설정되어 있는 경우 차트를 볼 때 공유할 때 표시된 시간 범위가 아니라 지난 30분이 표시됩니다. 특정 시간 범위를 공유하려면 UI에서 해당 시간 범위를 선택해야 합니다. + +* 일부 공유 옵션에는 관련 시간 범위가 있어 나중에 보는 데 영향을 미칠 수 있습니다. 예를 들어 차트의 + + **Get chart link** + + 옵션을 사용하고 해당 차트가 '지난 30분'으로 설정된 경우 공유할 때 표시된 시간 범위가 아닌 지난 30분이 표시됩니다. 특정 시간 범위를 공유하려면 UI에서 해당 시간 범위를 선택해야 합니다. ## 계정, 기능 및 엔터티 검색 [#search] -모든 New Relic 데이터를 검색하려면 New Relic UI 상단에 있는 **Quick Find**를 클릭하세요. 여기에서 엔터티와 New Relic 기능을 검색할 수 있습니다. +모든 뉴렐릭 데이터를 검색하려면 뉴렐릭 UI 상단에 있는 **Quick Find** 클릭하세요. 여기에서 분리 및 뉴렐릭 기능을 검색할 수 있습니다. -당신이 전자상거래 상점의 개발자이고 장바구니를 모니터링하는 서비스를 찾고 있다고 가정해 보겠습니다. **Search and Navigate** \[검색 및 탐색] 필드에 `Checkout-service` 입력할 수 있습니다. 해당 설명과 일치하는 모든 엔터티를 볼 수 있습니다. 각 결과에는 경고 심각도 아이콘이 있으므로 문제가 있는지 빠르게 확인할 수 있습니다. +당신이 전자상거래 상점의 개발자이고 장바구니를 모니터링하는 서비스를 찾고 있다고 가정해 보겠습니다. **Search and Navigate** 필드에 `Checkout-service` 입력할 수 있습니다. 해당 설명과 일치하는 부분을 모두 볼 수 있습니다. 각 결과에는 알림 심각도 아이콘이 있으므로 문제가 있는지 빠르게 확인할 수 있습니다. -그런데 카트를 관리하는 주체의 이름이 기억나지 않는다면 어떻게 될까요? 대신 **APM & Services** \[APM 및 서비스] 또는 **Alerts & AI** \[경고 및 AI와] 같은 기능을 검색할 수 있습니다. 기능에는 경고 상태 아이콘이 없습니다. +그런데 카트를 관리하는 이사의 이름이 기억나지 않는다면 어떻게 될까요? 대신 **APM & Services** 또는 **Alerts & AI** 과 같은 기능을 검색할 수 있습니다. 기능에는 알림 상태 아이콘이 없습니다. * 이 검색은 조직에서 액세스 권한이 부여된 모든 계정을 찾습니다. 계정 액세스에 대한 자세한 내용은 액세스에 [영향을 미치는 요소](/docs/accounts/accounts-billing/general-account-settings/factors-affecting-access-features-data) 를 참조하십시오. * 더 이상 존재하지 않는 개체는 [8일 동안 검색할 수 있습니다](/docs/new-relic-one-entity-explorer#data-retention) . diff --git a/src/i18n/content/kr/docs/synthetics/synthetic-monitoring/getting-started/get-started-synthetic-monitoring.mdx b/src/i18n/content/kr/docs/synthetics/synthetic-monitoring/getting-started/get-started-synthetic-monitoring.mdx index 40bd7e2352c..40d7a1cb551 100644 --- a/src/i18n/content/kr/docs/synthetics/synthetic-monitoring/getting-started/get-started-synthetic-monitoring.mdx +++ b/src/i18n/content/kr/docs/synthetics/synthetic-monitoring/getting-started/get-started-synthetic-monitoring.mdx @@ -25,7 +25,7 @@ import syntheticStepMonitorSummaryPage from 'images/synthetic_screenshot-crop_St ### New Relic 계정에 로그인 [#create] - New Relic 계정에 로그인한 후 **[one.newrelic.com > Synthetic monitoring > Create a monitor](https://one.newrelic.com/synthetics-nerdlets/monitor-create)**로 이동합니다. **Page load performance** 타일을 선택합니다. + 뉴렐릭 계정에 로그인한 후 **[one.newrelic.com > Synthetic monitoring > Create a monitor](https://one.newrelic.com/synthetics-nerdlets/monitor-create)** 으로 이동하세요. **Page load performance** 타일을 선택합니다. New Relic 계정이 없으신가요? @@ -35,10 +35,13 @@ import syntheticStepMonitorSummaryPage from 'images/synthetic_screenshot-crop_St - 테스트하려는 페이지의 URL을 가져와서 **URL** 필드에 놓습니다. 최상의 결과를 얻으려면 다음을 권장합니다. + 테스트하려는 페이지의 URL을 가져와서 **URL** 필드에 놓습니다. 최상의 결과를 얻으려면 다음을 권장합니다. * 모니터가 배포되는 위치를 3개 이상 선택합니다. 이렇게 하면 수표에서 잘못된 긍정을 방지하는 데 도움이 됩니다. - * **Period** 드롭다운을 사용하여 확인 사이의 기간을 조정합니다. 배포 빈도는 전적으로 귀하에게 달려 있습니다. + + * **Period** + + 드롭다운 메뉴를 사용하여 검사 간격을 조정합니다. 구현하는 빈도, 배포하는 방법은 전적으로 귀하에게 달려 있습니다. @@ -55,7 +58,7 @@ import syntheticStepMonitorSummaryPage from 'images/synthetic_screenshot-crop_St - 모니터가 보고를 시작하면 합성 **Summary page**에서 데이터를 볼 수 있습니다. **[one.newrelic.com > Synthetic monitoring](https://one.newrelic.com/synthetics-nerdlets)** > (모니터 선택) > ( **Summary page**보기)로 이동합니다. + 모니터가 보고를 시작하면 신세틱스 **Summary page** 에서 데이터를 볼 수 있습니다. **[one.newrelic.com > Synthetic monitoring](https://one.newrelic.com/synthetics-nerdlets)** > (모니터 선택) > ( **Summary page** 보기)로 이동합니다. @@ -77,7 +80,7 @@ import syntheticStepMonitorSummaryPage from 'images/synthetic_screenshot-crop_St ### New Relic 계정에 로그인 [#steplogin] - New Relic 계정에 로그인한 후 **[one.newrelic.com > Synthetic monitoring > Create a monitor](https://one.newrelic.com/synthetics-nerdlets/monitor-create)**로 이동합니다. **User step execution** 타일을 선택합니다. + 뉴렐릭 계정에 로그인한 후 **[one.newrelic.com > Synthetic monitoring > Create a monitor](https://one.newrelic.com/synthetics-nerdlets/monitor-create)** 으로 이동하세요. **User step execution** 타일을 선택합니다. @@ -87,7 +90,7 @@ import syntheticStepMonitorSummaryPage from 'images/synthetic_screenshot-crop_St 모니터에 이름을 지정하고 모니터가 워크플로를 실행하는 빈도를 선택하고 모니터가 배포되는 위치를 선택합니다. - **[one.newrelic.com > Synthetic monitoring > Create a monitor](https://one.newrelic.com/synthetics-nerdlets/monitor-create)**으로 이동한 다음 **User step execution**선택합니다. + **[one.newrelic.com > Synthetic monitoring > Create a monitor](https://one.newrelic.com/synthetics-nerdlets/monitor-create)** 으로 이동한 다음 **User step execution** 선택합니다. @@ -112,7 +115,7 @@ import syntheticStepMonitorSummaryPage from 'images/synthetic_screenshot-crop_St 4. 구매할 항목과 같이 이 페이지에서 항목을 선택합니다. 5. 보안 자격 증명으로 양식을 작성하고 해당 항목을 구매한 다음 해당 양식을 제출합니다. - 어떤 빌드를 선택하든 모니터를 저장하기 전에 **Validate** 클릭해야 합니다. 유효성 검사는 연결한 단계가 성공적으로 실행되는지 확인합니다. + 어떤 빌드를 선택하든 모니터를 저장하기 전에 **Validate** 클릭하는 것을 잊지 마세요. 유효성 검사에서는 함께 묶은 단계가 성공적으로 실행되는지 확인합니다. @@ -130,7 +133,7 @@ import syntheticStepMonitorSummaryPage from 'images/synthetic_screenshot-crop_St - 모니터가 보고를 시작하면 합성 **Summary page**에서 데이터를 볼 수 있습니다. **[one.newrelic.com > Synthetic monitoring](https://one.newrelic.com/synthetics-nerdlets)** > (모니터 선택) > ( **Summary page**보기)로 이동합니다. + 모니터가 보고를 시작하면 신세틱스 **Summary page** 에서 데이터를 볼 수 있습니다. **[one.newrelic.com > Synthetic monitoring](https://one.newrelic.com/synthetics-nerdlets)** > (모니터 선택) > ( **Summary page** 보기)로 이동합니다. @@ -235,7 +238,7 @@ import syntheticStepMonitorSummaryPage from 'images/synthetic_screenshot-crop_St -**[one.newrelic.com > Synthetic monitoring > Create a monitor](https://one.newrelic.com/synthetics-nerdlets/monitor-create)**로 이동한 다음 스크립팅된 브라우저에 대한 **User flow/functionality** 선택합니다. +**[one.newrelic.com > Synthetic monitoring > Create a monitor](https://one.newrelic.com/synthetics-nerdlets/monitor-create)** 으로 이동한 다음 스크립트 브라우저에 대해 **User flow/functionality** 선택합니다. ## 다음은 뭐지? [#next] diff --git a/src/i18n/content/kr/docs/tutorial-improve-site-performance/guide-to-monitoring-core-web-vitals.mdx b/src/i18n/content/kr/docs/tutorial-improve-site-performance/guide-to-monitoring-core-web-vitals.mdx index 0f0695f7c89..0df46e16fb8 100644 --- a/src/i18n/content/kr/docs/tutorial-improve-site-performance/guide-to-monitoring-core-web-vitals.mdx +++ b/src/i18n/content/kr/docs/tutorial-improve-site-performance/guide-to-monitoring-core-web-vitals.mdx @@ -29,11 +29,7 @@ import browserSessionTraces from 'images/browser_screenshot-crop_session-traces. ## 핵심 웹 바이탈 이해 [#understand] -이미 New Relic으로 브라우저 앱을 모니터링하고 있는 경우 **[one.newrelic.com > All capabilities](https://one.newrelic.com/all-capabilities) > Browser > (앱 선택) > Monitor > Web vitals** 로 이동합니다. - - - 일부 고객의 경우 **웹 바이탈** 이 **모니터** 아래가 아닌 **추가 보기** 아래에 있을 수 있습니다. - +이미 뉴렐릭으로 브라우저 앱을 모니터링하고 있다면 **[one.newrelic.com > All capabilities](https://one.newrelic.com/all-capabilities) > Browser > (select an app) > Monitor > Web vitals** 으)로 이동하세요.
- **[one.newrelic.com > All capabilities](https://one.newrelic.com/all-capabilities) > Browser > (앱 선택) > Monitor > Web vitals**: 사이트 전체의 핵심 웹 바이탈, 즐겨찾기 주요 웹 페이지를 추적하고 기간별로 필터링합니다. + **[one.newrelic.com > All capabilities](https://one.newrelic.com/all-capabilities) > Browser > (select an app) > Monitor > Web vitals**: 코어 웹 바이탈 사이트 전체, 즐겨찾는 주요 웹페이지를 추적하고 기간별로 필터링합니다.
세 가지 핵심 웹 바이탈은 다음과 같습니다. @@ -75,7 +71,9 @@ import browserSessionTraces from 'images/browser_screenshot-crop_session-traces.
- **[one.newrelic.com > All capabilities](https://one.newrelic.com/all-capabilities) > Query builder** 로 이동하여 데이터를 쿼리하거나 **[one.newrelic.com > All capabilities](https://one.newrelic.com/all-capabilities) > Metrics & events** 로 이동하여 데이터를 탐색합니다. + 데이터를 쿼리하려면 **[one.newrelic.com > All capabilities](https://one.newrelic.com/all-capabilities) > Query builder** 으로 이동하고, 데이터를 탐색하려면 **[one.newrelic.com > All capabilities](https://one.newrelic.com/all-capabilities) > Metrics & events** 로 이동하세요.
- New Relic에 가입하도록 누군가를 초대하여 그들이 무언가를 보거나 문제에 대해 협력할 수 있도록 하려면 [사용자 메뉴](/docs/accounts/accounts-billing/general-account-settings/intro-account-settings) 로 이동하여 **사용자 추가를**클릭하십시오. + 누군가를 뉴렐릭에 가입하도록 초대하여 그들이 무언가를 보거나 문제에 대해 공동 작업을 할 수 있도록 하려면 [사용자 메뉴](/docs/accounts/accounts-billing/general-account-settings/intro-account-settings) 로 이동하여 **Add user** 클릭하세요.
- New Relic 차트가 [NRQL 쿼리로 작성된](/docs/query-your-data/nrql-new-relic-query-language/get-started/introduction-nrql-new-relics-query-language) 경우 **이미지로** **가져오기 및 차트 링크 가져오기** 와 같은 공유 옵션을 포함하여 다양한 옵션을 표시하는 메뉴입니다. + 뉴렐릭 차트가 [NRQL 쿼리로 구축된](/docs/query-your-data/nrql-new-relic-query-language/get-started/introduction-nrql-new-relics-query-language) 경우 **Get as image****Get chart link** 같은 공유 옵션을 포함하여 다양한 옵션을 표시하는 메뉴입니다.
- **가장 큰 만족스러운 페인트** + + **Largest contentful paint** + @@ -93,7 +91,9 @@ import browserSessionTraces from 'images/browser_screenshot-crop_session-traces.
- **첫 번째 입력 지연** + + **First input delay** + @@ -111,7 +111,9 @@ import browserSessionTraces from 'images/browser_screenshot-crop_session-traces.
- **누적 레이아웃 이동** + + **Cumulative layout shift** + @@ -129,11 +131,11 @@ import browserSessionTraces from 'images/browser_screenshot-crop_session-traces.
-**좋은** 웹 바이탈은 조직이 비용을 절감하고 SEO를 높이는 데 도움이 될 수 있습니다. **나쁨** 또는 **개선 필요** 는 조직에 대한 부정적인 사용자 인식을 반영할 수 있으며, 이는 고객 불만족 또는 비즈니스 기회 손실로 이어질 수 있습니다. +**Good** 웹 바이탈은 조직이 비용을 절감하고 SEO를 높이는 데 도움이 될 수 있습니다. **Poor** 또는 **Needs improvement** 조직에 대한 사용자의 부정적인 인식을 반영할 수 있으며, 이로 인해 고객이 불만족스럽거나 비즈니스 기회를 잃을 수 있습니다. ## 특정 페이지로 드릴다운 [#drill-down] -중요한 페이지(예: 전자상거래 결제 페이지)에 대한 통찰력을 얻으려면 **Page URL** \[페이지 URL] 테이블에서 찾으십시오. 최종 사용자가 사이트의 해당 영역을 경험하는 방식을 이해하는 데 사용할 수 있는 핵심 웹 바이탈에 기여하는 항목에 대한 분석이 표시됩니다. 예를 들어 Chrome 브라우저에서 성능 저하 패턴을 발견한 경우 해당 사용자 기반에 대한 향후 개선 사항을 선별할 수 있습니다. +인사이트를 중요한 페이지(예: 전자상거래 결제 페이지)로 이동하려면 **Page URL** 표에서 찾으세요. 최종 사용자가 사이트의 해당 영역을 어떻게 경험하고 있는지 이해하는 데 사용할 수 있는 코어 웹 바이탈에 기여하는 내용에 대한 분석을 볼 수 있습니다. 예를 들어 Chrome 브라우저에서 성능 저하 패턴이 발견되면 해당 사용자 기반에 대한 향후 개선 사항을 선별할 수 있습니다.
- **[one.newrelic.com > All capabilities](https://one.newrelic.com/all-capabilities) > Browser > (앱 선택) > Monitor > Web vitals > (페이지 URL 클릭)**: 가장 영향력 있는 웹 페이지에 대한 핵심 웹 바이탈 분석을 봅니다. + **[one.newrelic.com > All capabilities](https://one.newrelic.com/all-capabilities) > Browser > (select an app) > Monitor > Web vitals > (click on a page URL)**: 가장 영향력 있는 웹페이지에 대한 코어 웹 바이탈 분석을 확인하세요.
## 주요 속성으로 필터링 [#key-attributes] -백엔드 변경 또는 성능 문제가 핵심 웹 바이탈에 미치는 영향과 같은 특정 사항을 조사하려는 경우 **필터링** 기준 도구를 사용하여 주요 속성을 필터링할 수 있습니다. +백앤드 변경이나 성능 문제가 코어 웹 바이탈에 어떤 영향을 미치는지와 같은 특정 내용을 조사하려는 경우 **Filter by** 도구를 사용하여 주요 속성을 필터링할 수 있습니다.
- **[one.newrelic.com > All capabilities](https://one.newrelic.com/all-capabilities) > Browser > (앱 선택) > Monitor > Web vitals > (필터 추가)**: 필터 도구를 사용하여 주요 속성별로 핵심 웹 바이탈을 필터링합니다. + **[one.newrelic.com > All capabilities](https://one.newrelic.com/all-capabilities) > Browser > (select an app) > Monitor > Web vitals > (add filters)**: 필터 도구를 사용하여 핵심 속성별로 코어 웹 바이탈을 필터링할 수 있습니다.
거의 모든 주요 속성으로 필터링할 수 있지만 몇 가지 유용한 예를 읽으십시오. @@ -166,21 +168,54 @@ import browserSessionTraces from 'images/browser_screenshot-crop_session-traces. id="device" title="장치 유형별" > - 데스크톱과 모바일 성능을 비교하고 두 플랫폼 간에 핵심 웹 바이탈이 어떻게 다른지 비교하고 싶다고 가정해 보겠습니다. **웹 바이탈** 에서 이를 조사하려면 다음을 수행하십시오. + 데스크톱과 모바일 성능을 비교하고 두 플랫폼 간의 코어 웹 바이탈 차이점을 비교하고 싶다고 가정해 보겠습니다. **Web vitals** 에서 이를 조사하려면 다음을 수행하세요. + + 1. **Filter by** + + 필드에서 + + **Attribute** + + `deviceType` 로 설정하고 + + **Value** + + `desktop` 로 설정합니다. + + 2. 중복 브라우저에서 + + **Attribute** - 1. **필터링 기준** 필드에서 **속성** 을 `deviceType` 로 설정하고 **값** 을 `desktop` 로 설정합니다. - 2. 복제 브라우저에서 **속성** 을 `deviceType` 로 설정하고 **값** 을 `mobile` 로 설정한 다음 결과를 비교합니다. + `deviceType` 로, + + **Value** + + `mobile` 로 설정한 다음 결과를 비교합니다.
- 최종 사용자가 11월 1일 오후 12시경 귀하 사이트의 체크아웃 페이지에서 성능 문제를 보고했고 이 사용자에게 어떤 일이 발생했는지 확인하고 싶다고 가정해 보겠습니다. **Web vitals** \[웹 바이탈]에서 이를 조사하려면 다음을 수행하십시오. + 최종 사용자가 11월 1일 오후 12시경 사이트 결제 페이지에서 성능 문제를 보고했고 이 사용자에게 어떤 일이 발생했는지 확인하려고 한다고 가정해 보겠습니다. **Web vitals** 에서 이를 조사하려면 다음을 수행하세요. 1. 시간 범위를 11월 1일 오전 11시에서 오후 1시 사이로 설정합니다. - 2. **페이지 URL** 테이블에서 체크아웃 페이지 URL을 클릭합니다. - 3. **필터링 기준** 필드에서 **속성** 을 `userID` 로 설정하고 **값** 을 `user ID` 로 설정합니다. + + 2. **Page URL** + + 표에서 결제 페이지 URL을 클릭합니다. + + 3. **Filter by** + + 필드에서 + + **Attribute** + + `userID` 로 설정하고 + + **Value** + + `user ID` 로 설정합니다. - 조직에서 최근 11월 10일 오전 8시에 사이트 홈 페이지의 이미지를 업데이트했고 변경 사항이 핵심 웹 바이탈에 영향을 미쳤는지 확인하려고 한다고 가정해 보겠습니다. **웹 바이탈** 에서 이를 조사하려면 다음을 수행하십시오. + 귀하의 조직이 최근 11월 10일 오전 8시에 사이트 홈 페이지의 이미지를 업데이트했으며 변경 사항이 코어 웹 바이탈에 영향을 미쳤는지 확인하고 싶다고 가정해 보겠습니다. **Web vitals** 에서 이를 조사하려면 다음을 수행하세요. 1. 시간 범위를 11월 10일 오전 7시에서 오전 9시 사이로 설정합니다. - 2. **페이지 URL** 테이블에서 홈페이지 URL을 클릭합니다. - 3. **필터링 기준** 필드에서 **속성** 을 `elementTagName` 로 설정하고 **값** 을 `IMG` 로 설정합니다. + + 2. **Page URL** + + 테이블에서 홈페이지 URL을 클릭합니다. + + 3. **Filter by** + + 필드에서 + + **Attribute** + + `elementTagName` 로 설정하고 + + **Value** + + `IMG` 로 설정합니다.
@@ -214,9 +263,23 @@ New Relic은 주어진 페이지에서 사용자 세션에 대한 데이터를 세션 추적을 사용하여 여러 사용자 세션에서 패턴을 찾는 것이 좋습니다. 핵심 웹 바이탈 점수 중 하나를 개선할 수 있는 경우 한 가지 옵션은 세션 추적을 살펴보고 여러 사용자 세션에서 공유되는 공통 속성을 확인하는 것입니다. 다음은 세션 추적이 사이트를 개선하는 데 어떻게 도움이 되는지에 대한 예입니다. -1. **Web vitals** \[웹 바이탈] 탭에서 성능이 좋지 않은 페이지를 클릭합니다. 위의 이미지를 예로 사용하면 사이트의 전체 LCP 점수가 양호하지만 일부 개별 페이지에 개선이 필요함을 알 수 있습니다. -2. **Web vitals** \[웹 바이탈] 페이지의 **Page URLs** \[페이지 URL] 섹션을 보면 홈페이지 URL의 LCP 점수가 4초보다 큰 것을 볼 수 있습니다. 모든 사용자에게 영향을 미치는 오류 때문입니까, 아니면 한 종류의 사용자에게만 영향을 줍니까? 예를 들어 한 버전의 Chrome 또는 특정 운영 체제를 사용하는 사용자가 페이지 로드 시간이 느린 경우 문제의 특정 원인을 더 잘 해결할 수 있습니다. -3. 문제를 해결하려는 URL을 클릭하면 새 창이 채워집니다. LCP 점수가 사이트의 전체 LCP 점수보다 훨씬 높다는 것을 알게 됩니다. 이 페이지 하단의 **Session traces** \[세션 추적] 섹션으로 스크롤하면 실제 사용자 세션의 다양한 샘플을 볼 수 있습니다. 이러한 세션은 사용자가 AJAX 요청, DOM 로드 관련 문제, JavaScript 이벤트 또는 기타 오류를 경험한 방법에 대한 보다 세부적인 세부 정보를 제공할 수 있습니다. +1. **Web vitals** + + 탭에서 실적이 저조한 페이지를 클릭합니다. 위 이미지를 예로 들면 귀하의 사이트는 전반적인 LCP 점수가 좋지만 일부 개별 페이지에는 개선이 필요하다는 것을 알 수 있습니다. + +2. **Web vitals** + + 페이지의 + + **Page URLs** + + 섹션을 보면 홈페이지 URL의 LCP 점수가 4초보다 큰 것을 알 수 있습니다. 모든 사용자에게 영향을 미치는 오류로 인한 것입니까, 아니면 한 종류의 사용자에게만 영향을 미치는 것입니까? 예를 들어, 특정 버전의 Chrome 또는 특정 운영 시스템을 사용하는 사용자가 페이지 로드 시간이 느린 것을 발견한 경우 문제의 특정 원인을 더 효과적으로 해결할 수 있습니다. + +3. 문제를 해결하려는 URL을 클릭하면 새 창이 열립니다. LCP 점수가 사이트의 전체 LCP 점수보다 훨씬 높다는 것을 알게 되었습니다. 이 페이지 하단의 + + **Session traces** + + 섹션으로 스크롤하면 실제 사용자 세션의 다양한 샘플을 볼 수 있습니다. 이러한 세션을 통해 사용자가 AJAX 요청, DOM 로드 관련 문제, JavaScript 이벤트 또는 기타 오류를 경험한 방식에 대한 보다 세부적인 세부 정보를 제공할 수 있습니다. 무작위 세션의 데이터는 수백 또는 수천 건의 웹 페이지 사용자 상호 작용에서 패턴을 찾는 데 도움이 됩니다. 무작위로 선택된 이 데이터에 패턴이 나타나면 문제 해결 계획이 페이지 점수를 향상시킬 것이라는 확신을 가질 수 있습니다. diff --git a/src/i18n/content/pt/docs/alerts-applied-intelligence/applied-intelligence/incident-workflows/incident-workflows.mdx b/src/i18n/content/pt/docs/alerts-applied-intelligence/applied-intelligence/incident-workflows/incident-workflows.mdx index c8276492223..5b555f3a99d 100644 --- a/src/i18n/content/pt/docs/alerts-applied-intelligence/applied-intelligence/incident-workflows/incident-workflows.mdx +++ b/src/i18n/content/pt/docs/alerts-applied-intelligence/applied-intelligence/incident-workflows/incident-workflows.mdx @@ -187,7 +187,7 @@ O recurso fluxo de trabalho está localizado no menu **Alerts & id="enrichments" title="Como enriquecer dados" > - Atualmente, você só pode enviar saídas JSON ou numéricas para [destinos](/docs/alerts-applied-intelligence/notifications/destinations/) Webhook, Jira e ServiceNow e apenas imagens para outros destinos como Slack, PagerDuty e email. Para obter melhores resultados no Webhook, Jira e ServiceNow, use uma consulta que tenha uma saída de valor único, como `count`, `min` ou `max`. + Atualmente, você só pode enviar saídas JSON ou numéricas para [destinos](/docs/alerts-applied-intelligence/notifications/destinations/) Webhook e Jira. Além disso, você só pode enviar imagens para outros destinos como Slack, PagerDuty, ServiceNow (aplicativo) e e-mail. Para obter melhores resultados no Webhook e no Jira, use uma consulta que tenha uma saída de valor único, como `count`, `min` ou `max`. Detalhes sobre o uso de enriquecimentos: diff --git a/src/i18n/content/pt/docs/alerts-applied-intelligence/overview.mdx b/src/i18n/content/pt/docs/alerts-applied-intelligence/overview.mdx index 749a2332c4a..7d3c6bb7485 100644 --- a/src/i18n/content/pt/docs/alerts-applied-intelligence/overview.mdx +++ b/src/i18n/content/pt/docs/alerts-applied-intelligence/overview.mdx @@ -3,8 +3,6 @@ title: Introdução ao alerta e inteligência aplicada metaDescription: 'An overview of how you can use alerts and applied intelligence to monitor your systems and be notified when things go wrong, and when they''re starting to go wrong.' tags: - Alerts and applied intelligence -signupBanner: - text: Monitor and improve your entire stack. 100GB free. Forever. freshnessValidatedDate: never translationType: machine --- diff --git a/src/i18n/content/pt/docs/apis/intro-apis/introduction-new-relic-apis.mdx b/src/i18n/content/pt/docs/apis/intro-apis/introduction-new-relic-apis.mdx index 3e4c56bff8f..883df0429cc 100644 --- a/src/i18n/content/pt/docs/apis/intro-apis/introduction-new-relic-apis.mdx +++ b/src/i18n/content/pt/docs/apis/intro-apis/introduction-new-relic-apis.mdx @@ -5,8 +5,6 @@ tags: - Get started - Intro to APIs metaDescription: An introduction to New Relic's APIs. -signupBanner: - text: Monitor and improve your entire stack. 100GB free. Forever. freshnessValidatedDate: never translationType: machine --- diff --git a/src/i18n/content/pt/docs/apis/nerdgraph/get-started/introduction-new-relic-nerdgraph.mdx b/src/i18n/content/pt/docs/apis/nerdgraph/get-started/introduction-new-relic-nerdgraph.mdx index 7ab01f7de73..0ba9920d248 100644 --- a/src/i18n/content/pt/docs/apis/nerdgraph/get-started/introduction-new-relic-nerdgraph.mdx +++ b/src/i18n/content/pt/docs/apis/nerdgraph/get-started/introduction-new-relic-nerdgraph.mdx @@ -5,8 +5,6 @@ tags: - NerdGraph - Get started metaDescription: 'NerdGraph is New Relic''s GraphQL-format API, used to query data and do some product configurations.' -signupBanner: - text: Monitor and improve your entire stack. 100GB free. Forever. freshnessValidatedDate: never translationType: machine --- diff --git a/src/i18n/content/pt/docs/apm/agents/java-agent/additional-installation/include-java-agent-jvm-argument.mdx b/src/i18n/content/pt/docs/apm/agents/java-agent/additional-installation/include-java-agent-jvm-argument.mdx index 02a08f63194..f89236b9f9c 100644 --- a/src/i18n/content/pt/docs/apm/agents/java-agent/additional-installation/include-java-agent-jvm-argument.mdx +++ b/src/i18n/content/pt/docs/apm/agents/java-agent/additional-installation/include-java-agent-jvm-argument.mdx @@ -6,8 +6,6 @@ tags: - Installation metaDescription: Detailed instructions on how to set APM's Java agent startup argument for your JVM or framework. tocUnlisted: true -signupBanner: - text: Monitor and improve your entire stack. 100GB free. Forever. freshnessValidatedDate: never translationType: machine --- diff --git a/src/i18n/content/pt/docs/apm/agents/java-agent/configuration/java-agent-configuration-config-file.mdx b/src/i18n/content/pt/docs/apm/agents/java-agent/configuration/java-agent-configuration-config-file.mdx new file mode 100644 index 00000000000..9c46d3bb0b3 --- /dev/null +++ b/src/i18n/content/pt/docs/apm/agents/java-agent/configuration/java-agent-configuration-config-file.mdx @@ -0,0 +1,5782 @@ +--- +title: 'Configuração do agente Java: arquivo de configuração' +tags: + - Agents + - Java agent + - Configuration +metaDescription: 'New Relic''s Java agent config settings for APM, including transaction tracer, errors, custom instrumentation, distributed tracing, system properties, etc.' +freshnessValidatedDate: never +translationType: machine +--- + +import apmJavaConfigPrecedence from 'images/apm_diagram_Java-config-precedence.webp' + +O agente Java New Relic lê sua configuração do arquivo `newrelic.yml` . Por padrão, o agente procura esse arquivo no [diretório](/docs/agents/manage-apm-agents/troubleshooting/find-agent-root-directory#java-agent) que contém `newrelic.jar`. Você pode substituir o local do arquivo de configuração definindo a propriedade de sistema [`newrelic.config.file`](#newrelic-config-file) com um nome de arquivo completo. + +Você poderá configurar nosso agente Java para se adequar ao seu ambiente depois de [criar uma conta New Relic](https://newrelic.com/signup) (é grátis, para sempre) e [instalar o agente Java](/docs/apm/agents/java-agent/installation/install-java-agent/). + +## Estrutura do arquivo de configuração [#Structure] + +O arquivo `newrelic.yml` possui seções separadas para ambientes diferentes: + +* Teste +* Desenvolvimento +* Preparação +* Produção (padrão) + +A New Relic aplica as configurações da seção `common` a cada um desses ambientes. Você pode selecionar outros ambientes como padrão configurando a propriedade de sistema [`newrelic.environment`](#newrelic-environment) como o nome do ambiente. + + + Um [modelo`newrelic.yml` ](/docs/java/java-agent-config-file-template)está disponível. + + +Se você editar `newrelic.yml`, tome cuidado para estar em conformidade com o [formato YAML](https://en.wikipedia.org/wiki/YAML). Use um validador YAML para garantir que a sintaxe esteja precisa antes de usar o arquivo com o agente Java da New Relic e siga estas regras: + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + **Java agent newrelic.yml** + + + + **Requirements** + +
+ Formatar + + Os arquivos YML diferenciam maiúsculas de minúsculas. +
+ Recuos + + Todos os recuos devem estar em incrementos de dois caracteres. Outros recuos resultarão em um erro `Unable to parse configuration file` na inicialização do agente. + + * Use o mesmo nível de recuo para dados na mesma seção do arquivo. + * Recue quaisquer subseções com mais dois espaços. +
+ Mudanças no arquivo + + Você deve reiniciar o processo do host JVM para que as alterações entrem em vigor. + + **Exception:** As alterações de propriedade em `log_level` e `audit_mode` não requerem reinicialização. As alterações de propriedade no circuit breaker não exigem reinicialização. +
+ +## Precedência das definições de configuração [#config-options-precedence] + +Para substituir qualquer configuração no arquivo de configuração, use uma [substituição de propriedade do sistema](#System_Properties). Em determinados ambientes, [as variáveis de ambiente](#Environment_Variables) também podem ser usadas para substituir o arquivo de configuração e as propriedades do sistema. As variáveis de ambiente existem principalmente para oferecer suporte ao Heroku. Quando usada, [Configuração no lado do servidor](/docs/agents/manage-apm-agents/configuration/server-side-agent-configuration) substitui todas as outras definições de configuração. + +java-config-order.png + +
+ Com o agente Java, a configuração no lado do servidor substitui todas as outras configurações. Variáveis de ambiente substituem propriedades do sistema Java. As propriedades Java substituem as definições de configuração do usuário no arquivo `newrelic.yml` . As configurações do usuário substituem as configurações padrão `newrelic.yml` . +
+ +## Configurando o diretório de extensões Java [#extensions-directory] + +O agente Java lê os arquivos de configuração na inicialização do processo. Para identificar o diretório onde os arquivos estão localizados, crie um novo diretório ou especifique um diretório de extensões existente: + + + + Para criar o diretório de extensões: + + 1. Navegue até o diretório onde `newrelic.jar` e `newrelic.yml` estão localizados. Crie um diretório chamado `extensions`. + 2. Em `newrelic.yml`, verifique se a propriedade [`extensions.dir`](#cfg-extensions-dir) não está definida. + + + + Para usar um diretório de extensões Java existente: + + 1. No arquivo `newrelic.yml` , localize a seção `common` . + 2. Use a propriedade [`extensions.dir`](#cfg-extensions-dir) para especificar o local do arquivo. + + + +## Configurações gerais de configuração [#General] + +Defina essas opções na seção `common` . Para [substituir](#System_Properties) qualquer uma dessas opções, use uma propriedade de sistema com prefixo `newrelic.config` . + + + + + + + + + + + + + + + + + +
+ Tipo + + Corda +
+ Padrão + + (nenhum) +
+ + Esta configuração é **required**. Você deve especificar a [chave de licença](/docs/apis/intro-apis/new-relic-api-keys/#ingest-license-key) associada à sua conta New Relic. Esta chave vincula os dados do seu agente à sua conta no serviço New Relic. +
+ + + + + + + + + + + + + + + + +
+ Tipo + + Corda +
+ Padrão + + (nenhum) +
+ + Esta configuração é **required**. Define o [nome do aplicativo](/docs/site/naming-your-application) usado para reportar dados ao New Relic. + + Se [`enable_auto_app_naming`](#cfg-enable_auto_app_naming) for falso, o agente reportará todos os dados para este aplicativo. Caso contrário, o agente reportará apenas tarefas em segundo plano (transação para aplicativo não web) para este aplicativo. + + Para reportar dados para [mais de um aplicativo](/docs/java/multiple-application-names), separe os nomes dos aplicativos com ponto e vírgula. Por exemplo, para reportar dados para **My Application** e **My Application 2** use isto: + + ```yml + app_name: My Application;My Application 2 + ``` + + Para obter mais métodos de nomear seu aplicativo, consulte [Nomeie seu aplicativo Java](/docs/agents/java-agent/configuration/name-your-java-application). +
+ + + + + + + + + + + + + + + + +
+ Tipo + + Boleano +
+ Padrão + + `true` +
+ + Sinalizador para habilitar o agente. Use esta configuração para forçar a execução ou não da execução do agente. +
+ + + + + + + + + + + + + + + + +
+ Tipo + + Float +
+ Padrão + + `1.0` +
+ + O limite `apdex_t` em segundos para a pontuação [Apdex](/docs/site/apdex-measuring-user-satisfaction) do aplicativo. Para o agente Java versões 1.2.008 ou superior, o valor `apdex_t` é configurado na interface e o valor em `newrelic.yml` é ignorado. +
+ + + + + + + + + + + + + + + + +
+ Tipo + + Inteiro +
+ Padrão + + (nenhum) +
+ + Número para diferenciar JVMs para o mesmo aplicativo na mesma máquina. New Relic [usa host/port para unicidade](/docs/agents/java-agent/configuration/hostname-logic-java#unique-identifier), então você pode distinguir as JVMs colocando uma opção como esta nos argumentos de inicialização de cada JVM: + + ```ini + -Dnewrelic.config.appserver_port=8081 + ``` + + Depois de usar `appserver_port` para nomear as JVMs e reiniciá-las, você poderá vê-las individualmente no dropdown e na interface de criação de perfil. + + + Esta é apenas uma mudança para a New Relic; na verdade, não afeta a porta na qual o host se comunica de forma alguma. + +
+ + + + + + + + + + + + + + + + +
+ Tipo + + Boleano +
+ Padrão + + `false` +
+ + Permite o registro em texto simples de todos os dados enviados ao New Relic para o arquivo de log do agente. Essa configuração é dinâmica, portanto, a execução do agente notará alterações em `newrelic.yml` sem reiniciar a JVM. +
+ + + + + + + + + + + + + + + + +
+ Tipo + + Corda +
+ Formato do valor + + `/path/to/ca/cert/bundle.pem` +
+ + Especifica um caminho para um pacote de certificado SSL personalizado que será usado pelo agente para estabelecer uma conexão segura com o New Relic. Se o seu pacote de certificado SSL personalizado não incluir certificados suficientes para se conectar ao New Relic, você precisará [mesclar os certificados necessários em seu pacote de certificados personalizado](/docs/agents/java-agent/troubleshooting/ssl-or-connection-errors-java). + + + Nossa implementação do Java Flight Recorder que atualmente acompanha o agente Java usa o SDK de telemetria. Especificar um ca_bundle_path não atualizará o certificado que nossa opção JFR usa para se conectar ao New Relic. Se você estiver usando um armazenamento confiável customizado e quiser usar a implementação JFR do agente Java, será necessário adicionar os certificados necessários ao seu armazenamento confiável customizado. + +
+ + + + + + + + + + + + + + + + +
+ Tipo + + Boleano +
+ Padrão + + `false` +
+ + Permite o relatório de dados separadamente para cada aplicativo web. Defina como `true` para ativar o suporte para nomeação automática de aplicativos. O nome de cada aplicativo web é detectado automaticamente e o agente reporta os dados separadamente para cada um. Isso fornece um detalhamento de desempenho mais detalhado para aplicativos da web no New Relic. + + Para obter mais informações, consulte [Nomeação automática de aplicativos](/docs/agents/java-agent/configuration/automatic-application-naming). + + Para obter mais métodos de nomear seu aplicativo, consulte [Nomeie seu aplicativo Java](/docs/agents/java-agent/configuration/name-your-java-application). +
+ + + + + + + + + + + + + + + + +
+ Tipo + + Boleano +
+ Padrão + + `true` +
+ + Permite nomenclatura de transação baseada em componentes. Defina como `true` para ativar a nomenclatura de transação baseada em componentes. Defina como `false` para usar o URI de uma solicitação da web como o nome da transação. Para obter mais informações, consulte [Nomenclatura de transação da web](/docs/agents/java-agent/instrumentation/naming-web-transactions). + + + A menos que você implemente a chamada de API para nomear sua transação, desabilitar a nomenclatura de transação automática provavelmente causará [problemas de agrupamento métrico](/docs/features/metric-grouping-issues). + +
+ + + + + + + + + + + + + + + + +
+ Tipo + + Boleano +
+ Padrão + + `true` +
+ + Ativa toda a instrumentação [usando uma anotação `@Trace` ](/docs/agents/java-agent/custom-instrumentation/java-instrumentation-annotation). Desabilitar isso faz com que `@Trace` anotações sejam ignoradas. +
+ + + + + + + + + + + + + + + + +
+ Tipo + + Corda +
+ Padrão + + [`https://insights-collector.newrelic.com/v1/accounts/events`](https://insights-collector.newrelic.com/v1/accounts/events) +
+ + Evento ingerir URI usado por algum recurso do agente. O padrão é o endpoint de ingestão de produção dos EUA. Pode ser configurado manualmente para enviar o evento para outro endpoint de ingestão (por exemplo, produção na UE: [`https://insights-collector.eu01.nr-data.net/v1/accounts/events`](https://insights-collector.eu01.nr-data.net/v1/accounts/events)). + + Os clientes compatíveis com FedRAMP devem usar o [endpoint compatível com FedRAMP](docs/security/security-privacy/compliance/fedramp-compliant-endpoints/#event-api): `https://gov-insights-collector.newrelic.com/v1/accounts/events` +
+ + + + + + + + + + + + + + + + +
+ Tipo + + Corda +
+ Padrão + + (nenhum) +
+ + Define a localização do [diretório de extensões](#extensions-directory) opcionais. Se esta propriedade não estiver configurada, o agente procurará um subdiretório denominado `extensions` no mesmo diretório que `newrelic.jar` e `newrelic.yml`. +
+ + + + + + + + + + + + + + + + +
+ Tipo + + Boleano +
+ Padrão + + `false` +
+ + Para que [a alta segurança](/docs/subscriptions/high-security) seja ativada, esta propriedade deve ser definida como `true` e a propriedade de alta segurança na interface do usuário do New Relic deve ser ativada. Ativar alta segurança significa que o SSL está ativado, a solicitação e a fila de parâmetros não são coletadas e a consulta não pode ser enviada para a New Relic em sua forma bruta. + + + A partir do [agente Java 3.48.0](/docs/release-notes/agent-release-notes/java-release-notes/java-agent-3480), SSL está habilitado por padrão e a opção de configuração para desativá-lo foi descontinuada. A partir do [agente Java 4.0.0](/docs/release-notes/agent-release-notes/java-release-notes/java-agent-400), a capacidade de desativar SSL foi removida. + +
+ + + + + + + + + + + + + + + + +
+ Tipo + + Corda +
+ Padrão + + (nenhum) +
+ + Fornece a capacidade de configurar um [endpointcompatível com FedRAMP](/docs/security/security-privacy/compliance/fedramp-compliant-endpoints/) para uso do agente, com o valor `gov-collector.newrelic.com`. +
+ + + + + + + + + + + + + + + + +
+ Tipo + + Corda +
+ Padrão + + (nenhum) +
+ + Uma [chave de API de inserção](/docs/apis/get-started/intro-apis/types-new-relic-api-keys#event-insert-key) válida para sua conta. Isso não é usado atualmente pelo agente. +
+ + + + + + + + + + + + + + + + +
+ Tipo + + Corda +
+ Padrão + + `""` +
+ + Anexe a [tag](/docs/apm/new-relic-apm/maintenance/labels-categories-organize-your-apps-servers) a este aplicativo. + + Observe que esta opção agora habilita o tag, que substituiu o recurso de rótulo. Você ainda pode consultar seus [rótulos](/docs/new-relic-one/use-new-relic-one/core-concepts/tagging-use-tags-organize-group-what-you-monitor#labels) históricos. Várias tags podem ser anexadas usando um ponto e vírgula como separador, como segue: + + ```ini + -Dnewrelic.config.labels="tagName1:tagValue1;tagName2:tagValue2;tagName3:tagValue3" + ``` +
+ + + + + + + + + + + + + + + + +
+ Tipo + + Boleano +
+ Padrão + + Falso +
+ + Em casos raros, pode ocorrer um vazamento de memória com instrumentação que usa a API assíncrona herdada para rastrear o ciclo de vida de servlets assíncronos ou Jetty Continuations. O vazamento de memória se manifestaria como transações vazadas que foram suspensas, mas nunca retomadas. Esta configuração funciona como uma solução alternativa para evitar que tal cenário ocorra. É aconselhável ativar esta solução alternativa apenas ao encontrar esse tipo de vazamento de memória. +
+ + + + + + + + + + + + + + + + +
+ Tipo + + Inteiro +
+ Padrão + + `30` +
+ + Limita o número de linhas que o agente coleta de cada stack trace. Aumentar esse valor pode afetar o desempenho, pois aumenta a quantidade de memória que o agente usa e a quantidade de dados enviados para o New Relic. +
+ + + + + + + + + + + + + + + + +
+ Tipo + + Corda +
+ Padrão + + [`https://metric-api.newrelic.com/metric/v1`](https://metric-api.newrelic.com/metric/v1) +
+ + URI de ingestão métrica utilizada por algum recurso do agente. O padrão é o endpoint de ingestão de produção dos EUA. Pode ser configurado manualmente para enviar métricas para outro endpoint de ingestão (exemplo de URI de produção da UE: [`https://metric-api.eu.newrelic.com/metric/v1`](https://metric-api.eu.newrelic.com/metric/v1)). + + Os clientes compatíveis com FedRAMP devem usar o [endpoint compatível com FedRAMP](docs/security/security-privacy/compliance/fedramp-compliant-endpoints/#metric-api): `https://gov-metric-api.newrelic.com/metric/v1` +
+ + + + + + + + + + + + + + + + +
+ Tipo + + Corda +
+ Padrão + + (nenhum) +
+ + O host proxy por meio do qual se conectará ao [coletor New Relic](/docs/accounts-partnerships/education/getting-started-new-relic/glossary#collector). Se um proxy for usado, a configuração do host será necessária. Outras configurações de proxy são opcionais. +
+ + + + + + + + + + + + + + + + +
+ Tipo + + Corda +
+ Padrão + + (nenhum) +
+ + A senha para autenticação de proxy. Se um proxy for usado, a configuração do host será necessária. Outras configurações de proxy são opcionais. As configurações de nome de usuário e senha serão usadas para autenticar desafios de autenticação básica de um servidor proxy. + + + O agente Java suporta autenticação Básica (texto não criptografado). + +
+ + + + + + + + + + + + + + + + +
+ Tipo + + Corda +
+ Padrão + + `8080` +
+ + O número da porta do host proxy. Se um proxy for usado, a configuração do host será necessária. Outras configurações de proxy são opcionais. +
+ + + + + + + + + + + + + + + + +
+ Tipo + + Corda +
+ Padrão + + (nenhum) +
+ + O nome de usuário para autenticação de proxy, como autenticação Básica (texto não criptografado). Se um proxy for usado, a configuração do host será necessária. Outras configurações de proxy são opcionais. As configurações de nome de usuário e senha serão usadas para autenticar desafios de autenticação básica de um servidor proxy. +
+ + + + + + + + + + + + + + + + +
+ Tipo + + Corda +
+ Padrão + + (nenhum) +
+ + O esquema de proxy usado. A configuração `proxy_scheme: "https"` permitirá que o agente se conecte por meio de proxies usando o esquema HTTPS. +
+ + + + + + + + + + + + + + + + +
+ Tipo + + Boleano +
+ Padrão + + `false` +
+ + Se os erros são relatados para o Reactor Netty. O padrão é falso. Se definido como verdadeiro, os erros do Reactor Netty serão relatados. + + + Disponível apenas no [agente Java 6.3.0](/docs/release-notes/agent-release-notes/java-release-notes/java-agent-630) e superior. + + Observe que o padrão foi alterado para falso a partir do agente Java 6.5.0. + +
+ + + + + + + + + + + + + + + + +
+ Tipo + + Boleano +
+ Padrão + + `false` +
+ + Habilite o encerramento atrasado da JVM para dar ao agente a chance de enviar os dados métricos mais recentes para o New Relic antes do encerramento da JVM. +
+ + + + + + + + + + + + + + + + +
+ Tipo + + Inteiro +
+ Padrão + + `60` +
+ + O número de segundos após os quais o agente usará a configuração [`send_data_on_exit`](#cfg-send_data_on_exit) . +
+ + + + + + + + + + + + + + + + +
+ Tipo + + Boleano +
+ Padrão + + `true` +
+ + Habilite relatórios de configurações de JVM para New Relic. +
+ + + + + + + + + + + + + + + + +
+ Tipo + + Boleano +
+ Padrão + + `true` +
+ + Quando definido como `true`, as propriedades da JVM serão enviadas para o New Relic. +
+ + + + + + + + + + + + + + + + +
+ Tipo + + Boleano +
+ Padrão + + `true` +
+ + Requer conexões com o coletor New Relic para passar por SSL. + + O agente se comunica com o New Relic via HTTPS por padrão, e o New Relic [requer HTTPS](/docs/apis/rest-api-v2/troubleshooting/301-response-rest-api-calls) para todo o tráfego para e a API REST do New Relic. + + Este trabalho é feito de forma assíncrona com os threads que processam o código da sua aplicação, portanto o tempo de resposta não será diretamente afetado por esta mudança. + + + A partir do [agente Java 3.48.0](/docs/release-notes/agent-release-notes/java-release-notes/java-agent-3480), SSL está habilitado por padrão e a opção de configuração para desativá-lo foi descontinuada. A partir do [agente Java 4.0.0](/docs/release-notes/agent-release-notes/java-release-notes/java-agent-400), a capacidade de desativar SSL foi removida. + +
+ + + + + + + + + + + + + + + + +
+ Tipo + + Boleano +
+ Padrão + + `false` +
+ + Permita que o agente conecte o coletor New Relic imediatamente após a inicialização do aplicativo. +
+ + + + Isso se aplica ao agente Java [versão 3.44.0 ou superior](/docs/release-notes/agent-release-notes/java-release-notes). + + + + + + + + + + + + + + + + +
+ Tipo + + Boleano +
+ Padrão + + `false` +
+ + Para obter detalhes mais concisos do rastreamento da transação, o agente não reporta os Futuros Scala como segmentos de transação, e esses Futuros não contribuem para o [tempo total da transação](/docs/data-analysis/user-interface-functions/view-your-data/response-time#response-time-total-time). + + Ativar `scala_futures_as_segments` aumenta sua sobrecarga. Se você deseja que o Scala Futures reporte como segmentos de transação para que você possa visualizá-los em um rastreamento da transação, você pode habilitá-lo: + + ```yml + scala_futures_as_segments: + enabled: true + ``` +
+
+ +## Variáveis ambientais [#Environment_Variables] + +As variáveis de ambiente têm a maior precedência e substituem as propriedades do sistema e as configurações de yml. + +* Para definir variáveis de ambiente, use o comando `export VARNAME=value` . +* Para definir variáveis de ambiente permanentemente, adicione a linha de exportação a um arquivo como `~/.bashrc` ou `~/.bash_profile`. + +Você pode substituir qualquer configuração de uma propriedade do sistema ou no `newrelic.yml` definindo uma variável de ambiente. A variável de ambiente correspondente a uma determinada configuração no arquivo de configuração é o nome da configuração prefixado por `NEW_RELIC` com todos os pontos (`.`) e traços (`-`) substituídos por sublinhados (`_`). Por exemplo, a variável de ambiente para a configuração `log_level` é `NEW_RELIC_LOG_LEVEL`. + +Para configurações aninhadas em seções, acrescente o nome da seção ao nome da configuração. Por exemplo: + +```yml: + class_transformer: + com.newrelic.instrumentation.kafka-clients-spans-0.11.0.0: + enabled: true +``` + +A configuração acima seria convertida na seguinte variável de ambiente: `NEW_RELIC_CLASS_TRANSFORMER_COM_NEWRELIC_INSTRUMENTATION_KAFKA_CLIENTS_SPANS_0_11_0_0_ENABLED` + + + A configuração do agente por meio de variáveis de ambiente requer [o agente Java versão 4.10.0 ou superior](/docs/agents/java-agent/installation/upgrade-java-agent). + + +## Propriedades do sistema [#System_Properties] + +Você pode substituir qualquer configuração no arquivo `newrelic.yml` definindo uma propriedade do sistema. A propriedade do sistema correspondente a uma determinada configuração no arquivo de configuração é o nome da configuração prefixado por `newrelic.config`. Por exemplo, a propriedade do sistema para a configuração `log_level` é `newrelic.config.log_level`. + +Para configurações aninhadas em seções, acrescente o nome da seção ao nome da configuração. Por exemplo, a propriedade do sistema para a configuração `enabled` na seção de transação é `newrelic.config.transaction_tracer.enabled`. + +Além de substituir as definições de configuração, o agente reconhece estas propriedades do sistema: + + + + + + + + + + + + + + + + + +
+ Tipo + + Boleano +
+ Padrão + + (nenhum) +
+ + A partir da versão do agente `8.7.0`, se definido como true e o Agente estiver em execução com o JBoss EAP/Wildfly, isso impedirá que o agente exija que qualquer classe no pacote `javax.management` seja carregada pelo carregador de classe do sistema. Isso foi adicionado para ajudar a corrigir problemas de inicialização do aplicativo com Módulos JBoss quando a API de gerenciamento J2EE/Jakarta é usada. Mais informações são fornecidas no [documento resolução de problemas do](/docs/apm/agents/java-agent/troubleshooting/classloading-issues-from-jboss-and-wildfly) JBoss/Wildfly. +
+ + + + + + + + + + + + + + + + +
+ Tipo + + Boleano +
+ Padrão + + (nenhum) +
+ + Sinalizador expiratório que permite que o agente seja executado com versões java não suportadas. +
+ + + + + + + + + + + + + + + + +
+ Tipo + + Corda +
+ Padrão + + (nenhum) +
+ + Defina um [nome de exibição](/docs/agents/java-agent/configuration/hostname-logic-java#display-name) para decorar o rótulo “host:port” na interface do New Relic. Requer agente Java 3.17 ou superior. +
+ + + + + + + + + + + + + + + + +
+ Tipo + + Corda +
+ Padrão + + (nenhum) +
+ + String contendo um caminho completo para o arquivo de configuração newrelic. Se estiver vazio, o agente assume que `newrelic.yml` está no mesmo diretório que `newrelic.jar`. +
+ + + + + + + + + + + + + + + + +
+ Tipo + + Boleano +
+ Padrão + + (nenhum) +
+ + Habilite o log de depuração. +
+ + + + + + + + + + + + + + + + +
+ Tipo + + Corda +
+ Padrão + + (nenhum) +
+ + String contendo a configuração do ambiente a ser usada pelo agente. +
+ + + + + + + + + + + + + + + + +
+ Tipo + + Corda +
+ Padrão + + (nenhum) +
+ + String contendo o diretório inicial do agente. O padrão é o mesmo diretório do jarfile do agente. +
+ + + + + + + + + + + + + + + + +
+ Tipo + + Corda +
+ Padrão + + `newrelic_agent.log` +
+ + String contendo o nome do arquivo de log do agente. +
+
+ +## Atributo [#attributes] + +Para definir essas opções, use a seção `attributes` . Para [substituí-](#System_Properties) los, use uma propriedade de sistema com prefixo `newrelic.config.attributes` . + +Atributo são pares de valor principal relacionados ao rastreamento da transação, erros de rastreamento, e evento de transação. Há uma seção `attribute` em cada destino. Para obter mais informações, consulte [Atributo do agente Java](/docs/java/java-agent-attributes), [Ativando e desativando atributo](/docs/java/enabling-and-disabling-attributes) e [exemplos de atributo](/docs/java/attribute-examples). + + + + + + + + + + + + + + + + + +
+ Tipo + + Boleano +
+ Padrão + + `true` +
+ + Esta configuração pode ser usada para ativar ou desativar todos os atributos. Por motivos de segurança, a captura de atributo personalizado usando o [Custom Instrumentation Editor](/docs/agents/java-agent/custom-instrumentation/custom-instrumentation-editor-instrument-ui#options) é definida como `false` por padrão. +
+ + + + + + + + + + + + + + + + +
+ Tipo + + Lista de cordas +
+ Padrão + + (nenhum) +
+ + Se atributo estiver habilitado, as chaves de atributo encontradas nesta lista serão enviadas para a New Relic. Separe as chaves da lista com vírgula; por exemplo: + + ``` + key1, key2, key3 + ``` + + Consulte também as [regras de atribuição de agentes](/docs/subscriptions/agent-attributes). +
+ + + + + + + + + + + + + + + + +
+ Tipo + + Lista de cordas +
+ Padrão + + (nenhum) +
+ + Todas as chaves de atributo encontradas nesta lista não serão enviadas para a New Relic. Separe as chaves da lista com vírgula; por exemplo: + + ``` + key1, key2, key3 + ``` + + Consulte também as [regras de atribuição de agentes](/docs/subscriptions/agent-attributes). +
+ + + + + + + + + + + + + + + + +
+ Tipo + + Corda +
+ Padrão + + ambos +
+ + O relatório atributo é configurável através dos seguintes meios. + + YAML: + + ``` + attributes: + http_attribute_mode: both + ``` + + Propriedade do sistema: + + ```properties + -Dnewrelic.config.attributes.http_attribute_mode=both + ``` + + Variável de ambiente: + + ```properties + NEW_RELIC_ATTRIBUTES_HTTP_ATTRIBUTE=both + ``` + + As opções de configuração são: + + * `standard` : Os relatórios utilizarão padrões (ou seja, OTEL) atributo. Esta configuração é incentivada. Isso minimizará o impacto na funcionalidade e manterá o nível mais baixo de ingestão para relatórios de atributo. + * `legacy` : Os relatórios serão feitos pelo atributo HTTP reintroduzido, esta configuração pode impactar a funcionalidade atual ou futura. + * `both` : Esta é a configuração padrão, o reporte será feito pelo atributo HTTP reintroduzido e pelo atributo OTEL. Esta configuração também aumentará a ingestão de dados. + + + Disponível desde [a versão 8.8.0 do agente Java](/docs/release-notes/agent-release-notes/java-release-notes/java-agent-880). A configuração padrão, `both`, aumentará a ingestão de dados. Para evitar um aumento na ingestão de dados, você deve substituir o padrão definindo `http_attribute_mode` como `legacy` ou `standard`. + +
+
+ +## Instrumentação assíncrona [#async_config] + +Essas opções são definidas diretamente na seção `common` e podem ser [substituídas](#System_Properties) usando uma propriedade de sistema prefixada. + + + + + + + + + + + + + + + + + +
+ Tipo + + Inteiro +
+ Padrão (segundos) + + `180` +
+ + O número de segundos após os quais o agente expirará automaticamente um token assíncrono que não tenha expirado explicitamente com `token.expire()`. Para obter instruções de uso, consulte [token: Conectar threads assíncronos](/docs/agents/java-agent/java-agent-api/java-agent-api-asynchronous-applications#tokens). + + + Aumentar esse valor pode impactar o desempenho, pois aumenta a quantidade de memória que o agente utiliza e evita que a transação seja reportada devido ao token não expirado. + +
+ + + + + + + + + + + + + + + + +
+ Tipo + + Inteiro +
+ Padrão (segundos) + + `600` +
+ + O número de segundos após os quais o agente encerrará automaticamente um segmento que não foi explicitamente encerrado com `segment.end()` ou `segment.ignore()`. Para obter instruções de uso, consulte [Segmentos: atividade assíncrona arbitrária de tempo](/docs/agents/java-agent/java-agent-api/java-agent-api-asynchronous-applications#segments). + + + Aumentar esse valor pode impactar o desempenho, pois aumenta a quantidade de memória que o agente utiliza e evita que a transação seja reportada devido a segmentos não finalizados. + +
+
+ +## Monitoramento de navegador [#Browser_Monitoring] + +Essas opções são definidas na seção `browser_monitoring` e podem ser [substituídas](#System_Properties) usando uma propriedade de sistema com prefixo `newrelic.config.browser_monitoring` . + +O monitoramento do navegador fornece insights sobre o desempenho que o usuário real está experimentando com o seu site. Isso é feito medindo o tempo que o navegador do seu usuário leva para baixar e renderizar suas páginas da web, injetando uma pequena quantidade de código JavaScript no cabeçalho e rodapé de cada página. + + + + + + + + + + + + + + + + + +
+ Tipo + + Boleano +
+ Padrão + + `true` +
+ + Por padrão, o agente insere automaticamente uma chamada de API em JSPs compilados para injetar o JavaScript de monitoramento nas páginas da web. Defina esse atributo como `false` para desativar esse comportamento. +
+ + + + + + + + + + + + + + + + +
+ Tipo + + Lista de strings separadas por vírgula +
+ Padrão + + (nenhum) +
+ + Quando [`auto_instrument`](#bm-auto_instrument) é `true`, por padrão todas as páginas são instrumento. Liste todas as páginas que você deseja que a instrumentação automática ignore aqui. Você ainda pode usar instrumentação manual nestas páginas. + + Por exemplo: + + ```yml + browser_monitoring: + disabled_auto_pages: /WEB-INF/jsp/testpage_1.jsp, /WEB-INF/jsp/testpage_2.jsp + ``` +
+ + + + + + + + + + + + + + + + +
+ Tipo + + Boleano +
+ Padrão + + `false` +
+ + Esta configuração pode ser usada para ativar ou desativar todos os atributos de monitoramento do Browser. Esses são os [dados que você pode consultar](/docs/query-your-data/explore-query-data/explore-data/introduction-querying-new-relic-data). Se `attributes.enabled` for falso no nível raiz, nenhum atributo será enviado no monitoramento do Browser independente de como esta propriedade em `browser_monitoring` estiver configurada. +
+ + + + + + + + + + + + + + + + +
+ Tipo + + Lista de cordas +
+ Padrão + + (nenhum) +
+ + Se atributo estiver ativado para `browser_monitoring`, todas as chaves de atributo encontradas nesta lista serão enviadas para New Relic em visualizações de página. Para mais informações, consulte as [regras de atribuição de agentes](/docs/apm/other-features/attributes/agent-attributes). +
+ + + + + + + + + + + + + + + + +
+ Tipo + + Lista de cordas +
+ Padrão + + (nenhum) +
+ + Todas as chaves de atributo encontradas nesta lista não serão enviadas para a New Relic nas visualizações de página. Para mais informações, consulte as [regras de atribuição de agentes](/docs/apm/other-features/attributes/agent-attributes). +
+
+ +## Circuit breaker + +Essas configurações personalizam o comportamento do [circuit breakerJava](/docs/agents/java-agent/custom-instrumentation/circuit-breaker-java-custom-instrumentation). Essas configurações não estão incluídas em `newrelic.yml` por padrão. Você não precisa reiniciar sua JVM após alterá-las. + +Se desejar personalizar o circuit breaker, adicione-o na seção `common`: + +```yml +common: &default_settings​ + OTHER_CONFIG_SETTINGS + circuitbreaker: + enabled: true + memory_threshold: 20 + gc_cpu_threshold: 10 +``` + + + + + + + + + + + + + + + + + +
+ Tipo + + Boleano +
+ Padrão + + `true` +
+ + Se o seu aplicativo estiver se comportando conforme o esperado, você pode desabilitar o circuit breaker. +
+ + + + + + + + + + + + + + + + +
+ Tipo + + Inteiro (0 a 100) +
+ Padrão + + `20` +
+ + Personalize a porcentagem de memória heap livre abaixo da qual o circuit breaker deve desarmar. Quando a porcentagem de memória heap livre for menor que `memory_threshold` e o tempo de CPU gasto na coleta de lixo for maior que `gc_cpu_threshold`, o circuit breaker . Para diminuir a probabilidade de o circuit breaker desarmar, diminua `memory_threshold` e/ou aumente `gc_cpu_threshold`. Ajuste esses valores conforme necessário, com base no desempenho operacional e no comportamento do seu aplicativo. +
+ + + + + + + + + + + + + + + + +
+ Tipo + + Inteiro (0 a 100) +
+ Padrão + + `10` +
+ + Personalize a porcentagem do tempo de CPU da coleta de lixo acima do qual o circuit breaker deve desarmar. Quando a porcentagem de memória heap livre for menor que `memory_threshold` e o tempo de CPU gasto na coleta de lixo for maior que `gc_cpu_threshold`, o circuit breaker . Para diminuir a probabilidade de o circuit breaker desarmar, diminua `memory_threshold` e/ou aumente `gc_cpu_threshold`. Ajuste esses valores conforme necessário, com base no desempenho operacional e no comportamento do seu aplicativo. +
+
+ +## Utilização da plataforma em nuvem [#utilization] + +Defina as configurações de utilização da plataforma de nuvem na seção `utilization` e podem ser substituídas pela propriedade de sistema prefixada `newrelic.config.utilization` . + +O agente coleta informações de utilização e as envia para o serviço New Relic. O agente pode coletar informações da instância Amazon Web Services (AWS), Azure, Google Cloud Platform e Pivotal Cloud Foundry. Também coletará informações relacionadas aos serviços Docker contêiner e Kubernetes. + + + + + + + + + + + + + + + + + +
+ Tipo + + Boleano +
+ Padrão + + `true` +
+ + Determina se o agente pesquisa a API de metadados da AWS. +
+ + + + + + + + + + + + + + + + +
+ Tipo + + Boleano +
+ Padrão + + `true` +
+ + Determina se o agente pesquisa a API de metadados do Azure. +
+ + + + + + + + + + + + + + + + +
+ Tipo + + Boleano +
+ Padrão + + `true` +
+ + Determina se o agente pesquisa a API de metadados do Google Cloud Platform. +
+ + + + + + + + + + + + + + + + +
+ Tipo + + Boleano +
+ Padrão + + `true` +
+ + Determina se o agente reporta a variável de ambiente `KUBERNETES_SERVICE_HOST` . +
+ + + + + + + + + + + + + + + + +
+ Tipo + + Boleano +
+ Padrão + + `true` +
+ + Determina se o agente lê variáveis de ambiente do Pivotal Cloud Foundry. +
+ + + + + + + + + + + + + + + + +
+ Tipo + + Boleano +
+ Padrão + + `true` +
+ + Determina se o agente lê informações Docker do sistema de arquivos. +
+
+ +## Métrica al nível do código + +Nível do código métrica fornece insights detalhados sobre o desempenho do seu código no nível do método. Você verá métricas para cada método que foi instrumento automaticamente, ou que foi instrumento pela anotação @Trace. Para mais informações sobre nível do código métrico, consulte [Monitoramento de desempenho com CodeStream](/docs/codestream/how-use-codestream/performance-monitoring). + +Defina as opções de nível do código métrico na seção `code_level_metrics` . Eles podem ser [substituídos](#System_Properties) por uma propriedade de sistema com prefixo `newrelic.config.code_level_metrics` . + + + + + + + + + + + + + + + + + +
+ Tipo + + Boleano +
+ Padrão + + `true` +
+ + [o nível do código métrico](/docs/codestream/observability/code-level-metrics) está desabilitado por padrão na versão 7.10.0 do agente. Defina isso como verdadeiro para ativá-lo. A partir da versão 7.11.0 do agente, o padrão é, conforme observado acima, `true`. +
+
+ +## Configuração Errors Inbox [#errors-inbox-configuration] + +Definir uma das tags a seguir ajudará você a identificar quais versões do seu software estão produzindo erros. + +* `NEW_RELIC_METADATA_SERVICE_VERSION` criará `tags.service.version` nos dados do evento contendo a versão do seu código que está implantada, em muitos casos uma versão semântica como 1.2.3, mas nem sempre. +* `NEW_RELIC_METADATA_RELEASE_TAG `criará `tags.releaseTag` nos dados do evento contendo a tag de lançamento (como v0.1.209 ou release-209). +* `NEW_RELIC_METADATA_COMMIT` criará `tags.commit` nos dados do evento contendo o commit sha. Você pode usar o sha inteiro ou apenas os primeiros sete caracteres (por exemplo, 734713b). + +Uma próxima versão da Errors Inbox rastreará automaticamente quais versões do seu software estão produzindo erros. Os dados da versão serão exibidos em [CodeStream](/docs/codestream/how-use-codestream/performance-monitoring/#buildsha). + +## Tracer multiaplicativo [#Cross_Application_Tracer] + + + O rastreamento multiaplicativo foi descontinuado a partir da versão 7.4.0 do agente e será removido em uma versão futura do agente. + + Em vez de usar rastreamento multiaplicativo, recomendamos nosso recurso [distributed tracing](#distributed-tracing) . distributed tracing é uma melhoria no recurso de rastreamento multiaplicativo e é recomendado para sistemas distribuídos grandes. + + +Defina as opções de rastreamento multiaplicativo na seção `cross_application_tracer` . Essas configurações podem ser [substituídas](#System_Properties) por uma propriedade de sistema com prefixo `newrelic.config.cross_application_tracer` . + +[O rastreamento multiaplicativo](/docs/apm/transactions/cross-application-traces/cross-application-tracing) adiciona cabeçalhos de solicitação e resposta a chamadas externas usando a biblioteca Apache HttpClient. Isso fornece melhores dados de desempenho ao chamar o aplicativo monitor por outro agente New Relic. + + + + + + + + + + + + + + + + + +
+ Tipo + + Boleano +
+ Padrão + + `true` +
+ + [o rastreamento multiaplicativo](/docs/apm/transactions/cross-application-traces/cross-application-tracing) está habilitado por padrão. Defina isso como falso para desligá-lo. +
+
+ +## Evento personalizado [#Custom_Events] + +Defina as configurações de evento personalizado na seção `custom_insights_events` . Você pode [substituir](#System_Properties) essas configurações por uma propriedade de sistema com prefixo `newrelic.config.custom_insights_events` . + +O APM permite [registrar dados personalizados de eventos](/docs/insights/insights-data-sources/custom-data/insert-custom-events-new-relic-apm-agents) através do agente de idiomas da API New Relic, que [você pode consultar](/docs/query-your-data/explore-query-data/explore-data/introduction-querying-new-relic-data). + + + Para versões do agente Java anteriores a 4.1.0, a seguinte configuração YAML é reconhecida: + + ```yml + custom_insights_events.enabled: true + custom_insights_events.max_samples_stored: 5000 + ``` + + Para versões de agente 4.1.0 e acima, a configuração YAML usa a formatação de seção aninhada: + + ```yml + custom_insights_events: + enabled: false + max_samples_stored: 5000 + ``` + + + + + + + + + + + + + + + + + + +
+ Tipo + + Boleano +
+ Padrão + + `true` +
+ + Isto habilita o serviço de evento personalizado. +
+ + + + + + + + + + + + + + + + +
+ Tipo + + Inteiro +
+ Padrão + + `255` +
+ + O tamanho máximo de um valor de atributo, após o qual o valor será truncado. O padrão é `255` bytes (na codificação UTF-8 charset) e o limite máximo é `4095`. + + Esta configuração existe no agente Java versão 8.9.0+. +
+ + + + + + + + + + + + + + + + +
+ Tipo + + Inteiro +
+ Padrão + + `30000` +
+ + O número máximo de eventos personalizados amostrados relatados a cada 60 segundos. +
+
+ +## Transformador de classe [#Class_Transformer] + +Defina as configurações relacionadas à instrumentação na seção `class_transformer` . Você pode substituir essas configurações por uma [propriedade de sistema](#System_Properties) com prefixo `newrelic.config.class_transformer` ou uma [variável de ambiente](#Environment_Variables) com prefixo `NEW_RELIC_CLASS_TRANSFORMER_` . + + + + + + + + + + + + + + + + + +
+ Tipo + + Boleano +
+ Padrão + + Falso +
+ + Quando habilitado, a nomenclatura aprimorada de transação Spring nomeará qualquer transação originada de um controlador Spring após a rota definida e o método HTTP. Por exemplo: `/customer/v1/edit (POST)`. Isso inclui controladores que implementam ou estendem interfaces/classes com anotações relacionadas ao WebMVC (`@RestController`, `@Controller`, `@RequestMapping`, etc). + + Por padrão, isso é configurado para `false`, que nomeará a transação para esses tipos de controladores com base no nome e método da classe do controlador. Por exemplo; `CustomerController/edit`. Esta é a lógica de nomenclatura herdada das versões anteriores do agente. Controladores "padrão", com todas as anotações relevantes presentes na classe real, ainda serão nomeados com base na rota e no método HTTP. + + Esta configuração existe no agente Java versão 8.9.0+. +
+ + + + + + + + + + + + + + + + +
+ Tipo + + Corda +
+ Padrão + + (nenhum) +
+ + String contendo o nome completo da classe de anotação que o agente usa para determinar quais métodos especificados pelo usuário devem ser usados. Para obter mais informações sobre anotações customizadas, consulte [Coleção Java métrica personalizada](/docs/java/java-custom-metric-collection). +
+ + + + + + + + + + + + + + + + +
+ Tipo + + Boleano +
+ Padrão + + `false` +
+ + Ative esta opção para capturar o nome `userPrincipal` . Este nome está incluído como trace da transação atributo (com nomes de atributo `user` e `enduser.id`), e [pode ser consulta](/docs/query-your-data/explore-query-data/explore-data/introduction-querying-new-relic-data). Isso também permite que você veja na [Errors Inbox quantos usuários foram impactados por um grupo de erros](/docs/errors-inbox/error-users-impacted/). +
+
+ +## Distributed tracing [#dt-main] + + + Habilitar distributed tracing desabilita [o rastreamento multiaplicativo](#Cross_Application_Tracer) e tem outros efeitos no recurso APM. Antes de ativar, leia o [guia de transição](/docs/transition-guide-distributed-tracing). + + Requer [agente Java versão 4.3.0 ou superior](/docs/agents/java-agent/installation/upgrade-java-agent). + + +[distributed tracing](/docs/understand-dependencies/distributed-tracing/get-started/introduction-distributed-tracing) permite ver o caminho que uma solicitação percorre ao percorrer sistemas distribuídos. Está ativado por padrão para o agente Java versão 7.4.0 ou superior. + +No arquivo de configuração, você pode substituir isso manualmente na seção `distributed_tracing` . Você também pode substituir isso usando uma propriedade de sistema prefixada (`newrelic.config.distributed_tracing`) ou uma variável de ambiente (`NEW_RELIC_DISTRIBUTED_TRACING_ENABLED`). Veja os exemplos abaixo. + +Para obter mais informações sobre como configurar distributed tracing, consulte [Habilitar distributed tracing para seu aplicativo Java](/docs/apm/agents/go-agent/instrumentation/distributed-tracing-go-agent). + + + + + + + + + + + + + + + + + +
+ Tipo + + Boleano +
+ Padrão + + `true` +
+ + Defina como `false` para desativar distributed tracing. Por exemplo, no arquivo de configuração, você usaria: + + ```yml + distributed_tracing: + enabled: false + ``` + + Aqui estão outras opções para desativar distributed tracing: + + [Propriedade do sistema](/docs/agents/java-agent/configuration/java-agent-configuration-config-file#System_Properties): + + ```ini + -Dnewrelic.config.distributed_tracing.enabled=false + ``` + + Variável de ambiente: + + ```ini + NEW_RELIC_DISTRIBUTED_TRACING_ENABLED=false + ``` +
+ + + + + + + + + + + + + + + + +
+ Tipo + + Boleano +
+ Padrão + + `false` +
+ + Por padrão, as versões suportadas do agente utilizam o cabeçalho `newrelic` e os cabeçalhos W3C Trace Context para distributed tracing. O cabeçalho distributed tracing `newrelic` permite interoperabilidade com agentes mais antigos que não suportam cabeçalhos W3C Trace Context . As versões do agente que suportam cabeçalhos W3C Trace Context os priorizarão em relação a `newrelic` cabeçalhos para distributed tracing. + + Se você não quiser utilizar o cabeçalho `newrelic`, defini-lo como `true` fará com que o agente exclua o cabeçalho `newrelic` e use apenas cabeçalhos W3C Trace Context para distributed tracing. + + Por exemplo, para excluir cabeçalhos `newrelic` no arquivo de configuração, você usaria: + + ```yml + distributed_tracing: + exclude_newrelic_header: true + ``` + + Para excluir cabeçalhos `newrelic` usando uma [propriedade do sistema](/docs/agents/java-agent/configuration/java-agent-configuration-config-file#System_Properties), você usaria: + + ```ini + -Dnewrelic.config.distributed_tracing.exclude_newrelic_header=true + ``` +
+
+ +## Erro no coletor [#Error_Collector] + +Defina as configurações do coletor de erros na seção `error_collector` . Salvo indicação em contrário, você pode [substituir](#System_Properties) essas configurações por uma propriedade de sistema com prefixo `newrelic.config.error_collector` . O coletor de erros captura informações sobre exceções não detectadas e as envia ao New Relic para visualização. + + + Para saber como configurar erros para o agente Java, incluindo como configurar erros por meio da interface, consulte [Configuração de erros do agente Java](/docs/agents/java-agent/configuration/java-agent-error-configuration). + + + + + + + + + + + + + + + + + + +
+ Tipo + + Boleano +
+ Padrão + + `true` +
+ + Habilite a coleta de erros. +
+ + + + + + + + + + + + + + + + +
+ Tipo + + Seção contendo uma lista de strings `class_name` totalmente qualificadas +
+ Padrão + + (nenhum) +
+ + Os nomes de classes de exceção especificados serão ignorados e não afetarão taxa de erros ou pontuação Apdex, nem serão reportados à APM. **Cannot be specified by system property.** + + Essa configuração é dinâmica, portanto, a execução do agente notará alterações em `newrelic.yml` sem reiniciar a JVM. + + Por exemplo: + + ```yml + error_collector: + ignore_classes: + - "com.example.MyException" + - "com.example.DifferentException" + ``` + + Uma variável de ambiente pode ser usada para listar nomes de classes de exceção que você deseja que sejam ignorados: + + ```ini + NEW_RELIC_ERROR_COLLECTOR_IGNORE_CLASSES="[\"com.example.MyException\", \"com.example.DifferentException\"]" + ``` +
+ + + + + + + + + + + + + + + + +
+ Tipo + + Seção contendo um `class_name` totalmente qualificado e uma lista de `messages` por classe de erro +
+ Padrão + + (nenhum) +
+ + Especifique os nomes das classes de exceção que o agente deve ignorar. Mensagens ignoradas não afetarão taxa de erros ou pontuação Apdex, nem serão reportadas à APM. Contém `yaml` pares que consistem em: + + * Um nome de classe de exceção totalmente qualificado que não deve ser relatado ao APM + + E + + * Uma lista de exceções `message`s para correspondência (pelo menos uma é obrigatória) + + Se o nome da classe de exceção corresponder a um erro, mas a mensagem não, esse erro **will not** será ignorado. As sequências de mensagens usam `contains` para correspondência. Uma mensagem não pode ser fornecida sozinha e deve sempre ser associada a um nome de classe totalmente qualificado. **Cannot be specified by system property.** + + Essa configuração é dinâmica, portanto, a execução do agente notará alterações em `newrelic.yml` sem reiniciar a JVM. + + Por exemplo: + + ```yml + error_collector: + ignore_messages: + com.example.MyException: + - "Some error message to ignore" + - "Some other error message to ignore" + com.example.DifferentException: + - "Some different error message to ignore" + ``` + + Uma variável de ambiente pode ser usada para listar nomes de classes de exceção e mensagens que você deseja ignorar: + + ```ini + NEW_RELIC_ERROR_COLLECTOR_IGNORE_MESSAGES="{\"com.example.MyException\": [\"Some error message to ignore\", \"Some other error message to ignore\"], \"com.example.DifferentException\": [\"Some different error message to ignore\"]}" + ``` +
+ + + + + + + + + + + + + + + + +
+ Tipo + + Lista separada por vírgulas de strings e intervalos +
+ Padrão + + `404` +
+ + Uma lista separada por vírgulas composta por intervalos individuais e tracejados de códigos de status HTTP que não devem ser tratados como erros. + + Se esta propriedade for comentada no arquivo de configuração `newrelic.yml` , o código de status 404 será automaticamente ignorado. Ao utilizar [a configuração no lado do servidor](/docs/agents/manage-apm-agents/configuration/server-side-agent-configuration), o código de status 404 deve ser especificado para que seja ignorado. + + Essa configuração é dinâmica, portanto, a execução do agente notará alterações em `newrelic.yml` sem reiniciar a JVM. + + Por exemplo: + + ```yml + error_collector: + ignore_status_codes: 404,507-511 + ``` +
+ + + + + + + + + + + + + + + + +
+ Tipo + + Seção contendo uma lista de strings `class_name` totalmente qualificadas +
+ Padrão + + (nenhum) +
+ + Impede que classes de exceção especificadas afetem a taxa de erros ou a pontuação Apdex enquanto ainda relatam os erros ao APM. **Cannot be specified by system property.** + + Essa configuração é dinâmica, portanto, a execução do agente notará alterações em `newrelic.yml` sem reiniciar a JVM. + + Por exemplo: + + ```yml + error_collector: + expected_classes: + - "com.example.MyException" + - "com.example.DifferentException" + ``` + + Uma variável de ambiente pode ser usada para listar nomes de classes de exceção esperados: + + ```ini + NEW_RELIC_ERROR_COLLECTOR_EXPECTED_CLASSES="[\"com.example.MyException\", \"com.example.DifferentException\"]" + ``` +
+ + + + + + + + + + + + + + + + +
+ Tipo + + Seção contendo um `class_name` totalmente qualificado e uma lista de `messages` por classe de erro +
+ Padrão + + (nenhum) +
+ + Contém pares yaml que consistem em um nome de classe de exceção totalmente qualificado que deve ser marcado como esperado e, portanto, impedido de afetar taxa de erros ou pontuação Apdex e uma lista de exceções `message`s para correspondência, a última das quais pelo menos uma é obrigatória . Se o nome da classe de exceção corresponder a um erro, mas a mensagem não, então esse erro **will not** será marcado como esperado e, portanto, afetará a taxa de erros e a pontuação do Apdex. + + As sequências de mensagens usam `contains` para correspondência. Uma mensagem não pode ser fornecida sozinha e deve sempre ser associada a um nome de classe totalmente qualificado. **Cannot be specified by system property.** + + Essa configuração é dinâmica, portanto, a execução do agente notará alterações em `newrelic.yml` sem reiniciar a JVM. + + Por exemplo: + + ```yml + error_collector: + expected_messages: + com.example.MyException: + - "Some expected error message" + - "Some other expected error message" + com.example.DifferentException: + - "Some different expected error message" + ``` + + Uma variável de ambiente pode ser usada para listar nomes e mensagens de classes de exceção esperadas: + + ```ini + NEW_RELIC_ERROR_COLLECTOR_EXPECTED_MESSAGES="{\"com.example.MyException\": [\"Some error message to ignore\", \"Some other error message to ignore\"], \"com.example.DifferentException\": [\"Some different error message to ignore\"]}" + ``` +
+ + + + + + + + + + + + + + + + +
+ Tipo + + Lista separada por vírgulas de strings e intervalos +
+ Padrão + + (nenhum) +
+ + Uma lista separada por vírgulas composta por intervalos individuais e tracejados de códigos de status HTTP a serem marcados como esperado e, assim, impedidos de afetar taxa de erros ou pontuação Apdex. + + Essa configuração é dinâmica, portanto, a execução do agente notará alterações em `newrelic.yml` sem reiniciar a JVM. + + Por exemplo: + + ```yml + error_collector: + expected_status_codes: 415,500-506 + ``` + + Os códigos de status esperados também podem estar na variável de ambiente `NEW_RELIC_ERROR_COLLECTOR_EXPECTED_STATUS_CODES` . +
+ + + + + + + + + + + + + + + + +
+ Tipo + + Boleano +
+ Padrão + + `true` +
+ + Esta configuração pode ser usada para ativar ou desativar todos os atributos para erros de rastreamento. Se `attributes.enabled` for `false` no nível raiz, nenhum atributo será enviado para erros de rastreamento, independentemente de como essa propriedade estiver configurada em `error_collector`. +
+ + + + + + + + + + + + + + + + +
+ Tipo + + Lista de strings +
+ Padrão + + (nenhum) +
+ + Se atributo estiver habilitado para erros de rastreamento, todas as chaves de atributo encontradas nesta lista serão enviadas para New Relic em erros de rastreamento. Para mais informações, consulte as [regras de atribuição de agentes](/docs/apm/other-features/attributes/agent-attributes). +
+ + + + + + + + + + + + + + + + +
+ Tipo + + Lista de strings +
+ Padrão + + (nenhum) +
+ + As chaves atributo encontradas nesta lista não serão enviadas para a New Relic em caso de erros de rastreamento. Para mais informações, consulte as [regras de atribuição de agentes](/docs/apm/other-features/attributes/agent-attributes). +
+ + + + + + + + + + + + + + + + +
+ Tipo + + Boleano +
+ Padrão + + `true` +
+ + Quando vários erros são detectados em uma transação, apenas o último erro será relatado por padrão. Definir esta propriedade como `false` reportará apenas o primeiro erro detectado. Para obter mais informações, consulte a [API NoticeError](/docs/agents/java-agent/configuration/java-agent-error-configuration/). Por exemplo: + + ```yml + error_collector: + ignoreErrorPriority: false + ``` +
+ + + + + + + + + + + + + + + + +
+ Tipo + + Lista de Strings separadas por vírgula +
+ Padrão + + (nenhum) +
+ + Todos os nomes de classes de exceção especificados não serão tratados como erros. Obsoleto a partir do agente Java 3.40.0 e substituído por [`ignore_classes`](#ec-ignore_classes). + + Por exemplo: + + ```yml + error_collector: + ignore_errors: some.other.MyException + ``` +
+
+ +## Tracer externo [#External_Tracer] + +Defina as opções de rastreamento externo na seção `external_tracer` . Essas opções podem ser [substituídas](#System_Properties) por uma propriedade de sistema com prefixo `newrelic.config.external_tracer` . + + + + + + + + + + + + + + + + + +
+ Tipo + + Boleano +
+ Padrão + + `false` +
+ + Esta configuração pode ser usada para controlar a coleta de URIs de solicitação de saída para erros e rastreamento da transação. Defina como verdadeiro para desativar a coleta dessas informações. +
+
+ +## Nome do host configuração [#hostname_configuration] + +Defina as opções de configuração do nome do host na seção `process_host` . Essas opções podem ser [substituídas](#System_Properties) por uma propriedade de sistema com prefixo `newrelic.config.process_host` . + +Use estas propriedades para configurar o nome do host exibido na interface: + + + + + + + + + + + + + + + + + +
+ Tipo + + Corda +
+ Padrão + + (nenhum) +
+ + Defina um [nome de exibição](/docs/agents/java-agent/configuration/hostname-logic-java#display-name) para decorar o rótulo “host:port” na interface do New Relic. +
+ + + + + + + + + + + + + + + + +
+ Tipo + + Corda +
+ Padrão + + `4` +
+ + Se o nome do host não puder ser determinado, o endereço IP do host será usado. Esta propriedade determina se o endereço IPv4 ou IPv6 deve ser usado. O padrão é IPv4. +
+
+ +## Rastreamento infinito + + + Requisitos: + + * [agente Java 5.12.1 ou superior](/docs/agents/java-agent/installation/update-java-agent). + * O rastreamento infinito não funciona se `enable_auto_app_naming` estiver ativado. + + +Para ativar o rastreamento infinito, habilite distributed tracing e adicione a configuração adicional abaixo. Por exemplo, consulte [Agente de idioma: configurar distributed tracing](/docs/understand-dependencies/distributed-tracing/enable-configure/language-agents-enable-distributed-tracing#java-config). + + + + + + + + + + + + + + + + + +
+ Tipo + + Corda +
+ Padrão + + (nenhum) +
+ + Para obter ajuda para obter uma entrada válida de host do observador trace do Infinite Tracing, consulte [localizar ou criar um Trace Observer](/docs/understand-dependencies/distributed-tracing/enable-configure/language-agents-enable-distributed-tracing#provision-trace-observer). + + Você pode configurar isso via YAML: + + ```yml + infinite_tracing: + trace_observer: + host: YOUR_TRACE_OBSERVER_HOST + ``` + + Você também pode usar a propriedade do sistema `newrelic.config.infinite_tracing.trace_observer.host` ou a variável de ambiente `NEW_RELIC_INFINITE_TRACING_TRACE_OBSERVER_HOST`. +
+
+ +## Instrumentação + +Essas opções são definidas na sub-rotina `instrumentation` e podem ser substituídas usando uma propriedade de sistema prefixada `newrelic.config.instrumentation` . + + + + + + + + + + + + + + + + + +
+ Tipo + + Boleano +
+ Padrão + + false +
+ + Por padrão, as anotações [@TraceLambda](/docs/apm/agents/java-agent/api-guides/java-agent-api-instrument-using-annotation/#tracelambda) estão desabilitadas. Para usar a funcionalidade de anotação para rastrear métodos lambda, você deve ativar explicitamente o recurso da seguinte maneira: + + Você pode configurar isso via YAML: + + ```yml + instrumentation: + trace_lambda: + enabled: true + ``` + + Você também pode usar a propriedade do sistema `newrelic.config.instrumentation.trace_lambda.enabled=true` ou a variável de ambiente `NEW_RELIC_INSTRUMENTATION_TRACE_LAMBDA_ENABLED`. +
+
+ +## Coletor de jar + +O agente Java coleta informações sobre jars e suas versões no classpath do aplicativo. + +Defina a configuração da coleção jar na seção `jar_collector` . Essas opções de configuração podem ser [substituídas](#System_Properties) por uma propriedade de sistema com prefixo `newrelic.config.jar_collector` . As opções incluem: + + + + + + + + + + + + + + + + + +
+ Tipo + + Boleano +
+ Padrão + + `true` +
+ + Usado para ativar/desativar a coleta e relatórios de jar. +
+ + + + + + + + + + + + + + + + +
+ Tipo + + Boleano +
+ Padrão + + `true` +
+ + Usado para ativar/desativar a coleta de jars temporários. Jars temporários são aqueles que residem no diretório especificado pela propriedade do sistema `java.io.tmpdir`. +
+ + + + + + + + + + + + + + + + +
+ Tipo + + Inteiro +
+ Padrão + + `10` +
+ + O número máximo de jars a serem processados por segundo. Deve ser positivo. +
+
+ +## JFR (perfil em tempo real) + +O agente Java usa Java Flight Recorder (JFR) para coletar dados JVM de alta fidelidade para [criação de perfil em tempo real](/docs/agents/java-agent/features/real-time-profiling-java-using-jfr-metrics/). + +Configure a criação de perfil em tempo real na seção `jfr` no YAML do agente com [propriedades do sistema](#System_Properties) prefixadas por `newrelic.config.jfr.` ou com [variáveis de ambiente](#Environment_Variables) prefixadas por `NEW_RELIC_JFR_`. + + + + + + + + + + + + + + + + + +
+ Tipo + + Boleano +
+ Padrão + + `false` +
+ + Defina como `true` para ativar [a criação de perfil em tempo real com JFR](/docs/agents/java-agent/features/real-time-profiling-java-using-jfr-metrics/). Essa configuração será aplicada dinamicamente e não requer reinicialização da JVM. + + + A criação de perfil em tempo real com JFR está ativada por padrão no agente Java [versão 7.1.0](/docs/release-notes/agent-release-notes/java-release-notes). Se você estiver em qualquer outro agente versão 7.0.0 ou superior, poderá ativar o JFR alterando o valor para `true`. + +
+ + + + + + + + + + + + + + + + +
+ Tipo + + Boleano +
+ Padrão + + `false` +
+ + Defina como `true` para ativar o registro de auditoria que exibirá todas as métricas e eventos JFR em cada lote de colheita. O registro de auditoria é extremamente detalhado e só deve ser usado para fins de resolução de problemas. + + + Isso se aplica ao agente Java [versão 7.0.0 ou superior](/docs/release-notes/agent-release-notes/java-release-notes). + +
+
+ +## JMX + +Para definir essas opções, use a seção `jmx` . Para [substituí-](#System_Properties) los, use uma propriedade de sistema com prefixo `newrelic.config.jmx` . + +O agente Java usa JMX para coletar dados JVM. Além disso, o agente pode expor metadados de vinculação por meio de JMX que podem ser usados por outros sistemas de rastreamento. + + + + + + + + + + + + + + + + + +
+ Tipo + + Boleano +
+ Padrão + + `true` +
+ + Esta configuração pode ser usada para ativar ou desativar todas as funcionalidades JMX. +
+ + + + + + + + + + + + + + + + +
+ Tipo + + Boleano +
+ Padrão + + `false` +
+ + Essa configuração pode ser ativada para permitir que o agente Java exponha metadados de vinculação por meio de JMX remoto. + + + Isso se aplica ao agente Java [versão 6.1.0 ou superior](/docs/release-notes/agent-release-notes/java-release-notes). + +
+
+ +## Kafka fila de mensagens [#kafka-message-queues] + +Informações detalhadas sobre a configuração da instrumentação Kafka podem ser encontradas na página [do instrumento Kafka fila de mensagens](docs/apm/agents/java-agent/instrumentation/java-agent-instrument-kafka-message-queues/) . + +* \[Coleção de eventos Kafka(/docs/agente APM/java-instrumentação de agente/agente Java-instrumento-kafka-fila de mensagens/#collect-kafka-evento) +* [Métrica do nó Kafka](/docs/apm/agents/java-agent/instrumentation/java-agent-instrument-kafka-message-queues/#kafka-node-metrics) +* [Evento de configuração do Kafka](/docs/apm/agents/java-agent/instrumentation/java-agent-instrument-kafka-message-queues/#kafka-config) +* [Kafka transmite transação](/docs/apm/agents/java-agent/instrumentation/java-agent-instrument-kafka-message-queues/#collect-kafka-streams-transactions) +* [Kafka conectar transação](/docs/apm/agents/java-agent/instrumentation/java-agent-instrument-kafka-message-queues/#collect-kafka-connect-transactions) +* [Rastreamento distribuído Kafka](/docs/apm/agents/java-agent/instrumentation/java-agent-instrument-kafka-message-queues/#collect-kafka-distributed-traces) + +## Logs contextualizados [#logs-in-context] + +A partir da versão do agente Java `7.6.0`, o suporte para [logs em contexto](/docs/logs/logs-context/java-configure-logs-context-all) foi adicionado ao agente, facilitando o uso da estrutura de log suportada. Para obter dicas sobre como usar o agente Java para log no contexto, consulte [Log in context do Java](/docs/logs/logs-context/java-configure-logs-context-all). + +A alteração dessas configurações no arquivo de configuração do agente local ocorre de forma dinâmica e não requer a reinicialização do agente para que essas alterações entrem em vigor. Um exemplo de configuração: + +```yml +application_logging: + enabled: true + forwarding: + enabled: true + max_samples_stored: 10000 + context_data: + enabled: false + include: + exclude: + metrics: + enabled: true + local_decorating: + enabled: false +``` + +Defina a configuração do contexto de login na seção `application_logging` . Isso pode ser [substituído](/docs/apm/agents/java-agent/configuration/java-agent-configuration-config-file#System_Properties) por uma propriedade de sistema com prefixo `newrelic.config.application_logging` . A única opção disponível é: + + + + + + + + + + + + + + + + + +
+ Tipo + + Boleano +
+ Padrão + + `true` +
+ + Defina como `true` para ativar o recurso principal de registro no contexto. Quando habilitado, a instrumentação adicional framework de log é habilitada, independentemente de os logs serem decorados ou enviados para o New Relic ou não. + + + As versões 7.7.0 e superiores do agente têm esse recurso ativado no arquivo de configuração do agente por padrão. + + + Defina como `false` para desativar completamente esse recurso, incluindo a coleta de métricas log . +
+
+ +### Encaminhamento de logs [#log-forwarding] + +Se você estiver usando uma framework de registro compatível e quiser usar o agente para enviar o registro do aplicativo para o New Relic, poderá controlar isso por meio das configurações na seção `forwarding`. Essas configurações podem ser substituídas pela propriedade de sistema prefixada `newrelic.config.application_logging.forwarding` . As opções disponíveis são: + + + + + + + + + + + + + + + + + +
+ Tipo + + Boleano +
+ Padrão + + `true` +
+ + Habilita o envio de log do aplicativo para New Relic. + + + As versões 7.7.0 e superiores do agente têm esse recurso ativado no arquivo de configuração do agente por padrão. + + Usar o recurso de encaminhamento de logs aumentará a ingestão de dados, o que pode afetar seu faturamento. Para obter mais informações, consulte nossa documentação sobre como [rastrear a ingestão de dados](/docs/apm/new-relic-apm/getting-started/get-started-logs-context#ingest). + + Se você tiver uma solução de encaminhamento de logs existente e estiver atualizando seu agente para usar o log automático no contexto, certifique-se de **disable your old log forwarder**. Caso contrário, seu aplicativo enviará linhas de log duplas. Dependendo da sua conta, isso pode resultar em cobrança dupla. Para obter mais informações, siga os procedimentos para desabilitar seu [direcionador de logs específico](/docs/logs/forward-logs/enable-log-management-new-relic#log-forwarding). + + + Defina como `true` para que seu registro decorado seja enviado para a New Relic. + + Defina como `false` se não quiser que seu registro decorado seja enviado para a New Relic. +
+ + + + + + + + + + + + + + + + +
+ Tipo + + Inteiro +
+ Padrão + + `10000` +
+ + Um número inteiro positivo que especifica o número máximo de linhas de log por minuto a serem enviadas. + + Defina como `0` para desativar efetivamente o envio de log. + + + Isso controla o número de logs enviados _por minuto_. Definir `max_samples_stored` como `0` - ou qualquer valor menor que `12` - _não_ desativa o recurso em si, embora resulte no envio de nenhuma linha log para o New Relic. + + + Defina um valor mais baixo para reduzir a quantidade de linhas de log enviadas (pode causar amostragem de log). Defina um valor mais alto para enviar mais linhas de log. + + Cada log recebe a mesma prioridade que sua transação associada. log que ocorrem fora de uma transação receberão uma prioridade aleatória. Alguns registros podem não ser incluídos porque são limitados por `max_samples_stored`. Por exemplo, se o registro em log `max_samples_stored` estiver definido como 10.000 e a transação 1 tiver 10.000 entradas de log, somente as entradas de log da transação 1 serão registradas. Se a transação 1 tiver menos de 10.000 logs, você receberá todos os logs da transação 1. Se ainda houver espaço, você receberá todo o log da transação 2 e assim por diante. + + Se após todos os logs de transação amostrados forem registrados, e eles não atingirem o limite em `max_samples_stored`, então será enviada a mensagem do log de transação amostrada que não estava em nossa amostragem. Se sobrar alguma, as mensagens do log fora da transação serão registradas. +
+
+ +#### Log dados de contexto [#log-context-data] + +O agente Java pode capturar dados de contexto (Mapped Diagnostic Context em logback/slf4j, ThreadContext em log4j2) e adicionar seu conteúdo como atributo no log encaminhado para New Relic. Você pode controlar isso por meio das configurações na seção `context_data` , aninhada na seção `forwarding` . Essas configurações podem ser substituídas pela propriedade de sistema prefixada `newrelic.config.application_logging.forwarding.context_data` . As opções disponíveis são: + + + + + + + + + + + + + + + + + +
+ Tipo + + Boleano +
+ Padrão + + `false` +
+ + Defina isto como `true` envio de dados de contexto como atributo log para New Relic. + + Defina como `false` se não desejar que os dados de contexto no log sejam enviados para o New Relic. +
+ + + + + + + + + + + + + + + + +
+ Tipo + + Lista de strings +
+ Padrão + + (nenhum) +
+ + Se `context_data` estiver habilitado para encaminhamento de logs, todas as chaves de atributo encontradas nesta lista serão enviadas para New Relic nos registros de log. Se esta lista estiver vazia, todos os atributos serão enviados. +
+ + + + + + + + + + + + + + + + +
+ Tipo + + Lista de strings +
+ Padrão + + (nenhum) +
+ + Se `context_data` estiver habilitado para encaminhamento de logs, todas as chaves de atributo encontradas nesta lista NÃO serão enviadas para New Relic nos registros de log. + + A lista de inclusão e exclusão segue as regras `Exclude overrides include`, `More specific rules take priority`, `Keys are case-sensitive` e `Use an asterisk for wildcards` definidas nas [regras de atributo](/docs/apm/agents/java-agent/configuration/java-agent-configuration-config-file). +
+
+ +### Log métrico [#log-metrics] + +Além de permitir decorar e enviar linhas de log individuais, o agente Java pode capturar dados métricos de log. Você pode encontrar esses dados no gráfico de log na interface do New Relic. Você pode definir as configurações log métrica na seção `metrics`. Você pode substituir essas configurações pela propriedade de sistema prefixada `newrelic.config.application_logging.metrics` . A única opção disponível é: + + + + + + + + + + + + + + + + + +
+ Tipo + + Boleano +
+ Padrão + + `true` +
+ + Possibilita a captura de informações métricas sobre seu log e nível de log, que são exibidas em gráfico na página **Summary** do APM. + + Deixe definido como `true` para permitir que o agente capture informações métricas sobre seu log. + + Defina como `false` para desativar esse recurso. + + + Se você desabilitar a coleta de log métrica, o gráfico de log na página de resumo aparecerá em branco. + +
+
+ +### Decoração log [#log-decorating] + +Você pode definir as configurações de decoração log na seção `local_decorating`. Você pode usar isso para controlar como as linhas de log locais são decoradas. Você pode substituir essas configurações por uma propriedade de sistema com prefixo `newrelic.config.application_logging.local_decorating` . A única opção disponível é: + + + + + + + + + + + + + + + + + +
+ Tipo + + Boleano +
+ Padrão + + `false` +
+ + Isto controla se as linhas de log armazenadas localmente são decoradas ou não. Isso independe de o encaminhamento de logs estar habilitado ou não e é usado para oferecer suporte a clientes que desejam usar uma solução separada de encaminhamento de logs. + + Defina como `true` para fazer com que o agente adicione logs no contexto vinculando metadados a linhas log armazenadas localmente pela estrutura suportada. + + + Ativar a decoração de log local adicionará metadados de link aos arquivos de log do aplicativo, resultando em um aumento no armazenamento em disco. Desative esse recurso se isso for inaceitável. + + Não é necessário usar decoração de log local quando o encaminhamento de logs estiver habilitado. Fazer isso fará com que metadados de link sejam adicionados desnecessariamente à sua mensagem do log, o que pode distrair visualmente. + + + Defina como `false` para desativar o recurso de decoração local. Isso _não_ afetará a decoração das linhas log enviadas para a New Relic. +
+
+ +## Configuração de registro [#Logging-Configuration] + +Estas fazem parte das variáveis de configuração gerais. Eles são divididos aqui porque são frequentemente ajustados para depuração. + +Algumas das variáveis de configuração de criação de log são dinâmicas e não precisam de reinicialização do host para que entrem em vigor. Por exemplo, se o arquivo de log estiver crescendo muito rapidamente, [`log_level`](#cfg-log_level) poderá ser definido com uma configuração menos detalhada para reduzir a taxa de relatórios. + +Aqui está a ordem de precedência e a explicação das variáveis de configuração que afetam a rotação log . + +* Se `log_daily` for `true`: + + * Um valor `log_limit_in_kbytes` maior que zero resultará em uma política de acionamento composta, onde o registro será rolado uma vez por dia ou quando o tamanho definido for atingido, retendo até `log_file_count` arquivos + * Um valor `log_limit_in_kbytes` igual a zero resultará na rolagem de log uma vez por dia, retendo até `log_file_count` arquivos + +* Se `log_daily` for `false` e `log_limit_in_kbytes` > 0, será configurada uma política baseada em tamanho, onde o log será rolado quando o tamanho definido for atingido, retendo até `log_file_count` arquivos + +* Se `log_daily` for `false` e `log_limit_in_kbytes` = 0, nenhuma lógica contínua do arquivo de log será configurada + +Dependendo da taxa de crescimento, é possível que o tamanho do arquivo de log exceda um pouco o valor configurado. + + + + + + + + + + + + + + + + + +
+ Tipo + + Boleano +
+ Padrão + + `false` +
+ + Defina como `true` para rolar o registro diariamente. +
+ + + + + + + + + + + + + + + + +
+ Tipo + + Inteiro +
+ Padrão + + `1` +
+ + O número máximo de arquivos de log a serem mantidos ao usar rotação de log. +
+ + + + + + + + + + + + + + + + +
+ Tipo + + Corda +
+ Padrão + + `newrelic_agent.log` +
+ + O nome do arquivo de log não qualificado ou a string `STDOUT` que fará log na saída padrão. +
+ + + + + + + + + + + + + + + + +
+ Tipo + + Corda +
+ Padrão + + `logs` subdiretório onde `newrelic.jar` está localizado +
+ + O caminho do arquivo de log. + + + Se `log_file_path` for especificado, o diretório já deverá existir. Se o valor padrão for utilizado, o agente tentará criar o diretório. + +
+ + + + + + + + + + + + + + + + +
+ Tipo + + Corda +
+ Padrão + + `info` +
+ + O nível de detalhamento do log. Quando você altera essa configuração no arquivo de configuração yaml do agente, ela será atualizada dinamicamente. No entanto, a variável de ambiente e a propriedade do sistema não serão atualizadas dinamicamente. + + O agente usa seu próprio arquivo de log para manter seu registro separado do seu aplicativo. As opções válidas, em ordem de detalhamento, são: + + * `off` + + * `severe` + + * `warning` + + * `info` + + * `fine` + + * `finer` + + * `finest` + + + Não use o registro `debug` ou `trace` , a menos que o suporte da New Relic solicite que você os use. Esses níveis de registro em log podem gerar sobrecarga excessiva. Na maioria das situações, use `info`. + + + Essa configuração é dinâmica, portanto, a execução do agente notará alterações em `newrelic.yml` sem reiniciar a JVM. +
+ + + + + + + + + + + + + + + + +
+ Tipo + + Inteiro +
+ Padrão + + `0` +
+ + O tamanho do arquivo de log em quilobytes no qual os arquivos de log são rotacionados. Defina como `0` sem limite. +
+
+ +## Tracer de mensagens [#Transaction_Tracer] + +Defina as opções tracer de mensagens na seção `message_tracer`. Você pode [substituir](#System_Properties) essas configurações por uma propriedade de sistema com prefixo `newrelic.config.message_tracer` . + + + + + + + + + + + + + + + + + +
+ Tipo + + Boleano +
+ Padrão + + `true` +
+ + Adiciona propriedades de mensagem ao atributo tracer . Defina como `false` para desligá-lo. +
+
+ +## Agente de segurança [#sec-agent] + +[O teste de segurança de aplicativo interativo (IAST) do agente New Relic Security](/docs/iast/introduction/) testa seu aplicativo em busca de quaisquer vulnerabilidades exploráveis, reproduzindo a solicitação HTTP gerada com carga vulnerável. + + + Execute o IAST apenas com implantação não produtiva para evitar a exposição de vulnerabilidades em seu software de produção. + + +Você pode definir a configuração do agente New Relic Security na seção `security` . Essas configurações podem ser [substituídas](#System_Properties) por uma propriedade de sistema com prefixo `newrelic.config.security` . As opções incluem: + + + + + + + + + + + + + + + + + +
+ Tipo + + Boleano +
+ Padrão + + `false` +
+ + Para desabilitar completamente todas as funcionalidades de segurança, defina este sinalizador como falso. Esta propriedade é lida apenas uma vez no início do aplicativo. O padrão é falso. +
+ + + + + + + + + + + + + + + + +
+ Tipo + + Boleano +
+ Padrão + + `false` +
+ + Determina se os dados de segurança são enviados para o New Relic ou não. Quando estiver desabilitado e agente.enabled for verdadeiro, o módulo de segurança será executado, mas os dados não serão enviados. O padrão é falso. +
+ + + + + + + + + + + + + + + + +
+ Tipo + + Corda +
+ Padrão + + `IAST` +
+ + Modo de fornecimento do New Relic Security: IAST. O padrão é IAST. Devido à natureza invasiva da varredura IAST, NÃO ative esse modo em um ambiente de produção ou em um ambiente onde os dados de produção são processados. +
+ + + + + + + + + + + + + + + + +
+ Tipo + + Corda +
+ Padrão + + `wss://csec.nr-data.net` +
+ + URL de conexão SaaS da New Relic Security. Este é o endpoint para o qual o agente de segurança envia dados; ele deve corresponder ao ambiente que você configurou para o agente Java do APM. + + Produção nos EUA: wss://csec.nr-data.net +
+ + + + + + + + + + + + + + + + +
+ Tipo + + Boleano +
+ Padrão + + `true` +
+ + Ative a detecção de eventos de segurança RCI. O padrão é verdadeiro. +
+ + + + + + + + + + + + + + + + +
+ Tipo + + Boleano +
+ Padrão + + `true` +
+ + Habilite a detecção de eventos de segurança RXSS. O padrão é verdadeiro. +
+ + + + + + + + + + + + + + + + +
+ Tipo + + Boleano +
+ Padrão + + `true` +
+ + Habilite a detecção de eventos de segurança de desserialização. O padrão é verdadeiro. +
+
+ + + O modo de teste de segurança de aplicativo interativo (IAST) do agente de segurança New Relic requer [o agente Java versão 8.4.0 ou superior](/docs/agents/java-agent/installation/upgrade-java-agent). + + +## Detecção de transação lenta + +O agente agora pode detectar transações lentas via evento `SlowTransaction` desde a versão do Agente Java `8.7.0`. Esses eventos são registrados quando a duração da transação excede um determinado limite. Por padrão, o limite é 600.000 milissegundos (10 minutos). + +A detecção de transação lenta é definida em `slow_transactions` e pode ser [substituída](#System_Properties) usando uma propriedade de sistema com prefixo `newrelic.config.slow_transactions` . As opções incluem: + + + + + + + + + + + + + + + + + +
+ Tipo + + Boleano +
+ Padrão + + `true` +
+ + Usado para ativar/desativar a detecção de transações lentas. +
+ + + + + + + + + + + + + + + + +
+ Tipo + + Inteiro +
+ Padrão + + `600000` +
+ + Determina quanto tempo uma transação deve levar em milissegundos para que um evento `SlowTransaction` seja relatado. +
+
+ +## Evento de extensão + +[Os eventos Span](/docs/apm/distributed-tracing/ui-data/span-event) são relatados para [distributed tracing](#distributed-tracing). Você deve ativar distributed tracing para relatar o evento span. + +Defina a configuração do evento span na seção `span_events` . Essas configurações podem ser [substituídas](#System_Properties) por uma propriedade de sistema com prefixo `newrelic.config.span_events` . As opções incluem: + + + + + + + + + + + + + + + + + +
+ Tipo + + Boleano +
+ Padrão + + `true` +
+ + Usado para ativar/desativar relatórios de eventos de extensão. +
+ + + + + + + + + + + + + + + + + + + + + + +
+ Tipo + + Inteiro +
+ Padrão + + `2000` +
+ Máx. + + `10000` +
+ + Determina o número de eventos de span que podem ser capturados durante um ciclo de coleta de agente. Disponível no agente Java 7.4.0 e superior. + + + Aumentar o número de eventos de span pode levar a sobrecarga adicional do agente. + +
+ + + + + + + + + + + + + + + + +
+ Tipo + + Boleano +
+ Padrão + + `true` +
+ + Esta configuração pode ser usada para ativar ou desativar todos os atributos do evento span. Se `attributes.enabled` no nível raiz for `false`, nenhum atributo será enviado para span evento, independentemente de como esta propriedade (`span_events.attributes.enabled`) estiver definida. +
+ + + + + + + + + + + + + + + + +
+ Tipo + + Lista de strings +
+ Padrão + + (nenhum) +
+ + Se atributo estiver habilitado para span evento, todas as chaves de atributo encontradas nesta lista serão enviadas para New Relic em `span_events`. Para mais informações, consulte as [regras de atribuição de agentes](/docs/apm/other-features/attributes/agent-attributes). +
+ + + + + + + + + + + + + + + + +
+ Tipo + + Lista de strings +
+ Padrão + + (nenhum) +
+ + Todas as chaves de atributo encontradas nesta lista não serão enviadas para New Relic no evento span. Para mais informações, consulte as [regras de atribuição de agentes](/docs/apm/other-features/attributes/agent-attributes). +
+
+ + + A filtragem de atributo de evento Span requer [o agente Java versão 4.10.0 ou superior](/docs/agents/java-agent/installation/upgrade-java-agent). + + +## Tirar exceções [#strip_exceptions] + +Defina as opções de exceções de faixa na seção `strip_exception_messages` . Essas opções podem ser [substituídas](#System_Properties) por uma propriedade de sistema com prefixo `newrelic.config.strip_exception_messages` . Habilite esta configuração para controlar se as mensagens de exceção Java serão relatadas ao New Relic. + + + + + + + + + + + + + + + + + +
+ Tipo + + Boleano +
+ Padrão + + `false` +
+ + Por padrão, isso é definido como `false`, o que significa que o agente envia mensagens de todas as exceções para o [coletor New Relic](/docs/accounts-partnerships/education/getting-started-new-relic/glossary#collector). + + * Se você definir isso como `true`, o agente retirará as mensagens das exceções para evitar que ele capture inadvertidamente informações confidenciais. + * Se você ativar [o modo de alta segurança](/docs/agents/manage-apm-agents/configuration/high-security-mode), ele será automaticamente definido como `true`. + * Se você definir `enabled` como `true` , mas quiser que o agente capture mensagens de exceções específicas, adicione as exceções à sua [lista de permissões](#strip_exception_messages_whitelist). +
+ + + + + + + + + + + + + + + + +
+ Tipo + + Corda +
+ Padrão + + (nenhum) +
+ + + Esta configuração foi descontinuada a partir da versão 5.10.0 do agente e será removida em uma versão futura do agente. Em vez disso, use `allowed_classes`. + + + Se você definir `enabled` como `true` , mas quiser que o agente capture mensagens para exceções específicas, adicione cada exceção a `whitelist`, separadas por vírgula. +
+ + + + + + + + + + + + + + + + +
+ Tipo + + Corda +
+ Padrão + + (nenhum) +
+ + Se você definir `enabled` como `true` , mas quiser que o agente capture mensagens para exceções específicas, adicione cada exceção a `allowed_classes`, separadas por vírgula. +
+
+ +## Profiler de thread [#Thread_Profiler] + +Defina as opções profiler de thread na seção `thread_profiler`. Essas opções podem ser [substituídas](#System_Properties) por uma propriedade de sistema com prefixo `newrelic.config.thread_profiler` . + +O Thread profiler mede o tempo transcorrido, o tempo de CPU e a contagem de chamadas de método nos threads do seu aplicativo à medida que eles são executados. + + + + + + + + + + + + + + + + + +
+ Tipo + + Boleano +
+ Padrão + + `true` +
+ + Habilite o profiler de thread. +
+
+ +## Evento de transação [#Transaction_Events] + +Defina as opções de evento de transação na seção `transaction_events` . Essas opções podem ser [substituídas](#System_Properties) por uma propriedade de sistema com prefixo `newrelic.config.transaction_events` . + +Os dados do evento de transação são usados para exibir histograma e percentual na interface. + + + Anteriormente, esta seção era chamada `analytics_events`. Se o seu arquivo de configuração ainda usa `analytics_events`, atualize seu agente para usar `transaction_events`. + + + + + + + + + + + + + + + + + + +
+ Tipo + + Boleano +
+ Padrão + + `true` +
+ + Habilite o serviço de evento de transação. +
+ + + + + + + + + + + + + + + + + + + + + + +
+ Tipo + + Inteiro +
+ Padrão + + `2000` +
+ Máx. + + `10000` +
+ + O número máximo de eventos de transação amostrados relatados a cada 60 segundos. +
+ + + + + + + + + + + + + + + + +
+ Tipo + + Lista de mapas +
+ Padrão + + (nenhum) +
+ + + Ao contrário de outras configurações, `custom_request_headers` precisam ser emparelhados e definidos no arquivo `newrelic.yml` . Eles não podem ser substituídos por argumentos da máquina virtual Java (propriedade do sistema) ou variáveis de ambiente. + + + Uma lista de mapas com as chaves emparelhadas `header_name` e o opcional `header_alias`. Escolha um ou mais cabeçalhos de solicitação HTTP personalizados para adicionar como atributo de transação. + + Você pode listar a configuração de vários cabeçalhos: + + ```yml + transaction_events: + custom_request_headers: + - + header_name: "X-Custom-Header-1" + - + header_name: "X-Custom-Header-2" + header_alias: "CustomHeader2alias" + ``` + + No primeiro conjunto de mapas, `X-Custom-Header-1` é capturado e relatado pelo agente como o nome do cabeçalho para um valor correspondente do objeto de solicitação. O `header_name` também será o nome do atributo enviado para New Relic. + + No segundo conjunto de mapas, o cabeçalho da solicitação é `X-Custom-Header-2`, mas `CustomHeader2alias` é o nome enviado para New Relic. +
+ + + + + + + + + + + + + + + + +
+ Tipo + + Boleano +
+ Padrão + + `true` +
+ + Esta configuração pode ser usada para ativar ou desativar todos os atributos do evento de transação. Se `attributes.enabled` for `false` no nível raiz, nenhum atributo será enviado para o evento de transação, independentemente de como essa propriedade estiver configurada em `transaction_events`. +
+ + + + + + + + + + + + + + + + +
+ Tipo + + Lista de cordas +
+ Padrão + + (nenhum) +
+ + Se o atributo estiver habilitado para evento de transação, todas as chaves de atributo encontradas nesta lista serão enviadas para a New Relic no evento de transação. Para mais informações, consulte as [regras de atribuição de agentes](/docs/apm/other-features/attributes/agent-attributes). +
+ + + + + + + + + + + + + + + + +
+ Tipo + + Lista de cordas +
+ Padrão + + (nenhum) +
+ + Todas as chaves de atributo encontradas nesta lista não serão enviadas para a New Relic em evento de transação. Para mais informações, consulte as [regras de atribuição de agentes](/docs/apm/other-features/attributes/agent-attributes). +
+
+ +## Segmentos de transação + +Defina as opções de segmentos de transação na seção `transaction_segments` . Essas opções podem ser [substituídas](#System_Properties) por uma propriedade de sistema com prefixo `newrelic.config.transaction_segments` . + +Os segmentos de transação representam partes discretas de trabalho (geralmente chamadas de método) e são exibidos no [trace da transação](/docs/traces/transaction-traces). + + + A filtragem de atributo do segmento de transação requer [o agente Java versão 4.10.0 ou superior](/docs/agents/java-agent/installation/upgrade-java-agent). + + + + + + + + + + + + + + + + + + +
+ Tipo + + Boleano +
+ Padrão + + `true` +
+ + Esta configuração pode ser usada para ativar ou desativar todos os atributos para segmentos de transação. Se `attributes.enabled` no nível raiz for `false`, nenhum atributo será enviado para segmentos de transação, independentemente de como esta propriedade (`transaction_segments.attributes.enabled`) estiver configurada. +
+ + + + + + + + + + + + + + + + +
+ Tipo + + Lista de strings +
+ Padrão + + (nenhum) +
+ + Se atributo estiver habilitado para segmentos de transação, todas as chaves de atributo encontradas nesta lista serão enviadas para a New Relic em segmentos de transação. Para mais informações, consulte as [regras de atribuição de agentes](/docs/apm/other-features/attributes/agent-attributes). +
+ + + + + + + + + + + + + + + + +
+ Tipo + + Lista de cordas +
+ Padrão + + (nenhum) +
+ + Todas as chaves de atributo encontradas nesta lista não serão enviadas para a New Relic em segmentos de transação. Para mais informações, consulte as [regras de atribuição de agentes](/docs/apm/other-features/attributes/agent-attributes). +
+
+ +## Tracer de transação + +Defina as opções tracer de transação na seção `transaction_tracer`. Essas opções podem ser [substituídas](#System_Properties) por uma propriedade de sistema com prefixo `newrelic.config.transaction_tracer` . + +[O rastreamento de transação](/docs/traces/transaction-traces) captura informações profundas sobre transações lentas e as envia para o serviço New Relic. A transação inclui a sequência exata de chamadas das transações, incluindo quaisquer declarações de consulta emitidas. + + + Não use colchetes `[suffix]` no final do nome da sua transação. O New Relic remove automaticamente os colchetes do nome. Em vez disso, use parênteses `(suffix)` ou outros símbolos, se necessário. + + + + + + + + + + + + + + + + + + +
+ Tipo + + Boleano +
+ Padrão + + `true` +
+ + O tracer de transação está habilitado por padrão. Defina como `false` para desligá-lo. +
+ + + + + + + + + + + + + + + + +
+ Tipo + + Boleano +
+ Padrão + + `true` +
+ + Determina se o agente irá capturar o plano `EXPLAIN` para consulta lenta. [Compatível apenas com MySQL e PostgreSQL.](/docs/agents/java-agent/getting-started/compatibility-requirements-java-agent#JDBC) +
+ + + + + + + + + + + + + + + + +
+ Tipo + + Float +
+ Padrão + + `0.5` +
+ + Limite em segundos para o tempo de execução da consulta abaixo do qual a consulta lenta e o plano `EXPLAIN` ([se compatível](/docs/agents/java-agent/getting-started/compatibility-requirements-java-agent#JDBC)) não serão capturados. Relevante para consulta lenta somente quando `record_sql` está definido como `raw` ou `obfuscated`. Relevante para planos `EXPLAIN` somente quando `explain_enabled` está definido como `true`. +
+ + + + + + + + + + + + + + + + +
+ Tipo + + Inteiro +
+ Padrão + + `2000` +
+ + O limite de caracteres para a cadeia de consulta SQL. Se você tiver muitas consultas SQL lentas com grandes quantidades de informações, isso poderá afetar negativamente o desempenho ou a rapidez com que você vê seus dados no New Relic. Aumente o valor gradualmente até encontrar o equilíbrio certo entre informação e desempenho. +
+ + + + + + + + + + + + + + + + +
+ Tipo + + Boleano +
+ Padrão + + `false` +
+ + Defina como `true` para ativar o registro de consulta ao arquivo de log do agente em vez de fazer upload para o New Relic. consulta são logados usando o modo `record_sql` . +
+ + + + + + + + + + + + + + + + +
+ Tipo + + Corda +
+ Padrão + + `obfuscated` +
+ + Quando o tracer de transação está ativado, as instruções de consulta podem ser gravadas opcionalmente. O gravador possui três modos: + + * `off`: Não envie nenhuma consulta. + * `raw`: Envie a instrução de consulta em seu formato original. + * `obfuscated`: remove literais numéricos e de string. +
+ + + + + + + + + + + + + + + + +
+ Tipo + + Boleano +
+ Padrão + + `false` + + O padrão é `true` até o agente Java versão 3.12.1, quando foi alterado para `false`. +
+ + Esta opção é apenas para Play 2.x+. A instrumentação Play/Scala pode usar `Thread.getStackTrace()` para melhorar a nomenclatura tracer , mas ao custo de maior sobrecarga. +
+ + + + + + + + + + + + + + + + +
+ Tipo + + Inteiro +
+ Padrão + + `0.5` +
+ + Define um limite (em segundos) para coletar rastreamento de pilha de uma chamada SQL. Quando as instruções SQL excederem esse limite, o agente capturará o stack trace atual. Isso é útil para identificar a origem das longas chamadas SQL. +
+ + + + + + + + + + + + + + + + +
+ Tipo + + Inteiro +
+ Padrão + + `20` +
+ + Use esta configuração para controlar a variedade do seu rastreamento de transação. `top_n` é um número inteiro que representa o número de transações lentas e exclusivas para as quais o rastreamento será criado. + + * Se você quiser que o rastreamento da transação reflita com mais precisão as transações reais mais lentas no seu aplicativo, defina esse valor **lower**. + + * Se você deseja amostrar um conjunto mais diversificado de transações, defina o valor **higher**. + + Um valor `0` significaria que **only** a transação mais lenta é sempre rastreada. No entanto, isso não é considerado o ideal, porque você pode ter uma ou duas transações que são sempre as mais lentas e ver repetidamente o mesmo rastreamento da transação provavelmente não lhe dará muito valor. + + Se a mesma transação for frequentemente a mais lenta, a configuração `top_n` permitirá que o agente Java (ao longo do tempo) obtenha amostras das transações `n` mais lentas. Isso oferece maior variedade e mais insights sobre seu aplicativo. +
+ + + + + + + + + + + + + + + + +
+ Tipo + + String (float) +
+ Padrão + + `apdex_f` +
+ + O limite de tempo usado para determinar quando uma transação está qualificada para ser rastreada. Quando o tempo de resposta da transação ultrapassar esse limite, um [trace da transação](/docs/apm/transactions/transaction-traces/transaction-traces) será registrado e enviado à New Relic. + + O padrão é `apdex_f` (padrão), que define o limite como o nível de [Apdex](/docs/site/apdex-measuring-user-satisfaction) ["Frustrated"](/docs/accounts-partnerships/education/getting-started-new-relic/glossary#apdex_f) (quatro vezes o `apdex_t` valor ). Você também pode definir um limite de tempo específico inserindo um valor float que representa um número de segundos. +
+ + + + + + + + + + + + + + + + +
+ Tipo + + Corda +
+ Padrão + + (nenhum) +
+ + + Esta configuração foi descontinuada a partir da versão 5.10.0 do agente e será removida em uma versão futura do agente. Em vez disso, use `collect_slow_queries_from`. + + + Por padrão, [o modo de alta segurança](/docs/accounts-partnerships/accounts/security/high-security) não permite que o agente colete [consulta lenta](/docs/apm/applications-menu/monitoring/viewing-slow-query-details). Habilite esta opção para coletar consultas Cassandra do driver DataStax, mesmo com alta segurança habilitada. Caso não utilize alta segurança, o agente coleta a consulta lenta automaticamente. + + Para o driver DataStax 2.1.2, adicione esta regra à sua lista de permissões: + + ```yml + transaction_tracer: + slow_query_whitelist: + 'com.newrelic.instrumentation.cassandra-datastax-2.1.2' + ``` + + Para o driver DataStax 3.0.0, adicione esta regra à sua lista de permissões: + + ```yml + transaction_tracer: + slow_query_whitelist: + 'com.newrelic.instrumentation.cassandra-datastax-3.0.0' + ``` +
+ + + + + + + + + + + + + + + + +
+ Tipo + + Corda +
+ Padrão + + (nenhum) +
+ + Por padrão, [o modo de alta segurança](/docs/accounts-partnerships/accounts/security/high-security) não permite que o agente colete [consulta lenta](/docs/apm/applications-menu/monitoring/viewing-slow-query-details). Habilite esta opção para coletar consultas Cassandra do driver DataStax, mesmo com alta segurança habilitada. Caso não utilize alta segurança, o agente coleta a consulta lenta automaticamente. + + Para o driver DataStax 2.1.2, adicione esta regra à sua lista de permissões: + + ```yml + transaction_tracer: + collect_slow_queries_from: + 'com.newrelic.instrumentation.cassandra-datastax-2.1.2' + ``` + + Para o driver DataStax 3.0.0, adicione esta regra à sua lista de permissões: + + ```yml + transaction_tracer: + collect_slow_queries_from: + 'com.newrelic.instrumentation.cassandra-datastax-3.0.0' + ``` +
+ + + + + + + + + + + + + + + + +
+ Tipo + + Boleano +
+ Padrão + + `true` +
+ + Esta configuração pode ser usada para ativar ou desativar todos os atributos de rastreamento da transação. Se `attributes.enabled` no nível raiz for `false`, nenhum atributo será enviado para o rastreamento da transação, independentemente de como esta propriedade (`transaction_tracer.attributes.enabled`) estiver definida. +
+ + + + + + + + + + + + + + + + +
+ Tipo + + Lista de strings +
+ Padrão + + (nenhum) +
+ + Se os atributo estiverem habilitados para rastreamento da transação, todas as chaves de atributo encontradas nesta lista serão enviadas para a New Relic no rastreamento da transação. Para mais informações, consulte as [regras de atribuição de agentes](/docs/apm/other-features/attributes/agent-attributes). +
+ + + + + + + + + + + + + + + + +
+ Tipo + + Lista de cordas +
+ Padrão + + (nenhum) +
+ + Todas as chaves de atributo encontradas nesta lista não serão enviadas à New Relic no rastreamento da transação. Para mais informações, consulte as [regras de atribuição de agentes](/docs/apm/other-features/attributes/agent-attributes). +
+ + + + + + + + + + + + + + + + +
+ Tipo + + Inteiro +
+ Padrão + + `3000` +
+ + Limita o número de tokens que podem ser criados por transação. Aumentar esse valor pode afetar o desempenho, pois aumenta a quantidade de memória que o agente usa e a quantidade de dados enviados para o New Relic. +
+ + + + + + + + + + + + + + + + +
+ Tipo + + Inteiro +
+ Padrão + + `3000` +
+ + Limita o número de segmentos que podem ser criados por transação. Aumentar esse valor pode afetar o desempenho, pois aumenta a quantidade de memória que o agente usa e a quantidade de dados enviados para o New Relic. +
+
\ No newline at end of file diff --git a/src/i18n/content/pt/docs/apm/agents/nodejs-agent/getting-started/introduction-new-relic-nodejs.mdx b/src/i18n/content/pt/docs/apm/agents/nodejs-agent/getting-started/introduction-new-relic-nodejs.mdx new file mode 100644 index 00000000000..abd27725573 --- /dev/null +++ b/src/i18n/content/pt/docs/apm/agents/nodejs-agent/getting-started/introduction-new-relic-nodejs.mdx @@ -0,0 +1,137 @@ +--- +title: Introdução ao New Relic para Node.js +tags: + - Agents + - Nodejs agent + - Getting started +metaDescription: 'For system requirements, installation and configuration procedures, and troubleshooting tips for New Relic''s Node.js agent, start here.' +freshnessValidatedDate: never +translationType: machine +--- + +Identifique e resolva problemas até a linha de código com o monitoramento Node.js da New Relic. Com recursos como [mapas de serviço](/docs/data-analysis/service-maps/get-started/introduction-service-maps), [Errors Inbox](/docs/errors-inbox/errors-inbox), [contexto de login](/docs/apm/new-relic-apm/getting-started/get-started-logs-context) e muito mais, nosso agente Node.js ajuda você a obter uma visão completa do ambiente do seu aplicativo. + +## Por que isso importa [#why] + +Muitas solicitações de aplicativos Node.js são baseadas em URLs brutos. Nossa solução é diferente. New Relic for Node.js assume que pode agrupar solicitações para seu aplicativo em transação em vez de solicitações HTTP. transação são definidos dando um nome a um ou mais caminhos de solicitação. Esses nomes são usados para: + +* Visualize onde seu aplicativo está gastando tempo (em falhas de transação). +* Identifique solicitações lentas. +* Métrica de grupo. +* Mostre quais partes do seu aplicativo estão sofrendo com o desempenho lento do banco de dados. + +## instalação [#install] + +Para instalar nosso agente, você precisa primeiro [se inscrever no New Relic](https://newrelic.com/signup) . Depois de fazer login, siga as instruções ou use nosso iniciador para fazer com que os dados fluam. + +* Revise o [requisito do sistema](/docs/agents/nodejs-agent/getting-started/compatibility-requirements-nodejs-agent). +* [Leia a documentação de instalação](/docs/agents/nodejs-agent/installation-configuration/install-nodejs-agent). +* Vá diretamente para a interface do New Relic para [adicionar dados do Node.js.](https://one.newrelic.com/launcher/nr1-core.settings?pane=eyJuZXJkbGV0SWQiOiJ0dWNzb24ucGxnLWluc3RydW1lbnQtZXZlcnl0aGluZyJ9&cards%5B0%5D=eyJuZXJkbGV0SWQiOiJzZXR1cC1uZXJkbGV0cy5zZXR1cC1ub2RlLWludGVncmF0aW9uIiwiYWNjb3VudElkIjoyNjQwNDA5fQ==&platform%5BaccountId%5D=1) + +## Amplie sua instrumentação [#extend-instrumentation] + +Depois de instalar o agente Node.js, amplie sua instrumentação: + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ Amplie sua instrumentação + + Comentários +
+ Costumização + + * Implemente [a instrumentação personalizada do Node.js.](/docs/agents/nodejs-agent/supported-features/nodejs-custom-instrumentation) + * [Colete métricas personalizadas através de uma chamada API](/docs/agents/nodejs-agent/supported-features/nodejs-custom-metrics). + * Use nossa [API Node.js do agente](/docs/agents/nodejs-agent/supported-features/nodejs-agent-api) para controlar, personalizar ou estender a funcionalidade do agente. +
+ Telemetria de código aberto + + * Para criar sua própria integração, use nosso [SDK de telemetria Node.js.](/docs/data-ingest-apis/get-data-new-relic/new-relic-sdks/telemetry-sdks-send-custom-telemetry-data-new-relic) + * Para obter visibilidade de sua carga GraphQL, use nosso [plug-in Apollo Server](/docs/agents/nodejs-agent/supported-features/apollo-server-plugin-nodejs). +
+ Logs contextualizados + + * Para enriquecer os dados de [Winston](https://github.com/winstonjs/winston) ou [Pino](https://github.com/pinojs/pino) log , use nossa [solução de logs automáticos em](/docs/logs/logs-context/configure-logs-context-nodejs) contexto para Node.js. +
+ Traces + + * Habilite [distributed tracing](/docs/apm/distributed-tracing/getting-started/introduction-distributed-tracing). +
+ Medições de VM + + * Colete [os principais dados de métricas de frações de tempo](/docs/agents/nodejs-agent/supported-features/node-vm-measurements) da máquina virtual Node.js. + * [Veja estatísticas detalhadas da VM](/docs/agents/nodejs-agent/supported-features/node-vms-statistics-page) na interface do New Relic. +
+ Atividade do usuário final + + * Integre o agente Node.js com + + [](/docs/browser/new-relic-browser/getting-started/new-relic-browser) + + . + + * Obtenha visibilidade da atividade do usuário com [monitoramento do processo de tempo de carregamento da página do navegador](/docs/agents/nodejs-agent/supported-features/page-load-timing-nodejs). +
+ +## Visualize o log do seu APM e dados de infraestrutura [#logs-context] + +Você também pode reunir os dados do seu log e da aplicação para tornar a resolução de problemas mais fácil e rápida. Com [os logs do APM em contexto](/docs/apm/new-relic-apm/getting-started/get-started-logs-context), você pode ver a mensagem do log relacionada aos seus erros e rastrear diretamente na UI do seu aplicativo. Você também pode ver o log no contexto dos [dados da sua infraestrutura](/docs/logs/forward-logs/forward-your-logs-using-infrastructure-agent/), como cluster do Kubernetes. Não há necessidade de mudar para outra página de interface no New Relic. + +## Solucione problemas de sua instalação [#troubleshooting] + +Se você encontrar problemas com seu agente Node.js, consulte nossos documentos sobre resolução de problemas. Alguns dos documentos mais importantes sobre resolução de problemas nessa seção incluem: + +* [Grande uso de memória](/docs/agents/nodejs-agent/troubleshooting/troubleshooting-large-memory-usage-nodejs): se você instalou o agente Node.js e seu uso de memória aumentou, verifique estas soluções possíveis. +* [resolução de problemas na instalação do Node.js](/docs/agents/nodejs-agent/troubleshooting/troubleshooting-your-nodejs-installation): tente estas etapas se você não vir nenhum dado, não conseguir arquivar o log ou encontrar outros problemas de instalação com o agente Node.js. +* [resolução de problemas de instrumentação do navegador](/docs/agents/nodejs-agent/troubleshooting/troubleshooting-page-load-timing-nodejs): se você encontrar problemas com os dados do navegador, consulte estas dicas adicionais para Node.js. + +Se precisar de mais ajuda, obtenha suporte em [support.newrelic.com](https://support.newrelic.com). + +## Verifique o código-fonte [#source-code] + +Nosso agente Node.js é um software de código aberto. Você pode [navegar pelo código-fonte](https://github.com/newrelic/node-newrelic) e enviar melhorias ou criar seu próprio fork e construí-lo. Para obter mais informações, consulte o [README node-newrelic no GitHub](https://github.com/newrelic/node-newrelic/blob/main/README.md). \ No newline at end of file diff --git a/src/i18n/content/pt/docs/apm/agents/nodejs-agent/installation-configuration/install-nodejs-agent.mdx b/src/i18n/content/pt/docs/apm/agents/nodejs-agent/installation-configuration/install-nodejs-agent.mdx new file mode 100644 index 00000000000..bed0835bfb2 --- /dev/null +++ b/src/i18n/content/pt/docs/apm/agents/nodejs-agent/installation-configuration/install-nodejs-agent.mdx @@ -0,0 +1,132 @@ +--- +title: Instale o agente Node.js. +tags: + - Agents + - Nodejs agent + - Installation and configuration +metaDescription: Procedures and resources to install New Relic's Node.js agent. +freshnessValidatedDate: never +translationType: machine +--- + +Para concluir uma instalação básica do agente Node.js, você pode usar nossa instalação guiada para uma instalação automatizada (escolha UE se estiver na UE) ou seguir as instruções neste documento. De qualquer forma, você precisa de uma conta New Relic, caso ainda não tenha uma. ([É grátis, para sempre!](/docs/accounts/accounts-billing/new-relic-one-pricing-billing/new-relic-one-pricing-billing/#how-pricing-works)) + + + + Tenha uma conta + + + + Iniciar instalação do agente + + + + UE instalação guiada + + + +Nosso agente Node.js está disponível publicamente no [repositório Node gerenciador de pacote (npm),](https://npmjs.org/package/newrelic) bem como no [GitHub](https://github.com/newrelic/node-newrelic). + +## Instale o agente Node.js. [#installing] + + + Se você estiver usando o agente em um contêiner do Docker, [instale o agente em cada contêiner](/docs/agents/nodejs-agent/installation-configuration/install-new-relic-nodejs-agent-docker). + + +Para instalar o agente Node.js: + +1. Crie uma conta New Relic . Não tem um? [Cadastre-se gratuitamente!](https://newrelic.com/signup) Não é necessário cartão de crédito. + +2. Certifique-se de atender ao [requisito do sistema](/docs/agents/nodejs-agent/getting-started/compatibility-requirements-nodejs-agent). Em particular, certifique-se de usar uma versão compatível do Node.js. + +3. Use o comando `npm install newrelic` para cada aplicativo que você deseja monitor. Se seu aplicativo estiver usando [um desses módulos do Apollo Server,](/docs/apm/agents/nodejs-agent/extend-your-instrumentation/apollo-server-plugin-nodejs/) instale nosso plug-in Apollo com `npm install @newrelic/apollo-server-plugin`. [Mais detalhes sobre o uso `@newrelic/apollo-server-plugin` podem ser encontrados aqui](https://github.com/newrelic/newrelic-node-apollo-server-plugin/tree/main#readme). + + + Se você estiver usando Next.js, use nosso [agente`@newrelic/next` ](https://github.com/newrelic/newrelic-node-nextjs)independente em vez do agente `newrelic` . [Aqui está um exemplo de aplicativo Next.js](https://github.com/newrelic/newrelic-node-nextjs#example-project) + + +4. De `node_modules/newrelic`, copie `newrelic.js` para o diretório raiz do seu aplicativo. + +5. Configure o agente por meio do arquivo `newrelic.js` ou da [variável de ambiente](/docs/agents/nodejs-agent/installation-configuration/nodejs-agent-configuration#environment): + + * Personalize a configuração `license_key` com + + + + . + + * Personalize a configuração [`app_name`](/docs/agents/nodejs-agent/installation-configuration/nodejs-agent-configuration#app_name) com um ou mais [nomes de aplicativos significativos](/docs/apm/new-relic-apm/installation-and-configuration/naming-your-application). + +6. Adicione `-r newrelic` ao script de inicialização do seu aplicativo. Por exemplo, se o ponto de entrada do seu aplicativo for `./dist/server.js` , você usaria o sinalizador require da seguinte forma: + + ```bash + node -r newrelic ./dist/server.js + ``` + + Um exemplo de comando Docker : + + ```dockerfile + CMD ["node", "-r", "newrelic", "server.js"] + ``` + + + Para Next.js use `-r @newrelic/next` em vez de `-r newrelic`. + + Se você estiver usando Nest.JS e o comando `nest start` para iniciar o aplicativo, modifique seu binário de inicialização para carregar o agente New Relic: `nest start --exec 'node -r newrelic'`. [Aqui está um exemplo de aplicativo Nest.js](https://github.com/newrelic/newrelic-node-examples/tree/main/nestjs) + + + Mais informações sobre a [opção de linha de comando do Node.js `-r` aqui](https://nodejs.org/api/cli.html#-r---require-module). + + + Se não for possível usar o sinalizador require `-r` , você também poderá usar `require('newrelic')` como a primeira linha do módulo principal do seu aplicativo. **Note** Se você estiver usando [Babel](https://babeljs.io/docs/en/index.html) ou um transpilador semelhante `require('newrelic')` causará problemas de instrumentação. + + Se nenhuma dessas opções funcionar para você (por exemplo, carregando de forma assíncrona a chave de API de um local remoto durante a inicialização do aplicativo), você também pode adicionar instrumentação de estoque a um [módulo compatível](https://github.com/newrelic/node-newrelic/blob/0113eb5f0e707dc662a17d262a841503bab88841/lib/instrumentations.js#L6#L6) já carregado usando [`newrelic.instrumentLoadedModule`](/docs/apm/agents/nodejs-agent/api-guides/nodejs-agent-api/#instrumentLoadedModule): + + ```js + // module loaded before newrelic + const expressModule = require('express'); + + // load the agent + const newrelic = require('newrelic'); + + // instrument express after the agent has been loaded + newrelic.instrumentLoadedModule( + 'express', // the module's name, as a string + expressModule // the module instance + ); + ``` + + +7. Opcional: para obter [estatísticas adicionais no nível do tempo de execução do Node.js](/docs/agents/nodejs-agent/supported-features/node-vms-statistics-page), certifique-se de que o [pacote`@newrelic/native-metrics` esteja instalado](/docs/agents/nodejs-agent/supported-features/node-vm-measurements). + +8. Gere algum tráfego e aguarde alguns minutos para que os dados apareçam na [interface do APM](/docs/apm/applications-menu/monitoring/apm-overview-page). + +Você pode [personalizar ainda mais o comportamento do seu agente](/docs/agents/nodejs-agent/installation-configuration/nodejs-agent-configuration) por meio de `newrelic.js` ou de uma variável de ambiente. Para manter a configuração do agente separada do seu aplicativo, edite a [variável ambiental`NEW_RELIC_HOME` ](/docs/agents/nodejs-agent/installation-configuration/nodejs-agent-configuration#home). + +Para obter mais informações, consulte nosso [documento da API](/docs/apm/agents/nodejs-agent/api-guides/nodejs-agent-api/). + + + +## Visualize o log do seu APM e dados de infraestrutura [#logs-context] + +Você também pode reunir os dados do seu log e da aplicação para tornar a resolução de problemas mais fácil e rápida. Com [os logs em contexto](/docs/logs/logs-context/configure-logs-context-nodejs/), você pode ver a mensagem do log relacionada aos seus erros e rastrear diretamente na interface do seu aplicativo. Você também pode ver o log no contexto dos [dados da sua infraestrutura](/docs/logs/forward-logs/forward-your-logs-using-infrastructure-agent/), como cluster do Kubernetes. Não há necessidade de mudar para outra página de interface. + +## Mantenha seu agente Node.js atualizado [#upgrading] + +Para garantir que você tenha a versão mais atualizada do New Relic, consulte as [notas de versão do Node.js.](/docs/release-notes/agent-release-notes/nodejs-release-notes) Quando aplicável, as notas de versão incluem um link para download com instruções sobre como [atualizar o agente Node.js.](/docs/agents/nodejs-agent/installation-configuration/upgrade-nodejs-agent) + +## Resolução de problemas [#troubleshoot] + +Depois de atualizar o agente, gere algum tráfego e aguarde alguns minutos. Se nenhum dado aparecer na interface do New Relic, consulte os [procedimentos de resolução de problemas](/docs/agents/nodejs-agent/troubleshooting/troubleshooting-your-nodejs-installation). \ No newline at end of file diff --git a/src/i18n/content/pt/docs/apm/agents/php-agent/advanced-installation/docker-other-container-environments-install-php-agent.mdx b/src/i18n/content/pt/docs/apm/agents/php-agent/advanced-installation/docker-other-container-environments-install-php-agent.mdx new file mode 100644 index 00000000000..b0048378aec --- /dev/null +++ b/src/i18n/content/pt/docs/apm/agents/php-agent/advanced-installation/docker-other-container-environments-install-php-agent.mdx @@ -0,0 +1,134 @@ +--- +title: 'Docker e outros ambientes de contêiner: instale o agente PHP' +tags: + - Agents + - PHP agent + - Advanced installation +metaDescription: How to install New Relic's PHP agent inside a Docker container or other container to monitor your PHP apps. +freshnessValidatedDate: never +translationType: machine +--- + +Você pode instalar o agente PHP em um contêiner Docker ou outro contêiner para monitor um ou mais aplicativos PHP. Isso é suportado para contêineres que atendam ao padrão [de compatibilidade do agente e requisitos do PHP](/docs/agents/php-agent/getting-started/php-agent-compatibility-requirements). + + + O daemon do agente PHP transmite dados para o New Relic periodicamente durante o [ciclo de coleta](/docs/using-new-relic/welcome-new-relic/getting-started/glossary#harvest-cycle) de um minuto. Se você estiver inicializando e desmontando contêineres com frequência, certifique-se de deixar o daemon contêiner em execução por tempo suficiente para transmitir quaisquer dados restantes. + + +## Opções de contêiner [#overview] + +O agente PHP requer dois componentes para funcionar: o agente PHP (um para cada aplicativo) e um [daemon](/docs/agents/php-agent/getting-started/new-relic-daemon-processes), que agrega os dados enviados de um ou mais agentes e os envia para a New Relic. Por isso, existem duas opções de habilitação do agente PHP para ambientes de contêiner: + +* [Instale agente e daemon em contêineres diferentes.](#install-diff-containers) Esta é a configuração recomendada. +* [Instale o agente e o daemon no mesmo contêiner.](#install-same-container) Isto pode ser útil se você quiser reduzir o número de contêineres. + +## Instale agente e daemon em contêineres diferentes [#install-diff-containers] + +A instalação do agente e daemon em diferentes contêineres é suportada no PHP agnet versões 9.2 e superiores. + +Para ver um exemplo de aplicativo, acesse [o Fórum de suporte da New Relic](https://discuss.newrelic.com/t/relic-solution-php-agent-and-daemon-containers/84841). Se você estiver usando contêineres de aplicativos de curta duração, recomendamos usar um contêiner separado para o daemon do agente PHP. + + + Os dados transmitidos do agente para o daemon **não** são criptografados. A única exceção a isso é a [ofuscação SQL](/docs/agents/php-agent/configuration/php-agent-configuration#inivar-tt-sql) que ocorre antes do envio de dados para o daemon. Se o agente e o daemon estiverem em execução em hosts diferentes, recomendamos usar uma conexão de rede privada entre o agente e o daemon. + + +### Configure o contêiner daemon [#daemon-container] + +Se você usar Docker, poderá extrair nossa imagem do daemon do [Docker Hub](https://hub.docker.com/r/newrelic/php-daemon): + +1. Execute este comando: `docker pull newrelic/php-daemon`. +2. Para personalizar a imagem, siga as etapas no [Docker Hub](https://hub.docker.com/r/newrelic/php-daemon). + +Você também pode construir sua própria imagem do daemon: + +1. Para instalar o daemon, baixe o pacote do agente PHP no [site de download do arquivo tar](/docs/agents/php-agent/installation/php-agent-installation-tar-file) da New Relic e execute o script `newrelic-install` com o argumento `install_daemon` . +2. Inicie o daemon usando os argumentos `--address` e `--watchdog-foreground` . + +O argumento `--address` define uma porta para o daemon aceitar conexões. O argumento `--watchdog-foreground` garante que o daemon seja executado em primeiro plano. + +### Configure o contêiner do agente PHP [#agent-container] + +Para configurar o contêiner do agente PHP para Docker: + +1. Certifique-se de que uma instalação do PHP esteja disponível no contêiner. Por exemplo, use uma imagem Docker publicada como `php:7.1`. + +2. Para instalar o agente, faça download do pacote do agente PHP no [site de download do arquivo tar](/docs/agents/php-agent/installation/php-agent-installation-tar-file) da New Relic e execute o script `newrelic-install` com o argumento `install` . + +3. No arquivo `newrelic.ini` , defina o nome do aplicativo e + + + + com as entradas `newrelic.appname` e `newrelic.license` . + +4. Aponte o agente para o daemon definindo a opção `newrelic.daemon.address` no arquivo `newrelic.ini` . Certifique-se de que o valor desta opção seja `HOST:PORT`, onde `HOST` é o nome ou endereço IP do host onde o daemon está sendo executado e `PORT` é o número da porta onde o daemon está escutando + +## Instale o agente e o daemon no mesmo contêiner [#install-same-container] + + + Por padrão, a primeira transação faz com que o agente acione o início do daemon e a inicialização da conexão do aplicativo. Por motivos de desempenho, o agente não espera a conclusão dessas operações antes de inicializar a conexão. Isto pode resultar na perda das primeiras transações após o início de um contêiner. Para evitar essa perda, defina as entradas `newrelic.daemon.start_timeout` e `newrelic.daemon.app_connect_timeout` no arquivo `newrelic.ini` com nossos [valores recomendados](https://discuss.newrelic.com/t/php-troubleshooting-framework-configuration/119980) de 5s e 15s, respectivamente. + + +Para configurar o agente PHP e o daemon no mesmo contêiner Docker : + +1. Certifique-se de que uma instalação do PHP esteja disponível no contêiner. Por exemplo: você pode usar uma imagem Docker publicada como `php:7.1`. + +2. Para instalar o agente, faça download do pacote do agente PHP no [site de download do arquivo tar](/docs/agents/php-agent/installation/php-agent-installation-tar-file) da New Relic e execute o script `newrelic-install` com o argumento `install` . + +3. Defina o nome do aplicativo e + + + + por meio das entradas `newrelic.license` e `newrelic.appname` no arquivo `newrelic.ini` . + + + + ```dockerfile + FROM php:7.1 + + RUN \ + curl -L PHP_AGENT_URL | tar -C /tmp -zx && \ + export NR_INSTALL_USE_CP_NOT_LN=1 && \ + export NR_INSTALL_SILENT=1 && \ + /tmp/newrelic-php5-*/newrelic-install install && \ + rm -rf /tmp/newrelic-php5-* /tmp/nrinstall* && \ + sed -i \ + -e 's/"REPLACE_WITH_REAL_KEY"/"YOUR_LICENSE_KEY"/' \ + -e 's/newrelic.appname = "PHP Application"/newrelic.appname = "YOUR_APPLICATION_NAME"/' \ + -e 's/;newrelic.daemon.app_connect_timeout =.*/newrelic.daemon.app_connect_timeout=15s/' \ + -e 's/;newrelic.daemon.start_timeout =.*/newrelic.daemon.start_timeout=5s/' \ + /usr/local/etc/php/conf.d/newrelic.ini + ``` + + Você deve editar três partes deste Dockerfile de exemplo: + + * `PHP_AGENT_URL`: o URL de download da versão do agente PHP. Para encontrar a versão mais recente do agente, acesse + + **[download.newrelic.com/php_agent/release/](https://download.newrelic.com/php_agent/release/)** + + . + + * `YOUR_LICENSE_KEY`: substitua pelo seu + + + + . Observe que `"REPLACE_WITH_REAL_KEY"` é uma string real no arquivo + + **newrelic.ini** + + padrão do agente PHP. Não edite essa string. O comando `sed` substitui essa string padrão pela chave real de 40 caracteres, entre aspas. + + * `YOUR_APPLICATION_NAME`: substitua pelo nome do seu aplicativo, entre aspas. + + + + + Aqui estão alguns recursos Docker resolução de problemas: + + * [Monitoramento de contêineres que executam um único script PHP](https://discuss.newrelic.com/t/relic-solution-single-php-script-docker-containers/80386) + * [Dicas de resolução de problemas para o agente PHP](https://discuss.newrelic.com/t/php-troubleshooting-framework-configuration/119980) + + + \ No newline at end of file diff --git a/src/i18n/content/pt/docs/apm/agents/php-agent/getting-started/introduction-new-relic-php.mdx b/src/i18n/content/pt/docs/apm/agents/php-agent/getting-started/introduction-new-relic-php.mdx new file mode 100644 index 00000000000..f67707fb552 --- /dev/null +++ b/src/i18n/content/pt/docs/apm/agents/php-agent/getting-started/introduction-new-relic-php.mdx @@ -0,0 +1,173 @@ +--- +title: Introdução ao New Relic para PHP +tags: + - Agents + - PHP agent + - Getting started +metaDescription: 'For an overview of New Relic''s PHP agent (compatibility, requirements, installation, configuration, troubleshooting, known issues), start here.' +freshnessValidatedDate: never +translationType: machine +--- + +import apmPhpSummaryPage from 'images/apm_screenshot-full_php-summary-page.webp' + +import apmPhpAgentDiagram from 'images/apm_diagram_php-agent-diagram.webp' + +Nosso agente PHP monitora seu aplicativo para ajudá-lo [a identificar e resolver problemas de desempenho](#monitor-performance). Você também pode estender o monitoramento de desempenho do agente para [coletar e analisar dados de negócios](#business-data) para ajudá-lo a melhorar a experiência dos clientes e tomar decisões de negócios orientadas por dados. + +Use o agente PHP da New Relic para resolver problemas de desempenho do seu aplicativo com nosso [tutorial Meu aplicativo está lento](/docs/journey-app-slow/root-causes/). + +## monitor o desempenho do aplicativo [#monitor-performance] + +PHP - APM Summary + +
+ **[one.newrelic.com > All capabilities](https://one.newrelic.com/all-capabilities) > APM & services > (select an app) > Summary**: após instalar o agente PHP, visualize um resumo do desempenho do seu aplicativo. +
+ + + **View the big picture of your app** + + +* monitor [o Apdex (satisfação do usuário)](/docs/apm/new-relic-apm/apdex/apdex-measuring-user-satisfaction)do seu aplicativo +* Obtenha um [resumo de alto nível do seu aplicativo](/docs/apm/applications-menu/monitoring/apm-overview-page) +* Crie [mapas arquitetônicos](/docs/data-analysis/user-interface-functions/view-your-data/service-maps-visualize-monitor-apps-entire-architecture) do seu aplicativo + + + **Find errors and problems quickly** + + +* Rastrear [transação principal](/docs/apm/transactions/key-transactions/key-transactions-tracking-important-transactions-or-events) +* [Pesquise e crie gráficos personalizáveis](/docs/insights/new-relic-insights/explore/metric-explorer-search-chart-metrics-sent-new-relic-agents) para os dados de métrica de fração de tempo mais importantes para você, incluindo qualquer [métrica personalizada](/docs/agents/manage-apm-agents/agent-data/custom-metrics) que você esteja enviando para a New Relic. +* [alertar](/docs/alerts/alert-policies/understanding-alert-policies/alerting-new-relic) sua equipe quando ocorrerem erros ou problemas antes que afetem seu usuário +* Acompanhe o desempenho [após um implante](/docs/agents/php-agent/features/recording-deployments-using-php-script) + + + **Drill down into performance details** + + +* Examine o nível do código [trace da transação](/docs/apm/transactions/transaction-traces/transaction-traces) +* Examinar [consulta ao banco de dados trace](/docs/apm/transactions/transaction-traces/sql-statements) +* Examinar [o rastreamento de erros](/docs/apm/applications-menu/events/viewing-apm-errors-error-traces) + + + **View logs for your infrastructure data** + + +Reúna os dados do seu log e da aplicação para tornar a resolução de problemas mais fácil e rápida. Não há necessidade de mudar para outra página de interface. + +* Com [os logs em contexto](/docs/logs/logs-context/configure-logs-context-php/), você pode ver a mensagem do log relacionada aos seus erros e rastrear diretamente na interface do seu aplicativo. +* Você também pode ver o log no contexto dos [dados da sua infraestrutura](/docs/logs/forward-logs/forward-your-logs-using-infrastructure-agent/), como cluster do Kubernetes. + + + **Analyze business data** + + +Use o agente PHP para organizar, consultar e visualizar seus dados para responder perguntas importantes sobre o desempenho do aplicativo e a experiência do cliente. + +* Use [o atributo de transação padrão](/docs/insights/new-relic-insights/decorating-events/apm-default-attributes-insights) ou [adicione o seu próprio](/docs/insights/new-relic-insights/decorating-events/insights-custom-attributes) +* consulte seus dados [usando NRQL](/docs/insights/new-relic-insights/using-new-relic-query-language/using-nrql) +* Envie [seus próprios dados de evento](/docs/insights/new-relic-insights/adding-querying-data/inserting-custom-events-new-relic-apm-agents#php-att) +* Crie e compartilhe [um painel](/docs/insights/new-relic-insights/managing-dashboards-data)interativo e personalizável + +## Arquitetura + +O agente PHP possui dois binários que trabalham juntos para encaminhar dados para o New Relic: + +* O agente lida com a instrumentação automática e de API do seu código PHP. +* O daemon atua como um proxy entre o agente e a plataforma New Relic. + +Você pode conectar até 500 aplicativos/agentes a um daemon. O daemon impõe [amostragem](/docs/agents/manage-apm-agents/agent-data/new-relic-events-limits-sampling) quando os limites do ciclo de coleta são atingidos, portanto considere isso ao decidir quantos aplicativos/agentes conectar a um único daemon. + + + O número de aplicativos/agentes por daemon pode ser menor quando executado em contêiner Docker separado, dependendo da capacidade da conexão entre contêineres. + + +This diagram shows the flow of data from the PHP agent to New Relic. + +
+ O fluxo de dados do seu aplicativo PHP para o New Relic. +
+ +O fluxo de trabalho entre seu aplicativo e o New Relic deve ocorrer nesta ordem: + +1. O agente estabelece uma conexão de soquete com o daemon enviando a primeira carga útil de dados de instrumentação. +2. O daemon estabelece um link HTTPS com a plataforma New Relic. O daemon deve ser invocado antes de seu aplicativo de instrumento ser invocado. Isso é chamado [de modo de agente](/docs/agents/php-agent/advanced-installation/starting-php-daemon-advanced) e é o padrão. + +Para evitar a perda de dados reportados, certifique-se de que seu instrumento aplicativo não envie transação antes que ambas as conexões sejam estabelecidas. + +## Instale o agente [#installation] + +Antes de instalar o agente PHP, certifique-se de que seu sistema atenda aos [requisitos do sistema](/docs/agents/php-agent/getting-started/php-agent-compatibility-requirements). O agente PHP oferece suporte a muitos dos [frameworks PHP](/docs/agents/php-agent/getting-started/php-agent-compatibility-requirements#frameworks), [banco de dados](/docs/agents/php-agent/getting-started/php-agent-compatibility-requirements#databases) e [biblioteca](/docs/agents/php-agent/getting-started/php-agent-compatibility-requirements#databases) mais comuns. Você também pode usar o agente em um [ambiente flexível do Google App Engine (GAE)](/docs/agents/php-agent/advanced-installation/install-new-relic-php-agent-gae-flexible-environment). + + + Se você estiver [instalando o agente em um serviço de hospedagem compartilhada](/docs/agents/php-agent/installation/install-php-agent-shared-hosting-service), certifique-se de ter permissões de root para instalar o agente ou entre em contato com seu provedor de hospedagem para obter assistência técnica. + + +Para instalar o agente, primeiro [inscreva-se no New Relic](https://newrelic.com/signup) . Uma vez logado, utilize nosso launcher, ou veja as instruções de instalação específica. + + + Adicione dados PHP + + +Para **standard installations**, consulte: + +* [Visão geral da instalação do agente PHP](/docs/agents/php-agent/installation/php-agent-installation-overview) (as etapas básicas de instalação para as configurações mais comuns). +* [Instalando no RedHat ou CentOS](/docs/agents/php-agent/installation/php-agent-installation-redhat-and-centos) +* [Instalando no Ubuntu ou Debian](/docs/agents/php-agent/installation/php-agent-installation-ubuntu-and-debian) +* [Instalação com arquivo tar](/docs/agents/php-agent/installation/php-agent-installation-tar-file) (método genérico para usar em qualquer sistema compatível, como variantes do Linux, OpenSolaris, SmartOS, FreeBSD, macOS, etc.) +* [O script newrelic-install](/docs/agents/php-agent/installation/newrelic-install-script) (como usar o script interativo que automatiza algumas tarefas de instalação) + +Para outros tipos de instalação de PHP e tópicos **advanced installation** , consulte: + +* [Instalação do agente PHP: PHP não padrão](/docs/agents/php-agent/installation/php-agent-installation-non-standard-php) +* [Iniciando o daemon PHP](/docs/agents/php-agent/installation/starting-php-daemon-advanced) (uma instalação padrão do New Relic inicia o daemon automaticamente, mas você também pode [iniciar o daemon manualmente](/docs/agents/php-agent/installation/starting-php-daemon-advanced#selecting-external)) +* [Modo silencioso para o script de instalação](/docs/agents/php-agent/installation/running-php-install-script-silent-mode) +* [Instalação de ambiente flexível do Google App Engine (GAE)](/docs/agents/php-agent/advanced-installation/install-new-relic-php-agent-gae-flexible-environment) para agente PHP da New Relic + +## Configurar o agente [#configuration] + +O agente inclui uma variedade de [opções de configuração](/docs/agents/php-agent/configuration/php-agent-configuration) para personalizar e ajustar ainda mais sua instalação. + + + A parte mais importante da configuração do agente é dar um [nome descritivo](/docs/agents/php-agent/configuration/php-agent-configuration#inivar-appname) ao seu aplicativo. New Relic [usa esse nome de aplicativo para métrica agregada](/docs/agents/manage-apm-agents/app-naming/name-your-application#app-name) quando você tem vários aplicativos ou hosts. + + +Após alterar qualquer opção de configuração do agente, reinicie o servidor web. + +## Estender instrumentação de agente [#extend] + +Depois de instalar o agente, vá além e amplie a instrumentação do agente: + +* [Tempo de carregamento da página](/docs/agents/php-agent/features/page-load-timing-php): integre o agente PHP ao + + [](/docs/browser/new-relic-browser/getting-started/new-relic-browser) + + para obter visibilidade da atividade do usuário final. + +* [instrumentação personalizada](/docs/agents/php-agent/features/php-custom-instrumentation): instrumento de operação não capturado como parte de nossa instrumentação framework . + +* [API do agente](/docs/agents/php-agent/configuration/php-agent-api): Use a API do agente para personalizar o comportamento do agente. Por exemplo, você pode coletar métricas personalizadas, sinalizar um erro ou ignorar completamente uma transação específica. + +* [Atributo do agente](/docs/agents/php-agent/attributes/php-agent-attributes): Personalize o [atributo](/docs/agents/manage-apm-agents/agent-metrics/agent-attributes) anexado à transação. A personalização do atributo permite evitar o envio de atributo sensível ou coletar atributo adicional para uma visibilidade mais profunda da sua transação. + +## Solucione problemas de sua instalação [#troubleshoot] + +Se você estiver tendo problemas, consulte a documentação de resolução de problemas do agente PHP. Alguns dos documentos mais importantes sobre resolução de problemas nessa seção incluem: + +* [Nenhum dado aparece (PHP)](/docs/agents/php-agent/troubleshooting/no-data-appears-php) +* [Determinando requisitos de permissões](/docs/agents/php-agent/troubleshooting/determining-permissions-requirements) +* [As configurações INI não entram em vigor imediatamente](/docs/agents/php-agent/troubleshooting/ini-settings-not-taking-effect-immediately) +* [Por que e quando reiniciar seu servidor web (PHP)](/docs/agents/php-agent/troubleshooting/why-when-restart-your-web-server-php) \ No newline at end of file diff --git a/src/i18n/content/pt/docs/apm/agents/php-agent/getting-started/php-agent-compatibility-requirements.mdx b/src/i18n/content/pt/docs/apm/agents/php-agent/getting-started/php-agent-compatibility-requirements.mdx index eb095e9d0c0..c02f17a27df 100644 --- a/src/i18n/content/pt/docs/apm/agents/php-agent/getting-started/php-agent-compatibility-requirements.mdx +++ b/src/i18n/content/pt/docs/apm/agents/php-agent/getting-started/php-agent-compatibility-requirements.mdx @@ -189,17 +189,21 @@ A seguinte framework é suportada: - CakePHP 2.x + [Drupal 7.x, 8.x, 9.1-9.5](/docs/agents/php-agent/frameworks-libraries/drupal-specific-functionality) - Magento 1.xe 2.x, CE e EE + Magento 2.x, CE e EE - CodeIgniter 2.x + Joomla 3.x + + + Joomla 3.x não é compatível com PHP 8.x. + @@ -209,7 +213,7 @@ A seguinte framework é suportada: - [Drupal 6.x, 7.x, 8.x, 9.1-9.5](/docs/agents/php-agent/frameworks-libraries/drupal-specific-functionality) + Laminas 3.x @@ -219,21 +223,17 @@ A seguinte framework é suportada: - Joomla 3.x - - - Joomla 3.x não é compatível com PHP 8.x. - + Laravel 6.x, 7.x, 8.x, 9.x e 10.x - Symfony 3.x, 4.xe 5.x + Symfony 4.x e 5.x - Laminas 3.x + Lumen 6.x, 7.x, 8.x, 9.x e 10.x @@ -241,23 +241,11 @@ A seguinte framework é suportada: - - - Laravel 6.x, 7.x, 8.x, 9.x e 10.x - - - - Lumen 6.x, 7.x, 8.x, 9.x e 10.x - - + - Framework Zend 1.x, 2.x e 3.x - - - - Yii 1.x + Framework Zend 3.x diff --git a/src/i18n/content/pt/docs/apm/agents/python-agent/configuration/python-agent-configuration.mdx b/src/i18n/content/pt/docs/apm/agents/python-agent/configuration/python-agent-configuration.mdx new file mode 100644 index 00000000000..f9191e4df8b --- /dev/null +++ b/src/i18n/content/pt/docs/apm/agents/python-agent/configuration/python-agent-configuration.mdx @@ -0,0 +1,5205 @@ +--- +title: Configuração do agente Python +tags: + - Agents + - Python agent + - Configuration +metaDescription: 'How to configure the Python agent, including editing the Python agent config file and setting environment variables.' +freshnessValidatedDate: never +translationType: machine +--- + +import apmConfigSettings from 'images/apm_diagram_config-settings.webp' + +[Nosso agente Python](/docs/agents/python-agent/getting-started/introduction-new-relic-python) permite que você altere o comportamento padrão do agente usando opções de configuração. + +A única configuração necessária do agente Python é . A chave de licença identifica a conta onde o agente reporta os dados do aplicativo. Dependendo de como você está hospedando seu aplicativo, a chave de licença pode ser fornecida por meio de um arquivo de configuração ou de uma variável de ambiente. + +## Métodos de configuração e precedência [#options] + +A principal forma de configurar o agente Python é por meio do [arquivo de configuração](#agent-configuration-file), que é gerado como parte do [processo de instalação](/docs/agents/python-agent/installation-configuration/python-agent-installation) padrão. Também é possível definir um número limitado de opções de configuração utilizando [a configuração no lado do servidor na interface](#server-side-configuration) ou utilizando [variáveis de ambiente](#environment-variables). Você também pode especificar algumas configurações por solicitação, passando as configurações com o [dicionário de ambiente de solicitação WSGI](#per-request-configuration). + +O agente Python segue esta ordem de precedência para configuração: + +diagram-python-config-precedence.png + +
+ Com o agente Python, as opções por solicitação substituem a configuração do lado do servidor. Se ativada, a configuração do lado do servidor substitui **all** valores correspondentes no arquivo de configuração do agente, mesmo que os valores do lado do servidor sejam deixados em branco. O arquivo de configuração do agente substitui as variáveis de ambiente. As variáveis de ambiente substituem os padrões do agente. +
+ +Aqui estão descrições detalhadas de cada método de configuração: + + + + Normalmente você configura seu agente Python a partir de um arquivo de configuração local no sistema host do agente. Forneça o caminho para o arquivo de configuração na inicialização usando um destes métodos: + + * Ao chamar [`newrelic.agent.initialize()`](/docs/agents/python-agent/customization-extension/python-management-api#mgmt), forneça o caminho para o arquivo de configuração como primeiro argumento. + + OU + + * Defina a variável de ambiente `NEW_RELIC_CONFIG_FILE` . Se você usar o script wrapper `newrelic-admin` , deverá usar a variável de ambiente porque o script wrapper chama o agente automaticamente. + + O arquivo de configuração usa uma estrutura semelhante aos arquivos `.ini` do Microsoft Windows. Para obter mais informações, consulte a [documentação de formato de arquivo](http://docs.python.org/library/configparser.html) do módulo Python ConfigParser. + + + Um arquivo de configuração de amostra está incluído no agente Python como `newrelic/newrelic.ini`. Você também pode gerar um a partir do script `newrelic-admin` usando o comando `generate-config` ou fazer download de uma cópia em [nosso repositório de download](https://download.newrelic.com/python_agent/release/). + + + + + [A configuração no lado do servidor](/docs/agents/manage-apm-agents/configuration/server-side-agent-configuration) permite definir determinadas configurações na interface do New Relic. Isso aplica suas alterações automaticamente a todos os agentes, mesmo que eles sejam executados em vários hosts. Quando disponível, este documento inclui os rótulos de interface para configuração do lado do servidor em opções de configuração individuais como **Server-side label**. + + + Se a configuração do lado do servidor estiver habilitada, o agente ignorará qualquer valor no arquivo de configuração que **could** seja definido na interface. Mesmo que o valor da interface esteja vazio, o agente trata isso como uma sequência vazia e não usa o arquivo de configuração do agente. + + + + + As variáveis de ambiente permitem substituir os padrões de determinadas configurações principais. Se a configuração equivalente estiver listada explicitamente no arquivo de configuração do agente, as configurações do arquivo de configuração terão precedência sobre a variável de ambiente. Quando disponíveis, as variáveis de ambiente são documentadas abaixo em opções de configuração individuais como **Environ variable**. + + Para configurações simples, você pode usar as variáveis de ambiente em conjunto com [a configuração no lado do servidor](#server-side-configuration) e evitar completamente o arquivo de configuração do agente. Esta é a configuração padrão do [Heroku](/docs/agents/python-agent/hosting-services/python-agent-heroku), onde a instalação do complemento New Relic preenche automaticamente as variáveis de ambiente necessárias. + + Se você estiver usando o New Relic CodeStream para monitor o desempenho do seu IDE, você também pode [associar o repositório aos seus serviços](/docs/codestream/how-use-codestream/performance-monitoring#repo-association) e [associar SHAs de compilação ou tag de lançamento a erros](/docs/codestream/how-use-codestream/performance-monitoring#buildsha). + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + **Environment variable** + + + + **Configuration setting** + +
+ `NEW_RELIC_LICENSE_KEY` + + `license_key` +
+ `NEW_RELIC_APP_NAME` + + `app_name` +
+ `NEW_RELIC_MONITOR_MODE` + + `monitor_mode` +
+ `NEW_RELIC_DEVELOPER_MODE` + + `developer_mode` +
+ `NEW_RELIC_LOG` + + `log_file` +
+ `NEW_RELIC_LOG_LEVEL` + + `log_level` +
+ `NEW_RELIC_HIGH_SECURITY` + + `high_security` +
+ `NEW_RELIC_PROXY_SCHEME` + + `proxy_scheme` +
+ `NEW_RELIC_PROXY_HOST` + + `proxy_host` +
+ `NEW_RELIC_PROXY_PORT` + + `proxy_port` +
+ `NEW_RELIC_PROXY_USER` + + `proxy_user` +
+ `NEW_RELIC_PROXY_PASS` + + `proxy_pass` +
+ `NEW_RELIC_AUDIT_LOG` + + `audit_log_file` +
+ `NEW_RELIC_STARTUP_TIMEOUT` + + `startup_timeout` +
+ `NEW_RELIC_SHUTDOWN_TIMEOUT` + + `shutdown_timeout` +
+ `NEW_RELIC_LABELS` + + `labels` +
+ `NEW_RELIC_PROCESS_HOST_DISPLAY_NAME` + + `process_host.display_name` +
+ `NEW_RELIC_API_KEY` + + `api_key` +
+ `NEW_RELIC_CA_BUNDLE_PATH` + + `ca_bundle_path` +
+ `NEW_RELIC_DISTRIBUTED_TRACING_ENABLED` + + `distributed_tracing.enabled` +
+ `NEW_RELIC_ANALYTICS_EVENTS_MAX_SAMPLES_STORED` + + `event_harvest_config.harvest_limits.analytic_event_data` +
+ `NEW_RELIC_CUSTOM_INSIGHTS_EVENTS_MAX_SAMPLES_STORED` + + `event_harvest_config.harvest_limits.custom_event_data` +
+ `NEW_RELIC_ML_INSIGHTS_EVENTS_MAX_SAMPLES_STORED` + + `event_harvest_config.harvest_limits.ml_event_data` +
+ `NEW_RELIC_SPAN_EVENTS_MAX_SAMPLES_STORED` + + `event_harvest_config.harvest_limits.span_event_data` +
+ `NEW_RELIC_ERROR_COLLECTOR_MAX_EVENT_SAMPLES_STORED` + + `event_harvest_config.harvest_limits.error_event_data` +
+ `NEW_RELIC_FEATURE_FLAG` + + `feature_flag` +
+
+ + + Para determinados servidores WSGI, você pode substituir o [nome do aplicativo](#app_name) e [capturar configurações de atributo](#attributes) por solicitação. Isso é possível com servidores WSGI onde é possível definir pares de valores principais adicionais que são passados para o dicionário de ambiente WSGI por solicitação. + + Defina esses valores com as strings `on`, `off`, `true`, `false`, `1` e `0`. Se definido a partir de um mecanismo de configuração implementado usando código Python, os objetos Python avaliados como True ou False também serão aceitos. + + + + No servidor Apache/mod_wsgi, você pode usar a diretiva `SetEnv` para substituir as configurações (opcionalmente dentro de um bloco `Location` ou `Directory` ). Por exemplo, você pode substituir o [nome do aplicativo](#app_name) por um host virtual completo ou por um subconjunto de URLs manipulados pelo aplicativo WSGI para esse host virtual. + + + + Além de poder substituir determinadas definições de configuração do agente, você pode definir outras definições de configuração por solicitação com sua chave de ambiente WSGI: + + + + Se definida como `true`, esta transação da web será relatada como uma [transação fora da web](/docs/apm/transactions/intro-transactions/monitor-background-processes-other-non-web-transactions). + + + + Se definido como `true`, esta transação da web não será informada. + + + + Se definido como `true`, nenhuma métrica Apdex será gerada para esta transação da web. + + + + Se definido como `true`, esta transação da web não poderá ser registrada em um [trace da transação](/docs/apm/transactions/transaction-traces/transaction-traces). + + + + Se definido como `true`, isso desativa a inserção automática do cabeçalho/rodapé JavaScript para tempo de carregamento da página (às vezes chamado de monitoramento de usuário real ou RUM). Aplicável apenas se a inserção automática estiver [disponível para sua framework da web](/docs/agents/python-agent/supported-features/page-load-timing-python#restrictions_on_instrumentation). + + + + + Usar um middleware WSGI para definir esses valores não funcionará onde o wrapper de aplicativo WSGI do próprio agente Python foi aplicado em um escopo externo. Nestes casos você deve fazer chamadas para a API do agente para obter o mesmo resultado. + + +
+ +## Configuração de vários ambientes [#config-file-deployment-environments] + +O agente lê sua configuração primária em uma seção de configuração do agente chamada `newrelic`. Você pode fornecer substituições para ambientes de implantação específicos (por exemplo, Desenvolvimento, preparação, Produção) em seções adicionais. Comece estas seções com `[newrelic:environment]`, onde `environment` é substituído pelo nome do seu ambiente. + +Para especificar que o agente deve usar uma configuração baseada em ambiente, use um destes métodos: + +* Ao chamar [`newrelic.agent.initialize()`](/docs/agents/python-agent/customization-extension/python-management-api#mgmt), forneça o nome do ambiente como segundo argumento. + + OU + +* Defina a variável de ambiente `NEW_RELIC_ENVIRONMENT` como o nome do ambiente. + +Se nenhum ambiente for especificado, o agente usará as configurações padrão especificadas na seção de configuração do agente `newrelic` . + +A estrutura básica do arquivo de configuração é: + +```ini +[newrelic] +... default settings + +[newrelic:development] +... override settings + +[newrelic:staging] +... override settings + +[newrelic:production] +... override settings +``` + +## Configurações gerais de configuração [#general-settings] + +Essas configurações estão disponíveis no arquivo de configuração do agente. + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ Tipo + + Corda +
+ Padrão + + (nenhum) +
+ [Definir](#options) + + Arquivo de configuração, variável de ambiente +
+ [Variável ambiental](#environment-variables) + + `NEW_RELIC_LICENSE_KEY` +
+ + Especifica o da sua conta New Relic. Esta chave associa a métrica do seu aplicativo à sua conta New Relic. +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ Tipo + + Corda +
+ Padrão + + `Python Application` +
+ [Definir](#options) + + Opção por solicitação, arquivo de configuração, variável de ambiente +
+ [Opção por solicitação](#per-request-configuration) + + `newrelic.app_name` +
+ [Variável ambiental](#environment-variables) + + `NEW_RELIC_APP_NAME` +
+ + O [nome do aplicativo](/docs/apm/new-relic-apm/installation-configuration/name-your-application) usado para agregar dados na interface do New Relic. Para relatar dados para [vários aplicativos ao mesmo tempo](/docs/apm/new-relic-apm/installation-configuration/using-multiple-names-app), especifique uma lista de nomes separados por ponto e vírgula `;`. Não coloque um espaço antes do ponto e vírgula, o que faz com que o analisador de configuração do Python interprete o nome como um comentário incorporado. +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ Tipo + + Boleano +
+ Padrão + + `true` +
+ [Definir](#options) + + Arquivo de configuração, variável de ambiente +
+ [Variável ambiental](#environment-variables) + + `NEW_RELIC_MONITOR_MODE` +
+ + Quando `true`, o agente coleta dados de desempenho sobre seu aplicativo e reporta esses dados ao nosso [coletor de dados](/docs/accounts-partnerships/education/getting-started-new-relic/glossary#collector). +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ Tipo + + Boleano +
+ Padrão + + `false` +
+ [Definir](#options) + + Arquivo de configuração, variável de ambiente +
+ [Variável ambiental](#environment-variables) + + `NEW_RELIC_DEVELOPER_MODE` +
+ + Quando `true`, o agente instrumentará seu aplicativo da web, mas não enviará nenhum dado real. Neste modo offline, você não será cobrado por um agente ativo. + + Use o modo de desenvolvedores para testar [novas versões do agente](/docs/release-notes/agent-release-notes/python-release-notes) ou teste o agente em pacotes de terceiros em um ambiente de desenvolvedores. O modo offline não é uma forma de executar o APM localmente, pois as métricas coletadas pelo agente não são reportadas em lugar nenhum. +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ Tipo + + Corda +
+ Padrão + + (nenhum) +
+ [Definir](#options) + + Arquivo de configuração, variável de ambiente +
+ [Variável ambiental](#environment-variables) + + `NEW_RELIC_LOG` +
+ + Define o nome de um arquivo de log, que é útil para depurar problemas com o agente. Isso não é definido por padrão, pois o agente não conhece o usuário pai do processo do aplicativo Web ou em quais diretórios esse processo tem permissão para gravar. Para obter informações detalhadas, consulte [logging do agente Python](/docs/agents/python-agent/installation-configuration/python-agent-logging). + + Independentemente do que você definir, certifique-se de que as permissões para o diretório que o contém e o próprio arquivo estejam corretas e que o usuário que seu aplicativo da Web executa possa gravar no arquivo. + + + Use um caminho absoluto, a menos que você tenha certeza de qual será o diretório de trabalho do seu aplicativo na inicialização. Se não for possível gravar um arquivo de log, você também poderá usar `stderr` e gerar a saída de erro padrão. Isso normalmente resultaria na exibição da saída no log do servidor web. + +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ Tipo + + Corda +
+ Padrão + + `info` +
+ [Definir](#options) + + Arquivo de configuração, variável de ambiente +
+ [Variável ambiental](#environment-variables) + + `NEW_RELIC_LOG_LEVEL` +
+ + Define o nível de detalhe da mensagem do log, caso você tenha definido o [local do arquivo de log](#log_file). Este `log_level` não afetará o nível de log do módulo de registro do Python. Os valores possíveis, em ordem crescente de detalhes, são `critical`, `error`, `warning`, `info` e `debug`. + + Para relatar problemas de agentes, a configuração mais útil é `debug`. Porém, `debug` gera muitas informações muito rapidamente, portanto não mantenha o agente neste nível por mais tempo do que o necessário para reproduzir seu problema. +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ Tipo + + Boleano +
+ Padrão + + `false` +
+ [Definir](#options) + + Arquivo de configuração, variável de ambiente +
+ [Variável ambiental](#environment-variables) + + `NEW_RELIC_HIGH_SECURITY` +
+ + O modo de alta segurança impõe determinadas configurações de segurança e evita que sejam substituídas, para que nenhum dado confidencial seja enviado para nós. Ativar o modo de alta segurança significa que os parâmetros da solicitação não serão coletados e você não poderá enviar SQL bruto. + + Para ativar o modo de alta segurança, defina-o como `true` no arquivo de configuração **.ini** local **and** e ative-o na página **Account settings** . Para obter mais informações, consulte [Alta segurança](/docs/accounts-partnerships/accounts/security/high-security). +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ Tipo + + Cordas +
+ Padrão + + (nenhum) +
+ [Definir](#options) + + Arquivo de configuração, variável de ambiente +
+ Variáveis ambientais + + `NEW_RELIC_PROXY_SCHEME` + + `NEW_RELIC_PROXY_HOST` + + `NEW_RELIC_PROXY_PORT` + + `NEW_RELIC_PROXY_USER` + + `NEW_RELIC_PROXY_PASS` +
+ + Por padrão, o agente Python tenta se conectar diretamente aos nossos servidores. Se houver um firewall entre seu host e nosso [coletor](/docs/accounts-partnerships/education/getting-started-new-relic/glossary#collector) que exija o uso de um proxy HTTP, defina `proxy_host` e `proxy_port` com os valores necessários para seu proxy HTTP. Se a autenticação de proxy for implementada pelo proxy HTTP, configure também `proxy_user` e `proxy_pass`. + + A configuração `proxy_scheme` determina qual esquema de protocolo é usado para se comunicar com o proxy HTTP. Quando definido como `http`, o agente usa um túnel SSL por meio do proxy HTTP para criptografia de ponta a ponta. + + Em vez de definir as configurações `proxy_scheme`, `proxy_host` e `proxy_port` , você também pode definir a configuração `proxy_host` como um URI válido para o proxy. Inclua o esquema, host e porta; por exemplo, `http://proxy-host:8000`. Isso também funciona se você definir os detalhes do proxy HTTP com a variável de ambiente `NEW_RELIC_PROXY_HOST` . +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ Tipo + + Corda +
+ Padrão + + (nenhum) +
+ [Definir](#options) + + Arquivo de configuração, variável de ambiente +
+ [Variável ambiental](#environment-variables) + + `NEW_RELIC_AUDIT_LOG` +
+ + Define o nome do arquivo de log de auditoria. Se definido, o agente registra detalhes de mensagens transmitidas entre o processo monitor e o [coletor](/docs/accounts-partnerships/education/getting-started-new-relic/glossary#collector). Isso permite avaliar a segurança do agente Python. + + Use um caminho absoluto, a menos que você tenha certeza de qual será o diretório de trabalho do seu aplicativo na inicialização. Qualquer que seja a configuração, certifique-se de que as permissões do diretório que o contém e do próprio arquivo estejam corretas. Certifique-se também de que o usuário pai do seu aplicativo Web possa gravar no arquivo. + + + Não use o log de auditoria continuamente, especialmente em um ambiente de produção. Como o agente não trunca ou rotaciona o arquivo de log, o arquivo de log pode crescer muito rapidamente. + +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ Tipo + + Corda +
+ Padrão + + (nenhum) +
+ [Definir](#options) + + Arquivo de configuração, variável de ambiente +
+ [Variável ambiental](#environment-variables) + + `NEW_RELIC_LABELS` +
+ + Adiciona [etiqueta](/docs/apm/new-relic-apm/maintenance/labels-categories-organize-your-apps-servers). Especifique _name:value_ separado por dois pontos `:` e separe a tag adicional com ponto e vírgula `;`. + + + + ```ini + labels = Server:One;Data Center:Primary + ``` + + +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ Tipo + + Corda +
+ Padrão + + (nenhum) +
+ [Definir](#options) + + Arquivo de configuração, variável de ambiente +
+ [Variável ambiental](#environment-variables) + + `NEW_RELIC_PROCESS_HOST_DISPLAY_NAME` +
+ + Define o nome do host a ser [exibido na interface do APM](/docs/apm/new-relic-apm/maintenance/add-rename-remove-hosts#display_name). Se definido, substitui o nome do host padrão que o agente captura automaticamente. +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ Tipo + + Corda +
+ Padrão + + (nenhum) +
+ [Definir](#options) + + Arquivo de configuração, variável de ambiente +
+ [Variável ambiental](#environment-variables) + + `NEW_RELIC_API_KEY` +
+ + Define o [api_key](/docs/apis/rest-api-v2/requirements/api-keys) a ser usado com [newrelic-admin record-deploy](/docs/agents/python-agent/installation-configuration/python-agent-admin-script#record-deploy). +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ Tipo + + Corda +
+ Padrão + + (nenhum) +
+ [Definir](#options) + + Arquivo de configuração, variável de ambiente +
+ [Variável ambiental](#environment-variables) + + `NEW_RELIC_CA_BUNDLE_PATH` +
+ + Substituição manual do caminho para seu pacote de CA local. Este pacote CA será utilizado para validar o certificado SSL apresentado pelo nosso serviço de coleta de dados. + + + Esta opção de configuração está disponível apenas nas versões 4.2.0 e mais recentes do agente Python. + +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ Tipo + + Float +
+ Padrão + + `0.5` +
+ [Definir](#options) + + Arquivo de configuração, variável de ambiente +
+ [Variável ambiental](#environment-variables) + + `NEW_RELIC_APDEX_T` +
+ + Registraremos o rastreamento da transação quando eles excederem esse limite. O formato é um número de segundos (são permitidos pontos decimais). + + Veja nossa entrada no glossário para [apdex_t](/docs/using-new-relic/welcome-new-relic/get-started/glossary/#apdex_t) + + + Isso só será definido no arquivo de configuração ou na variável de ambiente se `serverless_mode` estiver definido, o que está habilitado para AWS Lambda. Caso contrário, o valor local `apdex_t` será substituído pelo valor nas configurações do aplicativo de interface que será usado para definir o valor `apdex_f` . + +
+
+ +## Atributo + +Atributo são pares de valor principal que fornecem informações para rastreamento de transação, erros de rastreamento, e evento de transação. Além de configurar o atributo para todos os quatro destinos com as configurações gerais de atributo abaixo, eles também podem ser configurados por destino. + +Para obter mais informações, consulte [Agente Python atributo](/docs/agents/python-agent/attributes/python-agent-attributes), [Ativando e desabilitando atributo](/docs/agents/python-agent/attributes/enabling-disabling-attributes-python) e [exemplos de atributo](/docs/agents/python-agent/attributes/python-attribute-examples). + + + + + + + + + + + + + + + + + + + + + + + +
+ Tipo + + Boleano +
+ Padrão + + `true` +
+ [Definir](#options) + + Arquivo de configuração +
+ + Esta configuração pode ser usada para ativar ou desativar todos os atributos. +
+ + + + + + + + + + + + + + + + + + + + + + +
+ Tipo + + Lista de cordas +
+ Padrão + + (nenhum) +
+ [Definir](#options) + + Arquivo de configuração +
+ + Se atributo estiver habilitado, as chaves de atributo encontradas nesta lista serão enviadas para nós. As chaves na lista devem ser separadas por espaços, conforme mostrado abaixo: + + ``` + key1 key2 key3 + ``` + + As regras para atributo podem ser encontradas [na página de atributo do agente](/docs/subscriptions/agent-attributes). +
+ + + + + + + + + + + + + + + + + + + + + + +
+ Tipo + + Lista de cordas +
+ Padrão + + (nenhum) +
+ [Definir](#options) + + Arquivo de configuração +
+ + Todas as chaves de atributo encontradas nesta lista não serão enviadas para nós. As chaves na lista devem ser separadas por espaços, conforme mostrado abaixo: + + ``` + key1 key2 key3 + ``` + + As regras para atributo podem ser encontradas [na página de atributo do agente](/docs/subscriptions/agent-attributes). +
+
+ +## Configuração tracer de transação [#txn-tracer-settings] + + + Não use colchetes `[suffix]` no final do nome da sua transação. O agente retira automaticamente os colchetes do nome. Em vez disso, use parênteses `(suffix)` ou outros símbolos, se necessário. + + +Para obter mais informações sobre rastreamento da transação, consulte [rastreamento da transação](/docs/traces/transaction-traces). + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ Tipo + + Boleano +
+ Padrão + + `true` +
+ [Definir](#options) + + Configuração do lado do servidor, arquivo de configuração +
+ [Etiqueta do lado do servidor](#server-side-configuration) + + `Enable transaction tracing?` +
+ + Se ativado, o tracer de transação [captura informações profundas sobre transações lentas](/docs/apm/transactions/transaction-traces/transaction-traces). +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ Tipo + + Float ou string positivo (`apdex_f`) +
+ Padrão + + `apdex_f` +
+ [Definir](#options) + + Configuração do lado do servidor, arquivo de configuração +
+ [Etiqueta do lado do servidor](#server-side-configuration) + + `Threshold` +
+ + Limite em segundos para quando coletar um rastreamento da transação. Quando o tempo de resposta de uma ação do controlador excede esse limite, o agente registra um rastreamento da transação. Os valores válidos são qualquer float positivo ou `apdex_f` (quatro vezes [apdex_t](/docs/using-new-relic/welcome-new-relic/get-started/glossary/#apdex_t)). +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ Tipo + + Corda +
+ Padrão + + `obfuscated` +
+ [Definir](#options) + + Configuração do lado do servidor, arquivo de configuração +
+ [Etiqueta do lado do servidor](#server-side-configuration) + + `Record SQL?` +
+ + Quando o rastreador de transação está [habilitado](#txn-tracer-enabled), o agente pode registrar instruções SQL. O gravador tem três modos: `off` (não envia SQL), `raw` (envia a instrução SQL em seu formato original) e `obfuscated` (retira literais numéricos e de string). + + A maioria dos frameworks web (incluindo Django) parametrizam consultas SQL para que elas não contenham realmente os valores usados para preencher a consulta. Se você usar o modo `raw` com uma dessas estruturas, o agente Python verá apenas o SQL antes da inserção de valores. O SQL parametrizado será muito parecido com o modo `obfuscated` . +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ Tipo + + Float +
+ Padrão + + `0.5` +
+ [Definir](#options) + + Configuração do lado do servidor, arquivo de configuração +
+ [Etiqueta do lado do servidor](#server-side-configuration) + + `Stack trace threshold` +
+ + Limite em segundos para coletar rastreamento de pilha de chamadas SQL. Quando as instruções SQL excedem esse limite, o agente captura o stack trace atual. Isso é útil para identificar onde as chamadas SQL longas se originam em um aplicativo. +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ Tipo + + Boleano +
+ Padrão + + `true` +
+ [Definir](#options) + + Configuração do lado do servidor, arquivo de configuração +
+ [Etiqueta do lado do servidor](#server-side-configuration) + + `Enable SQL query plans?` +
+ + Determina se o agente Python capturará planos de consulta para consultas SQL lentas. Compatível apenas com MySQL e PostgreSQL. +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ Tipo + + Float +
+ Padrão + + `0.5` +
+ [Definir](#options) + + Configuração do lado do servidor, arquivo de configuração +
+ [Etiqueta do lado do servidor](#server-side-configuration) + + `Query plan threshold` +
+ + Consulta no rastreamento da transação que excedam esse limite reportarão [dados de consulta lenta](/docs/apm/applications-menu/monitoring/viewing-slow-query-details) e quaisquer planos de explicação disponíveis. Explique que a coleta do plano não acontecerá se [`transaction_tracer.explain_enabled`](#txn-tracer-explain-threshold) for `false`. +
+ + + + + + + + + + + + + + + + + + + + + + +
+ Tipo + + Boleano +
+ Padrão + + `true` +
+ [Definir](#options) + + Arquivo de configuração +
+ + Esta configuração pode ser usada para ativar ou desativar todos os atributos de rastreamento da transação. Se `attributes.enabled` no nível raiz for `false`, nenhum atributo será enviado para rastrear a transação, independentemente de como esta definição de configuração (`transaction_tracer.attributes.enabled`) estiver definida. +
+ + + + + + + + + + + + + + + + + + + + + + +
+ Tipo + + Lista de strings +
+ Padrão + + (nenhum) +
+ [Definir](#options) + + Arquivo de configuração +
+ + Se os atributo estiverem habilitados para rastreamento da transação, todas as chaves de atributo encontradas nesta lista serão enviadas para nós no rastreamento da transação. Para mais informações, consulte as [regras de atribuição de agentes](/docs/apm/other-features/attributes/agent-attributes). +
+ + + + + + + + + + + + + + + + + + + + + + +
+ Tipo + + Lista de cordas +
+ Padrão + + (nenhum) +
+ [Definir](#options) + + Arquivo de configuração +
+ + Todas as chaves de atributo encontradas nesta lista não serão enviadas no rastreamento da transação. Para mais informações, consulte as [regras de atribuição de agentes](/docs/apm/other-features/attributes/agent-attributes). +
+ + + + + + + + + + + + + + + + + + + + + + +
+ Tipo + + Corda +
+ Padrão + + (nenhum) +
+ [Definir](#options) + + Arquivo de configuração +
+ + Para as funções ou métodos especificados, o agente capturará instrumentação adicional de temporização de função. Especifique esses nomes no formato `module:function` ou `module:class.function`. + + O uso de curingas (globbing) para nomes de funções e classes é possível usando padrões suportados pelo módulo [fnmatch](https://docs.python.org/3/library/fnmatch.html) . Os caminhos dos módulos não são suportados por curingas. Especifique os padrões no formato `module:function*` ou `module:class.*`. + + Por exemplo, se você deseja adicionar rastreamento de função a todas as funções de validação no arquivo abaixo: + + + my-app/common/utils.py + + + ```py + def validate_credentials(): + … + def validate_status(): + … + def format_message(): + … + ``` + + Adicione a seguinte linha ao arquivo de configuração do agente para incluir o rastreamento de função para todas as funções de validação em `my-app/common/utils.py` usando caracteres curinga. + + + my-app/newrelic.ini + + + ```ini + [newrelic] + ... + transaction_tracer.function_trace = common.utils:validate* + ``` + + + Wilcarding requer [agente Python versão 6.4.4.161 ou superior](/docs/agents/python-agent/installation-configuration/upgrade-python-agent). + +
+
+ +## Configuração do segmento de transação [#txn-segment-settings] + +Aqui estão as configurações do segmento de transação disponíveis por meio do arquivo de configuração do agente. + + + + + + + + + + + + + + + + + + + + + + + +
+ Tipo + + Boleano +
+ Padrão + + `true` +
+ [Definir](#options) + + Arquivo de configuração +
+ + Esta configuração pode ser usada para ativar ou desativar todos os atributos dos segmentos de rastreamento da transação. Se `attributes.enabled` no nível raiz for `false`, nenhum atributo será enviado para segmentos de rastreamento da transação, independentemente de como esta definição de configuração (`transaction_segments.attributes.enabled`) estiver definida. +
+ + + + + + + + + + + + + + + + + + + + + + +
+ Tipo + + Lista de strings +
+ Padrão + + (nenhum) +
+ [Definir](#options) + + Arquivo de configuração +
+ + Se os atributo estiverem habilitados para segmentos de trace da transação, todas as chaves de atributo encontradas nesta lista serão enviadas em segmentos de trace da transação. Para mais informações, consulte as [regras de atribuição de agentes](/docs/apm/other-features/attributes/agent-attributes). +
+ + + + + + + + + + + + + + + + + + + + + + +
+ Tipo + + Lista de cordas +
+ Padrão + + (nenhum) +
+ [Definir](#options) + + Arquivo de configuração +
+ + Todas as chaves de atributo encontradas nesta lista não serão enviadas em segmentos de rastreamento da transação. Para mais informações, consulte as [regras de atribuição de agentes](/docs/apm/other-features/attributes/agent-attributes). +
+
+ +## Erro na configuração do coletor [#error-collector-settings] + +Aqui estão as configurações do coletor de erros disponíveis por meio do arquivo de configuração do agente. + + + Para obter uma visão geral da configuração de erros no APM, consulte [Gerenciar erros no APM](/docs/agents/manage-apm-agents/agent-data/manage-errors-apm-collect-ignore-mark-expected). + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ Tipo + + Boleano +
+ Padrão + + `true` +
+ [Definir](#options) + + Configuração do lado do servidor, arquivo de configuração +
+ [Etiqueta do lado do servidor](#server-side-configuration) + + `Enable error collection?` +
+ + Se ativado, o coletor de erros captura informações sobre exceções não detectadas. +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ Tipo + + Corda +
+ Padrão + + (nenhum) +
+ [Definir](#options) + + Configuração do lado do servidor, arquivo de configuração +
+ [Etiqueta do lado do servidor](#server-side-configuration) + + `Ignore these errors` +
+ + Para parar de coletar erros específicos, defina isso como uma lista separada por espaços de nomes de tipos de exceção do Python a serem ignorados. Use o formato `module:class` para o nome da exceção. + + + Antes da versão 6.4.0 do agente, essa configuração era denominada `error_collector.ignore_errors`. Se o seu arquivo de configuração ainda usa `ignore_errors`, atualize seu agente para usar `ignore_classes`. + +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ Tipo + + Corda +
+ Padrão + + `100-102 200-208 226 300-308 404` +
+ [Definir](#options) + + Configuração do lado do servidor, arquivo de configuração +
+ [Etiqueta do lado do servidor](#server-side-configuration) + + `Ignore these status codes` +
+ + Lista códigos de status HTTP que o agente deve ignorar em vez de registrar como erros. Liste códigos de status adicionais como números inteiros separados por espaços e especifique intervalos com um hífen `-` separador entre os valores inicial e final. Para adicionar um dos códigos padrão à sua lista de permissões, coloque um ponto de exclamação `!` no início do código. + + Esta configuração só é compatível com alguns frameworks web, pois alguns frameworks não usam exceções para retornar respostas HTTP. + + + Esta opção de configuração só pode ser definida em Configuração no lado do servidor nas versões 6.4.0 e mais recentes do agente Python. + +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ Tipo + + Corda +
+ Padrão + + (nenhum) +
+ [Definir](#options) + + Configuração do lado do servidor, arquivo de configuração +
+ [Etiqueta do lado do servidor](#server-side-configuration) + + `Expect these error class names` +
+ + Impede que classes de exceção especificadas afetem taxa de erros ou pontuação Apdex enquanto ainda relatam os erros ao APM. Defina isso como uma lista separada por espaços dos nomes de tipos de exceção do Python esperados. Use o formato `module:class` para o nome da exceção. + + + Esta opção de configuração está disponível apenas nas versões 6.4.0 e mais recentes do agente Python. + +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ Tipo + + Corda +
+ Padrão + + (nenhum) +
+ [Definir](#options) + + Configuração do lado do servidor, arquivo de configuração +
+ [Etiqueta do lado do servidor](#server-side-configuration) + + `Expect these status codes` +
+ + Impede que códigos de status HTTP especificados afetem a taxa de erros ou a pontuação Apdex enquanto ainda relatam os erros ao APM. Liste os códigos de status como números inteiros separados por espaços e especifique intervalos com um hífen `-` separador entre os valores inicial e final. Para negar um dos códigos da sua lista, coloque um ponto de exclamação `!` no início do código. + + Esta configuração só é compatível com alguns frameworks web, pois alguns frameworks não usam exceções para retornar respostas HTTP. + + + Esta opção de configuração está disponível apenas nas versões 6.4.0 e mais recentes do agente Python. + +
+ + + + + + + + + + + + + + + + + + + + + + +
+ Tipo + + Boleano +
+ Padrão + + `true` +
+ [Definir](#options) + + Arquivo de configuração +
+ + Esta configuração pode ser usada para ativar ou desativar todos os atributos para erros de rastreamento. Se `attributes.enabled` for `false` no nível raiz, nenhum atributo será enviado para erros de rastreamento, independentemente de como essa definição de configuração (`error_collector.attributes.enabled`) estiver definida. +
+ + + + + + + + + + + + + + + + + + + + + + +
+ Tipo + + Lista de strings +
+ Padrão + + (nenhum) +
+ [Definir](#options) + + Arquivo de configuração +
+ + Se atributo estiver habilitado para erros de rastreamento, todas as chaves de atributo encontradas nesta lista serão enviadas para erros de rastreamento. Para mais informações, consulte as [regras de atribuição de agentes](/docs/apm/other-features/attributes/agent-attributes). +
+ + + + + + + + + + + + + + + + + + + + + + +
+ Tipo + + Lista de strings +
+ Padrão + + (nenhum) +
+ [Definir](#options) + + Arquivo de configuração +
+ + As chaves atributo encontradas nesta lista não serão enviadas em erros de rastreamento. Para mais informações, consulte as [regras de atribuição de agentes](/docs/apm/other-features/attributes/agent-attributes). +
+ + + + + + + + + + + + + + + + + + + + + + +
+ Tipo + + Boleano +
+ Padrão + + `true` +
+ [Definir](#options) + + Arquivo de configuração +
+ + Se ativado, o coletor de erros captura dados de eventos para análise avançada. Para obter mais informações, consulte [Erros de APM](/docs/apm/applications-menu/events/view-apm-errors-error-traces). +
+
+ +## Monitoramento de configurações do navegador [#browser-settings] + +Aqui estão as configurações de monitoramento do navegador disponíveis através do arquivo de configuração do agente. + + + + + + + + + + + + + + + + + + + + + + + +
+ Tipo + + Boleano +
+ Padrão + + `true` +
+ [Definir](#options) + + Arquivo de configuração +
+ + Habilita monitoramento do Browser. Para obter mais informações, consulte [Tempo de carregamento da página em Python](/docs/python/page-load-timing-in-python). + + + Antes de habilitar o monitoramento do Browser no arquivo de configuração, [habilite-o nas configurações da aplicação na interface de monitoramento do Browser](/docs/browser/new-relic-browser/installation-configuration/adding-apps-new-relic-browser#select-apm-app). + +
+ + + + + + + + + + + + + + + + + + + + + + +
+ Tipo + + Boleano +
+ Padrão + + `true` +
+ [Definir](#options) + + Arquivo de configuração +
+ + Para [frameworks web Python suportado](/docs/agents/python-agent/supported-features/page-load-timing-python#restrictions_on_instrumentation), esta configuração permite a inserção automática dos fragmentos JavaScript de monitoramento do navegador. +
+ + + + + + + + + + + + + + + + + + + + + + +
+ Tipo + + Corda +
+ Padrão + + `text/html` +
+ [Definir](#options) + + Arquivo de configuração +
+ + Especifique o(s) HTML `Content-Type`(s) que nosso agente de monitoramento de Browser deverá auto-instrumentar. Adicione entradas adicionais em uma lista separada por espaços. + + + + Se você estiver gerando respostas de páginas HTML e usando `Content-Type` de `application/xhtml+xml`, poderá substituir os tipos de conteúdo permitidos para listar esse tipo de conteúdo e o `text/html` padrão usando: + + ```ini + browser_monitoring.content_type = text/html application/xhtml+xml + ``` + + + O trecho de monitoramento de JavaScript do navegador impede que a página seja validada como `application/xhtml+xml`, embora a página deva ser carregada e renderizada nos navegadores do usuário final. + + + +
+ + + + + + + + + + + + + + + + + + + + + + +
+ Tipo + + Boleano +
+ Padrão + + `false` +
+ [Definir](#options) + + Arquivo de configuração +
+ + Esta configuração pode ser usada para ativar ou desativar todos os atributos de monitoramento do Browser. Estes são os dados que são enviados para o evento de visualização de página. Se `attributes.enabled` for falso no nível raiz, nenhum atributo será enviado no monitoramento do Browser independente de como a configuração (`browser_monitoring.attributes.enabled`) estiver definida. +
+ + + + + + + + + + + + + + + + + + + + + + +
+ Tipo + + Lista de cordas +
+ Padrão + + (nenhum) +
+ [Definir](#options) + + Arquivo de configuração +
+ + Se atributo estiver habilitado para `browser_monitoring`, todas as chaves de atributo encontradas nesta lista serão enviadas em visualizações de página. Para mais informações, consulte as [regras de atribuição de agentes](/docs/apm/other-features/attributes/agent-attributes). +
+ + + + + + + + + + + + + + + + + + + + + + +
+ Tipo + + Lista de cordas +
+ Padrão + + (nenhum) +
+ [Definir](#options) + + Arquivo de configuração +
+ + Todas as chaves de atributo encontradas nesta lista não serão enviadas em page views. Para mais informações, consulte as [regras de atribuição de agentes](/docs/apm/other-features/attributes/agent-attributes). +
+
+ +## Configurações de eventos de transação + +Aqui estão as configurações de eventos de transação disponíveis por meio do arquivo de configuração do agente. + + + Essas definições de configuração costumavam ser chamadas de `analytic_events`. Se o seu arquivo de configuração ainda usa `analytic_events`, atualize seu agente para usar `transaction_events`. + + + + + + + + + + + + + + + + + + + + + + + + +
+ Tipo + + Boleano +
+ Padrão + + `true` +
+ [Definir](#options) + + Arquivo de configuração +
+ + Os dados de eventos de transação permitem a utilização de informações adicionais como [histograma](/docs/applications-menu/histograms-viewing-data-distribution) e [percentil](/docs/applications-menu/percentiles-comparing-ranked-data). +
+ + + + + + + + + + + + + + + + + + + + + + +
+ Tipo + + Boleano +
+ Padrão + + `true` +
+ [Definir](#options) + + Arquivo de configuração +
+ + Esta configuração pode ser usada para ativar ou desativar todos os atributos do evento de transação. Se `attributes.enabled` for `false` no nível raiz, nenhum atributo será enviado para o evento de transação, independentemente de como essa definição de configuração (`transaction_events.attributes.enabled`) estiver definida. +
+ + + + + + + + + + + + + + + + + + + + + + +
+ Tipo + + Lista de cordas +
+ Padrão + + (nenhum) +
+ [Definir](#options) + + Arquivo de configuração +
+ + Se o atributo estiver habilitado para evento de transação, todas as chaves de atributo encontradas nesta lista serão enviadas no evento de transação. Para mais informações, consulte as [regras de atribuição de agentes](/docs/apm/other-features/attributes/agent-attributes). +
+ + + + + + + + + + + + + + + + +
+ Tipo + + Lista de cordas +
+ Padrão + + (nenhum) +
+ + Todas as chaves de atributo encontradas nesta lista não serão enviadas em evento de transação. Observe que excluir atributo do evento de transação não exclui do evento span. Para mais informações, consulte as [regras de atribuição de agentes](/docs/apm/other-features/attributes/agent-attributes). +
+
+ +## Configurações personalizadas do evento + +Aqui estão as configurações personalizadas do evento disponíveis por meio do arquivo de configuração do agente. + + + + + + + + + + + + + + + + + + + + + + + +
+ Tipo + + Boleano +
+ Padrão + + `true` +
+ [Definir](#options) + + Arquivo de configuração +
+ + Permitir a gravação do evento na API de eventos por meio de [`record_custom_event()`](/docs/agents/python-agent/python-agent-api/recordcustomevent-python-agent-api/). +
+
+ +## Configurações tracer de armazenamento de dados + +Estas configurações tracer de armazenamento de dados estão disponíveis por meio do arquivo de configuração do agente: + + + + + + + + + + + + + + + + + + + + + + + +
+ Tipo + + Boleano +
+ Padrão + + `true` +
+ [Definir](#options) + + Arquivo de configuração +
+ + Quando habilitado, o agente coleta métricas de instância do datastore (como host e porta) para algum driver do banco de dados. Estes também são relatados na consulta lenta trace e trace da transação. +
+ + + + + + + + + + + + + + + + + + + + + + +
+ Tipo + + Boleano +
+ Padrão + + `true` +
+ [Definir](#options) + + Arquivo de configuração +
+ + Quando habilitado, o agente coleta o nome do banco de dados para algum driver do banco de dados. O nome do banco de dados é informado na consulta lenta trace e trace da transação. +
+
+ +## Configurações distributed tracing [#dt-main] + +Distributed tracing permite ver o caminho que uma solicitação percorre ao percorrer sistemas distribuídos. A partir do [agente Python versão 7.0.0.166 ou superior](/docs/agents/python-agent/installation-configuration/upgrade-python-agent), distributed tracing é habilitado por padrão. + + + A ativação distributed tracing desativa [o rastreamento multiaplicativo](#cross-application-tracer) e tem outros efeitos no recurso APM. Se estiver migrando do rastreamento multiaplicativo, leia o [guia de transição](/docs/transition-guide-distributed-tracing). + + +Para obter mais informações, consulte [distributed tracing para seus serviços Python](/docs/apm/agents/python-agent/configuration/distributed-tracing-python-agent). + +As configurações incluem: + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ Tipo + + Boleano +
+ Padrão + + `true` +
+ [Definir](#options) + + Arquivo de configuração, variável de ambiente +
+ [Variável ambiental](#environment-variables) + + `NEW_RELIC_DISTRIBUTED_TRACING_ENABLED` +
+ + Permite [distributed tracing](/docs/distributed-tracing/concepts/introduction-distributed-tracing) +
+
+ +## Configuração de eventos de extensão [#txn-span-events-settings] + +[Os eventos Span](/docs/apm/distributed-tracing/getting-started/how-new-relic-distributed-tracing-works#data-structure) são coletados para [distributed tracing](#distributed-tracing-settings). distributed tracing deve ser ativado para relatar o evento span. As opções de configuração incluem: + + + + + + + + + + + + + + + + + + + + + + + +
+ Tipo + + Boleano +
+ Padrão + + `true` +
+ [Definir](#options) + + Arquivo de configuração +
+ + Essa configuração pode ser usada para ativar ou desativar se o agente Python envia spans. +
+ + + + + + + + + + + + + + + + + + + + + + +
+ Tipo + + Boleano +
+ Padrão + + `true` +
+ [Definir](#options) + + Arquivo de configuração +
+ + Esta configuração pode ser usada para ativar ou desativar todos os [atributos](/docs/using-new-relic/welcome-new-relic/getting-started/glossary#attribute) do evento span. Se `attributes.enabled` no nível raiz for `false`, nenhum atributo será enviado para span evento, independentemente de como esta definição de configuração (`span_events.attributes.enabled`) estiver definida. Para mais informações, consulte as [regras de atribuição de agentes](/docs/apm/other-features/attributes/agent-attributes). +
+ + + + + + + + + + + + + + + + + + + + + + +
+ Tipo + + Lista de strings +
+ Padrão + + (nenhum) +
+ [Definir](#options) + + Arquivo de configuração +
+ + Se atributo estiver habilitado para span evento, todas as chaves de atributo encontradas nesta lista serão enviadas em span evento. Para mais informações, consulte as [regras de atribuição de agentes](/docs/apm/other-features/attributes/agent-attributes). +
+ + + + + + + + + + + + + + + + + + + + + + +
+ Tipo + + Lista de cordas +
+ Padrão + + (nenhum) +
+ [Definir](#options) + + Arquivo de configuração +
+ + Todas as chaves de atributo encontradas nesta lista não serão enviadas no evento span. Para mais informações, consulte as [regras de atribuição de agentes](/docs/apm/other-features/attributes/agent-attributes). +
+
+ +## Configuração de colheita de eventos [#event-harvest-config] + +As configurações de coleta de eventos limitam a quantidade de dados de tipo de evento enviados para o New Relic. Ao usar essas configurações, considere estes pontos importantes: + +* As configurações de coleta de eventos afetam os limites de uma única instância do agente, e não de todo o aplicativo. Veja o exemplo de uso abaixo para saber como definir limites em um aplicativo inteiro. + +* [O streaming em tempo real](/docs/agents/manage-apm-agents/agent-data/real-time-streaming) envia dados a cada cinco segundos (12 vezes por minuto), mas as configurações de coleta de eventos ainda afetam a taxa de eventos por + + **minute** + + . A ativação ou desativação do streaming em tempo real não requer alteração dessas configurações. + +* Com streaming em tempo real (habilitado por padrão), o New Relic exibirá os limites de colheita de eventos para entidade em intervalos de cinco segundos. Isso significa, por exemplo, que quando você define um valor limite de 1200 no arquivo de configuração, você o verá como 100 no New Relic. + +### Exemplo de uso + +Digamos que uma aplicação seja implantada em 10 hosts, cada um executando quatro processos por host. Para limitar o número de eventos de extensão a 10.000 eventos por minuto para todo o aplicativo, divida esse número por 10 hosts. Em seguida, divida novamente por quatro processos por host. + +10.000 / (10 \* 4) = 250 + +Com base nesse cálculo, a configuração final é: + +event_harvest_config.harvest_limits.span_event_data = 250 + + + Devido à forma como o New Relic coleta dados (12 vezes por minuto), se a contagem de dados do evento for menor que 12, ele aparecerá como 0 no New Relic. + + +As configurações de colheita de eventos incluem: + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ Tipo + + Inteiro +
+ Padrão + + `1200` +
+ [Definir](#options) + + Arquivo de configuração +
+ [Variável ambiental](#environment-variables) + + `NEW_RELIC_ANALYTICS_EVENTS_MAX_SAMPLES_STORED` +
+ + Limite de evento analítico por minuto enviado por uma instância do agente Python para a New Relic. +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ Tipo + + Inteiro +
+ Padrão + + `3600` +
+ [Definir](#options) + + Arquivo de configuração +
+ [Variável ambiental](#environment-variables) + + `NEW_RELIC_CUSTOM_INSIGHTS_EVENTS_MAX_SAMPLES_STORED` +
+ + Limite de evento personalizado por minuto enviado por uma instância do agente Python para New Relic. eventos personalizados são criados através do SDK de telemetria Python. +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ Tipo + + Inteiro +
+ Padrão + + `2000` +
+ [Definir](#options) + + Arquivo de configuração +
+ [Variável ambiental](#environment-variables) + + `NEW_RELIC_SPAN_EVENTS_MAX_SAMPLES_STORED` +
+ + Limite de evento span por minuto enviado por uma instância do agente Python para o New Relic. +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ Tipo + + Inteiro +
+ Padrão + + 100 +
+ [Definir](#options) + + Arquivo de configuração +
+ [Variável ambiental](#environment-variables) + + `NEW_RELIC_ERROR_COLLECTOR_MAX_EVENT_SAMPLES_STORED` +
+ + Limite de evento de erro por minuto enviado por uma instância do agente Python para New Relic. +
+
+ +## Configurações de visibilidade do loop de eventos [#event-loop] + + + Requer [agente Python versão 5.0.0.124 ou superior](/docs/agents/python-agent/installation-configuration/upgrade-python-agent). + + +A visibilidade do loop de eventos apresenta informações sobre transações que bloqueiam o loop de eventos. O agente irá gerar informações sobre transações que esperaram um tempo significativo para adquirir o controle do loop de eventos. As configurações incluem: + + + + + + + + + + + + + + + + + + + + + + + +
+ Tipo + + Boleano +
+ Padrão + + `true` +
+ [Definir](#options) + + Arquivo de configuração +
+ + Defina como `false` para desativar as informações do loop de eventos. +
+ + + + + + + + + + + + + + + + + + + + + + +
+ Tipo + + Float +
+ Padrão + + `0.1` +
+ [Definir](#options) + + Arquivo de configuração +
+ + Limite em segundos por quanto tempo uma transação deve bloquear o loop de eventos antes de gerar informações de loop de eventos. +
+
+ +## Configurações métricas de tempo de execução de coleta de lixo [#garbage-collection-runtime-metrics] + + + Requer [agente Python versão 6.2.0.156 ou superior](/docs/agents/python-agent/installation-configuration/upgrade-python-agent). + + +Essas configurações métricas de tempo de execução de coleta de lixo estão disponíveis por meio do arquivo de configuração do agente: + + + + + + + + + + + + + + + + + + + + + + + +
+ Tipo + + Boleano +
+ Padrão + + false +
+ [Definir](#options) + + Arquivo de configuração +
+ + Quando habilitado, o agente irá gerar e enviar métricas de coleta de lixo. +
+ + + + + + + + + + + + + + + + + + + + + + +
+ Tipo + + Inteiro +
+ Padrão + + 5 +
+ [Definir](#options) + + Arquivo de configuração +
+ + O agente reporta métricas de contagem de objetos para os tipos de objetos mais comuns coletados pelo coletor de lixo. Para cada tipo de objeto, esta configuração permite definir o número máximo de métricas individuais que serão amostradas. +
+
+ +## Configurações de nível do código métrico [#codestream-integration] + +As seguintes configurações estão disponíveis para configuração do nível do código métrico no agente. + + + + + + + + + + + + + + + + + + + + + + + +
+ Tipo + + Boleano +
+ Padrão + + `true` +
+ [Definir](#options) + + Arquivo de configuração +
+ + Defina como `false` para desativar a coleta de atributos do agente para o nível do código métrico. +
+ + + + Isso só pode ser definido por meio de uma variável de ambiente. + + + + + + + + + + + + + + + + + + + + + + +
+ Tipo + + Inteiro +
+ Padrão + + `None` +
+ [Definir](#options) + + Variável de ambiente +
+ + O commit sha. O sha inteiro pode ser usado ou apenas os primeiros sete caracteres (por exemplo 734713b). +
+ + + + Isso só pode ser definido por meio de uma variável de ambiente. + + + + + + + + + + + + + + + + + + + + + + +
+ Tipo + + Corda +
+ Padrão + + `None` +
+ [Definir](#options) + + Variável de ambiente +
+ + Uma tag de lançamento (como v0.1.209 ou release-209). +
+
+ +## Configuração Errors Inbox [#errors-inbox-configuration] + +Definir uma das tags a seguir ajudará você a identificar quais versões do seu software estão produzindo erros. + +* `NEW_RELIC_METADATA_SERVICE_VERSION` irá criar tag.service.version nos dados do evento contendo a versão do seu código que está implantada, em muitos casos uma versão semântica como 1.2.3, mas nem sempre. +* `NEW_RELIC_METADATA_RELEASE_TAG `criará tags.releaseTag nos dados do evento contendo a tag de lançamento (como v0.1.209 ou release-209). +* `NEW_RELIC_METADATA_COMMIT` criará tag.commit nos dados do evento contendo o commit sha. O sha inteiro pode ser usado ou apenas os primeiros sete caracteres (por exemplo, 734713b). + +Uma próxima versão da Errors Inbox rastreará automaticamente quais versões do seu software estão produzindo erros. Quaisquer dados de versão também serão exibidos no [CodeStream](/docs/codestream/how-use-codestream/performance-monitoring/#buildsha). + +## Configurações de log do aplicativo [#application-logging] + +As configurações a seguir estão disponíveis para configuração do log do aplicativo no agente. + +Para obter algumas dicas sobre como configurar o log para o agente Python, consulte [Configurar o log do Python no contexto](/docs/logs/logs-context/configure-logs-context-python). + + + Requer [agente Python versão 7.12.0.176 ou superior](/docs/agents/python-agent/installation-configuration/upgrade-python-agent). + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ Tipo + + Boleano +
+ Padrão + + `true` +
+ [Definir](#options) + + Arquivo de configuração, variável de ambiente +
+ [Variável ambiental](#environment-variables) + + `NEW_RELIC_APPLICATION_LOGGING_ENABLED` +
+ + Se `true`, habilita a decoração de log e a coleta de evento de log e métrica de log se estes sub-recursos de configuração também estiverem habilitados. Se `false`, nenhum recurso de instrumentação de criação de log será ativado. +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ Tipo + + Boleano +
+ Padrão + + `true` +
+ [Definir](#options) + + Arquivo de configuração, variável de ambiente +
+ [Variável ambiental](#environment-variables) + + `NEW_RELIC_APPLICATION_LOGGING_FORWARDING_ENABLED` +
+ + Se `true`, o agente captura os registros de log emitidos pelo seu aplicativo e os encaminha para o New Relic. `application_logging.enabled` também deve ser `true` para que esta configuração tenha efeito. + + + Se você já estiver enviando os logs do seu aplicativo para o New Relic usando uma solução de encaminhamento de logs existente, desative-a antes de ativar o encaminhamento de logs no agente, para evitar cobrança por dados log duplicados. + +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ Tipo + + Boleano +
+ Padrão + + `false` +
+ [Definir](#options) + + Arquivo de configuração, variável de ambiente +
+ [Variável ambiental](#environment-variables) + + `NEW_RELIC_APPLICATION_LOGGING_FORWARDING_CONTEXT_DATA_ENABLED` +
+ + Se `true`, o agente capturará os dados de contexto disponíveis (extras, atributo de mensagem de dicionário, atributo fornecido pelo framework de registro) e adicionará seu conteúdo como atributo nos logs encaminhados para New Relic. Você pode controlar esse comportamento nas configurações da seção `application_logging.forwarding.context_data` . +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ Tipo + + Lista de strings +
+ Padrão + + (nenhum) +
+ [Definir](#options) + + Arquivo de configuração, variável de ambiente +
+ [Variável ambiental](#environment-variables) + + `NEW_RELIC_APPLICATION_LOGGING_FORWARDING_CONTEXT_DATA_INCLUDE` +
+ + Se atributo estiver habilitado para `context_data`, todas as chaves de atributo encontradas nesta lista serão enviadas para nós no rastreamento da transação. Para mais informações, consulte as [regras de atribuição de agentes](/docs/apm/other-features/attributes/agent-attributes). + + + Ao adicionar atributo de contexto, o agente prefixa as chaves com `context.` para atributo do contexto da framework de registro e `message.` para atributo de um contexto de mensagem de dicionário. + + Esses prefixos NÃO são incluídos na correspondência com regras de filtragem de inclusão/exclusão. + +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ Tipo + + Lista de cordas +
+ Padrão + + (nenhum) +
+ [Definir](#options) + + Arquivo de configuração, variável de ambiente +
+ [Variável ambiental](#environment-variables) + + `NEW_RELIC_APPLICATION_LOGGING_FORWARDING_CONTEXT_DATA_EXCLUDE` +
+ + Todas as chaves de atributo encontradas nesta lista não serão enviadas em context_data. Para mais informações, consulte as [regras de atribuição de agentes](/docs/apm/other-features/attributes/agent-attributes). + + + Ao adicionar atributo de contexto, o agente prefixa as chaves com `context.` para atributo do contexto da framework de registro e `message.` para atributo de um contexto de mensagem de dicionário. + + Esses prefixos NÃO são incluídos na correspondência com regras de filtragem de inclusão/exclusão. + +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ Tipo + + Inteiro +
+ Padrão + + 10.000 +
+ [Definir](#options) + + Arquivo de configuração, variável de ambiente +
+ [Variável ambiental](#environment-variables) + + `NEW_RELIC_APPLICATION_LOGGING_FORWARDING_MAX_SAMPLES_STORED` +
+ + Número de registros de log a serem enviados por minuto para o New Relic. Esta configuração controla o consumo geral de memória ao usar o recurso de encaminhamento de logs. + + Defina um valor mais baixo para reduzir a quantidade de linhas de log enviadas (pode causar amostragem de log). Defina um valor mais alto para enviar mais linhas de log. + + Cada log recebe a mesma prioridade que sua transação associada. log que ocorrem fora de uma transação receberão uma prioridade aleatória. Alguns registros podem não ser incluídos porque são limitados por `max_samples_stored`. Por exemplo, se o registro em log `max_samples_stored` estiver definido como 10.000 e a transação 1 tiver 10.000 entradas de log, somente as entradas de log da transação 1 serão registradas. Se a transação 1 tiver menos de 10.000 logs, você receberá todos os logs da transação 1. Se ainda houver espaço, você receberá todo o log da transação 2 e assim por diante. + + Se após todos os logs de transação amostrados forem registrados, e eles não atingirem o limite em `max_samples_stored`, então será enviada a mensagem do log de transação amostrada que não estava em nossa amostragem. Se sobrar alguma, as mensagens do log fora da transação serão registradas. +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ Tipo + + Boleano +
+ Padrão + + `true` +
+ [Definir](#options) + + Arquivo de configuração, variável de ambiente +
+ [Variável ambiental](#environment-variables) + + `NEW_RELIC_APPLICATION_LOGGING_METRICS_ENABLED` +
+ + Se `true`, o agente captura métricas relacionadas às linhas de log enviadas pela sua aplicação. `application_logging.enabled` também deve ser `true` para que esta configuração tenha efeito. +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ Tipo + + Boleano +
+ Padrão + + `false` +
+ [Definir](#options) + + Arquivo de configuração, variável de ambiente +
+ [Variável ambiental](#environment-variables) + + `NEW_RELIC_APPLICATION_LOGGING_LOCAL_DECORATING_ENABLED` +
+ + Se `true`, o agente decora o log com metadados para vincular entidade, hosts, rastreamento e spans. `application_logging.enabled` também deve ser `true` para que esta configuração tenha efeito. +
+
+ +## Configurações de instrumentação [#instrumentation-settings] + + + Requer [agente Python versão 8.7.1 ou superior](/docs/agents/python-agent/installation-configuration/upgrade-python-agent). + + +Estas configurações específicas do pacote de instrumentação estão disponíveis por meio do arquivo de configuração do agente: + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ Tipo + + Boleano +
+ Padrão + + false +
+ [Definir](#options) + + Arquivo de configuração +
+ [Variável ambiental](#environment-variables) + + `NEW_RELIC_INSTRUMENTATION_GRAPHQL_CAPTURE_INTROSPECTION_QUERIES` +
+ + Quando habilitado, o agente irá capturar transações para consulta de introspecção no GraphQL. +
+
+ +## Configurações de aprendizado de máquina [#ml-settings] + + + Requer [agente Python versão 9.1.0 ou superior](/docs/agents/python-agent/installation-configuration/upgrade-python-agent). + + +As configurações a seguir estão disponíveis para configuração de dados de machine learning no agente. + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ Tipo + + Boleano +
+ Padrão + + `false` +
+ [Definir](#options) + + Arquivo de configuração, variável de ambiente +
+ [Variável ambiental](#environment-variables) + + `NEW_RELIC_MACHINE_LEARNING_ENABLED` +
+ + Defina como `true` para ativar a coleta de atributos do agente para métricas de aprendizado de máquina. +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ Tipo + + Boleano +
+ Padrão + + `false` +
+ [Definir](#options) + + Arquivo de configuração, variável de ambiente +
+ [Variável ambiental](#environment-variables) + + `NEW_RELIC_MACHINE_LEARNING_INFERENCE_EVENT_VALUE_ENABLED` +
+ + Defina como `true` para ativar a captura do valor de inferência bruto. +
+ + + + + + + + + + + + + + + + + + + + + + +
+ Tipo + + Boleano +
+ Padrão + + `false` +
+ [Definir](#options) + + Arquivo de configuração +
+ + Permitir a gravação de eventos de aprendizado de máquina na API de eventos por meio de [`record_ml_event()`](/docs/agents/python-agent/python-agent-api/recordmlevent-python-agent-api/). +
+
+ +## Outras definições de configuração [#other-settings] + +Aqui estão diversas outras configurações disponíveis por meio do arquivo de configuração do agente. + + + + + + + + + + + + + + + + + +
+ Tipo + + Boleano +
+ Padrão + + `true` +
+ + Se `true`, o agente detectará automaticamente que está em execução em um ambiente AWS. +
+ + + + + + + + + + + + + + + + +
+ Tipo + + Boleano +
+ Padrão + + `true` +
+ + Se `true`, o agente detecta automaticamente que está em execução em um ambiente do Azure. +
+ + + + + + + + + + + + + + + + +
+ Tipo + + Boleano +
+ Padrão + + `true` +
+ + Se `true`, o agente detectará automaticamente que está em execução em um ambiente do Google Cloud Platform. +
+ + + + + + + + + + + + + + + + +
+ Tipo + + Boleano +
+ Padrão + + `true` +
+ + Se `true`, o agente detectará automaticamente que está em execução em um ambiente Pivotal Cloud Foundry. +
+ + + + + + + + + + + + + + + + +
+ Tipo + + Boleano +
+ Padrão + + `true` +
+ + Se `true`, o agente detecta automaticamente que está em execução no Docker. +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ Tipo + + Boleano +
+ Padrão + + `true` +
+ [Definir](#options) + + Configuração do lado do servidor, arquivo de configuração +
+ [Etiqueta do lado do servidor](#server-side-configuration) + + `Enable Slow SQL?` +
+ + Se ativado, o agente captura detalhes da consulta SQL de longa execução ao banco de dados. +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ Tipo + + Boleano +
+ Padrão + + `true` +
+ [Definir](#options) + + Configuração do lado do servidor, arquivo de configuração +
+ [Etiqueta do lado do servidor](#server-side-configuration) + + `Enable thread profiler?` +
+ + Permite agendar [sessões de criação de perfil de thread](/docs/apm/applications-menu/events/thread-profiler-dashboard). O thread profiler capturará periodicamente um instantâneo da stack de chamadas para cada thread ativo no aplicativo para construir uma árvore de chamadas estatisticamente representativa. +
+ + + + + + + + + + + + + + + + + + + + + + +
+ Tipo + + Boleano +
+ Padrão + + `false` +
+ [Definir](#options) + + Arquivo de configuração +
+ + Permite [rastreamento multiaplicativo](/docs/apm/transactions/cross-application-traces/introduction-cross-application-traces), que conecta seus aplicativos e serviços dentro de sua arquitetura orientada a serviços. +
+ + + + + + + + + + + + + + + + + + + + + + +
+ Tipo + + Boleano +
+ Padrão + + `false` +
+ [Definir](#options) + + Arquivo de configuração +
+ + Se ativado, as mensagens de exceção serão removidas do rastreamento de erros antes de serem enviadas ao [coletor](/docs/accounts-partnerships/education/getting-started-new-relic/glossary#collector), para evitar a captura inadvertida de informações confidenciais. Esta opção é habilitada automaticamente no modo de alta segurança. +
+ + + + + + + + + + + + + + + + + + + + + + +
+ Tipo + + Corda +
+ Padrão + + (nenhum) +
+ [Definir](#options) + + Arquivo de configuração +
+ + As exceções listadas na sua lista de permissões não terão suas mensagens removidas, mesmo que `strip_exception_messages.enabled` seja `true`. A lista de permissões é uma sequência de tipos de exceção separados por espaço, cada um na forma de `module:exception_name`. Liste as exceções integradas como `exception_name`; você não precisa acrescentar `module:` a eles. + + + **Example: Built-in exception and user-defined exception** + + + ```py + KeyError my_module:MyException + ``` +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ Tipo + + Float +
+ Padrão + + `0.0` +
+ [Definir](#options) + + Arquivo de configuração, variável de ambiente +
+ [Variável ambiental](#environment-variables) + + `NEW_RELIC_STARTUP_TIMEOUT` +
+ + Por padrão, o agente inicia quando recebe a primeira transação (seja web ou [não web](/docs/apm/transactions/intro-transactions/monitor-background-processes-other-non-web-transactions)). O agente então inicia em paralelo, garantindo que essa solicitação inicial não seja atrasada. Entretanto, o agente não registra os detalhes dessa solicitação inicial porque o agente não pode coletar dados até que o registro seja concluído. Esta é a configuração recomendada para a maioria dos aplicativos web para não atrasar a primeira transação enquanto o New Relic é inicializado. + + Para substituir isso, você pode definir um tempo limite de inicialização em segundos. O agente irá então pausar a transação inicial e aguardar a conclusão do registro. Isso pode ser útil quando se executa uma única tarefa ou programa, onde o processo é executado uma vez e termina imediatamente. + + + Como `startup_timeout` atrasa o início do aplicativo, recomendamos definir um tempo limite de inicialização apenas para sistemas de enfileiramento de tarefas em segundo plano, e não para aplicativos da Web. + +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ Tipo + + Float +
+ Padrão + + `2.5` +
+ [Definir](#options) + + Arquivo de configuração, variável de ambiente +
+ [Variável ambiental](#environment-variables) + + `NEW_RELIC_SHUTDOWN_TIMEOUT` +
+ + No encerramento do processo, o agente tenta fazer um upload final para o [coletor](/docs/accounts-partnerships/education/getting-started-new-relic/glossary#collector). Para evitar que o agente seja executado indefinidamente em caso de problema, o processo será encerrado normalmente se o limite `shutdown_timeout` for atingido. Esse desligamento pode resultar em perda de dados, mas o agente prioriza os principais dados métricos durante o processo de upload. + + Para sistemas de enfileiramento de tarefas em segundo plano, especialmente aqueles que executam um pequeno número de tarefas por processo, você pode querer aumentar o tempo limite de encerramento para garantir que o agente possa carregar todos os dados no encerramento do processo. + + + O padrão do agente é um tempo limite de 2,5 segundos porque o Apache e muitos outros servidores web têm um tempo limite de encerramento do processo de 3,0 segundos. O agente sai em 2,5 segundos para permitir o código de limpeza `atexit` registrado para a execução do processo. + +
+ + + + + + + + + + + + + + + + + + + + + + +
+ Tipo + + Corda +
+ Padrão + + `gzip` +
+ [Definir](#options) + + Arquivo de configuração +
+ + Se o limite de compactação de dados for atingido na carga útil, o agente compactará os dados usando a compactação gzip por padrão. A opção de configuração `compression_content_encoding` pode ser definida como `deflate` para usar compactação deflacionada. +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ Tipo + + Boleano +
+ Padrão + + verdadeiro +
+ [Definir](#options) + + Arquivo de configuração, variável de ambiente +
+ [Variável ambiental](#environment-variables) + + `NEW_RELIC_PACKAGE_REPORTING_ENABLED` +
+ + Se esta configuração estiver habilitada, ela capturará informações de pacote e versão na inicialização do agente que são exibidas na guia Ambiente APM. Em aplicativos que possuem um grande número de pacotes, ter esta configuração habilitada pode causar um pico de CPU, pois captura todas as informações do pacote e da versão. É recomendado nesses casos desabilitar esta configuração. Desabilitar esta configuração desabilitará a capacidade de detectar vulnerabilidades em pacotes desatualizados. +
+
+ +## Heroku + + + + + + + + + + + + + + + + + + + + + + + +
+ Tipo + + Boleano +
+ Padrão + + `true` +
+ Variável ambiental + + `NEW_RELIC_HEROKU_USE_DYNO_NAMES` +
+ + Se `true`, o agente usará nomes dinâmicos Heroku como nome do host. +
+ + + + + + + + + + + + + + + + + + + + + + +
+ Tipo + + Matriz +
+ Padrão + + `["scheduler", "run"]` +
+ Variável ambiental + + `NEW_RELIC_HEROKU_DYNO_NAME_PREFIXES_TO_SHORTEN` +
+ + Normalmente, o agente relata nomes dinâmicos com um ponto final e um ID de processo (por exemplo, **worker.3**). Você pode remover esses dados finais especificando os prefixos que deseja relatar sem dados finais (por exemplo, **worker**). +
+
+ +## Instrumentação integrada [#builtin-instrumentation] + +O agente Python utiliza uma variedade de pacotes/módulos Python. Essa instrumentação ocorre apenas quando o pacote/módulo Python de destino é importado por um aplicativo. + +Para desativar a instrumentação padrão, forneça uma seção especial `import-hook` correspondente ao nome do módulo que acionou a instrumentação. Em seguida, defina a configuração `enabled` como `false` para desativar a instrumentação desse módulo. + + + + Adicione o seguinte ao arquivo de configuração: + + ```ini + [import-hook:MySQLdb] + enabled = false + ``` + + \ No newline at end of file diff --git a/src/i18n/content/pt/docs/apm/agents/python-agent/python-agent-api/backgroundtask-python-agent-api.mdx b/src/i18n/content/pt/docs/apm/agents/python-agent/python-agent-api/backgroundtask-python-agent-api.mdx new file mode 100644 index 00000000000..ff87d70b855 --- /dev/null +++ b/src/i18n/content/pt/docs/apm/agents/python-agent/python-agent-api/backgroundtask-python-agent-api.mdx @@ -0,0 +1,251 @@ +--- +title: background_task (API do agente Python) +type: apiDoc +shortDescription: Usado para instrumentalizar uma tarefa em segundo plano ou outra transação fora da web de tempo de execução finito. +tags: + - Agents + - Python agent + - Python agent API +metaDescription: 'Python API: Used to instrument a background task or other non-web transaction of finite run time.' +freshnessValidatedDate: never +translationType: machine +--- + +## Sintaxe + +```py +newrelic.agent.background_task(application=None, name=None, group=None) +``` + +Usado para instrumentalizar uma tarefa em segundo plano ou outra transação fora da web de tempo de execução finito. + +## Descrição + +Este decorador Python pode ser usado para instrumentar tarefas em segundo plano ou outras [transações fora da web](/docs/apm/transactions/intro-transactions/monitor-background-processes-other-non-web-transactions) de tempo de execução finito. Isso normalmente é usado para instrumentar atividades fora da Web, como processos de trabalho, sistemas baseados em tarefas e scripts independentes. As transações marcadas como tarefas em segundo plano são exibidas como transações fora da web na interface do APM e separadas das transações da web. + + + Se uma função ainda não for um instrumento, você poderá usar [`function_trace()`](/docs/apm/agents/python-agent/python-agent-api/functiontrace-python-agent-api) para criar um trace de função para essa função em uma tarefa em segundo plano. Ou você pode usar o [arquivo de configuração](/docs/apm/agents/python-agent/custom-instrumentation/python-custom-instrumentation-config-file/#listing_functions) para funções não instrumentadas do instrumento. + + +Se uma função que usa o decorador de tarefa em segundo plano for chamada no contexto de uma transação da web, a transação da web será marcada como uma tarefa em segundo plano. A medição do tempo gasto começa quando se inicia a transação original da web. + +Se você não puder usar o decorador, um destes formatos de chamada pode ser mais útil: + +* **The context manager** + + : se as tarefas a serem monitoradas forem determinadas apenas no tempo de execução (e não no tempo de importação), você poderá usar o gerenciador de contexto `BackgroundTask` para agrupar diretamente a execução de um bloco de código. (Este é o gerenciador de contexto usado por `BackgroundTaskWrapper`.) + +* **The wrapper** + + : se você souber antecipadamente onde estão as funções específicas que deseja rastrear, poderá usar o decorador `background_task` . Mas se você não conhece todas as funções que precisam ser rastreadas (por exemplo, se elas estão sendo pesquisadas dinamicamente como parte de um sistema de roteamento), então você deve usar o `BackgroundTaskWrapper` para agrupar a função no momento da inscrição ou no momento da ligação. + +* **The path-based wrapper** + + : o formulário wrapper baseado em caminho é `wrap_background_task`. + +Para obter mais informações sobre as diferenças e os usos dessas formas de função, consulte [Formatos de chamada de variáveis](/docs/python-agent-api-different-call-forms). + +## Parâmetro + +### Parâmetro decorador e gerenciador de contexto [#main-params] + +```py +newrelic.agent.background_task(application=None, name=None, group=None) +``` + +```py +newrelic.agent.BackgroundTask(application=None, name=None, group=None) +``` + +Parâmetro para essas chamadas: + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ Parâmetro + + Descrição +
+ `application` + + _Instância do aplicativo_ + + Obrigatório. O aplicativo sob o qual os dados serão relatados. O padrão é `None`. Se ficar sem valor, o aplicativo especificado na [configuração](/docs/agents/python-agent/installation-configuration/python-agent-configuration) do agente (arquivo de configuração ou variável de ambiente) será usado. + + Para obter mais informações sobre como gerar um objeto de aplicativo, consulte o método [`application()`](/docs/agents/python-agent/python-agent-api/application) . + + O aplicativo, mesmo se especificado, ainda poderá ser substituído se `newrelic.app_name` for definido no aplicativo WSGI por dicionário de ambiente de solicitação. +
+ `name` + + _corda_ + + Obrigatório. O nome da transação. O valor padrão é `None`. Por padrão, o nome será o nome da função à qual o decorador foi aplicado, mas você pode substituir isso fornecendo este nome. +
+ `group` + + _corda_ + + Opcional. O `group` representa a estrutura de nomenclatura do parâmetro `name` . Isto é usado na interface para definir o [tipo de transação](/docs/apm/applications-menu/monitoring/transactions-page#tx_functions). + + Se não for fornecido, o grupo será padronizado como `Function` na expectativa de que o nome tenha o formato `module:class.function` ou `module:function` e represente o nome da função que está sendo executada. Se você estiver criando um grupo personalizado, recomendamos prefixá-lo com `Python/`. +
+ +### Parâmetro do wrapper: [#wrapper-params] + +```py +newrelic.agent.BackgroundTaskWrapper(wrapped, application=None, name=None, group=None) +``` + +`BackgroundTaskWrapper` usa os mesmos [parâmetros](#main-params) do decorador `background_task` e este parâmetro `wrapped` adicional: + + + + + + + + + + + + + + + + + +
+ Parâmetro + + Descrição +
+ `wrapped` + + _método_ + + Obrigatório. O método a ser rastreado. +
+ +### Parâmetro baseado em caminho: [#path-based-params] + +```py +newrelic.agent.wrap_background_task(module, object_path, application=None, name=None, group=None) +``` + +`wrap_background_task` leva o mesmo [parâmetro](#main-params) do decorador `background_task` mais estes parâmetros adicionais: + + + + + + + + + + + + + + + + + + + + + + + +
+ Parâmetro + + Descrição +
+ `module` + + _módulo_ ou _string_ + + Obrigatório. O módulo que contém a função/atividade não web que você é instrumento. +
+ `object_path` + + _corda_ + + Obrigatório. O caminho para o módulo. +
+ +## Exemplos + +### `background_task` exemplo de decorador [#bg_task_example] + +Aqui está um exemplo de uso do decorador `background_task` : + +```py +@newrelic.agent.background_task() +def task(): + ... +``` + +### `BackgroundTask` exemplo de gerenciador de contexto [#context-mgr-example] + +Um exemplo de uso de `BackgroundTask`: + +```py +application = newrelic.agent.application() +name = newrelic.agent.callable_name(task) + +with BackgroundTask(application, name): + task() +``` + +Aqui está outro exemplo com mais parâmetros: + +```py +application = newrelic.agent.register_application(timeout=10.0) + +def execute_task(task_name): + with newrelic.agent.BackgroundTask(application, name=task_name, group='Task'): + ... +``` + +### `BackgroundTaskWrapper` exemplo [#wrapper-example] + +Um exemplo de uso do `BackgroundTaskWrapper`: + +```py +task = newrelic.agent.BackgroundTaskWrapper(get_next_task()) +result = task(*args, **kwargs) +``` + +Neste exemplo, se esta chamada foi realizada em uma transação da web sendo monitorada por um agente, a chamada reclassificará a transação da web como uma tarefa em segundo plano. Se, no entanto, a chamada fosse feita em um thread ou corrotina em segundo plano, ela iniciaria a gravação de uma nova transação de tarefa em segundo plano que rastreia o que ocorre até que a chamada retorne. + +## Resolução de problemas + +Se a transação da tarefa em segundo plano não estiver aparecendo na interface do usuário, isso pode ocorrer porque a transação criada pela tarefa em segundo plano nunca foi encerrada ou a tarefa foi executada por muito tempo. Se uma tarefa em segundo plano for executada por mais de 20 minutos, ela será descartada pelo servidor porque foi considerada muito antiga para ser mantida. As tarefas em segundo plano não devem ser executadas por mais de 20 minutos e, se isso acontecer, devem ser divididas em várias tarefas em segundo plano. \ No newline at end of file diff --git a/src/i18n/content/pt/docs/apm/new-relic-apm/apdex/apdex-measure-user-satisfaction.mdx b/src/i18n/content/pt/docs/apm/new-relic-apm/apdex/apdex-measure-user-satisfaction.mdx new file mode 100644 index 00000000000..1138d514aa6 --- /dev/null +++ b/src/i18n/content/pt/docs/apm/new-relic-apm/apdex/apdex-measure-user-satisfaction.mdx @@ -0,0 +1,315 @@ +--- +title: 'Apdex: Meça a satisfação do usuário' +tags: + - APM + - Apdex +metaDescription: 'New Relic uses Apdex to measure whether users are satisfied, tolerating, or dissatisfied with your app''s response time.' +freshnessValidatedDate: never +translationType: machine +--- + +[Apdex](https://www.apdex.org/) é um padrão da indústria para medir a satisfação do usuário com o tempo de resposta de aplicativos e serviços web. É uma solução simplificada de Acordo de Nível de Serviço (SLA) que ajuda você a ver o quão satisfeito o usuário está com seu aplicativo por meio de métricas como pontuação Apdex e percentual de insatisfação, em vez de métricas tradicionais facilmente distorcidas, como tempo médio de resposta. + +Definir um limite útil para seus níveis de Apdex ajuda você a: + +* Veja rapidamente a satisfação geral do seu usuário final com seu aplicativo. +* Obtenha a quantidade certa de rastreamento para solucionar problemas e melhorar o desempenho do aplicativo. + +Pronto para começar? Cadastre-se para obter uma conta, caso ainda não o tenha feito, e clique em um logotipo para instalar um agente APM e começar a medir a satisfação do usuário. Leva apenas alguns minutos! + + + + + + + + + + + + + + + + + + + +Para saber mais, assista a este pequeno vídeo no YouTube (aprox. 3:50 minutos). + +
To install an integration from a tarball: 1. Download the packaged integration file from the [tarball repository](https://download.newrelic.com/infrastructure_agent/binaries/linux/amd64/). - 2. Unpack the tarball file according to our [integration file structure and placement rules](/docs/integrations/integrations-sdk/getting-started/integration-file-structure-activation), so the agent is able to find the definitions, configurations, and executables of the integration. + + 2. Unpack the tarball file according to our [integration file structure and placement rules](/docs/integrations/integrations-sdk/getting-started/integration-file-structure-activation) so the agent can find the definitions, configurations, and executables of the integration. + 3. Place the binary that contains the definition file inside `newrelic-integrations` or `custom-integrations` in the [agent directory](/docs/infrastructure/install-configure-manage-infrastructure/linux-installation/tarball-manual-install-infrastructure-linux#agent-directory). - 4. Place the integration's config file under the [plugin directory](/docs/infrastructure/install-configure-manage-infrastructure/linux-installation/tarball-manual-install-infrastructure-linux#configure-plugin). - 5. Follow the JMX tool instructions below. - ### Use of the New Relic JMX tool [#nrjmx] + 4. Place the integration's config file under the [plugin directory](/docs/infrastructure/install-configure-manage-infrastructure/linux-installation/tarball-manual-install-infrastructure-linux#configure-plugin). -Download the JMX tool from [our repository](https://download.newrelic.com/infrastructure_agent/binaries/linux/noarch/) and unpack it. + 5. Download the JMX tool from [our repository](https://download.newrelic.com/infrastructure_agent/binaries/linux/noarch/) and unpack it. Some notes on compatibility: - - `nrjmx` requires Java 8 or higher. - + * For JMX integration version 2.3.3 or higher and Cassandra integration version 2.3.0 or higher, the `nrjmx` tool is included as a dependency. For this reason, when using a package manager, the `nrjmx` tool doesn't have to be installed manually. -For JMX integration version 2.3.3 or higher and Cassandra integration version 2.3.0 or higher, the `nrjmx` tool is included as a dependency. For this reason, when using a package manager, the `nrjmx` tool doesn't have to be installed manually. + * `nrjmx` requires Java 8 or higher. -If you have `nrjmx` already installed and install `nri-jmx`, our JMX tool keeps the already-installed version. If you don't have `nrjmx` already installed, it gets the latest `nrjmx` release. + * If you have `nrjmx` already installed and install `nri-jmx`, our JMX tool keeps the already-installed version. If you don't have `nrjmx` already installed, it gets the latest `nrjmx` release. -By default, the `nrjmx` location is `/usr/bin/nrjmx/*`. To install in a different location, set the new path in the `NR_JMX_TOOL` environment variable. \ No newline at end of file + * By default, the `nrjmx` location is `/usr/bin/nrjmx/*`. To install in a different location, set the new path in the `NR_JMX_TOOL` environment variable. + \ No newline at end of file diff --git a/src/install/haproxy/linux/install-yum.mdx b/src/install/haproxy/linux/install-yum.mdx index 3d965b78d0d..60095bb3f59 100644 --- a/src/install/haproxy/linux/install-yum.mdx +++ b/src/install/haproxy/linux/install-yum.mdx @@ -3,14 +3,12 @@ componentType: default headingText: Download using Yum --- -1. From the command line, run these commands: +1. In your terminal, run these commands: ```shell sudo yum -q makecache -y --disablerepo='*' --enablerepo='newrelic-infra' ``` -2. Run the following command: - ```shell sudo yum install nri-haproxy ``` \ No newline at end of file diff --git a/src/install/haproxy/linux/install-zypper.mdx b/src/install/haproxy/linux/install-zypper.mdx index 45d052fa0a9..88e6cbd3601 100644 --- a/src/install/haproxy/linux/install-zypper.mdx +++ b/src/install/haproxy/linux/install-zypper.mdx @@ -3,14 +3,12 @@ componentType: default headingText: Download using Zypper --- -1. From the command line, run these commands: +1. In your terminal, run these commands: ```shell sudo zypper -n ref -r newrelic-infra ``` -2. Run the following command: - ```shell sudo zypper -n install nri-haproxy ``` \ No newline at end of file diff --git a/src/install/haproxy/windows/install-msi.mdx b/src/install/haproxy/windows/install-msi.mdx index b0fe147a684..7007df4b0b8 100644 --- a/src/install/haproxy/windows/install-msi.mdx +++ b/src/install/haproxy/windows/install-msi.mdx @@ -3,7 +3,7 @@ componentType: default headingText: Download using MSI --- -1. Download the latest .MSI installer image for the desired integration [from our repository](https://download.newrelic.com/infrastructure_agent/windows/integrations/). +1. Download the latest .MSI installer image for the integration [from our repository](https://download.newrelic.com/infrastructure_agent/windows/integrations/). 2. In an admin account, run the install script using an absolute path. ``` msiexec.exe /qn /i PATH\TO\nri-haproxy.msi From 1621068f4cbccee9b6faf35b930241121bca5e96 Mon Sep 17 00:00:00 2001 From: Michal Nowacki Date: Mon, 18 Mar 2024 11:15:37 -0400 Subject: [PATCH 116/124] added more details to bug fixes descriptions --- .../php-release-notes/php-agent-10-19-0-9.mdx | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/content/docs/release-notes/agent-release-notes/php-release-notes/php-agent-10-19-0-9.mdx b/src/content/docs/release-notes/agent-release-notes/php-release-notes/php-agent-10-19-0-9.mdx index 34ac8977ac8..6ff6963ac00 100644 --- a/src/content/docs/release-notes/agent-release-notes/php-release-notes/php-agent-10-19-0-9.mdx +++ b/src/content/docs/release-notes/agent-release-notes/php-release-notes/php-agent-10-19-0-9.mdx @@ -16,8 +16,8 @@ security: [] ### Bug fixes * Fixes a bug where the agent would not properly automatically detect the Magento 2 framework -* Fixes error prioritization by adding support for E_RECOVERABLE_ERROR, E_DEPRECATED, E_USER_DEPRECATED error types -* Fixes error recording for PHPs 8.0+ +* Fixes error categorization and prioritization by adding support for `E_RECOVERABLE_ERROR`, `E_DEPRECATED`, `E_USER_DEPRECATED` error types. `E_RECOVERABLE_ERROR`, `E_DEPRECATED`, `E_USER_DEPRECATED` are no longer recorded as `Error`. +* Fixes error recording for PHPs 8.0+: `user_error_handler` is honored, and the agent will not record an error if `user_error_handler` handled the error. ### Important end-of-life information From 154f544e96e14b0ba679aa79fa1cd155660e32e7 Mon Sep 17 00:00:00 2001 From: Sammie downing <48104650+homelessbirds@users.noreply.github.com> Date: Mon, 18 Mar 2024 09:28:53 -0700 Subject: [PATCH 117/124] Update src/content/whats-new/2024/03/whats-new-03-18-lambdacommunityplus.md Co-authored-by: Rob Siebens --- .../whats-new/2024/03/whats-new-03-18-lambdacommunityplus.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/content/whats-new/2024/03/whats-new-03-18-lambdacommunityplus.md b/src/content/whats-new/2024/03/whats-new-03-18-lambdacommunityplus.md index 5e33d7c9101..9fa81dfc872 100644 --- a/src/content/whats-new/2024/03/whats-new-03-18-lambdacommunityplus.md +++ b/src/content/whats-new/2024/03/whats-new-03-18-lambdacommunityplus.md @@ -14,7 +14,7 @@ Let’s dive into what this entails for you: * **Active maintainers:** A dedicated team of engineers within New Relic maintains this project, ensures the extension's stability and continuous improvement. * **Open development:** The code is on GitHub, welcoming your contributions through issues and pull requests. -* **Community support:** The New Relic Explorers Hub, a vibrant community forum, is your one-stop shop for troubleshooting with fellow users and enthusiasts. If you are +* **Community support:** The New Relic Explorers Hub, a vibrant community forum, is your one-stop shop for troubleshooting with fellow users and enthusiasts. * **Comprehensive documentation:** Everything you need to get started and leverage the extension's full potential is readily available in the project repository itself. From 5bcf9faaf8710cdbc287816fd41b8e77058a593e Mon Sep 17 00:00:00 2001 From: Sammie downing <48104650+homelessbirds@users.noreply.github.com> Date: Mon, 18 Mar 2024 09:28:58 -0700 Subject: [PATCH 118/124] Update src/content/whats-new/2024/03/whats-new-03-18-lambdacommunityplus.md Co-authored-by: Rob Siebens --- .../whats-new/2024/03/whats-new-03-18-lambdacommunityplus.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/content/whats-new/2024/03/whats-new-03-18-lambdacommunityplus.md b/src/content/whats-new/2024/03/whats-new-03-18-lambdacommunityplus.md index 9fa81dfc872..c653b6b53fc 100644 --- a/src/content/whats-new/2024/03/whats-new-03-18-lambdacommunityplus.md +++ b/src/content/whats-new/2024/03/whats-new-03-18-lambdacommunityplus.md @@ -12,7 +12,7 @@ Did you know that the New Relic AWS Lambda extension follows a “Community plus Let’s dive into what this entails for you: -* **Active maintainers:** A dedicated team of engineers within New Relic maintains this project, ensures the extension's stability and continuous improvement. +* **Active maintainers:** A dedicated team of engineers within New Relic maintains this project, ensures the extension's stability, and provides continuous improvement. * **Open development:** The code is on GitHub, welcoming your contributions through issues and pull requests. * **Community support:** The New Relic Explorers Hub, a vibrant community forum, is your one-stop shop for troubleshooting with fellow users and enthusiasts. * **Comprehensive documentation:** Everything you need to get started and leverage the extension's full potential is readily available in the project repository itself. From 9acda5e46474681bcfc837458aefb1c470d872da Mon Sep 17 00:00:00 2001 From: bhecknr <114170582+bhecknr@users.noreply.github.com> Date: Mon, 18 Mar 2024 10:37:29 -0600 Subject: [PATCH 119/124] Update product-capability-feature-usage.mdx Made a couple of style corrections to "monitoring" and "observability" entries. --- .../capitalization/product-capability-feature-usage.mdx | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/content/docs/style-guide/capitalization/product-capability-feature-usage.mdx b/src/content/docs/style-guide/capitalization/product-capability-feature-usage.mdx index 3821ea4c2a5..5dc260c44ce 100644 --- a/src/content/docs/style-guide/capitalization/product-capability-feature-usage.mdx +++ b/src/content/docs/style-guide/capitalization/product-capability-feature-usage.mdx @@ -1051,7 +1051,7 @@ Notes about features and capabilities: - Use monitoring when you're describing specific capabilities and the data from those capabilities. (for more information, see [Usage dictionary: Observability vs. monitoring](/docs/style-guide/word-choice/usage-dictionary/#observability-monitoring)) + Use monitoring when you're describing specific capabilities and the data from those capabilities. (For more information, see [Usage dictionary: Observability vs. monitoring](/docs/style-guide/word-choice/usage-dictionary/#observability-monitoring).) @@ -1089,7 +1089,7 @@ Notes about features and capabilities: - In general, use observability to describe the New Relic platform and the health of a system holistically based on different types of data. Observability is using the outputs of a system, including different types of data, to understand its health, enabling engineers to gain insights and diagnose issues effectively. (for more information, see [Usage dictionary: Observability vs. monitoring](/docs/style-guide/word-choice/usage-dictionary/#observability-monitoring)) + In general, use observability to describe the New Relic platform and the health of a system holistically based on different types of data. Observability is using the outputs of a system, including different types of data, to understand its health, enabling engineers to gain insights and diagnose issues effectively. (For more information, see [Usage dictionary: Observability vs. monitoring](/docs/style-guide/word-choice/usage-dictionary/#observability-monitoring).) From 7049126942a21aa7564046f007e68838004a27d4 Mon Sep 17 00:00:00 2001 From: Dkairu <40675135+Dkairu@users.noreply.github.com> Date: Mon, 18 Mar 2024 12:44:34 -0400 Subject: [PATCH 120/124] Update nerdgraph-api-notifications-channels.mdx Missed to add the pagination cursor --- .../nerdgraph/examples/nerdgraph-api-notifications-channels.mdx | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/content/docs/apis/nerdgraph/examples/nerdgraph-api-notifications-channels.mdx b/src/content/docs/apis/nerdgraph/examples/nerdgraph-api-notifications-channels.mdx index e753035df69..d668449a470 100644 --- a/src/content/docs/apis/nerdgraph/examples/nerdgraph-api-notifications-channels.mdx +++ b/src/content/docs/apis/nerdgraph/examples/nerdgraph-api-notifications-channels.mdx @@ -119,7 +119,7 @@ The `channels` query allows you to paginate through all of your channels per acc actor { account(id: YOUR_ACCOUNT_ID) { aiNotifications { - channels(cursor: "") { + channels(cursor: "/8o0y2qiR54m6thkdgHgwg==:jZTXDFKbTkhKwvMx+CtsPVM=") { nextCursor entities { id From 26cc085733a721a1b1bc5b48cf6a125c39457f77 Mon Sep 17 00:00:00 2001 From: svc-docs-eng-opensource-bot Date: Mon, 18 Mar 2024 16:58:59 +0000 Subject: [PATCH 121/124] chore(whats-new-ids): updated ids --- src/data/whats-new-ids.json | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/src/data/whats-new-ids.json b/src/data/whats-new-ids.json index 57210c71c66..70f5975520d 100644 --- a/src/data/whats-new-ids.json +++ b/src/data/whats-new-ids.json @@ -312,5 +312,6 @@ "/whats-new/2024/02/whats-new-02-21-live-archives": "42965", "/whats-new/2024/02/whats-new-02-27-hardware-sentry-integration": "42966", "/whats-new/2024/02/whats-new-02-28-compute-add-on-sku": "42967", - "/whats-new/2024/03/whats-new-03-11-errorsinbox": "42968" + "/whats-new/2024/03/whats-new-03-11-errorsinbox": "42968", + "/whats-new/2024/03/whats-new-03-18-lambdacommunityplus": "42969" } \ No newline at end of file From 72ec3f704a5d56b29e39d3a8a37a5283ca63de02 Mon Sep 17 00:00:00 2001 From: bhecknr <114170582+bhecknr@users.noreply.github.com> Date: Mon, 18 Mar 2024 11:04:50 -0600 Subject: [PATCH 122/124] Update usage-dictionary.mdx Added cross reference for "monitoring" and "observability" from "Usage dictionary" page to "Product and capabilities" page. --- src/content/docs/style-guide/word-choice/usage-dictionary.mdx | 3 +++ 1 file changed, 3 insertions(+) diff --git a/src/content/docs/style-guide/word-choice/usage-dictionary.mdx b/src/content/docs/style-guide/word-choice/usage-dictionary.mdx index 25107e94c06..c936793bd69 100644 --- a/src/content/docs/style-guide/word-choice/usage-dictionary.mdx +++ b/src/content/docs/style-guide/word-choice/usage-dictionary.mdx @@ -804,6 +804,9 @@ This is a guideline, not a rule. The most important thing is that you use these +For more information about monitoring, see [Product and capabilities: monitoring](/docs/style-guide/capitalization/product-capability-feature-usage/#monitoring). +For more information about observability, see [Product and cabilities: observability](/docs/style-guide/capitalization/product-capability-feature-usage/#observability). + Date: Mon, 18 Mar 2024 10:05:19 -0700 Subject: [PATCH 123/124] Update live-archives.mdx --- src/content/docs/logs/get-started/live-archives.mdx | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/src/content/docs/logs/get-started/live-archives.mdx b/src/content/docs/logs/get-started/live-archives.mdx index 34cb0fbd2d3..5cea9558d2a 100644 --- a/src/content/docs/logs/get-started/live-archives.mdx +++ b/src/content/docs/logs/get-started/live-archives.mdx @@ -122,7 +122,7 @@ You can also edit an existing partition clicking the Date: Mon, 18 Mar 2024 11:53:59 -0700 Subject: [PATCH 124/124] feat(Docs): Added first Docs release note (experiment) v3-15-2024 * feat(Docs): Laying the groundwork for docs release notes * feat(Docs): Docs release notes * style(docs release notes): Copyedit 3-15-2024 note * chore(release notes): Clarify install doc change * feat(Docs): Added experimentation callout --------- Co-authored-by: Austin Schaefer <55203603+austin-schaefer@users.noreply.github.com> --- .../docs-release-notes/docs-3-15-2024.mdx | 62 +++++++++++++++++++ .../docs-release-notes/index.mdx | 3 + src/content/docs/release-notes/index.mdx | 6 ++ 3 files changed, 71 insertions(+) create mode 100644 src/content/docs/release-notes/docs-release-notes/docs-3-15-2024.mdx create mode 100644 src/content/docs/release-notes/docs-release-notes/index.mdx diff --git a/src/content/docs/release-notes/docs-release-notes/docs-3-15-2024.mdx b/src/content/docs/release-notes/docs-release-notes/docs-3-15-2024.mdx new file mode 100644 index 00000000000..8960a65bef1 --- /dev/null +++ b/src/content/docs/release-notes/docs-release-notes/docs-3-15-2024.mdx @@ -0,0 +1,62 @@ +--- +subject: Docs +releaseDate: '2024-03-15' +version: '3-15-2024' +--- + + +We're trying out release notes to let you know what's changing in our docs each week. This is an experiment, so [let us know via GitHub issue](https://github.com/newrelic/docs-website/issues/new/choose) if you find them helpful! + + +### New docs + +* Published a new doc for the [AWS Storage Gateway Metrics integration](/docs/infrastructure/amazon-integrations/aws-integrations-list/aws-storage-gateway). + +### Release notes and What's new posts + +* Added a "What's new?" post for [Analyze errors and rootcause faster with errors inbox enhancements for OpenTelemetry](/whats-new/2024/03/whats-new-03-11-errorsinbox/). +* Added a release note for [Node API runtime version 1.2.54](/docs/release-notes/synthetics-release-notes/node-api-runtime-release-notes/node-api-runtime-1.2.54/). +* Added a release note for [Kubernetes integration version 3.27.0](/docs/release-notes/infrastructure-release-notes/kubernetes-integration-release-notes/kubernetes-integration-3-27-0/) . +* Added a release note for [Node.js agent version 11.12.0](/docs/release-notes/agent-release-notes/nodejs-release-notes/node-agent-11-12-0/). +* Added a release note for [Python agent version 9.7.1](/docs/release-notes/agent-release-notes/python-release-notes/python-agent-90701/). +* Added a release note for [Node.js agent version 11.13.0](/docs/release-notes/agent-release-notes/nodejs-release-notes/node-agent-11-13-0/). +* Added a release note for [Browser agent 1.253.0](/docs/release-notes/new-relic-browser-release-notes/browser-agent-release-notes/browser-agent-v1.253.0/). + +### Major changes + +* Cleaned up and simplifed the left nav across our NRQL docs. +* Reviewed and rewrote on-host integration docs for [MongoDB](/install/mongodb/), [MySQL](/install/mysql/), and [PostgreSQL](/install/postgresql/) to make it easier to install and ensure the docs are accurate and up to date. +* Added tab and step components to our OpenTelemetry [Java tutorial](/docs/more-integrations/open-source-telemetry-integrations/opentelemetry/get-started/opentelemetry-tutorial-java/) and [Python tutorial](/docs/more-integrations/open-source-telemetry-integrations/opentelemetry/get-started/opentelemetry-tutorial-python/) docs to clarify different instrumentation paths. +* Added missing dimensional metrics to [AWS integrations metrics](/docs/infrastructure/amazon-integrations/get-started/aws-integrations-metrics). +* Improved styling of various docs site components: + * Updated colors to improve readability and consistency with the product. + * Removed "Go to product" component from left nav. + * Removed hexagon background color from our docs logo. + * Added right-nav feedback form to our interactive installation docs. + * Removed sign-up banners from various docs. + * Increased popover text size. + + +### Smaller updates + +* Added info about how to show surrounding logs in CodeStream [Log search](/docs/codestream/observability/log-search). +* Removed CodeStream support for Visual Studio 2019 [Install CodeStream and sign up](/docs/codestream/start-here/install-codestream). +* Updated SUSE Linux Enterprise Server (SLES) infrastructure agent version support in [Requirements for the infrastructure agent](/docs/infrastructure/install-infrastructure-agent/get-started/requirements-infrastructure-agent/). +* Updated APM PHP agent compatibility requirements [PHP agent compatibility and requirements](/docs/apm/agents/php-agent/getting-started/php-agent-compatibility-requirements). +* Deleted section listing the metrics not available via CloudWatch metric streams [Introduction to the Amazon CloudWatch Metric Streams integration](/docs/infrastructure/amazon-integrations/connect/aws-metric-stream). +* Updated [`interactionDuration`](/attribute-dictionary/?attributeSearch=interactionduration) definition in our data dictionary. +* Updated Java agent API with placeholder text in [Instrument browser monitoring with Java agent API](/docs/apm/agents/java-agent/instrumentation/instrument-browser-monitoring-java-agent-api). +* Added infrastructure agent endpoints for AWS Privatelink and moved an "Important" callout to a more relevant place in [Send New Relic data via AWS PrivateLink](/docs/data-apis/custom-data/aws-privatelink). +* Added a troubleshooting example showing how to test a single integration file with debug logs in [Run on-host integrations manually (dry-run)](/docs/infrastructure/host-integrations/troubleshooting/run-integrations-manually). +* Changed button types in several of our APM agent docs. +* Added `executionDuration` definition to our data dictionary [executionDuration](/attribute-dictionary/?attributeSearch=executionduration) +* Updated supported Fluent Bit version to 2.2.2 [Forward your logs using the infrastructure agent](/docs/logs/forward-logs/forward-your-logs-using-infrastructure-agent) +* Added "Important" callout about what you need to do if you're using GCP with New Relic for the first time [Connect Google Cloud Platform services to New Relic](/docs/infrastructure/google-cloud-platform-integrations/get-started/connect-google-cloud-platform-services-new-relic/) +* Updated APM Python agent `event_harvest_config.harvest_limits.custom_event_data` default to `3600` [Python agent configuration](/docs/apm/agents/python-agent/configuration/python-agent-configuration/#harvest-limits-custom-event-data). +* Added troubleshooting section related to Python agent API background task runtime limits [background_task (Python agent API)](/docs/apm/agents/python-agent/python-agent-api/backgroundtask-python-agent-api). +* Clarified that you can't use JSON or numeric outputs with ServiceNow and workflows in [Workflows](/docs/alerts-applied-intelligence/applied-intelligence/incident-workflows/incident-workflows). +* Removed callout related to web vitals in [Monitor your core web vitals](/docs/tutorial-improve-site-performance/guide-to-monitoring-core-web-vitals). +* Updated language around node modules and synthetics monitoring in [Containerized private minion (CPM) configuration](/docs/synthetics/synthetic-monitoring/private-locations/containerized-private-minion-cpm-configuration/). +* Added section about the infrastructure agent and the temp directory used for persistently storing SDK synchronization in [Infrastructure agent configuration settings](/docs/infrastructure/install-infrastructure-agent/configuration/infrastructure-agent-configuration-settings/) +* Added a NRQL query to find codelenses with code-level metrics and added new "Coverage" section in [Code-level metrics](/docs/codestream/observability/code-level-metrics). +* Assorted minor copyedits for clarity and improved consistency with our style guide. \ No newline at end of file diff --git a/src/content/docs/release-notes/docs-release-notes/index.mdx b/src/content/docs/release-notes/docs-release-notes/index.mdx new file mode 100644 index 00000000000..fb2211035a3 --- /dev/null +++ b/src/content/docs/release-notes/docs-release-notes/index.mdx @@ -0,0 +1,3 @@ +--- +subject: Docs +--- diff --git a/src/content/docs/release-notes/index.mdx b/src/content/docs/release-notes/index.mdx index 1b973205a03..96b97515542 100644 --- a/src/content/docs/release-notes/index.mdx +++ b/src/content/docs/release-notes/index.mdx @@ -43,6 +43,12 @@ To take full advantage of New Relic's latest features, enhancements, and importa to="/docs/release-notes/diagnostics-release-notes/diagnostics-cli-release-notes" /> + +