diff --git a/content/en/scenarios/self_service_observability/1-background.md b/content/en/scenarios/self_service_observability/1-background.md new file mode 100644 index 0000000000..b49140c191 --- /dev/null +++ b/content/en/scenarios/self_service_observability/1-background.md @@ -0,0 +1,27 @@ +--- +title: Background +linkTitle: 1 Background +weight: 1 +time: 3 minutes +--- + +## Background + +Let's review a few background concepts on **Open Telemetry** before jumping into the details. + +First we have the **Open Telemetry Collector**, which lives on hosts or kubernetes nodes. These collectors can collect local information (like cpu, disk, memory, etc.). They can also collect metrics from other sources like prometheus (push or pull) or databases and other middleware. + +![OTel Diagram](../images/otel-diagram.svg?width=60vw) +Source: [OTel Documentation](https://opentelemetry.io/docs/) + +The way the **OTel Collector** collects and sends data is using **pipelines**. Pipelines are made up of: +* **Receivers**: Collect telemetry from one or more sources; they are pull- or push-based. +* **Processors**: Take data from receivers and modify or transform them. Unlike receivers and exporters, processors process data in a specific order. +* **Exporters**: Send data to one or more observability backends or other destinations. + +![OTel Diagram](../images/otel-collector-details.svg?width=60vw) +Source: [OTel Documentation](https://opentelemetry.io/docs/collector/) + +The final piece is applications which are instrumented; they will send traces (spans), metrics, and logs. + +By default the instrumentation is designed to send data to the local collector (on the host or kubernetes node). This is desirable because we can then add metadata on it -- like which pod or which node/host the application is running on. \ No newline at end of file diff --git a/content/en/scenarios/self_service_observability/2-collect_with_standards/1-deploy_gateway.md b/content/en/scenarios/self_service_observability/2-collect_with_standards/1-deploy_gateway.md new file mode 100644 index 0000000000..1f40cf76ba --- /dev/null +++ b/content/en/scenarios/self_service_observability/2-collect_with_standards/1-deploy_gateway.md @@ -0,0 +1,112 @@ +--- +title: Deploy Gateway +linkTitle: 2.1 Deploy Gateway +weight: 1 +time: 5 minutes +--- + +## Gateway + +First we will deploy the **OTel Gateway**. The workshop instructor will deploy the gateway, but we will walk through the steps here if you wish to try this yourself on a second instance. + +The steps: +* Click the **Data Management** icon in the toolbar +* Click the **+ Add integration** button +* Click **Deploy the Splunk OpenTelemetry Collector** button +* Click **Next** +* Select **Linux** +* Change mode to **Data forwarding (gateway)** +* Set the environment to **prod** +* Choose the access token for this workshop +* Click **Next** +* Copy the installer script and run it in the provided linux environment. + +Once our gateway is started we will notice... **Nothing**. The gateway, by default, doesn't send any data. It can be configured to send data, but it doesn't by default. + +We can review the config file with: +``` bash +sudo cat /etc/otel/collector/splunk-otel-collector.conf +``` + +And see that the config being used is `gateway_config.yaml`. + +{{% notice title="Tip" style="primary" icon="lightbulb" %}} +Diagrams created with [OTelBin.io](https://www.otelbin.io). Click on them to see them in detail. +{{% /notice %}} + +|Diagram|What it Tells Us| +|-|-| +|![metrics Config](../images/metrics.png)|**Metrics**:
The gateway will receive metrics over **otlp** or **signalfx** protocols, and then send these metrics to **Splunk Observability Cloud** with the **signalfx** protocol.

There is also a pipeline for **prometheus metrics** to be sent to Splunk. That pipeline is labeled **internal** and is meant to be for the collector. (In other words if we want to receive prometheus directly we should add it to the main pipeline.)| +|![traces Config](../images/traces.png)|**Traces**:
The gateway will receive traces over **jaeger**, **otlp**, **sapm**, or **zipkin** and then send these traces to **Splunk Observability Cloud** with the **sapm** protocol.| +|![logs Config](../images/logs.png)|**Logs**:
The gateway will receive logs over **otlp** and then send these logs to 2 places: **Splunk Enterprise (Cloud)** (for logs) and **Splunk Observability Cloud** (for profiling data).

There is also a pipeline labeled **signalfx** that is sending **signalfx** to **Splunk Observability Cloud**; these are events that can be used to add events to charts, as well as the process list.| + +We're not going to see any host metrics, and we aren't send any other data through the gateway yet. But we do have the **internal** metrics being sent in. + +You can find it by creating a new chart and adding a metric: +* Click the **+** in the top-right +* Click **Chart** +* For the signal of Plot A, type `otelcol_process_uptime` +* Add a filter with the + to the right, and type: `host.id:` + +You should get a chart like the following: +![Chart of gateway](../images/gateway_metric_chart.png) + +You can look at the **Metric Finder** to find other internal metrics to explore. + +## Add Metadata + +Before we deploy a collector (agent) let's add some metada onto metrics and traces with the gateway. That's how we will know data is passing through it. + +The [attributes processor](https://docs.splunk.com/observability/en/gdi/opentelemetry/components/attributes-processor.html) let's us add some metadata. + +``` bash +sudo vi /etc/otel/collector/agent_config.yaml +``` + +Here's what we want to add to the processors section: + +``` yaml +processors: + attributes/gateway_config: + actions: + - key: gateway + value: oac + action: insert +``` + +And then to the pipelines (adding `attributes/gateway_config` to each): +``` yaml +service: + pipelines: + traces: + receivers: [jaeger, otlp, smartagent/signalfx-forwarder, zipkin] + processors: + - memory_limiter + - batch + - resourcedetection + - attributes/gateway_config + #- resource/add_environment + exporters: [sapm, signalfx] + # Use instead when sending to gateway + #exporters: [otlp, signalfx] + metrics: + receivers: [hostmetrics, otlp, signalfx, smartagent/signalfx-forwarder] + processors: [memory_limiter, batch, resourcedetection, attributes/gateway_config] + exporters: [signalfx] + # Use instead when sending to gateway + #exporters: [otlp] +``` + +And finally we need to restart the gateway: +``` bash +sudo systemctl restart splunk-otel-collector.service +``` + +We can make sure it is still running fine by checking the status: +``` bash +sudo systemctl status splunk-otel-collector.service +``` + +## Next + +Next, let's deploy a collector and then configure it to this gateway. \ No newline at end of file diff --git a/content/en/scenarios/self_service_observability/2-collect_with_standards/2-deploy_collector_agent.md b/content/en/scenarios/self_service_observability/2-collect_with_standards/2-deploy_collector_agent.md new file mode 100644 index 0000000000..a9386f2834 --- /dev/null +++ b/content/en/scenarios/self_service_observability/2-collect_with_standards/2-deploy_collector_agent.md @@ -0,0 +1,42 @@ +--- +title: Deploy Collector (Agent) +linkTitle: 2.2 Deploy Collector (Agent) +weight: 2 +time: 10 minutes +--- + +## Collector (Agent) + +Now we will deploy a collector. At first this will be configured to go directly to the back-end, but we will change the configuration and restart the collector to use the gateway. + +The steps: +* Click the **Data Management** icon in the toolbar +* Click the **+ Add integration** button +* Click **Deploy the Splunk OpenTelemetry Collector** button +* Click **Next** +* Select **Linux** +* Leave the mode as **Host monitoring (agent)** +* Set the environment to **prod** +* Leave the rest as defaults +* Choose the access token for this workshop +* Click **Next** +* Copy the installer script and run it in the provided linux environment. + +This collector is sending host metrics, so you can find it in common navigators: +* Click the **Infrastructure** icon in the toolbar +* Click the **EC2** panel under **Amazon Web Services** +* The `AWSUniqueId` is the easiest thing to find; add a filter and look for it with a wildcard (i.e. `i-0ba6575181cb05226*`) + +![Chart of agent](../images/collector_agent_chart.png) + +We can also simply look at the `cpu.utilization` metric. Create a new chart to display it, filtered on the AWSUniqueId: + +![Chart 2 of agent](../images/collector_agent_chart_2.png) + +The reason we wanted to do that is so we can easily see the new dimension added on once we send the collector through the gateway. You can click on the **Data table** to see the dimensions currently being sent: + +![Data Table](../images/collector_agent_data_table.png) + +## Next + +Next we'll reconfigure the collector to send to the gateway. \ No newline at end of file diff --git a/content/en/scenarios/self_service_observability/2-collect_with_standards/3-reconfigure_collector.md b/content/en/scenarios/self_service_observability/2-collect_with_standards/3-reconfigure_collector.md new file mode 100644 index 0000000000..bbd9992140 --- /dev/null +++ b/content/en/scenarios/self_service_observability/2-collect_with_standards/3-reconfigure_collector.md @@ -0,0 +1,99 @@ +--- +title: Reconfigure Collector +linkTitle: 2.3 Reconfigure Collector +weight: 3 +time: 10 minutes +--- + +## Reconfigure Collector + +To reconfigure the collector we need to make these changes: +* In `agent_config.yaml` + * We need to adjust the **signalfx** exporter to use the gateway + * The **otlp** exporter is already there, so we leave it alone + * We need to change the pipelines to use **otlp** +* In `splunk-otel-collector.conf` + * We need to set the `SPLUNK_GATEWAY_URL` to the url provided by the instructor + +See this [docs page](https://docs.splunk.com/observability/en/gdi/opentelemetry/deployment-modes.html#agent-configuration) for more details. + +The exporters will be the following: +``` yaml +exporters: + # Metrics + Events + signalfx: + access_token: "${SPLUNK_ACCESS_TOKEN}" + #api_url: "${SPLUNK_API_URL}" + #ingest_url: "${SPLUNK_INGEST_URL}" + # Use instead when sending to gateway + api_url: "http://${SPLUNK_GATEWAY_URL}:6060" + ingest_url: "http://${SPLUNK_GATEWAY_URL}:9943" + sync_host_metadata: true + correlation: + # Send to gateway + otlp: + endpoint: "${SPLUNK_GATEWAY_URL}:4317" + tls: + insecure: true +``` +The others you can leave as they are but they won't be used, as you will see in the pipelines. + +The pipeline changes (you can see the items commented out and uncommented out): +``` yaml +service: + pipelines: + traces: + receivers: [jaeger, otlp, smartagent/signalfx-forwarder, zipkin] + processors: + - memory_limiter + - batch + - resourcedetection + #- resource/add_environment + #exporters: [sapm, signalfx] + # Use instead when sending to gateway + exporters: [otlp, signalfx] + metrics: + receivers: [hostmetrics, otlp, signalfx, smartagent/signalfx-forwarder] + processors: [memory_limiter, batch, resourcedetection] + #exporters: [signalfx] + # Use instead when sending to gateway + exporters: [otlp] + metrics/internal: + receivers: [prometheus/internal] + processors: [memory_limiter, batch, resourcedetection] + # When sending to gateway, at least one metrics pipeline needs + # to use signalfx exporter so host metadata gets emitted + exporters: [signalfx] + logs/signalfx: + receivers: [signalfx, smartagent/processlist] + processors: [memory_limiter, batch, resourcedetection] + exporters: [signalfx] + logs: + receivers: [fluentforward, otlp] + processors: + - memory_limiter + - batch + - resourcedetection + #- resource/add_environment + #exporters: [splunk_hec, splunk_hec/profiling] + # Use instead when sending to gateway + exporters: [otlp] +``` + +And finally we can add the `SPLUNK_GATEWAY_URL` in `splunk-otel-collector.conf`, for example: +``` conf +SPLUNK_GATEWAY_URL=gateway.splunk011y.com +``` + +Then we can restart the collector: +``` bash +sudo systemctl restart splunk-otel-collector.service +``` + +And check the status: +``` bash +sudo systemctl status splunk-otel-collector.service +``` + +And finally see the new dimension on the metrics: +![New Dimension](../images/gateway_dimension.png) diff --git a/content/en/scenarios/self_service_observability/2-collect_with_standards/_index.md b/content/en/scenarios/self_service_observability/2-collect_with_standards/_index.md new file mode 100644 index 0000000000..f49c993532 --- /dev/null +++ b/content/en/scenarios/self_service_observability/2-collect_with_standards/_index.md @@ -0,0 +1,33 @@ +--- +title: Collect Data with Standards +linkTitle: 2 Collect Data with Standards +weight: 2 +time: 10 minutes +--- + +## Introduction + +For this workshop, we'll be doing things that only a central tools or administration would do. + +The workshop uses scripts to help with steps that aren't part of the focus of this workshop -- like how to change a kubernetes app, or start an application from a host. + +{{% notice title="Tip" style="primary" icon="lightbulb" %}} +It can be useful to review what the scripts are doing. + +So along the way it is advised to run `cat ` from time to time to see what that step just did. + +The workshop won't call this out, so do it when you are curious. +{{% /notice %}} + +We'll also be running some scripts to simulate data that we want to deal with. + +A simplified version of the architecture (leaving aside the specifics of kubernetes) will look something like the following: + +![Architecture](../images/arch.png) + +* The **App** sends metrics and traces to the **Otel Collector** +* The **Otel Collector** also collects metrics of its own +* The **Otel Collector** adds metadata to its own metrics and data that passes through it +* The **OTel Gateway** offers another opportunity to add metadata + +Let's start by deploying the gateway. \ No newline at end of file diff --git a/content/en/scenarios/self_service_observability/2-collect_with_standards/images/arch.png b/content/en/scenarios/self_service_observability/2-collect_with_standards/images/arch.png new file mode 100644 index 0000000000..e92ccb34eb Binary files /dev/null and b/content/en/scenarios/self_service_observability/2-collect_with_standards/images/arch.png differ diff --git a/content/en/scenarios/self_service_observability/2-collect_with_standards/images/collector_agent_chart.png b/content/en/scenarios/self_service_observability/2-collect_with_standards/images/collector_agent_chart.png new file mode 100644 index 0000000000..edf8a7eddb Binary files /dev/null and b/content/en/scenarios/self_service_observability/2-collect_with_standards/images/collector_agent_chart.png differ diff --git a/content/en/scenarios/self_service_observability/2-collect_with_standards/images/collector_agent_chart_2.png b/content/en/scenarios/self_service_observability/2-collect_with_standards/images/collector_agent_chart_2.png new file mode 100644 index 0000000000..de18d06da3 Binary files /dev/null and b/content/en/scenarios/self_service_observability/2-collect_with_standards/images/collector_agent_chart_2.png differ diff --git a/content/en/scenarios/self_service_observability/2-collect_with_standards/images/collector_agent_data_table.png b/content/en/scenarios/self_service_observability/2-collect_with_standards/images/collector_agent_data_table.png new file mode 100644 index 0000000000..c99f1edb80 Binary files /dev/null and b/content/en/scenarios/self_service_observability/2-collect_with_standards/images/collector_agent_data_table.png differ diff --git a/content/en/scenarios/self_service_observability/2-collect_with_standards/images/gateway_dimension.png b/content/en/scenarios/self_service_observability/2-collect_with_standards/images/gateway_dimension.png new file mode 100644 index 0000000000..24f9b6ba17 Binary files /dev/null and b/content/en/scenarios/self_service_observability/2-collect_with_standards/images/gateway_dimension.png differ diff --git a/content/en/scenarios/self_service_observability/2-collect_with_standards/images/gateway_metric_chart.png b/content/en/scenarios/self_service_observability/2-collect_with_standards/images/gateway_metric_chart.png new file mode 100644 index 0000000000..274c721254 Binary files /dev/null and b/content/en/scenarios/self_service_observability/2-collect_with_standards/images/gateway_metric_chart.png differ diff --git a/content/en/scenarios/self_service_observability/2-collect_with_standards/images/logs.png b/content/en/scenarios/self_service_observability/2-collect_with_standards/images/logs.png new file mode 100644 index 0000000000..b8ddf7c42a Binary files /dev/null and b/content/en/scenarios/self_service_observability/2-collect_with_standards/images/logs.png differ diff --git a/content/en/scenarios/self_service_observability/2-collect_with_standards/images/metrics.png b/content/en/scenarios/self_service_observability/2-collect_with_standards/images/metrics.png new file mode 100644 index 0000000000..34caa5afe7 Binary files /dev/null and b/content/en/scenarios/self_service_observability/2-collect_with_standards/images/metrics.png differ diff --git a/content/en/scenarios/self_service_observability/2-collect_with_standards/images/traces.png b/content/en/scenarios/self_service_observability/2-collect_with_standards/images/traces.png new file mode 100644 index 0000000000..d7b80f9ad8 Binary files /dev/null and b/content/en/scenarios/self_service_observability/2-collect_with_standards/images/traces.png differ diff --git a/content/en/scenarios/self_service_observability/3-manage_costs/_index.md b/content/en/scenarios/self_service_observability/3-manage_costs/_index.md new file mode 100644 index 0000000000..82c127e231 --- /dev/null +++ b/content/en/scenarios/self_service_observability/3-manage_costs/_index.md @@ -0,0 +1,31 @@ +--- +title: Manage Costs +linkTitle: 3 Manage Costs +weight: 3 +time: 10 minutes +--- + +## Introduction + +Managing Observability costs is a huge challenge. Users can send in data at will, change data, turn on new integrations, and incur costs that are hard to detect before the surprise overage at the end of the month. Exactly the kind of thing that’s likely to happen to this new team as they set up their new application. + +Let's walk through some ways we can mitigate those challenges, while still making +the platform easy for teams to send the data they need to. + +### Tokens + +In the last section we selected our workshop token to use, which is very similar to the token we would be provided as a team. + +Let's navigate to **Settings > Access Tokens**. As admins we will be able to see all of the tokens in the environment. However we can also limit who can see tokens -- either a specific set of users or teams, or everyone. + +![All Access Tokens](images/all_access_tokens.png) + + + +Still making the product + + A way to measure and monitor utilization by team + A way to mitigate unexpected utilization + A license model that is forgiving + +Let’s walk through how Splunk delivers each of these. \ No newline at end of file diff --git a/content/en/scenarios/self_service_observability/3-manage_costs/images/all_access_tokens.png b/content/en/scenarios/self_service_observability/3-manage_costs/images/all_access_tokens.png new file mode 100644 index 0000000000..55c418ce61 Binary files /dev/null and b/content/en/scenarios/self_service_observability/3-manage_costs/images/all_access_tokens.png differ diff --git a/content/en/scenarios/self_service_observability/4-configure_o11yascode/_index.md b/content/en/scenarios/self_service_observability/4-configure_o11yascode/_index.md new file mode 100644 index 0000000000..9ec688ef19 --- /dev/null +++ b/content/en/scenarios/self_service_observability/4-configure_o11yascode/_index.md @@ -0,0 +1,10 @@ +--- +title: Observability as Code +linkTitle: 4 Observability as Code +weight: 4 +time: 10 minutes +--- + +## Introduction + +xx \ No newline at end of file diff --git a/content/en/scenarios/self_service_observability/images/otel-collector-details.svg b/content/en/scenarios/self_service_observability/images/otel-collector-details.svg new file mode 100644 index 0000000000..022696c23b --- /dev/null +++ b/content/en/scenarios/self_service_observability/images/otel-collector-details.svg @@ -0,0 +1,379 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/content/en/scenarios/self_service_observability/images/otel-diagram.svg b/content/en/scenarios/self_service_observability/images/otel-diagram.svg new file mode 100644 index 0000000000..0bca7d5433 --- /dev/null +++ b/content/en/scenarios/self_service_observability/images/otel-diagram.svg @@ -0,0 +1,266 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/content/en/scenarios/self_service_observability/misc/arch.excalidraw b/content/en/scenarios/self_service_observability/misc/arch.excalidraw new file mode 100644 index 0000000000..5defb9ad77 --- /dev/null +++ b/content/en/scenarios/self_service_observability/misc/arch.excalidraw @@ -0,0 +1,899 @@ +{ + "type": "excalidraw", + "version": 2, + "source": "https://marketplace.visualstudio.com/items?itemName=pomdtr.excalidraw-editor", + "elements": [ + { + "type": "rectangle", + "version": 92, + "versionNonce": 250348589, + "isDeleted": false, + "id": "V0SgeyO_rlV9sUGCri0kn", + "fillStyle": "solid", + "strokeWidth": 2, + "strokeStyle": "solid", + "roughness": 1, + "opacity": 100, + "angle": 0, + "x": 277.0616149902344, + "y": 147.87326049804688, + "strokeColor": "#e03131", + "backgroundColor": "transparent", + "width": 528.4939270019531, + "height": 61.89237976074219, + "seed": 314903523, + "groupIds": [ + "Fo4paV1lODFXWSKU7ScmC" + ], + "frameId": null, + "roundness": { + "type": 3 + }, + "boundElements": [], + "updated": 1711548856970, + "link": null, + "locked": false + }, + { + "type": "text", + "version": 85, + "versionNonce": 9179032, + "isDeleted": false, + "id": "nqQQqTCWkYaZuTkc-asHM", + "fillStyle": "solid", + "strokeWidth": 2, + "strokeStyle": "solid", + "roughness": 1, + "opacity": 100, + "angle": 0, + "x": 408.3333435058594, + "y": 172.2222137451172, + "strokeColor": "#e03131", + "backgroundColor": "transparent", + "width": 253.41970825195312, + "height": 25, + "seed": 2052921187, + "groupIds": [ + "Fo4paV1lODFXWSKU7ScmC" + ], + "frameId": null, + "roundness": null, + "boundElements": [ + { + "id": "kqEDdiYt1f6_HgQ2c3OQ1", + "type": "arrow" + } + ], + "updated": 1711980421903, + "link": null, + "locked": false, + "fontSize": 20, + "fontFamily": 1, + "text": "Splunk Observability Cloud", + "textAlign": "left", + "verticalAlign": "top", + "containerId": null, + "originalText": "Splunk Observability Cloud", + "lineHeight": 1.25, + "baseline": 17 + }, + { + "type": "rectangle", + "version": 821, + "versionNonce": 1878728419, + "isDeleted": false, + "id": "rh3CZhZQoTXBw_hnh5qIP", + "fillStyle": "solid", + "strokeWidth": 2, + "strokeStyle": "solid", + "roughness": 1, + "opacity": 100, + "angle": 0, + "x": 313.0078125, + "y": 269.12112024810824, + "strokeColor": "#1e1e1e", + "backgroundColor": "transparent", + "width": 461.1762084960938, + "height": 66.28034251159602, + "seed": 588081421, + "groupIds": [ + "13yHBCi9Z3fdGZ5GaRUQS" + ], + "frameId": null, + "roundness": { + "type": 3 + }, + "boundElements": [ + { + "id": "kqEDdiYt1f6_HgQ2c3OQ1", + "type": "arrow" + }, + { + "id": "kFOeb5xQIJ5XM2by_vDTq", + "type": "arrow" + }, + { + "id": "7pHL5vyYKu1vPkFLzQK5r", + "type": "arrow" + } + ], + "updated": 1711549185400, + "link": null, + "locked": false + }, + { + "type": "text", + "version": 586, + "versionNonce": 963057640, + "isDeleted": false, + "id": "KGnbNbZmLC2lBZNxioecT", + "fillStyle": "solid", + "strokeWidth": 2, + "strokeStyle": "solid", + "roughness": 1, + "opacity": 100, + "angle": 0, + "x": 408.3796140784889, + "y": 288.04244827745106, + "strokeColor": "#1e1e1e", + "backgroundColor": "transparent", + "width": 261.9186096191406, + "height": 25.747546009770566, + "seed": 485932909, + "groupIds": [ + "13yHBCi9Z3fdGZ5GaRUQS" + ], + "frameId": null, + "roundness": null, + "boundElements": [], + "updated": 1711980515413, + "link": null, + "locked": false, + "fontSize": 20.598036807816452, + "fontFamily": 1, + "text": "OTel Collector (Gateway)", + "textAlign": "left", + "verticalAlign": "top", + "containerId": null, + "originalText": "OTel Collector (Gateway)", + "lineHeight": 1.25, + "baseline": 18 + }, + { + "type": "arrow", + "version": 69, + "versionNonce": 1004868611, + "isDeleted": false, + "id": "kqEDdiYt1f6_HgQ2c3OQ1", + "fillStyle": "solid", + "strokeWidth": 2, + "strokeStyle": "solid", + "roughness": 1, + "opacity": 100, + "angle": 0, + "x": 540.2560424804688, + "y": 267.31768798828125, + "strokeColor": "#1e1e1e", + "backgroundColor": "transparent", + "width": 1.43231201171875, + "height": 56.85762023925781, + "seed": 152127139, + "groupIds": [], + "frameId": null, + "roundness": { + "type": 2 + }, + "boundElements": [], + "updated": 1711548953299, + "link": null, + "locked": false, + "startBinding": { + "elementId": "rh3CZhZQoTXBw_hnh5qIP", + "focus": -0.01823564112141851, + "gap": 1.803432259826991 + }, + "endBinding": { + "elementId": "nqQQqTCWkYaZuTkc-asHM", + "focus": -0.05741813914276728, + "gap": 13.23785400390625 + }, + "lastCommittedPoint": null, + "startArrowhead": null, + "endArrowhead": "arrow", + "points": [ + [ + 0, + 0 + ], + [ + 1.43231201171875, + -56.85762023925781 + ] + ] + }, + { + "type": "arrow", + "version": 572, + "versionNonce": 207639960, + "isDeleted": false, + "id": "kFOeb5xQIJ5XM2by_vDTq", + "fillStyle": "solid", + "strokeWidth": 2, + "strokeStyle": "solid", + "roughness": 1, + "opacity": 100, + "angle": 0, + "x": 466.9805333818871, + "y": 472.3168559747321, + "strokeColor": "#1e1e1e", + "backgroundColor": "transparent", + "width": 0, + "height": 136.66658440544222, + "seed": 85071203, + "groupIds": [], + "frameId": null, + "roundness": { + "type": 2 + }, + "boundElements": [], + "updated": 1711980569282, + "link": null, + "locked": false, + "startBinding": { + "elementId": "XL5y_L9pBLvwpHSeQwt8-", + "focus": -0.22641331861485647, + "gap": 3.392342023314768 + }, + "endBinding": { + "elementId": "rh3CZhZQoTXBw_hnh5qIP", + "focus": 0.3322607799565563, + "gap": 1 + }, + "lastCommittedPoint": null, + "startArrowhead": null, + "endArrowhead": "arrow", + "points": [ + [ + 0, + 0 + ], + [ + 0, + -136.66658440544222 + ] + ] + }, + { + "type": "rectangle", + "version": 760, + "versionNonce": 755142552, + "isDeleted": false, + "id": "G80HTgG2YMwvo9T4HF5hb", + "fillStyle": "solid", + "strokeWidth": 2, + "strokeStyle": "solid", + "roughness": 1, + "opacity": 100, + "angle": 0, + "x": 309.7196350097656, + "y": 427.440116472779, + "strokeColor": "#1e1e1e", + "backgroundColor": "transparent", + "width": 216.015625, + "height": 165.58588450378352, + "seed": 942804835, + "groupIds": [ + "EJ7i3dgme_TEQXVXb2rtk", + "dbXxwL-yuZAEd2FM4m3IF" + ], + "frameId": null, + "roundness": { + "type": 3 + }, + "boundElements": [ + { + "id": "kFOeb5xQIJ5XM2by_vDTq", + "type": "arrow" + } + ], + "updated": 1711980560139, + "link": null, + "locked": false + }, + { + "type": "text", + "version": 477, + "versionNonce": 574413976, + "isDeleted": false, + "id": "Uegv6W_dFRi3uLA5l14PU", + "fillStyle": "solid", + "strokeWidth": 2, + "strokeStyle": "solid", + "roughness": 1, + "opacity": 100, + "angle": 0, + "x": 366.13745709606707, + "y": 562.2034550001687, + "strokeColor": "#1e1e1e", + "backgroundColor": "transparent", + "width": 105.52473449707031, + "height": 25.747546009770566, + "seed": 1432633229, + "groupIds": [ + "EJ7i3dgme_TEQXVXb2rtk", + "dbXxwL-yuZAEd2FM4m3IF" + ], + "frameId": null, + "roundness": null, + "boundElements": [], + "updated": 1711980560139, + "link": null, + "locked": false, + "fontSize": 20.598036807816452, + "fontFamily": 1, + "text": "Linux Host", + "textAlign": "left", + "verticalAlign": "bottom", + "containerId": null, + "originalText": "Linux Host", + "lineHeight": 1.25, + "baseline": 18 + }, + { + "type": "rectangle", + "version": 337, + "versionNonce": 1957005720, + "isDeleted": false, + "id": "k7HMSFpHIGUgA44zrUcVy", + "fillStyle": "solid", + "strokeWidth": 2, + "strokeStyle": "solid", + "roughness": 1, + "opacity": 100, + "angle": 0, + "x": 327.73175048828125, + "y": 487.9913635253906, + "strokeColor": "#1e1e1e", + "backgroundColor": "transparent", + "width": 54.1883544921875, + "height": 50.73785400390625, + "seed": 88996003, + "groupIds": [ + "dbXxwL-yuZAEd2FM4m3IF" + ], + "frameId": null, + "roundness": { + "type": 3 + }, + "boundElements": [ + { + "type": "text", + "id": "n0PWbkkYp00bBjWNyR12N" + }, + { + "id": "F30k6lgsK-x3vz2CTl8DH", + "type": "arrow" + } + ], + "updated": 1711980560139, + "link": null, + "locked": false + }, + { + "type": "text", + "version": 292, + "versionNonce": 1464992664, + "isDeleted": false, + "id": "n0PWbkkYp00bBjWNyR12N", + "fillStyle": "solid", + "strokeWidth": 2, + "strokeStyle": "solid", + "roughness": 1, + "opacity": 100, + "angle": 0, + "x": 341.68990325927734, + "y": 503.36029052734375, + "strokeColor": "#1e1e1e", + "backgroundColor": "transparent", + "width": 26.272048950195312, + "height": 20, + "seed": 200605891, + "groupIds": [ + "dbXxwL-yuZAEd2FM4m3IF" + ], + "frameId": null, + "roundness": null, + "boundElements": [], + "updated": 1711980560139, + "link": null, + "locked": false, + "fontSize": 16, + "fontFamily": 1, + "text": "App", + "textAlign": "center", + "verticalAlign": "middle", + "containerId": "k7HMSFpHIGUgA44zrUcVy", + "originalText": "App", + "lineHeight": 1.25, + "baseline": 13 + }, + { + "type": "rectangle", + "version": 487, + "versionNonce": 981323928, + "isDeleted": false, + "id": "XL5y_L9pBLvwpHSeQwt8-", + "fillStyle": "solid", + "strokeWidth": 2, + "strokeStyle": "solid", + "roughness": 1, + "opacity": 100, + "angle": 0, + "x": 435.81378173828125, + "y": 475.7091979980469, + "strokeColor": "#1e1e1e", + "backgroundColor": "transparent", + "width": 80.57727050781249, + "height": 70, + "seed": 722547085, + "groupIds": [ + "dbXxwL-yuZAEd2FM4m3IF" + ], + "frameId": null, + "roundness": { + "type": 3 + }, + "boundElements": [ + { + "type": "text", + "id": "7FhIv78PrI7m2AYZ4TkMT" + }, + { + "id": "kFOeb5xQIJ5XM2by_vDTq", + "type": "arrow" + }, + { + "id": "F30k6lgsK-x3vz2CTl8DH", + "type": "arrow" + } + ], + "updated": 1711980560139, + "link": null, + "locked": false + }, + { + "type": "text", + "version": 472, + "versionNonce": 1084540056, + "isDeleted": false, + "id": "7FhIv78PrI7m2AYZ4TkMT", + "fillStyle": "solid", + "strokeWidth": 2, + "strokeStyle": "solid", + "roughness": 1, + "opacity": 100, + "angle": 0, + "x": 441.52635192871094, + "y": 480.7091979980469, + "strokeColor": "#1e1e1e", + "backgroundColor": "transparent", + "width": 69.15213012695312, + "height": 60, + "seed": 1919776749, + "groupIds": [ + "dbXxwL-yuZAEd2FM4m3IF" + ], + "frameId": null, + "roundness": null, + "boundElements": [], + "updated": 1711980560140, + "link": null, + "locked": false, + "fontSize": 16, + "fontFamily": 1, + "text": "OTel\nCollector\n(Agent)", + "textAlign": "center", + "verticalAlign": "bottom", + "containerId": "XL5y_L9pBLvwpHSeQwt8-", + "originalText": "OTel\nCollector\n(Agent)", + "lineHeight": 1.25, + "baseline": 53 + }, + { + "type": "arrow", + "version": 437, + "versionNonce": 1196448408, + "isDeleted": false, + "id": "F30k6lgsK-x3vz2CTl8DH", + "fillStyle": "solid", + "strokeWidth": 2, + "strokeStyle": "solid", + "roughness": 1, + "opacity": 100, + "angle": 0, + "x": 384.6327819824219, + "y": 510.126708984375, + "strokeColor": "#1e1e1e", + "backgroundColor": "transparent", + "width": 50.716156005859375, + "height": 0.73779296875, + "seed": 1755884323, + "groupIds": [ + "dbXxwL-yuZAEd2FM4m3IF" + ], + "frameId": null, + "roundness": { + "type": 2 + }, + "boundElements": [], + "updated": 1711980560271, + "link": null, + "locked": false, + "startBinding": { + "elementId": "k7HMSFpHIGUgA44zrUcVy", + "focus": -0.14234309953798419, + "gap": 2.712677001953125 + }, + "endBinding": { + "elementId": "XL5y_L9pBLvwpHSeQwt8-", + "focus": -0.02102407875694034, + "gap": 1 + }, + "lastCommittedPoint": null, + "startArrowhead": null, + "endArrowhead": "arrow", + "points": [ + [ + 0, + 0 + ], + [ + 50.716156005859375, + 0.73779296875 + ] + ] + }, + { + "type": "arrow", + "version": 265, + "versionNonce": 1738503064, + "isDeleted": false, + "id": "7pHL5vyYKu1vPkFLzQK5r", + "fillStyle": "solid", + "strokeWidth": 2, + "strokeStyle": "solid", + "roughness": 1, + "opacity": 100, + "angle": 0, + "x": 715.6080417895312, + "y": 474.0555419921875, + "strokeColor": "#1e1e1e", + "backgroundColor": "transparent", + "width": 0, + "height": 134.9330414189913, + "seed": 582958253, + "groupIds": [], + "frameId": null, + "roundness": { + "type": 2 + }, + "boundElements": [], + "updated": 1711980566631, + "link": null, + "locked": false, + "startBinding": { + "elementId": "Eo9S2jISFZPxtqOUAH0JD", + "focus": -0.08710960691712981, + "gap": 3.332708665923519 + }, + "endBinding": { + "elementId": "rh3CZhZQoTXBw_hnh5qIP", + "focus": -0.7459713743795231, + "gap": 3.7210378134919324 + }, + "lastCommittedPoint": null, + "startArrowhead": null, + "endArrowhead": "arrow", + "points": [ + [ + 0, + 0 + ], + [ + 0, + -134.9330414189913 + ] + ] + }, + { + "type": "rectangle", + "version": 820, + "versionNonce": 1929281176, + "isDeleted": false, + "id": "8f6dTCKAteIyNjJfmzhyC", + "fillStyle": "solid", + "strokeWidth": 2, + "strokeStyle": "solid", + "roughness": 1, + "opacity": 100, + "angle": 0, + "x": 552.7347869873047, + "y": 429.11916913284324, + "strokeColor": "#1e1e1e", + "backgroundColor": "transparent", + "width": 216.015625, + "height": 165.58588450378352, + "seed": 293320682, + "groupIds": [ + "tZdUfwrvR2CKHObf634UF", + "UsrytGN5J6cAerRPDqzmU" + ], + "frameId": null, + "roundness": { + "type": 3 + }, + "boundElements": [], + "updated": 1711980560140, + "link": null, + "locked": false + }, + { + "type": "text", + "version": 547, + "versionNonce": 1088613272, + "isDeleted": false, + "id": "agyn-nh6JL7erAZ0-jWR8", + "fillStyle": "solid", + "strokeWidth": 2, + "strokeStyle": "solid", + "roughness": 1, + "opacity": 100, + "angle": 0, + "x": 609.1526090736061, + "y": 563.8825076602329, + "strokeColor": "#1e1e1e", + "backgroundColor": "transparent", + "width": 109.78440856933594, + "height": 25.747546009770566, + "seed": 1775315626, + "groupIds": [ + "tZdUfwrvR2CKHObf634UF", + "UsrytGN5J6cAerRPDqzmU" + ], + "frameId": null, + "roundness": null, + "boundElements": [], + "updated": 1711980560140, + "link": null, + "locked": false, + "fontSize": 20.598036807816452, + "fontFamily": 1, + "text": "Kubernetes", + "textAlign": "left", + "verticalAlign": "bottom", + "containerId": null, + "originalText": "Kubernetes", + "lineHeight": 1.25, + "baseline": 18 + }, + { + "type": "rectangle", + "version": 397, + "versionNonce": 296859800, + "isDeleted": false, + "id": "lgjRrUC1JYlZMtwOoq5gn", + "fillStyle": "solid", + "strokeWidth": 2, + "strokeStyle": "solid", + "roughness": 1, + "opacity": 100, + "angle": 0, + "x": 570.7469024658203, + "y": 489.67041618545477, + "strokeColor": "#1e1e1e", + "backgroundColor": "transparent", + "width": 54.1883544921875, + "height": 50.73785400390625, + "seed": 1684686186, + "groupIds": [ + "UsrytGN5J6cAerRPDqzmU" + ], + "frameId": null, + "roundness": { + "type": 3 + }, + "boundElements": [ + { + "type": "text", + "id": "C7LpDb0Jk_MRrWzklWFzG" + }, + { + "id": "vw3BUbf7nJKrWWsFPWi3K", + "type": "arrow" + } + ], + "updated": 1711980560140, + "link": null, + "locked": false + }, + { + "type": "text", + "version": 352, + "versionNonce": 1952346776, + "isDeleted": false, + "id": "C7LpDb0Jk_MRrWzklWFzG", + "fillStyle": "solid", + "strokeWidth": 2, + "strokeStyle": "solid", + "roughness": 1, + "opacity": 100, + "angle": 0, + "x": 584.7050552368164, + "y": 505.0393431874079, + "strokeColor": "#1e1e1e", + "backgroundColor": "transparent", + "width": 26.272048950195312, + "height": 20, + "seed": 1251084330, + "groupIds": [ + "UsrytGN5J6cAerRPDqzmU" + ], + "frameId": null, + "roundness": null, + "boundElements": [], + "updated": 1711980560140, + "link": null, + "locked": false, + "fontSize": 16, + "fontFamily": 1, + "text": "App", + "textAlign": "center", + "verticalAlign": "middle", + "containerId": "lgjRrUC1JYlZMtwOoq5gn", + "originalText": "App", + "lineHeight": 1.25, + "baseline": 13 + }, + { + "type": "rectangle", + "version": 548, + "versionNonce": 2049204120, + "isDeleted": false, + "id": "Eo9S2jISFZPxtqOUAH0JD", + "fillStyle": "solid", + "strokeWidth": 2, + "strokeStyle": "solid", + "roughness": 1, + "opacity": 100, + "angle": 0, + "x": 678.8289337158203, + "y": 477.388250658111, + "strokeColor": "#1e1e1e", + "backgroundColor": "transparent", + "width": 80.57727050781249, + "height": 70, + "seed": 70480618, + "groupIds": [ + "UsrytGN5J6cAerRPDqzmU" + ], + "frameId": null, + "roundness": { + "type": 3 + }, + "boundElements": [ + { + "type": "text", + "id": "o9i6WjIXZfuy-fz6oxMP7" + }, + { + "id": "vw3BUbf7nJKrWWsFPWi3K", + "type": "arrow" + }, + { + "id": "7pHL5vyYKu1vPkFLzQK5r", + "type": "arrow" + } + ], + "updated": 1711980560140, + "link": null, + "locked": false + }, + { + "type": "text", + "version": 532, + "versionNonce": 1561056152, + "isDeleted": false, + "id": "o9i6WjIXZfuy-fz6oxMP7", + "fillStyle": "solid", + "strokeWidth": 2, + "strokeStyle": "solid", + "roughness": 1, + "opacity": 100, + "angle": 0, + "x": 684.54150390625, + "y": 482.388250658111, + "strokeColor": "#1e1e1e", + "backgroundColor": "transparent", + "width": 69.15213012695312, + "height": 60, + "seed": 1138329002, + "groupIds": [ + "UsrytGN5J6cAerRPDqzmU" + ], + "frameId": null, + "roundness": null, + "boundElements": [], + "updated": 1711980560141, + "link": null, + "locked": false, + "fontSize": 16, + "fontFamily": 1, + "text": "OTel\nCollector\n(Agent)", + "textAlign": "center", + "verticalAlign": "bottom", + "containerId": "Eo9S2jISFZPxtqOUAH0JD", + "originalText": "OTel\nCollector\n(Agent)", + "lineHeight": 1.25, + "baseline": 53 + }, + { + "type": "arrow", + "version": 637, + "versionNonce": 1748800664, + "isDeleted": false, + "id": "vw3BUbf7nJKrWWsFPWi3K", + "fillStyle": "solid", + "strokeWidth": 2, + "strokeStyle": "solid", + "roughness": 1, + "opacity": 100, + "angle": 0, + "x": 627.6479339599609, + "y": 511.80576164443914, + "strokeColor": "#1e1e1e", + "backgroundColor": "transparent", + "width": 50.716156005859375, + "height": 0.73779296875, + "seed": 850346090, + "groupIds": [ + "UsrytGN5J6cAerRPDqzmU" + ], + "frameId": null, + "roundness": { + "type": 2 + }, + "boundElements": [], + "updated": 1711980560271, + "link": null, + "locked": false, + "startBinding": { + "elementId": "lgjRrUC1JYlZMtwOoq5gn", + "focus": -0.14234309953798419, + "gap": 2.712677001953125 + }, + "endBinding": { + "elementId": "Eo9S2jISFZPxtqOUAH0JD", + "focus": -0.02102407875694034, + "gap": 1 + }, + "lastCommittedPoint": null, + "startArrowhead": null, + "endArrowhead": "arrow", + "points": [ + [ + 0, + 0 + ], + [ + 50.716156005859375, + 0.73779296875 + ] + ] + } + ], + "appState": { + "gridSize": null, + "viewBackgroundColor": "#ffffff" + }, + "files": {} +} \ No newline at end of file