From d74f51e84f9d7134b79f0c5f827c7d1e06cf83c0 Mon Sep 17 00:00:00 2001 From: Adam Gardner Date: Wed, 18 Sep 2024 11:23:12 +1000 Subject: [PATCH] Deployed c054b70 with MkDocs version: 1.6.0 --- getting-started/index.html | 4 +-- ...st-integration-flow-release-validation.jpg | Bin 0 -> 31648 bytes images/load-test-integration-flow.jpg | Bin 31648 -> 13741 bytes index.html | 23 +++++------------- run-demo/index.html | 22 ++++++++--------- search/search_index.json | 2 +- 6 files changed, 20 insertions(+), 31 deletions(-) create mode 100755 images/load-test-integration-flow-release-validation.jpg diff --git a/getting-started/index.html b/getting-started/index.html index c078389..7211c69 100755 --- a/getting-started/index.html +++ b/getting-started/index.html @@ -517,9 +517,9 @@

2. Getting Started

Gather Details: Tenant ID#

You will need access to a Dynatrace tenant. If you do not have access, sign up for a free 15 day trial.

Make a note of your Dynatrace tenant ID. It is the first bit of your URL (eg. abc12345 in the following examples):

-
https://abc12345.live.dynatrace.com
+
https://abc12345.live.dynatrace.com
 https://abc12345.apps.dynatrace.com
-
+

Reformat the URL like this: https://TENANT_ID.live.dynatrace.com eg. https://abc12345.live.dynatrace.com

Gather Details: Create API Token#

k6 requires an API token to stream metrics to Dynatrace.

diff --git a/images/load-test-integration-flow-release-validation.jpg b/images/load-test-integration-flow-release-validation.jpg new file mode 100755 index 0000000000000000000000000000000000000000..6d73f6b350395417d93c19a59ea1cba0f3ed5a7b GIT binary patch literal 31648 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. About

Logical Architecture#

Below is the "flow" of information and actors during this demo.

This architecture also holds true for other load testing tools (eg. JMeter).

+
+

Tip

+

This can (and should be) extended as demonstrated in the release validation Observability Lab) +to include the ability to trigger automated deployment checks.

+
  1. A load test is executed. -The HTTP requests are annotated with the standard header values(target=_blank).

    +The HTTP requests are annotated with the standard header values.

  2. Metrics are streamed during the load test (if the load testing tool supports this) @@ -513,22 +518,6 @@

    Logical Architectureworkflow is triggered on receipt of this event. -The workflow triggers the Site Reliability Guardian.

    -

  3. -
  4. -

    The Site Reliability Guardian processes the load testing metrics and to provide an automated load testing report. -This can be used for information only or can be used as an automated "go / no go" decision point.

    -
  5. -
  6. -

    Dynatrace users can view the results in a dashboard, notebook or use the result as a trigger for further automated workflows.

    -
  7. -
  8. -

    Integrators have the choice to send (emit) the results to an external tool. -This external tool can then use this result. -One example would be sending the SRG result to Jenkins to progress or prevent a deployment.

    -

Logical Architecture

Compatibility#

diff --git a/run-demo/index.html b/run-demo/index.html index 782ce93..ae4c8b9 100755 --- a/run-demo/index.html +++ b/run-demo/index.html @@ -560,15 +560,15 @@

Import Dynatrace DashboardStart k6#

In the codespace terminal, type docker ps and wait until Docker is running.

You should see this:

-
CONTAINER ID   IMAGE     COMMAND   CREATED   STATUS    PORTS     NAMES
-
+
CONTAINER ID   IMAGE     COMMAND   CREATED   STATUS    PORTS     NAMES
+

Now run k6 with the demo script. Copy and paste this as-is into the terminal window:

-
docker run \
+
docker run \
     -e K6_DYNATRACE_URL=$DT_URL \
     -e K6_DYNATRACE_APITOKEN=$DT_K6_TOKEN \
     --mount type=bind,source=./k6scripts,target=/k6scripts hrexed/xk6-dynatrace-output:0.11 run /k6scripts/script.js \
     -o output-dynatrace
-
+

Validate Metrics#

k6 streams metrics into Dynatrace so after about a minute, do the following to ensure metrics are reaching Dynatrace.

In Dynatrace:

@@ -581,10 +581,10 @@

Validate Metrics

View Events#

When the load test finished, the teardown function sends a Software Delivery Lifecycle Event (SDLC) to Dynatrace.

-
// Run load with 2 virtual users for 1 minute
+
// Run load with 2 virtual users for 1 minute
 export const options = {
   vus: 2,
-  duration: '1m',
+  duration: '1m',
 };
 
 ...
@@ -592,8 +592,8 @@ 

View EventsView Events

+

Notice that the event contains metadata such as the provider and service which can be used for filtering in Dynatrace (see DQL below).

This event can be used as a trigger Dynatrace for workflows, synthetic tests, the site reliability guardian and more.

In Dynatrace:

@@ -616,10 +616,10 @@

View EventsOpen an existing notebook or create a new one
  • Add a new DQL section and paste the following
  • -
    fetch events
    +
    fetch events
     | filter event.kind == "SDLC_EVENT"
     | filter event.provider == "k6"
    -
    +

    sdlc event

    User exercise: Modify the JSON body to also send the number of Virtual Users (VUs) used to Dynatrace. Re-run the load test to see the new event.

    View Dashboard#

    diff --git a/search/search_index.json b/search/search_index.json index 074bda8..9658361 100755 --- a/search/search_index.json +++ b/search/search_index.json @@ -1 +1 @@ -{"config":{"lang":["en"],"separator":"[\\s\\-]+","pipeline":["stopWordFilter"]},"docs":[{"location":"","title":"1. About","text":"

    This demo will run a Grafana k6 script and use the Dynatrace output plugin to stream metrics to Dynatrace.

    "},{"location":"#logical-architecture","title":"Logical Architecture","text":"

    Below is the \"flow\" of information and actors during this demo.

    This architecture also holds true for other load testing tools (eg. JMeter).

    1. A load test is executed. The HTTP requests are annotated with the standard header values(target=_blank).

    2. Metrics are streamed during the load test (if the load testing tool supports this) or the metrics are send at the end of the load test.

    3. The load testing tool is responsible for sending an SDLC event to signal \"test is finished\". Integrators are responsible for crafting this event to contain any important information required by Dynatrace such as the test duration.

    4. A workflow is triggered on receipt of this event. The workflow triggers the Site Reliability Guardian.

    5. The Site Reliability Guardian processes the load testing metrics and to provide an automated load testing report. This can be used for information only or can be used as an automated \"go / no go\" decision point.

    6. Dynatrace users can view the results in a dashboard, notebook or use the result as a trigger for further automated workflows.

    7. Integrators have the choice to send (emit) the results to an external tool. This external tool can then use this result. One example would be sending the SRG result to Jenkins to progress or prevent a deployment.

    "},{"location":"#compatibility","title":"Compatibility","text":"Deployment Tutorial Compatible Dynatrace Managed \u2714\ufe0f Dynatrace SaaS \u2714\ufe0f
    • Click Here to Begin
    "},{"location":"cleanup/","title":"4. Cleanup","text":"

    To cleanup resources, go to https://github.com/codespaces and delete the codespace.

    You may also want to deactivate or delete the API token.

    • What's Next?
    "},{"location":"getting-started/","title":"2. Getting Started","text":""},{"location":"getting-started/#gather-details-tenant-id","title":"Gather Details: Tenant ID","text":"

    You will need access to a Dynatrace tenant. If you do not have access, sign up for a free 15 day trial.

    Make a note of your Dynatrace tenant ID. It is the first bit of your URL (eg. abc12345 in the following examples):

    https://abc12345.live.dynatrace.com\nhttps://abc12345.apps.dynatrace.com\n

    Reformat the URL like this: https://TENANT_ID.live.dynatrace.com eg. https://abc12345.live.dynatrace.com

    "},{"location":"getting-started/#gather-details-create-api-token","title":"Gather Details: Create API Token","text":"

    k6 requires an API token to stream metrics to Dynatrace.

    Create an API token with the following permissions:

    • metrics.ingest
    • openpipeline.events_sdlc
    "},{"location":"getting-started/#start-demo","title":"Start Demo","text":"

    Click this button to launch the demo in a new tab.

    • Click Here to Run the Demo
    "},{"location":"resources/","title":"6. Resources","text":""},{"location":"resources/#resources","title":"Resources","text":"
    • Sign up for a Dynatrace Trial
    • k6 on Dynatrace Hub
    • Dynatrace xk6 output plugin source code on GitHub
    • This tutorial on GitHub
    "},{"location":"run-demo/","title":"3. Run Demo","text":""},{"location":"run-demo/#import-dynatrace-dashboard","title":"Import Dynatrace Dashboard","text":"

    While you are waiting for the environment, add the dashboard to your Dynatrace environment.

    1. Save the k6 dashboard to your local machine.
    2. In Dynatrace, navigate to Dashboards and click Upload
    3. Upload the dashboard JSON file
    "},{"location":"run-demo/#start-k6","title":"Start k6","text":"

    In the codespace terminal, type docker ps and wait until Docker is running.

    You should see this:

    CONTAINER ID   IMAGE     COMMAND   CREATED   STATUS    PORTS     NAMES\n

    Now run k6 with the demo script. Copy and paste this as-is into the terminal window:

    docker run \\\n    -e K6_DYNATRACE_URL=$DT_URL \\\n    -e K6_DYNATRACE_APITOKEN=$DT_K6_TOKEN \\\n    --mount type=bind,source=./k6scripts,target=/k6scripts hrexed/xk6-dynatrace-output:0.11 run /k6scripts/script.js \\\n    -o output-dynatrace\n
    "},{"location":"run-demo/#validate-metrics","title":"Validate Metrics","text":"

    k6 streams metrics into Dynatrace so after about a minute, do the following to ensure metrics are reaching Dynatrace.

    In Dynatrace:

    • Press ctrl + k and search for notebooks
    • Create a new notebook and add a new DQL section
    • Type the following: timeseries avg(k6)
    • Press ctrl + = to bring up auto completion. You should see the list of ingest

    "},{"location":"run-demo/#view-events","title":"View Events","text":"

    When the load test finished, the teardown function sends a Software Delivery Lifecycle Event (SDLC) to Dynatrace.

    // Run load with 2 virtual users for 1 minute\nexport const options = {\n  vus: 2,\n  duration: '1m',\n};\n\n...\n\nexport function teardown() {\n  let post_params = {\n    headers: {\n      'Content-Type': 'application/json',\n      'Authorization': `Api-Token ${__ENV.K6_DYNATRACE_APITOKEN}`\n    },\n  };\n\n  // Send SDLC event at the end of the test\n  let payload = {\n    \"event.provider\": \"k6\",\n    \"event.type\": \"test\",\n    \"event.category\": \"finished\",\n    \"service\": \"dummyservice\",\n    \"duration\": options.duration\n  }\n  let res = http.post(`${__ENV.K6_DYNATRACE_URL}/platform/ingest/v1/events.sdlc`, JSON.stringify(payload), post_params);\n}\n

    Notice that the event contains metadata such as the provider and service which can be used for filtering in Dynatrace (see DQL below).

    This event can be used as a trigger Dynatrace for workflows, synthetic tests, the site reliability guardian and more.

    In Dynatrace:

    • Press ctrl + k and search for notebooks
    • Open an existing notebook or create a new one
    • Add a new DQL section and paste the following
    fetch events\n| filter event.kind == \"SDLC_EVENT\"\n| filter event.provider == \"k6\"\n

    User exercise: Modify the JSON body to also send the number of Virtual Users (VUs) used to Dynatrace. Re-run the load test to see the new event.

    "},{"location":"run-demo/#view-dashboard","title":"View Dashboard","text":"

    Open the prebuilt dashboard you previously uploaded.

    Go to Dashboards (ctrl + k and search for Dashboards)

    The dashboard will begin to be populated with data.

    The demo is complete.

    • Click Here to Delete and Cleanup resources
    "},{"location":"whats-next/","title":"5. What's Next?","text":"

    The k6 listing on the Dynatrace Hub contains information about how to build your own custom k6 binary using xk6.

    You can also browse the source code of the Dynatrace plugin, get support and request enhancements on the Dynatrace xk6 output plugin on Github.

    View the resources page for more links and useful materials.

    • View Resources
    "}]} \ No newline at end of file +{"config":{"lang":["en"],"separator":"[\\s\\-]+","pipeline":["stopWordFilter"]},"docs":[{"location":"","title":"1. About","text":"

    This demo will run a Grafana k6 script and use the Dynatrace output plugin to stream metrics to Dynatrace.

    "},{"location":"#logical-architecture","title":"Logical Architecture","text":"

    Below is the \"flow\" of information and actors during this demo.

    This architecture also holds true for other load testing tools (eg. JMeter).

    Tip

    This can (and should be) extended as demonstrated in the release validation Observability Lab) to include the ability to trigger automated deployment checks.

    1. A load test is executed. The HTTP requests are annotated with the standard header values.

    2. Metrics are streamed during the load test (if the load testing tool supports this) or the metrics are send at the end of the load test.

    3. The load testing tool is responsible for sending an SDLC event to signal \"test is finished\". Integrators are responsible for crafting this event to contain any important information required by Dynatrace such as the test duration.

    "},{"location":"#compatibility","title":"Compatibility","text":"Deployment Tutorial Compatible Dynatrace Managed \u2714\ufe0f Dynatrace SaaS \u2714\ufe0f
    • Click Here to Begin
    "},{"location":"cleanup/","title":"4. Cleanup","text":"

    To cleanup resources, go to https://github.com/codespaces and delete the codespace.

    You may also want to deactivate or delete the API token.

    • What's Next?
    "},{"location":"getting-started/","title":"2. Getting Started","text":""},{"location":"getting-started/#gather-details-tenant-id","title":"Gather Details: Tenant ID","text":"

    You will need access to a Dynatrace tenant. If you do not have access, sign up for a free 15 day trial.

    Make a note of your Dynatrace tenant ID. It is the first bit of your URL (eg. abc12345 in the following examples):

    https://abc12345.live.dynatrace.com\nhttps://abc12345.apps.dynatrace.com\n

    Reformat the URL like this: https://TENANT_ID.live.dynatrace.com eg. https://abc12345.live.dynatrace.com

    "},{"location":"getting-started/#gather-details-create-api-token","title":"Gather Details: Create API Token","text":"

    k6 requires an API token to stream metrics to Dynatrace.

    Create an API token with the following permissions:

    • metrics.ingest
    • openpipeline.events_sdlc
    "},{"location":"getting-started/#start-demo","title":"Start Demo","text":"

    Click this button to launch the demo in a new tab.

    • Click Here to Run the Demo
    "},{"location":"resources/","title":"6. Resources","text":""},{"location":"resources/#resources","title":"Resources","text":"
    • Sign up for a Dynatrace Trial
    • k6 on Dynatrace Hub
    • Dynatrace xk6 output plugin source code on GitHub
    • This tutorial on GitHub
    "},{"location":"run-demo/","title":"3. Run Demo","text":""},{"location":"run-demo/#import-dynatrace-dashboard","title":"Import Dynatrace Dashboard","text":"

    While you are waiting for the environment, add the dashboard to your Dynatrace environment.

    1. Save the k6 dashboard to your local machine.
    2. In Dynatrace, navigate to Dashboards and click Upload
    3. Upload the dashboard JSON file
    "},{"location":"run-demo/#start-k6","title":"Start k6","text":"

    In the codespace terminal, type docker ps and wait until Docker is running.

    You should see this:

    CONTAINER ID   IMAGE     COMMAND   CREATED   STATUS    PORTS     NAMES\n

    Now run k6 with the demo script. Copy and paste this as-is into the terminal window:

    docker run \\\n    -e K6_DYNATRACE_URL=$DT_URL \\\n    -e K6_DYNATRACE_APITOKEN=$DT_K6_TOKEN \\\n    --mount type=bind,source=./k6scripts,target=/k6scripts hrexed/xk6-dynatrace-output:0.11 run /k6scripts/script.js \\\n    -o output-dynatrace\n
    "},{"location":"run-demo/#validate-metrics","title":"Validate Metrics","text":"

    k6 streams metrics into Dynatrace so after about a minute, do the following to ensure metrics are reaching Dynatrace.

    In Dynatrace:

    • Press ctrl + k and search for notebooks
    • Create a new notebook and add a new DQL section
    • Type the following: timeseries avg(k6)
    • Press ctrl + = to bring up auto completion. You should see the list of ingest

    "},{"location":"run-demo/#view-events","title":"View Events","text":"

    When the load test finished, the teardown function sends a Software Delivery Lifecycle Event (SDLC) to Dynatrace.

    // Run load with 2 virtual users for 1 minute\nexport const options = {\n  vus: 2,\n  duration: '1m',\n};\n\n...\n\nexport function teardown() {\n  let post_params = {\n    headers: {\n      'Content-Type': 'application/json',\n      'Authorization': `Api-Token ${__ENV.K6_DYNATRACE_APITOKEN}`\n    },\n  };\n\n  // Send SDLC event at the end of the test\n  let payload = {\n    \"event.provider\": \"k6\",\n    \"event.type\": \"test\",\n    \"event.category\": \"finished\",\n    \"service\": \"dummyservice\",\n    \"duration\": options.duration\n  }\n  let res = http.post(`${__ENV.K6_DYNATRACE_URL}/platform/ingest/v1/events.sdlc`, JSON.stringify(payload), post_params);\n}\n

    Notice that the event contains metadata such as the provider and service which can be used for filtering in Dynatrace (see DQL below).

    This event can be used as a trigger Dynatrace for workflows, synthetic tests, the site reliability guardian and more.

    In Dynatrace:

    • Press ctrl + k and search for notebooks
    • Open an existing notebook or create a new one
    • Add a new DQL section and paste the following
    fetch events\n| filter event.kind == \"SDLC_EVENT\"\n| filter event.provider == \"k6\"\n

    User exercise: Modify the JSON body to also send the number of Virtual Users (VUs) used to Dynatrace. Re-run the load test to see the new event.

    "},{"location":"run-demo/#view-dashboard","title":"View Dashboard","text":"

    Open the prebuilt dashboard you previously uploaded.

    Go to Dashboards (ctrl + k and search for Dashboards)

    The dashboard will begin to be populated with data.

    The demo is complete.

    • Click Here to Delete and Cleanup resources
    "},{"location":"whats-next/","title":"5. What's Next?","text":"

    The k6 listing on the Dynatrace Hub contains information about how to build your own custom k6 binary using xk6.

    You can also browse the source code of the Dynatrace plugin, get support and request enhancements on the Dynatrace xk6 output plugin on Github.

    View the resources page for more links and useful materials.

    • View Resources
    "}]} \ No newline at end of file