From 4a42f3a55f4d84cbef538a3a1d200edc4b935b85 Mon Sep 17 00:00:00 2001 From: Ihor Vovk Date: Sat, 17 Aug 2024 22:28:13 +0200 Subject: [PATCH] Initial version (#1) --- .github/workflows/release.yaml | 34 + .gitignore | 2 + README.md | 52 +- charts/kube-logs-datadog-sender/.helmignore | 23 + charts/kube-logs-datadog-sender/Chart.yaml | 7 + .../templates/aggregator-configmap.yaml | 33 + .../templates/aggregator-deployment.yaml | 68 + .../templates/sender-configmap.yaml | 88 + .../templates/sender-daemonset.yaml | 80 + .../templates/service-roles.yml | 39 + charts/kube-logs-datadog-sender/values.yaml | 27 + docs/architecture-diagram.excalidraw | 1510 +++++++++++++++++ docs/architecture-diagram.svg | 13 + 13 files changed, 1975 insertions(+), 1 deletion(-) create mode 100644 .github/workflows/release.yaml create mode 100644 .gitignore create mode 100644 charts/kube-logs-datadog-sender/.helmignore create mode 100644 charts/kube-logs-datadog-sender/Chart.yaml create mode 100644 charts/kube-logs-datadog-sender/templates/aggregator-configmap.yaml create mode 100644 charts/kube-logs-datadog-sender/templates/aggregator-deployment.yaml create mode 100644 charts/kube-logs-datadog-sender/templates/sender-configmap.yaml create mode 100644 charts/kube-logs-datadog-sender/templates/sender-daemonset.yaml create mode 100644 charts/kube-logs-datadog-sender/templates/service-roles.yml create mode 100644 charts/kube-logs-datadog-sender/values.yaml create mode 100644 docs/architecture-diagram.excalidraw create mode 100644 docs/architecture-diagram.svg diff --git a/.github/workflows/release.yaml b/.github/workflows/release.yaml new file mode 100644 index 0000000..c98b2f4 --- /dev/null +++ b/.github/workflows/release.yaml @@ -0,0 +1,34 @@ +name: Release Charts + +on: + push: +# branches: +# - main + +jobs: + release: + # depending on default permission settings for your org (contents being read-only or read-write for workloads), you will have to add permissions + # see: https://docs.github.com/en/actions/security-guides/automatic-token-authentication#modifying-the-permissions-for-the-github_token + permissions: + contents: write + runs-on: ubuntu-latest + steps: + - name: Checkout + uses: actions/checkout@v4 + with: + fetch-depth: 0 + + - name: Configure Git + run: | + git config user.name "$GITHUB_ACTOR" + git config user.email "$GITHUB_ACTOR@users.noreply.github.com" + + - name: Install Helm + uses: azure/setup-helm@v4 + env: + GITHUB_TOKEN: "${{ secrets.GITHUB_TOKEN }}" + + - name: Run chart-releaser + uses: helm/chart-releaser-action@v1.6.0 + env: + CR_TOKEN: "${{ secrets.GITHUB_TOKEN }}" \ No newline at end of file diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..deeb2c3 --- /dev/null +++ b/.gitignore @@ -0,0 +1,2 @@ +.idea +test-helm-template \ No newline at end of file diff --git a/README.md b/README.md index 7548d8b..fce33c0 100644 --- a/README.md +++ b/README.md @@ -1 +1,51 @@ -# kube-logs-sender-datadog \ No newline at end of file +# Kubernetes ➡️ Datadog logs sender + +Helm chart to set up sending logs from a Kubernetes cluster to Datadog. [Vector](https://vector.dev) is used under the +hood. + +This is an example of how to use Vector to send logs to Datadog author couldn't find when +he was trying to set it up. +It's also the author's exercise to learn writing Helm charts. + +It is based on Axiom's [instruction](https://axiom.co/docs/send-data/kubernetes) on setting up Vector. + +## Features + +* Lightweight and fast. +* Supports excluding logs from log collection by service name and log level. + +## Installation +1. Create kubernetes secret with Datadog API key: + ```shell + kubectl create secret generic datadog-api-key --from-literal=DD_API_KEY= + ``` +2. Add the Helm repository: + ```shell + helm repo add kube-logs-datadog-sender https://raw.githubusercontent.com/igor-vovk/kube-logs-datadog-sender/main/helm + ``` +3. Install the chart: + ```shell + helm install kube-logs-datadog-sender kube-logs-datadog-sender/kube-logs-datadog-sender + ``` + + +## Architecture + +![Architecture](./docs/architecture-diagram.svg) + +Sender-Aggregator pattern is used to send logs to Datadog: + +* Senders are deployed on each node in the cluster. They collect logs from the node, process and filter them, and then + send logs to the aggregator. +* Aggregator collects logs from all senders and then sends them to Datadog. + +## Points of Improvement + +* Consider having thin senders and doing parsing and filtering in the aggregator instance. + +## Referral Links + +They help me to pay for the Datadog, so I can see my logs. + +* [Hetzner Cloud](https://hetzner.cloud/?ref=iAnthJAtoQ8d) – best cloud provider with the cheapest prices in the EU +* [Bybit](https://www.bybit.nl/invite?ref=EVWANAG) – best crypto exchange \ No newline at end of file diff --git a/charts/kube-logs-datadog-sender/.helmignore b/charts/kube-logs-datadog-sender/.helmignore new file mode 100644 index 0000000..0e8a0eb --- /dev/null +++ b/charts/kube-logs-datadog-sender/.helmignore @@ -0,0 +1,23 @@ +# Patterns to ignore when building packages. +# This supports shell glob matching, relative path matching, and +# negation (prefixed with !). Only one pattern per line. +.DS_Store +# Common VCS dirs +.git/ +.gitignore +.bzr/ +.bzrignore +.hg/ +.hgignore +.svn/ +# Common backup files +*.swp +*.bak +*.tmp +*.orig +*~ +# Various IDEs +.project +.idea/ +*.tmproj +.vscode/ diff --git a/charts/kube-logs-datadog-sender/Chart.yaml b/charts/kube-logs-datadog-sender/Chart.yaml new file mode 100644 index 0000000..dfbb120 --- /dev/null +++ b/charts/kube-logs-datadog-sender/Chart.yaml @@ -0,0 +1,7 @@ +apiVersion: v2 +name: kube-logs-datadog-sender +description: Sends logs to Datadog + +type: application +version: 0.1.0 +appVersion: 0.1.0 diff --git a/charts/kube-logs-datadog-sender/templates/aggregator-configmap.yaml b/charts/kube-logs-datadog-sender/templates/aggregator-configmap.yaml new file mode 100644 index 0000000..5549d31 --- /dev/null +++ b/charts/kube-logs-datadog-sender/templates/aggregator-configmap.yaml @@ -0,0 +1,33 @@ +--- + +apiVersion: v1 +kind: ConfigMap + +metadata: + name: vector-logs-aggregator-config + namespace: kube-system + +data: + vector.yaml: | + api: + enabled: true + address: 0.0.0.0:8686 + + sources: + vector: + type: vector + address: 0.0.0.0:8685 + + transforms: + final_transform: + type: remap + inputs: [ vector ] + source: | + . = . + + sinks: + datadog: + type: datadog_logs + inputs: [ final_transform ] + site: datadoghq.eu + diff --git a/charts/kube-logs-datadog-sender/templates/aggregator-deployment.yaml b/charts/kube-logs-datadog-sender/templates/aggregator-deployment.yaml new file mode 100644 index 0000000..e6ac16e --- /dev/null +++ b/charts/kube-logs-datadog-sender/templates/aggregator-deployment.yaml @@ -0,0 +1,68 @@ +--- + +apiVersion: apps/v1 +kind: Deployment + +metadata: + name: vector-logs-aggregator + namespace: kube-system + +spec: + selector: + matchLabels: + name: vector-logs-aggregator + template: + metadata: + labels: + name: vector-logs-aggregator + spec: + serviceAccountName: vector + containers: + - name: vector-logs-aggregator + image: {{ .Values.image.repository }}:{{ .Values.image.tag }} + args: [ "--config-dir", "/etc/vector/" ] + ports: + - containerPort: 8686 + - containerPort: 8685 + envFrom: + - secretRef: + name: {{ .Values.datadogSecretName | default "datadog-creds" }} + volumeMounts: + - mountPath: /etc/vector + name: config + livenessProbe: + httpGet: + path: /health + port: 8686 + initialDelaySeconds: 3 + periodSeconds: 3 + resources: + requests: + memory: "100Mi" + cpu: "100m" + securityContext: + runAsUser: 0 + terminationMessagePath: /dev/termination-log + terminationMessagePolicy: File + volumes: + - name: config + configMap: + name: vector-logs-aggregator-config + restartPolicy: Always + terminationGracePeriodSeconds: 30 + +--- + +apiVersion: v1 +kind: Service + +metadata: + name: vector-logs-aggregator + +spec: + selector: + name: vector-logs-aggregator + ports: + - name: source + port: 8685 + targetPort: 8685 diff --git a/charts/kube-logs-datadog-sender/templates/sender-configmap.yaml b/charts/kube-logs-datadog-sender/templates/sender-configmap.yaml new file mode 100644 index 0000000..19e847c --- /dev/null +++ b/charts/kube-logs-datadog-sender/templates/sender-configmap.yaml @@ -0,0 +1,88 @@ +--- + +apiVersion: v1 +kind: ConfigMap + +metadata: + name: vector-logs-sender-config + namespace: kube-system + +data: + vector.yaml: | + api: + enabled: true + address: 0.0.0.0:8686 + + sources: + logs: + type: kubernetes_logs + self_node_name: ${VECTOR_SELF_NODE_NAME} + + transforms: + sample_logs: + type: sample + inputs: [ logs ] + rate: 500 + parse_json: + type: remap + inputs: [ logs ] + source: | + . = merge!(., parse_json(.message) ?? parse_key_value(.message) ?? {}) + .@timestamp = del(.timestamp) + if exists(.msg) { + .message = del(.msg) + } + if exists(.logger_name) { + .logger_name_full = .logger_name + .logger_name = replace!(.logger_name, r'(?P\w)\w+\.', "$$fl.") # Convert `com.example.Foo` to `c.e.Foo` + } + .service = .kubernetes.container_name + .hostname = .kubernetes.pod_name + del(.file) + del(.kubernetes) + del(.@version) + del(.level_value) + del(.source_type) + del(.stream) + exclude_log_levels: + type: filter + inputs: [ parse_json ] + condition: | + !includes( + [ + {{- range .Values.sender.exclude.logLevels }} + "{{ . }}", + {{- end }} + ], + .level + ) + + exclude_services: + type: filter + inputs: [ exclude_log_levels ] + condition: | + !includes( + [ + {{- range .Values.sender.exclude.services }} + "{{ . }}", + {{- end }} + ], + .service + ) + # Placeholder transform to always refer to the last transform in the sinks section + final_transform: + type: remap + inputs: [ exclude_services ] + source: | + . = . + + sinks: + vector_aggregator: + type: vector + inputs: [ final_transform ] + address: vector-logs-aggregator.kube-system.svc.cluster.local:8685 + #console: + # type: console + # inputs: [ final_transform ] + # encoding: + # codec: json diff --git a/charts/kube-logs-datadog-sender/templates/sender-daemonset.yaml b/charts/kube-logs-datadog-sender/templates/sender-daemonset.yaml new file mode 100644 index 0000000..7ac2656 --- /dev/null +++ b/charts/kube-logs-datadog-sender/templates/sender-daemonset.yaml @@ -0,0 +1,80 @@ +--- + +apiVersion: apps/v1 +kind: DaemonSet + +metadata: + name: vector-logs-sender + namespace: kube-system + +spec: + selector: + matchLabels: + name: vector-logs-sender + template: + metadata: + labels: + name: vector-logs-sender + spec: + serviceAccountName: vector + containers: + - name: vector-logs-sender + image: {{ .Values.image.repository }}:{{ .Values.image.tag }} + args: [ "--config-dir", "/etc/vector/", "--require-healthy", "true" ] + ports: + - containerPort: 8686 + env: + - name: VECTOR_SELF_NODE_NAME + valueFrom: + fieldRef: + fieldPath: spec.nodeName + volumeMounts: + - mountPath: /etc/vector + name: config + - name: data-dir + mountPath: /var/lib/vector + - name: var-log + mountPath: /var/log + readOnly: true + - name: var-lib + mountPath: /var/lib + readOnly: true + livenessProbe: + httpGet: + path: /health + port: 8686 + initialDelaySeconds: 3 + periodSeconds: 3 + resources: + requests: + memory: "100Mi" + cpu: "100m" + limits: + memory: "500Mi" + securityContext: + runAsUser: 0 + terminationMessagePath: /dev/termination-log + terminationMessagePolicy: File + volumes: + - name: config + configMap: + name: vector-logs-sender-config + - name: data-dir + hostPath: + path: /var/lib/vector + type: DirectoryOrCreate + - name: var-log + hostPath: + path: /var/log + - name: var-lib + hostPath: + path: /var/lib + dnsPolicy: ClusterFirst + restartPolicy: Always + schedulerName: default-scheduler + securityContext: { } + terminationGracePeriodSeconds: 30 + updateStrategy: + rollingUpdate: + maxUnavailable: 1 + type: RollingUpdate diff --git a/charts/kube-logs-datadog-sender/templates/service-roles.yml b/charts/kube-logs-datadog-sender/templates/service-roles.yml new file mode 100644 index 0000000..8cf4476 --- /dev/null +++ b/charts/kube-logs-datadog-sender/templates/service-roles.yml @@ -0,0 +1,39 @@ +--- + +apiVersion: v1 +kind: ServiceAccount +metadata: + name: vector + namespace: kube-system + +--- + +apiVersion: rbac.authorization.k8s.io/v1 +kind: ClusterRole +metadata: + name: vector +rules: + - apiGroups: [""] + resources: + - pods + - nodes + - namespaces + verbs: + - get + - list + - watch + +--- + +apiVersion: rbac.authorization.k8s.io/v1 +kind: ClusterRoleBinding +metadata: + name: vector +subjects: + - kind: ServiceAccount + name: vector + namespace: kube-system +roleRef: + kind: ClusterRole + name: vector + apiGroup: rbac.authorization.k8s.io diff --git a/charts/kube-logs-datadog-sender/values.yaml b/charts/kube-logs-datadog-sender/values.yaml new file mode 100644 index 0000000..069542d --- /dev/null +++ b/charts/kube-logs-datadog-sender/values.yaml @@ -0,0 +1,27 @@ +image: + repository: timberio/vector + tag: latest-alpine + +# Name of the secret containing Datadog credentials. +# It should contain: +# * DD_API_KEY – (required) API key for your Datadog account +# * DD_SITE – (optional) Datadog site to send logs to (e.g., datadoghq.com, datadoghq.eu) +datadogSecretName: datadog-secret + +sender: + exclude: + # List of services to exclude from sending. Leave empty to send logs from all services. + services: + - argocd-application-controller + - argocd-applicationset-controller + - argocd-notifications-controller + - argocd-image-updater + - argocd-repo-server + - argocd-server + - vector-logs-sender + - vector-logs-aggregator + + # List of log levels to exclude from sending. Leave empty to disable filtering by log level. + logLevels: + - TRACE + - DEBUG \ No newline at end of file diff --git a/docs/architecture-diagram.excalidraw b/docs/architecture-diagram.excalidraw new file mode 100644 index 0000000..b0edd09 --- /dev/null +++ b/docs/architecture-diagram.excalidraw @@ -0,0 +1,1510 @@ +{ + "type": "excalidraw", + "version": 2, + "source": "https://excalidraw.com", + "elements": [ + { + "id": "qDmI0F5ZvNx_86irrni2K", + "type": "rectangle", + "x": 386, + "y": 237, + "width": 782, + "height": 448, + "angle": 0, + "strokeColor": "#1e1e1e", + "backgroundColor": "#ffec99", + "fillStyle": "solid", + "strokeWidth": 2, + "strokeStyle": "solid", + "roughness": 1, + "opacity": 100, + "groupIds": [], + "frameId": null, + "index": "Zz", + "roundness": { + "type": 3 + }, + "seed": 2008725240, + "version": 83, + "versionNonce": 76690312, + "isDeleted": false, + "boundElements": null, + "updated": 1723900633479, + "link": null, + "locked": false + }, + { + "id": "eLgJgRmGifl1f8-Gnad_y", + "type": "rectangle", + "x": 418, + "y": 283, + "width": 212, + "height": 366, + "angle": 0, + "strokeColor": "#1e1e1e", + "backgroundColor": "transparent", + "fillStyle": "solid", + "strokeWidth": 2, + "strokeStyle": "solid", + "roughness": 1, + "opacity": 100, + "groupIds": [], + "frameId": null, + "index": "a0", + "roundness": { + "type": 3 + }, + "seed": 136504712, + "version": 57, + "versionNonce": 902778360, + "isDeleted": false, + "boundElements": null, + "updated": 1723900271373, + "link": null, + "locked": false + }, + { + "id": "GyOB7L70YkX_1cfYQTbjK", + "type": "text", + "x": 502, + "y": 623, + "width": 47.47999572753906, + "height": 25, + "angle": 0, + "strokeColor": "#1e1e1e", + "backgroundColor": "transparent", + "fillStyle": "solid", + "strokeWidth": 2, + "strokeStyle": "solid", + "roughness": 1, + "opacity": 100, + "groupIds": [], + "frameId": null, + "index": "a1", + "roundness": null, + "seed": 761147384, + "version": 6, + "versionNonce": 1739142392, + "isDeleted": false, + "boundElements": null, + "updated": 1723900274105, + "link": null, + "locked": false, + "text": "Node", + "fontSize": 20, + "fontFamily": 5, + "textAlign": "left", + "verticalAlign": "top", + "containerId": null, + "originalText": "Node", + "autoResize": true, + "lineHeight": 1.25 + }, + { + "type": "rectangle", + "version": 96, + "versionNonce": 1681792392, + "index": "a3", + "isDeleted": false, + "id": "vBvHYmEaildLoBBiubEIp", + "fillStyle": "solid", + "strokeWidth": 2, + "strokeStyle": "solid", + "roughness": 1, + "opacity": 100, + "angle": 0, + "x": 674, + "y": 283, + "strokeColor": "#1e1e1e", + "backgroundColor": "transparent", + "width": 212, + "height": 366, + "seed": 1815148680, + "groupIds": [], + "frameId": null, + "roundness": { + "type": 3 + }, + "boundElements": [], + "updated": 1723900290995, + "link": null, + "locked": false + }, + { + "type": "text", + "version": 45, + "versionNonce": 414264456, + "index": "a4", + "isDeleted": false, + "id": "eLGzG02H2yWoz_ldSVi5I", + "fillStyle": "solid", + "strokeWidth": 2, + "strokeStyle": "solid", + "roughness": 1, + "opacity": 100, + "angle": 0, + "x": 758, + "y": 623, + "strokeColor": "#1e1e1e", + "backgroundColor": "transparent", + "width": 47.47999572753906, + "height": 25, + "seed": 1938859912, + "groupIds": [], + "frameId": null, + "roundness": null, + "boundElements": [], + "updated": 1723900290995, + "link": null, + "locked": false, + "fontSize": 20, + "fontFamily": 5, + "text": "Node", + "textAlign": "left", + "verticalAlign": "top", + "containerId": null, + "originalText": "Node", + "autoResize": true, + "lineHeight": 1.25 + }, + { + "type": "rectangle", + "version": 127, + "versionNonce": 2054706824, + "index": "a5", + "isDeleted": false, + "id": "DO6XcNah6PSHZl74xlFeC", + "fillStyle": "solid", + "strokeWidth": 2, + "strokeStyle": "solid", + "roughness": 1, + "opacity": 100, + "angle": 0, + "x": 920, + "y": 282, + "strokeColor": "#1e1e1e", + "backgroundColor": "transparent", + "width": 212, + "height": 366, + "seed": 617714936, + "groupIds": [], + "frameId": null, + "roundness": { + "type": 3 + }, + "boundElements": [], + "updated": 1723900615508, + "link": null, + "locked": false + }, + { + "type": "text", + "version": 73, + "versionNonce": 1954486008, + "index": "a6", + "isDeleted": false, + "id": "q4s-F2dCt1gGMQSFkWOxq", + "fillStyle": "solid", + "strokeWidth": 2, + "strokeStyle": "solid", + "roughness": 1, + "opacity": 100, + "angle": 0, + "x": 1004, + "y": 622, + "strokeColor": "#1e1e1e", + "backgroundColor": "transparent", + "width": 47.47999572753906, + "height": 25, + "seed": 606020344, + "groupIds": [], + "frameId": null, + "roundness": null, + "boundElements": [], + "updated": 1723900293772, + "link": null, + "locked": false, + "fontSize": 20, + "fontFamily": 5, + "text": "Node", + "textAlign": "left", + "verticalAlign": "top", + "containerId": null, + "originalText": "Node", + "autoResize": true, + "lineHeight": 1.25 + }, + { + "id": "92R5x2IIBueTVrv5psqXk", + "type": "rectangle", + "x": 448, + "y": 325, + "width": 160, + "height": 35, + "angle": 0, + "strokeColor": "#1e1e1e", + "backgroundColor": "#ffc9c9", + "fillStyle": "solid", + "strokeWidth": 2, + "strokeStyle": "solid", + "roughness": 1, + "opacity": 100, + "groupIds": [], + "frameId": null, + "index": "a7", + "roundness": { + "type": 3 + }, + "seed": 738056696, + "version": 57, + "versionNonce": 1889047288, + "isDeleted": false, + "boundElements": [ + { + "type": "text", + "id": "QxGFiWjK8uUkznLjxd2hI" + } + ], + "updated": 1723900305526, + "link": null, + "locked": false + }, + { + "id": "QxGFiWjK8uUkznLjxd2hI", + "type": "text", + "x": 498.51000022888184, + "y": 330, + "width": 58.97999954223633, + "height": 25, + "angle": 0, + "strokeColor": "#1e1e1e", + "backgroundColor": "#ffc9c9", + "fillStyle": "solid", + "strokeWidth": 2, + "strokeStyle": "solid", + "roughness": 1, + "opacity": 100, + "groupIds": [], + "frameId": null, + "index": "a8", + "roundness": null, + "seed": 1638312328, + "version": 7, + "versionNonce": 1981166216, + "isDeleted": false, + "boundElements": null, + "updated": 1723900307315, + "link": null, + "locked": false, + "text": "Pod A", + "fontSize": 20, + "fontFamily": 5, + "textAlign": "center", + "verticalAlign": "middle", + "containerId": "92R5x2IIBueTVrv5psqXk", + "originalText": "Pod A", + "autoResize": true, + "lineHeight": 1.25 + }, + { + "type": "rectangle", + "version": 83, + "versionNonce": 243068152, + "index": "a9", + "isDeleted": false, + "id": "Xb-TEu8dnWxm0lIegPqHI", + "fillStyle": "solid", + "strokeWidth": 2, + "strokeStyle": "solid", + "roughness": 1, + "opacity": 100, + "angle": 0, + "x": 703, + "y": 326.5, + "strokeColor": "#1e1e1e", + "backgroundColor": "#ffc9c9", + "width": 160, + "height": 35, + "seed": 1671150840, + "groupIds": [], + "frameId": null, + "roundness": { + "type": 3 + }, + "boundElements": [ + { + "type": "text", + "id": "Yl_edfCNt0A6LdPI5AhCi" + } + ], + "updated": 1723900312867, + "link": null, + "locked": false + }, + { + "type": "text", + "version": 33, + "versionNonce": 323259896, + "index": "aA", + "isDeleted": false, + "id": "Yl_edfCNt0A6LdPI5AhCi", + "fillStyle": "solid", + "strokeWidth": 2, + "strokeStyle": "solid", + "roughness": 1, + "opacity": 100, + "angle": 0, + "x": 753.5100002288818, + "y": 331.5, + "strokeColor": "#1e1e1e", + "backgroundColor": "#ffc9c9", + "width": 58.97999954223633, + "height": 25, + "seed": 2080988664, + "groupIds": [], + "frameId": null, + "roundness": null, + "boundElements": [], + "updated": 1723900312867, + "link": null, + "locked": false, + "fontSize": 20, + "fontFamily": 5, + "text": "Pod A", + "textAlign": "center", + "verticalAlign": "middle", + "containerId": "Xb-TEu8dnWxm0lIegPqHI", + "originalText": "Pod A", + "autoResize": true, + "lineHeight": 1.25 + }, + { + "type": "rectangle", + "version": 99, + "versionNonce": 14877576, + "index": "aD", + "isDeleted": false, + "id": "J3BrP3Zv--ziGWpSaTIox", + "fillStyle": "solid", + "strokeWidth": 2, + "strokeStyle": "solid", + "roughness": 1, + "opacity": 100, + "angle": 0, + "x": 451, + "y": 376.5, + "strokeColor": "#1e1e1e", + "backgroundColor": "#b2f2bb", + "width": 160, + "height": 35, + "seed": 1565991416, + "groupIds": [], + "frameId": null, + "roundness": { + "type": 3 + }, + "boundElements": [ + { + "type": "text", + "id": "XL5a7PR_F88qsyg5e7wYH" + } + ], + "updated": 1723900329581, + "link": null, + "locked": false + }, + { + "type": "text", + "version": 50, + "versionNonce": 1099749000, + "index": "aE", + "isDeleted": false, + "id": "XL5a7PR_F88qsyg5e7wYH", + "fillStyle": "solid", + "strokeWidth": 2, + "strokeStyle": "solid", + "roughness": 1, + "opacity": 100, + "angle": 0, + "x": 500.6599998474121, + "y": 381.5, + "strokeColor": "#1e1e1e", + "backgroundColor": "#ffc9c9", + "width": 60.68000030517578, + "height": 25, + "seed": 1393566456, + "groupIds": [], + "frameId": null, + "roundness": null, + "boundElements": [], + "updated": 1723900327025, + "link": null, + "locked": false, + "fontSize": 20, + "fontFamily": 5, + "text": "Pod B", + "textAlign": "center", + "verticalAlign": "middle", + "containerId": "J3BrP3Zv--ziGWpSaTIox", + "originalText": "Pod B", + "autoResize": true, + "lineHeight": 1.25 + }, + { + "type": "rectangle", + "version": 119, + "versionNonce": 1312595336, + "index": "aF", + "isDeleted": false, + "id": "hoOek9cJbiuZ0j_iIKQMh", + "fillStyle": "solid", + "strokeWidth": 2, + "strokeStyle": "solid", + "roughness": 1, + "opacity": 100, + "angle": 0, + "x": 707, + "y": 376.5, + "strokeColor": "#1e1e1e", + "backgroundColor": "#b2f2bb", + "width": 160, + "height": 35, + "seed": 1124974984, + "groupIds": [], + "frameId": null, + "roundness": { + "type": 3 + }, + "boundElements": [ + { + "type": "text", + "id": "Yv_dYbX8SRUcsc07TWv5R" + } + ], + "updated": 1723900334334, + "link": null, + "locked": false + }, + { + "type": "text", + "version": 70, + "versionNonce": 1054846088, + "index": "aG", + "isDeleted": false, + "id": "Yv_dYbX8SRUcsc07TWv5R", + "fillStyle": "solid", + "strokeWidth": 2, + "strokeStyle": "solid", + "roughness": 1, + "opacity": 100, + "angle": 0, + "x": 756.6599998474121, + "y": 381.5, + "strokeColor": "#1e1e1e", + "backgroundColor": "#ffc9c9", + "width": 60.68000030517578, + "height": 25, + "seed": 1173115016, + "groupIds": [], + "frameId": null, + "roundness": null, + "boundElements": [], + "updated": 1723900334334, + "link": null, + "locked": false, + "fontSize": 20, + "fontFamily": 5, + "text": "Pod B", + "textAlign": "center", + "verticalAlign": "middle", + "containerId": "hoOek9cJbiuZ0j_iIKQMh", + "originalText": "Pod B", + "autoResize": true, + "lineHeight": 1.25 + }, + { + "type": "rectangle", + "version": 130, + "versionNonce": 1360215032, + "index": "aH", + "isDeleted": false, + "id": "r6eCCvZw6B-d1RI1Ar3bE", + "fillStyle": "solid", + "strokeWidth": 2, + "strokeStyle": "solid", + "roughness": 1, + "opacity": 100, + "angle": 0, + "x": 942, + "y": 326.5, + "strokeColor": "#1e1e1e", + "backgroundColor": "#b2f2bb", + "width": 160, + "height": 35, + "seed": 1306501624, + "groupIds": [], + "frameId": null, + "roundness": { + "type": 3 + }, + "boundElements": [ + { + "type": "text", + "id": "JzWvBYpFF-v8taHfjpofA" + } + ], + "updated": 1723900339289, + "link": null, + "locked": false + }, + { + "type": "text", + "version": 81, + "versionNonce": 1815674104, + "index": "aI", + "isDeleted": false, + "id": "JzWvBYpFF-v8taHfjpofA", + "fillStyle": "solid", + "strokeWidth": 2, + "strokeStyle": "solid", + "roughness": 1, + "opacity": 100, + "angle": 0, + "x": 991.6599998474121, + "y": 331.5, + "strokeColor": "#1e1e1e", + "backgroundColor": "#ffc9c9", + "width": 60.68000030517578, + "height": 25, + "seed": 512271096, + "groupIds": [], + "frameId": null, + "roundness": null, + "boundElements": [], + "updated": 1723900339289, + "link": null, + "locked": false, + "fontSize": 20, + "fontFamily": 5, + "text": "Pod B", + "textAlign": "center", + "verticalAlign": "middle", + "containerId": "r6eCCvZw6B-d1RI1Ar3bE", + "originalText": "Pod B", + "autoResize": true, + "lineHeight": 1.25 + }, + { + "type": "rectangle", + "version": 171, + "versionNonce": 1182008312, + "index": "aJ", + "isDeleted": false, + "id": "8wdR37O6dWZuy0uBqlTPO", + "fillStyle": "solid", + "strokeWidth": 2, + "strokeStyle": "solid", + "roughness": 1, + "opacity": 100, + "angle": 0, + "x": 447, + "y": 561.5, + "strokeColor": "#1e1e1e", + "backgroundColor": "#a5d8ff", + "width": 160, + "height": 35, + "seed": 1555480824, + "groupIds": [], + "frameId": null, + "roundness": { + "type": 3 + }, + "boundElements": [ + { + "type": "text", + "id": "UDc9kNYYjbJGOmYgQxr_D" + }, + { + "id": "ip3ko6Qgkp2yaDZU3Npb7", + "type": "arrow" + } + ], + "updated": 1723900455757, + "link": null, + "locked": false + }, + { + "type": "text", + "version": 130, + "versionNonce": 1142715128, + "index": "aK", + "isDeleted": false, + "id": "UDc9kNYYjbJGOmYgQxr_D", + "fillStyle": "solid", + "strokeWidth": 2, + "strokeStyle": "solid", + "roughness": 1, + "opacity": 100, + "angle": 0, + "x": 458.9300003051758, + "y": 566.5, + "strokeColor": "#1e1e1e", + "backgroundColor": "#ffc9c9", + "width": 136.13999938964844, + "height": 25, + "seed": 589554168, + "groupIds": [], + "frameId": null, + "roundness": null, + "boundElements": [], + "updated": 1723900348825, + "link": null, + "locked": false, + "fontSize": 20, + "fontFamily": 5, + "text": "Vector Sender", + "textAlign": "center", + "verticalAlign": "middle", + "containerId": "8wdR37O6dWZuy0uBqlTPO", + "originalText": "Vector Sender", + "autoResize": true, + "lineHeight": 1.25 + }, + { + "type": "rectangle", + "version": 216, + "versionNonce": 1447237368, + "index": "aL", + "isDeleted": false, + "id": "1LDAVU4h56kyQqDki47Fx", + "fillStyle": "solid", + "strokeWidth": 2, + "strokeStyle": "solid", + "roughness": 1, + "opacity": 100, + "angle": 0, + "x": 703, + "y": 564.5, + "strokeColor": "#1e1e1e", + "backgroundColor": "#a5d8ff", + "width": 160, + "height": 35, + "seed": 1388313336, + "groupIds": [], + "frameId": null, + "roundness": { + "type": 3 + }, + "boundElements": [ + { + "type": "text", + "id": "RVmsM2_NwlojjC3Gfu5Qc" + }, + { + "id": "ttqnlQ2HRfQqrCbnGGGud", + "type": "arrow" + } + ], + "updated": 1723900460933, + "link": null, + "locked": false + }, + { + "type": "text", + "version": 175, + "versionNonce": 1393807864, + "index": "aM", + "isDeleted": false, + "id": "RVmsM2_NwlojjC3Gfu5Qc", + "fillStyle": "solid", + "strokeWidth": 2, + "strokeStyle": "solid", + "roughness": 1, + "opacity": 100, + "angle": 0, + "x": 714.9300003051758, + "y": 569.5, + "strokeColor": "#1e1e1e", + "backgroundColor": "#ffc9c9", + "width": 136.13999938964844, + "height": 25, + "seed": 938859512, + "groupIds": [], + "frameId": null, + "roundness": null, + "boundElements": [], + "updated": 1723900360082, + "link": null, + "locked": false, + "fontSize": 20, + "fontFamily": 5, + "text": "Vector Sender", + "textAlign": "center", + "verticalAlign": "middle", + "containerId": "1LDAVU4h56kyQqDki47Fx", + "originalText": "Vector Sender", + "autoResize": true, + "lineHeight": 1.25 + }, + { + "type": "rectangle", + "version": 202, + "versionNonce": 1367499768, + "index": "aN", + "isDeleted": false, + "id": "OR0LEqMTyHoCf6fCBwSoi", + "fillStyle": "solid", + "strokeWidth": 2, + "strokeStyle": "solid", + "roughness": 1, + "opacity": 100, + "angle": 0, + "x": 948, + "y": 566.5, + "strokeColor": "#1e1e1e", + "backgroundColor": "#a5d8ff", + "width": 160, + "height": 35, + "seed": 802006920, + "groupIds": [], + "frameId": null, + "roundness": { + "type": 3 + }, + "boundElements": [ + { + "type": "text", + "id": "2Z5PW4_YCbkFOe2_0ytkB" + }, + { + "id": "v3L7WKTIu1VOEqbzaqJMh", + "type": "arrow" + } + ], + "updated": 1723900467371, + "link": null, + "locked": false + }, + { + "type": "text", + "version": 161, + "versionNonce": 1734098056, + "index": "aO", + "isDeleted": false, + "id": "2Z5PW4_YCbkFOe2_0ytkB", + "fillStyle": "solid", + "strokeWidth": 2, + "strokeStyle": "solid", + "roughness": 1, + "opacity": 100, + "angle": 0, + "x": 959.9300003051758, + "y": 571.5, + "strokeColor": "#1e1e1e", + "backgroundColor": "#ffc9c9", + "width": 136.13999938964844, + "height": 25, + "seed": 499086984, + "groupIds": [], + "frameId": null, + "roundness": null, + "boundElements": [], + "updated": 1723900362803, + "link": null, + "locked": false, + "fontSize": 20, + "fontFamily": 5, + "text": "Vector Sender", + "textAlign": "center", + "verticalAlign": "middle", + "containerId": "OR0LEqMTyHoCf6fCBwSoi", + "originalText": "Vector Sender", + "autoResize": true, + "lineHeight": 1.25 + }, + { + "type": "rectangle", + "version": 216, + "versionNonce": 1425482376, + "index": "aP", + "isDeleted": false, + "id": "17zM2ukg1E5n6OFvhEX0n", + "fillStyle": "solid", + "strokeWidth": 2, + "strokeStyle": "solid", + "roughness": 1, + "opacity": 100, + "angle": 0, + "x": 946, + "y": 373.5, + "strokeColor": "#1e1e1e", + "backgroundColor": "#ffec99", + "width": 160, + "height": 60, + "seed": 1672853640, + "groupIds": [], + "frameId": null, + "roundness": { + "type": 3 + }, + "boundElements": [ + { + "type": "text", + "id": "WHC1mZRTR3y6WLPfCNvBT" + }, + { + "id": "ip3ko6Qgkp2yaDZU3Npb7", + "type": "arrow" + }, + { + "id": "ttqnlQ2HRfQqrCbnGGGud", + "type": "arrow" + }, + { + "id": "v3L7WKTIu1VOEqbzaqJMh", + "type": "arrow" + }, + { + "id": "RHZMVLFr3sqcc_g9N_eP3", + "type": "arrow" + } + ], + "updated": 1723900542888, + "link": null, + "locked": false + }, + { + "type": "text", + "version": 180, + "versionNonce": 1491082376, + "index": "aQ", + "isDeleted": false, + "id": "WHC1mZRTR3y6WLPfCNvBT", + "fillStyle": "solid", + "strokeWidth": 2, + "strokeStyle": "solid", + "roughness": 1, + "opacity": 100, + "angle": 0, + "x": 971.8900032043457, + "y": 378.5, + "strokeColor": "#1e1e1e", + "backgroundColor": "#ffc9c9", + "width": 108.2199935913086, + "height": 50, + "seed": 477980552, + "groupIds": [], + "frameId": null, + "roundness": null, + "boundElements": [], + "updated": 1723900373798, + "link": null, + "locked": false, + "fontSize": 20, + "fontFamily": 5, + "text": "Vector \nAggregator", + "textAlign": "center", + "verticalAlign": "middle", + "containerId": "17zM2ukg1E5n6OFvhEX0n", + "originalText": "Vector Aggregator", + "autoResize": true, + "lineHeight": 1.25 + }, + { + "type": "text", + "version": 100, + "versionNonce": 878482168, + "index": "aT", + "isDeleted": false, + "id": "XLvWUhpQR77DTdFWvC7c_", + "fillStyle": "solid", + "strokeWidth": 2, + "strokeStyle": "solid", + "roughness": 1, + "opacity": 100, + "angle": 0, + "x": 949.7, + "y": 516.4999999999999, + "strokeColor": "#1e1e1e", + "backgroundColor": "#ffec99", + "width": 67.81999969482422, + "height": 25, + "seed": 434827144, + "groupIds": [], + "frameId": null, + "roundness": null, + "boundElements": [], + "updated": 1723900480913, + "link": null, + "locked": false, + "fontSize": 20, + "fontFamily": 5, + "text": "📁Logs", + "textAlign": "left", + "verticalAlign": "top", + "containerId": null, + "originalText": "📁Logs", + "autoResize": true, + "lineHeight": 1.25 + }, + { + "id": "wcBct9W8cVGgHTvPYaSmW", + "type": "arrow", + "x": 482.67772211604495, + "y": 543.9565217391304, + "width": 9.322277883955053, + "height": 15.04347826086962, + "angle": 0, + "strokeColor": "#1e1e1e", + "backgroundColor": "#ffec99", + "fillStyle": "solid", + "strokeWidth": 2, + "strokeStyle": "solid", + "roughness": 1, + "opacity": 100, + "groupIds": [], + "frameId": null, + "index": "aU", + "roundness": { + "type": 2 + }, + "seed": 1247915656, + "version": 16, + "versionNonce": 1868141560, + "isDeleted": false, + "boundElements": null, + "updated": 1723900487747, + "link": null, + "locked": false, + "points": [ + [ + 0, + 0 + ], + [ + 9.322277883955053, + 15.04347826086962 + ] + ], + "lastCommittedPoint": null, + "startBinding": null, + "endBinding": null, + "startArrowhead": null, + "endArrowhead": "arrow", + "elbowed": false + }, + { + "type": "arrow", + "version": 34, + "versionNonce": 2029682056, + "index": "aV", + "isDeleted": false, + "id": "dmpAlBtYN_fvpd8lBsTU8", + "fillStyle": "solid", + "strokeWidth": 2, + "strokeStyle": "solid", + "roughness": 1, + "opacity": 100, + "angle": 0, + "x": 733.8461277997552, + "y": 541.1099614836903, + "strokeColor": "#1e1e1e", + "backgroundColor": "#ffec99", + "width": 14, + "height": 22, + "seed": 2009992184, + "groupIds": [], + "frameId": null, + "roundness": { + "type": 2 + }, + "boundElements": [], + "updated": 1723900444105, + "link": null, + "locked": false, + "startBinding": null, + "endBinding": null, + "lastCommittedPoint": null, + "startArrowhead": null, + "endArrowhead": "arrow", + "points": [ + [ + 0, + 0 + ], + [ + 14, + 22 + ] + ], + "elbowed": false + }, + { + "type": "arrow", + "version": 21, + "versionNonce": 22480376, + "index": "aW", + "isDeleted": false, + "id": "uBwmqhjHrtYvMXyrrEyU_", + "fillStyle": "solid", + "strokeWidth": 2, + "strokeStyle": "solid", + "roughness": 1, + "opacity": 100, + "angle": 0, + "x": 976.8461277997552, + "y": 543.1099614836903, + "strokeColor": "#1e1e1e", + "backgroundColor": "#ffec99", + "width": 14, + "height": 22, + "seed": 588168072, + "groupIds": [], + "frameId": null, + "roundness": { + "type": 2 + }, + "boundElements": [], + "updated": 1723900447780, + "link": null, + "locked": false, + "startBinding": null, + "endBinding": null, + "lastCommittedPoint": null, + "startArrowhead": null, + "endArrowhead": "arrow", + "points": [ + [ + 0, + 0 + ], + [ + 14, + 22 + ] + ], + "elbowed": false + }, + { + "id": "ip3ko6Qgkp2yaDZU3Npb7", + "type": "arrow", + "x": 525, + "y": 556.5, + "width": 416, + "height": 150.5, + "angle": 0, + "strokeColor": "#1e1e1e", + "backgroundColor": "#ffec99", + "fillStyle": "solid", + "strokeWidth": 2, + "strokeStyle": "solid", + "roughness": 1, + "opacity": 100, + "groupIds": [], + "frameId": null, + "index": "aX", + "roundness": { + "type": 2 + }, + "seed": 116168440, + "version": 114, + "versionNonce": 726164616, + "isDeleted": false, + "boundElements": null, + "updated": 1723900597976, + "link": null, + "locked": false, + "points": [ + [ + 0, + 0 + ], + [ + 416, + -150.5 + ] + ], + "lastCommittedPoint": null, + "startBinding": { + "elementId": "8wdR37O6dWZuy0uBqlTPO", + "focus": -0.48971384377416866, + "gap": 4.5, + "fixedPoint": null + }, + "endBinding": { + "elementId": "17zM2ukg1E5n6OFvhEX0n", + "focus": 0.46661251015434607, + "gap": 3, + "fixedPoint": null + }, + "startArrowhead": null, + "endArrowhead": "arrow", + "elbowed": false + }, + { + "id": "ttqnlQ2HRfQqrCbnGGGud", + "type": "arrow", + "x": 784, + "y": 560, + "width": 162, + "height": 126, + "angle": 0, + "strokeColor": "#1e1e1e", + "backgroundColor": "#ffec99", + "fillStyle": "solid", + "strokeWidth": 2, + "strokeStyle": "solid", + "roughness": 1, + "opacity": 100, + "groupIds": [], + "frameId": null, + "index": "aY", + "roundness": { + "type": 2 + }, + "seed": 353996280, + "version": 57, + "versionNonce": 227044744, + "isDeleted": false, + "boundElements": null, + "updated": 1723900579487, + "link": null, + "locked": false, + "points": [ + [ + 0, + 0 + ], + [ + 162, + -126 + ] + ], + "lastCommittedPoint": null, + "startBinding": { + "elementId": "1LDAVU4h56kyQqDki47Fx", + "focus": -0.2662020905923345, + "gap": 4.5, + "fixedPoint": null + }, + "endBinding": { + "elementId": "17zM2ukg1E5n6OFvhEX0n", + "focus": 0.34397590361445785, + "gap": 1, + "fixedPoint": null + }, + "startArrowhead": null, + "endArrowhead": "arrow", + "elbowed": false + }, + { + "id": "v3L7WKTIu1VOEqbzaqJMh", + "type": "arrow", + "x": 1032, + "y": 565, + "width": 3, + "height": 123, + "angle": 0, + "strokeColor": "#1e1e1e", + "backgroundColor": "#ffec99", + "fillStyle": "solid", + "strokeWidth": 2, + "strokeStyle": "solid", + "roughness": 1, + "opacity": 100, + "groupIds": [], + "frameId": null, + "index": "aZ", + "roundness": { + "type": 2 + }, + "seed": 876730872, + "version": 49, + "versionNonce": 2046588296, + "isDeleted": false, + "boundElements": null, + "updated": 1723900570482, + "link": null, + "locked": false, + "points": [ + [ + 0, + 0 + ], + [ + -3, + -123 + ] + ], + "lastCommittedPoint": null, + "startBinding": { + "elementId": "OR0LEqMTyHoCf6fCBwSoi", + "focus": 0.05549658832448825, + "gap": 1.5, + "fixedPoint": null + }, + "endBinding": { + "elementId": "17zM2ukg1E5n6OFvhEX0n", + "focus": -0.025528700906344414, + "gap": 8.5, + "fixedPoint": null + }, + "startArrowhead": null, + "endArrowhead": "arrow", + "elbowed": false + }, + { + "type": "text", + "version": 125, + "versionNonce": 684060408, + "index": "aa", + "isDeleted": false, + "id": "wax97mgWr-HQnyKH6j3S0", + "fillStyle": "solid", + "strokeWidth": 2, + "strokeStyle": "solid", + "roughness": 1, + "opacity": 100, + "angle": 0, + "x": 696.0900001525879, + "y": 510.5000000000001, + "strokeColor": "#1e1e1e", + "backgroundColor": "#ffec99", + "width": 67.81999969482422, + "height": 25, + "seed": 102741128, + "groupIds": [], + "frameId": null, + "roundness": null, + "boundElements": [], + "updated": 1723900486601, + "link": null, + "locked": false, + "fontSize": 20, + "fontFamily": 5, + "text": "📁Logs", + "textAlign": "left", + "verticalAlign": "top", + "containerId": null, + "originalText": "📁Logs", + "autoResize": true, + "lineHeight": 1.25 + }, + { + "type": "text", + "version": 121, + "versionNonce": 235143816, + "index": "ab", + "isDeleted": false, + "id": "ZgUkDPLd-6EnUC_8_MImX", + "fillStyle": "solid", + "strokeWidth": 2, + "strokeStyle": "solid", + "roughness": 1, + "opacity": 100, + "angle": 0, + "x": 448.0900001525879, + "y": 514.5000000000001, + "strokeColor": "#1e1e1e", + "backgroundColor": "#ffec99", + "width": 67.81999969482422, + "height": 25, + "seed": 1368323576, + "groupIds": [], + "frameId": null, + "roundness": null, + "boundElements": [], + "updated": 1723900490821, + "link": null, + "locked": false, + "fontSize": 20, + "fontFamily": 5, + "text": "📁Logs", + "textAlign": "left", + "verticalAlign": "top", + "containerId": null, + "originalText": "📁Logs", + "autoResize": true, + "lineHeight": 1.25 + }, + { + "id": "7gTx3_pDmVbNOlYddL6_L", + "type": "text", + "x": 1313, + "y": 333.054054054054, + "width": 129.99999999999994, + "height": 158.10810810810796, + "angle": 0, + "strokeColor": "#1e1e1e", + "backgroundColor": "#ffec99", + "fillStyle": "solid", + "strokeWidth": 2, + "strokeStyle": "solid", + "roughness": 1, + "opacity": 100, + "groupIds": [], + "frameId": null, + "index": "ac", + "roundness": null, + "seed": 2019109880, + "version": 123, + "versionNonce": 166076552, + "isDeleted": false, + "boundElements": [ + { + "id": "RHZMVLFr3sqcc_g9N_eP3", + "type": "arrow" + } + ], + "updated": 1723900542888, + "link": null, + "locked": false, + "text": "☁️", + "fontSize": 126.48648648648634, + "fontFamily": 5, + "textAlign": "left", + "verticalAlign": "top", + "containerId": null, + "originalText": "☁️", + "autoResize": true, + "lineHeight": 1.25 + }, + { + "id": "FE46J8XAuo-1FSBHKA7Ac", + "type": "text", + "x": 1303, + "y": 459, + "width": 152.8199920654297, + "height": 45, + "angle": 0, + "strokeColor": "#1e1e1e", + "backgroundColor": "#ffec99", + "fillStyle": "solid", + "strokeWidth": 2, + "strokeStyle": "solid", + "roughness": 1, + "opacity": 100, + "groupIds": [], + "frameId": null, + "index": "ad", + "roundness": null, + "seed": 638222472, + "version": 54, + "versionNonce": 438913160, + "isDeleted": false, + "boundElements": null, + "updated": 1723900537141, + "link": null, + "locked": false, + "text": "Datadog", + "fontSize": 36, + "fontFamily": 5, + "textAlign": "left", + "verticalAlign": "top", + "containerId": null, + "originalText": "Datadog", + "autoResize": true, + "lineHeight": 1.25 + }, + { + "id": "RHZMVLFr3sqcc_g9N_eP3", + "type": "arrow", + "x": 1111, + "y": 406, + "width": 197, + "height": 1, + "angle": 0, + "strokeColor": "#1e1e1e", + "backgroundColor": "#ffec99", + "fillStyle": "solid", + "strokeWidth": 2, + "strokeStyle": "dashed", + "roughness": 1, + "opacity": 100, + "groupIds": [], + "frameId": null, + "index": "ae", + "roundness": { + "type": 2 + }, + "seed": 1426607496, + "version": 54, + "versionNonce": 412299000, + "isDeleted": false, + "boundElements": [], + "updated": 1723900606848, + "link": null, + "locked": false, + "points": [ + [ + 0, + 0 + ], + [ + 197, + -1 + ] + ], + "lastCommittedPoint": null, + "startBinding": { + "elementId": "17zM2ukg1E5n6OFvhEX0n", + "focus": 0.09641068447412353, + "gap": 5, + "fixedPoint": null + }, + "endBinding": { + "elementId": "7gTx3_pDmVbNOlYddL6_L", + "focus": 0.09401690199263668, + "gap": 5, + "fixedPoint": null + }, + "startArrowhead": null, + "endArrowhead": "arrow", + "elbowed": false + }, + { + "id": "QC2iQhhAex4u7UYwprLWD", + "type": "text", + "x": 683, + "y": 190, + "width": 218.52000427246094, + "height": 45, + "angle": 0, + "strokeColor": "#1e1e1e", + "backgroundColor": "#ffec99", + "fillStyle": "solid", + "strokeWidth": 2, + "strokeStyle": "solid", + "roughness": 1, + "opacity": 100, + "groupIds": [], + "frameId": null, + "index": "ag", + "roundness": null, + "seed": 682684808, + "version": 37, + "versionNonce": 1569769864, + "isDeleted": false, + "boundElements": null, + "updated": 1723900651018, + "link": null, + "locked": false, + "text": "Kube Cluster", + "fontSize": 36, + "fontFamily": 5, + "textAlign": "left", + "verticalAlign": "top", + "containerId": null, + "originalText": "Kube Cluster", + "autoResize": true, + "lineHeight": 1.25 + } + ], + "appState": { + "gridSize": 20, + "gridStep": 5, + "gridModeEnabled": false, + "viewBackgroundColor": "#ffffff" + }, + "files": {} +} \ No newline at end of file diff --git a/docs/architecture-diagram.svg b/docs/architecture-diagram.svg new file mode 100644 index 0000000..61586ad --- /dev/null +++ b/docs/architecture-diagram.svg @@ -0,0 +1,13 @@ + + + + + + + + NodeNodeNodePod APod APod BPod BPod BVector SenderVector SenderVector SenderVector Aggregator📁Logs📁Logs📁Logs☁️DatadogKube Cluster \ No newline at end of file