diff --git a/.github/workflows/webdriver.yml b/.github/workflows/webdriver.yml new file mode 100644 index 00000000000..c737ab7a336 --- /dev/null +++ b/.github/workflows/webdriver.yml @@ -0,0 +1,45 @@ +name: validate javascript functionality + +on: + pull_request: + branches: + - main + +env: + NODE_OPTIONS: '--max-old-space-size=4096' + CHOKIDAR_USEPOLLING: 1 + GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} + WEBDRIVER_ENV: main + +jobs: + test: + name: webdriver test + runs-on: ubuntu-latest + steps: + - name: Checkout repository + uses: actions/checkout@v3 + + - name: Setup Node.js + uses: actions/setup-node@v3 + with: + node-version: 16 + + - name: Cache dependencies + id: yarn-cache + uses: actions/cache@v3 + with: + path: '**/node_modules' + key: ${{ runner.os }}-node-modules-${{ hashFiles('**/yarn.lock') }} + + - name: Install dependencies + if: steps.yarn-cache.outputs.cache-hit != 'true' + run: yarn install --frozen-lockfile + + - uses: browser-actions/setup-chrome@latest + - run: chrome --version + + - name: run webdriver on desktop + run: yarn webdriver-desktop + + - name: run webdriver on mobile + run: yarn webdriver-mobile diff --git a/package.json b/package.json index 15ba65bd2b7..b8d1d650e1f 100644 --- a/package.json +++ b/package.json @@ -91,6 +91,7 @@ "@typescript-eslint/parser": "^5.10.0", "add": "^2.0.6", "adm-zip": "^0.5.1", + "assert": "^2.0.0", "aws-sdk": "^2.827.0", "babel-jest": "~27.4.6", "babel-preset-gatsby": "^1.3.0", @@ -138,6 +139,7 @@ "remark-parse": "8.0.3", "remark-parse10": "npm:remark-parse@^10.0.1", "remark-stringify": "^8.1.1", + "selenium-webdriver": "^4.12.0", "simple-git": "^3.16.0", "source-map-loader": "^3.0.1", "sync-fetch": "^0.3.0", @@ -157,6 +159,7 @@ "vfile": "^4.2.0", "vfile-glob": "^1.0.0", "vfile-reporter": "^6.0.1", + "webdriver-manager": "^12.1.9", "yaml-loader": "^0.6.0", "yarn": "^1.22.10" }, @@ -213,7 +216,9 @@ "update-attribute-dictionary-json": "node scripts/actions/update-attribute-dictionary-json.mjs", "validate-datasources": "node scripts/actions/check-datasource-ids.js", "verify-install-page": "node scripts/verifyInstallPage.js", - "verify-mdx": "node scripts/verify_mdx.js" + "verify-mdx": "node scripts/verify_mdx.js", + "webdriver-desktop": "node scripts/actions/webdriver-desktop.mjs", + "webdriver-mobile": "node scripts/actions/webdriver-mobile.mjs" }, "repository": { "type": "git", diff --git a/scripts/actions/webdriver-desktop.mjs b/scripts/actions/webdriver-desktop.mjs new file mode 100644 index 00000000000..57aaff80161 --- /dev/null +++ b/scripts/actions/webdriver-desktop.mjs @@ -0,0 +1,131 @@ +/* eslint-disable no-console */ + +/* this script is mostly mirrored in our scripted web browser + * synthetics check that runs on the production site. + * if you make updates, be sure to add them there as well. + * https://staging.onenr.io/037jbB4Akjy + */ + +import assert from 'assert'; +import { Builder, By, WebElement, until } from 'selenium-webdriver'; +import { Options } from 'selenium-webdriver/chrome.js'; + +const options = new Options(); +// options required for github action to run chromedriver properly +options.addArguments('no-sandbox'); +options.addArguments('disable-dev-shm-usage'); +options.addArguments('headless'); + +const TIMEOUT = 10000; + +const waitForXPath = (xpath, timeout = TIMEOUT) => + driver.wait(until.elementsLocated(By.xpath(xpath)), timeout); + +const main = async () => { + // running on develop builds because the url is static + // github workflow triggers on PRs to main + const testUrl = + process.env.WEBDRIVER_ENV === 'main' + ? 'https://docswebsitedevelop.gatsbyjs.io/' + : 'http://localhost:8000/'; + + await driver.get(testUrl + 'docs/mdx-test-page/'); + + // order here matters — some tests scroll the page + await collapserTest(); + await searchTest(); + await navTest(); + + await driver.get(testUrl); + await tileTest(); + + // this step isn't necessary in synthetics + await driver.quit(); +}; + +const collapserTest = async () => { + const [firstCollapser, secondCollapser] = await waitForXPath( + '//h5[contains(@id, "collapser")]/ancestor::button' + ); + const { y: initialTop } = await secondCollapser.getRect(); + console.log('clicking first collapser'); + await firstCollapser.click(); + const { y: afterTop } = await secondCollapser.getRect(); + assert.notEqual( + initialTop, + afterTop, + 'clicking the first collapser did not change the position of the second collapser' + ); +}; + +const navTest = async () => { + const releaseNotesXPath = '//div[@data-flip-id="Release notes"]'; + const nextNodeXPath = `${releaseNotesXPath}/following-sibling::div[1]`; + const [releaseNotes] = await waitForXPath(releaseNotesXPath); + const [initialNextNode] = await waitForXPath(nextNodeXPath); + await driver.executeScript('arguments[0].scrollIntoView()', releaseNotes); + console.log('clicking Release Notes div'); + await releaseNotes.click(); + const [afterNextNode] = await waitForXPath(nextNodeXPath); + assert.notEqual( + initialNextNode, + afterNextNode, + 'clicking Release Notes in the nav did not expand the Release Notes section' + ); +}; + +const searchTest = async () => { + const [searchInput] = await waitForXPath('//aside//input'); + console.log('clicking search input'); + await searchInput.click(); + const activeEl = await driver.executeScript('return document.activeElement'); + assert( + WebElement.equals(activeEl, searchInput), + 'clicking search input did not focus the page on the search input' + ); +}; + +const tileTest = async () => { + const initialUrl = await driver.getCurrentUrl(); + const [defaultViewTab] = await waitForXPath( + '//main//button[text()="Default view"]' + ); + console.log('clicking Default view tab button'); + await defaultViewTab.click(); + + // Added this xpath for the scroll function. + // for some reason, when running in headless mode the site + // header overlaps the tile we need to click + const [popularDocsSection] = await waitForXPath( + '//main//section//h3[text()="Popular docs"]' + ); + const [firstDocTile] = await waitForXPath( + '//main//section//h3[text()="Popular docs"]/following::a' + ); + // sometimes the cookie banner covers the doc tile so we need to scroll + await driver.executeScript( + 'arguments[0].scrollIntoView()', + popularDocsSection + ); + await firstDocTile.click(); + await driver.wait( + until.stalenessOf(firstDocTile), + TIMEOUT, + 'timed out waiting to navigate away from homepage' + ); + // we can't check if the url equals the link href because of redirects, + // so we just have to make sure the URL has changed at all + const afterUrl = await driver.getCurrentUrl(); + assert.notEqual( + initialUrl, + afterUrl, + `clicking homepage doc tile did not navigate as expected, URL did not change after clicking link` + ); +}; + +const driver = await new Builder() + .forBrowser('chrome') + .setChromeOptions(options) + .build(); + +main(); diff --git a/scripts/actions/webdriver-mobile.mjs b/scripts/actions/webdriver-mobile.mjs new file mode 100644 index 00000000000..580c9fae6a4 --- /dev/null +++ b/scripts/actions/webdriver-mobile.mjs @@ -0,0 +1,143 @@ +/* eslint-disable no-console */ + +/* this script is mostly mirrored in our scripted web browser + * synthetics check that runs on the production site. + * if you make updates, be sure to add them there as well. + * https://staging.onenr.io/0BoQDyBkDwy + */ + +import assert from 'assert'; +import { Builder, By, until } from 'selenium-webdriver'; +import { Options } from 'selenium-webdriver/chrome.js'; + +const options = new Options().setMobileEmulation({ + // uses mobile device names from chrome dev tools + deviceName: 'iPhone 12 Pro', +}); +// options required for github action to run chromedriver properly +options.addArguments('no-sandbox'); +options.addArguments('disable-dev-shm-usage'); +options.addArguments('headless'); + +const TIMEOUT = 10000; + +const waitForXPath = (xpath, timeout = TIMEOUT) => + driver.wait(until.elementsLocated(By.xpath(xpath)), timeout); + +const main = async () => { + // running on develop builds because the url is static + // github workflow triggers on PRs to main + const testUrl = + process.env.WEBDRIVER_ENV === 'main' + ? 'https://docswebsitedevelop.gatsbyjs.io/' + : 'http://localhost:8000/'; + + await driver.get(testUrl + 'docs/mdx-test-page/'); + + // order here matters — some tests scroll the page + // `searchTest` opens the search modal, any tests on the same page + // that come afterwards would have to close the modal + await collapserTest(); + await searchTest(); + + // there's no way to switch the homepage view on mobile with the UI so this is a bit of a hack + // in synthetics, this step is being done within the tileTest, + // but it's not registering in time here + await driver.executeScript( + "localStorage.setItem('docs-website/homepage-selected-view', 'default-view')" + ); + + await driver.get(testUrl); + await tileTest(); + await navTest(); + + // this step isn't necessary in synthetics + await driver.quit(); +}; + +const collapserTest = async () => { + const [firstCollapser, secondCollapser] = await waitForXPath( + '//h5[contains(@id, "collapser")]/ancestor::button' + ); + const { y: initialTop } = await secondCollapser.getRect(); + console.log('clicking first collapser'); + await firstCollapser.click(); + // sleep is required here on mobile to account for the click delay + await driver.sleep(500); + const { y: afterTop } = await secondCollapser.getRect(); + assert.notEqual( + initialTop, + afterTop, + 'clicking the first collapser did not change the position of the second collapser' + ); +}; + +const navTest = async () => { + const releaseNotesXPath = '//div[@data-flip-id="Release notes"]'; + const nextNodeXPath = `${releaseNotesXPath}/following-sibling::div[1]`; + const [hamburgerButton] = await waitForXPath( + '//header//button[contains(@aria-label, "Mobile")]' + ); + await hamburgerButton.click(); + await driver.sleep(500); + // nav on mobile is a new list, the desktop nav comes first in the DOM but is hidden + const [_desktopRN, releaseNotes] = await waitForXPath(releaseNotesXPath); + const [_desktopINN, initialNextNode] = await waitForXPath(nextNodeXPath); + await driver.executeScript('arguments[0].scrollIntoView()', releaseNotes); + console.log('clicking Release Notes div'); + await releaseNotes.click(); + const [_desktopANN, afterNextNode] = await waitForXPath(nextNodeXPath); + assert.notEqual( + initialNextNode, + afterNextNode, + 'clicking Release Notes in the nav did not expand the Release Notes section' + ); +}; + +const searchTest = async () => { + const [searchButton] = await waitForXPath('//a[contains(@href, "?q=")]'); + console.log('clicking search button'); + await searchButton.click(); + // sleep is required here on mobile to account for the click delay + await driver.sleep(500); + const activeEl = await driver.executeScript('return document.activeElement'); + assert.equal( + await activeEl.getTagName(), + 'input', + 'clicking search button did not focus the page on an input' + ); +}; + +const tileTest = async () => { + const initialUrl = await driver.getCurrentUrl(); + const [firstDocTile] = await waitForXPath( + '//main//section//h3[text()="Popular docs"]/following::a' + ); + // sometimes the cookie banner covers the doc tile so we need to scroll + await driver.executeScript( + 'arguments[0].scrollIntoView(false)', + firstDocTile + ); + console.log('clicking doc tile'); + await firstDocTile.click(); + await driver.wait( + until.stalenessOf(firstDocTile), + TIMEOUT, + 'timed out waiting to navigate away from homepage' + ); + // we can't check if the url equals the link href because of redirects, + // so we just have to make sure the URL has changed at all + const afterUrl = await driver.getCurrentUrl(); + assert.notEqual( + initialUrl, + afterUrl, + `clicking homepage doc tile did not navigate as expected, URL did not change after clicking link` + ); +}; + +const driver = await new Builder() + .forBrowser('chrome') + .setChromeOptions(options) + .build(); + +main(); diff --git a/src/content/docs/apm/agents/nodejs-agent/getting-started/monitor-your-nodejs-app.mdx b/src/content/docs/apm/agents/nodejs-agent/getting-started/monitor-your-nodejs-app.mdx index 41ae310465c..4c79fc14895 100644 --- a/src/content/docs/apm/agents/nodejs-agent/getting-started/monitor-your-nodejs-app.mdx +++ b/src/content/docs/apm/agents/nodejs-agent/getting-started/monitor-your-nodejs-app.mdx @@ -20,29 +20,31 @@ We have a few paths to install the Node.js agent, depending on what you're monit id="docker" title="App deployed in a Docker container" > -To install the agent in a Docker container, follow [these self-guided steps](/docs/apm/agents/nodejs-agent/installation-configuration/install-nodejs-agent-docker) using the command line. - -This process walks you through adding the agent to `package.json`, then requiring New Relic on the app-level. By the end, you'll add your license key and app name to `docker run` so the agent runs with your Docker app. + To install the agent in a Docker container, follow [these self-guided steps](/docs/apm/agents/nodejs-agent/installation-configuration/install-nodejs-agent-docker) using the command line. + + This process walks you through adding the agent to `package.json`, then requiring New Relic on the app-level. By the end, you'll add your license key and app name to `docker run` so the agent runs with your Docker app. + -We've got a few different options for apps hosted on a server. - -* Our [guided install](https://one.newrelic.com/marketplace/install-data-source?state=f535d53b-5b84-cd48-80cf-61704ad02e29) breaks down the installation into steps. It requires some interaction with the command line. -* Our [Install the Node.js agent](/docs/apm/agents/nodejs-agent/installation-configuration/install-nodejs-agent) doc uses the command line exclusively. You can view the same process in our [Node.js agent](https://github.com/newrelic/node-newrelic#installation) repo. -* For apps that use the PM2 process manager, follow the [guided install](https://one.newrelic.com/marketplace/install-data-source?state=ba2c3ecb-defb-e99a-c4be-47d786690d2a). If you're using a process manager that isn't PM2, then choose either the guided or manual install option. - -When you're ready to monitor your app, add ` $ node -r newrelic your-program.js` to the first line of your app's code. This is especially important if you don't have root access to your app. + We've got a few different options for apps hosted on a server. + + * Our [guided install](https://one.newrelic.com/marketplace/install-data-source?state=f535d53b-5b84-cd48-80cf-61704ad02e29) breaks down the installation into steps. It requires some interaction with the command line. + * Our [Install the Node.js agent](/docs/apm/agents/nodejs-agent/installation-configuration/install-nodejs-agent) doc uses the command line exclusively. You can view the same process in our [Node.js agent](https://github.com/newrelic/node-newrelic#installation) repo. + * For apps that use the PM2 process manager, follow the [guided install](https://one.newrelic.com/marketplace/install-data-source?state=ba2c3ecb-defb-e99a-c4be-47d786690d2a). If you're using a process manager that isn't PM2, then choose either the guided or manual install option. + + When you're ready to monitor your app, add `-r newrelic` to your app's startup command to require the agent before other modules, for example `node -r newrelic your-program.js`. This is especially important if you don't have root access to your app. + -To install an agent for your AWS Lambda functions, our [self-guided steps](https://one.newrelic.com/marketplace/install-data-source?state=9aa3d004-6f13-1477-604e-b6a2d6bb992d) provide a setup script that automatically configures AWS for you. - -If you have a preference for manual installation via the command line, we currently have the option for [Legacy instrumentation for Lambda monitoring](https://docs.newrelic.com/docs/serverless-function-monitoring/aws-lambda-monitoring/enable-lambda-monitoring/enable-serverless-monitoring-aws-lambda-legacy/#node). + To install an agent for your AWS Lambda functions, our [self-guided steps](https://one.newrelic.com/marketplace/install-data-source?state=9aa3d004-6f13-1477-604e-b6a2d6bb992d) provide a setup script that automatically configures AWS for you. + + If you have a preference for manual installation via the command line, we currently have the option for [Legacy instrumentation for Lambda monitoring](https://docs.newrelic.com/docs/serverless-function-monitoring/aws-lambda-monitoring/enable-lambda-monitoring/enable-serverless-monitoring-aws-lambda-legacy/#node). @@ -55,4 +57,4 @@ So you've instrumented your app and want next steps. You might consider: * [Getting data from the Node.js virtual machine (V8)](/docs/apm/agents/nodejs-agent/extend-your-instrumentation/nodejs-vm-measurements) * Extending your instrumentation with [custom instrumentation API](/docs/apm/agents/nodejs-agent/extend-your-instrumentation/nodejs-custom-instrumentation) * Extending functionality with [custom transaction parameters, errors and metrics](/docs/apm/agents/nodejs-agent/api-guides/guide-using-nodejs-agent-api) -* Adding [browser monitoring] with your Node.js agent(/docs/apm/agents/nodejs-agent/extend-your-instrumentation/browser-monitoring-nodejs-agent) +* Adding [browser monitoring](/docs/apm/agents/nodejs-agent/extend-your-instrumentation/browser-monitoring-nodejs-agent) with your Node.js agent diff --git a/src/content/docs/kubernetes-pixie/kubernetes-integration/installation/kubernetes-integration-install-configure.mdx b/src/content/docs/kubernetes-pixie/kubernetes-integration/installation/kubernetes-integration-install-configure.mdx index 440e8b30b9f..4d7c5882ab4 100644 --- a/src/content/docs/kubernetes-pixie/kubernetes-integration/installation/kubernetes-integration-install-configure.mdx +++ b/src/content/docs/kubernetes-pixie/kubernetes-integration/installation/kubernetes-integration-install-configure.mdx @@ -38,20 +38,143 @@ import pixieServiceOtelMap from 'images/pixie_screenshot-full_service-otel-map.w The New Relic Kubernetes integration gives you full observability into the health and performance of your environment by leveraging the New Relic infrastructure agent. This agent collects telemetry data from your cluster using several New Relic integrations such as the [Kubernetes events integration](/docs/integrations/kubernetes-integration/kubernetes-events/install-kubernetes-events-integration), the [Prometheus Agent](/docs/infrastructure/prometheus-integrations/install-configure-prometheus-agent/install-prometheus-agent/), and the [New Relic Logs Kubernetes plugin](/docs/logs). -## Why use the guided install? [#why-guided-install] -To install our Kubernetes integration, we recommend that you follow the instructions here for our guided install. We recommend this interactive installation tool for servers, VMs, and [unprivileged](/docs/infrastructure/install-infrastructure-agent/linux-installation/linux-agent-running-modes) environments. Here are some advantages of using the guided install: +To install our Kubernetes integration, we recommend that you follow the instructions here for our guided install. We recommend this interactive installation tool for servers, VMs, and [unprivileged](/docs/infrastructure/install-infrastructure-agent/linux-installation/linux-agent-running-modes) environments. -* It can provide either a Helm command with the required values filled, or a plain manifest if you don't want to use Helm. -* It gives you control over which features are enabled and which data is collected. -* It also offers a quickstart option that includes some optional, pre-built resources such as dashboards and alerts alongside the Kubernetes integration so that you can gain instant visibility into your Kubernetes clusters. +## Ways to integrate - - For some environments, you may need (or prefer) to do a manual install instead of the guided install. We have docs for the following: [Manual install with Helm](/docs/kubernetes-pixie/kubernetes-integration/installation/install-kubernetes-integration-using-helm/), [Windows](/docs/kubernetes-pixie/kubernetes-integration/installation/install-version2-kubernetes-integration-windows/), and [EKS Fargate](/docs/kubernetes-pixie/kubernetes-integration/advanced-configuration/install-fargate-integration/). - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+Integration + +When to use + +Install +
+Guided install (recommended) + +Guided install guides you through the integration process with either a Helm command with the required values filled, or a plain manifest if you don't want to use Helm. It gives you control over which features are enabled and which data is collected. + +It also offers a quickstart option that includes some optional, pre-built resources such as dashboards and alerts alongside the Kubernetes integration so that you can gain instant visibility into your Kubernetes clusters. + + +* [Guided install with quickstart](https://one.newrelic.com/launcher/catalog-pack-details.launcher/?pane=eyJuZXJkbGV0SWQiOiJjYXRhbG9nLXBhY2stZGV0YWlscy5jYXRhbG9nLXBhY2stY29udGVudHMiLCJxdWlja3N0YXJ0SWQiOiI4OGE3OWY1Mi04MWMxLTRmYTItOTlmOC0zY2I1YjAxMmYxNjAifQ==): Your New Relic organization does **not** use the [EU](/docs/using-new-relic/welcome-new-relic/get-started/our-eu-us-region-data-centers) data center, and you also want to install some bonus dashboards and alerts from the quickstart. + +* [Guided install](https://one.newrelic.com/nr1-core?account=2498654&state=d1aae74b-0ad6-b0f3-093d-cc89ecf89234): Your New Relic organization does **not** use the [EU](/docs/using-new-relic/welcome-new-relic/get-started/our-eu-us-region-data-centers) data center. + +* [Guided install (EU)](https://one.eu.newrelic.com/nr1-core?account=2498654&state=d1aae74b-0ad6-b0f3-093d-cc89ecf89234): Your New Relic organization uses the [EU](/docs/using-new-relic/welcome-new-relic/get-started/our-eu-us-region-data-centers) data center. + + +
+Manual Windows install + +When you have a Windows-based Kubernetes system. Note that there are [various limitations](/docs/kubernetes-pixie/kubernetes-integration/installation/install-version2-kubernetes-integration-windows/#k8-windows-limitations) to the Windows integration. + + +See our Windows install docs: + + + + + + +
+Manual Helm install + +This option is not recommended, as the guided install will prompt for some configuration options and autopopulate secrets and values for you. Additionally, our guided install also allows installing our integration as plain manifests rather than a Helm release. + + +See our manual Helm install docs: + + + + + + +
+ Manual EKS Fargate install + +When monitoring Kubernetes workloads on EKS Fargate. This integration automatically injects a sidecar containing the infrastructure agent and the nri-kubernetes integration in each pod that needs to be monitored. + + + + + + +
New Relic operatorKubernetes operators help manage these complex applications by abstracting those Kubernetes resources into a set of custom configurations, or custom resources. + + This reduces the burden on you as a user, as you would only need to interface with the custom resources to manage the application. You can then rely on the operator to deploy, upgrade, and manage the application for you. + + + + + + + +Follow the instructions in the operator doc and refer back to this doc as needed.
+ +The remainder of this doc will cover the guided install process. -## Preliminary notes for your managed services or platforms [#cloud-platforms] +## Guided install [#before-start] -Before starting our [guided install](https://one.newrelic.com/nr1-core?state=51fbbd48-c8ca-ead9-bb90-af96e18d82a7), check out these notes for your managed services or platforms: +Take a look at the following to make sure you're ready: + +* If custom manifests have been used instead of Helm, you will need to first remove the old installation using `kubectl delete -f previous-manifest-file.yml`, and then proceed through the guided installer again. This will generate an updated set of manifests that can be deployed using `kubectl apply -f manifest-file.yml`. +* Make sure you're using the supported Kubernetes versions and make sure to check out the preliminary notes for your managed services or platforms on our [compatibility and requirements page](/docs/kubernetes-pixie/kubernetes-integration/get-started/kubernetes-integration-compatibility-requirements). +* Make sure you have New Relic . You can set up an account that's free—no credit card required. +* Make sure the newrelic dockerhub (`https://hub.docker.com/u/newrelic`) and Google's registry (`registry.k8s.io`) domains are added to your allow list. This is where the installation will pull container images from. Note, you may need to follow the [commands](https://kubernetes.io/blog/2023/03/10/image-registry-redirect/#how-can-i-check-if-i-am-impacted) to identify the additional Google registry domains to be added to your white list, because `registry.k8s.io` typically redirects to your local registry domain (e.g., `asia-northeast1-docker.pkg.dev`) based on your region. + + +If you're installing our integration on a managed cloud, please take a look at these [preliminary notes](#cloud-platforms) before proceeding: - EKSAmazon EKS Fargate} - > - Installation on EKS Fargate clusters requires dedicated steps, which are detailed in our [EKS Fargate installation docs](/docs/integrations/kubernetes-integration/installation/install-fargate-integration). - - - -## Before you start the guided install [#before-start] - -Take a look at the following to make sure you're ready: - -* If you're installing our integration on a managed cloud, please take a look at these [preliminary notes](#cloud-platforms) before proceeding. -* If custom manifests have been used instead of Helm, you will need to first remove the old installation using `kubectl delete -f previous-manifest-file.yml`, and then proceed through the guided installer again. This will generate an updated set of manifests that can be deployed using `kubectl apply -f manifest-file.yml`. -* Make sure you're using the supported Kubernetes versions and make sure to check out the preliminary notes for your managed services or platforms on our [compatibility and requirements page](/docs/kubernetes-pixie/kubernetes-integration/get-started/kubernetes-integration-compatibility-requirements). -* Make sure you have New Relic . You can set up an account that's free—no credit card required. -* Make sure the newrelic dockerhub (`https://hub.docker.com/u/newrelic`) and Google's registry (`registry.k8s.io`) domains are added to your allow list. This is where the installation will pull container images from. Note, you may need to follow the [commands](https://kubernetes.io/blog/2023/03/10/image-registry-redirect/#how-can-i-check-if-i-am-impacted) to identify the additional Google registry domains to be added to your white list, because `registry.k8s.io` is typically redirected to your local registry domain (e.g., `asia-northeast1-docker.pkg.dev`) based on your region. - -## Start the guided install [#how-to-start] - -We have some links below that will take you to the guided install that is right for you. After you start the installation process, you can use the tips in the remainder of this guide to help you make decisions about the various setup options. - - - - - - - - - - - - - - - - - - - - - - -
- Guided install option - - Description -
- [Guided install](https://one.newrelic.com/nr1-core?account=2498654&state=d1aae74b-0ad6-b0f3-093d-cc89ecf89234) - - Use this if your New Relic organization does **not** use the [EU](/docs/using-new-relic/welcome-new-relic/get-started/our-eu-us-region-data-centers) data center, and you don't need the bonus dashboards and alerts from the quickstart. -
- [Guided install (EU)](https://one.eu.newrelic.com/nr1-core?account=2498654&state=d1aae74b-0ad6-b0f3-093d-cc89ecf89234) - - Use this if your New Relic organization uses the [EU](/docs/using-new-relic/welcome-new-relic/get-started/our-eu-us-region-data-centers) data center, and you don't need the bonus dashboards and alerts from the quickstart. -
- [Guided install with quickstart](https://one.newrelic.com/launcher/catalog-pack-details.launcher/?pane=eyJuZXJkbGV0SWQiOiJjYXRhbG9nLXBhY2stZGV0YWlscy5jYXRhbG9nLXBhY2stY29udGVudHMiLCJxdWlja3N0YXJ0SWQiOiI4OGE3OWY1Mi04MWMxLTRmYTItOTlmOC0zY2I1YjAxMmYxNjAifQ==) - - Use this option if your New Relic organization does **not** use the [EU](/docs/using-new-relic/welcome-new-relic/get-started/our-eu-us-region-data-centers) data center, and you also want to install some bonus dashboards and alerts from the quickstart. -
- ## Navigating the Kubernetes integration guided install [#kubernetes-install-navigation] Once you start the guided install, use the following information to help you make decisions about the configurations. @@ -227,7 +288,7 @@ Once you start the guided install, use the following information to help you mak Cluster name - Cluster name is the name we will use to tag your Kubernetes data with so that you can filter for the data specific to the cluster you're installing this integration in. This is important if you choose to connect multiple clusters to your New Relic account so choose a name that you'll recognize! + Cluster name is the name we will use to tag your Kubernetes data with so that you can filter for the data specific to the cluster you're installing this integration in. This is important if you choose to connect multiple clusters to your New Relic account so choose a name that you'll recognize. @@ -456,7 +517,7 @@ Once you start the guided install, use the following information to help you mak Finalize the Kubernetes installation setup by choosing one of the following installation methods in the last step of the guided install: * **Guided Install (recommended)**: This option will automatically download and use the [`newrelic-cli`](https://developer.newrelic.com/automate-workflows/get-started-new-relic-cli/) CLI to install and configure the Kubernetes integration. - * **Helm 3**: Use this option if you prefer using [Helm](https://helm.sh/) to install and configure the Kubernetes integration. This option installs the [`nri-bundle` Helm chart](/docs/kubernetes-pixie/kubernetes-integration/installation/install-kubernetes-integration-using-helm/#install-k8-helm), which you can further configure with the options described [here](/docs/kubernetes-pixie/kubernetes-integration/installation/install-kubernetes-integration-using-helm/#configure). + * **Helm 3**: Use this option if you prefer using [Helm](https://helm.sh/) to install and configure the Kubernetes integration. This option installs the [`nri-bundle` Helm chart](/docs/kubernetes-pixie/kubernetes-integration/installation/install-kubernetes-integration-using-helm/#install-k8-helm), which you can further configure with the options described [here](/docs/kubernetes-pixie/kubernetes-integration/installation/install-kubernetes-integration-using-helm/#configure). This is also where you can enable the [New Relic operator](docs/kubernetes-pixie/kubernetes-integration/installation/install-with-operator/). * **Manifest**: Select this option if you prefer generating a Kubernetes manifest in YAML format and manually installing it with [`kubectl`](https://kubernetes.io/docs/reference/kubectl/). diff --git a/src/content/docs/kubernetes-pixie/kubernetes-integration/installation/upgrading-kubernetes.mdx b/src/content/docs/kubernetes-pixie/kubernetes-integration/installation/upgrading-kubernetes.mdx index db662c61429..88192589867 100644 --- a/src/content/docs/kubernetes-pixie/kubernetes-integration/installation/upgrading-kubernetes.mdx +++ b/src/content/docs/kubernetes-pixie/kubernetes-integration/installation/upgrading-kubernetes.mdx @@ -1,5 +1,5 @@ --- -title: 'Upgrading the Kubernetes integration' +title: 'Upgrade the Kubernetes integration' tags: - Integrations - Kubernetes integration @@ -9,13 +9,13 @@ metaDescription: "Learn how to upgrade the Kubernetes integration." After a new version of Kubernetes has been released, you can upgrade the Kubernetes version running on control plane nodes and worker nodes in a cluster. -## Upgrading our Kubernetes integration [#update] +## Upgrade our Kubernetes integration [#update] -Our Kubernetes integration is under active development and we regularly release updates which include bug fixes, new features, and support for newer Kubernetes versions and cloud providers. We strongly recommend all our customers to regularly update the Kubernetes integration to get the best experience. +Our Kubernetes integration is under active development and we regularly [release updates](/docs/release-notes/infrastructure-release-notes/kubernetes-integration-release-notes/), which include bug fixes, new features, and support for newer Kubernetes versions and cloud providers. We strongly recommend that you regularly update your Kubernetes integration to get the best experience. -### Upgrading using the guided install and Helm [#upgrade-helm] +### Upgrade using the guided install and Helm [#upgrade-helm] -In order to update an installation that was deployed using Helm command provided by the [guided install](https://one.newrelic.com/nr1-core?state=51fbbd48-c8ca-ead9-bb90-af96e18d82a7), just go through the process and run the Helm command again. This will pull the new version of the chart and its dependencies and upgrade it to the latest version. +In order to update an installation that was deployed using the Helm command provided by the [guided install](https://one.newrelic.com/nr1-core?state=51fbbd48-c8ca-ead9-bb90-af96e18d82a7), go through the process and run the Helm command again. This will pull the new version of the chart and its dependencies and upgrade it to the latest version. If you want to manually upgrade your Kubernetes integration installed via Helm: @@ -25,7 +25,7 @@ If you want to manually upgrade your Kubernetes integration installed via Helm: helm repo update ``` -2. Update the release by running again the appropriate `helm upgrade --install ...` command in the section above: +2. Update the release by running the appropriate `helm upgrade --install ...` command from the section above: ```bash helm upgrade --install newrelic-bundle newrelic/nri-bundle \ @@ -33,23 +33,37 @@ If you want to manually upgrade your Kubernetes integration installed via Helm: -f values-newrelic.yaml ``` -### Upgrading using the guided install and plain manifests [#update-manifests] +### Upgrade using the guided install and plain manifests [#update-manifests] We encourage you to deploy our integration using Helm, as it provides a cleaner upgrade path compared to using manifests directly. -If custom manifests have been used instead of Helm, you'll need to first remove the old installation using `kubectl delete -f previous-manifest-file.yml`, and then proceed through the guided install again. This will generate an updated set of manifests that you can deploy using `kubectl apply -f manifest-file.yml`. +If you used custom manifests instead of Helm: + +1. First, remove the old installation: + + ```bash + kubectl delete -f previous-manifest-file.yml + ``` + +2. Proceed through the guided install again. This will generate an updated set of manifests that you can deploy using: + + ```bash + kubectl apply -f manifest-file.yml + ``` We don't recommend applying a new version of the manifest file without removing the previous one first, since it might leave some leftover components in your cluster. If you need an advanced way to create your manifest, template it using Helm. -## Upgrading the nri-bundle version [#update-nri-bundle] +## Upgrade the `nri-bundle` version [#update-nri-bundle] + +The following are some issues you may encounter when upgrading your [`nri-bundle`](https://github.com/newrelic/helm-charts/blob/master/charts/nri-bundle/README.md), along with how to resolve them. ### Changed label selectors [#changed-label-selectors] -When upgrading to the new version of KSM, you might see an error like this: +When upgrading to the new version of `kube-state-metrics` (or KSM), you might see an error like this: ``` v1.LabelSelector{MatchLabels:map[string]string{"app.kubernetes.io/instance":"newrelic", "app.kubernetes.io/name":"kube-state-metrics"}, MatchExpressions:[]v1.LabelSelectorRequirement(nil)}: field is immutable @@ -59,7 +73,7 @@ The label selector in the new version of the chart changed, but the name of the ### Deprecated values [#deprecated-values] -On the other hand, you might see the following log when upgrading: +If you encounter the following log: ``` warning: skipped value for nri-bundle.kube-state-metrics.collectors: Not a table. Error: UPGRADE FAILED: template: nri-bundle/charts/kube-state-metrics/templates/role.yaml:18:6: executing "nri-bundle/charts/kube-state-metrics/templates/role.yaml" at : error calling has: Cannot find has on type map @@ -68,7 +82,7 @@ Error: UPGRADE FAILED: template: nri-bundle/charts/kube-state-metrics/templates/ This is because the KSM chart values changed and the map of collectors has been changed to a list of collectors. The collector list is not needed anymore, and it has been removed from the new values. -If you still have those in your static Helm values, or if you are using the flag `--reuse-values` you should first remove the following values: +If you still have those in your static Helm values, or if you are using the flag `--reuse-values`, you should first remove the following values: ```yml kube-state-metrics: @@ -79,10 +93,10 @@ kube-state-metrics: ### Unsupported Kubernetes resources [#unsupported-k8s-resources] -When upgrading the newrelic-bundle, you might see an error about a certain resource not being supported by a specific Kubernetes API. For example, +When upgrading the `nri-bundle`, you might see an error about a certain resource not being supported by a specific Kubernetes API. For example, ``` Error: UPGRADE FAILED: unable to build kubernetes objects from current release manifest: resource mapping not found for name: "newrelic-bundle-nri-metadata-injection" namespace: "" from "": no matches for kind "MutatingWebhookConfiguration" in version "admissionregistration.k8s.io/v1beta1" ``` -That means the corresponding Kubernetes resource is not supported by the corresponding Kubernetes API. You can follow the instructions on [Helm mapkubeapis Plugin](https://github.com/helm/helm-mapkubeapis) to solve the error. +That means the corresponding Kubernetes resource is not supported by the corresponding Kubernetes API. You can follow the instructions in the [Helm mapkubeapis Plugin repo](https://github.com/helm/helm-mapkubeapis) to solve the error. 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 7fcce234f70..11bca512ed9 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 @@ -1157,22 +1157,12 @@ cordova plugin add https://github.com/newrelic/newrelic-cordova-plugin.git - - (Android only) Enable or disable collection of event data. - - - ```typescript - analyticsEventEnabled: true - ``` - - - Enable or disable crash reporting. ```typescript - crashReportingEnabled: true + CRASH_REPORTING_ENABLED = "true" ``` @@ -1182,7 +1172,7 @@ cordova plugin add https://github.com/newrelic/newrelic-cordova-plugin.git ```typescript - interactionTracingEnabled: true + INTERACTION_TRACING_ENABLED = "true" ``` @@ -1226,7 +1216,7 @@ cordova plugin add https://github.com/newrelic/newrelic-cordova-plugin.git ```typescript - loggingEnabled: true + LOGGING_ENABLED = "true" ``` @@ -1239,7 +1229,7 @@ cordova plugin add https://github.com/newrelic/newrelic-cordova-plugin.git ```typescript - logLevel: NREnums.LogLevel.INFO + LOG_LEVEL = "INFO" ``` @@ -1250,7 +1240,7 @@ cordova plugin add https://github.com/newrelic/newrelic-cordova-plugin.git ```typescript - webViewInstrumentation: true + WEB_VIEW_INSTRUMENTATION = "true" ``` @@ -1262,7 +1252,7 @@ cordova plugin add https://github.com/newrelic/newrelic-cordova-plugin.git ```typescript - collectorAddress: "crash-upload-delegate.domain.com" + COLLECTOR_ADDRESS = "crash-upload-delegate.domain.com" ``` @@ -1273,7 +1263,7 @@ cordova plugin add https://github.com/newrelic/newrelic-cordova-plugin.git ```typescript - crashCollectorAddress: "crash-upload-delegate.domain.com" + CRASH_COLLECTOR_ADDRESS = "crash-upload-delegate.domain.com" ``` @@ -1295,7 +1285,7 @@ cordova plugin add https://github.com/newrelic/newrelic-cordova-plugin.git ```typescript - fedRampEnabled: false + FEDRAMP_ENABLED = "false" ``` diff --git a/src/content/docs/mobile-monitoring/new-relic-mobile/mobile-sdk/current-session-id.mdx b/src/content/docs/mobile-monitoring/new-relic-mobile/mobile-sdk/current-session-id.mdx index 33c0d9af130..3baaf9338fc 100644 --- a/src/content/docs/mobile-monitoring/new-relic-mobile/mobile-sdk/current-session-id.mdx +++ b/src/content/docs/mobile-monitoring/new-relic-mobile/mobile-sdk/current-session-id.mdx @@ -92,13 +92,13 @@ String sessionId = NewRelic.currentSessionId(); ### Objective-c [#objc] ```objectivec -+ (void) crashNow:(NSString* __nullable)message; ++ (NSString* _Null_unspecified) currentSessionId; ``` ### Swift [#swift] ```swift -NewRelic.crashNow() +NewRelic.currentSessionId() ``` ## Description [#description] diff --git a/src/content/docs/mobile-monitoring/new-relic-mobile/mobile-sdk/network-request-failures.mdx b/src/content/docs/mobile-monitoring/new-relic-mobile/mobile-sdk/network-request-failures.mdx index e5ea66b2e45..99f01bc2582 100644 --- a/src/content/docs/mobile-monitoring/new-relic-mobile/mobile-sdk/network-request-failures.mdx +++ b/src/content/docs/mobile-monitoring/new-relic-mobile/mobile-sdk/network-request-failures.mdx @@ -425,7 +425,7 @@ NewRelic.noticeNetworkFailure('https://fakewebsite.com', 'GET', Date.now(), Date ## Syntax [#syntax] ```csharp -NoticeNetworkFailure(string url, string httpMethod, int statusCode, long startTime,long endTime, long bytesSent, long bytesReceived, string responseBody): void; + void NoticeNetworkFailure(string url, string httpMethod, long startTime, long endTime, NetworkFailure failure); ``` ## Description [#description] @@ -451,21 +451,20 @@ Records network failures. If a network request fails, use this method to record - + `url` - + `string` - + Required. The URL of the request. - `httpMethod` @@ -475,88 +474,49 @@ Records network failures. If a network request fails, use this method to record `string` - Required. The HTTP method used, such as GET or POST. + Required. The HTTP method of the request. - - `statusCode` - - - - `int` - - - - Required. The start time of the request in milliseconds since the epoch. - - - - `startTime` - `long` - - - Required. The start time of the request in milliseconds since the epoch. - - - - - - `endTime` - - - - `long` + `number` - Required. The end time of the request in milliseconds since the epoch. + Optional. The start time of the request in milliseconds since the epoch. + `startTime` and `endTime` can be used as an alternative to `timer`. - - - `bytesSent` - - - - `long` - + - Optional. The number of bytes sent in the response. f you do not provide a value for the `bytesSent` or `bytesReceived` parameters, the values will be set to 0. + `endTime` - - - `bytesReceived` - - - - `long` + `number` - - Optional. The number of bytes received in the response. f you do not provide a value for the `bytesSent` or `bytesReceived` parameters, the values will be set to 0. + Optional. The end time of the request in milliseconds since the epoch. + `startTime` and `endTime` can be used as an alternative to `timer`. - `responseBody` + `failure` `string` - Optional. The response body of the HTTP response. + Optional. In most cases, place this call inside exception handlers, such as catch blocks. Supported failures are: `Unknown`, `BadURL`, `TimedOut`, `CannotConnectToHost`, `DNSLookupFailed`, `BadServerResponse`, `SecureConnectionFailed`. @@ -799,7 +759,8 @@ Records network failures. If a network request fails, use this method to record ## Syntax [#syntax] ```csharp -NoticeNetworkFailure(string url, string httpMethod, int statusCode, long startTime,long endTime, long bytesSent, long bytesReceived, string responseBody): void; +NoticeNetworkFailure(string url, string httpMethod, long startTime, long endTime, NetworkFailure failure) + ``` ## Description [#description] @@ -826,7 +787,7 @@ Records network failures. If a network request fails, use this method to record - + `url` @@ -840,98 +801,58 @@ Records network failures. If a network request fails, use this method to record Required. The URL of the request. - `httpMethod` - + `string` - - Required. The HTTP method used, such as GET or POST. + Required. The HTTP method of the request. - - `statusCode` - - - - `int` - - - Required. The start time of the request in milliseconds since the epoch. - - - - `startTime` - `long` - - - Required. The start time of the request in milliseconds since the epoch. - - - - - - `endTime` - - - - `long` - - - Required. The end time of the request in milliseconds since the epoch. - - - - - - `bytesSent` - - - - `long` + `number` - Optional. The number of bytes sent in the response. f you do not provide a value for the `bytesSent` or `bytesReceived` parameters, the values will be set to 0. + Optional. The start time of the request in milliseconds since the epoch. + `startTime` and `endTime` can be used as an alternative to `timer`. - + - `bytesReceived` + `endTime` - `long` + `number` - Optional. The number of bytes received in the response. f you do not provide a value for the `bytesSent` or `bytesReceived` parameters, the values will be set to 0. + Optional. The end time of the request in milliseconds since the epoch. + `startTime` and `endTime` can be used as an alternative to `timer`. - `responseBody` + `failure` `string` - - Optional. The response body of the HTTP response. + Optional. In most cases, place this call inside exception handlers, such as catch blocks. Supported failures are: `Unknown`, `BadURL`, `TimedOut`, `CannotConnectToHost`, `DNSLookupFailed`, `BadServerResponse`, `SecureConnectionFailed`. diff --git a/src/content/docs/mobile-monitoring/new-relic-mobile/mobile-sdk/network-request-success.mdx b/src/content/docs/mobile-monitoring/new-relic-mobile/mobile-sdk/network-request-success.mdx index 549c312b3e5..fb753654773 100644 --- a/src/content/docs/mobile-monitoring/new-relic-mobile/mobile-sdk/network-request-success.mdx +++ b/src/content/docs/mobile-monitoring/new-relic-mobile/mobile-sdk/network-request-success.mdx @@ -1129,7 +1129,7 @@ Tracks network requests manually. You can use this method to record HTTP transac ## Example [#example] ```dart -NewrelicMobile.instance.noticeNetworkFailure("https://cb6b02be-a319-4de5-a3b1-361de2564493.mock.pstmn.io/searchpage", "GET", 1000, 2000,'Test Network Failure', NetworkFailure.dnsLookupFailed); + NewrelicMobile.instance.noticeHttpTransaction("https://cb6b02be-a319-4de5-a3b1-361de2564493.mock.pstmn.io/searchpage", "GET",200, 1000, 2000,100,300,null,responseBody: "This is Test Payload"); ``` diff --git a/src/content/docs/mobile-monitoring/new-relic-mobile/mobile-sdk/record-breadcrumb.mdx b/src/content/docs/mobile-monitoring/new-relic-mobile/mobile-sdk/record-breadcrumb.mdx index d1601be3d90..e4ff52ee88b 100644 --- a/src/content/docs/mobile-monitoring/new-relic-mobile/mobile-sdk/record-breadcrumb.mdx +++ b/src/content/docs/mobile-monitoring/new-relic-mobile/mobile-sdk/record-breadcrumb.mdx @@ -556,7 +556,7 @@ Returns `true` if the event is recorded successfully, or `false` if not. ## Example [#example] ```dart -NewrelicMobile.instance.recordBreadcrumb("Button Got Pressed on Screen 3"), +NewrelicMobile.instance.recordBreadcrumb("Button Got Pressed on Screen 3"); ``` diff --git a/src/content/docs/mobile-monitoring/new-relic-mobile/mobile-sdk/record-custom-events.mdx b/src/content/docs/mobile-monitoring/new-relic-mobile/mobile-sdk/record-custom-events.mdx index 578673cf6a4..661f6e272cc 100644 --- a/src/content/docs/mobile-monitoring/new-relic-mobile/mobile-sdk/record-custom-events.mdx +++ b/src/content/docs/mobile-monitoring/new-relic-mobile/mobile-sdk/record-custom-events.mdx @@ -698,8 +698,8 @@ Returns `true` if the event is recorded successfully, or `false` if not. ## Example [#example] ```dart -NewrelicMobile.instance.recordCustomEvent("Major",eventName: "User Purchase",eventAttributes: {"item1":"Clothes","price":34.00}), - child: const Text('Record Custom Event'), +NewrelicMobile.instance.recordCustomEvent("Major",eventName: "User Purchase",eventAttributes: {"item1":"Clothes","price":34.00}); + ``` diff --git a/src/content/docs/mobile-monitoring/new-relic-mobile/mobile-sdk/record-custom-metrics.mdx b/src/content/docs/mobile-monitoring/new-relic-mobile/mobile-sdk/record-custom-metrics.mdx index 232d78e5380..ae09fcded94 100644 --- a/src/content/docs/mobile-monitoring/new-relic-mobile/mobile-sdk/record-custom-metrics.mdx +++ b/src/content/docs/mobile-monitoring/new-relic-mobile/mobile-sdk/record-custom-metrics.mdx @@ -66,18 +66,16 @@ NewRelic.recordMetric( ## Description [#description] -Set a custom user identifier value to associate user sessions with analytics events and attributes. - -This method sets a custom user identifier value to associate all events from a mobile user's session with a specific user ID. This method can be called anytime after the New Relic Android agent starts. - -A user identifier is useful for several reasons. Using the [Crash analysis UI](/docs/mobile-monitoring/mobile-monitoring-ui/crashes/crash-analysis-group-filter-your-crashes), you can: +With this method, you can record arbitrary [custom metrics](/docs/accounts-partnerships/education/getting-started-new-relic/glossary#custom-metric) to give more detail about app activity that is not tracked by New Relic automatically. The call accepts several sets of parameters for optional levels of detail. -* Find crashes specific to a user. Focusing on one particular crash for one user is often enough to quickly resolve the issue. -* Filter all crashes to show the occurrences for a user (or group of users) for each crash type; inversely, filter the crash list to show those users affected by each crash type. If the user ID is represented as an email address, it's then easy to reach out and let them know when there is a solution available that addresses those crashes. +To get the most out of your metrics, follow these guidelines to create clear, concise metric names: -If you do not want to explicitly identify users because of privacy rules, this method is still useful when tracking user segments, such as paid vs. free end users, or registered vs. unregistered users. This allows you to filter or facet on the number and types of crashes experienced by each segment, and do outreach based on that segment. +* Use case and whitespace characters appropriate for display in the user interface. Metric names are rendered as-is. +* Capitalize the metric name. +* Avoid using the characters `/ ] [ | *` when naming metrics. +* Avoid multi-byte characters. -For more context on how to use this API, see [Send custom attributes and events](/docs/mobile-monitoring/new-relic-mobile-android/install-configure/work-android-sdk-api#attributes-events-insights). +The `category` is also required; it is displayed in the UI and is useful for organizing custom metrics if you have many of them. It can be a custom category or it can be a predefined category using the [`MetricCategory` enum](/docs/mobile-monitoring/new-relic-mobile-android/install-configure/work-android-sdk-api#cat). ## Parameters [#parameters] diff --git a/src/content/docs/mobile-monitoring/new-relic-mobile/mobile-sdk/remove-attribute.mdx b/src/content/docs/mobile-monitoring/new-relic-mobile/mobile-sdk/remove-attribute.mdx index db6f65331bc..e5f04410557 100644 --- a/src/content/docs/mobile-monitoring/new-relic-mobile/mobile-sdk/remove-attribute.mdx +++ b/src/content/docs/mobile-monitoring/new-relic-mobile/mobile-sdk/remove-attribute.mdx @@ -134,7 +134,7 @@ removeAttribute:(NSString*)name; ### Swift [#swift] ``` -NewRelic.removeAttribute() +NewRelic.removeAttribute(_ name: : String!)-> Bool ``` ## Description [#description] diff --git a/src/content/docs/new-relic-solutions/new-relic-one/introduction-new-relic-platform.mdx b/src/content/docs/new-relic-solutions/new-relic-one/introduction-new-relic-platform.mdx index afdbd0a57e4..fa6c95cee96 100644 --- a/src/content/docs/new-relic-solutions/new-relic-one/introduction-new-relic-platform.mdx +++ b/src/content/docs/new-relic-solutions/new-relic-one/introduction-new-relic-platform.mdx @@ -396,7 +396,7 @@ If your organization has [multiple accounts](/docs/accounts/accounts-billing/gen ## Keyboard shortcuts [#shortcuts] -You can use keyboard shortcuts to navigate through the UI efficently. +You can use keyboard shortcuts to navigate through the UI efficiently. diff --git a/src/content/docs/release-notes/mobile-apps-release-notes/new-relic-ios-release-notes/new-relic-ios-5050.mdx b/src/content/docs/release-notes/mobile-apps-release-notes/new-relic-ios-release-notes/new-relic-ios-5050.mdx new file mode 100644 index 00000000000..1dd345e6b1e --- /dev/null +++ b/src/content/docs/release-notes/mobile-apps-release-notes/new-relic-ios-release-notes/new-relic-ios-5050.mdx @@ -0,0 +1,18 @@ +--- +subject: Mobile app for iOS +releaseDate: '2023-08-31' +version: 5.5.0 +downloadLink: 'https://apps.apple.com/app/id594038638' +--- + +Adds in quick actions to the app icon from the Home Screen and App Library. + +### New features + +* Touch and hold on the app icon to see your recent favorites, or the top sections if you have no favorites + +### Improvements + +* Adds deep link support for issue links coming from Pagerduty, Slack, and other external notification destinations +* Fixes the synthetics monitor job detail not loading properly +* Fixes a few rare crashes \ No newline at end of file diff --git a/src/content/docs/tutorial-customer-experience/bottom-funnel-analysis.mdx b/src/content/docs/tutorial-customer-experience/bottom-funnel-analysis.mdx new file mode 100644 index 00000000000..7661edc18df --- /dev/null +++ b/src/content/docs/tutorial-customer-experience/bottom-funnel-analysis.mdx @@ -0,0 +1,192 @@ +--- +title: "Analyze the bottom-of-the-funnel" +tags: + - Observability maturity + - Customer experience + - Digital customer experience + - Implementation guide + - Conversions + - Funnel + - Bottom of the funnel +metaDescription: "New Relic observability maturity series: Bottom-of-the-funnel analysis shows New Relic users how to improve end-user conversions." +redirects: + - /docs/new-relic-solutions/observability-maturity/bofta-implementation-guide + - /docs/new-relic-solutions/observability-maturity/customer-experience/bofta-implementation-guide + - /docs/new-relic-solutions/observability-maturity/customer-experience/bottom-funnel-analysis-customer-journey-guide +--- + +import cxBotfaFunnel from 'images/cx_diagram_botfa-funnel.webp' + +import cxBotfaEcommerce from 'images/cx_diagram_botfa-ecommerce.webp' + +import cxBotfaCarInsurance from 'images/cx_diagram_botfa-car-insurance.webp' + +import cxBotfaPagesActions from 'images/cx_diagram_pages-actions.webp' + +import cxBotfaDashboard from 'images/cx_diagram_botfa-dashboard.webp' + +import cxBotfaKpiTracking from 'images/cx_diagram_botfa-kpi-tracking.webp' + +Even though [improving your customer experience](/docs/tutorial-customer-experience/improve-customer-experience/) is often done comprehensively, focusing your efforts on improving conversion also increases your customer experience quality. This is what's known as bottom-of-the-funnel analysis, and it's about improving conversion by focusing on performance at the end of the user journey instead of the customer experience as a whole. This guide walks you through how to do this properly using New Relic, and by the end of the guide you'll have both analyzed your bottom-of-the-funnel and have the information needed to do so as continually. + +User journey funnel + +Most sites and apps are built with one or more purposes in mind, and where there's a purpose, there's also likely a user journey. For example: + +| Purpose | User journey | +| ------------------------------------------------- | ---------------------------------------------------- | +| Brand awareness | Download a whitepaper | +| Customer support | Raise a support ticket | +| Customer services (registration, forms, payments) | Make a payment | +| Entertainment | Stream a movie | +| Goods | Buy clothes and accessories | +| Informational purposes | Find a support program in your state | +| Lead generation | Join distribution list to get promotions and coupons | +| Outreach | Get information about events in your town | +| Services (travel, rentals, bookings) | Book a flight | +| Social media | Share a selfie | + +When a user completes a journey, it's referred to as a conversion. All conversions have a value, and the best way to improve the conversion rate is to start at the bottom of the funnel, when the intent to complete the user journey is clear. + +You should always address any glaring issues with your app or site no matter where they occur. When it comes to optimizing conversion, it's better to start at the bottom of the funnel for two reasons: + +* Higher return on investment by focusing on the stage where users are already more likely to convert. Addressing performance issues here will see an immediate impact on your bottom line. +* If you have issues at the bottom of the funnel, optimizing earlier stages may not have much of an impact on your conversion rate. + +Optimizing the top or the middle of the funnel without focusing on the bottom first can leave a large hole in your customer experience. Once you've optimized the bottom of the funnel, you can use the same techniques to optimize earlier stages of the user journey. + +## Key performance indicators [#kpis] + +Bottom-of-the-funnel analysis measures the following KPIs: + + + +The rate of conversion once a user has gone far enough to demonstrate intent to complete an action to actual completion. Examples of this are rates of: +* Checkout -> order submission +* Insurance form review -> submission +* Completing sign up details -> submission + +Increase the rate of conversion by addressing errors and latency at the bottom of the funnel. + + + Value of a conversion times the number of pages or interactions in the bottom of the funnel that are slower than the industry threshold. Focus on reducing this value by improving page KPIs. + + + Value of a conversion times the number of backend errors in the bottom of the funnel interactions. Tune this value to make it meaningful by filtering out errors that aren't visible to the end user, then focus on reducing it. Create an alert to notify you if it suddenly trends upward. + + + + + +### Identify where the bottom of the funnel starts [#id-funnel] + +The bottom of the funnel is focused on the final steps of a user journey where a user has gone far enough to show intent to complete the journey. Here are some examples: + + + +Ecommerce bottom of the funnel + +The user journey is simplified so you can focus on where the bottom of the funnel begins: at checkout. Most users entering the checkout phase plan to purchase something. Reducing errors and latency from this point onward is more likely to improve conversions than focusing on any other part of the funnel. + + +Car insurance bottom of the funnel + +In the example above, you have the user's interest in car insurance as they enter information, but you don't know their intent until they see the quote and continue to proceed. + + + + +### Distinguish between pages and actions [#distinguish-actions] + +The final steps of a user's journey are likely to be a mix of full page loads and AJAX calls. You'll need to know all pages and AJAX requests for the next step. If you're not sure which requests are running from the page in question, you can run: + +``` +SELECT count(*) FROM AjaxRequest WHERE pageUrl like '%FILTER%' FACET groupedRequestUrl SINCE 1 DAY AGO +``` + +Distinguish between pages and actions + +Once you've done this, you can create a scripted monitor for your bottom-of-the-funnel. + + +### Create a scripted monitor for the bottom-of-the-funnel [#create-monitor] + +Make sure you have a [scripted monitor](/docs/synthetics/synthetic-monitoring/scripting-monitors/introduction-scripted-browser-monitors/) for each path through the bottom of the funnel. The goal is to make sure your bottom-of-the-funnel services are working around the clock. + +For example, you may have a checkout flow that calls a different payment API depending on the customer's payment preferences. + + +### Import the bottom-of-the-funnel dashboard + +Follow the instructions in the [bottom-of-the-funnel analysis quickstart](https://newrelic.com/instant-observability/customer-experience-bottom-funnel-analysis/8d339aa7-69e3-4efa-abc2-9eba600db91c) to install the dashboard and configure it. + + +### Capture current performance [#capture-performance] + +Bottom-of-the-funnel KPI tracking + +1. Follow the instructions in our [bottom-of-the-funnel analysis README on GitHub](https://github.com/newrelic/oma-resource-center/blob/main/src/content/docs/oma/value-drivers/customer-experience/use-cases/bottom-of-the-funnel-analysis/README.md), which walks you through the bottom-of-the-funnel analysis dashboard and relevant KPIs. +2. Use the dashboard from the previous step to understand the bottom-of-the-funnel performance. +3. Create a plan to improve KPIs that don't meet target values, as well as reduce revenue at risk. + + +### Improvement process +Whether you have a dedicated initiative to improve performance or you've classified it as ongoing maintenance, you need to track your progress at the end of every sprint. For detailed information, see: + +* [Improve uptime](/docs/new-relic-solutions/observability-maturity/customer-experience/cx-improve-web-uptime) +* [Improve page load performance](/docs/new-relic-solutions/observability-maturity/customer-experience/cx-improve-page-load) +* [Improve AJAX performance](/docs/browser/browser-monitoring/browser-pro-features/ajax-page-identify-time-consuming-calls) + + + + + +A common question is: Should I apply segmentation by breaking out performance into cohorts, such as region and device type? It depends on your needs, but segmentation is a good idea if: +* Your organization wants to address a target audience from a particular cohort that you can segment by using either custom attributes or data that is already available in New Relic. +* You're already familiar with bottom-of-the-funnel analysis and there's a significant enough difference in performance among different cohorts to warrant tracking and/or developer focus. + + +### Best practices going forward [#best-practices] + +Maintaining a high quality of your bottom-of-the-funnel is an ongoing process, and it's a good idea to make routine analysis and adjustments to ensure your conversion rate is optimal. Your needs will be unique to your organization, and the procedure you use will reflect that. The procedure may also change as your needs change over time. However, you can keep the following suggestions in mind: + +* Revisit performance metrics at the end of each sprint. +* Any time the user journey changes, revisit if the bottom-of-the-funnel steps are the same. Incorporate changes in developer sprints as needed. +* Openly share metrics with the lines of the business you support as well as other internal stakeholders. +* Revisit your customer experience SLOs. Do you need to define more ambitious SLOs for the end of the funnel? +* [Create alerts](/docs/tutorial-create-alerts/create-new-relic-alerts/) for business critical drops in quality foundation KPIs. \ No newline at end of file diff --git a/src/content/docs/tutorial-customer-experience/establish-current-state.mdx b/src/content/docs/tutorial-customer-experience/establish-current-state.mdx new file mode 100644 index 00000000000..f79f6d3246b --- /dev/null +++ b/src/content/docs/tutorial-customer-experience/establish-current-state.mdx @@ -0,0 +1,169 @@ +--- +title: "Establish your current state" +metaDescription: "New Relic observability maturity series: this guide gives you a quality foundation for optimizing your web application's performance to improve your customer experience." +redirects: +--- + +import cxSegmentWhitelistInvestigation from 'images/cx_screenshot-full_segment-whitelist-investigation.webp' + +import cxQfDashboard from 'images/cx_screenshot-full_qf-dashboard.webp' + +import cxQfKpiProgress from 'images/cx_diagram_qf_kpi_progress.webp' + +You want to improve your digital experience, but how do you know if you've improved it or not? First, you need to know your baseline performance so you have something to compare your future data to. Once you check to make sure everything you need is reporting correctly to our platform, you can validate your information and use our quality foundation dashboard to measure your customer experience. + + + + +### Review instrumented pages [#review-instrument] + +Our browser monitoring tools are a great way to monitor your app data, and so the best place to start with improving your digital experience is reviewing your browser dashboards. First, you'll need to review your browser apps and pages to make sure that everything you expect to report to New Relic is actually doing so. You can do this by reviewing the **Page Views** tab in the browser monitoring UI for each app you're ingesting or by running the following NRQL query: + +``` +SELECT uniques(pageUrl) from PageView LIMIT MAX +``` + + +New to NRQL? Check out our [introduction to NRQL](/docs/query-your-data/nrql-new-relic-query-language/get-started/introduction-nrql-new-relics-query-language/) to learn about how to use our custom query language to help maximize your data! + + + + +### Validate browser URL grouping [#validate-grouping] + +After you've made sure that your instrumented pages report their data correctly in the previous step, it's time to ensure browser segments are captured correctly so that you can better parse the data that you're using to improve your customer experience. If you're unfamiliar with segments, they're simply the text between two `/`s in a URL or the `.`s of a domain name. + +When you have a lot of URLs with a lot of segments, you can abridge them so that `website.com/product/widget-name` becomes `website.com/` or `website.com/product/`. While the first version does work, the second version is a more useful way of grouping customer experience data for the product because it allows for more segments in the data. + + +Not sure whether you need to tune your configuration? Import the [Segment allow-list investigation dashboard](https://newrelic.com/instant-observability/browser-segment-investigation/eb24e234-90aa-4908-972d-64d6d56b557e) to help. + + +Segment allow-list (aka white-list) investigation + +Once you've identified all your segments, use the [Segment allow-lists in browser](/docs/browser/new-relic-browser/configuration/group-browser-metrics-urls/#adding) to add them, which will enable you to create more easily understood segments. + + +### Understand how to segment your data [#understand-segment] + +Now that you've validated your browser URL grouping, you can make your customer experience data easier to understand by breaking it out into different segments. Unlike the previous step, segments here don't refer to sections of URLs (as in the [segment allow lists](https://docs.newrelic.com/docs/browser/new-relic-browser/configuration/group-browser-metrics-urls/#adding)), but instead refer to groups of data. + +You can use segments to group your data in different ways. For example: +* Most of the users in the US, Canada, and EMEA experience 2 seconds or better to first input delay, while users in Malaysia and Indonesia experience 4 seconds. Grouping your segments by geographical location would give you this insight. +* Customers buying car insurance typically see 1 second to largest contentful paint. For home insurance, it's 4 seconds. +* In one week, there can be 700,000 page views on mobile browser apps compared to 300,000 on desktop. + +Here are popular and useful categories to segment your data: + + + +**Basic:** Group by country. Browser events automatically contain the country code of requests, so there's nothing you need to do to break it out further. + +**Advanced:** Make regional grouping match regional SLO groups by creating your own region attribute using [custom attributes](/docs/telemetry-data-platform/custom-data/custom-events/report-browser-monitoring-custom-events-attributes/) in browser monitoring. + +Facet by `countryCode`. + +Related attributes: +* `regionCode` +* `city` +* `asnLatitude` +* `asnLongitude` + + +Break out performance and engagement device type so you can understand: + +* Typical breakdown of desktop vs mobile browser users +* Experience of desktop vs mobile browser users + +Facet by `deviceType`. + +Related attributes: +* `userAgentName` +* `userAgentOS` +* `userAgentVersion` + + +When a product is a separate line of business or service provided by an organization. Some examples of industries and respective products: + +* An insurance company that sells both car and house insurance. +* A media company that has multiple streaming services or channels. +* A travel company that provides car rental as well as hotel bookings. + +**Basic:** Break out performance by product by: +* Faceting on `pageUrl`: Use this approach when you group multiple products into one browser app in New Relic. +* Faceting by `appName`: Use this approach when you instrument each product as a separate web app. +* Grouping by `appName` and then facet: Use this approach when you hsbr multiple apps in browser supporting one product. + +**Advanced:** Add product offerings as custom attributes to browser pages using [custom attributes](/docs/telemetry-data-platform/custom-data/custom-events/report-browser-monitoring-custom-events-attributes). + + +A naming convention that specifies the environment for browser apps during or after instrumentation . Well named browser apps specify products and/or functions as well as environment. Examples: +* `account-management.prod` +* `hotels-book.prod` +* `car-insurance.uat` + +Use app naming conventions to note that the environment supports filtering data in both the UI and in dashboards. For more information, see our docs for [how to rename browser apps](/docs/browser/new-relic-browser/configuration/rename-browser-apps/). + + +In some organizations, a single team supports multiple products, while in others, a product is big enough to be supported by multiple teams. Report on team performance against customer experience or engagement by either adding the team name to the browser app name in New Relic (for example, `account-management.prod.unicorn-squad`) or by using [custom attributes](/docs/telemetry-data-platform/custom-data/custom-events/report-browser-monitoring-custom-events-attributes). + + + + +### Import the quality foundation dashboard [#import-dashboard] + +Customer experience quality foundation dashboard + +The next step is to create a dashboard you can use to measure and improve your customer experience against your baseline performance. To do this: + +1. Go to the [Quality foundation quickstart](https://newrelic.com/instant-observability/customer-experience-quality-foundation/7a5739bf-30ee-4be9-9705-14871cafd7f4). +2. Follow the instructions in the quickstart to install the dashboard. +3. Use the [provided guide](https://github.com/newrelic/newrelic-quickstarts/tree/main/quickstarts/oma-qf#readme) to customize it to fit how you plan to segment the data. + + +Make sure to align the dashboard to lines of business or customer-facing offerings rather than to teams to maximize the impact of your optimization! + + + +### Capture current performance for each dashboard page [#capture-performance] + +Capture current performance for each dashboard page +The last step in establishing your current state is to capture your current performance from the dashboard pages. To do this: + +1. Follow the instructions on our [Quality foundation GitHub README](https://github.com/newrelic/oma-resource-center/tree/main/src/content/docs/oma/value-drivers/customer-experience/use-cases/quality-foundation), which walk you through the segment allow list and quality foundation dashboard. +2. Use the dashboard from the previous step to understand the overall performance for each line of business. If relevant, apply filters to see performance across region or device. If values drop below targets and it matters, add it to the sheet as a candidate for improvement. Examples of tracking-value: + * Not worth tracking: A company that sells insurance in the US only notices poor performance in Malaysia. + * Worth tracking: A company that sells insurance in the US only notices poor performance with respect to mobile users in the US. + + + + diff --git a/src/content/docs/tutorial-customer-experience/improve-customer-experience.mdx b/src/content/docs/tutorial-customer-experience/improve-customer-experience.mdx new file mode 100644 index 00000000000..0ecc7259c4e --- /dev/null +++ b/src/content/docs/tutorial-customer-experience/improve-customer-experience.mdx @@ -0,0 +1,109 @@ +--- +title: "Improve your customer experience" +metaDescription: "New Relic observability maturity series: this guide gives you a quality foundation for optimizing your web application's performance to improve your customer experience." +redirects: +--- + +After you've [established the current state of your digital experience's performance](/docs/tutorial-customer-experience/establish-current-state/), it's time to take the information you've gathered and use it to start improving your customer experience. Since your needs can vary, only you can know what areas you may need to improve. The following steps are a suggested order to use for improving your customers' experience, and you can focus your attention on what's most relevant to you and skip what isn't. As this is a continuing process, we recommend you bookmark this page so that you can refer to it in the future as your KPIs change. + +After you [establish your current state](/docs/tutorial-customer-experience/establish-current-state/), you know what your user experience looks like across your system. From there, you need to determine which of the following areas need to improve: + +1. **Start with business priorities:** If you have clear business directives, you should focus on what matters most to your organization. For example, if your company has recently launched a new initiative around a line of business but the KPIs associated with the UI are below target, this is a great place to focus your efforts. +2. **Align your data to your KPIs:** Your key performance indicators provide insight on the various aspects of your system that act as pain points for your customers. Take that data and compare it to your KPIs so you can see where you need to improve. +3. **Filter each segment:** Take each of your segments that you created in the previous doc and group them to see if you need to focus more on specific regions, devices, or any other helpful grouping. + +### Improve targeted KPIs [#improve-kpi] + +To track your progress, create a new dashboard (or add a new page to the existing dashboard) and name it `Quality Foundation KPI Improvement`. For more information, see [Improve web uptime](/docs/new-relic-solutions/observability-maturity/customer-experience/cx-improve-web-uptime). + +### Improve page load performance [#improve-performance] + +Once you've created the quality foundation dashboard, it's time to narrow your focus to the specific pages that aren't meeting target KPI values. + +For each page load KPI result that's reporting as poor on the quality foundation dashboard, remove the `COMPARE WITH` clause and add `FACET pageUrl/targetGroupedUrl LIMIT MAX` to find which pages are the poor performers. Use `targetGroupedUrl` when there are many results, such as when the customer ID is part of the URL. Otherwise, use `pageUrl`. + +Original dashboard query: + +``` +FROM PageViewTiming SELECT percentile(largestContentfulPaint, 75) WHERE appName ='WebPortal' AND pageUrl LIKE '%phone%' SINCE 1 week AGO COMPARE WITH 1 week AGO +``` + +New query to identify problem pages: + +``` +FROM PageViewTiming SELECT percentile(largestContentfulPaint, 75) WHERE appName ='WebPortal' AND pageUrl LIKE '%phone%' FACET targetGroupedUrl LIMIT MAX +``` + +Once you've identified pages to improve, see the guidance in [Improve page load performance](/docs/new-relic-solutions/observability-maturity/customer-experience/cx-improve-page-load). + +### Improve AJAX response times [#improve-ajax-response] + +After locating and fixing any insufficient page load times, AJAX response times are a great place to move on to next. To find slow AJAX response times: + +1. Go to the AJAX duration widget on the dashboard. +2. Select **View query**, then open in query builder. +3. Add `facet requestUrl LIMIT MAX` to the end of the query. +4. Run the query. +5. View the results as a table and save to your KPI improvement dashboard as `LOB - AjaxResponseTimes`. +6. Focus improving requests with a `timeToSettle` \> 2.5s. + +For more information on improving your AJAX requests, check out our [AJAX troubleshooting tips](/docs/browser/browser-monitoring/browser-pro-features/ajax-page-identify-time-consuming-calls/). + +### Improve the AJAX error rate [#improve-ajax-error] + +After identifying and improving your AJAX response times, you should move on to improving the error rate as well since you're already dealing with AJAX. To find the failing requests: + +1. Go to > Query builder. +2. Enter and run the following query: + ``` + FROM AjaxRequest + SELECT percentage(count(*), WHERE httpResponseCode >= 400) + WHERE httpResponseCode >= 200 AND + SINCE 1 week AGO facet pageUrl, appName + ``` +3. View the results as a table and save to your KPI improvement dashboard as `LOB - Pages with AjaxErrors`. +4. Run the query again for the most problematic pages to find the requests that are failing: + ``` + FROM AjaxRequest + SELECT percentage(count(*), WHERE httpResponseCode >= 400) + WHERE httpResponseCode >= 200 AND pageUrl=PROBLEMATIC_PAGE AND appName = YOUR_APP_NAME + SINCE 1 week AGO facet requestUrl + ``` +Once you've successfully identified any insufficient AJAX error rates, see our [AJAX troubleshooting tips](/docs/browser/browser-monitoring/browser-pro-features/ajax-page-identify-time-consuming-calls) for more information on how you can improve your response times. + +### Improve JavaScript errors [#improve-java] + +To wrap up your improvement process, you should focus on fixing excessive JavaScript errors. To find the most common failures: + +1. Go to > Query builder +2. Enter and run the following query: + ``` + FROM JavaScriptError + SELECT count(errorClass) + SINCE 1 week AGO WHERE + FACET transactionName, errorClass, errorMessage, domain + ``` +3. View the results as a table and save to your KPI improvement dashboard as `LOB - Javascript Errors`. +4. Use this information to figure out which errors need to be addressed. See our [JavaScript errors page: Detect and analyze errors](/docs/browser/new-relic-browser/browser-pro-features/javascript-errors-page-detect-analyze-errors/) doc for more information. +5. Remove third party errors that don't add value. + + +You may be using a third party JavaScript that's noisy but works as expected. You can take a couple of approaches: +* Remove the domain name from the JavaScript error/Pageview ratio widget and add it as its own widget so you can see unexpected changes. You can alert on this using [Anomaly NRQL](/docs/alerts-applied-intelligence/new-relic-alerts/alert-conditions/create-baseline-alert-conditions/) alerts. +* Drop the JavaScript error using [drop filters](/docs/logs/log-management/ui-data/drop-data-drop-filter-rules). Only use this option if the volume of errors is impacting your data ingest in a significant way. Be as specific as you can in the drop filter. + + +## Moving forward [#movingforward] + +After you've followed the procedure above, it's a good idea to revisit your KPIs regularly to ensure that your customer experience is always of adequate quality. Each organization will have different needs, and so the procedures you use will be unique to your organzation. However, you can keep the following suggestions in mind: + +* Revisit performance metrics at the end of each sprint. +* Incorporate performance improvements into developer sprints. +* Openly share metrics with the lines of the business you support as well as other internal stakeholders. +* Define customer experience SLOs. +* [Create alerts](/docs/tutorial-create-alerts/create-new-relic-alerts/) for business critical drops in quality foundation KPIs. + + \ No newline at end of file diff --git a/src/content/docs/tutorial-customer-experience/intro-to-customer-experience.mdx b/src/content/docs/tutorial-customer-experience/intro-to-customer-experience.mdx new file mode 100644 index 00000000000..37b3da65a94 --- /dev/null +++ b/src/content/docs/tutorial-customer-experience/intro-to-customer-experience.mdx @@ -0,0 +1,51 @@ +--- +title: "Improve your customers' digital experience with New Relic" +metaDescription: "New Relic observability maturity series: this guide gives you a quality foundation for optimizing your web application's performance to improve your customer experience." +redirects: + - /docs/new-relic-solutions/observability-maturity/qf-implementation-guide + - /docs/new-relic-solutions/observability-maturity/customer-experience/quality-foundation-implementation-guide + - /docs/new-relic-solutions/observability-maturity/customer-experience/customer-experience-quality-foundation-guide +--- + +import cxWhatYouCanMeasureNr from 'images/cx_diagram_what-you-can-measure-nr.webp' + +Digital customer experience refers to the quality of how your users interact with your service across all your digital touch points (web, mobile, and IoT). But there's a lot you need to keep track of: you need to manage the availability of your service, its performance to ensure that it's usable, the quality of the content that gives users the information they need, and the relevance of your products and content so that users remain engaged. + +New Relic helps you measure and improve the performance of your digital experience. This tutorial gives you direction on how to do the following to improve this experience in a meaningful way: + +* Look at customer experience in relation to global functions, lines of business, and regions +* Report back to business stakeholders on what they care about +* Prioritize what to improve next + +Digital customer experience + +## Requirements [#requirements] + +Before you begin, you should have a few specific parts of our platform up and running. These include: + +* [The Browser Pro agent version installed on all pages](/docs/browser/browser-monitoring/installation) +* [SPA enabled for AJAX settle times and distributed tracing](/docs/new-relic-solutions/best-practices-guides/full-stack-observability/browser-monitoring-best-practices-guide/#how-to-do-it) +* Synthetics monitors configured: + * [Ping monitors configured for anonymous users](/docs/synthetics/synthetic-monitoring/using-monitors/add-edit-monitors) + * [Scripted synthetics check configured for login flow](/docs/synthetics/synthetic-monitoring/using-monitors/store-secure-credentials-scripted-browsers-api-tests) + * You should configure monitors for each domain and each login flow + +It's also helpful to have some basic knowledge of: + +* [New Relic synthetic monitoring](/docs/synthetics/synthetic-monitoring/getting-started/get-started-synthetic-monitoring/) +* [New Relic browser monitoring](/docs/browser/browser-monitoring/getting-started/) +* [New Relic browser monitoring UI](/docs/browser/browser-monitoring/getting-started/introduction-browser-monitoring/) +* [New Relic SPA data in the browser monitoring UI](/docs/browser/single-page-app-monitoring/use-spa-data/view-spa-data-browser-ui/) + +## Getting started [#get-started] + + + Learn how to establish your current state to create your baselines + Learn how to use the data from your current state to make improvements + Learn how to analyze the end of a customer experience to improve your conversions + + diff --git a/src/content/docs/tutorial-kubernetes-learn/tutorial-k8s-intro.mdx b/src/content/docs/tutorial-kubernetes-learn/tutorial-k8s-intro.mdx new file mode 100644 index 00000000000..af4b6f1ad94 --- /dev/null +++ b/src/content/docs/tutorial-kubernetes-learn/tutorial-k8s-intro.mdx @@ -0,0 +1,143 @@ +--- +title: Understand your Kubernetes system with New Relic +--- + +import tutorialNavigator from 'images/kubernetes_screenshot-full_navigator-main.webp' + +import tutorialInstall from 'images/kubernetes_screenshot-full_guidedInstall.webp' + +import k8sNavigatorAnimation from 'images/kubernetes_screenshot-full_navigator-animated.gif' + +import apmApmCompleteSummaryPage from 'images/apm_screenshot-full_apm-complete-summary-page-.webp' + +import infraComplete from 'images/infrastructure_screenshot-full_infra-main.webp' + + +A Kubernetes system is inherently complex and has a reputation as challenging to grasp. Understanding Kubernetes as a concept is a complex task by itself and wanting to understand an specific Kubernetes system only adds more complextiy. How do you troubleshoot ephemeral containers that spin up and down before you can even access them? How do you understand the health of your system as a whole if you have hundreds of containers orchestrated at a time? How do you parse out the intricate systems into functional layers? + +In this tutorial series, you will learn how to monitor your Kubernetes system with New Relic and how it can streamline your understanding of the Kubernetes as a whole. + + A screenshot showing the New Relic navigator for Kubernetes. It shows indivudual pods, their health, and operational groups. + +

+

+ +## Set up New Relic: + +To begin, you need to set up New Relic with your Kubernetes system. The steps below guide you though the process: + + + + +### Install New Relic agent: + +A screenshot showing guided install flow for Kubernetes in the New Relic UI. + +The New Relic Kubernetes integration gives you full observability into the health and performance of your environment. With the data it provides, you can monitor the health of your entire Kubernetes cluster or drill down to a single pod. This agent collects telemetry data from your cluster using several New Relic integrations such as the Kubernetes events integration, the Prometheus Agent, and the New Relic Logs Kubernetes plugin. + +There are various ways to integrate your Kubernetes system. For this tutorial series, we highly recommend using the guided install steps below. For other install paths, see [our Kubernetes install docs](/docs/kubernetes-pixie/kubernetes-integration/installation/kubernetes-integration-install-configure/). + +
+ + + + + + + + + + + + + + + + + + + + +
+ Guided install option + + Description +
+ [Guided install](https://one.newrelic.com/nr1-core?account=2498654&state=d1aae74b-0ad6-b0f3-093d-cc89ecf89234) + + Use this if your New Relic organization does **not** use the [EU](/docs/using-new-relic/welcome-new-relic/get-started/our-eu-us-region-data-centers) data center, and you don't need the bonus dashboards and alerts from the quickstart. +
+ [Guided install (EU)](https://one.eu.newrelic.com/nr1-core?account=2498654&state=d1aae74b-0ad6-b0f3-093d-cc89ecf89234) + + Use this if your New Relic organization uses the [EU](/docs/using-new-relic/welcome-new-relic/get-started/our-eu-us-region-data-centers) data center, and you don't need the bonus dashboards and alerts from the quickstart. +
+ [Guided install with quickstart](https://one.newrelic.com/launcher/catalog-pack-details.launcher/?pane=eyJuZXJkbGV0SWQiOiJjYXRhbG9nLXBhY2stZGV0YWlscy5jYXRhbG9nLXBhY2stY29udGVudHMiLCJxdWlja3N0YXJ0SWQiOiI4OGE3OWY1Mi04MWMxLTRmYTItOTlmOC0zY2I1YjAxMmYxNjAifQ==) + + Use this option if your New Relic organization does **not** use the [EU](/docs/using-new-relic/welcome-new-relic/get-started/our-eu-us-region-data-centers) data center, and you also want to install some bonus dashboards and alerts from the quickstart. +
+ + + + +Additionally, you can start monitoring Kubernetes clusters using our Auto-telemetry with Pixie. [Learn more about Auto-telemetry with Pixie here](/docs/kubernetes-pixie/auto-telemetry-pixie/get-started-auto-telemetry-pixie/). + + + +### Send data from your applications + +Kubernetes excels at abstracting the toil one runs into when managing containerized workloads. That abstraction adds complexity when correlating individual applications to their underlying infrastructure. To reduce this complexity, you can report data from your applications and services to New Relic and directly correlate them to their place within the Kubernetes cluster. + +A screenshot depicting the APM summary page. + +[Follow the instruction in this document](/docs/kubernetes-pixie/kubernetes-integration/advanced-configuration/link-apm-applications-kubernetes/) to correlate data from applications in your pods to the cluster. You will use our application performance monitoring (APM) capabilities to scrape your applications for performance data and send them to New Relic. + + + +### Send data from your services + +Correlating services such as Cassandra and MySQL with your Kubernetes data requires configuration similar to how you reported application data. + + + A screenshot showing the New Relic infrastructure monitoring UI. + +To correlate your data, see our doc on [monitoring services in Kubernetes](/docs/kubernetes-pixie/kubernetes-integration/advanced-configuration/monitor-services/monitor-services-running-kubernetes/). This process will use our on-host integrations for various supported services using a Helm Chart. + + + +### Explore your data + + New Relic - Kubernetes Navigator entity details + +To confirm you're sending all your Kubernetes related data to New Relic, explore the Kubernetes charts. Go to **[one.newrelic.com > All capabilities](https://one.newrelic.com/all-capabilities) > Kubernetes**. Poke around your data and see if you can get a general sense of the health of your Kubernetes system.Confirm you're seeing data for your entire cluster, individual pods, and any services and applications you expect. Once you're ready, proceed to the next steps. + + + + +## Next steps + +You're now sending Kubernetes data to New Relic! From here you can start using the power of New Relic to gauge the health of your system and understand how it's all working together by following the rest of this tutorial series. Each doc will dive into how New Relic can help monitor and understand an individual layer of Kubernetes. + + diff --git a/src/content/docs/tutorial-kubernetes-learn/tutorial-k8s-layers.mdx b/src/content/docs/tutorial-kubernetes-learn/tutorial-k8s-layers.mdx new file mode 100644 index 00000000000..24a0674d296 --- /dev/null +++ b/src/content/docs/tutorial-kubernetes-learn/tutorial-k8s-layers.mdx @@ -0,0 +1,133 @@ +--- +title: Understand and monitor Kubernetes clusters +--- + +import k8sDiagramContext from 'images/tutorials_diagram_kubernetes-overview.webp' + +import tutorialOverviewdashboard from 'images/tutorial_screenshot-full_overview-dashboard.webp' + +import tutorialOverviewDeployments from 'images/tutorial_screenshot-full_overview-deployments.webp' + +import tutorialOverviewFailed from 'images/tutorial_screenshot-crop_failed-pods.webp' + +import tutorialAPMOverview from 'images/tutorial_screenshot-full_apmK8s.webp' + +import tutorialAPMPerformance from 'images/tutorial_screenshot-full_apm-k8s-performance.webp' + +Let's review what makes up a Kubernetes system and explore how New Relic can help you understand your system at a cluster-wide level. + +## Break it apart to understand + +Let's break a Kubernetes system into distinct layers first. + +an image showing an abstracted view of a kubernetes system. This includes pods, apps, and clusters + +We'll discuss a Kubernetes system in three key sections. + + * **The cluster**: this represents the entire Kubernetes system. The cluster contains multiple deployments, which in turn house many pods. Each pod contains its individual services and applications. + + * **The orchestrated**: these are the core elements of a Kubernetes system. Orchestrated components consist of entire deployments that spin pods up and down as needed. + + * **The services and applications**: services and applications are the workhorses of the Kubernetes system. Within a Kubernetes system each pod houses one or more services and applications. The services and applications provide the essential functionality that drives the system. This could be computation, a web app, or any other application. + +It's important to note that these sections nest within each other. The cluster contains multiple orchestrated layers, and each orchestrated layer consists of multiple service and application layers. + + +There are many ways you can split up a Kubernetes system to understand it; these layers are just one way to think of your system. + + +## Understand and monitor the cluster layer + +In a large Kubernetes system, with numerous deployments and pods, manually monitoring each component becomes impractical. You might be dealing with dozens or hundred of deployments, which in turn means you might have to monitor hundreds or thousands of individual pods. New Relic offers a more efficient approach to oversee the entire system's health and receive timely alerts when issues arise. + +The following steps guide your through a general monitoring strategy for your cluster: + + + +### Go to the Kubernetes overview dashboard + +Go to **[one.newrelic.com > All capabilities](https://one.newrelic.com/all-capabilities) > Kubernetes > Overview Dashboard**. Be sure to scroll down to see all the graphs available to you. + +If you don't see any data, [make sure you set up your monitoring ](/docs/tutorial-kubernetes-learn/tutorial-k8s-intro/#install-new-relic-agent) in the previous tutorial. + + + +### Triage your cluster + +The Kubernetes overview dashboard shows your high level data about your cluster. You can find general data such as the count of pods and services, but more importantly you can find data about the health of your cluster such as the percent of pods running, the count of failed pods, the number of container restarts, and more. +The main overview dashboard for the kubernetes capability + + + +Use this dashboard to gauge the general health of your cluster. Here are a few things to look for: + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ Component + + What it indicates +
+Red or yellow tiles + +Yellow tiles are warnings. Keep an eye on what they refer to. For example, if you have 2 unhealthy deployments you should take note and plan to troubleshoot those deployments. + +Red tiles are critical alerts. These aren't necessarily failures in your system, but you should prioritize addressing them as immediately as possible. +
+Anomalous spikes in graphs + +there are various graphs that show things such as pending pods over time or even memory utilization over time. + +Spike are fairly normal, such as the spikes in the **Kubernetes Warning Events by Reason** graph in the screenshot above. These spikes happen regularly about every 5 minutes so they are no cause for concern. Look for spikes that happen outside of regular patterns or spike in a much larger magnitude than normal. +
+Node readiness + +Observe whether nodes in the cluster are ready and able to host pods. Ensure that your cluster's infrastructure is prepared to handle workloads without any bottlenecks. +
+Resource count insights + +Keep a close eye on the number of pods, containers, nodes, or other Kubernetes resources within the cluster. While you won't always find something actionable, monitoring resource utilization allows you to plan for future scaling. +
+ +Use the time selector in the top left of the page to see your data across time ranges to verify any troubling data isn't just random or to triage across a longer timeframe. + +
+
+ + + + diff --git a/src/content/docs/tutorial-kubernetes-learn/tutorial-k8s-orchestrated.mdx b/src/content/docs/tutorial-kubernetes-learn/tutorial-k8s-orchestrated.mdx new file mode 100644 index 00000000000..8f96e1e3c77 --- /dev/null +++ b/src/content/docs/tutorial-kubernetes-learn/tutorial-k8s-orchestrated.mdx @@ -0,0 +1,61 @@ +--- +title: Understand and monitor the Kubernetes orchestrated layer +--- + +import tutorialOverviewdashboard from 'images/tutorial_screenshot-full_overview-dashboard.webp' + +import tutorialOverviewFailed from 'images/tutorial_screenshot-crop_failed-pods.webp' + +Orchestrated components consist of entire deployments that spin pods up and down as needed. In a Kubernetes system, individual deployments have specific configurations. For example, a deployment might run four instances of an application in individual containers. The deployment will spin up pods containing that application until it meets that quota. If a pod were to fail, it would spin up a new one to continue to meet the specified number. + +Issues arise when deployments you have dozens or hundreds of deployments, each with configurations you might not even remember. + +The following steps guide you through a general strategy to monitor your deployments: + + + + +### Navigate to the overview dashboard + +Go to **[one.newrelic.com > All capabilities](https://one.newrelic.com/all-capabilities) > Kubernetes > Overview Dashboard**. + + + +### Triage your deployments + +Take a look at the unhealthy deployment tile and the deployment count tile. + +Compare the two to measure the percentage of unhealthy deployments in your cluster. Unhealthy deployments have missing or unavailable pods. This usually means that the deployment was unable to spin up those pods. + +Let's take a close look. + +The main overview dashboard for the kubernetes capability + + + + +### Identify pending and failed pods + +Scroll down a bit and find the **Pending and Failed Pods** table. This table will show you all the pods that have failed or are stuck pending for whatever reason. It's normal that pods fail at to a certain degree depending on the baseline health of your system. + +What you're looking for is pods that repeatedly fail. Scroll down the chart as needed. + +The main overview dashboard for the kubernetes capability focusing on the failed pods section + +Once you've identified which pods fail regularly, troubleshoot the deployment configs for those pods. + + + + + \ No newline at end of file diff --git a/src/content/docs/tutorial-kubernetes-learn/tutorial-k8s-services.mdx b/src/content/docs/tutorial-kubernetes-learn/tutorial-k8s-services.mdx new file mode 100644 index 00000000000..aa535def224 --- /dev/null +++ b/src/content/docs/tutorial-kubernetes-learn/tutorial-k8s-services.mdx @@ -0,0 +1,68 @@ +--- +title: Understand and monitor the service and application layer +--- + +In your kubernetes system, each pod contains services and applications that provide the actual functionality that your kubernetes system supports. The system could support computation, a web app, or anything inbetween. + +Your system might be healthy as a whole, but individual applications and services might fail or throw errors. The following steps guide you through a general strategy to monitor and triage your applications and services: + + + + +### Navigate to the APM Kubernetes dashboard + +Go to **[one.newrelic.com > All capabilities](https://one.newrelic.com/all-capabilities) > APM & Services > select your application > Kubernetes**. + + + +### Triage your application + +This page shows you a general overview of all the instances of that application within your Kubernetes cluster. There are various useful charts and graphs here, but take a close look at the activity stream on the far right. This will highlight any important performance events of those applications. Increase the time range as necessary to gather a full view of the performance history. + + Only you can decide what's acceptable, but multiple events a day indicates you could improve performance. For example, in the image above there are multiple Apdex warnings within just a few hours. [Apdex warnings indicate a degraded user experience](/docs/apm/new-relic-apm/apdex/apdex-measure-user-satisfaction/). + +The main overview dashboard for an APM service in a Kubernetes cluster + + +### Identify the cause of performance issues + +Scroll down until you see four graphs. On the top left of each graph, select the dropdown and set the graphs to the following: +* Service error rate +* Service throughput +* Service response time +* Container restart count + +The main overview dashboard for an APM service in a Kubernetes cluster + +The first three graphs will show you the health of your applications. The restart count graph helps you correlate if your performance has any affect on your general pod health. + +In the screenshot above we can note a few things: +* The error rate stays at zero, which means errors are not affecting performance +* The service throughput spikes extremely often +* The service response time regularly fluctutes close to 70ms +* The container restart graph stays at zero, which means the performance of my applications is not causing critical failures in my cluster + +In this case, you can identify throughput and response time as the key indicators of your degraded performance. There are many ways to solve these from optimizing the application itself or just throwing more CPU power at the containers hosting the application. + + + + +## What's next? + +Now that you've learned how to use New Relic to monitor Kubernetes, you can explore our other tutorials: + +* Is your app running slow? Learn how to triage and diagnose latency in your app with our [My app is slow](docs/tutorial-app-slow/root-causes) tutorial. +* If you have a peak demand day coming up, learn how New Relic can help you with [capacity planning](/docs/tutorial-peak-demand/get-started). +* Do you want to create high quality alerts? Our [alerts tutorial](/docs/tutorial-create-alerts/create-new-relic-alerts/) can help you set up an alerting system. + + \ No newline at end of file diff --git a/src/content/docs/tutorial-optimize-telemetry/detect-anomalies.mdx b/src/content/docs/tutorial-optimize-telemetry/detect-anomalies.mdx index 803f9464783..5daab09f776 100644 --- a/src/content/docs/tutorial-optimize-telemetry/detect-anomalies.mdx +++ b/src/content/docs/tutorial-optimize-telemetry/detect-anomalies.mdx @@ -134,19 +134,6 @@ Answering the following questions will help you develop confidence in your abili - -| Questions | -| ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | -| | -| | -| | -| | -| | -| | -| | -| | -| | -
diff --git a/src/content/docs/tutorial-optimize-telemetry/intro-to-optimal-telemetry.mdx b/src/content/docs/tutorial-optimize-telemetry/intro-to-optimal-telemetry.mdx index fd86e83eb90..f60d056ad0e 100644 --- a/src/content/docs/tutorial-optimize-telemetry/intro-to-optimal-telemetry.mdx +++ b/src/content/docs/tutorial-optimize-telemetry/intro-to-optimal-telemetry.mdx @@ -33,6 +33,205 @@ This is where **Data ingest governance**, or the practice of ensuring optimal va You'll need to make sure that you have data managed with New Relic so that you can use **data ingest governance** to optimize it. See our [data management doc](/docs/data-apis/manage-data/manage-your-data/) if you need more information. + + +All billable telemetry is tracked with our `NrConsumption` and `NrMTDConsumption` events. This guide focuses on how to query `NrConsumption`, which provides more granular, real-time data than `NrMTDConsumption`. The `NrConsumption` attribute `usageMetric` denotes the telemetry type. + +Using `NrConsumption`, you can ask questions like "How much browser monitoring data has each account ingested in the last 30 days?" and "How has the ingest changed since the previous 30 days?" Here's a query returning that data: + +```sql +FROM NrConsumption SELECT sum(GigabytesIngested) WHERE usageMetric = 'BrowserEventsBytes' SINCE 30 days AGO COMPARE WITH 30 days AGO FACET consumingAccountName +``` + +The response shows you how many GBs of browser monitoring data you've ingested by account. + +```shell +Banking platform, 75 GB, +2.9% +Marketing platform, 40 GB, -1.3% +``` + +Below is a breakdown of the different `usageMetric` types, the constituent events (event types where the data is stored), and the type of agent or mechanism responsible for creating the data ingest. + +### Billable telemetry breakdown table + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ NrcConsumption.usageMetric + + Constituent events + + Source +
+ InfraHostBytes + + `SystemSample`, `StorageSample`, `InfrastructureEvent`, `NetworkSample` + + Infrastructure agent +
+ InfraProcessBytes + + `ProcessSample` + + Infrastructure agent +
+ InfraIntegrationBytes + + Various events for third party platform integrations as well as `ContainerSample` + + [On-host integrations](/docs/infrastructure/host-integrations/get-started/introduction-host-integrations/) and certain [cloud integrations](/docs/infrastructure/infrastructure-integrations/get-started/introduction-infrastructure-integrations/#cloud) +
+ ApmEventsBytes + + `Transaction`, `TransactionError`, and possibly `WorkloadStatus` + + APM agent(s) +
+ TracingBytes + + `Span`, `SpanEvent` + + APM agent(s) and OpenTelemetry +
+ BrowserEventsBytes + + `Browser`, `BrowserInteraction`, `Browser:EventLog`, `Browser:JSErrors`, `JavaScriptError`, `PageView`, `PageViewTiming`, `PcvPerf` + + Browser agent +
+ MobileEventsBytes + + `Mobile`, `MobileReqest`, `MobileRequestError`, `MobileSession`, `MobileHandleException`, `MobileCrash` + + Mobile agent +
+ SeverlessBytes + + Cloud-specific (i.e., AWS Lambda events) + + Cloud-specific (i.e., AWS Lambda integration) +
+ LoggingBytes + + `Log` as well as partition-specific events of the pattern `[partition].Log` + + Various (Fluentd, FluentBit, Syslog, cloud-specific streaming services) +
+ MetricEventBytes + + `Metric` + +From the Metric API and integrations that use that ([dimensional metrics](/docs/data-apis/understand-data/new-relic-data-types/#dimensional-metrics)), or from agents such as browser agent, APM agent, or mobile agent ([metric timeslice data](/docs/data-apis/understand-data/new-relic-data-types/#timeslice-data)). +
+ CustomEventBytes + + Various + + Various APIs. [Use `SHOW EVENT TYPES` to view all event types available in an account](#show-event-types). +
+
+ You'll also need to ensure that you or your team have the ability to track and manage: * Working with a manager to stay within monthly ingest targets, if applicable. diff --git a/src/i18n/content/jp/docs/mobile-monitoring/new-relic-mobile/mobile-sdk/record-breadcrumb.mdx b/src/i18n/content/jp/docs/mobile-monitoring/new-relic-mobile/mobile-sdk/record-breadcrumb.mdx index f596641f12c..abfe2018e3d 100644 --- a/src/i18n/content/jp/docs/mobile-monitoring/new-relic-mobile/mobile-sdk/record-breadcrumb.mdx +++ b/src/i18n/content/jp/docs/mobile-monitoring/new-relic-mobile/mobile-sdk/record-breadcrumb.mdx @@ -562,7 +562,7 @@ translationType: machine ## 例 [#example] ```dart - NewrelicMobile.instance.recordBreadcrumb("Button Got Pressed on Screen 3"), + NewrelicMobile.instance.recordBreadcrumb("Button Got Pressed on Screen 3"); ``` diff --git a/src/i18n/content/kr/docs/mobile-monitoring/new-relic-mobile/mobile-sdk/record-breadcrumb.mdx b/src/i18n/content/kr/docs/mobile-monitoring/new-relic-mobile/mobile-sdk/record-breadcrumb.mdx index c574879410f..afa7c93396c 100644 --- a/src/i18n/content/kr/docs/mobile-monitoring/new-relic-mobile/mobile-sdk/record-breadcrumb.mdx +++ b/src/i18n/content/kr/docs/mobile-monitoring/new-relic-mobile/mobile-sdk/record-breadcrumb.mdx @@ -562,7 +562,7 @@ translationType: machine ## 예시 [#example] ```dart - NewrelicMobile.instance.recordBreadcrumb("Button Got Pressed on Screen 3"), + NewrelicMobile.instance.recordBreadcrumb("Button Got Pressed on Screen 3"); ``` diff --git a/src/images/cx_diagram_what-you-can-measure-nr.webp b/src/images/cx_diagram_what-you-can-measure-nr.webp index b3526b2dae6..b332a1574d9 100644 Binary files a/src/images/cx_diagram_what-you-can-measure-nr.webp and b/src/images/cx_diagram_what-you-can-measure-nr.webp differ diff --git a/src/images/infrastructure_screenshot-full_infra-main.webp b/src/images/infrastructure_screenshot-full_infra-main.webp new file mode 100644 index 00000000000..a1223abd170 Binary files /dev/null and b/src/images/infrastructure_screenshot-full_infra-main.webp differ diff --git a/src/images/kubernetes_screenshot-full_guidedInstall.webp b/src/images/kubernetes_screenshot-full_guidedInstall.webp new file mode 100644 index 00000000000..af5446c0b62 Binary files /dev/null and b/src/images/kubernetes_screenshot-full_guidedInstall.webp differ diff --git a/src/images/kubernetes_screenshot-full_navigator-main.webp b/src/images/kubernetes_screenshot-full_navigator-main.webp new file mode 100644 index 00000000000..ffedfa01085 Binary files /dev/null and b/src/images/kubernetes_screenshot-full_navigator-main.webp differ diff --git a/src/images/tutorial_screenshot-crop_failed-pods.webp b/src/images/tutorial_screenshot-crop_failed-pods.webp new file mode 100644 index 00000000000..adf54ae7d42 Binary files /dev/null and b/src/images/tutorial_screenshot-crop_failed-pods.webp differ diff --git a/src/images/tutorial_screenshot-full_apm-k8s-performance.webp b/src/images/tutorial_screenshot-full_apm-k8s-performance.webp new file mode 100644 index 00000000000..981648d61dc Binary files /dev/null and b/src/images/tutorial_screenshot-full_apm-k8s-performance.webp differ diff --git a/src/images/tutorial_screenshot-full_apmK8s.webp b/src/images/tutorial_screenshot-full_apmK8s.webp new file mode 100644 index 00000000000..68b1506d676 Binary files /dev/null and b/src/images/tutorial_screenshot-full_apmK8s.webp differ diff --git a/src/images/tutorial_screenshot-full_overview-dashboard.webp b/src/images/tutorial_screenshot-full_overview-dashboard.webp new file mode 100644 index 00000000000..aad09f6932c Binary files /dev/null and b/src/images/tutorial_screenshot-full_overview-dashboard.webp differ diff --git a/src/images/tutorial_screenshot-full_overview-deployments.webp b/src/images/tutorial_screenshot-full_overview-deployments.webp new file mode 100644 index 00000000000..969438cf49d Binary files /dev/null and b/src/images/tutorial_screenshot-full_overview-deployments.webp differ diff --git a/src/images/tutorials_diagram_kubernetes-overview.webp b/src/images/tutorials_diagram_kubernetes-overview.webp new file mode 100644 index 00000000000..6d51fa97bb5 Binary files /dev/null and b/src/images/tutorials_diagram_kubernetes-overview.webp differ diff --git a/src/nav/kubernetes-pixie.yml b/src/nav/kubernetes-pixie.yml index 0d3a7183a71..e3c54fba19a 100644 --- a/src/nav/kubernetes-pixie.yml +++ b/src/nav/kubernetes-pixie.yml @@ -21,6 +21,8 @@ pages: path: /docs/kubernetes-pixie/kubernetes-integration/installation/install-kubernetes-integration-windows - title: Upgrading the Kubernetes integration path: /docs/kubernetes-pixie/kubernetes-integration/installation/upgrading-kubernetes + - title: Uninstall Kubernetes integration + path: /docs/kubernetes-pixie/kubernetes-integration/uninstall-kubernetes - title: Understand and use data pages: - title: Explore your Kubernetes cluster @@ -65,8 +67,6 @@ pages: path: /docs/kubernetes-pixie/kubernetes-integration/advanced-configuration/monitor-services/monitor-services-running-kubernetes - title: 'Tutorial: Monitor services on Kubernetes with Redis' path: /docs/kubernetes-pixie/kubernetes-integration/advanced-configuration/monitor-services/tutorial-monitor-redis-running-kubernetes - - title: Uninstall Kubernetes integration - path: /docs/kubernetes-pixie/kubernetes-integration/uninstall-kubernetes - title: Troubleshooting pages: - title: Not seeing data diff --git a/src/nav/root.yml b/src/nav/root.yml index 02ca38a9309..61b85e71b89 100644 --- a/src/nav/root.yml +++ b/src/nav/root.yml @@ -17,10 +17,14 @@ pages: path: tutorial-large-logs - title: Prepare for peak demand path: tutorial-peak-demand + - title: Understand Kubernetes + path: tutorial-understand-k8s - title: Migrate from Datadog path: tutorial-dd-migration - title: Optimize your telemetry data path: tutorial-data-ingest-gov + - title: Improve your customer experience + path: tutorial-customer-experience - title: Guides and best practices path: new-relic-solutions - title: Monitor your data diff --git a/src/nav/tutorial-customer-experience.yml b/src/nav/tutorial-customer-experience.yml new file mode 100644 index 00000000000..67f1c62d59d --- /dev/null +++ b/src/nav/tutorial-customer-experience.yml @@ -0,0 +1,11 @@ +title: Improve your customer experience +path: /docs/tutorial-customer-experience +pages: + - title: Introduction to customer experience + path: /docs/tutorial-customer-experience/intro-to-customer-experience + - title: 1. Establish your current state + path: /docs/tutorial-customer-experience/establish-current-state + - title: 2. Improve your customer experience + path: /docs/tutorial-customer-experience/improve-customer-experience + - title: 3. Analyze the bottom of the funnel + path: /docs/tutorial-customer-experience/bottom-funnel-analysis \ No newline at end of file diff --git a/src/nav/tutorial-understand-k8s.yml b/src/nav/tutorial-understand-k8s.yml new file mode 100644 index 00000000000..e90cfc26eee --- /dev/null +++ b/src/nav/tutorial-understand-k8s.yml @@ -0,0 +1,11 @@ +title: Understand and monitor Kubernetes +path: /docs/kubernetes-pixie +pages: + - title: Understand your Kubernetes system + path: /docs/tutorial-kubernetes-learn/tutorial-k8s-intro + - title: Monitor Kubernetes clusters + path: /docs/tutorial-kubernetes-learn/tutorial-k8s-layers + - title: Monitor Kubernetes orchestrated components + path: /docs/tutorial-kubernetes-learn/tutorial-k8s-orchestrated + - title: Monitor Kubernetes services and apps + path: /docs/tutorial-kubernetes-learn/tutorial-k8s-services diff --git a/yarn.lock b/yarn.lock index a9b70bffa60..391c7c91769 100644 --- a/yarn.lock +++ b/yarn.lock @@ -5244,6 +5244,11 @@ adm-zip@^0.5.1: resolved "https://registry.yarnpkg.com/adm-zip/-/adm-zip-0.5.9.tgz#b33691028333821c0cf95c31374c5462f2905a83" integrity sha512-s+3fXLkeeLjZ2kLjCBwQufpI5fuN+kIGBxu6530nVQZGVol0d7Y/M88/xw9HGGUcJjKf8LutN3VPRUBq6N7Ajg== +adm-zip@^0.5.2: + version "0.5.10" + resolved "https://registry.yarnpkg.com/adm-zip/-/adm-zip-0.5.10.tgz#4a51d5ab544b1f5ce51e1b9043139b639afff45b" + integrity sha512-x0HvcHqVJNTPk/Bw8JbLWlWoo6Wwnsug0fnYYro1HBrjxZ3G7/AZk7Ahv8JwDe1uIcz8eBqvu86FuF1POiG7vQ== + agent-base@6: version "6.0.2" resolved "https://registry.yarnpkg.com/agent-base/-/agent-base-6.0.2.tgz#49fff58577cfee3f37176feab4c22e00f86d7f77" @@ -5325,6 +5330,11 @@ ansi-regex@^5.0.1: resolved "https://registry.yarnpkg.com/ansi-regex/-/ansi-regex-5.0.1.tgz#082cb2c89c9fe8659a311a53bd6a4dc5301db304" integrity sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ== +ansi-styles@^2.2.1: + version "2.2.1" + resolved "https://registry.yarnpkg.com/ansi-styles/-/ansi-styles-2.2.1.tgz#b432dd3358b634cf75e1e4664368240533c1ddbe" + integrity sha512-kmCevFghRiWM7HB5zTPULl4r9bVFSWjz62MhqizDGUrq2NWuNMQyuv4tHHoKJHs69M/MF64lEcHdYIocrdWQYA== + ansi-styles@^3.2.0, ansi-styles@^3.2.1: version "3.2.1" resolved "https://registry.yarnpkg.com/ansi-styles/-/ansi-styles-3.2.1.tgz#41fbb20243e50b12be0f04b8dedbf07520ce841d" @@ -5466,11 +5476,23 @@ array-to-sentence@^1.1.0: resolved "https://registry.yarnpkg.com/array-to-sentence/-/array-to-sentence-1.1.0.tgz#c804956dafa53232495b205a9452753a258d39fc" integrity sha512-YkwkMmPA2+GSGvXj1s9NZ6cc2LBtR+uSeWTy2IGi5MR1Wag4DdrcjTxA/YV/Fw+qKlBeXomneZgThEbm/wvZbw== +array-union@^1.0.1: + version "1.0.2" + resolved "https://registry.yarnpkg.com/array-union/-/array-union-1.0.2.tgz#9a34410e4f4e3da23dea375be5be70f24778ec39" + integrity sha512-Dxr6QJj/RdU/hCaBjOfxW+q6lyuVE6JFWIrAUpuOOhoJJoQ99cUn3igRaHVB5P9WrgFVN0FfArM3x0cueOU8ng== + dependencies: + array-uniq "^1.0.1" + array-union@^2.1.0: version "2.1.0" resolved "https://registry.yarnpkg.com/array-union/-/array-union-2.1.0.tgz#b798420adbeb1de828d84acd8a2e23d3efe85e8d" integrity sha512-HGyxoOTYUyCM6stUe6EJgnd4EoewAI7zMdfqO+kGjnlZmBDz/cR5pf8r/cR4Wq60sL/p0IkcjUEEPwS3GFrIyw== +array-uniq@^1.0.1: + version "1.0.3" + resolved "https://registry.yarnpkg.com/array-uniq/-/array-uniq-1.0.3.tgz#af6ac877a25cc7f74e058894753858dfdb24fdb6" + integrity sha512-MNha4BWQ6JbwhFhj03YK552f7cb3AzoE8SzeljgChvL1dl3IcvggXVz1DilzySZkCja+CXuZbdW7yATchWn8/Q== + array.prototype.flat@^1.2.5: version "1.3.0" resolved "https://registry.yarnpkg.com/array.prototype.flat/-/array.prototype.flat-1.3.0.tgz#0b0c1567bf57b38b56b4c97b8aa72ab45e4adc7b" @@ -5501,7 +5523,7 @@ array.prototype.flatmap@^1.3.1: es-abstract "^1.20.4" es-shim-unscopables "^1.0.0" -arrify@^1.0.1: +arrify@^1.0.0, arrify@^1.0.1: version "1.0.1" resolved "https://registry.yarnpkg.com/arrify/-/arrify-1.0.1.tgz#898508da2226f380df904728456849c1501a4b0d" integrity sha512-3CYzex9M9FGQjCGMGyi6/31c8GJbgb0qGyrx5HWxPd0aCwh4cB2YjMb2Xf9UuoogrMrlO9cTqnB5rI5GHZTcUA== @@ -5543,6 +5565,16 @@ assert-valid-glob-opts@^1.0.0: glob-option-error "^1.0.0" validate-glob-opts "^1.0.0" +assert@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/assert/-/assert-2.0.0.tgz#95fc1c616d48713510680f2eaf2d10dd22e02d32" + integrity sha512-se5Cd+js9dXJnu6Ag2JFc00t+HmHOen+8Q+L7O9zI0PqQXr20uk2J0XQqMxZEeo5U50o8Nvmmx7dZrl+Ufr35A== + dependencies: + es6-object-assign "^1.1.0" + is-nan "^1.2.1" + object-is "^1.0.1" + util "^0.12.0" + ast-types-flow@^0.0.7: version "0.0.7" resolved "https://registry.yarnpkg.com/ast-types-flow/-/ast-types-flow-0.0.7.tgz#f70b735c6bca1a5c9c22d982c3e39e7feba3bdad" @@ -6451,6 +6483,17 @@ ccount@^2.0.0: resolved "https://registry.yarnpkg.com/ccount/-/ccount-2.0.1.tgz#17a3bf82302e0870d6da43a01311a8bc02a3ecf5" integrity sha512-eyrF0jiFpY+3drT6383f1qhkbGsLSifNAjA61IUjZjmLCWjItY6LB9ft9YhoDgwfmclB2zhu51Lc7+95b8NRAg== +chalk@^1.1.1: + version "1.1.3" + resolved "https://registry.yarnpkg.com/chalk/-/chalk-1.1.3.tgz#a8115c55e4a702fe4d150abd3872822a7e09fc98" + integrity sha512-U3lRVLMSlsCfjqYPbLyVv11M9CPW4I728d6TCKMAOJueEeB9/8o+eSsMnxPJD+Q+K909sdESg7C+tIkoH6on1A== + dependencies: + ansi-styles "^2.2.1" + escape-string-regexp "^1.0.2" + has-ansi "^2.0.0" + strip-ansi "^3.0.0" + supports-color "^2.0.0" + chalk@^2.0.0, chalk@^2.4.1, chalk@^2.4.2: version "2.4.2" resolved "https://registry.yarnpkg.com/chalk/-/chalk-2.4.2.tgz#cd42541677a54333cf541a49108c1432b44c9424" @@ -7605,6 +7648,19 @@ define-properties@^1.2.0: has-property-descriptors "^1.0.0" object-keys "^1.1.1" +del@^2.2.0: + version "2.2.2" + resolved "https://registry.yarnpkg.com/del/-/del-2.2.2.tgz#c12c981d067846c84bcaf862cff930d907ffd1a8" + integrity sha512-Z4fzpbIRjOu7lO5jCETSWoqUDVe0IPOlfugBsF6suen2LKDlVb4QZpKEM9P+buNJ4KI1eN7I083w/pbKUpsrWQ== + dependencies: + globby "^5.0.0" + is-path-cwd "^1.0.0" + is-path-in-cwd "^1.0.0" + object-assign "^4.0.1" + pify "^2.0.0" + pinkie-promise "^2.0.0" + rimraf "^2.2.8" + delayed-stream@~1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/delayed-stream/-/delayed-stream-1.0.0.tgz#df3ae199acadfb7d440aaae0b29e2272b24ec619" @@ -8249,6 +8305,11 @@ es6-iterator@^2.0.3: es5-ext "^0.10.35" es6-symbol "^3.1.1" +es6-object-assign@^1.1.0: + version "1.1.0" + resolved "https://registry.yarnpkg.com/es6-object-assign/-/es6-object-assign-1.1.0.tgz#c2c3582656247c39ea107cb1e6652b6f9f24523c" + integrity sha512-MEl9uirslVwqQU369iHNWZXsI8yaZYGg/D65aOgZkeyFJwHYSxilf7rQzXKI7DdDuBPrBXbfk3sl9hJhmd5AUw== + es6-promise@^4.1.1: version "4.2.8" resolved "https://registry.yarnpkg.com/es6-promise/-/es6-promise-4.2.8.tgz#4eb21594c972bc40553d276e510539143db53e0a" @@ -10286,7 +10347,7 @@ glob-to-regexp@^0.4.1: minipass "^5.0.0" path-scurry "^1.6.4" -glob@^7.1.1, glob@^7.1.2, glob@^7.1.3, glob@^7.1.4, glob@^7.1.6, glob@^7.2.3: +glob@^7.0.3, glob@^7.1.1, glob@^7.1.2, glob@^7.1.3, glob@^7.1.4, glob@^7.1.6, glob@^7.2.3: version "7.2.3" resolved "https://registry.yarnpkg.com/glob/-/glob-7.2.3.tgz#b8df0fb802bbfa8e89bd1d938b4e16578ed44f2b" integrity sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q== @@ -10372,6 +10433,18 @@ globby@^11.0.3, globby@^11.0.4, globby@^11.1.0: merge2 "^1.4.1" slash "^3.0.0" +globby@^5.0.0: + version "5.0.0" + resolved "https://registry.yarnpkg.com/globby/-/globby-5.0.0.tgz#ebd84667ca0dbb330b99bcfc68eac2bc54370e0d" + integrity sha512-HJRTIH2EeH44ka+LWig+EqT2ONSYpVlNfx6pyd592/VF1TbfljJ7elwie7oSwcViLGqOdWocSdu2txwBF9bjmQ== + dependencies: + array-union "^1.0.1" + arrify "^1.0.0" + glob "^7.0.3" + object-assign "^4.0.1" + pify "^2.0.0" + pinkie-promise "^2.0.0" + gopd@^1.0.1: version "1.0.1" resolved "https://registry.yarnpkg.com/gopd/-/gopd-1.0.1.tgz#29ff76de69dac7489b7c0918a5788e56477c332c" @@ -10520,6 +10593,13 @@ hard-rejection@^2.1.0: resolved "https://registry.yarnpkg.com/hard-rejection/-/hard-rejection-2.1.0.tgz#1c6eda5c1685c63942766d79bb40ae773cecd883" integrity sha512-VIZB+ibDhx7ObhAe7OVtoEbuP4h/MuOTHJ+J8h/eBXotJYl0fBgR72xDFCKgIh22OJZIOVNxBMWuhAr10r8HdA== +has-ansi@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/has-ansi/-/has-ansi-2.0.0.tgz#34f5049ce1ecdf2b0649af3ef24e45ed35416d91" + integrity sha512-C8vBJ8DwUCx19vhm7urhTuUsr4/IyP6l4VzNQDv+ryHQObW3TTTp9yB68WpYgRe2bbaGuZ/se74IqFeVnMnLZg== + dependencies: + ansi-regex "^2.0.0" + has-bigints@^1.0.1, has-bigints@^1.0.2: version "1.0.2" resolved "https://registry.yarnpkg.com/has-bigints/-/has-bigints-1.0.2.tgz#0871bd3e3d51626f6ca0966668ba35d5602d6eaa" @@ -11154,6 +11234,11 @@ image-q@^4.0.0: dependencies: "@types/node" "16.9.1" +immediate@~3.0.5: + version "3.0.6" + resolved "https://registry.yarnpkg.com/immediate/-/immediate-3.0.6.tgz#9db1dbd0faf8de6fbe0f5dd5e56bb606280de69b" + integrity sha512-XXOFtyqDjNDAQxVfYxuF7g9Il/IbWmmlQg2MYKOH8ExIT1qg6xc4zyS3HaEEATgs1btfzxq15ciUiY7gjSXRGQ== + immer@^9.0.7: version "9.0.15" resolved "https://registry.yarnpkg.com/immer/-/immer-9.0.15.tgz#0b9169e5b1d22137aba7d43f8a81a495dd1b62dc" @@ -11232,7 +11317,7 @@ inherits@2, inherits@2.0.4, inherits@^2.0.0, inherits@^2.0.1, inherits@^2.0.3, i resolved "https://registry.yarnpkg.com/inherits/-/inherits-2.0.4.tgz#0fa2c64f932917c3433a0ded55363aae37416b7c" integrity sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ== -ini@2.0.0, ini@^1.3.5, ini@^1.3.6, ini@~1.3.0: +ini@2.0.0, ini@^1.3.4, ini@^1.3.5, ini@^1.3.6, ini@~1.3.0: version "1.3.8" resolved "https://registry.yarnpkg.com/ini/-/ini-1.3.8.tgz#a29da425b48806f34767a4efce397269af28432c" integrity sha512-JV/yugV2uzW5iMRSiZAyDtQd+nxtUnjeLt0acNdw98kKLrvuRVyB80tsREOE7yvGVgalhZ6RNXCmEHkUKBKxew== @@ -11582,6 +11667,14 @@ is-map@^2.0.1, is-map@^2.0.2: resolved "https://registry.yarnpkg.com/is-map/-/is-map-2.0.2.tgz#00922db8c9bf73e81b7a335827bc2a43f2b91127" integrity sha512-cOZFQQozTha1f4MxLFzlgKYPTyj26picdZTx82hbc/Xf4K/tZOOXSCkMvU4pKioRXGDLJRn0GM7Upe7kR721yg== +is-nan@^1.2.1: + version "1.3.2" + resolved "https://registry.yarnpkg.com/is-nan/-/is-nan-1.3.2.tgz#043a54adea31748b55b6cd4e09aadafa69bd9e1d" + integrity sha512-E+zBKpQ2t6MEo1VsonYmluk9NxGrbzpeeLC2xIViuO2EjU2xsXsBPwTr3Ykv9l08UYEVEdWeRZNouaZqF6RN0w== + dependencies: + call-bind "^1.0.0" + define-properties "^1.1.3" + is-negated-glob@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/is-negated-glob/-/is-negated-glob-1.0.0.tgz#6910bca5da8c95e784b5751b976cf5a10fee36d2" @@ -11619,6 +11712,25 @@ is-obj@^2.0.0: resolved "https://registry.yarnpkg.com/is-obj/-/is-obj-2.0.0.tgz#473fb05d973705e3fd9620545018ca8e22ef4982" integrity sha512-drqDG3cbczxxEJRoOXcOjtdp1J/lyp1mNn0xaznRs8+muBhgQcrnbspox5X5fOw0HnMnbfDzvnEMEtqDEJEo8w== +is-path-cwd@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/is-path-cwd/-/is-path-cwd-1.0.0.tgz#d225ec23132e89edd38fda767472e62e65f1106d" + integrity sha512-cnS56eR9SPAscL77ik76ATVqoPARTqPIVkMDVxRaWH06zT+6+CzIroYRJ0VVvm0Z1zfAvxvz9i/D3Ppjaqt5Nw== + +is-path-in-cwd@^1.0.0: + version "1.0.1" + resolved "https://registry.yarnpkg.com/is-path-in-cwd/-/is-path-in-cwd-1.0.1.tgz#5ac48b345ef675339bd6c7a48a912110b241cf52" + integrity sha512-FjV1RTW48E7CWM7eE/J2NJvAEEVektecDBVBE5Hh3nM1Jd0kvhHtX68Pr3xsDf857xt3Y4AkwVULK1Vku62aaQ== + dependencies: + is-path-inside "^1.0.0" + +is-path-inside@^1.0.0: + version "1.0.1" + resolved "https://registry.yarnpkg.com/is-path-inside/-/is-path-inside-1.0.1.tgz#8ef5b7de50437a3fdca6b4e865ef7aa55cb48036" + integrity sha512-qhsCR/Esx4U4hg/9I19OVUAJkGWtjRYHMRgUMZE2TDdj+Ag+kttZanLupfddNyglzz50cUlmWzUaI37GDfNx/g== + dependencies: + path-is-inside "^1.0.1" + is-path-inside@^3.0.2: version "3.0.3" resolved "https://registry.yarnpkg.com/is-path-inside/-/is-path-inside-3.0.3.tgz#d231362e53a07ff2b0e0ea7fed049161ffd16283" @@ -12637,6 +12749,16 @@ jsx-ast-utils@^3.3.3: array-includes "^3.1.5" object.assign "^4.1.3" +jszip@^3.10.1: + version "3.10.1" + resolved "https://registry.yarnpkg.com/jszip/-/jszip-3.10.1.tgz#34aee70eb18ea1faec2f589208a157d1feb091c2" + integrity sha512-xXDvecyTpGLrqFrvkrUSoxxfJI5AH7U8zxxtVclpsUtMCq4JQ290LY8AW5c7Ggnr/Y/oK+bQMbqK2qmtk3pN4g== + dependencies: + lie "~3.3.0" + pako "~1.0.2" + readable-stream "~2.3.6" + setimmediate "^1.0.5" + kebab-hash@^0.1.2: version "0.1.2" resolved "https://registry.yarnpkg.com/kebab-hash/-/kebab-hash-0.1.2.tgz#dfb7949ba34d8e70114ea7d83e266e5e2a4abaac" @@ -12740,6 +12862,13 @@ levn@~0.3.0: prelude-ls "~1.1.2" type-check "~0.3.2" +lie@~3.3.0: + version "3.3.0" + resolved "https://registry.yarnpkg.com/lie/-/lie-3.3.0.tgz#dcf82dee545f46074daf200c7c1c5a08e0f40f6a" + integrity sha512-UaiMJzeWRlEujzAuw5LokY1L5ecNQYZKfmyZ9L7wDHb/p5etKaxXhohBcrw0EYby+G/NA52vRSN4N39dxHAIwQ== + dependencies: + immediate "~3.0.5" + lilconfig@^2.0.3: version "2.0.6" resolved "https://registry.yarnpkg.com/lilconfig/-/lilconfig-2.0.6.tgz#32a384558bd58af3d4c6e077dd1ad1d397bc69d4" @@ -14495,7 +14624,7 @@ object-inspect@^1.12.2: resolved "https://registry.yarnpkg.com/object-inspect/-/object-inspect-1.12.3.tgz#ba62dffd67ee256c8c086dfae69e016cd1f198b9" integrity sha512-geUvdk7c+eizMNUDkRpW1wJwgfOiOeHbxBR/hLXK1aT6zmVSO0jsQcs7fj6MGw89jC/cjGfLcNOrtMYtGqm81g== -object-is@^1.1.5: +object-is@^1.0.1, object-is@^1.1.5: version "1.1.5" resolved "https://registry.yarnpkg.com/object-is/-/object-is-1.1.5.tgz#b9deeaa5fc7f1846a0faecdceec138e5778f53ac" integrity sha512-3cyDsyHgtmi7I7DfSSI2LDp6SK2lwvtbg0p0R1e0RvTqF5ceGx+K2dfSjm1bKDMVCFEDAQvy+o8c6a7VujOddw== @@ -14804,7 +14933,7 @@ packet-reader@1.0.0: resolved "https://registry.yarnpkg.com/packet-reader/-/packet-reader-1.0.0.tgz#9238e5480dedabacfe1fe3f2771063f164157d74" integrity sha512-HAKu/fG3HpHFO0AA8WE8q2g+gBJaZ9MG7fcKk+IJPLTGAD6Psw4443l+9DGRbOIh3/aXr7Phy0TjilYivJo5XQ== -pako@^1.0.5: +pako@^1.0.5, pako@~1.0.2: version "1.0.11" resolved "https://registry.yarnpkg.com/pako/-/pako-1.0.11.tgz#6c9599d340d54dfd3946380252a35705a6b992bf" integrity sha512-4hLB8Py4zZce5s4yd9XzopqwVv/yGNhV1Bl8NTmCq1763HeK2+EwVTv+leGeL13Dnh2wfbqowVPXCIO0z4taYw== @@ -15079,7 +15208,7 @@ path-is-absolute@^1.0.0: resolved "https://registry.yarnpkg.com/path-is-absolute/-/path-is-absolute-1.0.1.tgz#174b9268735534ffbc7ace6bf53a5a9e1b5c5f5f" integrity sha512-AVbw3UJ2e9bq64vSaS9Am0fje1Pa8pbGqTTsmXfaIiMpnr5DlDhfJOuLj9Sf95ZPVDAUerDfEk88MPmPe7UCQg== -path-is-inside@^1.0.2: +path-is-inside@^1.0.1, path-is-inside@^1.0.2: version "1.0.2" resolved "https://registry.yarnpkg.com/path-is-inside/-/path-is-inside-1.0.2.tgz#365417dede44430d1c11af61027facf074bdfc53" integrity sha512-DUWJr3+ULp4zXmol/SZkFf3JGsS9/SIv+Y3Rt93/UjPpDpklB5f1er4O3POIbUuUJ3FXgqte2Q7SrU6zAqwk8w== @@ -15227,6 +15356,23 @@ picomatch@^2.0.4, picomatch@^2.2.1, picomatch@^2.2.3, picomatch@^2.3.1: resolved "https://registry.yarnpkg.com/picomatch/-/picomatch-2.3.1.tgz#3ba3833733646d9d3e4995946c1365a67fb07a42" integrity sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA== +pify@^2.0.0: + version "2.3.0" + resolved "https://registry.yarnpkg.com/pify/-/pify-2.3.0.tgz#ed141a6ac043a849ea588498e7dca8b15330e90c" + integrity sha512-udgsAY+fTnvv7kI7aaxbqwWNb0AHiB0qBO89PZKPkoTmGOgdbrHDKD+0B2X4uTfJ/FT1R09r9gTsjUjNJotuog== + +pinkie-promise@^2.0.0: + version "2.0.1" + resolved "https://registry.yarnpkg.com/pinkie-promise/-/pinkie-promise-2.0.1.tgz#2135d6dfa7a358c069ac9b178776288228450ffa" + integrity sha512-0Gni6D4UcLTbv9c57DfxDGdr41XfgUjqWZu492f0cIGr16zDU06BWP/RAEvOuo7CQ0CNjHaLlM59YJJFm3NWlw== + dependencies: + pinkie "^2.0.0" + +pinkie@^2.0.0: + version "2.0.4" + resolved "https://registry.yarnpkg.com/pinkie/-/pinkie-2.0.4.tgz#72556b80cfa0d48a974e80e77248e80ed4f7f870" + integrity sha512-MnUuEycAemtSaeFSjXKW/aroV7akBbY+Sv+RkyqFjgAe73F+MR0TBWKBRDkmfWq/HiFmdavfZ1G7h4SPZXaCSg== + pirates@^4.0.4: version "4.0.5" resolved "https://registry.yarnpkg.com/pirates/-/pirates-4.0.5.tgz#feec352ea5c3268fb23a37c702ab1699f35a5f3b" @@ -15792,6 +15938,11 @@ pupa@^2.1.1: dependencies: escape-goat "^2.0.0" +q@^1.4.1: + version "1.5.1" + resolved "https://registry.yarnpkg.com/q/-/q-1.5.1.tgz#7e32f75b41381291d04611f1bf14109ac00651d7" + integrity sha512-kV/CThkXo6xyFEZUugw/+pIOywXcDbFYgSct5cT3gqlbkBE1SJdwy6UQoZvodiWF/ckQLZyDE/Bu1M6gVu5lVw== + qs@6.10.3: version "6.10.3" resolved "https://registry.yarnpkg.com/qs/-/qs-6.10.3.tgz#d6cde1b2ffca87b5aa57889816c5f81535e22e8e" @@ -16790,7 +16941,7 @@ replace-ext@^1.0.0: resolved "https://registry.yarnpkg.com/replace-ext/-/replace-ext-1.0.1.tgz#2d6d996d04a15855d967443631dd5f77825b016a" integrity sha512-yD5BHCe7quCgBph4rMQ+0KkIRKwWCrHDOX1p1Gp6HwjPM5kVoCdKGNhN7ydqqsX6lJEnQDKZ/tFMiEdQ1dvPEw== -"request@>= 2.44.0 < 3.0.0": +"request@>= 2.44.0 < 3.0.0", request@^2.87.0: version "2.88.2" resolved "https://registry.yarnpkg.com/request/-/request-2.88.2.tgz#d73c918731cb5a87da047e207234146f664d12b3" integrity sha512-MsvtOrfG9ZcrOwAW+Qi+F6HbD0CWXEh9ou77uOb7FM2WPhwT7smM833PzanhJLsgXjN89Ir6V2PczXNnMpwKhw== @@ -16960,7 +17111,7 @@ rimraf@3.0.2, rimraf@^3.0.0, rimraf@^3.0.2: dependencies: glob "^7.1.3" -rimraf@^2.5.4, rimraf@^2.6.2, rimraf@^2.6.3: +rimraf@^2.2.8, rimraf@^2.5.2, rimraf@^2.5.4, rimraf@^2.6.2, rimraf@^2.6.3: version "2.7.1" resolved "https://registry.yarnpkg.com/rimraf/-/rimraf-2.7.1.tgz#35797f13a7fdadc566142c29d4f07ccad483e3ec" integrity sha512-uWjbaKIK3T1OSVptzX7Nl6PvQ3qAGtKEtVRjRuazjfL3Bx5eI409VZSqgND+4UNnmzLVdPj9FqFJNPqBZFve4w== @@ -17117,6 +17268,15 @@ section-matter@^1.0.0: extend-shallow "^2.0.1" kind-of "^6.0.0" +selenium-webdriver@^4.12.0: + version "4.12.0" + resolved "https://registry.yarnpkg.com/selenium-webdriver/-/selenium-webdriver-4.12.0.tgz#a8dc8ecf129a2414c2ace6e429aba84722a950a5" + integrity sha512-zvPzmTsky6WfO6+BGMj2mCJsw7qKnfQONur2b+pGn8jeTiC+WAUOthZOnaK+HkX5wiU6L4uoMF+JIcOVstp25A== + dependencies: + jszip "^3.10.1" + tmp "^0.2.1" + ws ">=8.13.0" + semver-diff@^3.1.1: version "3.1.1" resolved "https://registry.yarnpkg.com/semver-diff/-/semver-diff-3.1.1.tgz#05f77ce59f325e00e2706afd67bb506ddb1ca32b" @@ -17146,6 +17306,11 @@ semver@7.x, semver@^7.2.1, semver@^7.3.2, semver@^7.3.4, semver@^7.3.5, semver@^ dependencies: lru-cache "^6.0.0" +semver@^5.3.0: + version "5.7.2" + resolved "https://registry.yarnpkg.com/semver/-/semver-5.7.2.tgz#48d55db737c3287cd4835e17fa13feace1c41ef8" + integrity sha512-cBznnQ9KjJqU67B52RMC65CMarK2600WFnbkcaiwWq3xy/5haFJlshgnpjovMVJ+Hff49d8GEn0b87C5pDQ10g== + semver@^6.0.0, semver@^6.1.1, semver@^6.1.2, semver@^6.2.0, semver@^6.3.0: version "6.3.0" resolved "https://registry.yarnpkg.com/semver/-/semver-6.3.0.tgz#ee0a64c8af5e8ceea67687b133761e1becbd1d3d" @@ -17886,7 +18051,7 @@ stringify-object@^3.3.0: is-obj "^1.0.1" is-regexp "^1.0.0" -strip-ansi@^3.0.1: +strip-ansi@^3.0.0, strip-ansi@^3.0.1: version "3.0.1" resolved "https://registry.yarnpkg.com/strip-ansi/-/strip-ansi-3.0.1.tgz#6a385fb8853d952d5ff05d0e8aaf94278dc63dcf" integrity sha512-VhumSSbBqDTP8p2ZLKj40UjBCV4+v8bUSEpUb4KjRgWk9pbqGF4REFj6KEagidb2f/M6AzC0EmFyDNGaw9OCzg== @@ -18038,6 +18203,11 @@ superstruct@^0.16.5: resolved "https://registry.yarnpkg.com/superstruct/-/superstruct-0.16.5.tgz#7b7e1f1f8bf6ab141c660e501ac57026e42c09c0" integrity sha512-GBa1VPdCUDAIrsoMVy2lzE/hKQnieUlc1JVoVzJ2YLx47SoPY4AqF85Ht1bPg5r+8I0v54GbaRdNTnYQ0p+T+Q== +supports-color@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/supports-color/-/supports-color-2.0.0.tgz#535d045ce6b6363fa40117084629995e9df324c7" + integrity sha512-KKNVtd6pCYgPIKU4cp2733HWYCpplQhddZLBUryaAHou723x+FRzQ5Df824Fj+IyyuiQTRoub4SnIFfIcrp70g== + supports-color@^5.3.0: version "5.5.0" resolved "https://registry.yarnpkg.com/supports-color/-/supports-color-5.5.0.tgz#e2e69a44ac8772f78a1ec0b35b689df6530efc8f" @@ -19254,6 +19424,17 @@ util-deprecate@^1.0.1, util-deprecate@^1.0.2, util-deprecate@~1.0.1: resolved "https://registry.yarnpkg.com/util-deprecate/-/util-deprecate-1.0.2.tgz#450d4dc9fa70de732762fbd2d4a28981419a0ccf" integrity sha512-EPD5q1uXyFxJpCrLnCc1nHnq3gOa6DZBocAIiI2TaSCA7VCJ1UJDMagCzIkXNsUYfD1daK//LTEQ8xiIbrHtcw== +util@^0.12.0: + version "0.12.5" + resolved "https://registry.yarnpkg.com/util/-/util-0.12.5.tgz#5f17a6059b73db61a875668781a1c2b136bd6fbc" + integrity sha512-kZf/K6hEIrWHI6XqOFUiiMa+79wE/D8Q+NCNAWclkyg3b4d2k7s0QGepNjiABc+aR3N1PAyHL7p6UcLY6LmrnA== + dependencies: + inherits "^2.0.3" + is-arguments "^1.0.4" + is-generator-function "^1.0.7" + is-typed-array "^1.1.3" + which-typed-array "^1.1.2" + util@^0.12.3, util@^0.12.4: version "0.12.4" resolved "https://registry.yarnpkg.com/util/-/util-0.12.4.tgz#66121a31420df8f01ca0c464be15dfa1d1850253" @@ -19623,6 +19804,23 @@ web-namespaces@^1.0.0: resolved "https://registry.yarnpkg.com/web-namespaces/-/web-namespaces-1.1.4.tgz#bc98a3de60dadd7faefc403d1076d529f5e030ec" integrity sha512-wYxSGajtmoP4WxfejAPIr4l0fVh+jeMXZb08wNc0tMg6xsfZXj3cECqIK0G7ZAqUq0PP8WlMDtaOGVBTAWztNw== +webdriver-manager@^12.1.9: + version "12.1.9" + resolved "https://registry.yarnpkg.com/webdriver-manager/-/webdriver-manager-12.1.9.tgz#8d83543b92711b7217b39fef4cda958a4703d2df" + integrity sha512-Yl113uKm8z4m/KMUVWHq1Sjtla2uxEBtx2Ue3AmIlnlPAKloDn/Lvmy6pqWCUersVISpdMeVpAaGbNnvMuT2LQ== + dependencies: + adm-zip "^0.5.2" + chalk "^1.1.1" + del "^2.2.0" + glob "^7.0.3" + ini "^1.3.4" + minimist "^1.2.0" + q "^1.4.1" + request "^2.87.0" + rimraf "^2.5.2" + semver "^5.3.0" + xml2js "^0.4.17" + webidl-conversions@^3.0.0: version "3.0.1" resolved "https://registry.yarnpkg.com/webidl-conversions/-/webidl-conversions-3.0.1.tgz#24534275e2a7bc6be7bc86611cc16ae0a5654871" @@ -20035,6 +20233,11 @@ ws@7.4.5: resolved "https://registry.yarnpkg.com/ws/-/ws-7.4.5.tgz#a484dd851e9beb6fdb420027e3885e8ce48986c1" integrity sha512-xzyu3hFvomRfXKH8vOFMU3OguG6oOvhXMo3xsGy3xWExqaM2dxBbVxuD99O7m3ZUFMvvscsZDqxfgMaRr/Nr1g== +ws@>=8.13.0: + version "8.13.0" + resolved "https://registry.yarnpkg.com/ws/-/ws-8.13.0.tgz#9a9fb92f93cf41512a0735c8f4dd09b8a1211cd0" + integrity sha512-x9vcZYTrFPC7aSIbj7sRCYo7L/Xb8Iy+pW0ng0wt2vCJv7M9HOMy0UoN3rr+IFC7hb7vXoqS+P9ktyLLLhO+LA== + "ws@^5.2.0 || ^6.0.0 || ^7.0.0", ws@^7.4.6: version "7.5.9" resolved "https://registry.yarnpkg.com/ws/-/ws-7.5.9.tgz#54fa7db29f4c7cec68b1ddd3a89de099942bb591" @@ -20095,7 +20298,7 @@ xml2js@0.4.19: sax ">=0.6.0" xmlbuilder "~9.0.1" -xml2js@^0.4.5: +xml2js@^0.4.17, xml2js@^0.4.5: version "0.4.23" resolved "https://registry.yarnpkg.com/xml2js/-/xml2js-0.4.23.tgz#a0c69516752421eb2ac758ee4d4ccf58843eac66" integrity sha512-ySPiMjM0+pLDftHgXY4By0uswI3SPKLDw/i3UXbnO8M/p28zqexCUoPmQFrYD+/1BzhGJSs2i1ERWKJAtiLrug==