From bfb51adc7b81f02ec2ec4ff6d3d0cfd54be594fd Mon Sep 17 00:00:00 2001 From: Robert Castley Date: Fri, 16 Feb 2024 16:36:35 +0000 Subject: [PATCH] Linting and spelling --- .../10-preparation.md | 13 ++++++----- .../20-verify-setup.md | 12 +++++----- .../30-auto-instrumentation.md | 22 ++++++++---------- .../50-profiling-db-query.md | 22 ++++++++---------- .../60-log-observer-connect.md | 22 ++++++++---------- .../3-java-microservices-k8s/_index.md | 8 +++---- .../3-java-microservices-k8s/image.png | Bin 67075 -> 0 bytes 7 files changed, 47 insertions(+), 52 deletions(-) delete mode 100644 content/en/other/3-auto-instrumentation/3-java-microservices-k8s/image.png diff --git a/content/en/other/3-auto-instrumentation/3-java-microservices-k8s/10-preparation.md b/content/en/other/3-auto-instrumentation/3-java-microservices-k8s/10-preparation.md index d7fdc88dff..92302d903c 100644 --- a/content/en/other/3-auto-instrumentation/3-java-microservices-k8s/10-preparation.md +++ b/content/en/other/3-auto-instrumentation/3-java-microservices-k8s/10-preparation.md @@ -57,6 +57,7 @@ If you have completed a Splunk Observability workshop using this EC2 instance, p ``` bash helm delete splunk-otel-collector ``` + {{% /notice %}} ## 2. The Splunk OpenTelemetry Collector @@ -69,7 +70,7 @@ The Splunk OpenTelemetry Collector is the core component of instrumenting infras * Host and Application logs To get Observability signals (**Metrics, Traces** and **Logs**) into the **Splunk Observability Cloud** we need to add an OpenTelemetry Collector to our Kubernetes cluster. -For this workshop we will be using the Splunk Kubernetes Helm Chart for the Opentelemetry collector and install the collector in `Operator` mode as this is required for Zero-config. +For this workshop, we will be using the Splunk Kubernetes Helm Chart for the Opentelemetry collector and installing the collector in `Operator` mode as this is required for Zero-config. ## 3. Install the OpenTelemetry Collector using Helm @@ -101,9 +102,9 @@ Update Complete. ⎈Happy Helming!⎈ The Splunk Observability Cloud offers wizards in the **Splunk Observability Suite** UI to walk you through the setup of the Collector on Kubernetes, but in the interest of time, we will use a setup created earlier. As we want the auto instrumentation to be available, we will install the OpenTelemetry Collector with the OpenTelemetry Collector Helm chart with some additional options: -* --set="operator.enabled=true" - this will install the Opentelemetry operator, that will be used to handle auto instrumentation -* --set="certmanager.enabled=true" - This will install the required certificate manager for the operator. -* --set="splunkObservability.profilingEnabled=true" - This enabled Code profiling via the operator +* `--set="operator.enabled=true"` - this will install the Opentelemetry operator, that will be used to handle auto instrumentation +* `--set="certmanager.enabled=true"` - This will install the required certificate manager for the operator. +* `--set="splunkObservability.profilingEnabled=true"` - This enabled Code profiling via the operator To install the collector run the following commands, do **NOT** edit this: @@ -262,7 +263,7 @@ configmap/scriptfile created On rare occasions, you may encounter the above error at this point. please log out and back in, and verify the above env variables are all set correctly. If not please, please contact your instructor. {{% /notice %}} --> -At this point we can verify the deployment by checking if the Pods are running, Not that these containers need to be downloaded and started, this may take a minute or so. +At this point, we can verify the deployment by checking if the Pods are running, Not that these containers need to be downloaded and started, this may take a minute or so. {{< tabs >}} {{% tab title="kubectl get pods" %}} @@ -301,7 +302,7 @@ Once they are running, the application will take a few minutes to fully start up ## 5. Verify the local Docker Repository -Once we have tested our Zero Auto-Config Instrumentation the existing containers, we are going to build our own containers to show some of the additional instrumentation features of Opentelemetry Java. Only then we will touch the config files or the source code. Once we build these containers, Kubernetes will need to pull these new images from somewhere. To enable this we have created a local repository to store these new containers, so Kubernetes can pull the images locally. +Once we have tested our Zero Auto-Config Instrumentation in the existing containers, we are going to build our containers to show some of the additional instrumentation features of Opentelemetry Java. Only then we will touch the config files or the source code. Once we build these containers, Kubernetes will need to pull these new images from somewhere. To enable this we have created a local repository to store these new containers, so Kubernetes can pull the images locally. We can see if the repository is up and running by checking the inventory with the below command: diff --git a/content/en/other/3-auto-instrumentation/3-java-microservices-k8s/20-verify-setup.md b/content/en/other/3-auto-instrumentation/3-java-microservices-k8s/20-verify-setup.md index 4ec6c21caf..6f2fdefad8 100644 --- a/content/en/other/3-auto-instrumentation/3-java-microservices-k8s/20-verify-setup.md +++ b/content/en/other/3-auto-instrumentation/3-java-microservices-k8s/20-verify-setup.md @@ -6,22 +6,22 @@ weight: 20 ## 1. Verify the installation by checking Metrics and Logs -Once the installation is completed, you can login into the **Splunk Observability Cloud** with the URL provided by the Instructor. +Once the installation is completed, you can log in to the **Splunk Observability Cloud** with the URL provided by the Instructor. -First, Navigate to **Kubernetes Navigator** view in the **Infrastructure** ![infra](../images/infra-icon.png?classes=inline&height=25px) section to see the metrics from your cluster in the **K8s nodes** pane. Once you are in the Kubernetes Navigator view, change the *Time* filter to the last 15 Minutes (-15m) to focus on the latest data. +First, Navigate to the **Kubernetes Navigator** view in the **Infrastructure** ![infra](../images/infra-icon.png?classes=inline&height=25px) section to see the metrics from your cluster in the **K8s nodes** pane. Once you are in the Kubernetes Navigator view, change the *Time* filter to the last 15 Minutes (-15m) to focus on the latest data. -Select your own cluster with the regular filter option at the top of the Navigator and a filter `k8s.cluster.name` **(1)**. Type or select the cluster name of your workshop instance (you can get the unique part from your cluster name by using the `INSTANCE` from the output from the shell script you ran earlier). (You can also select your cluster by clicking on its image in the cluster pane.) +Select your cluster with the regular filter option at the top of the Navigator and a filter `k8s.cluster.name` **(1)**. Type or select the cluster name of your workshop instance (you can get the unique part from your cluster name by using the `INSTANCE` from the output from the shell script you ran earlier). (You can also select your cluster by clicking on its image in the cluster pane.) You should now only have your cluster visible **(2)**. ![Navigator](../images/navigator.png) -You should see metrics **(3)** of your cluster and the log events **(4)** chart should start to be populated with log line events coming from your cluster. Click on one of the bars to peek at the log lines coming in from you cluster. +You should see metrics **(3)** of your cluster and the log events **(4)** chart should start to be populated with log line events coming from your cluster. Click on one of the bars to peek at the log lines coming in from your cluster. ![logs](../images/k8s-peek-at-logs.png) -Also, a `Mysql` pane **(5)** should appear, when you click on that pane, you can see the MySQL related metrics from your database. +Also, a `Mysql` pane **(5)** should appear, when you click on that pane, you can see the MySQL-related metrics from your database. -![mysql metrics](../images/mysql-metrics.png) +![MySQL metrics](../images/mysql-metrics.png) Once you see data flowing in from your host (`metrics and logs`) and MySQL shows `metrics` as well we can move on to the actual PetClinic application. diff --git a/content/en/other/3-auto-instrumentation/3-java-microservices-k8s/30-auto-instrumentation.md b/content/en/other/3-auto-instrumentation/3-java-microservices-k8s/30-auto-instrumentation.md index 549729ee6e..541e67624b 100644 --- a/content/en/other/3-auto-instrumentation/3-java-microservices-k8s/30-auto-instrumentation.md +++ b/content/en/other/3-auto-instrumentation/3-java-microservices-k8s/30-auto-instrumentation.md @@ -43,7 +43,7 @@ spec: ## 2. Setting up Java auto instrumentation on the api-gateway pod -Lets look how zero-config works with a single pod, the `api-gateway`. If you enable Zero configuration for a pod, the Collector will attach an init-Container to your existing pod, and restart the pod to activate it. +Let's look at how zero-config works with a single pod, the `api-gateway`. If you enable Zero configuration for a pod, the Collector will attach an init-Container to your existing pod, and restart the pod to activate it. To show what happens when you enable Auto instrumentation, let's do a *For & After* of the content of a pod, the `api-gateway` in this case: @@ -87,18 +87,18 @@ kubectl describe pods api-gateway |grep Image: Next to the original pod from before, you should see an initContainer named **opentelemetry-auto-instrumentation**. (If you get two api-gateway containers, the original one is still terminating, so give it a few seconds): - {{% tab title="Example output" %}} ```text Image: ghcr.io/signalfx/splunk-otel-java/splunk-otel-java:v1.30.0 Image: quay.io/phagen/spring-petclinic-api-gateway:0.0.2 ``` + {{% /tab %}} ## 3. Enable Java auto instrumentation on all pods -Now lets patch all other services so we can see the full interaction between all services with `app.kubernetes.io/part-of=spring-petclinic` as the inject annotation. +Now let's patch all other services so we can see the full interaction between all services with `app.kubernetes.io/part-of=spring-petclinic` as the inject annotation. remember: **This automatically causes pods to restart.** Note, there will be no change for the *config-server, discovery-server, admin-server & api-gateway* as we patched these earlier. @@ -129,14 +129,13 @@ deployment.apps/api-gateway patched (no change) ## 3. Check the result in Splunk APM -Once the containers are patched they will be restarted, let's go back to the **Splunk Observability Cloud** with the URL provided by the Instructor to check our cluster in the Kubernetes Navigator. +Once the containers are patched they will be restarted, let's go back to the **Splunk Observability Cloud** with the URL provided by the Instructor to check our cluster in the Kubernetes Navigator. -After a couple of minuted or so you should see that the Pods are being restarted by the operator and the Zero config container will be added. -This will look similar like the Screen shot below: +After a couple of minutes or so you should see that the Pods are being restarted by the operator and the Zero config container will be added. This will look similar to the screenshot below: ![restart](../images/k8s-navigator-restarted-pods.png) -Wait for the pods to turn green again.(You may want to refresh the screen, then navigate to the **APM** ![APM](../images/apm-icon.png?classes=inline&height=25px) section to look at the information provide by the traces generated from your service in the **Explore** Pane. Use the filter option and change the *environment* filter **(1)** and search for the name of your workshop instance in the drop down box, it should be the [INSTANCE]-workshop. (where `INSTANCE` is the value from the shell script you run earlier). Make sure it is the only one selected. +Wait for the pods to turn green again (you may want to refresh the screen), then navigate to the **APM** ![APM](../images/apm-icon.png?classes=inline&height=25px) section to look at the information provided by the traces generated from your service in the **Explore** Pane. Use the filter option to change the *environment* filter **(1)** and search for the name of your workshop instance in the dropdown box, it should be the [INSTANCE]-workshop. (where `INSTANCE` is the value from the shell script you run earlier). Make sure it is the only one selected. ![apm](../images/zero-config-first-services-overview.png) @@ -145,21 +144,20 @@ You should see the name **(2)** of the api-gateway service and metrics in the La Next, click on **Explore** **(3)** to see the services in the automatically generated dependency map and select the api-gateway service. ![apm map](../images/zero-config-first-services-map.png) -The Example above shows all the interaction between the all our services, Your may still be showing the map in the interim state as it will take the Petclinic Microservice application a few minutes to start up and fully synchronize to make your map to look like t he one above. -reducing the time will help, if you pick a Custom time of 2 minutes, the initial startup related errors (Red Dots) will disappear from the view.) +The example above shows all the interactions between all our services. You may still be showing the map in the interim state as it will take the Petclinic Microservice application a few minutes to start up and fully synchronize to make your map to look like the one above. Reducing the time will help, if you pick a custom time of 2 minutes, the initial startup-related errors (Red Dots) will disappear from the view. In the meantime let's examine the metrics that are available for each service that is instrumented and visit the request, error, and duration (RED) metrics Dashboard ## 5. Examine default R.E.D. Metrics - Splunk APM provides a set of built-in dashboards that present charts and visualized metrics to help you see problems occurring in real time and quickly determine whether the problem is associated with a service, a specific endpoint, or the underlying infrastructure. To look at this dashboard for the selected `api-gateway`, make sure you have the `api-gateway` service selected in the Dependency map as show above, then click on the ***View Dashboard** Link **(1)** at the top of the right hand pane. + Splunk APM provides a set of built-in dashboards that present charts and visualized metrics to help you see problems occurring in real time and quickly determine whether the problem is associated with a service, a specific endpoint, or the underlying infrastructure. To look at this dashboard for the selected `api-gateway`, make sure you have the `api-gateway` service selected in the Dependency map as show above, then click on the ***View Dashboard** Link **(1)** at the top of the right-hand pane. This will bring you to the services dashboard: ![metrics dashboard](../images/zero-config-first-services-metrics.png) -This dashboard, that is available for each of your instrumented services, offers an overview of the key `request, error, and duration (RED)` metrics based on Monitoring MetricSets created from endpoint spans for your services, endpoints, and Business Workflows. They also present related host and Kubernetes metrics to help you determine whether problems are related to the underlying infrastructure, as in the above image. -As the dashboards allow you to go back in time with the *Time picker* window **(1)**, its the perfect spot to identify behaviour you wish to be alerted on, and with a click on one of the bell icons **(2)** available in each chart, you can set up an alert to do just that. +This dashboard, which is available for each of your instrumented services, offers an overview of the key `request, error, and duration (RED)` metrics based on Monitoring MetricSets created from endpoint spans for your services, endpoints, and Business Workflows. They also present related host and Kubernetes metrics to help you determine whether problems are related to the underlying infrastructure, as in the above image. +As the dashboards allow you to go back in time with the *Time picker* window **(1)**, it's the perfect spot to identify the behavior you wish to be alerted on, and with a click on one of the bell icons **(2)** available in each chart, you can set up an alert to do just that. If you scroll down the page, you get host and Kubernetes metrics related to your service as well. Let's move on to look at some of the traces generated by the Zero Config Auto instrumentation. diff --git a/content/en/other/3-auto-instrumentation/3-java-microservices-k8s/50-profiling-db-query.md b/content/en/other/3-auto-instrumentation/3-java-microservices-k8s/50-profiling-db-query.md index 5806daff8a..a257e6bc9d 100644 --- a/content/en/other/3-auto-instrumentation/3-java-microservices-k8s/50-profiling-db-query.md +++ b/content/en/other/3-auto-instrumentation/3-java-microservices-k8s/50-profiling-db-query.md @@ -6,26 +6,24 @@ hidden: false --- ## 1. Introduction -As we have seen in the previous chapter, you can trace your interactions between the various services using APM without touching your code, which will allow you to identify issues faster. However as seen, beside tracing, Splunk Zero Config for Auto-Instrumentations offers additional features out of the box that can help you finding issues faster. In this section we are going to look at 2 of them: +As we have seen in the previous chapter, you can trace your interactions between the various services using APM without touching your code, which will allow you to identify issues faster. However as seen, besides tracing, Splunk Zero Config for Auto-Instrumentations offers additional features out of the box that can help you finding issues faster. In this section we are going to look at 2 of them: * Always-on Profiling and Java Metrics * Database Query Performance -If you want to dive deeper in Always-on Profiling or DB-Query performance, we have a separate Ninja Workshop called ***Debug Problems*** that you can follow for more detailed info. +If you want to dive deeper into Always-on Profiling or DB-Query performance, we have a separate Ninja Workshop called ***Debug Problems*** that you can follow for more detailed info. ## 2. AlwaysOn Profiling and Metrics When we installed the Splunk Distribution of the OpenTelemetry Collector using the Helm chart earlier, we configured it to enable **AlwaysOn Profiling** and **Metrics**. This means that the collector will automatically generate CPU and Memory profiles for the application and send them to Splunk Observability Cloud. -When you deploy the PetClinic application, and set the Annotation, the collector automatically detects the application and instruments it for traces and profiling. - -we can verify this by examining the startup logs of one of our Java based containers we are instrumenting by running the following script: +When you deploy the PetClinic application and set the annotation, the collector automatically detects the application and instruments it for traces and profiling. We can verify this by examining the startup logs of one of the Java containers we are instrumenting by running the following script: ```bash . ~/workshop/petclinic/scripts/get_logs.sh ``` -The logs should show what flags where picked up by the Java Auto instrumentation agent: +The logs should show what flags were picked up by the Java Auto instrumentation agent: {{% tab title="Example output" %}} @@ -61,9 +59,9 @@ OpenJDK 64-Bit Server VM warning: Sharing is only supported for boot loader clas We are interested in the section written by the `com.splunk.opentelemetry.profiler.ConfigurationLogger` or the **Profiling Configuration** We can see the various settings you can control, some that are useful depending on your use case like the `splunk.profiler.directory` - The location where the agent writes the call stacks before sending them to Splunk. This may be different depending how you configure your containers. -An other parameter you may want to change is `splunk.profiler.call.stack.interval` This is how often the system takes a CPU Stack trace. You may want to reduce this if you have short spans like we have in our application. (we kept the default as the spans in this demo application are extremely short, so Span may not always have a CPU Call Stack related to it.) +Another parameter you may want to change is `splunk.profiler.call.stack.interval` This is how often the system takes a CPU Stack trace. You may want to reduce this if you have short spans like we have in our application. (we kept the default as the spans in this demo application are extremely short, so Span may not always have a CPU Call Stack related to it.) -You can find how to set these parameters [here](https://docs.splunk.com/observability/en/gdi/get-data-in/application/java/configuration/advanced-java-otel-configuration.html#profiling-configuration-java). And below is how you set a higher collection rate for call stack in your deployment.yaml, exactly how pass any JAVA option to the the java application running in your container: +You can find how to set these parameters [here](https://docs.splunk.com/observability/en/gdi/get-data-in/application/java/configuration/advanced-java-otel-configuration.html#profiling-configuration-java). Below, is how you set a higher collection rate for call stack in your `deployment.yaml`, exactly how to pass any JAVA option to the the Java application running in your container: ```text env: @@ -104,18 +102,18 @@ For more detail on Profiling, check the the **Debug Problems workshop**, or che With Database Query Performance, you can monitor the impact of your database queries on service availability directly in Splunk APM. This way, you can quickly identify long-running, unoptimized, or heavy queries and mitigate issues they might be causing, without having to instrument your databases. To look at the performance of your database queries, make sure you are in the APM **Explore** page either by going back in the browser or navigate to the APM APM section in the Menu bar, then click on the **Explore** tile. -Select the the inferred database service `mysql:petclinic` Inferred Database server in the Dependency map **(1)**, then scroll the right hand pane to find the **Database Query Performance** Pane **(2)**. +Select the inferred database service `mysql:petclinic` Inferred Database server in the Dependency map **(1)**, then scroll the right hand pane to find the **Database Query Performance** Pane **(2)**. ![db-query from map](../images/db-query-map.png) -If the service you have selected in the map is indeed an (inferred) database server, this pane will populate with the top 90% (P90) database calls based on duration. To dive deeper in the db-query performance function click somewhere on the word **Database Query Performance** at the top of the pane. +If the service you have selected in the map is indeed an (inferred) database server, this pane will populate with the top 90% (P90) database calls based on duration. To dive deeper into the db-query performance function click somewhere on the word **Database Query Performance** at the top of the pane. -This wil bring us to the DB-query Performance overview screen. +This will bring us to the DB-query Performance overview screen: ![db-query full](../images/db-query-full.png) {{% notice title="Database Query Normalization" style="info" %}} -By default, Splunk APM instrumentation sanitizes database queries to remove or mask sensible data, such as secrets or personal identifiable information (PII) from the db.statements. You can find how to turn off database query normalization [here](https://docs.splunk.com/observability/en/apm/db-query-perf/db-perf-troubleshooting.html#turn-off-database-query-normalization). +By default, Splunk APM instrumentation sanitizes database queries to remove or mask sensible data, such as secrets or personal identifiable information (PII) from the db.statements. You can find how to turn off database query normalization [here](https://docs.splunk.com/observability/en/apm/db-query-perf/db-perf-troubleshooting.html#turn-off-database-query-normalization). {{% /notice %}} This screen will show us all the Database queries **(1)** done towards our database from you application, based on the Traces & Spans send to the Splunk Observability Cloud. Note that you can compare them across a time block or sort them on Total Time, P90 Latency & Requests **(2)**. diff --git a/content/en/other/3-auto-instrumentation/3-java-microservices-k8s/60-log-observer-connect.md b/content/en/other/3-auto-instrumentation/3-java-microservices-k8s/60-log-observer-connect.md index 48430b9ccf..01614b132f 100644 --- a/content/en/other/3-auto-instrumentation/3-java-microservices-k8s/60-log-observer-connect.md +++ b/content/en/other/3-auto-instrumentation/3-java-microservices-k8s/60-log-observer-connect.md @@ -33,9 +33,9 @@ cd ~/spring-petclinic-microservices ## 3. Update Logback config for the services -The Spring PetClinic application can be configured to use several different Java logging libraries. In this scenario, the application is using `logback`. To make sure we get the otel information in the logs we need to update a file named `logback.xml` with the log structure, and add an Otel dependency to the `pom.xml` of each of the services in the petclinic microservices folders. +The Spring PetClinic application can be configured to use several different Java logging libraries. In this scenario, the application is using `logback`. To make sure we get the OTel information in the logs we need to update a file named `logback.xml` with the log structure, and add an Otel dependency to the `pom.xml` of each of the services in the petclinic microservices folders. -First lets set the Log Structure/Format: +First, let's set the Log Structure/Format: Spring boot will allow you to set a global template, but for ease of use, we will replace the existing content of the `logback-spring.xml` files of each service with the following XML content using a prepared script: Note the following entries that will be added: @@ -93,7 +93,7 @@ Before we can build the new services with the updated log format we need to add . ~/workshop/petclinic/scripts/add_otel.sh ``` -The Services are now ready to be build, so run the script that will use the `maven` command to compile/build/package the PetClinic microservices (Note the -P buildDocker, this will build the new containers): +The Services are now ready to be built, so run the script that will use the `maven` command to compile/build/package the PetClinic microservices (Note the -P buildDocker, this will build the new containers): {{< tabs >}} {{% tab title="Running maven" %}} @@ -130,7 +130,7 @@ Successfully tagged quay.io/phagen/spring-petclinic-api-gateway:latest {{% /tab %}} {{< /tabs >}} -Given that Kubernetes needs to pull these freshly build images from somewhere, we are going to store them in the repository we tested earlier. To do this, run the script that will push the newly build containers into our local repository: +Given that Kubernetes needs to pull these freshly built images from somewhere, we are going to store them in the repository we tested earlier. To do this, run the script that will push the newly built containers into our local repository: {{< tabs >}} {{% tab title="pushing Containers" %}} @@ -190,16 +190,15 @@ The result should be : {"repositories":["spring-petclinic-admin-server","spring-petclinic-api-gateway","spring-petclinic-config-server","spring-petclinic-customers-service","spring-petclinic-discovery-server","spring-petclinic-vets-service","spring-petclinic-visits-service"]} ``` -## 5. Deploy new services to kubernetes +## 5. Deploy new services to Kubernetes -To see the changes in effect, we need to redeploy the services, First let change the location of the images from the external repo to the local one by running the following script: +To see the changes in effect, we need to redeploy the services, First, let's change the location of the images from the external repo to the local one by running the following script: ```bash . ~/workshop/petclinic/scripts/set_local.sh ``` -The result is a new file on disk called **petclinic-local.yaml** -Let switch to the local versions by using the new version of the deployment yaml. First delete the old containers from the original deployment with: +The result is a new file on disk called **petclinic-local.yaml**. Let's switch to the local versions by using the new version of the `deployment yaml`. First delete the old containers from the original deployment with: ```bash kubectl delete -f ~/workshop/petclinic/petclinic-local.yaml @@ -267,8 +266,7 @@ The resulting output should say (again if you see double, its the old container Once the containers are patched they will be restarted, let's go back to the **Splunk Observability Cloud** with the URL provided by the Instructor to check our cluster in the Kubernetes Navigator. -After a couple of minuted or so you should see that the Pods are being restarted by the operator and the Zero config container will be added. -This will look similar like the Screen shot below: +After a couple of minutes or so you should see that the Pods are being restarted by the operator and the Zero config container will be added. This will look similar to the screenshot below: ![restart](../images/k8s-navigator-restarted-pods.png) @@ -283,12 +281,12 @@ Wait for Log Lines to show up with an injected trace-id like trace_id=08b5ce63e4 ![Log Observer](../images/log-observer-trace-info.png) Click on a line with an injected trace_id, this should be all log lines created by your services that are part of a trace **(1)**. -A Side pane opens where you can see the related information about your logs. including the relevant Trace and Span Id's **(2)**. +A Side pane opens where you can see the related information about your logs. including the relevant Trace and Span Id's **(2)**. Also, at the bottom next to APM, there should be a number, this is the number of related AP Content items for this log line. click on the APM pane **(1)** as show below: ![RC](../images/log-apm-rc.png) -- The *Map for customers-service* **(2)** brings us to the APM dependency map with the workflow focused on Customer Services, allowing you to quick understand hwo this log line is related to the overall flow of service interaction. +- The *Map for customers-service* **(2)** brings us to the APM dependency map with the workflow focused on Customer Services, allowing you to quick understand how this log line is related to the overall flow of service interaction. - The *Trace for 34c98cbf7b300ef3dedab49da71a6ce3* **(3)** will bring us to the waterfall in APM for this specific trace that this log line was generated in. As a last exercise, click on the Trace for Link, this will bering you to the waterfall for this specific trace: diff --git a/content/en/other/3-auto-instrumentation/3-java-microservices-k8s/_index.md b/content/en/other/3-auto-instrumentation/3-java-microservices-k8s/_index.md index 814cc3ec20..60dedbba30 100644 --- a/content/en/other/3-auto-instrumentation/3-java-microservices-k8s/_index.md +++ b/content/en/other/3-auto-instrumentation/3-java-microservices-k8s/_index.md @@ -1,5 +1,5 @@ --- -title: Workshop using the Java microservices Pet Clinic demo (Kubernetes based). +title: Workshop using the Java microservices Pet Clinic demo (Kubernetes-based). linkTitle: PetClinic Java Microservices Workshop (Kubernetes) weight: 3 description: Learn how to enable Open Telemetry (Auto) Instrumentation for your Java-based application running in Kubernetes. Experience real-time monitoring and troubleshooting to help you maximize application behavior with end-to-end visibility. @@ -7,8 +7,8 @@ hidden: false --- The goal of this workshop is to introduce the features of Splunk's Opentelemetry Java Auto instrumentation. -First we create the workshop scenario, by installing a simple Java microservices application in Kubernetes. -We then walk through the basic steps to set up the OpenTelemetry Collector in Kubernetes, and enable auto-instrumentation on the existing Java application running in Kubernetes. This will start sending Opentelemetry signals to **Splunk Observability Cloud** platform and enable the following components: +First, we create the workshop scenario, by installing a simple Java microservices application in Kubernetes. +We then walk through the basic steps to set up the OpenTelemetry Collector in Kubernetes and enable auto-instrumentation on the existing Java application running in Kubernetes. This will start sending Opentelemetry signals to the **Splunk Observability Cloud** platform and enable the following components: * Splunk Infrastructure Monitoring (IM) * Splunk Auto Instrumentation for Java (APM) @@ -22,7 +22,7 @@ We then walk through the basic steps to set up the OpenTelemetry Collector in Ku We will show the steps about how to clone (download) a sample microservices Java application (Spring PetClinic), as well as how to compile, package and deploy/run the application. -Once the application is up and running, we will examine the default metrics send by the Opentelemetry Collector in the **Splunk Observability UI** Next, when auto instrumentation is enabled we will start seeing metrics and traces created via the **Auto Instrumentation** for Java that will be used by the **Splunk APM** product. +Once the application is up and running, we will examine the default metrics sent by the Opentelemetry Collector in the **Splunk Observability UI** Next, when auto instrumentation is enabled we will start seeing metrics and traces created via the **Auto Instrumentation** for Java that will be used by the **Splunk APM** product. We also will examine Always-on Profiling and Database Query performance. diff --git a/content/en/other/3-auto-instrumentation/3-java-microservices-k8s/image.png b/content/en/other/3-auto-instrumentation/3-java-microservices-k8s/image.png deleted file mode 100644 index 5f77e4394dd3f3b0ce9c8bdc6302baa9b25ecb75..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 67075 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