From ec9096ab6933fd9aac241571d4e6c4fdd26c529e Mon Sep 17 00:00:00 2001 From: Saylor Berman Date: Thu, 23 May 2024 12:57:30 -0600 Subject: [PATCH 1/7] Add tracing how-to guide Problem: As a user, I want to know how to configure tracing, so I can observe and debug my requests. Solution: Add a how-to guide that describes how to configure tracing. --- .yamllint.yaml | 1 + site/content/how-to/maintenance/_index.md | 2 +- site/content/how-to/monitoring/_index.md | 2 +- site/content/how-to/monitoring/dashboard.md | 2 +- site/content/how-to/monitoring/prometheus.md | 2 +- site/content/how-to/monitoring/tracing.md | 333 ++++++++++++++++++ .../how-to/monitoring/troubleshooting.md | 3 +- site/static/img/jaeger-trace-attributes.png | Bin 0 -> 55067 bytes site/static/img/jaeger-trace-overview.png | Bin 0 -> 74862 bytes site/static/jaeger.yaml | 37 ++ site/static/otel-collector.yaml | 72 ++++ 11 files changed, 448 insertions(+), 6 deletions(-) create mode 100644 site/content/how-to/monitoring/tracing.md create mode 100644 site/static/img/jaeger-trace-attributes.png create mode 100644 site/static/img/jaeger-trace-overview.png create mode 100644 site/static/jaeger.yaml create mode 100644 site/static/otel-collector.yaml diff --git a/.yamllint.yaml b/.yamllint.yaml index a16b70fd03..eceee02ee7 100644 --- a/.yamllint.yaml +++ b/.yamllint.yaml @@ -7,6 +7,7 @@ ignore: - charts/nginx-gateway-fabric/templates - config/crd/bases/ - deploy/crds.yaml + - site/static rules: braces: enable diff --git a/site/content/how-to/maintenance/_index.md b/site/content/how-to/maintenance/_index.md index 5c33e95bbc..dd64b81b48 100644 --- a/site/content/how-to/maintenance/_index.md +++ b/site/content/how-to/maintenance/_index.md @@ -1,7 +1,7 @@ --- title: "Maintenance and Upgrades" description: -weight: 400 +weight: 500 linkTitle: "Maintenance and Upgrades" menu: docs: diff --git a/site/content/how-to/monitoring/_index.md b/site/content/how-to/monitoring/_index.md index 0213ee98e3..c649a3153b 100644 --- a/site/content/how-to/monitoring/_index.md +++ b/site/content/how-to/monitoring/_index.md @@ -1,7 +1,7 @@ --- title: "Monitoring and Troubleshooting" description: -weight: 500 +weight: 400 linkTitle: "Monitoring and Troubleshooting" menu: docs: diff --git a/site/content/how-to/monitoring/dashboard.md b/site/content/how-to/monitoring/dashboard.md index 97cf0fbdf5..8ff5dc79c4 100644 --- a/site/content/how-to/monitoring/dashboard.md +++ b/site/content/how-to/monitoring/dashboard.md @@ -1,7 +1,7 @@ --- title: "NGINX Plus Dashboard" description: "Learn how to view the NGINX Plus dashboard to see real-time metrics." -weight: 200 +weight: 300 toc: true docs: "DOCS-1417" --- diff --git a/site/content/how-to/monitoring/prometheus.md b/site/content/how-to/monitoring/prometheus.md index ea891feb81..d0238051e2 100644 --- a/site/content/how-to/monitoring/prometheus.md +++ b/site/content/how-to/monitoring/prometheus.md @@ -66,7 +66,7 @@ In the Grafana UI menu, go to `Connections` then `Data sources`. Add your Promet Download the following sample dashboard and Import as a new Dashboard in the Grafana UI. -{{< download "grafana-dashboard.json" "ngf-grafana-dashboard.json" >}} +- {{< download "grafana-dashboard.json" "ngf-grafana-dashboard.json" >}} ## Available metrics in NGINX Gateway Fabric diff --git a/site/content/how-to/monitoring/tracing.md b/site/content/how-to/monitoring/tracing.md new file mode 100644 index 0000000000..d31ed51db6 --- /dev/null +++ b/site/content/how-to/monitoring/tracing.md @@ -0,0 +1,333 @@ +--- +title: "Tracing" +description: "Learn how to configure tracing in NGINX Gateway Fabric." +weight: 200 +toc: true +docs: "DOCS-000" +--- + +{{}} + +## Overview + +NGINX Gateway Fabric supports tracing using [OpenTelemetry](https://opentelemetry.io/). The official [NGINX OpenTelemetry Module](https://github.com/nginxinc/nginx-otel) instruments the NGINX data plane to export traces to a configured collector. Tracing data can be exported to an OpenTelemetry Protocol (OTLP) exporter, such as the [OpenTelemetry Collector](https://github.com/open-telemetry/opentelemetry-collector). This collector can then export data to one or more upstream collectors like [Jaeger](https://www.jaegertracing.io/), [DataDog](https://docs.datadoghq.com/tracing/), and many others. This particular model is called the [Agent model](https://opentelemetry.io/docs/collector/deployment/agent/). + +In this guide, we are going enable tracing on our HTTPRoutes using NGINX Gateway Fabric. We will use the OpenTelemetry Collector and Jaeger to process and collect our traces. + +## Installing the Collectors + +The first step is to install the collectors. NGINX Gateway Fabric will be configured to export to the OpenTelemetry Collector, which is configured to export to Jaeger. This model allows us to easily swap out the visualization collector (Jaeger) for something else if we want to, or add more collectors without needing to reconfigure NGINX Gateway Fabric. It is also possible to configure NGINX Gateway Fabric to export directly to Jaeger, if desired. + +First, create the namespace: + +```shell +kubectl create namespace monitoring +``` + +Download the following files containing the configurations for the collectors: + +- {{< download "otel-collector.yaml" "otel-collector.yaml" >}} +- {{< download "jaeger.yaml" "jaeger.yaml" >}} + +{{< note >}}These collectors are for demo purposes and are not tuned for production use.{{< /note >}} + +and install: + +```shell +kubectl apply -f otel-collector.yaml -f jaeger.yaml -n monitoring +``` + +Ensure that the Pods are running: + +```shell +kubectl -n monitoring get pods +``` + +```text +NAME READY STATUS RESTARTS AGE +jaeger-8469f69b86-bfpk9 1/1 Running 0 9s +otel-collector-f786b7dfd-h2x9l 1/1 Running 0 9s +``` + +Once running, you can access the Jaeger dashboard by using port-forwarding in the background: + +```shell +kubectl port-forward -n monitoring svc/jaeger 16686:16686 & +``` + +Visit [http://127.0.0.1:16686](http://127.0.0.1:16686) to view the dashboard. + +## Enabling Tracing + +Enabling tracing requires two pieces of configuration. The first is a resource called `NginxProxy`, which contains global settings relating to the NGINX data plane. This resource is created and managed by the [cluster operator](https://gateway-api.sigs.k8s.io/concepts/roles-and-personas/), and is referenced in the `parametersRef` field of the GatewayClass. This resource can be created and linked when we install NGINX Gateway Fabric using its helm chart, or it can be added later. In this guide we will install the resource using the helm chart, but will also show what it looks like in case you want to add it after installation. + +The `NginxProxy` resource contains configuration for the collector, and applies to all Gateways and routes under the GatewayClass. It does not enable tracing, but is a prerequisite to the next piece of configuration. + +The second piece of configuration is the `ObservabilityPolicy`, which is a [Policy](https://gateway-api.sigs.k8s.io/reference/policy-attachment/) that targets HTTPRoutes or GRPCRoutes. This Policy is created by the [application developer](https://gateway-api.sigs.k8s.io/concepts/roles-and-personas/) and enables tracing for a specific route or routes. It requires the `NginxProxy` resource to exist in order to complete the tracing configuration. + +TODO(sberman): link to reference docs + +### Installing NGINX Gateway Fabric with global tracing config + +{{< note >}}Ensure that you've already [installed the Gateway API resources]({{< relref "installation/installing-ngf/helm.md#installing-the-gateway-api-resources" >}}).{{< /note >}} + +Based on the collector we deployed above, we'll create the following `values.yaml` file to install NGINX Gateway Fabric: + +```yaml +cat < values.yaml +nginx: + config: + telemetry: + exporter: + endpoint: otel-collector.tracing.svc:4317 + spanAttributes: + - key: cluster-attribute-key + value: cluster-attribute-value +EOT +``` + +We've set the endpoint and added a demo attribute that will be added to all tracing spans. + +To install: + +```shell +helm install ngf oci://ghcr.io/nginxinc/charts/nginx-gateway-fabric --create-namespace -n nginx-gateway -f values.yaml +``` + +As a result, we should see the following configurations: + +```shell +kubectl get nginxproxies.gateway.nginx.org ngf-proxy-config -o yaml +``` + +```yaml +apiVersion: gateway.nginx.org/v1alpha1 +kind: NginxProxy +metadata: + name: ngf-proxy-config +spec: + telemetry: + exporter: + endpoint: otel-collector.tracing.svc:4317 + spanAttributes: + - key: cluster-attribute-key + value: cluster-attribute-value +``` + +```shell +kubectl get gatewayclasses.gateway.networking.k8s.io nginx -o yaml +``` + +```yaml +apiVersion: gateway.networking.k8s.io/v1 +kind: GatewayClass +metadata: + name: nginx +spec: + controllerName: gateway.nginx.org/nginx-gateway-controller + parametersRef: + group: gateway.nginx.org + kind: NginxProxy + name: ngf-proxy-config +status: + conditions: + - lastTransitionTime: "2024-05-22T15:18:35Z" + message: GatewayClass is accepted + observedGeneration: 1 + reason: Accepted + status: "True" + type: Accepted + - lastTransitionTime: "2024-05-22T15:18:35Z" + message: Gateway API CRD versions are supported + observedGeneration: 1 + reason: SupportedVersion + status: "True" + type: SupportedVersion + - lastTransitionTime: "2024-05-22T15:18:35Z" + message: parametersRef resource is resolved + observedGeneration: 1 + reason: ResolvedRefs + status: "True" + type: ResolvedRefs +``` + +If you already had NGINX Gateway Fabric installed, then you can simply create the `NginxProxy` resource and link it in the GatewayClass `parametersRef` like shown above, using: + +```shell +kubectl edit gatewayclasses.gateway.networking.k8s.io nginx +``` + +Next you'll want to [Expose NGINX Gateway Fabric]({{< relref "installation/expose-nginx-gateway-fabric.md" >}}) and save the public IP address and port of NGINX Gateway Fabric into shell variables: + + ```text + GW_IP=XXX.YYY.ZZZ.III + GW_PORT= + ``` + +Now we can create our application, route, and tracing policy. + +### Create the application and route + +Create the basic **coffee** application: + +```yaml +kubectl apply -f - <}}If you have a DNS record allocated for `cafe.example.com`, you can send the request directly to that hostname, without needing to resolve.{{< /note >}} + +```shell +curl --resolve cafe.example.com:$GW_PORT:$GW_IP http://cafe.example.com:$GW_PORT/coffee +``` + +We should see a response from the coffee Pod. + +```text +Server address: 10.244.0.69:8080 +Server name: coffee-6b8b6d6486-k5w5w +URI: /coffee +``` + +Assuming that you have access to the [Jaeger dashboard](http://127.0.0.1:16686) from earlier in the guide, you shouldn't see any tracing information yet. This means we need to create our `ObservabilityPolicy`. + +### Create the ObservabilityPolicy + +To enable tracing for our coffee HTTPRoute, we create the following policy: + +```yaml +kubectl apply -f - <:`. + +{{}} + +

+ +If we click into one of the traces, we can see the attributes. + +{{}} + +As you can see, the trace includes the attribute from the global NginxProxy resource, set by the cluster operator, as well as the attribute from the ObservabilityPolicy, set by the application developer. + +## Further Reading + +TODO(sberman): link to reference docs again diff --git a/site/content/how-to/monitoring/troubleshooting.md b/site/content/how-to/monitoring/troubleshooting.md index 96ddae0461..8b8f4c631e 100644 --- a/site/content/how-to/monitoring/troubleshooting.md +++ b/site/content/how-to/monitoring/troubleshooting.md @@ -1,7 +1,6 @@ --- title: "Troubleshooting" - -weight: 300 +weight: 400 toc: true docs: "DOCS-1419" --- diff --git a/site/static/img/jaeger-trace-attributes.png b/site/static/img/jaeger-trace-attributes.png new file mode 100644 index 0000000000000000000000000000000000000000..ea8d383b116afc1cb9e224d704218ac8e2d56ffa GIT binary patch literal 55067 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%0A$|*%!^B)Ff!#?<@9snlFNuc?D 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 literal 0 HcmV?d00001 diff --git a/site/static/img/jaeger-trace-overview.png b/site/static/img/jaeger-trace-overview.png new file mode 100644 index 0000000000000000000000000000000000000000..309c826917bd6e43107375cc88b0cace9546cb44 GIT binary patch literal 74862 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� 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 SsNoIpPhMJCs#3x<=>Gw%;7m;b literal 0 HcmV?d00001 diff --git a/site/static/jaeger.yaml b/site/static/jaeger.yaml new file mode 100644 index 0000000000..9f1a11c275 --- /dev/null +++ b/site/static/jaeger.yaml @@ -0,0 +1,37 @@ +apiVersion: apps/v1 +kind: Deployment +metadata: + name: jaeger + labels: + app.kubernetes.io/name: jaeger +spec: + replicas: 1 + selector: + matchLabels: + app.kubernetes.io/name: jaeger + template: + metadata: + labels: + app.kubernetes.io/name: jaeger + spec: + containers: + - name: jaeger + image: jaegertracing/all-in-one:latest + ports: + - containerPort: 16686 + - containerPort: 4317 +--- +apiVersion: v1 +kind: Service +metadata: + name: jaeger + labels: + app.kubernetes.io/name: jaeger +spec: + selector: + app.kubernetes.io/name: jaeger + ports: + - name: frontend + port: 16686 + - name: collector + port: 4317 diff --git a/site/static/otel-collector.yaml b/site/static/otel-collector.yaml new file mode 100644 index 0000000000..ff2fe807fb --- /dev/null +++ b/site/static/otel-collector.yaml @@ -0,0 +1,72 @@ +apiVersion: v1 +kind: ConfigMap +metadata: + name: otel-collector-config +data: + otel-collector-config: | + receivers: + otlp: + protocols: + grpc: + endpoint: 0.0.0.0:4317 + processors: + extensions: + exporters: + otlp/jaeger: + endpoint: "jaeger.tracing.svc:4317" + tls: + insecure: true + service: + pipelines: + traces: + receivers: [otlp] + processors: [] + exporters: [otlp/jaeger] +--- +apiVersion: apps/v1 +kind: Deployment +metadata: + name: otel-collector + labels: + app.kubernetes.io/name: otel-collector +spec: + selector: + matchLabels: + app.kubernetes.io/name: otel-collector + replicas: 1 + template: + metadata: + labels: + app.kubernetes.io/name: otel-collector + spec: + containers: + - name: otel-collector + image: otel/opentelemetry-collector:latest + command: + - /otelcol + - --config=/conf/otel-collector-config.yaml + ports: + - containerPort: 4317 + volumeMounts: + - name: otel-collector-config + mountPath: /conf + volumes: + - name: otel-collector-config + configMap: + name: otel-collector-config + items: + - key: otel-collector-config + path: otel-collector-config.yaml +--- +apiVersion: v1 +kind: Service +metadata: + name: otel-collector + labels: + app.kubernetes.io/name: otel-collector +spec: + selector: + app.kubernetes.io/name: otel-collector + ports: + - name: otlp-grpc + port: 4317 From f73a86f5ea5fdc7c87316949be292deffafb279b Mon Sep 17 00:00:00 2001 From: Saylor Berman Date: Wed, 29 May 2024 15:51:22 -0600 Subject: [PATCH 2/7] Code review --- site/content/how-to/monitoring/tracing.md | 16 +++++++++------- 1 file changed, 9 insertions(+), 7 deletions(-) diff --git a/site/content/how-to/monitoring/tracing.md b/site/content/how-to/monitoring/tracing.md index d31ed51db6..788b6b5cfc 100644 --- a/site/content/how-to/monitoring/tracing.md +++ b/site/content/how-to/monitoring/tracing.md @@ -59,11 +59,13 @@ Visit [http://127.0.0.1:16686](http://127.0.0.1:16686) to view the dashboard. ## Enabling Tracing -Enabling tracing requires two pieces of configuration. The first is a resource called `NginxProxy`, which contains global settings relating to the NGINX data plane. This resource is created and managed by the [cluster operator](https://gateway-api.sigs.k8s.io/concepts/roles-and-personas/), and is referenced in the `parametersRef` field of the GatewayClass. This resource can be created and linked when we install NGINX Gateway Fabric using its helm chart, or it can be added later. In this guide we will install the resource using the helm chart, but will also show what it looks like in case you want to add it after installation. +Enabling tracing requires two pieces of configuration. + +- `NginxProxy`: This resource contains global settings relating to the NGINX data plane. It is created and managed by the [cluster operator](https://gateway-api.sigs.k8s.io/concepts/roles-and-personas/), and is referenced in the `parametersRef` field of the GatewayClass. This resource can be created and linked when we install NGINX Gateway Fabric using its helm chart, or it can be added later. In this guide we will install the resource using the helm chart, but will also show what it looks like in case you want to add it after installation. The `NginxProxy` resource contains configuration for the collector, and applies to all Gateways and routes under the GatewayClass. It does not enable tracing, but is a prerequisite to the next piece of configuration. -The second piece of configuration is the `ObservabilityPolicy`, which is a [Policy](https://gateway-api.sigs.k8s.io/reference/policy-attachment/) that targets HTTPRoutes or GRPCRoutes. This Policy is created by the [application developer](https://gateway-api.sigs.k8s.io/concepts/roles-and-personas/) and enables tracing for a specific route or routes. It requires the `NginxProxy` resource to exist in order to complete the tracing configuration. +- `ObservabilityPolicy`: This resource is a [Policy](https://gateway-api.sigs.k8s.io/reference/policy-attachment/) that targets HTTPRoutes or GRPCRoutes. It is created by the [application developer](https://gateway-api.sigs.k8s.io/concepts/roles-and-personas/) and enables tracing for a specific route or routes. It requires the `NginxProxy` resource to exist in order to complete the tracing configuration. TODO(sberman): link to reference docs @@ -277,14 +279,14 @@ spec: name: coffee tracing: strategy: ratio - ratio: 50 + ratio: 75 spanAttributes: - key: coffee-key value: coffee-value EOF ``` -This policy attaches to the coffee HTTPRoute and enables ratio-based tracing, where 50% of requests will be sampled. We've also included a span attribute to add extra data to the spans. +This policy attaches to the coffee HTTPRoute and enables ratio-based tracing, where 75% of requests will be sampled. We've also included a span attribute to add extra data to the spans. Let's check the status of the policy: @@ -310,13 +312,13 @@ Status: Controller Name: gateway.nginx.org/nginx-gateway-controller ``` -The policy is accepted, so now let's send some more traffic. +The policy is accepted, so now let's send some more traffic. Run the following command multiple times. ```shell -for i in $(seq 1 10); do curl --resolve cafe.example.com:$GW_PORT:$GW_IP http://cafe.example.com:$GW_PORT/coffee; sleep 1; done +curl --resolve cafe.example.com:$GW_PORT:$GW_IP http://cafe.example.com:$GW_PORT/coffee ``` -This will send 10 requests. Once complete, let's refresh the Jaeger dashboard. We should now see a service entry called `ngf:default:cafe`, and a few traces. The service name by default is `ngf::`. +Once complete, let's refresh the Jaeger dashboard. We should now see a service entry called `ngf:default:cafe`, and a few traces. The service name by default is `ngf::`. {{}} From 5c9052d9abb9b89a43bbe5c217b4f650559ec219 Mon Sep 17 00:00:00 2001 From: Saylor Berman Date: Thu, 30 May 2024 09:12:14 -0600 Subject: [PATCH 3/7] Apply suggestions from code review Co-authored-by: Alan Dooley --- site/content/how-to/monitoring/tracing.md | 57 +++++++++++------------ 1 file changed, 28 insertions(+), 29 deletions(-) diff --git a/site/content/how-to/monitoring/tracing.md b/site/content/how-to/monitoring/tracing.md index 788b6b5cfc..d4502fc2e4 100644 --- a/site/content/how-to/monitoring/tracing.md +++ b/site/content/how-to/monitoring/tracing.md @@ -1,24 +1,23 @@ --- title: "Tracing" -description: "Learn how to configure tracing in NGINX Gateway Fabric." weight: 200 toc: true docs: "DOCS-000" --- -{{}} +Learn how to configure tracing in NGINX Gateway Fabric. ## Overview -NGINX Gateway Fabric supports tracing using [OpenTelemetry](https://opentelemetry.io/). The official [NGINX OpenTelemetry Module](https://github.com/nginxinc/nginx-otel) instruments the NGINX data plane to export traces to a configured collector. Tracing data can be exported to an OpenTelemetry Protocol (OTLP) exporter, such as the [OpenTelemetry Collector](https://github.com/open-telemetry/opentelemetry-collector). This collector can then export data to one or more upstream collectors like [Jaeger](https://www.jaegertracing.io/), [DataDog](https://docs.datadoghq.com/tracing/), and many others. This particular model is called the [Agent model](https://opentelemetry.io/docs/collector/deployment/agent/). +NGINX Gateway Fabric supports tracing using [OpenTelemetry](https://opentelemetry.io/). The official [NGINX OpenTelemetry Module](https://github.com/nginxinc/nginx-otel) instruments the NGINX data plane to export traces to a configured collector. Tracing data can be used with an OpenTelemetry Protocol (OTLP) exporter, such as the [OpenTelemetry Collector](https://github.com/open-telemetry/opentelemetry-collector). This collector can then export data to one or more upstream collectors like [Jaeger](https://www.jaegertracing.io/), [DataDog](https://docs.datadoghq.com/tracing/), and many others. This is called the [Agent model](https://opentelemetry.io/docs/collector/deployment/agent/). -In this guide, we are going enable tracing on our HTTPRoutes using NGINX Gateway Fabric. We will use the OpenTelemetry Collector and Jaeger to process and collect our traces. +This guide explains how to enable tracing on HTTPRoutes using NGINX Gateway Fabric. It uses the OpenTelemetry Collector and Jaeger to process and collect the traces. -## Installing the Collectors +## Install the Collectors -The first step is to install the collectors. NGINX Gateway Fabric will be configured to export to the OpenTelemetry Collector, which is configured to export to Jaeger. This model allows us to easily swap out the visualization collector (Jaeger) for something else if we want to, or add more collectors without needing to reconfigure NGINX Gateway Fabric. It is also possible to configure NGINX Gateway Fabric to export directly to Jaeger, if desired. +The first step is to install the collectors. NGINX Gateway Fabric will be configured to export to the OpenTelemetry Collector, which is configured to export to Jaeger. This model allows the visualization collector (Jaeger) to be swapped with something else, or to add more collectors without needing to reconfigure NGINX Gateway Fabric. It is also possible to configure NGINX Gateway Fabric to export directly to Jaeger. -First, create the namespace: +Create the namespace: ```shell kubectl create namespace monitoring @@ -29,15 +28,15 @@ Download the following files containing the configurations for the collectors: - {{< download "otel-collector.yaml" "otel-collector.yaml" >}} - {{< download "jaeger.yaml" "jaeger.yaml" >}} -{{< note >}}These collectors are for demo purposes and are not tuned for production use.{{< /note >}} +{{< note >}}These collectors are for demonstration purposes and are not tuned for production use.{{< /note >}} -and install: +Then install them: ```shell kubectl apply -f otel-collector.yaml -f jaeger.yaml -n monitoring ``` -Ensure that the Pods are running: +Ensure the Pods are running: ```shell kubectl -n monitoring get pods @@ -57,9 +56,9 @@ kubectl port-forward -n monitoring svc/jaeger 16686:16686 & Visit [http://127.0.0.1:16686](http://127.0.0.1:16686) to view the dashboard. -## Enabling Tracing +## Enable tracing -Enabling tracing requires two pieces of configuration. +To enable tracing, you must configure two resources: - `NginxProxy`: This resource contains global settings relating to the NGINX data plane. It is created and managed by the [cluster operator](https://gateway-api.sigs.k8s.io/concepts/roles-and-personas/), and is referenced in the `parametersRef` field of the GatewayClass. This resource can be created and linked when we install NGINX Gateway Fabric using its helm chart, or it can be added later. In this guide we will install the resource using the helm chart, but will also show what it looks like in case you want to add it after installation. @@ -69,9 +68,9 @@ The `NginxProxy` resource contains configuration for the collector, and applies TODO(sberman): link to reference docs -### Installing NGINX Gateway Fabric with global tracing config +### Install NGINX Gateway Fabric with global tracing configuration -{{< note >}}Ensure that you've already [installed the Gateway API resources]({{< relref "installation/installing-ngf/helm.md#installing-the-gateway-api-resources" >}}).{{< /note >}} +{{< note >}}Ensure that you [install the Gateway API resources]({{< relref "installation/installing-ngf/helm.md#installing-the-gateway-api-resources" >}}).{{< /note >}} Based on the collector we deployed above, we'll create the following `values.yaml` file to install NGINX Gateway Fabric: @@ -88,7 +87,7 @@ nginx: EOT ``` -We've set the endpoint and added a demo attribute that will be added to all tracing spans. +The endpoint and demo attribute will be added to all tracing spans. To install: @@ -96,7 +95,7 @@ To install: helm install ngf oci://ghcr.io/nginxinc/charts/nginx-gateway-fabric --create-namespace -n nginx-gateway -f values.yaml ``` -As a result, we should see the following configurations: +You should see the following configuration: ```shell kubectl get nginxproxies.gateway.nginx.org ngf-proxy-config -o yaml @@ -153,20 +152,20 @@ status: type: ResolvedRefs ``` -If you already had NGINX Gateway Fabric installed, then you can simply create the `NginxProxy` resource and link it in the GatewayClass `parametersRef` like shown above, using: +If you already have NGINX Gateway Fabric installed, then you can create the `NginxProxy` resource and link it to the GatewayClass `parametersRef`: ```shell kubectl edit gatewayclasses.gateway.networking.k8s.io nginx ``` -Next you'll want to [Expose NGINX Gateway Fabric]({{< relref "installation/expose-nginx-gateway-fabric.md" >}}) and save the public IP address and port of NGINX Gateway Fabric into shell variables: +Next, [Expose NGINX Gateway Fabric]({{< relref "installation/expose-nginx-gateway-fabric.md" >}}) and save the public IP address and port of NGINX Gateway Fabric into shell variables: ```text GW_IP=XXX.YYY.ZZZ.III GW_PORT= ``` -Now we can create our application, route, and tracing policy. +You can now create the application, route, and tracing policy. ### Create the application and route @@ -209,7 +208,7 @@ spec: EOF ``` -Next we'll create the Gateway resource and HTTPRoute for our app: +Create the Gateway resource and HTTPRoute for the application: ```yaml kubectl apply -f - <}}If you have a DNS record allocated for `cafe.example.com`, you can send the request directly to that hostname, without needing to resolve.{{< /note >}} @@ -252,7 +251,7 @@ Let's ensure that traffic can flow to our application. curl --resolve cafe.example.com:$GW_PORT:$GW_IP http://cafe.example.com:$GW_PORT/coffee ``` -We should see a response from the coffee Pod. +You should receive a response from the coffee Pod. ```text Server address: 10.244.0.69:8080 @@ -260,11 +259,11 @@ Server name: coffee-6b8b6d6486-k5w5w URI: /coffee ``` -Assuming that you have access to the [Jaeger dashboard](http://127.0.0.1:16686) from earlier in the guide, you shouldn't see any tracing information yet. This means we need to create our `ObservabilityPolicy`. +You shouldn't see any information from the [Jaeger dashboard](http://127.0.0.1:16686) yet: you need to create the `ObservabilityPolicy`. ### Create the ObservabilityPolicy -To enable tracing for our coffee HTTPRoute, we create the following policy: +To enable tracing for the coffee HTTPRoute, create the following policy: ```yaml kubectl apply -f - <
-If we click into one of the traces, we can see the attributes. +Select a trace to view the attributes. {{}} -As you can see, the trace includes the attribute from the global NginxProxy resource, set by the cluster operator, as well as the attribute from the ObservabilityPolicy, set by the application developer. +The trace includes the attribute from the global NginxProxy resource as well as the attribute from the ObservabilityPolicy. ## Further Reading From e2354be19d1b27bb2a2279987ba9890a514245b7 Mon Sep 17 00:00:00 2001 From: Saylor Berman Date: Thu, 30 May 2024 09:12:31 -0600 Subject: [PATCH 4/7] Additional updates --- site/content/how-to/monitoring/tracing.md | 12 +++--------- .../installation/install-gateway-api-resources.md | 2 +- 2 files changed, 4 insertions(+), 10 deletions(-) diff --git a/site/content/how-to/monitoring/tracing.md b/site/content/how-to/monitoring/tracing.md index d4502fc2e4..fea18e30d8 100644 --- a/site/content/how-to/monitoring/tracing.md +++ b/site/content/how-to/monitoring/tracing.md @@ -60,19 +60,17 @@ Visit [http://127.0.0.1:16686](http://127.0.0.1:16686) to view the dashboard. To enable tracing, you must configure two resources: -- `NginxProxy`: This resource contains global settings relating to the NGINX data plane. It is created and managed by the [cluster operator](https://gateway-api.sigs.k8s.io/concepts/roles-and-personas/), and is referenced in the `parametersRef` field of the GatewayClass. This resource can be created and linked when we install NGINX Gateway Fabric using its helm chart, or it can be added later. In this guide we will install the resource using the helm chart, but will also show what it looks like in case you want to add it after installation. +- `NginxProxy`: This resource contains global settings relating to the NGINX data plane. It is created and managed by the [cluster operator](https://gateway-api.sigs.k8s.io/concepts/roles-and-personas/), and is referenced in the `parametersRef` field of the GatewayClass. This resource can be created and linked when we install NGINX Gateway Fabric using its helm chart, or it can be added later. This guide installs the resource using the helm chart, but the resource can also be created for an existing deployment. The `NginxProxy` resource contains configuration for the collector, and applies to all Gateways and routes under the GatewayClass. It does not enable tracing, but is a prerequisite to the next piece of configuration. - `ObservabilityPolicy`: This resource is a [Policy](https://gateway-api.sigs.k8s.io/reference/policy-attachment/) that targets HTTPRoutes or GRPCRoutes. It is created by the [application developer](https://gateway-api.sigs.k8s.io/concepts/roles-and-personas/) and enables tracing for a specific route or routes. It requires the `NginxProxy` resource to exist in order to complete the tracing configuration. -TODO(sberman): link to reference docs - ### Install NGINX Gateway Fabric with global tracing configuration {{< note >}}Ensure that you [install the Gateway API resources]({{< relref "installation/installing-ngf/helm.md#installing-the-gateway-api-resources" >}}).{{< /note >}} -Based on the collector we deployed above, we'll create the following `values.yaml` file to install NGINX Gateway Fabric: +Referencing the previously deployed collector, create the following `values.yaml` file for installing NGINX Gateway Fabric: ```yaml cat < values.yaml @@ -317,7 +315,7 @@ The `message` field shows the policy is accepted. Run the next command multiple curl --resolve cafe.example.com:$GW_PORT:$GW_IP http://cafe.example.com:$GW_PORT/coffee ``` -Once complete, let's refresh the Jaeger dashboard. We should now see a service entry called `ngf:default:cafe`, and a few traces. The service name by default is `ngf::`. +Once complete, refresh the Jaeger dashboard. You should see a service entry called `ngf:default:cafe`, and a few traces. The default service name is `ngf::`. {{}} @@ -328,7 +326,3 @@ Select a trace to view the attributes. {{}} The trace includes the attribute from the global NginxProxy resource as well as the attribute from the ObservabilityPolicy. - -## Further Reading - -TODO(sberman): link to reference docs again diff --git a/site/content/includes/installation/install-gateway-api-resources.md b/site/content/includes/installation/install-gateway-api-resources.md index a0ba68a58f..d97d7d4f91 100644 --- a/site/content/includes/installation/install-gateway-api-resources.md +++ b/site/content/includes/installation/install-gateway-api-resources.md @@ -10,7 +10,7 @@ To install the Gateway API resources, run the following: kubectl kustomize "https://github.com/nginxinc/nginx-gateway-fabric/config/crd/gateway-api/standard?ref=v1.2.0" | kubectl apply -f - ``` -{{}}If you plan to use the `edge` version of NGINX Gateway Fabric, you can replace the vesion in `ref` with `main`, for example `ref=main`.{{}} +{{}}If you plan to use the `edge` version of NGINX Gateway Fabric, you can replace the version in `ref` with `main`, for example `ref=main`.{{}} Alternatively, you can install the Gateway API resources from the experimental channel. We support a subset of the additional features provided by the experimental channel. To install from the experimental channel, run the following: From cdc38c9662932ff1d770c519be7919f170889e38 Mon Sep 17 00:00:00 2001 From: Saylor Berman Date: Thu, 30 May 2024 09:16:59 -0600 Subject: [PATCH 5/7] Fix spacing --- site/content/how-to/monitoring/tracing.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/site/content/how-to/monitoring/tracing.md b/site/content/how-to/monitoring/tracing.md index fea18e30d8..1f3b576dbc 100644 --- a/site/content/how-to/monitoring/tracing.md +++ b/site/content/how-to/monitoring/tracing.md @@ -62,7 +62,7 @@ To enable tracing, you must configure two resources: - `NginxProxy`: This resource contains global settings relating to the NGINX data plane. It is created and managed by the [cluster operator](https://gateway-api.sigs.k8s.io/concepts/roles-and-personas/), and is referenced in the `parametersRef` field of the GatewayClass. This resource can be created and linked when we install NGINX Gateway Fabric using its helm chart, or it can be added later. This guide installs the resource using the helm chart, but the resource can also be created for an existing deployment. -The `NginxProxy` resource contains configuration for the collector, and applies to all Gateways and routes under the GatewayClass. It does not enable tracing, but is a prerequisite to the next piece of configuration. + The `NginxProxy` resource contains configuration for the collector, and applies to all Gateways and routes under the GatewayClass. It does not enable tracing, but is a prerequisite to the next piece of configuration. - `ObservabilityPolicy`: This resource is a [Policy](https://gateway-api.sigs.k8s.io/reference/policy-attachment/) that targets HTTPRoutes or GRPCRoutes. It is created by the [application developer](https://gateway-api.sigs.k8s.io/concepts/roles-and-personas/) and enables tracing for a specific route or routes. It requires the `NginxProxy` resource to exist in order to complete the tracing configuration. From adb384a26ed5ed529f1ccca397f6b15e3bf6fd92 Mon Sep 17 00:00:00 2001 From: Saylor Berman Date: Thu, 30 May 2024 09:18:20 -0600 Subject: [PATCH 6/7] Fix phrasing --- site/content/how-to/monitoring/tracing.md | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/site/content/how-to/monitoring/tracing.md b/site/content/how-to/monitoring/tracing.md index 1f3b576dbc..e98752ada5 100644 --- a/site/content/how-to/monitoring/tracing.md +++ b/site/content/how-to/monitoring/tracing.md @@ -85,7 +85,7 @@ nginx: EOT ``` -The endpoint and demo attribute will be added to all tracing spans. +The span attribute will be added to all tracing spans. To install: @@ -283,7 +283,7 @@ spec: EOF ``` -This policy attaches to the coffee HTTPRoute and enables ratio-based tracing, sampling 75% of requests. The `spanAttributes` provide extra data. +This policy attaches to the coffee HTTPRoute and enables ratio-based tracing, sampling 75% of requests. The span attribute is only included in the spans for the routes referenced in this policy. Check the status of the policy: From 9df61b2aade753ffecd7c9e5d85e04abd8324895 Mon Sep 17 00:00:00 2001 From: Saylor Berman Date: Thu, 30 May 2024 09:49:41 -0600 Subject: [PATCH 7/7] Update site/content/how-to/monitoring/tracing.md Co-authored-by: Kate Osborn <50597707+kate-osborn@users.noreply.github.com> --- site/content/how-to/monitoring/tracing.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/site/content/how-to/monitoring/tracing.md b/site/content/how-to/monitoring/tracing.md index e98752ada5..679aa0d7f5 100644 --- a/site/content/how-to/monitoring/tracing.md +++ b/site/content/how-to/monitoring/tracing.md @@ -64,7 +64,7 @@ To enable tracing, you must configure two resources: The `NginxProxy` resource contains configuration for the collector, and applies to all Gateways and routes under the GatewayClass. It does not enable tracing, but is a prerequisite to the next piece of configuration. -- `ObservabilityPolicy`: This resource is a [Policy](https://gateway-api.sigs.k8s.io/reference/policy-attachment/) that targets HTTPRoutes or GRPCRoutes. It is created by the [application developer](https://gateway-api.sigs.k8s.io/concepts/roles-and-personas/) and enables tracing for a specific route or routes. It requires the `NginxProxy` resource to exist in order to complete the tracing configuration. +- `ObservabilityPolicy`: This resource is a [Direct PolicyAttachment](https://gateway-api.sigs.k8s.io/reference/policy-attachment/) that targets HTTPRoutes or GRPCRoutes. It is created by the [application developer](https://gateway-api.sigs.k8s.io/concepts/roles-and-personas/) and enables tracing for a specific route or routes. It requires the `NginxProxy` resource to exist in order to complete the tracing configuration. ### Install NGINX Gateway Fabric with global tracing configuration