[{"data":1,"prerenderedAt":-1},["ShallowReactive",2],{"skill-clickhouse-clickstack-otel-collector":3,"mdc--uu6r4l-key":39,"related-org-clickhouse-clickstack-otel-collector":9803,"related-repo-clickhouse-clickstack-otel-collector":9995},{"slug":4,"name":4,"fn":5,"description":6,"org":7,"tags":11,"stars":26,"repoUrl":27,"updatedAt":28,"license":29,"forks":30,"topics":31,"repo":34,"sourceUrl":37,"mdContent":38},"clickstack-otel-collector","set up OpenTelemetry collector for ClickHouse","Use when a user wants to wire an OpenTelemetry collector into a Managed ClickStack service on ClickHouse Cloud, either by deploying a new local collector (Docker run or Docker Compose) or by configuring their own existing collector, then send rich synthetic telemetry and verify it is visible in ClickStack.",{"slug":8,"name":9,"logoUrl":10,"githubOrg":9},"clickhouse","ClickHouse","https:\u002F\u002Fpexgzepcugksgbtrxkhf.supabase.co\u002Fstorage\u002Fv1\u002Fobject\u002Fpublic\u002Forg-logos\u002Fclickhouse.png",[12,14,17,20,23],{"name":9,"slug":8,"type":13},"tag",{"name":15,"slug":16,"type":13},"Observability","observability",{"name":18,"slug":19,"type":13},"Logs","logs",{"name":21,"slug":22,"type":13},"OpenTelemetry","opentelemetry",{"name":24,"slug":25,"type":13},"Metrics","metrics",196,"https:\u002F\u002Fgithub.com\u002FClickHouse\u002Fclickhouse-docs","2026-06-11T08:25:17.959323","Apache-2.0",457,[8,32,33],"documentation","guide",{"repoUrl":27,"stars":26,"forks":30,"topics":35,"description":36},[8,32,33],"Official documentation for ClickHouse - the fastest and most resource efficient real-time data warehouse and open-source database.","https:\u002F\u002Fgithub.com\u002FClickHouse\u002Fclickhouse-docs\u002Ftree\u002FHEAD\u002Fstatic\u002Fskills\u002Fclickstack-otel-collector","---\nname: clickstack-otel-collector\ndescription: Use when a user wants to wire an OpenTelemetry collector into a Managed ClickStack service on ClickHouse Cloud, either by deploying a new local collector (Docker run or Docker Compose) or by configuring their own existing collector, then send rich synthetic telemetry and verify it is visible in ClickStack.\nlicense: Apache-2.0\nmetadata:\n  author: ClickHouse Inc\n  version: \"0.6.0\"\n---\n\n# Set up an OpenTelemetry collector for Managed ClickStack\n\nThis skill wires an OpenTelemetry collector into a Managed ClickStack service running on\nClickHouse Cloud, sends rich synthetic telemetry through it, and confirms the data is actually\nvisible in ClickStack. It uses [`clickhousectl`](https:\u002F\u002Fclickhouse.com\u002Fdocs\u002Finterfaces\u002Fcli)\nfor all cloud and SQL operations.\n\n**Scope.** This skill supports two paths, chosen in Step 0:\n\n1. **Deploy a new collector** locally. You can do this **two ways: individual `docker` commands,\n   or a `docker compose` file** (recommended, fewer commands and one file to start\u002Fstop). Make the\n   user aware of both up front and let them pick in Step 0; do not assume plain `docker`. Either\n   way runs the ClickStack distribution of the collector, preconfigured for Managed ClickStack.\n2. **Configure your own existing collector** by adding the ClickHouse exporter configuration.\n   We give you the exact config to drop in; you reload your collector. Use this if you already\n   run a collector in a **gateway** role.\n\nA full Kubernetes deployment (Helm, secrets in K8s Secrets) is out of scope here; the config\nwe generate in path 2 can be applied to a collector running anywhere.\n\nThe end state is:\n\n- A dedicated `hyperdx_ingest` SQL user on the target service, with exactly the grants the\n  collector needs (it creates the `otel.*` schema on first write).\n- A collector forwarding logs, traces, and metrics into the `otel` database on the service,\n  either the new local ClickStack collector or your existing one.\n- Rich synthetic telemetry across several services, severities, span statuses, and metric\n  types, so ClickStack's Search, Service Map, and dashboards have something real to show.\n- The service confirmed **awake**, and the user walked through the ClickStack onboarding in the\n  Cloud console so they can actually *see* their data.\n\nSecrets (the OTLP auth token and the SQL password) are generated locally, written **once** to a\n`0600` env file, and passed to Docker via `--env-file`. They are never pasted into the chat,\nnever passed with `docker run -e`, and never echoed back after creation.\n\nFollow these steps in order. Each step depends on state established by the previous one.\n\n---\n\n## Step 0: Choose your path\n\nAsk the user two short questions before doing anything else, because they determine which later\nsteps run.\n\n**Question 1: Do you already have an OpenTelemetry collector running in a gateway role?**\n\n- **No, set one up for me.** -> the **new-collector** path. Continue to Question 2.\n- **Yes, I have one.** -> the **existing-collector** path. Skip Question 2 (it does not apply),\n  and in Step 6 you will configure their collector rather than deploy a new one.\n\n**Question 2 (new-collector path only): Run the collector with individual Docker commands, or a\nDocker Compose file?**\n\n- **Docker Compose (recommended).** Fewer commands, one file to start and stop, easiest to\n  re-run. Best if `docker compose` is available.\n- **Individual Docker commands.** Use if Compose is not installed or you prefer explicit\n  commands.\n\nRecord the answers as `COLLECTOR_PATH` (`new` or `existing`) and, for the new path,\n`DEPLOY_MODE` (`compose` or `run`). Refer back to them in Step 6 and Step 7.\n\n---\n\n## Step 1: Batch the permissions up front\n\nCoding agents prompt for approval the first time they see each shell command. To avoid\ninterrupting the user every few steps, ask them once, up front, to allowlist the command\nprefixes below (the \"always allow for this project \u002F session\" option in their agent). There are\nno destructive operations and nothing targets anything outside this project or their ClickHouse\nCloud service.\n\n| Command prefix | Used for | Needed when |\n| --- | --- | --- |\n| `openssl rand …` | generate the OTLP token and SQL password | always |\n| `clickhousectl cloud …` | auth, resolve the service, run SQL via the Query API | always |\n| `jq …` | parse JSON from `clickhousectl` | always |\n| `docker …` \u002F `docker compose …` | run\u002Finspect the collector and the telemetry generator | new-collector path, and the optional telemetry check |\n| `curl …` | local health check against `localhost:13133` (and installing `clickhousectl` if missing) | new-collector path |\n\nTell the user, in your own words: *\"If your agent supports it, choose 'always allow' for each\nof these the first time it asks. The whole run is read-only against your machine except for the\ncollector container, and write operations against ClickHouse are limited to creating the ingest\nuser and the `otel` schema.\"*\n\nIf the user is on the existing-collector path and does not want to run the optional telemetry\ncheck, you can drop `docker` and `curl` from the list.\n\n**Two approvals are semantic, not prefix-based, so allowlisting won't pre-clear them.** Warn the\nuser to expect these and approve them explicitly when they appear:\n\n- The `clickhousectl` install in Step 3 uses `curl … | sh`, which many agent sandboxes flag as\n  \"downloading and running untrusted code\" regardless of any `curl` allowlist rule.\n- The `CREATE USER` \u002F `GRANT` in Step 5 may be flagged as \"modifying shared production\n  infrastructure,\" again independent of the `clickhousectl` prefix rule.\n\nNeither is solved by the table above; they are one-time, intentional, and safe to approve.\n\nThen continue.\n\n---\n\n## Step 2: Confirm the target service and lay down the secrets file\n\nThe user's prompt contains a service identifier, either a service ID (UUID) or a service name.\nTreat that value as `SERVICE_REF`.\n\nCreate a working directory and a **`0600` env file** that will hold all configuration and\nsecrets for this run. The key names match exactly what the collector image reads, so this same\nfile is passed straight to `docker run --env-file` (or referenced by Compose) in Step 6. Write\nit under a tight `umask` so the secret is never briefly world-readable:\n\n```bash\nWORKDIR=\"${WORKDIR:-$HOME\u002Fclickstack-otel-collector}\"\nmkdir -p \"$WORKDIR\" && chmod 700 \"$WORKDIR\"\nENV_FILE=\"$WORKDIR\u002Fcollector.env\"\n\n# Generate secrets WITHOUT printing them; write straight into a private file.\n( umask 177\n  {\n    echo \"SERVICE_REF=$SERVICE_REF\"\n    echo \"OTLP_AUTH_TOKEN=$(openssl rand -hex 32)\"\n    echo \"CLICKHOUSE_USER=hyperdx_ingest\"\n    echo \"CLICKHOUSE_PASSWORD=$(openssl rand -hex 24)Aa1-\"\n    echo \"HYPERDX_OTEL_EXPORTER_CLICKHOUSE_DATABASE=otel\"\n  } > \"$ENV_FILE\"\n)\nchmod 600 \"$ENV_FILE\"\nls -l \"$ENV_FILE\"\n```\n\nTwo things about these values matter and are easy to get wrong:\n\n- **Key names are exact.** The collector reads `CLICKHOUSE_USER`, `CLICKHOUSE_PASSWORD`,\n  `CLICKHOUSE_ENDPOINT`, and `HYPERDX_OTEL_EXPORTER_CLICKHOUSE_DATABASE`. Store the SQL password\n  under `CLICKHOUSE_PASSWORD` (not a custom name); if it is missing, the collector starts with an\n  **empty** password and dies with `code: 516, Authentication failed`.\n- **The password charset is constrained from three directions at once.** ClickHouse Cloud rejects\n  passwords without at least one uppercase character and one special character, so a plain hex\n  string fails at `CREATE USER`. At the same time, the collector's migration tool embeds the\n  password in a connection URL, so `@`, `:`, `\u002F`, `?`, `#`, and `%` corrupt it (symptom:\n  `code: 516` at startup even though the password is \"correct\"). The recipe above is random hex\n  (lowercase + digits) plus the suffix `Aa1-`, which adds the required uppercase, a digit, and a\n  **URL-unreserved** special character (`-`). The OTLP token has no such rules (it is just a\n  bearer token), so plain hex is fine for it.\n\nThe env file uses **bare `KEY=VALUE` lines with no quotes**: Docker's `--env-file` does not do\nshell parsing, so any quotes you add become part of the value.\n\nOn the **existing-collector path** the `OTLP_AUTH_TOKEN` is not used by your collector (auth on\nyour receiver is your own setup); it is generated only so the same file works if you later switch\nto the local collector. The `CLICKHOUSE_*` values are still used: they go into the exporter\nconfig you add to your collector in Step 6.\n\n**Every later step runs in a fresh shell, so `WORKDIR`, `ENV_FILE`, and any exported credentials do\nnot persist, and `WORKDIR`\u002F`ENV_FILE` are not stored inside the env file, so sourcing it can't\nrecover them.** Begin each subsequent step's shell with this **standard preamble**, which\nre-derives the paths from the deterministic default, loads the saved credentials (Step 3), and\nloads the config:\n\n```bash\nWORKDIR=\"${WORKDIR:-$HOME\u002Fclickstack-otel-collector}\"; ENV_FILE=\"$WORKDIR\u002Fcollector.env\"\n[ -f \"$WORKDIR\u002Fcreds.env\" ] && . \"$WORKDIR\u002Fcreds.env\"; set -a; . \"$ENV_FILE\"; set +a\n```\n\nIf you chose a non-default `WORKDIR`, set it explicitly at the top of every step (the `${WORKDIR:-…}`\ndefault only covers the standard location). Later steps refer to this as \"the standard preamble\".\n\n**Confirm with the user** that `SERVICE_REF` is correct. Tell them the working directory and that\n`collector.env` (mode `0600`) now holds the OTLP token and the SQL password. Do **not** print\neither secret. If they want to see a value, point them at the file\n(`grep OTLP_AUTH_TOKEN \"$ENV_FILE\"`).\n\nIf the user supplied their own token or password, write those into the file instead of the\ngenerated ones, but keep the same `0600` discipline and make sure any custom password still meets\nthe charset rules above.\n\n---\n\n## Step 3: Authenticate `clickhousectl` (separate terminal by default)\n\nCheck `clickhousectl` is on `PATH`. Run this presence check **on its own**, not chained to the\ninstaller: the `|| curl … | sh` form drags a harmless check into a compound command that sandboxes\ndeny wholesale as an untrusted-code download.\n\n```bash\nwhich clickhousectl\n```\n\nOnly if that prints nothing, install it (the user may need to approve this explicitly, see Step 1):\n\n```bash\ncurl -fsSL https:\u002F\u002Fclickhouse.com\u002Fcli | sh\n```\n\nCheck authentication:\n\n```bash\nclickhousectl cloud auth status\n```\n\nThis skill needs **API key authentication**: OAuth is read-only and cannot create users or run\nwrite queries. If the `API key` row is not `Active`, the user must authenticate.\n\n**Do not ask the user to paste their API key and secret into the chat.** Anything pasted into the\nconversation lives in the transcript and has to be rotated afterward. Instead, ask them to\nauthenticate in a **separate terminal**, then tell you when they are done:\n\n> I need a ClickHouse Cloud **Admin** API key to create the ingest user and verify the data.\n> Please don't paste it here. Instead:\n>\n> 1. In the [Cloud console](https:\u002F\u002Fconsole.clickhouse.cloud), open **Organization → API keys\n>    → New API key**, and give it the **Admin** role. (Developer-scoped keys can't provision the\n>    per-service Query API endpoint that `cloud service query` uses.)\n> 2. In a **separate terminal**, run:\n>\n>    ```bash\n>    clickhousectl cloud auth login --api-key \u003Ckey-id> --api-secret \u003Ckey-secret>\n>    ```\n>\n> 3. Tell me when that's done and I'll re-check the auth status.\n\nPoll until the API key row reports `Active`, then confirm with a real privileged call rather than\ntrusting the status table alone. Use a **ref-agnostic** call here: `SERVICE_REF` may be a name, and\n`cloud service get` only accepts a UUID, so confirming with `get` would fail on a name for reasons\nunrelated to auth. `cloud service list` needs no ref and proves the API key works:\n\n```bash\nclickhousectl cloud auth status\nclickhousectl cloud service list --json | jq -r '.[].name'\n```\n\nIf the list returns your services, you are authenticated; continue. The actual name-or-UUID\nresolution of `SERVICE_REF` happens in Step 4.\n\n**Expect to need the env-var credentials (common, not an edge case).** Many `clickhousectl` builds\nsave the credentials file but a freshly spawned shell (such as the one your tool calls run in)\ndoesn't read it, so `auth status` shows `Active` yet the very next `clickhousectl` call reports\n`No credentials found`. Rather than treat this as a rare fallback, write a small **sourceable\ncreds file** once, then load it in every later shell. This keeps each subsequent shell to a single\n`.` line instead of two `jq` re-derivations, and keeps the secret out of the chat:\n\n```bash\n# Write a private, sourceable creds file next to collector.env.\n( umask 177\n  { echo \"export CLICKHOUSE_CLOUD_API_KEY=$(jq -r .api_key    \"$HOME\u002F.clickhouse\u002Fcredentials.json\")\"\n    echo \"export CLICKHOUSE_CLOUD_API_SECRET=$(jq -r .api_secret \"$HOME\u002F.clickhouse\u002Fcredentials.json\")\"\n  } > \"$WORKDIR\u002Fcreds.env\"\n)\nchmod 600 \"$WORKDIR\u002Fcreds.env\"\n```\n\n**From now on, open every shell that calls `clickhousectl` with both loads**, because env vars do\nnot persist across shells:\n\n```bash\n. \"$WORKDIR\u002Fcreds.env\"; set -a; . \"$ENV_FILE\"; set +a\n```\n\nRe-run the `service list` check above with the creds loaded; it should now succeed. Do not continue\nuntil a real call works. (If `clickhousectl auth status` already shows `API key … Active` and calls\nsucceed without `creds.env`, you can skip this; but most agent shells need it.)\n\n---\n\n## Step 4: Resolve the service and capture the HTTPS endpoint\n\nRun the standard preamble (Step 2) so the paths, credentials, and config are all loaded in this\nshell, then resolve the service. If `SERVICE_REF` is a UUID, use it directly; otherwise look it up\nby name:\n\n```bash\nWORKDIR=\"${WORKDIR:-$HOME\u002Fclickstack-otel-collector}\"; ENV_FILE=\"$WORKDIR\u002Fcollector.env\"\n[ -f \"$WORKDIR\u002Fcreds.env\" ] && . \"$WORKDIR\u002Fcreds.env\"; set -a; . \"$ENV_FILE\"; set +a\n```\n\n```bash\n# UUID form\nclickhousectl cloud service get \"$SERVICE_REF\" --json > \"$WORKDIR\u002Fsvc.json\"\n\n# Name form (note the double quotes: service names can contain spaces or apostrophes,\n# e.g. \"Alex's test\")\nclickhousectl cloud service list --json \\\n  | jq --arg n \"$SERVICE_REF\" '.[] | select(.name==$n)' > \"$WORKDIR\u002Fsvc.json\"\n```\n\nExtract the values you need, coercing the port to an integer. The port serializes as a float\n(`8443.0`); if `:8443.0` leaks into the endpoint the collector's ClickHouse exporter cannot dial\nit:\n\n```bash\nSERVICE_ID=$(jq -r '.id' \"$WORKDIR\u002Fsvc.json\")\nSERVICE_NAME=$(jq -r '.name' \"$WORKDIR\u002Fsvc.json\")\nSTATE=$(jq -r '.state' \"$WORKDIR\u002Fsvc.json\")\nCLICKHOUSE_ENDPOINT=$(jq -r '.endpoints[] | select(.protocol==\"https\")\n  | \"https:\u002F\u002F\\(.host):\\(.port | tonumber | floor)\"' \"$WORKDIR\u002Fsvc.json\")\n\n# Persist the resolved values back into the env file for later steps and docker --env-file.\n# Append only if the key is not already present, so a second run does not duplicate lines.\ngrep -q '^SERVICE_ID=' \"$ENV_FILE\" || echo \"SERVICE_ID=$SERVICE_ID\" >> \"$ENV_FILE\"\ngrep -q '^CLICKHOUSE_ENDPOINT=' \"$ENV_FILE\" || echo \"CLICKHOUSE_ENDPOINT=$CLICKHOUSE_ENDPOINT\" >> \"$ENV_FILE\"\nprintf 'service=%q state=%s endpoint=%s\\n' \"$SERVICE_NAME\" \"$STATE\" \"$CLICKHOUSE_ENDPOINT\"\n```\n\n`STATE` must be `running`. If it is `stopped` or `starting`, ask the user to start the service (or\nwait), and do not proceed. ClickHouse Cloud services **idle-suspend**, so even a \"running\" service\ncan be asleep; the next query both checks reachability and wakes it:\n\n```bash\nclickhousectl cloud service query --id \"$SERVICE_ID\" --query \"SELECT version()\"\n```\n\nA successful response confirms the service is awake and that the per-service Query API key is\nprovisioned. On the first call `clickhousectl` prints `Provisioning Query API endpoint + key for\nservice '\u003Cname>'...`, which is expected.\n\n---\n\n## Step 5: Create the `hyperdx_ingest` SQL user and grant it `otel.*`\n\nThis step is the same on both paths: the collector (new or existing) authenticates to ClickHouse\nas `hyperdx_ingest`. Open the shell with the combined load so `$CLICKHOUSE_PASSWORD` (and\ncredentials) are set.\n\n> **Expect an approval prompt here.** The `CREATE USER` \u002F `GRANT` statements below are DDL against\n> a Cloud service, so some agent sandboxes flag them as \"modifying shared production\n> infrastructure\" even when `clickhousectl` is allowlisted. This is expected; the operations are\n> scoped to a single dedicated ingest user and the `otel` schema, and the user should approve them\n> explicitly when prompted.\n\n**Never put the plaintext password in the SQL. Hash it locally and use `sha256_hash`.** Two\nproblems rule out `IDENTIFIED WITH sha256_password BY '$CLICKHOUSE_PASSWORD'`: the secret would\nland in the process arg list (visible in `ps`) and shell history, and, critically, **the Query API\nechoes the failing statement verbatim in its error JSON**, so any error (a transient failure, a\ncharset slip) leaks the password into output an agent may surface. Passing it over stdin does not\nhelp, the error echo still contains it. Instead compute the SHA-256 hash of the password locally\n(`sha256_hash` stores exactly what `sha256_password` would, so the collector still logs in with the\nplaintext from the env file) and put only the **hash** in the statement. A hash is non-reversible,\nso even an echoed error cannot leak the password:\n\n```bash\nWORKDIR=\"${WORKDIR:-$HOME\u002Fclickstack-otel-collector}\"; ENV_FILE=\"$WORKDIR\u002Fcollector.env\"\n[ -f \"$WORKDIR\u002Fcreds.env\" ] && . \"$WORKDIR\u002Fcreds.env\"; set -a; . \"$ENV_FILE\"; set +a\n\n# SHA-256 of the password. openssl is already a dependency; this is portable (macOS + Linux).\n# Only this hash ever reaches SQL, output, or `ps`; the plaintext stays in the env file.\nPW_HASH=$(printf %s \"$CLICKHOUSE_PASSWORD\" | openssl dgst -sha256 | awk '{print $NF}')\n\n# Send statements ONE AT A TIME: the Query API runs over HTTP and rejects multi-statement input\n# (\"Multi-statements are not allowed\"), so a single ; -separated batch fails.\nclickhousectl cloud service query --id \"$SERVICE_ID\" --query \\\n  \"CREATE USER IF NOT EXISTS hyperdx_ingest IDENTIFIED WITH sha256_hash BY '$PW_HASH'\"\n# Re-run safe: force the password to this run's value if the user already existed.\nclickhousectl cloud service query --id \"$SERVICE_ID\" --query \\\n  \"ALTER USER hyperdx_ingest IDENTIFIED WITH sha256_hash BY '$PW_HASH'\"\n```\n\nGrant the least privilege the collector needs to create and write the `otel.*` schema. On the\ncurrent image the schema migrations and their version table also live in `otel`, so `otel.*` is\nsufficient (this statement carries no secret):\n\n```bash\nclickhousectl cloud service query --id \"$SERVICE_ID\" --query \\\n  \"GRANT SELECT, INSERT, CREATE DATABASE, CREATE TABLE, CREATE VIEW ON otel.* TO hyperdx_ingest\"\n```\n\n> **Older image builds:** some earlier collector versions ran their goose migrations against a\n> version table in the `default` database, so startup looped on `ACCESS_DENIED` until `default.*`\n> was also granted. If you see `ACCESS_DENIED` referencing `default` in the collector logs\n> (Step 6), add this and restart the container:\n>\n> ```bash\n> clickhousectl cloud service query --id \"$SERVICE_ID\" --query \\\n>   \"GRANT SELECT, INSERT, CREATE TABLE ON default.* TO hyperdx_ingest\"\n> ```\n\nVerify:\n\n```bash\nclickhousectl cloud service query --id \"$SERVICE_ID\" --query \"SHOW GRANTS FOR hyperdx_ingest\"\n```\n\nYou should see `GRANT SELECT, INSERT, CREATE DATABASE, CREATE TABLE, CREATE VIEW ON otel.* TO\nhyperdx_ingest`.\n\n---\n\n## Step 6: Set up the collector\n\nFollow the sub-section that matches the path and mode you chose in Step 0. All three converge on\nthe same end state: a collector accepting OTLP and writing into the `otel` database on the service.\nEvery code block in this step assumes you have run the **standard preamble** (Step 2) first, so\n`$WORKDIR`, `$ENV_FILE`, `$SERVICE_ID`, and the secrets are set in the shell.\n\nMake sure Docker is running (new-collector path only):\n\n```bash\nWORKDIR=\"${WORKDIR:-$HOME\u002Fclickstack-otel-collector}\"; ENV_FILE=\"$WORKDIR\u002Fcollector.env\"\n[ -f \"$WORKDIR\u002Fcreds.env\" ] && . \"$WORKDIR\u002Fcreds.env\"; set -a; . \"$ENV_FILE\"; set +a\ndocker info > \u002Fdev\u002Fnull\n```\n\n### Step 6a: New collector with Docker Compose (`DEPLOY_MODE=compose`)\n\nWrite a Compose file in the working directory. It reads the same `collector.env` for secrets,\npublishes the OTLP and health ports, and pins a named network so the telemetry generator in Step 7\ncan reach the collector by container name:\n\n```bash\ncat > \"$WORKDIR\u002Fdocker-compose.yaml\" \u003C\u003C'EOF'\nname: clickstack\nservices:\n  otel-collector:\n    image: clickhouse\u002Fclickstack-otel-collector:latest\n    container_name: clickstack-otel-collector\n    env_file: .\u002Fcollector.env\n    ports:\n      - \"4317:4317\"   # OTLP gRPC\n      - \"4318:4318\"   # OTLP HTTP\n      - \"13133:13133\" # health\n    restart: unless-stopped\n    networks: [clickstack-net]\nnetworks:\n  clickstack-net:\n    name: clickstack-net\nEOF\n\n# Compose refuses to adopt a clickstack-net it did not create (a leftover from the docker run\n# path, a prior failed Compose run, or a DEPLOY_MODE switch), failing with \"network clickstack-net\n# was found but has incorrect label\". If an orphan exists with no containers attached, remove it so\n# Compose can recreate it with its own labels.\nif docker network inspect clickstack-net >\u002Fdev\u002Fnull 2>&1 \\\n   && [ -z \"$(docker network inspect clickstack-net -f '{{range .Containers}}{{.Name}} {{end}}')\" ]; then\n  docker network rm clickstack-net\nfi\n\n( cd \"$WORKDIR\" && docker compose up -d )\n```\n\nCompose creates the `clickstack-net` network for you (the guard above clears an orphaned one from a\nprior run first). Skip to **Step 6d** to confirm health.\n\n### Step 6b: New collector with individual Docker commands (`DEPLOY_MODE=run`)\n\nCreate a user-defined network so the telemetry generator in Step 7 can reach the collector by\ncontainer name:\n\n```bash\ndocker network create clickstack-net 2>\u002Fdev\u002Fnull || true\n```\n\nStart the collector, passing **all secrets via `--env-file`** (never `-e`, which would put the\nsecret on the command line, in shell history, and in `ps`). The `docker rm -f` first makes the step\nsafe to re-run:\n\n```bash\ndocker rm -f clickstack-otel-collector 2>\u002Fdev\u002Fnull || true\ndocker run -d \\\n  --name clickstack-otel-collector \\\n  --network clickstack-net \\\n  --env-file \"$ENV_FILE\" \\\n  -p 4317:4317 \\\n  -p 4318:4318 \\\n  -p 13133:13133 \\\n  clickhouse\u002Fclickstack-otel-collector:latest\n```\n\nThe image reads `OTLP_AUTH_TOKEN`, `CLICKHOUSE_ENDPOINT`, `CLICKHOUSE_USER`, `CLICKHOUSE_PASSWORD`,\nand `HYPERDX_OTEL_EXPORTER_CLICKHOUSE_DATABASE` from the env file. It enables bearer-token auth on\nthe OTLP receiver with an empty scheme, so callers send the raw token as the `authorization` header\n(no `Bearer ` prefix). Continue to **Step 6d**.\n\n### Step 6c: Configure your existing collector (`COLLECTOR_PATH=existing`)\n\nAdd the ClickHouse exporter to your existing collector configuration. The config below matches the\nbehavior of the ClickStack distribution, including the Session Replay (`rrweb`) routing path, and\nwrites into the `otel` database the ClickStack UI expects.\n\n**Reference the endpoint and password as environment variables (`${env:…}`), do not hardcode them\ninto the config file.** The contrib collector expands `${env:VAR}` at load time, so keeping the\nplaintext password out of the config file is both safer and consistent with the rest of this skill.\nStart your collector with the env vars available, the simplest way is the same `--env-file` the\nlocal collector uses:\n\n```bash\n# When running the contrib collector in Docker, pass collector.env so ${env:CLICKHOUSE_*} resolve:\n#   docker run -d --env-file \"$ENV_FILE\" -p 4317:4317 -p 4318:4318 \\\n#     -v \"$WORKDIR\u002Fyour-config.yaml:\u002Fetc\u002Fotelcol-contrib\u002Fconfig.yaml:ro\" \\\n#     otel\u002Fopentelemetry-collector-contrib:latest\n# For a non-Docker collector, export CLICKHOUSE_ENDPOINT and CLICKHOUSE_PASSWORD into its\n# environment (e.g. an EnvironmentFile= in the systemd unit) before it starts.\n```\n\nAdd this to your collector config and reload it:\n\n```yaml\nreceivers:\n  otlp\u002Fhyperdx:\n    protocols:\n      grpc:\n        include_metadata: true\n        endpoint: \"0.0.0.0:4317\"\n      http:\n        cors:\n          allowed_origins: [\"*\"]\n          allowed_headers: [\"*\"]\n        include_metadata: true\n        endpoint: \"0.0.0.0:4318\"\n\nprocessors:\n  batch:\n  memory_limiter:\n    limit_mib: 1500\n    spike_limit_mib: 512\n    check_interval: 5s\n\nconnectors:\n  routing\u002Flogs:\n    default_pipelines: [logs\u002Fout-default]\n    error_mode: ignore\n    table:\n      - context: log\n        statement: route() where IsMatch(attributes[\"rr-web.event\"], \".*\")\n        pipelines: [logs\u002Fout-rrweb]\n\nexporters:\n  clickhouse:\n    database: otel\n    endpoint: ${env:CLICKHOUSE_ENDPOINT}\n    username: hyperdx_ingest\n    password: ${env:CLICKHOUSE_PASSWORD}\n    ttl: 720h\n    timeout: 5s\n    retry_on_failure:\n      enabled: true\n      initial_interval: 5s\n      max_interval: 30s\n      max_elapsed_time: 300s\n  clickhouse\u002Frrweb:\n    database: otel\n    endpoint: ${env:CLICKHOUSE_ENDPOINT}\n    username: hyperdx_ingest\n    password: ${env:CLICKHOUSE_PASSWORD}\n    ttl: 720h\n    logs_table_name: hyperdx_sessions\n    timeout: 5s\n    retry_on_failure:\n      enabled: true\n      initial_interval: 5s\n      max_interval: 30s\n      max_elapsed_time: 300s\n\nservice:\n  pipelines:\n    traces:\n      receivers: [otlp\u002Fhyperdx]\n      processors: [memory_limiter, batch]\n      exporters: [clickhouse]\n    metrics:\n      receivers: [otlp\u002Fhyperdx]\n      processors: [memory_limiter, batch]\n      exporters: [clickhouse]\n    logs\u002Fin:\n      receivers: [otlp\u002Fhyperdx]\n      exporters: [routing\u002Flogs]\n    logs\u002Fout-default:\n      receivers: [routing\u002Flogs]\n      processors: [memory_limiter, batch]\n      exporters: [clickhouse]\n    logs\u002Fout-rrweb:\n      receivers: [routing\u002Flogs]\n      processors: [memory_limiter, batch]\n      exporters: [clickhouse\u002Frrweb]\n```\n\nNotes for this path:\n\n- If you use your own distribution, ensure it includes the ClickHouse exporter. The upstream\n  [contrib image](https:\u002F\u002Fgithub.com\u002Fopen-telemetry\u002Fopentelemetry-collector-contrib) already does.\n- Authentication on the OTLP receivers is your existing setup. The `OTLP_AUTH_TOKEN` generated in\n  Step 2 is not used here unless you wire it into your own auth (for example `bearertokenauth`).\n- After reloading, skip the health check below (that is specific to the local container) and go\n  straight to **Step 7** to send a verification burst (point the generator at your own collector's\n  OTLP endpoint).\n\n### Step 6d: Confirm the local collector is healthy (new-collector path)\n\n```bash\ndocker ps --filter name=clickstack-otel-collector --format '{{.Status}}'\ncurl -fsS http:\u002F\u002Flocalhost:13133\u002F && echo\ndocker logs --tail 40 clickstack-otel-collector 2>&1 | tail -40\n```\n\nA healthy start shows the seed migrations running to completion (`[seed] OK ...` lines ending in\n`goose: up to current file version: N`), then `Everything is ready. Begin running and processing\ndata.` (or equivalent), `docker ps` reporting `Up ... (healthy)`, and the health check returning\nHTTP 200. A seed line like `ClickHouse 25.12 \u003C 26.2, falling back to compatibility logs and traces\nschemas` on an older server version is **expected and harmless**, not an error; do not pause on it.\nIf instead the container exits, the cause is almost always in the seed step:\n\n- `code: 516, Authentication failed: password is incorrect` -> `CLICKHOUSE_PASSWORD` is empty or\n  wrong in the env file. The most common slip is storing the password under a different key name\n  (it **must** be `CLICKHOUSE_PASSWORD`), or using a password containing `@ : \u002F ? # %`, which\n  corrupts the migration tool's connection URL.\n- `[HTTP 403]` \u002F `data size should be 0 \u003C \u003Chuge number>` at \"server hello\" -> same root cause: an\n  empty\u002Fwrong password against the HTTPS endpoint.\n- TLS \u002F dial errors -> `CLICKHOUSE_ENDPOINT` is malformed (it must be `https:\u002F\u002F\u003Chost>:8443`, with\n  no `.0` on the port).\n- `ACCESS_DENIED` referencing `default` -> only on older image builds; apply the `default.*` grant\n  from the Step 5 note and restart.\n\n---\n\n## Step 7: Send rich synthetic telemetry and verify ingestion\n\nUse `telemetrygen` (the OpenTelemetry Collector Contrib generator) from its **Docker image**, so\nnothing is installed on the host. Instead of one flat burst, send telemetry across several\n**services**, **severities**, **span statuses**, and **metric types**, so ClickStack's Search,\nService Map, and dashboards have realistic, varied data rather than a single uniform stream.\n\nLoad the env file so the token is available, then reference `$OTLP_AUTH_TOKEN`. The `tg` helper\nbelow **redirects all generator output to a log file** and prints only an exit code, because\n`telemetrygen` echoes its full config, **including the `authorization` header (your OTLP token)**,\nto stdout. Never surface that raw output in the chat. `telemetrygen`'s header syntax requires the\nvalue to be a quoted string: `key=\"value\"`.\n\n```bash\nWORKDIR=\"${WORKDIR:-$HOME\u002Fclickstack-otel-collector}\"; ENV_FILE=\"$WORKDIR\u002Fcollector.env\"\n[ -f \"$WORKDIR\u002Fcreds.env\" ] && . \"$WORKDIR\u002Fcreds.env\"; set -a; . \"$ENV_FILE\"; set +a\n\nTG_IMAGE=ghcr.io\u002Fopen-telemetry\u002Fopentelemetry-collector-contrib\u002Ftelemetrygen:latest\nNET=clickstack-net\nENDPOINT=clickstack-otel-collector:4317\nTG_LOG=\"$WORKDIR\u002Ftelemetrygen.log\"; : > \"$TG_LOG\"\n\ntg() {\n  # usage: tg \u003Clogs|traces|metrics> [extra telemetrygen flags...]\n  # Output (which contains the token in the echoed config) goes to $TG_LOG, never the terminal.\n  local signal=\"$1\"; shift\n  docker run --rm --network \"$NET\" \"$TG_IMAGE\" \"$signal\" \\\n    --otlp-endpoint \"$ENDPOINT\" \\\n    --otlp-insecure \\\n    --otlp-header \"authorization=\\\"$OTLP_AUTH_TOKEN\\\"\" \\\n    --rate 10 --duration 15s \"$@\" >>\"$TG_LOG\" 2>&1\n  echo \"$signal exit=$?\"\n}\n```\n\n> **Existing-collector path:** set `NET` and `ENDPOINT` to reach *your* collector instead. If it\n> runs on this host, use `--network host` style access or point `ENDPOINT` at its published\n> address, and set the `authorization` header (or other auth) to whatever your receiver expects.\n> Everything below is otherwise identical.\n\n**Judge success by exit code and row counts, never by the generator's logs.** Two reasons. First,\nthe log contains your OTLP token (see above), so do not print it. Second, it is noisy and every run\nends with `rpc error: code = Canceled desc = grpc: the client connection is closing` once\n`--duration` elapses, which is **expected shutdown, not a failure**. The `tg` helper already prints\n`\u003Csignal> exit=0` on success. If you must inspect a failure, grep the log for the real signal\nwithout dumping it, for example `grep -c Unauthenticated \"$TG_LOG\"` (a non-zero count plus a\nnon-zero exit means the `authorization` header did not match). Confirm overall success with the row\ncounts in the verification queries below.\n\n**Quote attribute values so the inner double quotes survive the shell.** `telemetrygen` requires\neach attribute as `key=\"value\"` (with literal double quotes), and rejects a bare `key=value` with\n`value should be a string wrapped in double quotes`. If you write `--otlp-attributes\ndeployment.environment=\"production\"`, bash strips the quotes and the container receives\n`deployment.environment=production`, which hard-fails. Wrap the **whole argument in single quotes**\nso the inner double quotes reach the container, exactly as the `tg` helper already does for the\nauth header.\n\nLogs across two services with different severities and bodies, including an error line:\n\n```bash\ntg logs --service checkout --severity-text Info  --severity-number 9 \\\n  --body \"checkout completed\" \\\n  --otlp-attributes 'deployment.environment=\"production\"' \\\n  --telemetry-attributes 'http.method=\"POST\"'\ntg logs --service payment  --severity-text Error --severity-number 17 \\\n  --body \"payment gateway timeout\" \\\n  --otlp-attributes 'deployment.environment=\"production\"' \\\n  --telemetry-attributes 'http.status_code=\"500\"'\n```\n\nTraces with child spans, a healthy service and an erroring one (this is what populates the Service\nMap and the error views):\n\n```bash\ntg traces --service checkout --child-spans 4 --span-duration 120ms --status-code Ok \\\n  --otlp-attributes 'deployment.environment=\"production\"' \\\n  --telemetry-attributes 'http.route=\"\u002Fcart\"'\ntg traces --service payment  --child-spans 3 --span-duration 400ms --status-code Error \\\n  --otlp-attributes 'deployment.environment=\"production\"' \\\n  --telemetry-attributes 'http.route=\"\u002Fcharge\"'\n```\n\nMetrics across the three common types, so dashboards have gauges, counters, and a distribution:\n\n```bash\ntg metrics --service checkout --metric-type Sum\ntg metrics --service checkout --metric-type Gauge\ntg metrics --service payment  --metric-type Histogram\n```\n\n(`--metric-type` accepts `Gauge`, `Sum`, `Histogram`, or `ExponentialHistogram`. Add `--otlp-http`\nwith `--otlp-endpoint clickstack-otel-collector:4318` to exercise the HTTP path instead of gRPC.)\n\nWait ~15 seconds for the collector to flush its batch, then confirm the tables exist:\n\n```bash\nclickhousectl cloud service query --id \"$SERVICE_ID\" --query \\\n  \"SELECT name FROM system.tables WHERE database='otel' ORDER BY name\"\n```\n\nThen confirm rows are landing. Count by `parts.rows`, which is signal-agnostic and avoids\nhard-coding per-signal column names:\n\n```bash\nclickhousectl cloud service query --id \"$SERVICE_ID\" --query \\\n  \"SELECT table, sum(rows) AS rows\n   FROM system.parts\n   WHERE database='otel' AND active\n     AND table IN ('otel_logs','otel_traces',\n                   'otel_metrics_sum','otel_metrics_gauge',\n                   'otel_metrics_histogram','otel_metrics_exponential_histogram',\n                   'otel_metrics_summary')\n   GROUP BY table ORDER BY table\"\n```\n\nYou should see non-zero `rows` for `otel_logs`, `otel_traces`, `otel_metrics_sum`,\n`otel_metrics_gauge`, and `otel_metrics_histogram`. If a signal is missing:\n\n1. Tail the collector logs (`docker logs --tail 50 clickstack-otel-collector`) for export errors.\n2. Confirm the `authorization` header matches `$OTLP_AUTH_TOKEN`: `grep -c Unauthenticated\n   \"$TG_LOG\"` (a non-zero count means a mismatch, the full message is `code = Unauthenticated desc =\n   provided authorization does not match expected scheme or token`). Grep rather than print the\n   log, since it contains the token.\n3. Re-check `CLICKHOUSE_ENDPOINT` has the `https:\u002F\u002F` scheme and `:8443` port.\n4. Some metric kinds flush slowly. Re-run the count after another 30 seconds before declaring\n   failure.\n\nDo not proceed until every expected signal has non-zero rows.\n\n---\n\n## Step 8: Confirm the service is awake, then complete onboarding in ClickStack\n\nRows in ClickHouse are **not** the same as the user seeing telemetry in ClickStack. The ClickStack\nUI requires a one-time onboarding step that auto-detects the data sources, and that step fails if\nthe ClickHouse service has idle-suspended in the meantime.\n\n**First, confirm the service is awake.** Do not skip this; it is the most common reason onboarding\nshows no sources. Run a real query and require it to succeed:\n\n```bash\nclickhousectl cloud service query --id \"$SERVICE_ID\" --query \"SELECT 1\"\n```\n\nIf this returns `1`, the service is awake; continue immediately to the console steps below while it\nstays warm. If it errors or times out, the service was asleep and this call is waking it: wait a\nfew seconds and re-run until it returns `1`. Only proceed once it succeeds.\n\n**Then walk the user through onboarding explicitly.** Do not just say \"done\"; spell out each click,\nbecause the sources only appear after this flow is completed:\n\n1. Go to the [ClickHouse Cloud console](https:\u002F\u002Fconsole.clickhouse.cloud) and open the target\n   service.\n2. In the **left-hand menu, select ClickStack**.\n3. Click through to **Getting Started** and follow the onboarding flow.\n4. **Ignore any prompt that asks you to set up or configure a collector \u002F start ingestion.** You\n   have already done that in the steps above. Skip straight past those screens (click through \u002F\n   \"Next\") to source detection. Re-running the console's collector setup is unnecessary and only\n   causes confusion.\n5. The data sources are **auto-detected**: logs, traces, and metrics for the `otel` database are\n   picked up automatically, and your data appears in the Search and dashboard views.\n\nThe direct link is `https:\u002F\u002Fconsole.clickhouse.cloud\u002Fservices\u002F\u003CSERVICE_ID>\u002Fclickstack` (substitute\n`$SERVICE_ID`).\n\n**If source detection shows nothing**, the service almost certainly idle-suspended between the data\nsend and the console step. Re-run the `SELECT 1` wake query above for the user, then have them\nre-run the detection, rather than leaving them to debug an opaque failure.\n\n---\n\n## Step 9: Summarize and hand off (without echoing secrets)\n\nPrint a summary in roughly this format. Note the token is **referenced, not printed**, the SQL\npassword is not shown at all, and the collector keeps running until the user stops it. Adjust the\n\"how to stop\" line to the deploy mode they chose.\n\n```\n✅ ClickStack is set up and ingesting telemetry for service \u003CSERVICE_NAME> (\u003CSERVICE_ID>).\n   Complete onboarding in the console (Step 8) to auto-detect the sources and see your data.\n\nCollector\n  ▸ New local collector via \u003CDocker Compose | docker run>  (or: configured your existing collector)\n  ▸ Send OTLP gRPC to: localhost:4317\n  ▸ Send OTLP HTTP to: localhost:4318\n  ▸ Health check:      http:\u002F\u002Flocalhost:13133\u002F   (local collector only)\n  ▸ Required header:   authorization: \u003COTLP token>\n       (retrieve with:  grep OTLP_AUTH_TOKEN \u003CWORKDIR>\u002Fcollector.env)\n\nClickHouse target\n  ▸ Endpoint: \u003CCLICKHOUSE_ENDPOINT>\n  ▸ SQL user: hyperdx_ingest   (password in \u003CWORKDIR>\u002Fcollector.env, mode 0600)\n  ▸ Database: otel\n\nFinish in the ClickHouse Cloud console:\n  ▸ Open the service, select ClickStack in the left menu, then Getting Started,\n    and complete onboarding to auto-detect sources.\n  ▸ https:\u002F\u002Fconsole.clickhouse.cloud\u002Fservices\u002F\u003CSERVICE_ID>\u002Fclickstack\n```\n\nThen tell the user, in your own words, that:\n\n1. All secrets live in `\u003CWORKDIR>\u002Fcollector.env` (mode `0600`). Nothing sensitive was pasted into\n   this chat or passed on a `docker run` command line.\n2. The collector keeps running until they stop it. For Compose:\n   `cd \u003CWORKDIR> && docker compose down` stops it, `docker compose up -d` brings it back. For\n   individual Docker: `docker stop clickstack-otel-collector` and `docker start\n   clickstack-otel-collector`.\n3. Any application, SDK, or agent on this host can now send OTLP to `localhost:4317` (gRPC) or\n   `localhost:4318` (HTTP) with the `authorization` header from the env file.\n4. The ClickHouse Cloud service idle-suspends. If ClickStack later shows no recent data, the\n   service may simply be asleep; sending new telemetry or running any query wakes it.\n\n---\n\n## Cleanup (only if the user explicitly asks)\n\n```bash\n# Docker Compose deployment:\n( cd \"$WORKDIR\" && docker compose down )\n\n# Individual Docker deployment:\ndocker rm -f clickstack-otel-collector\ndocker network rm clickstack-net 2>\u002Fdev\u002Fnull || true\n\n# Either deployment, remove the ingest user:\nclickhousectl cloud service query --id \"$SERVICE_ID\" --query \"DROP USER IF EXISTS hyperdx_ingest\"\n\n# Optionally remove the local files once they are no longer needed:\n# rm -f \"$WORKDIR\u002Fcollector.env\" \"$WORKDIR\u002Fsvc.json\" \"$WORKDIR\u002Fdocker-compose.yaml\"\n```\n\nDo **not** drop the `otel` database: it contains telemetry the user may want to retain.\n",{"data":40,"body":44},{"name":4,"description":6,"license":29,"metadata":41},{"author":42,"version":43},"ClickHouse Inc","0.6.0",{"type":45,"children":46},"root",[47,56,78,89,151,156,161,224,260,265,269,276,281,289,325,333,363,414,417,423,428,597,614,634,644,700,705,710,713,719,732,765,1213,1218,1373,1400,1428,1471,1655,1675,1722,1734,1737,1750,1785,1805,1810,1844,1849,1878,1906,1923,2069,2119,2200,2212,2281,2470,2487,2561,2598,2601,2607,2619,2791,2982,3003,3472,3512,3574,3594,3597,3615,3635,3675,3737,4178,4204,4270,4387,4392,4451,4462,4465,4471,4508,4513,4707,4721,4733,5150,5170,5183,5188,5233,5273,5449,5507,5520,5540,5573,5628,5633,7009,7014,7062,7068,7185,7245,7357,7360,7366,7411,7474,8067,8122,8184,8254,8259,8493,8498,8695,8700,8794,8852,8857,8923,8936,9058,9107,9190,9195,9198,9204,9215,9225,9284,9304,9314,9381,9400,9417,9420,9426,9438,9448,9453,9551,9554,9560,9779,9797],{"type":48,"tag":49,"props":50,"children":52},"element","h1",{"id":51},"set-up-an-opentelemetry-collector-for-managed-clickstack",[53],{"type":54,"value":55},"text","Set up an OpenTelemetry collector for Managed ClickStack",{"type":48,"tag":57,"props":58,"children":59},"p",{},[60,62,76],{"type":54,"value":61},"This skill wires an OpenTelemetry collector into a Managed ClickStack service running on\nClickHouse Cloud, sends rich synthetic telemetry through it, and confirms the data is actually\nvisible in ClickStack. It uses ",{"type":48,"tag":63,"props":64,"children":68},"a",{"href":65,"rel":66},"https:\u002F\u002Fclickhouse.com\u002Fdocs\u002Finterfaces\u002Fcli",[67],"nofollow",[69],{"type":48,"tag":70,"props":71,"children":73},"code",{"className":72},[],[74],{"type":54,"value":75},"clickhousectl",{"type":54,"value":77},"\nfor all cloud and SQL operations.",{"type":48,"tag":57,"props":79,"children":80},{},[81,87],{"type":48,"tag":82,"props":83,"children":84},"strong",{},[85],{"type":54,"value":86},"Scope.",{"type":54,"value":88}," This skill supports two paths, chosen in Step 0:",{"type":48,"tag":90,"props":91,"children":92},"ol",{},[93,134],{"type":48,"tag":94,"props":95,"children":96},"li",{},[97,102,104,125,127,132],{"type":48,"tag":82,"props":98,"children":99},{},[100],{"type":54,"value":101},"Deploy a new collector",{"type":54,"value":103}," locally. You can do this ",{"type":48,"tag":82,"props":105,"children":106},{},[107,109,115,117,123],{"type":54,"value":108},"two ways: individual ",{"type":48,"tag":70,"props":110,"children":112},{"className":111},[],[113],{"type":54,"value":114},"docker",{"type":54,"value":116}," commands,\nor a ",{"type":48,"tag":70,"props":118,"children":120},{"className":119},[],[121],{"type":54,"value":122},"docker compose",{"type":54,"value":124}," file",{"type":54,"value":126}," (recommended, fewer commands and one file to start\u002Fstop). Make the\nuser aware of both up front and let them pick in Step 0; do not assume plain ",{"type":48,"tag":70,"props":128,"children":130},{"className":129},[],[131],{"type":54,"value":114},{"type":54,"value":133},". Either\nway runs the ClickStack distribution of the collector, preconfigured for Managed ClickStack.",{"type":48,"tag":94,"props":135,"children":136},{},[137,142,144,149],{"type":48,"tag":82,"props":138,"children":139},{},[140],{"type":54,"value":141},"Configure your own existing collector",{"type":54,"value":143}," by adding the ClickHouse exporter configuration.\nWe give you the exact config to drop in; you reload your collector. Use this if you already\nrun a collector in a ",{"type":48,"tag":82,"props":145,"children":146},{},[147],{"type":54,"value":148},"gateway",{"type":54,"value":150}," role.",{"type":48,"tag":57,"props":152,"children":153},{},[154],{"type":54,"value":155},"A full Kubernetes deployment (Helm, secrets in K8s Secrets) is out of scope here; the config\nwe generate in path 2 can be applied to a collector running anywhere.",{"type":48,"tag":57,"props":157,"children":158},{},[159],{"type":54,"value":160},"The end state is:",{"type":48,"tag":162,"props":163,"children":164},"ul",{},[165,186,199,204],{"type":48,"tag":94,"props":166,"children":167},{},[168,170,176,178,184],{"type":54,"value":169},"A dedicated ",{"type":48,"tag":70,"props":171,"children":173},{"className":172},[],[174],{"type":54,"value":175},"hyperdx_ingest",{"type":54,"value":177}," SQL user on the target service, with exactly the grants the\ncollector needs (it creates the ",{"type":48,"tag":70,"props":179,"children":181},{"className":180},[],[182],{"type":54,"value":183},"otel.*",{"type":54,"value":185}," schema on first write).",{"type":48,"tag":94,"props":187,"children":188},{},[189,191,197],{"type":54,"value":190},"A collector forwarding logs, traces, and metrics into the ",{"type":48,"tag":70,"props":192,"children":194},{"className":193},[],[195],{"type":54,"value":196},"otel",{"type":54,"value":198}," database on the service,\neither the new local ClickStack collector or your existing one.",{"type":48,"tag":94,"props":200,"children":201},{},[202],{"type":54,"value":203},"Rich synthetic telemetry across several services, severities, span statuses, and metric\ntypes, so ClickStack's Search, Service Map, and dashboards have something real to show.",{"type":48,"tag":94,"props":205,"children":206},{},[207,209,214,216,222],{"type":54,"value":208},"The service confirmed ",{"type":48,"tag":82,"props":210,"children":211},{},[212],{"type":54,"value":213},"awake",{"type":54,"value":215},", and the user walked through the ClickStack onboarding in the\nCloud console so they can actually ",{"type":48,"tag":217,"props":218,"children":219},"em",{},[220],{"type":54,"value":221},"see",{"type":54,"value":223}," their data.",{"type":48,"tag":57,"props":225,"children":226},{},[227,229,234,236,242,244,250,252,258],{"type":54,"value":228},"Secrets (the OTLP auth token and the SQL password) are generated locally, written ",{"type":48,"tag":82,"props":230,"children":231},{},[232],{"type":54,"value":233},"once",{"type":54,"value":235}," to a\n",{"type":48,"tag":70,"props":237,"children":239},{"className":238},[],[240],{"type":54,"value":241},"0600",{"type":54,"value":243}," env file, and passed to Docker via ",{"type":48,"tag":70,"props":245,"children":247},{"className":246},[],[248],{"type":54,"value":249},"--env-file",{"type":54,"value":251},". They are never pasted into the chat,\nnever passed with ",{"type":48,"tag":70,"props":253,"children":255},{"className":254},[],[256],{"type":54,"value":257},"docker run -e",{"type":54,"value":259},", and never echoed back after creation.",{"type":48,"tag":57,"props":261,"children":262},{},[263],{"type":54,"value":264},"Follow these steps in order. Each step depends on state established by the previous one.",{"type":48,"tag":266,"props":267,"children":268},"hr",{},[],{"type":48,"tag":270,"props":271,"children":273},"h2",{"id":272},"step-0-choose-your-path",[274],{"type":54,"value":275},"Step 0: Choose your path",{"type":48,"tag":57,"props":277,"children":278},{},[279],{"type":54,"value":280},"Ask the user two short questions before doing anything else, because they determine which later\nsteps run.",{"type":48,"tag":57,"props":282,"children":283},{},[284],{"type":48,"tag":82,"props":285,"children":286},{},[287],{"type":54,"value":288},"Question 1: Do you already have an OpenTelemetry collector running in a gateway role?",{"type":48,"tag":162,"props":290,"children":291},{},[292,309],{"type":48,"tag":94,"props":293,"children":294},{},[295,300,302,307],{"type":48,"tag":82,"props":296,"children":297},{},[298],{"type":54,"value":299},"No, set one up for me.",{"type":54,"value":301}," -> the ",{"type":48,"tag":82,"props":303,"children":304},{},[305],{"type":54,"value":306},"new-collector",{"type":54,"value":308}," path. Continue to Question 2.",{"type":48,"tag":94,"props":310,"children":311},{},[312,317,318,323],{"type":48,"tag":82,"props":313,"children":314},{},[315],{"type":54,"value":316},"Yes, I have one.",{"type":54,"value":301},{"type":48,"tag":82,"props":319,"children":320},{},[321],{"type":54,"value":322},"existing-collector",{"type":54,"value":324}," path. Skip Question 2 (it does not apply),\nand in Step 6 you will configure their collector rather than deploy a new one.",{"type":48,"tag":57,"props":326,"children":327},{},[328],{"type":48,"tag":82,"props":329,"children":330},{},[331],{"type":54,"value":332},"Question 2 (new-collector path only): Run the collector with individual Docker commands, or a\nDocker Compose file?",{"type":48,"tag":162,"props":334,"children":335},{},[336,353],{"type":48,"tag":94,"props":337,"children":338},{},[339,344,346,351],{"type":48,"tag":82,"props":340,"children":341},{},[342],{"type":54,"value":343},"Docker Compose (recommended).",{"type":54,"value":345}," Fewer commands, one file to start and stop, easiest to\nre-run. Best if ",{"type":48,"tag":70,"props":347,"children":349},{"className":348},[],[350],{"type":54,"value":122},{"type":54,"value":352}," is available.",{"type":48,"tag":94,"props":354,"children":355},{},[356,361],{"type":48,"tag":82,"props":357,"children":358},{},[359],{"type":54,"value":360},"Individual Docker commands.",{"type":54,"value":362}," Use if Compose is not installed or you prefer explicit\ncommands.",{"type":48,"tag":57,"props":364,"children":365},{},[366,368,374,376,382,384,390,392,398,399,405,406,412],{"type":54,"value":367},"Record the answers as ",{"type":48,"tag":70,"props":369,"children":371},{"className":370},[],[372],{"type":54,"value":373},"COLLECTOR_PATH",{"type":54,"value":375}," (",{"type":48,"tag":70,"props":377,"children":379},{"className":378},[],[380],{"type":54,"value":381},"new",{"type":54,"value":383}," or ",{"type":48,"tag":70,"props":385,"children":387},{"className":386},[],[388],{"type":54,"value":389},"existing",{"type":54,"value":391},") and, for the new path,\n",{"type":48,"tag":70,"props":393,"children":395},{"className":394},[],[396],{"type":54,"value":397},"DEPLOY_MODE",{"type":54,"value":375},{"type":48,"tag":70,"props":400,"children":402},{"className":401},[],[403],{"type":54,"value":404},"compose",{"type":54,"value":383},{"type":48,"tag":70,"props":407,"children":409},{"className":408},[],[410],{"type":54,"value":411},"run",{"type":54,"value":413},"). Refer back to them in Step 6 and Step 7.",{"type":48,"tag":266,"props":415,"children":416},{},[],{"type":48,"tag":270,"props":418,"children":420},{"id":419},"step-1-batch-the-permissions-up-front",[421],{"type":54,"value":422},"Step 1: Batch the permissions up front",{"type":48,"tag":57,"props":424,"children":425},{},[426],{"type":54,"value":427},"Coding agents prompt for approval the first time they see each shell command. To avoid\ninterrupting the user every few steps, ask them once, up front, to allowlist the command\nprefixes below (the \"always allow for this project \u002F session\" option in their agent). There are\nno destructive operations and nothing targets anything outside this project or their ClickHouse\nCloud service.",{"type":48,"tag":429,"props":430,"children":431},"table",{},[432,456],{"type":48,"tag":433,"props":434,"children":435},"thead",{},[436],{"type":48,"tag":437,"props":438,"children":439},"tr",{},[440,446,451],{"type":48,"tag":441,"props":442,"children":443},"th",{},[444],{"type":54,"value":445},"Command prefix",{"type":48,"tag":441,"props":447,"children":448},{},[449],{"type":54,"value":450},"Used for",{"type":48,"tag":441,"props":452,"children":453},{},[454],{"type":54,"value":455},"Needed when",{"type":48,"tag":457,"props":458,"children":459},"tbody",{},[460,483,504,530,560],{"type":48,"tag":437,"props":461,"children":462},{},[463,473,478],{"type":48,"tag":464,"props":465,"children":466},"td",{},[467],{"type":48,"tag":70,"props":468,"children":470},{"className":469},[],[471],{"type":54,"value":472},"openssl rand …",{"type":48,"tag":464,"props":474,"children":475},{},[476],{"type":54,"value":477},"generate the OTLP token and SQL password",{"type":48,"tag":464,"props":479,"children":480},{},[481],{"type":54,"value":482},"always",{"type":48,"tag":437,"props":484,"children":485},{},[486,495,500],{"type":48,"tag":464,"props":487,"children":488},{},[489],{"type":48,"tag":70,"props":490,"children":492},{"className":491},[],[493],{"type":54,"value":494},"clickhousectl cloud …",{"type":48,"tag":464,"props":496,"children":497},{},[498],{"type":54,"value":499},"auth, resolve the service, run SQL via the Query API",{"type":48,"tag":464,"props":501,"children":502},{},[503],{"type":54,"value":482},{"type":48,"tag":437,"props":505,"children":506},{},[507,516,526],{"type":48,"tag":464,"props":508,"children":509},{},[510],{"type":48,"tag":70,"props":511,"children":513},{"className":512},[],[514],{"type":54,"value":515},"jq …",{"type":48,"tag":464,"props":517,"children":518},{},[519,521],{"type":54,"value":520},"parse JSON from ",{"type":48,"tag":70,"props":522,"children":524},{"className":523},[],[525],{"type":54,"value":75},{"type":48,"tag":464,"props":527,"children":528},{},[529],{"type":54,"value":482},{"type":48,"tag":437,"props":531,"children":532},{},[533,550,555],{"type":48,"tag":464,"props":534,"children":535},{},[536,542,544],{"type":48,"tag":70,"props":537,"children":539},{"className":538},[],[540],{"type":54,"value":541},"docker …",{"type":54,"value":543}," \u002F ",{"type":48,"tag":70,"props":545,"children":547},{"className":546},[],[548],{"type":54,"value":549},"docker compose …",{"type":48,"tag":464,"props":551,"children":552},{},[553],{"type":54,"value":554},"run\u002Finspect the collector and the telemetry generator",{"type":48,"tag":464,"props":556,"children":557},{},[558],{"type":54,"value":559},"new-collector path, and the optional telemetry check",{"type":48,"tag":437,"props":561,"children":562},{},[563,572,592],{"type":48,"tag":464,"props":564,"children":565},{},[566],{"type":48,"tag":70,"props":567,"children":569},{"className":568},[],[570],{"type":54,"value":571},"curl …",{"type":48,"tag":464,"props":573,"children":574},{},[575,577,583,585,590],{"type":54,"value":576},"local health check against ",{"type":48,"tag":70,"props":578,"children":580},{"className":579},[],[581],{"type":54,"value":582},"localhost:13133",{"type":54,"value":584}," (and installing ",{"type":48,"tag":70,"props":586,"children":588},{"className":587},[],[589],{"type":54,"value":75},{"type":54,"value":591}," if missing)",{"type":48,"tag":464,"props":593,"children":594},{},[595],{"type":54,"value":596},"new-collector path",{"type":48,"tag":57,"props":598,"children":599},{},[600,602],{"type":54,"value":601},"Tell the user, in your own words: ",{"type":48,"tag":217,"props":603,"children":604},{},[605,607,612],{"type":54,"value":606},"\"If your agent supports it, choose 'always allow' for each\nof these the first time it asks. The whole run is read-only against your machine except for the\ncollector container, and write operations against ClickHouse are limited to creating the ingest\nuser and the ",{"type":48,"tag":70,"props":608,"children":610},{"className":609},[],[611],{"type":54,"value":196},{"type":54,"value":613}," schema.\"",{"type":48,"tag":57,"props":615,"children":616},{},[617,619,624,626,632],{"type":54,"value":618},"If the user is on the existing-collector path and does not want to run the optional telemetry\ncheck, you can drop ",{"type":48,"tag":70,"props":620,"children":622},{"className":621},[],[623],{"type":54,"value":114},{"type":54,"value":625}," and ",{"type":48,"tag":70,"props":627,"children":629},{"className":628},[],[630],{"type":54,"value":631},"curl",{"type":54,"value":633}," from the list.",{"type":48,"tag":57,"props":635,"children":636},{},[637,642],{"type":48,"tag":82,"props":638,"children":639},{},[640],{"type":54,"value":641},"Two approvals are semantic, not prefix-based, so allowlisting won't pre-clear them.",{"type":54,"value":643}," Warn the\nuser to expect these and approve them explicitly when they appear:",{"type":48,"tag":162,"props":645,"children":646},{},[647,674],{"type":48,"tag":94,"props":648,"children":649},{},[650,652,657,659,665,667,672],{"type":54,"value":651},"The ",{"type":48,"tag":70,"props":653,"children":655},{"className":654},[],[656],{"type":54,"value":75},{"type":54,"value":658}," install in Step 3 uses ",{"type":48,"tag":70,"props":660,"children":662},{"className":661},[],[663],{"type":54,"value":664},"curl … | sh",{"type":54,"value":666},", which many agent sandboxes flag as\n\"downloading and running untrusted code\" regardless of any ",{"type":48,"tag":70,"props":668,"children":670},{"className":669},[],[671],{"type":54,"value":631},{"type":54,"value":673}," allowlist rule.",{"type":48,"tag":94,"props":675,"children":676},{},[677,678,684,685,691,693,698],{"type":54,"value":651},{"type":48,"tag":70,"props":679,"children":681},{"className":680},[],[682],{"type":54,"value":683},"CREATE USER",{"type":54,"value":543},{"type":48,"tag":70,"props":686,"children":688},{"className":687},[],[689],{"type":54,"value":690},"GRANT",{"type":54,"value":692}," in Step 5 may be flagged as \"modifying shared production\ninfrastructure,\" again independent of the ",{"type":48,"tag":70,"props":694,"children":696},{"className":695},[],[697],{"type":54,"value":75},{"type":54,"value":699}," prefix rule.",{"type":48,"tag":57,"props":701,"children":702},{},[703],{"type":54,"value":704},"Neither is solved by the table above; they are one-time, intentional, and safe to approve.",{"type":48,"tag":57,"props":706,"children":707},{},[708],{"type":54,"value":709},"Then continue.",{"type":48,"tag":266,"props":711,"children":712},{},[],{"type":48,"tag":270,"props":714,"children":716},{"id":715},"step-2-confirm-the-target-service-and-lay-down-the-secrets-file",[717],{"type":54,"value":718},"Step 2: Confirm the target service and lay down the secrets file",{"type":48,"tag":57,"props":720,"children":721},{},[722,724,730],{"type":54,"value":723},"The user's prompt contains a service identifier, either a service ID (UUID) or a service name.\nTreat that value as ",{"type":48,"tag":70,"props":725,"children":727},{"className":726},[],[728],{"type":54,"value":729},"SERVICE_REF",{"type":54,"value":731},".",{"type":48,"tag":57,"props":733,"children":734},{},[735,737,747,749,755,757,763],{"type":54,"value":736},"Create a working directory and a ",{"type":48,"tag":82,"props":738,"children":739},{},[740,745],{"type":48,"tag":70,"props":741,"children":743},{"className":742},[],[744],{"type":54,"value":241},{"type":54,"value":746}," env file",{"type":54,"value":748}," that will hold all configuration and\nsecrets for this run. The key names match exactly what the collector image reads, so this same\nfile is passed straight to ",{"type":48,"tag":70,"props":750,"children":752},{"className":751},[],[753],{"type":54,"value":754},"docker run --env-file",{"type":54,"value":756}," (or referenced by Compose) in Step 6. Write\nit under a tight ",{"type":48,"tag":70,"props":758,"children":760},{"className":759},[],[761],{"type":54,"value":762},"umask",{"type":54,"value":764}," so the secret is never briefly world-readable:",{"type":48,"tag":766,"props":767,"children":772},"pre",{"className":768,"code":769,"language":770,"meta":771,"style":771},"language-bash shiki shiki-themes material-theme-lighter material-theme material-theme-palenight","WORKDIR=\"${WORKDIR:-$HOME\u002Fclickstack-otel-collector}\"\nmkdir -p \"$WORKDIR\" && chmod 700 \"$WORKDIR\"\nENV_FILE=\"$WORKDIR\u002Fcollector.env\"\n\n# Generate secrets WITHOUT printing them; write straight into a private file.\n( umask 177\n  {\n    echo \"SERVICE_REF=$SERVICE_REF\"\n    echo \"OTLP_AUTH_TOKEN=$(openssl rand -hex 32)\"\n    echo \"CLICKHOUSE_USER=hyperdx_ingest\"\n    echo \"CLICKHOUSE_PASSWORD=$(openssl rand -hex 24)Aa1-\"\n    echo \"HYPERDX_OTEL_EXPORTER_CLICKHOUSE_DATABASE=otel\"\n  } > \"$ENV_FILE\"\n)\nchmod 600 \"$ENV_FILE\"\nls -l \"$ENV_FILE\"\n","bash","",[773],{"type":48,"tag":70,"props":774,"children":775},{"__ignoreMap":771},[776,827,887,917,927,937,957,966,993,1035,1056,1104,1125,1152,1161,1187],{"type":48,"tag":777,"props":778,"children":781},"span",{"class":779,"line":780},"line",1,[782,788,794,799,803,808,813,818,822],{"type":48,"tag":777,"props":783,"children":785},{"style":784},"--shiki-light:#90A4AE;--shiki-default:#EEFFFF;--shiki-dark:#BABED8",[786],{"type":54,"value":787},"WORKDIR",{"type":48,"tag":777,"props":789,"children":791},{"style":790},"--shiki-light:#39ADB5;--shiki-default:#89DDFF;--shiki-dark:#89DDFF",[792],{"type":54,"value":793},"=",{"type":48,"tag":777,"props":795,"children":796},{"style":790},[797],{"type":54,"value":798},"\"${",{"type":48,"tag":777,"props":800,"children":801},{"style":784},[802],{"type":54,"value":787},{"type":48,"tag":777,"props":804,"children":805},{"style":790},[806],{"type":54,"value":807},":-",{"type":48,"tag":777,"props":809,"children":810},{"style":784},[811],{"type":54,"value":812},"$HOME",{"type":48,"tag":777,"props":814,"children":815},{"style":790},[816],{"type":54,"value":817},"\u002F",{"type":48,"tag":777,"props":819,"children":820},{"style":784},[821],{"type":54,"value":4},{"type":48,"tag":777,"props":823,"children":824},{"style":790},[825],{"type":54,"value":826},"}\"\n",{"type":48,"tag":777,"props":828,"children":830},{"class":779,"line":829},2,[831,837,843,848,853,858,863,868,874,878,882],{"type":48,"tag":777,"props":832,"children":834},{"style":833},"--shiki-light:#E2931D;--shiki-default:#FFCB6B;--shiki-dark:#FFCB6B",[835],{"type":54,"value":836},"mkdir",{"type":48,"tag":777,"props":838,"children":840},{"style":839},"--shiki-light:#91B859;--shiki-default:#C3E88D;--shiki-dark:#C3E88D",[841],{"type":54,"value":842}," -p",{"type":48,"tag":777,"props":844,"children":845},{"style":790},[846],{"type":54,"value":847}," \"",{"type":48,"tag":777,"props":849,"children":850},{"style":784},[851],{"type":54,"value":852},"$WORKDIR",{"type":48,"tag":777,"props":854,"children":855},{"style":790},[856],{"type":54,"value":857},"\"",{"type":48,"tag":777,"props":859,"children":860},{"style":790},[861],{"type":54,"value":862}," &&",{"type":48,"tag":777,"props":864,"children":865},{"style":833},[866],{"type":54,"value":867}," chmod",{"type":48,"tag":777,"props":869,"children":871},{"style":870},"--shiki-light:#F76D47;--shiki-default:#F78C6C;--shiki-dark:#F78C6C",[872],{"type":54,"value":873}," 700",{"type":48,"tag":777,"props":875,"children":876},{"style":790},[877],{"type":54,"value":847},{"type":48,"tag":777,"props":879,"children":880},{"style":784},[881],{"type":54,"value":852},{"type":48,"tag":777,"props":883,"children":884},{"style":790},[885],{"type":54,"value":886},"\"\n",{"type":48,"tag":777,"props":888,"children":890},{"class":779,"line":889},3,[891,896,900,904,908,913],{"type":48,"tag":777,"props":892,"children":893},{"style":784},[894],{"type":54,"value":895},"ENV_FILE",{"type":48,"tag":777,"props":897,"children":898},{"style":790},[899],{"type":54,"value":793},{"type":48,"tag":777,"props":901,"children":902},{"style":790},[903],{"type":54,"value":857},{"type":48,"tag":777,"props":905,"children":906},{"style":784},[907],{"type":54,"value":852},{"type":48,"tag":777,"props":909,"children":910},{"style":839},[911],{"type":54,"value":912},"\u002Fcollector.env",{"type":48,"tag":777,"props":914,"children":915},{"style":790},[916],{"type":54,"value":886},{"type":48,"tag":777,"props":918,"children":920},{"class":779,"line":919},4,[921],{"type":48,"tag":777,"props":922,"children":924},{"emptyLinePlaceholder":923},true,[925],{"type":54,"value":926},"\n",{"type":48,"tag":777,"props":928,"children":930},{"class":779,"line":929},5,[931],{"type":48,"tag":777,"props":932,"children":934},{"style":933},"--shiki-light:#90A4AE;--shiki-light-font-style:italic;--shiki-default:#546E7A;--shiki-default-font-style:italic;--shiki-dark:#676E95;--shiki-dark-font-style:italic",[935],{"type":54,"value":936},"# Generate secrets WITHOUT printing them; write straight into a private file.\n",{"type":48,"tag":777,"props":938,"children":940},{"class":779,"line":939},6,[941,946,952],{"type":48,"tag":777,"props":942,"children":943},{"style":790},[944],{"type":54,"value":945},"(",{"type":48,"tag":777,"props":947,"children":949},{"style":948},"--shiki-light:#6182B8;--shiki-default:#82AAFF;--shiki-dark:#82AAFF",[950],{"type":54,"value":951}," umask",{"type":48,"tag":777,"props":953,"children":954},{"style":870},[955],{"type":54,"value":956}," 177\n",{"type":48,"tag":777,"props":958,"children":960},{"class":779,"line":959},7,[961],{"type":48,"tag":777,"props":962,"children":963},{"style":790},[964],{"type":54,"value":965},"  {\n",{"type":48,"tag":777,"props":967,"children":969},{"class":779,"line":968},8,[970,975,979,984,989],{"type":48,"tag":777,"props":971,"children":972},{"style":948},[973],{"type":54,"value":974},"    echo",{"type":48,"tag":777,"props":976,"children":977},{"style":790},[978],{"type":54,"value":847},{"type":48,"tag":777,"props":980,"children":981},{"style":839},[982],{"type":54,"value":983},"SERVICE_REF=",{"type":48,"tag":777,"props":985,"children":986},{"style":784},[987],{"type":54,"value":988},"$SERVICE_REF",{"type":48,"tag":777,"props":990,"children":991},{"style":790},[992],{"type":54,"value":886},{"type":48,"tag":777,"props":994,"children":996},{"class":779,"line":995},9,[997,1001,1005,1010,1015,1020,1025,1030],{"type":48,"tag":777,"props":998,"children":999},{"style":948},[1000],{"type":54,"value":974},{"type":48,"tag":777,"props":1002,"children":1003},{"style":790},[1004],{"type":54,"value":847},{"type":48,"tag":777,"props":1006,"children":1007},{"style":839},[1008],{"type":54,"value":1009},"OTLP_AUTH_TOKEN=",{"type":48,"tag":777,"props":1011,"children":1012},{"style":790},[1013],{"type":54,"value":1014},"$(",{"type":48,"tag":777,"props":1016,"children":1017},{"style":833},[1018],{"type":54,"value":1019},"openssl",{"type":48,"tag":777,"props":1021,"children":1022},{"style":839},[1023],{"type":54,"value":1024}," rand -hex ",{"type":48,"tag":777,"props":1026,"children":1027},{"style":870},[1028],{"type":54,"value":1029},"32",{"type":48,"tag":777,"props":1031,"children":1032},{"style":790},[1033],{"type":54,"value":1034},")\"\n",{"type":48,"tag":777,"props":1036,"children":1038},{"class":779,"line":1037},10,[1039,1043,1047,1052],{"type":48,"tag":777,"props":1040,"children":1041},{"style":948},[1042],{"type":54,"value":974},{"type":48,"tag":777,"props":1044,"children":1045},{"style":790},[1046],{"type":54,"value":847},{"type":48,"tag":777,"props":1048,"children":1049},{"style":839},[1050],{"type":54,"value":1051},"CLICKHOUSE_USER=hyperdx_ingest",{"type":48,"tag":777,"props":1053,"children":1054},{"style":790},[1055],{"type":54,"value":886},{"type":48,"tag":777,"props":1057,"children":1059},{"class":779,"line":1058},11,[1060,1064,1068,1073,1077,1081,1085,1090,1095,1100],{"type":48,"tag":777,"props":1061,"children":1062},{"style":948},[1063],{"type":54,"value":974},{"type":48,"tag":777,"props":1065,"children":1066},{"style":790},[1067],{"type":54,"value":847},{"type":48,"tag":777,"props":1069,"children":1070},{"style":839},[1071],{"type":54,"value":1072},"CLICKHOUSE_PASSWORD=",{"type":48,"tag":777,"props":1074,"children":1075},{"style":790},[1076],{"type":54,"value":1014},{"type":48,"tag":777,"props":1078,"children":1079},{"style":833},[1080],{"type":54,"value":1019},{"type":48,"tag":777,"props":1082,"children":1083},{"style":839},[1084],{"type":54,"value":1024},{"type":48,"tag":777,"props":1086,"children":1087},{"style":870},[1088],{"type":54,"value":1089},"24",{"type":48,"tag":777,"props":1091,"children":1092},{"style":790},[1093],{"type":54,"value":1094},")",{"type":48,"tag":777,"props":1096,"children":1097},{"style":839},[1098],{"type":54,"value":1099},"Aa1-",{"type":48,"tag":777,"props":1101,"children":1102},{"style":790},[1103],{"type":54,"value":886},{"type":48,"tag":777,"props":1105,"children":1107},{"class":779,"line":1106},12,[1108,1112,1116,1121],{"type":48,"tag":777,"props":1109,"children":1110},{"style":948},[1111],{"type":54,"value":974},{"type":48,"tag":777,"props":1113,"children":1114},{"style":790},[1115],{"type":54,"value":847},{"type":48,"tag":777,"props":1117,"children":1118},{"style":839},[1119],{"type":54,"value":1120},"HYPERDX_OTEL_EXPORTER_CLICKHOUSE_DATABASE=otel",{"type":48,"tag":777,"props":1122,"children":1123},{"style":790},[1124],{"type":54,"value":886},{"type":48,"tag":777,"props":1126,"children":1128},{"class":779,"line":1127},13,[1129,1134,1139,1143,1148],{"type":48,"tag":777,"props":1130,"children":1131},{"style":790},[1132],{"type":54,"value":1133},"  }",{"type":48,"tag":777,"props":1135,"children":1136},{"style":790},[1137],{"type":54,"value":1138}," >",{"type":48,"tag":777,"props":1140,"children":1141},{"style":790},[1142],{"type":54,"value":847},{"type":48,"tag":777,"props":1144,"children":1145},{"style":784},[1146],{"type":54,"value":1147},"$ENV_FILE",{"type":48,"tag":777,"props":1149,"children":1150},{"style":790},[1151],{"type":54,"value":886},{"type":48,"tag":777,"props":1153,"children":1155},{"class":779,"line":1154},14,[1156],{"type":48,"tag":777,"props":1157,"children":1158},{"style":790},[1159],{"type":54,"value":1160},")\n",{"type":48,"tag":777,"props":1162,"children":1164},{"class":779,"line":1163},15,[1165,1170,1175,1179,1183],{"type":48,"tag":777,"props":1166,"children":1167},{"style":833},[1168],{"type":54,"value":1169},"chmod",{"type":48,"tag":777,"props":1171,"children":1172},{"style":870},[1173],{"type":54,"value":1174}," 600",{"type":48,"tag":777,"props":1176,"children":1177},{"style":790},[1178],{"type":54,"value":847},{"type":48,"tag":777,"props":1180,"children":1181},{"style":784},[1182],{"type":54,"value":1147},{"type":48,"tag":777,"props":1184,"children":1185},{"style":790},[1186],{"type":54,"value":886},{"type":48,"tag":777,"props":1188,"children":1190},{"class":779,"line":1189},16,[1191,1196,1201,1205,1209],{"type":48,"tag":777,"props":1192,"children":1193},{"style":833},[1194],{"type":54,"value":1195},"ls",{"type":48,"tag":777,"props":1197,"children":1198},{"style":839},[1199],{"type":54,"value":1200}," -l",{"type":48,"tag":777,"props":1202,"children":1203},{"style":790},[1204],{"type":54,"value":847},{"type":48,"tag":777,"props":1206,"children":1207},{"style":784},[1208],{"type":54,"value":1147},{"type":48,"tag":777,"props":1210,"children":1211},{"style":790},[1212],{"type":54,"value":886},{"type":48,"tag":57,"props":1214,"children":1215},{},[1216],{"type":54,"value":1217},"Two things about these values matter and are easy to get wrong:",{"type":48,"tag":162,"props":1219,"children":1220},{},[1221,1284],{"type":48,"tag":94,"props":1222,"children":1223},{},[1224,1229,1231,1237,1239,1245,1247,1253,1255,1261,1263,1268,1270,1275,1277,1283],{"type":48,"tag":82,"props":1225,"children":1226},{},[1227],{"type":54,"value":1228},"Key names are exact.",{"type":54,"value":1230}," The collector reads ",{"type":48,"tag":70,"props":1232,"children":1234},{"className":1233},[],[1235],{"type":54,"value":1236},"CLICKHOUSE_USER",{"type":54,"value":1238},", ",{"type":48,"tag":70,"props":1240,"children":1242},{"className":1241},[],[1243],{"type":54,"value":1244},"CLICKHOUSE_PASSWORD",{"type":54,"value":1246},",\n",{"type":48,"tag":70,"props":1248,"children":1250},{"className":1249},[],[1251],{"type":54,"value":1252},"CLICKHOUSE_ENDPOINT",{"type":54,"value":1254},", and ",{"type":48,"tag":70,"props":1256,"children":1258},{"className":1257},[],[1259],{"type":54,"value":1260},"HYPERDX_OTEL_EXPORTER_CLICKHOUSE_DATABASE",{"type":54,"value":1262},". Store the SQL password\nunder ",{"type":48,"tag":70,"props":1264,"children":1266},{"className":1265},[],[1267],{"type":54,"value":1244},{"type":54,"value":1269}," (not a custom name); if it is missing, the collector starts with an\n",{"type":48,"tag":82,"props":1271,"children":1272},{},[1273],{"type":54,"value":1274},"empty",{"type":54,"value":1276}," password and dies with ",{"type":48,"tag":70,"props":1278,"children":1280},{"className":1279},[],[1281],{"type":54,"value":1282},"code: 516, Authentication failed",{"type":54,"value":731},{"type":48,"tag":94,"props":1285,"children":1286},{},[1287,1292,1294,1299,1301,1307,1308,1314,1315,1320,1321,1327,1328,1334,1335,1341,1343,1349,1351,1356,1358,1363,1365,1371],{"type":48,"tag":82,"props":1288,"children":1289},{},[1290],{"type":54,"value":1291},"The password charset is constrained from three directions at once.",{"type":54,"value":1293}," ClickHouse Cloud rejects\npasswords without at least one uppercase character and one special character, so a plain hex\nstring fails at ",{"type":48,"tag":70,"props":1295,"children":1297},{"className":1296},[],[1298],{"type":54,"value":683},{"type":54,"value":1300},". At the same time, the collector's migration tool embeds the\npassword in a connection URL, so ",{"type":48,"tag":70,"props":1302,"children":1304},{"className":1303},[],[1305],{"type":54,"value":1306},"@",{"type":54,"value":1238},{"type":48,"tag":70,"props":1309,"children":1311},{"className":1310},[],[1312],{"type":54,"value":1313},":",{"type":54,"value":1238},{"type":48,"tag":70,"props":1316,"children":1318},{"className":1317},[],[1319],{"type":54,"value":817},{"type":54,"value":1238},{"type":48,"tag":70,"props":1322,"children":1324},{"className":1323},[],[1325],{"type":54,"value":1326},"?",{"type":54,"value":1238},{"type":48,"tag":70,"props":1329,"children":1331},{"className":1330},[],[1332],{"type":54,"value":1333},"#",{"type":54,"value":1254},{"type":48,"tag":70,"props":1336,"children":1338},{"className":1337},[],[1339],{"type":54,"value":1340},"%",{"type":54,"value":1342}," corrupt it (symptom:\n",{"type":48,"tag":70,"props":1344,"children":1346},{"className":1345},[],[1347],{"type":54,"value":1348},"code: 516",{"type":54,"value":1350}," at startup even though the password is \"correct\"). The recipe above is random hex\n(lowercase + digits) plus the suffix ",{"type":48,"tag":70,"props":1352,"children":1354},{"className":1353},[],[1355],{"type":54,"value":1099},{"type":54,"value":1357},", which adds the required uppercase, a digit, and a\n",{"type":48,"tag":82,"props":1359,"children":1360},{},[1361],{"type":54,"value":1362},"URL-unreserved",{"type":54,"value":1364}," special character (",{"type":48,"tag":70,"props":1366,"children":1368},{"className":1367},[],[1369],{"type":54,"value":1370},"-",{"type":54,"value":1372},"). The OTLP token has no such rules (it is just a\nbearer token), so plain hex is fine for it.",{"type":48,"tag":57,"props":1374,"children":1375},{},[1376,1378,1391,1393,1398],{"type":54,"value":1377},"The env file uses ",{"type":48,"tag":82,"props":1379,"children":1380},{},[1381,1383,1389],{"type":54,"value":1382},"bare ",{"type":48,"tag":70,"props":1384,"children":1386},{"className":1385},[],[1387],{"type":54,"value":1388},"KEY=VALUE",{"type":54,"value":1390}," lines with no quotes",{"type":54,"value":1392},": Docker's ",{"type":48,"tag":70,"props":1394,"children":1396},{"className":1395},[],[1397],{"type":54,"value":249},{"type":54,"value":1399}," does not do\nshell parsing, so any quotes you add become part of the value.",{"type":48,"tag":57,"props":1401,"children":1402},{},[1403,1405,1410,1412,1418,1420,1426],{"type":54,"value":1404},"On the ",{"type":48,"tag":82,"props":1406,"children":1407},{},[1408],{"type":54,"value":1409},"existing-collector path",{"type":54,"value":1411}," the ",{"type":48,"tag":70,"props":1413,"children":1415},{"className":1414},[],[1416],{"type":54,"value":1417},"OTLP_AUTH_TOKEN",{"type":54,"value":1419}," is not used by your collector (auth on\nyour receiver is your own setup); it is generated only so the same file works if you later switch\nto the local collector. The ",{"type":48,"tag":70,"props":1421,"children":1423},{"className":1422},[],[1424],{"type":54,"value":1425},"CLICKHOUSE_*",{"type":54,"value":1427}," values are still used: they go into the exporter\nconfig you add to your collector in Step 6.",{"type":48,"tag":57,"props":1429,"children":1430},{},[1431,1462,1464,1469],{"type":48,"tag":82,"props":1432,"children":1433},{},[1434,1436,1441,1442,1447,1449,1454,1455,1460],{"type":54,"value":1435},"Every later step runs in a fresh shell, so ",{"type":48,"tag":70,"props":1437,"children":1439},{"className":1438},[],[1440],{"type":54,"value":787},{"type":54,"value":1238},{"type":48,"tag":70,"props":1443,"children":1445},{"className":1444},[],[1446],{"type":54,"value":895},{"type":54,"value":1448},", and any exported credentials do\nnot persist, and ",{"type":48,"tag":70,"props":1450,"children":1452},{"className":1451},[],[1453],{"type":54,"value":787},{"type":54,"value":817},{"type":48,"tag":70,"props":1456,"children":1458},{"className":1457},[],[1459],{"type":54,"value":895},{"type":54,"value":1461}," are not stored inside the env file, so sourcing it can't\nrecover them.",{"type":54,"value":1463}," Begin each subsequent step's shell with this ",{"type":48,"tag":82,"props":1465,"children":1466},{},[1467],{"type":54,"value":1468},"standard preamble",{"type":54,"value":1470},", which\nre-derives the paths from the deterministic default, loads the saved credentials (Step 3), and\nloads the config:",{"type":48,"tag":766,"props":1472,"children":1474},{"className":768,"code":1473,"language":770,"meta":771,"style":771},"WORKDIR=\"${WORKDIR:-$HOME\u002Fclickstack-otel-collector}\"; ENV_FILE=\"$WORKDIR\u002Fcollector.env\"\n[ -f \"$WORKDIR\u002Fcreds.env\" ] && . \"$WORKDIR\u002Fcreds.env\"; set -a; . \"$ENV_FILE\"; set +a\n",[1475],{"type":48,"tag":70,"props":1476,"children":1477},{"__ignoreMap":771},[1478,1548],{"type":48,"tag":777,"props":1479,"children":1480},{"class":779,"line":780},[1481,1485,1489,1493,1497,1501,1505,1509,1513,1518,1523,1528,1532,1536,1540,1544],{"type":48,"tag":777,"props":1482,"children":1483},{"style":784},[1484],{"type":54,"value":787},{"type":48,"tag":777,"props":1486,"children":1487},{"style":790},[1488],{"type":54,"value":793},{"type":48,"tag":777,"props":1490,"children":1491},{"style":790},[1492],{"type":54,"value":798},{"type":48,"tag":777,"props":1494,"children":1495},{"style":784},[1496],{"type":54,"value":787},{"type":48,"tag":777,"props":1498,"children":1499},{"style":790},[1500],{"type":54,"value":807},{"type":48,"tag":777,"props":1502,"children":1503},{"style":784},[1504],{"type":54,"value":812},{"type":48,"tag":777,"props":1506,"children":1507},{"style":790},[1508],{"type":54,"value":817},{"type":48,"tag":777,"props":1510,"children":1511},{"style":784},[1512],{"type":54,"value":4},{"type":48,"tag":777,"props":1514,"children":1515},{"style":790},[1516],{"type":54,"value":1517},"}\"",{"type":48,"tag":777,"props":1519,"children":1520},{"style":790},[1521],{"type":54,"value":1522},";",{"type":48,"tag":777,"props":1524,"children":1525},{"style":784},[1526],{"type":54,"value":1527}," ENV_FILE",{"type":48,"tag":777,"props":1529,"children":1530},{"style":790},[1531],{"type":54,"value":793},{"type":48,"tag":777,"props":1533,"children":1534},{"style":790},[1535],{"type":54,"value":857},{"type":48,"tag":777,"props":1537,"children":1538},{"style":784},[1539],{"type":54,"value":852},{"type":48,"tag":777,"props":1541,"children":1542},{"style":839},[1543],{"type":54,"value":912},{"type":48,"tag":777,"props":1545,"children":1546},{"style":790},[1547],{"type":54,"value":886},{"type":48,"tag":777,"props":1549,"children":1550},{"class":779,"line":829},[1551,1556,1561,1565,1569,1574,1578,1583,1587,1592,1596,1600,1604,1608,1612,1617,1622,1626,1630,1634,1638,1642,1646,1650],{"type":48,"tag":777,"props":1552,"children":1553},{"style":790},[1554],{"type":54,"value":1555},"[",{"type":48,"tag":777,"props":1557,"children":1558},{"style":790},[1559],{"type":54,"value":1560}," -f",{"type":48,"tag":777,"props":1562,"children":1563},{"style":790},[1564],{"type":54,"value":847},{"type":48,"tag":777,"props":1566,"children":1567},{"style":784},[1568],{"type":54,"value":852},{"type":48,"tag":777,"props":1570,"children":1571},{"style":839},[1572],{"type":54,"value":1573},"\u002Fcreds.env",{"type":48,"tag":777,"props":1575,"children":1576},{"style":790},[1577],{"type":54,"value":857},{"type":48,"tag":777,"props":1579,"children":1580},{"style":790},[1581],{"type":54,"value":1582}," ]",{"type":48,"tag":777,"props":1584,"children":1585},{"style":790},[1586],{"type":54,"value":862},{"type":48,"tag":777,"props":1588,"children":1589},{"style":948},[1590],{"type":54,"value":1591}," .",{"type":48,"tag":777,"props":1593,"children":1594},{"style":790},[1595],{"type":54,"value":847},{"type":48,"tag":777,"props":1597,"children":1598},{"style":784},[1599],{"type":54,"value":852},{"type":48,"tag":777,"props":1601,"children":1602},{"style":839},[1603],{"type":54,"value":1573},{"type":48,"tag":777,"props":1605,"children":1606},{"style":790},[1607],{"type":54,"value":857},{"type":48,"tag":777,"props":1609,"children":1610},{"style":790},[1611],{"type":54,"value":1522},{"type":48,"tag":777,"props":1613,"children":1614},{"style":948},[1615],{"type":54,"value":1616}," set",{"type":48,"tag":777,"props":1618,"children":1619},{"style":839},[1620],{"type":54,"value":1621}," -a",{"type":48,"tag":777,"props":1623,"children":1624},{"style":790},[1625],{"type":54,"value":1522},{"type":48,"tag":777,"props":1627,"children":1628},{"style":948},[1629],{"type":54,"value":1591},{"type":48,"tag":777,"props":1631,"children":1632},{"style":790},[1633],{"type":54,"value":847},{"type":48,"tag":777,"props":1635,"children":1636},{"style":784},[1637],{"type":54,"value":1147},{"type":48,"tag":777,"props":1639,"children":1640},{"style":790},[1641],{"type":54,"value":857},{"type":48,"tag":777,"props":1643,"children":1644},{"style":790},[1645],{"type":54,"value":1522},{"type":48,"tag":777,"props":1647,"children":1648},{"style":948},[1649],{"type":54,"value":1616},{"type":48,"tag":777,"props":1651,"children":1652},{"style":839},[1653],{"type":54,"value":1654}," +a\n",{"type":48,"tag":57,"props":1656,"children":1657},{},[1658,1660,1665,1667,1673],{"type":54,"value":1659},"If you chose a non-default ",{"type":48,"tag":70,"props":1661,"children":1663},{"className":1662},[],[1664],{"type":54,"value":787},{"type":54,"value":1666},", set it explicitly at the top of every step (the ",{"type":48,"tag":70,"props":1668,"children":1670},{"className":1669},[],[1671],{"type":54,"value":1672},"${WORKDIR:-…}",{"type":54,"value":1674},"\ndefault only covers the standard location). Later steps refer to this as \"the standard preamble\".",{"type":48,"tag":57,"props":1676,"children":1677},{},[1678,1683,1685,1690,1692,1698,1700,1705,1707,1712,1714,1720],{"type":48,"tag":82,"props":1679,"children":1680},{},[1681],{"type":54,"value":1682},"Confirm with the user",{"type":54,"value":1684}," that ",{"type":48,"tag":70,"props":1686,"children":1688},{"className":1687},[],[1689],{"type":54,"value":729},{"type":54,"value":1691}," is correct. Tell them the working directory and that\n",{"type":48,"tag":70,"props":1693,"children":1695},{"className":1694},[],[1696],{"type":54,"value":1697},"collector.env",{"type":54,"value":1699}," (mode ",{"type":48,"tag":70,"props":1701,"children":1703},{"className":1702},[],[1704],{"type":54,"value":241},{"type":54,"value":1706},") now holds the OTLP token and the SQL password. Do ",{"type":48,"tag":82,"props":1708,"children":1709},{},[1710],{"type":54,"value":1711},"not",{"type":54,"value":1713}," print\neither secret. If they want to see a value, point them at the file\n(",{"type":48,"tag":70,"props":1715,"children":1717},{"className":1716},[],[1718],{"type":54,"value":1719},"grep OTLP_AUTH_TOKEN \"$ENV_FILE\"",{"type":54,"value":1721},").",{"type":48,"tag":57,"props":1723,"children":1724},{},[1725,1727,1732],{"type":54,"value":1726},"If the user supplied their own token or password, write those into the file instead of the\ngenerated ones, but keep the same ",{"type":48,"tag":70,"props":1728,"children":1730},{"className":1729},[],[1731],{"type":54,"value":241},{"type":54,"value":1733}," discipline and make sure any custom password still meets\nthe charset rules above.",{"type":48,"tag":266,"props":1735,"children":1736},{},[],{"type":48,"tag":270,"props":1738,"children":1740},{"id":1739},"step-3-authenticate-clickhousectl-separate-terminal-by-default",[1741,1743,1748],{"type":54,"value":1742},"Step 3: Authenticate ",{"type":48,"tag":70,"props":1744,"children":1746},{"className":1745},[],[1747],{"type":54,"value":75},{"type":54,"value":1749}," (separate terminal by default)",{"type":48,"tag":57,"props":1751,"children":1752},{},[1753,1755,1760,1762,1768,1770,1775,1777,1783],{"type":54,"value":1754},"Check ",{"type":48,"tag":70,"props":1756,"children":1758},{"className":1757},[],[1759],{"type":54,"value":75},{"type":54,"value":1761}," is on ",{"type":48,"tag":70,"props":1763,"children":1765},{"className":1764},[],[1766],{"type":54,"value":1767},"PATH",{"type":54,"value":1769},". Run this presence check ",{"type":48,"tag":82,"props":1771,"children":1772},{},[1773],{"type":54,"value":1774},"on its own",{"type":54,"value":1776},", not chained to the\ninstaller: the ",{"type":48,"tag":70,"props":1778,"children":1780},{"className":1779},[],[1781],{"type":54,"value":1782},"|| curl … | sh",{"type":54,"value":1784}," form drags a harmless check into a compound command that sandboxes\ndeny wholesale as an untrusted-code download.",{"type":48,"tag":766,"props":1786,"children":1788},{"className":768,"code":1787,"language":770,"meta":771,"style":771},"which clickhousectl\n",[1789],{"type":48,"tag":70,"props":1790,"children":1791},{"__ignoreMap":771},[1792],{"type":48,"tag":777,"props":1793,"children":1794},{"class":779,"line":780},[1795,1800],{"type":48,"tag":777,"props":1796,"children":1797},{"style":948},[1798],{"type":54,"value":1799},"which",{"type":48,"tag":777,"props":1801,"children":1802},{"style":839},[1803],{"type":54,"value":1804}," clickhousectl\n",{"type":48,"tag":57,"props":1806,"children":1807},{},[1808],{"type":54,"value":1809},"Only if that prints nothing, install it (the user may need to approve this explicitly, see Step 1):",{"type":48,"tag":766,"props":1811,"children":1813},{"className":768,"code":1812,"language":770,"meta":771,"style":771},"curl -fsSL https:\u002F\u002Fclickhouse.com\u002Fcli | sh\n",[1814],{"type":48,"tag":70,"props":1815,"children":1816},{"__ignoreMap":771},[1817],{"type":48,"tag":777,"props":1818,"children":1819},{"class":779,"line":780},[1820,1824,1829,1834,1839],{"type":48,"tag":777,"props":1821,"children":1822},{"style":833},[1823],{"type":54,"value":631},{"type":48,"tag":777,"props":1825,"children":1826},{"style":839},[1827],{"type":54,"value":1828}," -fsSL",{"type":48,"tag":777,"props":1830,"children":1831},{"style":839},[1832],{"type":54,"value":1833}," https:\u002F\u002Fclickhouse.com\u002Fcli",{"type":48,"tag":777,"props":1835,"children":1836},{"style":790},[1837],{"type":54,"value":1838}," |",{"type":48,"tag":777,"props":1840,"children":1841},{"style":833},[1842],{"type":54,"value":1843}," sh\n",{"type":48,"tag":57,"props":1845,"children":1846},{},[1847],{"type":54,"value":1848},"Check authentication:",{"type":48,"tag":766,"props":1850,"children":1852},{"className":768,"code":1851,"language":770,"meta":771,"style":771},"clickhousectl cloud auth status\n",[1853],{"type":48,"tag":70,"props":1854,"children":1855},{"__ignoreMap":771},[1856],{"type":48,"tag":777,"props":1857,"children":1858},{"class":779,"line":780},[1859,1863,1868,1873],{"type":48,"tag":777,"props":1860,"children":1861},{"style":833},[1862],{"type":54,"value":75},{"type":48,"tag":777,"props":1864,"children":1865},{"style":839},[1866],{"type":54,"value":1867}," cloud",{"type":48,"tag":777,"props":1869,"children":1870},{"style":839},[1871],{"type":54,"value":1872}," auth",{"type":48,"tag":777,"props":1874,"children":1875},{"style":839},[1876],{"type":54,"value":1877}," status\n",{"type":48,"tag":57,"props":1879,"children":1880},{},[1881,1883,1888,1890,1896,1898,1904],{"type":54,"value":1882},"This skill needs ",{"type":48,"tag":82,"props":1884,"children":1885},{},[1886],{"type":54,"value":1887},"API key authentication",{"type":54,"value":1889},": OAuth is read-only and cannot create users or run\nwrite queries. If the ",{"type":48,"tag":70,"props":1891,"children":1893},{"className":1892},[],[1894],{"type":54,"value":1895},"API key",{"type":54,"value":1897}," row is not ",{"type":48,"tag":70,"props":1899,"children":1901},{"className":1900},[],[1902],{"type":54,"value":1903},"Active",{"type":54,"value":1905},", the user must authenticate.",{"type":48,"tag":57,"props":1907,"children":1908},{},[1909,1914,1916,1921],{"type":48,"tag":82,"props":1910,"children":1911},{},[1912],{"type":54,"value":1913},"Do not ask the user to paste their API key and secret into the chat.",{"type":54,"value":1915}," Anything pasted into the\nconversation lives in the transcript and has to be rotated afterward. Instead, ask them to\nauthenticate in a ",{"type":48,"tag":82,"props":1917,"children":1918},{},[1919],{"type":54,"value":1920},"separate terminal",{"type":54,"value":1922},", then tell you when they are done:",{"type":48,"tag":1924,"props":1925,"children":1926},"blockquote",{},[1927,1939],{"type":48,"tag":57,"props":1928,"children":1929},{},[1930,1932,1937],{"type":54,"value":1931},"I need a ClickHouse Cloud ",{"type":48,"tag":82,"props":1933,"children":1934},{},[1935],{"type":54,"value":1936},"Admin",{"type":54,"value":1938}," API key to create the ingest user and verify the data.\nPlease don't paste it here. Instead:",{"type":48,"tag":90,"props":1940,"children":1941},{},[1942,1977,2064],{"type":48,"tag":94,"props":1943,"children":1944},{},[1945,1947,1954,1956,1961,1963,1967,1969,1975],{"type":54,"value":1946},"In the ",{"type":48,"tag":63,"props":1948,"children":1951},{"href":1949,"rel":1950},"https:\u002F\u002Fconsole.clickhouse.cloud",[67],[1952],{"type":54,"value":1953},"Cloud console",{"type":54,"value":1955},", open ",{"type":48,"tag":82,"props":1957,"children":1958},{},[1959],{"type":54,"value":1960},"Organization → API keys\n→ New API key",{"type":54,"value":1962},", and give it the ",{"type":48,"tag":82,"props":1964,"children":1965},{},[1966],{"type":54,"value":1936},{"type":54,"value":1968}," role. (Developer-scoped keys can't provision the\nper-service Query API endpoint that ",{"type":48,"tag":70,"props":1970,"children":1972},{"className":1971},[],[1973],{"type":54,"value":1974},"cloud service query",{"type":54,"value":1976}," uses.)",{"type":48,"tag":94,"props":1978,"children":1979},{},[1980,1982,1986,1988],{"type":54,"value":1981},"In a ",{"type":48,"tag":82,"props":1983,"children":1984},{},[1985],{"type":54,"value":1920},{"type":54,"value":1987},", run:",{"type":48,"tag":766,"props":1989,"children":1991},{"className":768,"code":1990,"language":770,"meta":771,"style":771},"clickhousectl cloud auth login --api-key \u003Ckey-id> --api-secret \u003Ckey-secret>\n",[1992],{"type":48,"tag":70,"props":1993,"children":1994},{"__ignoreMap":771},[1995],{"type":48,"tag":777,"props":1996,"children":1997},{"class":779,"line":780},[1998,2002,2006,2010,2015,2020,2025,2030,2035,2040,2045,2049,2054,2059],{"type":48,"tag":777,"props":1999,"children":2000},{"style":833},[2001],{"type":54,"value":75},{"type":48,"tag":777,"props":2003,"children":2004},{"style":839},[2005],{"type":54,"value":1867},{"type":48,"tag":777,"props":2007,"children":2008},{"style":839},[2009],{"type":54,"value":1872},{"type":48,"tag":777,"props":2011,"children":2012},{"style":839},[2013],{"type":54,"value":2014}," login",{"type":48,"tag":777,"props":2016,"children":2017},{"style":839},[2018],{"type":54,"value":2019}," --api-key",{"type":48,"tag":777,"props":2021,"children":2022},{"style":790},[2023],{"type":54,"value":2024}," \u003C",{"type":48,"tag":777,"props":2026,"children":2027},{"style":839},[2028],{"type":54,"value":2029},"key-i",{"type":48,"tag":777,"props":2031,"children":2032},{"style":784},[2033],{"type":54,"value":2034},"d",{"type":48,"tag":777,"props":2036,"children":2037},{"style":790},[2038],{"type":54,"value":2039},">",{"type":48,"tag":777,"props":2041,"children":2042},{"style":839},[2043],{"type":54,"value":2044}," --api-secret",{"type":48,"tag":777,"props":2046,"children":2047},{"style":790},[2048],{"type":54,"value":2024},{"type":48,"tag":777,"props":2050,"children":2051},{"style":839},[2052],{"type":54,"value":2053},"key-secre",{"type":48,"tag":777,"props":2055,"children":2056},{"style":784},[2057],{"type":54,"value":2058},"t",{"type":48,"tag":777,"props":2060,"children":2061},{"style":790},[2062],{"type":54,"value":2063},">\n",{"type":48,"tag":94,"props":2065,"children":2066},{},[2067],{"type":54,"value":2068},"Tell me when that's done and I'll re-check the auth status.",{"type":48,"tag":57,"props":2070,"children":2071},{},[2072,2074,2079,2081,2086,2088,2093,2095,2101,2103,2109,2111,2117],{"type":54,"value":2073},"Poll until the API key row reports ",{"type":48,"tag":70,"props":2075,"children":2077},{"className":2076},[],[2078],{"type":54,"value":1903},{"type":54,"value":2080},", then confirm with a real privileged call rather than\ntrusting the status table alone. Use a ",{"type":48,"tag":82,"props":2082,"children":2083},{},[2084],{"type":54,"value":2085},"ref-agnostic",{"type":54,"value":2087}," call here: ",{"type":48,"tag":70,"props":2089,"children":2091},{"className":2090},[],[2092],{"type":54,"value":729},{"type":54,"value":2094}," may be a name, and\n",{"type":48,"tag":70,"props":2096,"children":2098},{"className":2097},[],[2099],{"type":54,"value":2100},"cloud service get",{"type":54,"value":2102}," only accepts a UUID, so confirming with ",{"type":48,"tag":70,"props":2104,"children":2106},{"className":2105},[],[2107],{"type":54,"value":2108},"get",{"type":54,"value":2110}," would fail on a name for reasons\nunrelated to auth. ",{"type":48,"tag":70,"props":2112,"children":2114},{"className":2113},[],[2115],{"type":54,"value":2116},"cloud service list",{"type":54,"value":2118}," needs no ref and proves the API key works:",{"type":48,"tag":766,"props":2120,"children":2122},{"className":768,"code":2121,"language":770,"meta":771,"style":771},"clickhousectl cloud auth status\nclickhousectl cloud service list --json | jq -r '.[].name'\n",[2123],{"type":48,"tag":70,"props":2124,"children":2125},{"__ignoreMap":771},[2126,2145],{"type":48,"tag":777,"props":2127,"children":2128},{"class":779,"line":780},[2129,2133,2137,2141],{"type":48,"tag":777,"props":2130,"children":2131},{"style":833},[2132],{"type":54,"value":75},{"type":48,"tag":777,"props":2134,"children":2135},{"style":839},[2136],{"type":54,"value":1867},{"type":48,"tag":777,"props":2138,"children":2139},{"style":839},[2140],{"type":54,"value":1872},{"type":48,"tag":777,"props":2142,"children":2143},{"style":839},[2144],{"type":54,"value":1877},{"type":48,"tag":777,"props":2146,"children":2147},{"class":779,"line":829},[2148,2152,2156,2161,2166,2171,2175,2180,2185,2190,2195],{"type":48,"tag":777,"props":2149,"children":2150},{"style":833},[2151],{"type":54,"value":75},{"type":48,"tag":777,"props":2153,"children":2154},{"style":839},[2155],{"type":54,"value":1867},{"type":48,"tag":777,"props":2157,"children":2158},{"style":839},[2159],{"type":54,"value":2160}," service",{"type":48,"tag":777,"props":2162,"children":2163},{"style":839},[2164],{"type":54,"value":2165}," list",{"type":48,"tag":777,"props":2167,"children":2168},{"style":839},[2169],{"type":54,"value":2170}," --json",{"type":48,"tag":777,"props":2172,"children":2173},{"style":790},[2174],{"type":54,"value":1838},{"type":48,"tag":777,"props":2176,"children":2177},{"style":833},[2178],{"type":54,"value":2179}," jq",{"type":48,"tag":777,"props":2181,"children":2182},{"style":839},[2183],{"type":54,"value":2184}," -r",{"type":48,"tag":777,"props":2186,"children":2187},{"style":790},[2188],{"type":54,"value":2189}," '",{"type":48,"tag":777,"props":2191,"children":2192},{"style":839},[2193],{"type":54,"value":2194},".[].name",{"type":48,"tag":777,"props":2196,"children":2197},{"style":790},[2198],{"type":54,"value":2199},"'\n",{"type":48,"tag":57,"props":2201,"children":2202},{},[2203,2205,2210],{"type":54,"value":2204},"If the list returns your services, you are authenticated; continue. The actual name-or-UUID\nresolution of ",{"type":48,"tag":70,"props":2206,"children":2208},{"className":2207},[],[2209],{"type":54,"value":729},{"type":54,"value":2211}," happens in Step 4.",{"type":48,"tag":57,"props":2213,"children":2214},{},[2215,2220,2222,2227,2229,2235,2237,2242,2244,2249,2251,2257,2259,2264,2266,2271,2273,2279],{"type":48,"tag":82,"props":2216,"children":2217},{},[2218],{"type":54,"value":2219},"Expect to need the env-var credentials (common, not an edge case).",{"type":54,"value":2221}," Many ",{"type":48,"tag":70,"props":2223,"children":2225},{"className":2224},[],[2226],{"type":54,"value":75},{"type":54,"value":2228}," builds\nsave the credentials file but a freshly spawned shell (such as the one your tool calls run in)\ndoesn't read it, so ",{"type":48,"tag":70,"props":2230,"children":2232},{"className":2231},[],[2233],{"type":54,"value":2234},"auth status",{"type":54,"value":2236}," shows ",{"type":48,"tag":70,"props":2238,"children":2240},{"className":2239},[],[2241],{"type":54,"value":1903},{"type":54,"value":2243}," yet the very next ",{"type":48,"tag":70,"props":2245,"children":2247},{"className":2246},[],[2248],{"type":54,"value":75},{"type":54,"value":2250}," call reports\n",{"type":48,"tag":70,"props":2252,"children":2254},{"className":2253},[],[2255],{"type":54,"value":2256},"No credentials found",{"type":54,"value":2258},". Rather than treat this as a rare fallback, write a small ",{"type":48,"tag":82,"props":2260,"children":2261},{},[2262],{"type":54,"value":2263},"sourceable\ncreds file",{"type":54,"value":2265}," once, then load it in every later shell. This keeps each subsequent shell to a single\n",{"type":48,"tag":70,"props":2267,"children":2269},{"className":2268},[],[2270],{"type":54,"value":731},{"type":54,"value":2272}," line instead of two ",{"type":48,"tag":70,"props":2274,"children":2276},{"className":2275},[],[2277],{"type":54,"value":2278},"jq",{"type":54,"value":2280}," re-derivations, and keeps the secret out of the chat:",{"type":48,"tag":766,"props":2282,"children":2284},{"className":768,"code":2283,"language":770,"meta":771,"style":771},"# Write a private, sourceable creds file next to collector.env.\n( umask 177\n  { echo \"export CLICKHOUSE_CLOUD_API_KEY=$(jq -r .api_key    \"$HOME\u002F.clickhouse\u002Fcredentials.json\")\"\n    echo \"export CLICKHOUSE_CLOUD_API_SECRET=$(jq -r .api_secret \"$HOME\u002F.clickhouse\u002Fcredentials.json\")\"\n  } > \"$WORKDIR\u002Fcreds.env\"\n)\nchmod 600 \"$WORKDIR\u002Fcreds.env\"\n",[2285],{"type":48,"tag":70,"props":2286,"children":2287},{"__ignoreMap":771},[2288,2296,2311,2364,2409,2436,2443],{"type":48,"tag":777,"props":2289,"children":2290},{"class":779,"line":780},[2291],{"type":48,"tag":777,"props":2292,"children":2293},{"style":933},[2294],{"type":54,"value":2295},"# Write a private, sourceable creds file next to collector.env.\n",{"type":48,"tag":777,"props":2297,"children":2298},{"class":779,"line":829},[2299,2303,2307],{"type":48,"tag":777,"props":2300,"children":2301},{"style":790},[2302],{"type":54,"value":945},{"type":48,"tag":777,"props":2304,"children":2305},{"style":948},[2306],{"type":54,"value":951},{"type":48,"tag":777,"props":2308,"children":2309},{"style":870},[2310],{"type":54,"value":956},{"type":48,"tag":777,"props":2312,"children":2313},{"class":779,"line":889},[2314,2319,2324,2328,2333,2337,2341,2346,2350,2354,2359],{"type":48,"tag":777,"props":2315,"children":2316},{"style":790},[2317],{"type":54,"value":2318},"  {",{"type":48,"tag":777,"props":2320,"children":2321},{"style":948},[2322],{"type":54,"value":2323}," echo",{"type":48,"tag":777,"props":2325,"children":2326},{"style":790},[2327],{"type":54,"value":847},{"type":48,"tag":777,"props":2329,"children":2330},{"style":839},[2331],{"type":54,"value":2332},"export CLICKHOUSE_CLOUD_API_KEY=",{"type":48,"tag":777,"props":2334,"children":2335},{"style":790},[2336],{"type":54,"value":1014},{"type":48,"tag":777,"props":2338,"children":2339},{"style":833},[2340],{"type":54,"value":2278},{"type":48,"tag":777,"props":2342,"children":2343},{"style":839},[2344],{"type":54,"value":2345}," -r .api_key    ",{"type":48,"tag":777,"props":2347,"children":2348},{"style":790},[2349],{"type":54,"value":857},{"type":48,"tag":777,"props":2351,"children":2352},{"style":784},[2353],{"type":54,"value":812},{"type":48,"tag":777,"props":2355,"children":2356},{"style":839},[2357],{"type":54,"value":2358},"\u002F.clickhouse\u002Fcredentials.json",{"type":48,"tag":777,"props":2360,"children":2361},{"style":790},[2362],{"type":54,"value":2363},"\")\"\n",{"type":48,"tag":777,"props":2365,"children":2366},{"class":779,"line":919},[2367,2371,2375,2380,2384,2388,2393,2397,2401,2405],{"type":48,"tag":777,"props":2368,"children":2369},{"style":948},[2370],{"type":54,"value":974},{"type":48,"tag":777,"props":2372,"children":2373},{"style":790},[2374],{"type":54,"value":847},{"type":48,"tag":777,"props":2376,"children":2377},{"style":839},[2378],{"type":54,"value":2379},"export CLICKHOUSE_CLOUD_API_SECRET=",{"type":48,"tag":777,"props":2381,"children":2382},{"style":790},[2383],{"type":54,"value":1014},{"type":48,"tag":777,"props":2385,"children":2386},{"style":833},[2387],{"type":54,"value":2278},{"type":48,"tag":777,"props":2389,"children":2390},{"style":839},[2391],{"type":54,"value":2392}," -r .api_secret ",{"type":48,"tag":777,"props":2394,"children":2395},{"style":790},[2396],{"type":54,"value":857},{"type":48,"tag":777,"props":2398,"children":2399},{"style":784},[2400],{"type":54,"value":812},{"type":48,"tag":777,"props":2402,"children":2403},{"style":839},[2404],{"type":54,"value":2358},{"type":48,"tag":777,"props":2406,"children":2407},{"style":790},[2408],{"type":54,"value":2363},{"type":48,"tag":777,"props":2410,"children":2411},{"class":779,"line":929},[2412,2416,2420,2424,2428,2432],{"type":48,"tag":777,"props":2413,"children":2414},{"style":790},[2415],{"type":54,"value":1133},{"type":48,"tag":777,"props":2417,"children":2418},{"style":790},[2419],{"type":54,"value":1138},{"type":48,"tag":777,"props":2421,"children":2422},{"style":790},[2423],{"type":54,"value":847},{"type":48,"tag":777,"props":2425,"children":2426},{"style":784},[2427],{"type":54,"value":852},{"type":48,"tag":777,"props":2429,"children":2430},{"style":839},[2431],{"type":54,"value":1573},{"type":48,"tag":777,"props":2433,"children":2434},{"style":790},[2435],{"type":54,"value":886},{"type":48,"tag":777,"props":2437,"children":2438},{"class":779,"line":939},[2439],{"type":48,"tag":777,"props":2440,"children":2441},{"style":790},[2442],{"type":54,"value":1160},{"type":48,"tag":777,"props":2444,"children":2445},{"class":779,"line":959},[2446,2450,2454,2458,2462,2466],{"type":48,"tag":777,"props":2447,"children":2448},{"style":833},[2449],{"type":54,"value":1169},{"type":48,"tag":777,"props":2451,"children":2452},{"style":870},[2453],{"type":54,"value":1174},{"type":48,"tag":777,"props":2455,"children":2456},{"style":790},[2457],{"type":54,"value":847},{"type":48,"tag":777,"props":2459,"children":2460},{"style":784},[2461],{"type":54,"value":852},{"type":48,"tag":777,"props":2463,"children":2464},{"style":839},[2465],{"type":54,"value":1573},{"type":48,"tag":777,"props":2467,"children":2468},{"style":790},[2469],{"type":54,"value":886},{"type":48,"tag":57,"props":2471,"children":2472},{},[2473,2485],{"type":48,"tag":82,"props":2474,"children":2475},{},[2476,2478,2483],{"type":54,"value":2477},"From now on, open every shell that calls ",{"type":48,"tag":70,"props":2479,"children":2481},{"className":2480},[],[2482],{"type":54,"value":75},{"type":54,"value":2484}," with both loads",{"type":54,"value":2486},", because env vars do\nnot persist across shells:",{"type":48,"tag":766,"props":2488,"children":2490},{"className":768,"code":2489,"language":770,"meta":771,"style":771},". \"$WORKDIR\u002Fcreds.env\"; set -a; . \"$ENV_FILE\"; set +a\n",[2491],{"type":48,"tag":70,"props":2492,"children":2493},{"__ignoreMap":771},[2494],{"type":48,"tag":777,"props":2495,"children":2496},{"class":779,"line":780},[2497,2501,2505,2509,2513,2517,2521,2525,2529,2533,2537,2541,2545,2549,2553,2557],{"type":48,"tag":777,"props":2498,"children":2499},{"style":948},[2500],{"type":54,"value":731},{"type":48,"tag":777,"props":2502,"children":2503},{"style":790},[2504],{"type":54,"value":847},{"type":48,"tag":777,"props":2506,"children":2507},{"style":784},[2508],{"type":54,"value":852},{"type":48,"tag":777,"props":2510,"children":2511},{"style":839},[2512],{"type":54,"value":1573},{"type":48,"tag":777,"props":2514,"children":2515},{"style":790},[2516],{"type":54,"value":857},{"type":48,"tag":777,"props":2518,"children":2519},{"style":790},[2520],{"type":54,"value":1522},{"type":48,"tag":777,"props":2522,"children":2523},{"style":948},[2524],{"type":54,"value":1616},{"type":48,"tag":777,"props":2526,"children":2527},{"style":839},[2528],{"type":54,"value":1621},{"type":48,"tag":777,"props":2530,"children":2531},{"style":790},[2532],{"type":54,"value":1522},{"type":48,"tag":777,"props":2534,"children":2535},{"style":948},[2536],{"type":54,"value":1591},{"type":48,"tag":777,"props":2538,"children":2539},{"style":790},[2540],{"type":54,"value":847},{"type":48,"tag":777,"props":2542,"children":2543},{"style":784},[2544],{"type":54,"value":1147},{"type":48,"tag":777,"props":2546,"children":2547},{"style":790},[2548],{"type":54,"value":857},{"type":48,"tag":777,"props":2550,"children":2551},{"style":790},[2552],{"type":54,"value":1522},{"type":48,"tag":777,"props":2554,"children":2555},{"style":948},[2556],{"type":54,"value":1616},{"type":48,"tag":777,"props":2558,"children":2559},{"style":839},[2560],{"type":54,"value":1654},{"type":48,"tag":57,"props":2562,"children":2563},{},[2564,2566,2572,2574,2580,2582,2588,2590,2596],{"type":54,"value":2565},"Re-run the ",{"type":48,"tag":70,"props":2567,"children":2569},{"className":2568},[],[2570],{"type":54,"value":2571},"service list",{"type":54,"value":2573}," check above with the creds loaded; it should now succeed. Do not continue\nuntil a real call works. (If ",{"type":48,"tag":70,"props":2575,"children":2577},{"className":2576},[],[2578],{"type":54,"value":2579},"clickhousectl auth status",{"type":54,"value":2581}," already shows ",{"type":48,"tag":70,"props":2583,"children":2585},{"className":2584},[],[2586],{"type":54,"value":2587},"API key … Active",{"type":54,"value":2589}," and calls\nsucceed without ",{"type":48,"tag":70,"props":2591,"children":2593},{"className":2592},[],[2594],{"type":54,"value":2595},"creds.env",{"type":54,"value":2597},", you can skip this; but most agent shells need it.)",{"type":48,"tag":266,"props":2599,"children":2600},{},[],{"type":48,"tag":270,"props":2602,"children":2604},{"id":2603},"step-4-resolve-the-service-and-capture-the-https-endpoint",[2605],{"type":54,"value":2606},"Step 4: Resolve the service and capture the HTTPS endpoint",{"type":48,"tag":57,"props":2608,"children":2609},{},[2610,2612,2617],{"type":54,"value":2611},"Run the standard preamble (Step 2) so the paths, credentials, and config are all loaded in this\nshell, then resolve the service. If ",{"type":48,"tag":70,"props":2613,"children":2615},{"className":2614},[],[2616],{"type":54,"value":729},{"type":54,"value":2618}," is a UUID, use it directly; otherwise look it up\nby name:",{"type":48,"tag":766,"props":2620,"children":2621},{"className":768,"code":1473,"language":770,"meta":771,"style":771},[2622],{"type":48,"tag":70,"props":2623,"children":2624},{"__ignoreMap":771},[2625,2692],{"type":48,"tag":777,"props":2626,"children":2627},{"class":779,"line":780},[2628,2632,2636,2640,2644,2648,2652,2656,2660,2664,2668,2672,2676,2680,2684,2688],{"type":48,"tag":777,"props":2629,"children":2630},{"style":784},[2631],{"type":54,"value":787},{"type":48,"tag":777,"props":2633,"children":2634},{"style":790},[2635],{"type":54,"value":793},{"type":48,"tag":777,"props":2637,"children":2638},{"style":790},[2639],{"type":54,"value":798},{"type":48,"tag":777,"props":2641,"children":2642},{"style":784},[2643],{"type":54,"value":787},{"type":48,"tag":777,"props":2645,"children":2646},{"style":790},[2647],{"type":54,"value":807},{"type":48,"tag":777,"props":2649,"children":2650},{"style":784},[2651],{"type":54,"value":812},{"type":48,"tag":777,"props":2653,"children":2654},{"style":790},[2655],{"type":54,"value":817},{"type":48,"tag":777,"props":2657,"children":2658},{"style":784},[2659],{"type":54,"value":4},{"type":48,"tag":777,"props":2661,"children":2662},{"style":790},[2663],{"type":54,"value":1517},{"type":48,"tag":777,"props":2665,"children":2666},{"style":790},[2667],{"type":54,"value":1522},{"type":48,"tag":777,"props":2669,"children":2670},{"style":784},[2671],{"type":54,"value":1527},{"type":48,"tag":777,"props":2673,"children":2674},{"style":790},[2675],{"type":54,"value":793},{"type":48,"tag":777,"props":2677,"children":2678},{"style":790},[2679],{"type":54,"value":857},{"type":48,"tag":777,"props":2681,"children":2682},{"style":784},[2683],{"type":54,"value":852},{"type":48,"tag":777,"props":2685,"children":2686},{"style":839},[2687],{"type":54,"value":912},{"type":48,"tag":777,"props":2689,"children":2690},{"style":790},[2691],{"type":54,"value":886},{"type":48,"tag":777,"props":2693,"children":2694},{"class":779,"line":829},[2695,2699,2703,2707,2711,2715,2719,2723,2727,2731,2735,2739,2743,2747,2751,2755,2759,2763,2767,2771,2775,2779,2783,2787],{"type":48,"tag":777,"props":2696,"children":2697},{"style":790},[2698],{"type":54,"value":1555},{"type":48,"tag":777,"props":2700,"children":2701},{"style":790},[2702],{"type":54,"value":1560},{"type":48,"tag":777,"props":2704,"children":2705},{"style":790},[2706],{"type":54,"value":847},{"type":48,"tag":777,"props":2708,"children":2709},{"style":784},[2710],{"type":54,"value":852},{"type":48,"tag":777,"props":2712,"children":2713},{"style":839},[2714],{"type":54,"value":1573},{"type":48,"tag":777,"props":2716,"children":2717},{"style":790},[2718],{"type":54,"value":857},{"type":48,"tag":777,"props":2720,"children":2721},{"style":790},[2722],{"type":54,"value":1582},{"type":48,"tag":777,"props":2724,"children":2725},{"style":790},[2726],{"type":54,"value":862},{"type":48,"tag":777,"props":2728,"children":2729},{"style":948},[2730],{"type":54,"value":1591},{"type":48,"tag":777,"props":2732,"children":2733},{"style":790},[2734],{"type":54,"value":847},{"type":48,"tag":777,"props":2736,"children":2737},{"style":784},[2738],{"type":54,"value":852},{"type":48,"tag":777,"props":2740,"children":2741},{"style":839},[2742],{"type":54,"value":1573},{"type":48,"tag":777,"props":2744,"children":2745},{"style":790},[2746],{"type":54,"value":857},{"type":48,"tag":777,"props":2748,"children":2749},{"style":790},[2750],{"type":54,"value":1522},{"type":48,"tag":777,"props":2752,"children":2753},{"style":948},[2754],{"type":54,"value":1616},{"type":48,"tag":777,"props":2756,"children":2757},{"style":839},[2758],{"type":54,"value":1621},{"type":48,"tag":777,"props":2760,"children":2761},{"style":790},[2762],{"type":54,"value":1522},{"type":48,"tag":777,"props":2764,"children":2765},{"style":948},[2766],{"type":54,"value":1591},{"type":48,"tag":777,"props":2768,"children":2769},{"style":790},[2770],{"type":54,"value":847},{"type":48,"tag":777,"props":2772,"children":2773},{"style":784},[2774],{"type":54,"value":1147},{"type":48,"tag":777,"props":2776,"children":2777},{"style":790},[2778],{"type":54,"value":857},{"type":48,"tag":777,"props":2780,"children":2781},{"style":790},[2782],{"type":54,"value":1522},{"type":48,"tag":777,"props":2784,"children":2785},{"style":948},[2786],{"type":54,"value":1616},{"type":48,"tag":777,"props":2788,"children":2789},{"style":839},[2790],{"type":54,"value":1654},{"type":48,"tag":766,"props":2792,"children":2794},{"className":768,"code":2793,"language":770,"meta":771,"style":771},"# UUID form\nclickhousectl cloud service get \"$SERVICE_REF\" --json > \"$WORKDIR\u002Fsvc.json\"\n\n# Name form (note the double quotes: service names can contain spaces or apostrophes,\n# e.g. \"Alex's test\")\nclickhousectl cloud service list --json \\\n  | jq --arg n \"$SERVICE_REF\" '.[] | select(.name==$n)' > \"$WORKDIR\u002Fsvc.json\"\n",[2795],{"type":48,"tag":70,"props":2796,"children":2797},{"__ignoreMap":771},[2798,2806,2863,2870,2878,2886,2914],{"type":48,"tag":777,"props":2799,"children":2800},{"class":779,"line":780},[2801],{"type":48,"tag":777,"props":2802,"children":2803},{"style":933},[2804],{"type":54,"value":2805},"# UUID form\n",{"type":48,"tag":777,"props":2807,"children":2808},{"class":779,"line":829},[2809,2813,2817,2821,2826,2830,2834,2838,2842,2846,2850,2854,2859],{"type":48,"tag":777,"props":2810,"children":2811},{"style":833},[2812],{"type":54,"value":75},{"type":48,"tag":777,"props":2814,"children":2815},{"style":839},[2816],{"type":54,"value":1867},{"type":48,"tag":777,"props":2818,"children":2819},{"style":839},[2820],{"type":54,"value":2160},{"type":48,"tag":777,"props":2822,"children":2823},{"style":839},[2824],{"type":54,"value":2825}," get",{"type":48,"tag":777,"props":2827,"children":2828},{"style":790},[2829],{"type":54,"value":847},{"type":48,"tag":777,"props":2831,"children":2832},{"style":784},[2833],{"type":54,"value":988},{"type":48,"tag":777,"props":2835,"children":2836},{"style":790},[2837],{"type":54,"value":857},{"type":48,"tag":777,"props":2839,"children":2840},{"style":839},[2841],{"type":54,"value":2170},{"type":48,"tag":777,"props":2843,"children":2844},{"style":790},[2845],{"type":54,"value":1138},{"type":48,"tag":777,"props":2847,"children":2848},{"style":790},[2849],{"type":54,"value":847},{"type":48,"tag":777,"props":2851,"children":2852},{"style":784},[2853],{"type":54,"value":852},{"type":48,"tag":777,"props":2855,"children":2856},{"style":839},[2857],{"type":54,"value":2858},"\u002Fsvc.json",{"type":48,"tag":777,"props":2860,"children":2861},{"style":790},[2862],{"type":54,"value":886},{"type":48,"tag":777,"props":2864,"children":2865},{"class":779,"line":889},[2866],{"type":48,"tag":777,"props":2867,"children":2868},{"emptyLinePlaceholder":923},[2869],{"type":54,"value":926},{"type":48,"tag":777,"props":2871,"children":2872},{"class":779,"line":919},[2873],{"type":48,"tag":777,"props":2874,"children":2875},{"style":933},[2876],{"type":54,"value":2877},"# Name form (note the double quotes: service names can contain spaces or apostrophes,\n",{"type":48,"tag":777,"props":2879,"children":2880},{"class":779,"line":929},[2881],{"type":48,"tag":777,"props":2882,"children":2883},{"style":933},[2884],{"type":54,"value":2885},"# e.g. \"Alex's test\")\n",{"type":48,"tag":777,"props":2887,"children":2888},{"class":779,"line":939},[2889,2893,2897,2901,2905,2909],{"type":48,"tag":777,"props":2890,"children":2891},{"style":833},[2892],{"type":54,"value":75},{"type":48,"tag":777,"props":2894,"children":2895},{"style":839},[2896],{"type":54,"value":1867},{"type":48,"tag":777,"props":2898,"children":2899},{"style":839},[2900],{"type":54,"value":2160},{"type":48,"tag":777,"props":2902,"children":2903},{"style":839},[2904],{"type":54,"value":2165},{"type":48,"tag":777,"props":2906,"children":2907},{"style":839},[2908],{"type":54,"value":2170},{"type":48,"tag":777,"props":2910,"children":2911},{"style":784},[2912],{"type":54,"value":2913}," \\\n",{"type":48,"tag":777,"props":2915,"children":2916},{"class":779,"line":959},[2917,2922,2926,2931,2936,2940,2944,2948,2952,2957,2962,2966,2970,2974,2978],{"type":48,"tag":777,"props":2918,"children":2919},{"style":790},[2920],{"type":54,"value":2921},"  |",{"type":48,"tag":777,"props":2923,"children":2924},{"style":833},[2925],{"type":54,"value":2179},{"type":48,"tag":777,"props":2927,"children":2928},{"style":839},[2929],{"type":54,"value":2930}," --arg",{"type":48,"tag":777,"props":2932,"children":2933},{"style":839},[2934],{"type":54,"value":2935}," n",{"type":48,"tag":777,"props":2937,"children":2938},{"style":790},[2939],{"type":54,"value":847},{"type":48,"tag":777,"props":2941,"children":2942},{"style":784},[2943],{"type":54,"value":988},{"type":48,"tag":777,"props":2945,"children":2946},{"style":790},[2947],{"type":54,"value":857},{"type":48,"tag":777,"props":2949,"children":2950},{"style":790},[2951],{"type":54,"value":2189},{"type":48,"tag":777,"props":2953,"children":2954},{"style":839},[2955],{"type":54,"value":2956},".[] | select(.name==$n)",{"type":48,"tag":777,"props":2958,"children":2959},{"style":790},[2960],{"type":54,"value":2961},"'",{"type":48,"tag":777,"props":2963,"children":2964},{"style":790},[2965],{"type":54,"value":1138},{"type":48,"tag":777,"props":2967,"children":2968},{"style":790},[2969],{"type":54,"value":847},{"type":48,"tag":777,"props":2971,"children":2972},{"style":784},[2973],{"type":54,"value":852},{"type":48,"tag":777,"props":2975,"children":2976},{"style":839},[2977],{"type":54,"value":2858},{"type":48,"tag":777,"props":2979,"children":2980},{"style":790},[2981],{"type":54,"value":886},{"type":48,"tag":57,"props":2983,"children":2984},{},[2985,2987,2993,2995,3001],{"type":54,"value":2986},"Extract the values you need, coercing the port to an integer. The port serializes as a float\n(",{"type":48,"tag":70,"props":2988,"children":2990},{"className":2989},[],[2991],{"type":54,"value":2992},"8443.0",{"type":54,"value":2994},"); if ",{"type":48,"tag":70,"props":2996,"children":2998},{"className":2997},[],[2999],{"type":54,"value":3000},":8443.0",{"type":54,"value":3002}," leaks into the endpoint the collector's ClickHouse exporter cannot dial\nit:",{"type":48,"tag":766,"props":3004,"children":3006},{"className":768,"code":3005,"language":770,"meta":771,"style":771},"SERVICE_ID=$(jq -r '.id' \"$WORKDIR\u002Fsvc.json\")\nSERVICE_NAME=$(jq -r '.name' \"$WORKDIR\u002Fsvc.json\")\nSTATE=$(jq -r '.state' \"$WORKDIR\u002Fsvc.json\")\nCLICKHOUSE_ENDPOINT=$(jq -r '.endpoints[] | select(.protocol==\"https\")\n  | \"https:\u002F\u002F\\(.host):\\(.port | tonumber | floor)\"' \"$WORKDIR\u002Fsvc.json\")\n\n# Persist the resolved values back into the env file for later steps and docker --env-file.\n# Append only if the key is not already present, so a second run does not duplicate lines.\ngrep -q '^SERVICE_ID=' \"$ENV_FILE\" || echo \"SERVICE_ID=$SERVICE_ID\" >> \"$ENV_FILE\"\ngrep -q '^CLICKHOUSE_ENDPOINT=' \"$ENV_FILE\" || echo \"CLICKHOUSE_ENDPOINT=$CLICKHOUSE_ENDPOINT\" >> \"$ENV_FILE\"\nprintf 'service=%q state=%s endpoint=%s\\n' \"$SERVICE_NAME\" \"$STATE\" \"$CLICKHOUSE_ENDPOINT\"\n",[3007],{"type":48,"tag":70,"props":3008,"children":3009},{"__ignoreMap":771},[3010,3064,3117,3170,3198,3230,3237,3245,3253,3335,3413],{"type":48,"tag":777,"props":3011,"children":3012},{"class":779,"line":780},[3013,3018,3023,3027,3031,3035,3040,3044,3048,3052,3056,3060],{"type":48,"tag":777,"props":3014,"children":3015},{"style":784},[3016],{"type":54,"value":3017},"SERVICE_ID",{"type":48,"tag":777,"props":3019,"children":3020},{"style":790},[3021],{"type":54,"value":3022},"=$(",{"type":48,"tag":777,"props":3024,"children":3025},{"style":833},[3026],{"type":54,"value":2278},{"type":48,"tag":777,"props":3028,"children":3029},{"style":839},[3030],{"type":54,"value":2184},{"type":48,"tag":777,"props":3032,"children":3033},{"style":790},[3034],{"type":54,"value":2189},{"type":48,"tag":777,"props":3036,"children":3037},{"style":839},[3038],{"type":54,"value":3039},".id",{"type":48,"tag":777,"props":3041,"children":3042},{"style":790},[3043],{"type":54,"value":2961},{"type":48,"tag":777,"props":3045,"children":3046},{"style":790},[3047],{"type":54,"value":847},{"type":48,"tag":777,"props":3049,"children":3050},{"style":784},[3051],{"type":54,"value":852},{"type":48,"tag":777,"props":3053,"children":3054},{"style":839},[3055],{"type":54,"value":2858},{"type":48,"tag":777,"props":3057,"children":3058},{"style":790},[3059],{"type":54,"value":857},{"type":48,"tag":777,"props":3061,"children":3062},{"style":790},[3063],{"type":54,"value":1160},{"type":48,"tag":777,"props":3065,"children":3066},{"class":779,"line":829},[3067,3072,3076,3080,3084,3088,3093,3097,3101,3105,3109,3113],{"type":48,"tag":777,"props":3068,"children":3069},{"style":784},[3070],{"type":54,"value":3071},"SERVICE_NAME",{"type":48,"tag":777,"props":3073,"children":3074},{"style":790},[3075],{"type":54,"value":3022},{"type":48,"tag":777,"props":3077,"children":3078},{"style":833},[3079],{"type":54,"value":2278},{"type":48,"tag":777,"props":3081,"children":3082},{"style":839},[3083],{"type":54,"value":2184},{"type":48,"tag":777,"props":3085,"children":3086},{"style":790},[3087],{"type":54,"value":2189},{"type":48,"tag":777,"props":3089,"children":3090},{"style":839},[3091],{"type":54,"value":3092},".name",{"type":48,"tag":777,"props":3094,"children":3095},{"style":790},[3096],{"type":54,"value":2961},{"type":48,"tag":777,"props":3098,"children":3099},{"style":790},[3100],{"type":54,"value":847},{"type":48,"tag":777,"props":3102,"children":3103},{"style":784},[3104],{"type":54,"value":852},{"type":48,"tag":777,"props":3106,"children":3107},{"style":839},[3108],{"type":54,"value":2858},{"type":48,"tag":777,"props":3110,"children":3111},{"style":790},[3112],{"type":54,"value":857},{"type":48,"tag":777,"props":3114,"children":3115},{"style":790},[3116],{"type":54,"value":1160},{"type":48,"tag":777,"props":3118,"children":3119},{"class":779,"line":889},[3120,3125,3129,3133,3137,3141,3146,3150,3154,3158,3162,3166],{"type":48,"tag":777,"props":3121,"children":3122},{"style":784},[3123],{"type":54,"value":3124},"STATE",{"type":48,"tag":777,"props":3126,"children":3127},{"style":790},[3128],{"type":54,"value":3022},{"type":48,"tag":777,"props":3130,"children":3131},{"style":833},[3132],{"type":54,"value":2278},{"type":48,"tag":777,"props":3134,"children":3135},{"style":839},[3136],{"type":54,"value":2184},{"type":48,"tag":777,"props":3138,"children":3139},{"style":790},[3140],{"type":54,"value":2189},{"type":48,"tag":777,"props":3142,"children":3143},{"style":839},[3144],{"type":54,"value":3145},".state",{"type":48,"tag":777,"props":3147,"children":3148},{"style":790},[3149],{"type":54,"value":2961},{"type":48,"tag":777,"props":3151,"children":3152},{"style":790},[3153],{"type":54,"value":847},{"type":48,"tag":777,"props":3155,"children":3156},{"style":784},[3157],{"type":54,"value":852},{"type":48,"tag":777,"props":3159,"children":3160},{"style":839},[3161],{"type":54,"value":2858},{"type":48,"tag":777,"props":3163,"children":3164},{"style":790},[3165],{"type":54,"value":857},{"type":48,"tag":777,"props":3167,"children":3168},{"style":790},[3169],{"type":54,"value":1160},{"type":48,"tag":777,"props":3171,"children":3172},{"class":779,"line":919},[3173,3177,3181,3185,3189,3193],{"type":48,"tag":777,"props":3174,"children":3175},{"style":784},[3176],{"type":54,"value":1252},{"type":48,"tag":777,"props":3178,"children":3179},{"style":790},[3180],{"type":54,"value":3022},{"type":48,"tag":777,"props":3182,"children":3183},{"style":833},[3184],{"type":54,"value":2278},{"type":48,"tag":777,"props":3186,"children":3187},{"style":839},[3188],{"type":54,"value":2184},{"type":48,"tag":777,"props":3190,"children":3191},{"style":790},[3192],{"type":54,"value":2189},{"type":48,"tag":777,"props":3194,"children":3195},{"style":839},[3196],{"type":54,"value":3197},".endpoints[] | select(.protocol==\"https\")\n",{"type":48,"tag":777,"props":3199,"children":3200},{"class":779,"line":929},[3201,3206,3210,3214,3218,3222,3226],{"type":48,"tag":777,"props":3202,"children":3203},{"style":839},[3204],{"type":54,"value":3205},"  | \"https:\u002F\u002F\\(.host):\\(.port | tonumber | floor)\"",{"type":48,"tag":777,"props":3207,"children":3208},{"style":790},[3209],{"type":54,"value":2961},{"type":48,"tag":777,"props":3211,"children":3212},{"style":790},[3213],{"type":54,"value":847},{"type":48,"tag":777,"props":3215,"children":3216},{"style":784},[3217],{"type":54,"value":852},{"type":48,"tag":777,"props":3219,"children":3220},{"style":839},[3221],{"type":54,"value":2858},{"type":48,"tag":777,"props":3223,"children":3224},{"style":790},[3225],{"type":54,"value":857},{"type":48,"tag":777,"props":3227,"children":3228},{"style":790},[3229],{"type":54,"value":1160},{"type":48,"tag":777,"props":3231,"children":3232},{"class":779,"line":939},[3233],{"type":48,"tag":777,"props":3234,"children":3235},{"emptyLinePlaceholder":923},[3236],{"type":54,"value":926},{"type":48,"tag":777,"props":3238,"children":3239},{"class":779,"line":959},[3240],{"type":48,"tag":777,"props":3241,"children":3242},{"style":933},[3243],{"type":54,"value":3244},"# Persist the resolved values back into the env file for later steps and docker --env-file.\n",{"type":48,"tag":777,"props":3246,"children":3247},{"class":779,"line":968},[3248],{"type":48,"tag":777,"props":3249,"children":3250},{"style":933},[3251],{"type":54,"value":3252},"# Append only if the key is not already present, so a second run does not duplicate lines.\n",{"type":48,"tag":777,"props":3254,"children":3255},{"class":779,"line":995},[3256,3261,3266,3270,3275,3279,3283,3287,3291,3296,3300,3304,3309,3314,3318,3323,3327,3331],{"type":48,"tag":777,"props":3257,"children":3258},{"style":833},[3259],{"type":54,"value":3260},"grep",{"type":48,"tag":777,"props":3262,"children":3263},{"style":839},[3264],{"type":54,"value":3265}," -q",{"type":48,"tag":777,"props":3267,"children":3268},{"style":790},[3269],{"type":54,"value":2189},{"type":48,"tag":777,"props":3271,"children":3272},{"style":839},[3273],{"type":54,"value":3274},"^SERVICE_ID=",{"type":48,"tag":777,"props":3276,"children":3277},{"style":790},[3278],{"type":54,"value":2961},{"type":48,"tag":777,"props":3280,"children":3281},{"style":790},[3282],{"type":54,"value":847},{"type":48,"tag":777,"props":3284,"children":3285},{"style":784},[3286],{"type":54,"value":1147},{"type":48,"tag":777,"props":3288,"children":3289},{"style":790},[3290],{"type":54,"value":857},{"type":48,"tag":777,"props":3292,"children":3293},{"style":790},[3294],{"type":54,"value":3295}," ||",{"type":48,"tag":777,"props":3297,"children":3298},{"style":948},[3299],{"type":54,"value":2323},{"type":48,"tag":777,"props":3301,"children":3302},{"style":790},[3303],{"type":54,"value":847},{"type":48,"tag":777,"props":3305,"children":3306},{"style":839},[3307],{"type":54,"value":3308},"SERVICE_ID=",{"type":48,"tag":777,"props":3310,"children":3311},{"style":784},[3312],{"type":54,"value":3313},"$SERVICE_ID",{"type":48,"tag":777,"props":3315,"children":3316},{"style":790},[3317],{"type":54,"value":857},{"type":48,"tag":777,"props":3319,"children":3320},{"style":790},[3321],{"type":54,"value":3322}," >>",{"type":48,"tag":777,"props":3324,"children":3325},{"style":790},[3326],{"type":54,"value":847},{"type":48,"tag":777,"props":3328,"children":3329},{"style":784},[3330],{"type":54,"value":1147},{"type":48,"tag":777,"props":3332,"children":3333},{"style":790},[3334],{"type":54,"value":886},{"type":48,"tag":777,"props":3336,"children":3337},{"class":779,"line":1037},[3338,3342,3346,3350,3355,3359,3363,3367,3371,3375,3379,3383,3388,3393,3397,3401,3405,3409],{"type":48,"tag":777,"props":3339,"children":3340},{"style":833},[3341],{"type":54,"value":3260},{"type":48,"tag":777,"props":3343,"children":3344},{"style":839},[3345],{"type":54,"value":3265},{"type":48,"tag":777,"props":3347,"children":3348},{"style":790},[3349],{"type":54,"value":2189},{"type":48,"tag":777,"props":3351,"children":3352},{"style":839},[3353],{"type":54,"value":3354},"^CLICKHOUSE_ENDPOINT=",{"type":48,"tag":777,"props":3356,"children":3357},{"style":790},[3358],{"type":54,"value":2961},{"type":48,"tag":777,"props":3360,"children":3361},{"style":790},[3362],{"type":54,"value":847},{"type":48,"tag":777,"props":3364,"children":3365},{"style":784},[3366],{"type":54,"value":1147},{"type":48,"tag":777,"props":3368,"children":3369},{"style":790},[3370],{"type":54,"value":857},{"type":48,"tag":777,"props":3372,"children":3373},{"style":790},[3374],{"type":54,"value":3295},{"type":48,"tag":777,"props":3376,"children":3377},{"style":948},[3378],{"type":54,"value":2323},{"type":48,"tag":777,"props":3380,"children":3381},{"style":790},[3382],{"type":54,"value":847},{"type":48,"tag":777,"props":3384,"children":3385},{"style":839},[3386],{"type":54,"value":3387},"CLICKHOUSE_ENDPOINT=",{"type":48,"tag":777,"props":3389,"children":3390},{"style":784},[3391],{"type":54,"value":3392},"$CLICKHOUSE_ENDPOINT",{"type":48,"tag":777,"props":3394,"children":3395},{"style":790},[3396],{"type":54,"value":857},{"type":48,"tag":777,"props":3398,"children":3399},{"style":790},[3400],{"type":54,"value":3322},{"type":48,"tag":777,"props":3402,"children":3403},{"style":790},[3404],{"type":54,"value":847},{"type":48,"tag":777,"props":3406,"children":3407},{"style":784},[3408],{"type":54,"value":1147},{"type":48,"tag":777,"props":3410,"children":3411},{"style":790},[3412],{"type":54,"value":886},{"type":48,"tag":777,"props":3414,"children":3415},{"class":779,"line":1058},[3416,3421,3425,3430,3434,3438,3443,3447,3451,3456,3460,3464,3468],{"type":48,"tag":777,"props":3417,"children":3418},{"style":948},[3419],{"type":54,"value":3420},"printf",{"type":48,"tag":777,"props":3422,"children":3423},{"style":790},[3424],{"type":54,"value":2189},{"type":48,"tag":777,"props":3426,"children":3427},{"style":839},[3428],{"type":54,"value":3429},"service=%q state=%s endpoint=%s\\n",{"type":48,"tag":777,"props":3431,"children":3432},{"style":790},[3433],{"type":54,"value":2961},{"type":48,"tag":777,"props":3435,"children":3436},{"style":790},[3437],{"type":54,"value":847},{"type":48,"tag":777,"props":3439,"children":3440},{"style":784},[3441],{"type":54,"value":3442},"$SERVICE_NAME",{"type":48,"tag":777,"props":3444,"children":3445},{"style":790},[3446],{"type":54,"value":857},{"type":48,"tag":777,"props":3448,"children":3449},{"style":790},[3450],{"type":54,"value":847},{"type":48,"tag":777,"props":3452,"children":3453},{"style":784},[3454],{"type":54,"value":3455},"$STATE",{"type":48,"tag":777,"props":3457,"children":3458},{"style":790},[3459],{"type":54,"value":857},{"type":48,"tag":777,"props":3461,"children":3462},{"style":790},[3463],{"type":54,"value":847},{"type":48,"tag":777,"props":3465,"children":3466},{"style":784},[3467],{"type":54,"value":3392},{"type":48,"tag":777,"props":3469,"children":3470},{"style":790},[3471],{"type":54,"value":886},{"type":48,"tag":57,"props":3473,"children":3474},{},[3475,3480,3482,3488,3490,3496,3497,3503,3505,3510],{"type":48,"tag":70,"props":3476,"children":3478},{"className":3477},[],[3479],{"type":54,"value":3124},{"type":54,"value":3481}," must be ",{"type":48,"tag":70,"props":3483,"children":3485},{"className":3484},[],[3486],{"type":54,"value":3487},"running",{"type":54,"value":3489},". If it is ",{"type":48,"tag":70,"props":3491,"children":3493},{"className":3492},[],[3494],{"type":54,"value":3495},"stopped",{"type":54,"value":383},{"type":48,"tag":70,"props":3498,"children":3500},{"className":3499},[],[3501],{"type":54,"value":3502},"starting",{"type":54,"value":3504},", ask the user to start the service (or\nwait), and do not proceed. ClickHouse Cloud services ",{"type":48,"tag":82,"props":3506,"children":3507},{},[3508],{"type":54,"value":3509},"idle-suspend",{"type":54,"value":3511},", so even a \"running\" service\ncan be asleep; the next query both checks reachability and wakes it:",{"type":48,"tag":766,"props":3513,"children":3515},{"className":768,"code":3514,"language":770,"meta":771,"style":771},"clickhousectl cloud service query --id \"$SERVICE_ID\" --query \"SELECT version()\"\n",[3516],{"type":48,"tag":70,"props":3517,"children":3518},{"__ignoreMap":771},[3519],{"type":48,"tag":777,"props":3520,"children":3521},{"class":779,"line":780},[3522,3526,3530,3534,3539,3544,3548,3552,3556,3561,3565,3570],{"type":48,"tag":777,"props":3523,"children":3524},{"style":833},[3525],{"type":54,"value":75},{"type":48,"tag":777,"props":3527,"children":3528},{"style":839},[3529],{"type":54,"value":1867},{"type":48,"tag":777,"props":3531,"children":3532},{"style":839},[3533],{"type":54,"value":2160},{"type":48,"tag":777,"props":3535,"children":3536},{"style":839},[3537],{"type":54,"value":3538}," query",{"type":48,"tag":777,"props":3540,"children":3541},{"style":839},[3542],{"type":54,"value":3543}," --id",{"type":48,"tag":777,"props":3545,"children":3546},{"style":790},[3547],{"type":54,"value":847},{"type":48,"tag":777,"props":3549,"children":3550},{"style":784},[3551],{"type":54,"value":3313},{"type":48,"tag":777,"props":3553,"children":3554},{"style":790},[3555],{"type":54,"value":857},{"type":48,"tag":777,"props":3557,"children":3558},{"style":839},[3559],{"type":54,"value":3560}," --query",{"type":48,"tag":777,"props":3562,"children":3563},{"style":790},[3564],{"type":54,"value":847},{"type":48,"tag":777,"props":3566,"children":3567},{"style":839},[3568],{"type":54,"value":3569},"SELECT version()",{"type":48,"tag":777,"props":3571,"children":3572},{"style":790},[3573],{"type":54,"value":886},{"type":48,"tag":57,"props":3575,"children":3576},{},[3577,3579,3584,3586,3592],{"type":54,"value":3578},"A successful response confirms the service is awake and that the per-service Query API key is\nprovisioned. On the first call ",{"type":48,"tag":70,"props":3580,"children":3582},{"className":3581},[],[3583],{"type":54,"value":75},{"type":54,"value":3585}," prints ",{"type":48,"tag":70,"props":3587,"children":3589},{"className":3588},[],[3590],{"type":54,"value":3591},"Provisioning Query API endpoint + key for service '\u003Cname>'...",{"type":54,"value":3593},", which is expected.",{"type":48,"tag":266,"props":3595,"children":3596},{},[],{"type":48,"tag":270,"props":3598,"children":3600},{"id":3599},"step-5-create-the-hyperdx_ingest-sql-user-and-grant-it-otel",[3601,3603,3608,3610],{"type":54,"value":3602},"Step 5: Create the ",{"type":48,"tag":70,"props":3604,"children":3606},{"className":3605},[],[3607],{"type":54,"value":175},{"type":54,"value":3609}," SQL user and grant it ",{"type":48,"tag":70,"props":3611,"children":3613},{"className":3612},[],[3614],{"type":54,"value":183},{"type":48,"tag":57,"props":3616,"children":3617},{},[3618,3620,3625,3627,3633],{"type":54,"value":3619},"This step is the same on both paths: the collector (new or existing) authenticates to ClickHouse\nas ",{"type":48,"tag":70,"props":3621,"children":3623},{"className":3622},[],[3624],{"type":54,"value":175},{"type":54,"value":3626},". Open the shell with the combined load so ",{"type":48,"tag":70,"props":3628,"children":3630},{"className":3629},[],[3631],{"type":54,"value":3632},"$CLICKHOUSE_PASSWORD",{"type":54,"value":3634}," (and\ncredentials) are set.",{"type":48,"tag":1924,"props":3636,"children":3637},{},[3638],{"type":48,"tag":57,"props":3639,"children":3640},{},[3641,3646,3648,3653,3654,3659,3661,3666,3668,3673],{"type":48,"tag":82,"props":3642,"children":3643},{},[3644],{"type":54,"value":3645},"Expect an approval prompt here.",{"type":54,"value":3647}," The ",{"type":48,"tag":70,"props":3649,"children":3651},{"className":3650},[],[3652],{"type":54,"value":683},{"type":54,"value":543},{"type":48,"tag":70,"props":3655,"children":3657},{"className":3656},[],[3658],{"type":54,"value":690},{"type":54,"value":3660}," statements below are DDL against\na Cloud service, so some agent sandboxes flag them as \"modifying shared production\ninfrastructure\" even when ",{"type":48,"tag":70,"props":3662,"children":3664},{"className":3663},[],[3665],{"type":54,"value":75},{"type":54,"value":3667}," is allowlisted. This is expected; the operations are\nscoped to a single dedicated ingest user and the ",{"type":48,"tag":70,"props":3669,"children":3671},{"className":3670},[],[3672],{"type":54,"value":196},{"type":54,"value":3674}," schema, and the user should approve them\nexplicitly when prompted.",{"type":48,"tag":57,"props":3676,"children":3677},{},[3678,3690,3692,3698,3700,3706,3708,3713,3715,3720,3722,3728,3730,3735],{"type":48,"tag":82,"props":3679,"children":3680},{},[3681,3683,3689],{"type":54,"value":3682},"Never put the plaintext password in the SQL. Hash it locally and use ",{"type":48,"tag":70,"props":3684,"children":3686},{"className":3685},[],[3687],{"type":54,"value":3688},"sha256_hash",{"type":54,"value":731},{"type":54,"value":3691}," Two\nproblems rule out ",{"type":48,"tag":70,"props":3693,"children":3695},{"className":3694},[],[3696],{"type":54,"value":3697},"IDENTIFIED WITH sha256_password BY '$CLICKHOUSE_PASSWORD'",{"type":54,"value":3699},": the secret would\nland in the process arg list (visible in ",{"type":48,"tag":70,"props":3701,"children":3703},{"className":3702},[],[3704],{"type":54,"value":3705},"ps",{"type":54,"value":3707},") and shell history, and, critically, ",{"type":48,"tag":82,"props":3709,"children":3710},{},[3711],{"type":54,"value":3712},"the Query API\nechoes the failing statement verbatim in its error JSON",{"type":54,"value":3714},", so any error (a transient failure, a\ncharset slip) leaks the password into output an agent may surface. Passing it over stdin does not\nhelp, the error echo still contains it. Instead compute the SHA-256 hash of the password locally\n(",{"type":48,"tag":70,"props":3716,"children":3718},{"className":3717},[],[3719],{"type":54,"value":3688},{"type":54,"value":3721}," stores exactly what ",{"type":48,"tag":70,"props":3723,"children":3725},{"className":3724},[],[3726],{"type":54,"value":3727},"sha256_password",{"type":54,"value":3729}," would, so the collector still logs in with the\nplaintext from the env file) and put only the ",{"type":48,"tag":82,"props":3731,"children":3732},{},[3733],{"type":54,"value":3734},"hash",{"type":54,"value":3736}," in the statement. A hash is non-reversible,\nso even an echoed error cannot leak the password:",{"type":48,"tag":766,"props":3738,"children":3740},{"className":768,"code":3739,"language":770,"meta":771,"style":771},"WORKDIR=\"${WORKDIR:-$HOME\u002Fclickstack-otel-collector}\"; ENV_FILE=\"$WORKDIR\u002Fcollector.env\"\n[ -f \"$WORKDIR\u002Fcreds.env\" ] && . \"$WORKDIR\u002Fcreds.env\"; set -a; . \"$ENV_FILE\"; set +a\n\n# SHA-256 of the password. openssl is already a dependency; this is portable (macOS + Linux).\n# Only this hash ever reaches SQL, output, or `ps`; the plaintext stays in the env file.\nPW_HASH=$(printf %s \"$CLICKHOUSE_PASSWORD\" | openssl dgst -sha256 | awk '{print $NF}')\n\n# Send statements ONE AT A TIME: the Query API runs over HTTP and rejects multi-statement input\n# (\"Multi-statements are not allowed\"), so a single ; -separated batch fails.\nclickhousectl cloud service query --id \"$SERVICE_ID\" --query \\\n  \"CREATE USER IF NOT EXISTS hyperdx_ingest IDENTIFIED WITH sha256_hash BY '$PW_HASH'\"\n# Re-run safe: force the password to this run's value if the user already existed.\nclickhousectl cloud service query --id \"$SERVICE_ID\" --query \\\n  \"ALTER USER hyperdx_ingest IDENTIFIED WITH sha256_hash BY '$PW_HASH'\"\n",[3741],{"type":48,"tag":70,"props":3742,"children":3743},{"__ignoreMap":771},[3744,3811,3910,3917,3925,3933,4011,4018,4026,4034,4077,4103,4111,4154],{"type":48,"tag":777,"props":3745,"children":3746},{"class":779,"line":780},[3747,3751,3755,3759,3763,3767,3771,3775,3779,3783,3787,3791,3795,3799,3803,3807],{"type":48,"tag":777,"props":3748,"children":3749},{"style":784},[3750],{"type":54,"value":787},{"type":48,"tag":777,"props":3752,"children":3753},{"style":790},[3754],{"type":54,"value":793},{"type":48,"tag":777,"props":3756,"children":3757},{"style":790},[3758],{"type":54,"value":798},{"type":48,"tag":777,"props":3760,"children":3761},{"style":784},[3762],{"type":54,"value":787},{"type":48,"tag":777,"props":3764,"children":3765},{"style":790},[3766],{"type":54,"value":807},{"type":48,"tag":777,"props":3768,"children":3769},{"style":784},[3770],{"type":54,"value":812},{"type":48,"tag":777,"props":3772,"children":3773},{"style":790},[3774],{"type":54,"value":817},{"type":48,"tag":777,"props":3776,"children":3777},{"style":784},[3778],{"type":54,"value":4},{"type":48,"tag":777,"props":3780,"children":3781},{"style":790},[3782],{"type":54,"value":1517},{"type":48,"tag":777,"props":3784,"children":3785},{"style":790},[3786],{"type":54,"value":1522},{"type":48,"tag":777,"props":3788,"children":3789},{"style":784},[3790],{"type":54,"value":1527},{"type":48,"tag":777,"props":3792,"children":3793},{"style":790},[3794],{"type":54,"value":793},{"type":48,"tag":777,"props":3796,"children":3797},{"style":790},[3798],{"type":54,"value":857},{"type":48,"tag":777,"props":3800,"children":3801},{"style":784},[3802],{"type":54,"value":852},{"type":48,"tag":777,"props":3804,"children":3805},{"style":839},[3806],{"type":54,"value":912},{"type":48,"tag":777,"props":3808,"children":3809},{"style":790},[3810],{"type":54,"value":886},{"type":48,"tag":777,"props":3812,"children":3813},{"class":779,"line":829},[3814,3818,3822,3826,3830,3834,3838,3842,3846,3850,3854,3858,3862,3866,3870,3874,3878,3882,3886,3890,3894,3898,3902,3906],{"type":48,"tag":777,"props":3815,"children":3816},{"style":790},[3817],{"type":54,"value":1555},{"type":48,"tag":777,"props":3819,"children":3820},{"style":790},[3821],{"type":54,"value":1560},{"type":48,"tag":777,"props":3823,"children":3824},{"style":790},[3825],{"type":54,"value":847},{"type":48,"tag":777,"props":3827,"children":3828},{"style":784},[3829],{"type":54,"value":852},{"type":48,"tag":777,"props":3831,"children":3832},{"style":839},[3833],{"type":54,"value":1573},{"type":48,"tag":777,"props":3835,"children":3836},{"style":790},[3837],{"type":54,"value":857},{"type":48,"tag":777,"props":3839,"children":3840},{"style":790},[3841],{"type":54,"value":1582},{"type":48,"tag":777,"props":3843,"children":3844},{"style":790},[3845],{"type":54,"value":862},{"type":48,"tag":777,"props":3847,"children":3848},{"style":948},[3849],{"type":54,"value":1591},{"type":48,"tag":777,"props":3851,"children":3852},{"style":790},[3853],{"type":54,"value":847},{"type":48,"tag":777,"props":3855,"children":3856},{"style":784},[3857],{"type":54,"value":852},{"type":48,"tag":777,"props":3859,"children":3860},{"style":839},[3861],{"type":54,"value":1573},{"type":48,"tag":777,"props":3863,"children":3864},{"style":790},[3865],{"type":54,"value":857},{"type":48,"tag":777,"props":3867,"children":3868},{"style":790},[3869],{"type":54,"value":1522},{"type":48,"tag":777,"props":3871,"children":3872},{"style":948},[3873],{"type":54,"value":1616},{"type":48,"tag":777,"props":3875,"children":3876},{"style":839},[3877],{"type":54,"value":1621},{"type":48,"tag":777,"props":3879,"children":3880},{"style":790},[3881],{"type":54,"value":1522},{"type":48,"tag":777,"props":3883,"children":3884},{"style":948},[3885],{"type":54,"value":1591},{"type":48,"tag":777,"props":3887,"children":3888},{"style":790},[3889],{"type":54,"value":847},{"type":48,"tag":777,"props":3891,"children":3892},{"style":784},[3893],{"type":54,"value":1147},{"type":48,"tag":777,"props":3895,"children":3896},{"style":790},[3897],{"type":54,"value":857},{"type":48,"tag":777,"props":3899,"children":3900},{"style":790},[3901],{"type":54,"value":1522},{"type":48,"tag":777,"props":3903,"children":3904},{"style":948},[3905],{"type":54,"value":1616},{"type":48,"tag":777,"props":3907,"children":3908},{"style":839},[3909],{"type":54,"value":1654},{"type":48,"tag":777,"props":3911,"children":3912},{"class":779,"line":889},[3913],{"type":48,"tag":777,"props":3914,"children":3915},{"emptyLinePlaceholder":923},[3916],{"type":54,"value":926},{"type":48,"tag":777,"props":3918,"children":3919},{"class":779,"line":919},[3920],{"type":48,"tag":777,"props":3921,"children":3922},{"style":933},[3923],{"type":54,"value":3924},"# SHA-256 of the password. openssl is already a dependency; this is portable (macOS + Linux).\n",{"type":48,"tag":777,"props":3926,"children":3927},{"class":779,"line":929},[3928],{"type":48,"tag":777,"props":3929,"children":3930},{"style":933},[3931],{"type":54,"value":3932},"# Only this hash ever reaches SQL, output, or `ps`; the plaintext stays in the env file.\n",{"type":48,"tag":777,"props":3934,"children":3935},{"class":779,"line":939},[3936,3941,3945,3949,3954,3958,3962,3966,3970,3975,3980,3985,3989,3994,3998,4003,4007],{"type":48,"tag":777,"props":3937,"children":3938},{"style":784},[3939],{"type":54,"value":3940},"PW_HASH",{"type":48,"tag":777,"props":3942,"children":3943},{"style":790},[3944],{"type":54,"value":3022},{"type":48,"tag":777,"props":3946,"children":3947},{"style":948},[3948],{"type":54,"value":3420},{"type":48,"tag":777,"props":3950,"children":3951},{"style":839},[3952],{"type":54,"value":3953}," %s",{"type":48,"tag":777,"props":3955,"children":3956},{"style":790},[3957],{"type":54,"value":847},{"type":48,"tag":777,"props":3959,"children":3960},{"style":784},[3961],{"type":54,"value":3632},{"type":48,"tag":777,"props":3963,"children":3964},{"style":790},[3965],{"type":54,"value":857},{"type":48,"tag":777,"props":3967,"children":3968},{"style":790},[3969],{"type":54,"value":1838},{"type":48,"tag":777,"props":3971,"children":3972},{"style":833},[3973],{"type":54,"value":3974}," openssl",{"type":48,"tag":777,"props":3976,"children":3977},{"style":839},[3978],{"type":54,"value":3979}," dgst",{"type":48,"tag":777,"props":3981,"children":3982},{"style":839},[3983],{"type":54,"value":3984}," -sha256",{"type":48,"tag":777,"props":3986,"children":3987},{"style":790},[3988],{"type":54,"value":1838},{"type":48,"tag":777,"props":3990,"children":3991},{"style":833},[3992],{"type":54,"value":3993}," awk",{"type":48,"tag":777,"props":3995,"children":3996},{"style":790},[3997],{"type":54,"value":2189},{"type":48,"tag":777,"props":3999,"children":4000},{"style":839},[4001],{"type":54,"value":4002},"{print $NF}",{"type":48,"tag":777,"props":4004,"children":4005},{"style":790},[4006],{"type":54,"value":2961},{"type":48,"tag":777,"props":4008,"children":4009},{"style":790},[4010],{"type":54,"value":1160},{"type":48,"tag":777,"props":4012,"children":4013},{"class":779,"line":959},[4014],{"type":48,"tag":777,"props":4015,"children":4016},{"emptyLinePlaceholder":923},[4017],{"type":54,"value":926},{"type":48,"tag":777,"props":4019,"children":4020},{"class":779,"line":968},[4021],{"type":48,"tag":777,"props":4022,"children":4023},{"style":933},[4024],{"type":54,"value":4025},"# Send statements ONE AT A TIME: the Query API runs over HTTP and rejects multi-statement input\n",{"type":48,"tag":777,"props":4027,"children":4028},{"class":779,"line":995},[4029],{"type":48,"tag":777,"props":4030,"children":4031},{"style":933},[4032],{"type":54,"value":4033},"# (\"Multi-statements are not allowed\"), so a single ; -separated batch fails.\n",{"type":48,"tag":777,"props":4035,"children":4036},{"class":779,"line":1037},[4037,4041,4045,4049,4053,4057,4061,4065,4069,4073],{"type":48,"tag":777,"props":4038,"children":4039},{"style":833},[4040],{"type":54,"value":75},{"type":48,"tag":777,"props":4042,"children":4043},{"style":839},[4044],{"type":54,"value":1867},{"type":48,"tag":777,"props":4046,"children":4047},{"style":839},[4048],{"type":54,"value":2160},{"type":48,"tag":777,"props":4050,"children":4051},{"style":839},[4052],{"type":54,"value":3538},{"type":48,"tag":777,"props":4054,"children":4055},{"style":839},[4056],{"type":54,"value":3543},{"type":48,"tag":777,"props":4058,"children":4059},{"style":790},[4060],{"type":54,"value":847},{"type":48,"tag":777,"props":4062,"children":4063},{"style":784},[4064],{"type":54,"value":3313},{"type":48,"tag":777,"props":4066,"children":4067},{"style":790},[4068],{"type":54,"value":857},{"type":48,"tag":777,"props":4070,"children":4071},{"style":839},[4072],{"type":54,"value":3560},{"type":48,"tag":777,"props":4074,"children":4075},{"style":784},[4076],{"type":54,"value":2913},{"type":48,"tag":777,"props":4078,"children":4079},{"class":779,"line":1058},[4080,4085,4090,4095,4099],{"type":48,"tag":777,"props":4081,"children":4082},{"style":790},[4083],{"type":54,"value":4084},"  \"",{"type":48,"tag":777,"props":4086,"children":4087},{"style":839},[4088],{"type":54,"value":4089},"CREATE USER IF NOT EXISTS hyperdx_ingest IDENTIFIED WITH sha256_hash BY '",{"type":48,"tag":777,"props":4091,"children":4092},{"style":784},[4093],{"type":54,"value":4094},"$PW_HASH",{"type":48,"tag":777,"props":4096,"children":4097},{"style":839},[4098],{"type":54,"value":2961},{"type":48,"tag":777,"props":4100,"children":4101},{"style":790},[4102],{"type":54,"value":886},{"type":48,"tag":777,"props":4104,"children":4105},{"class":779,"line":1106},[4106],{"type":48,"tag":777,"props":4107,"children":4108},{"style":933},[4109],{"type":54,"value":4110},"# Re-run safe: force the password to this run's value if the user already existed.\n",{"type":48,"tag":777,"props":4112,"children":4113},{"class":779,"line":1127},[4114,4118,4122,4126,4130,4134,4138,4142,4146,4150],{"type":48,"tag":777,"props":4115,"children":4116},{"style":833},[4117],{"type":54,"value":75},{"type":48,"tag":777,"props":4119,"children":4120},{"style":839},[4121],{"type":54,"value":1867},{"type":48,"tag":777,"props":4123,"children":4124},{"style":839},[4125],{"type":54,"value":2160},{"type":48,"tag":777,"props":4127,"children":4128},{"style":839},[4129],{"type":54,"value":3538},{"type":48,"tag":777,"props":4131,"children":4132},{"style":839},[4133],{"type":54,"value":3543},{"type":48,"tag":777,"props":4135,"children":4136},{"style":790},[4137],{"type":54,"value":847},{"type":48,"tag":777,"props":4139,"children":4140},{"style":784},[4141],{"type":54,"value":3313},{"type":48,"tag":777,"props":4143,"children":4144},{"style":790},[4145],{"type":54,"value":857},{"type":48,"tag":777,"props":4147,"children":4148},{"style":839},[4149],{"type":54,"value":3560},{"type":48,"tag":777,"props":4151,"children":4152},{"style":784},[4153],{"type":54,"value":2913},{"type":48,"tag":777,"props":4155,"children":4156},{"class":779,"line":1154},[4157,4161,4166,4170,4174],{"type":48,"tag":777,"props":4158,"children":4159},{"style":790},[4160],{"type":54,"value":4084},{"type":48,"tag":777,"props":4162,"children":4163},{"style":839},[4164],{"type":54,"value":4165},"ALTER USER hyperdx_ingest IDENTIFIED WITH sha256_hash BY '",{"type":48,"tag":777,"props":4167,"children":4168},{"style":784},[4169],{"type":54,"value":4094},{"type":48,"tag":777,"props":4171,"children":4172},{"style":839},[4173],{"type":54,"value":2961},{"type":48,"tag":777,"props":4175,"children":4176},{"style":790},[4177],{"type":54,"value":886},{"type":48,"tag":57,"props":4179,"children":4180},{},[4181,4183,4188,4190,4195,4197,4202],{"type":54,"value":4182},"Grant the least privilege the collector needs to create and write the ",{"type":48,"tag":70,"props":4184,"children":4186},{"className":4185},[],[4187],{"type":54,"value":183},{"type":54,"value":4189}," schema. On the\ncurrent image the schema migrations and their version table also live in ",{"type":48,"tag":70,"props":4191,"children":4193},{"className":4192},[],[4194],{"type":54,"value":196},{"type":54,"value":4196},", so ",{"type":48,"tag":70,"props":4198,"children":4200},{"className":4199},[],[4201],{"type":54,"value":183},{"type":54,"value":4203}," is\nsufficient (this statement carries no secret):",{"type":48,"tag":766,"props":4205,"children":4207},{"className":768,"code":4206,"language":770,"meta":771,"style":771},"clickhousectl cloud service query --id \"$SERVICE_ID\" --query \\\n  \"GRANT SELECT, INSERT, CREATE DATABASE, CREATE TABLE, CREATE VIEW ON otel.* TO hyperdx_ingest\"\n",[4208],{"type":48,"tag":70,"props":4209,"children":4210},{"__ignoreMap":771},[4211,4254],{"type":48,"tag":777,"props":4212,"children":4213},{"class":779,"line":780},[4214,4218,4222,4226,4230,4234,4238,4242,4246,4250],{"type":48,"tag":777,"props":4215,"children":4216},{"style":833},[4217],{"type":54,"value":75},{"type":48,"tag":777,"props":4219,"children":4220},{"style":839},[4221],{"type":54,"value":1867},{"type":48,"tag":777,"props":4223,"children":4224},{"style":839},[4225],{"type":54,"value":2160},{"type":48,"tag":777,"props":4227,"children":4228},{"style":839},[4229],{"type":54,"value":3538},{"type":48,"tag":777,"props":4231,"children":4232},{"style":839},[4233],{"type":54,"value":3543},{"type":48,"tag":777,"props":4235,"children":4236},{"style":790},[4237],{"type":54,"value":847},{"type":48,"tag":777,"props":4239,"children":4240},{"style":784},[4241],{"type":54,"value":3313},{"type":48,"tag":777,"props":4243,"children":4244},{"style":790},[4245],{"type":54,"value":857},{"type":48,"tag":777,"props":4247,"children":4248},{"style":839},[4249],{"type":54,"value":3560},{"type":48,"tag":777,"props":4251,"children":4252},{"style":784},[4253],{"type":54,"value":2913},{"type":48,"tag":777,"props":4255,"children":4256},{"class":779,"line":829},[4257,4261,4266],{"type":48,"tag":777,"props":4258,"children":4259},{"style":790},[4260],{"type":54,"value":4084},{"type":48,"tag":777,"props":4262,"children":4263},{"style":839},[4264],{"type":54,"value":4265},"GRANT SELECT, INSERT, CREATE DATABASE, CREATE TABLE, CREATE VIEW ON otel.* TO hyperdx_ingest",{"type":48,"tag":777,"props":4267,"children":4268},{"style":790},[4269],{"type":54,"value":886},{"type":48,"tag":1924,"props":4271,"children":4272},{},[4273,4321],{"type":48,"tag":57,"props":4274,"children":4275},{},[4276,4281,4283,4289,4291,4297,4299,4305,4307,4312,4314,4319],{"type":48,"tag":82,"props":4277,"children":4278},{},[4279],{"type":54,"value":4280},"Older image builds:",{"type":54,"value":4282}," some earlier collector versions ran their goose migrations against a\nversion table in the ",{"type":48,"tag":70,"props":4284,"children":4286},{"className":4285},[],[4287],{"type":54,"value":4288},"default",{"type":54,"value":4290}," database, so startup looped on ",{"type":48,"tag":70,"props":4292,"children":4294},{"className":4293},[],[4295],{"type":54,"value":4296},"ACCESS_DENIED",{"type":54,"value":4298}," until ",{"type":48,"tag":70,"props":4300,"children":4302},{"className":4301},[],[4303],{"type":54,"value":4304},"default.*",{"type":54,"value":4306},"\nwas also granted. If you see ",{"type":48,"tag":70,"props":4308,"children":4310},{"className":4309},[],[4311],{"type":54,"value":4296},{"type":54,"value":4313}," referencing ",{"type":48,"tag":70,"props":4315,"children":4317},{"className":4316},[],[4318],{"type":54,"value":4288},{"type":54,"value":4320}," in the collector logs\n(Step 6), add this and restart the container:",{"type":48,"tag":766,"props":4322,"children":4324},{"className":768,"code":4323,"language":770,"meta":771,"style":771},"clickhousectl cloud service query --id \"$SERVICE_ID\" --query \\\n  \"GRANT SELECT, INSERT, CREATE TABLE ON default.* TO hyperdx_ingest\"\n",[4325],{"type":48,"tag":70,"props":4326,"children":4327},{"__ignoreMap":771},[4328,4371],{"type":48,"tag":777,"props":4329,"children":4330},{"class":779,"line":780},[4331,4335,4339,4343,4347,4351,4355,4359,4363,4367],{"type":48,"tag":777,"props":4332,"children":4333},{"style":833},[4334],{"type":54,"value":75},{"type":48,"tag":777,"props":4336,"children":4337},{"style":839},[4338],{"type":54,"value":1867},{"type":48,"tag":777,"props":4340,"children":4341},{"style":839},[4342],{"type":54,"value":2160},{"type":48,"tag":777,"props":4344,"children":4345},{"style":839},[4346],{"type":54,"value":3538},{"type":48,"tag":777,"props":4348,"children":4349},{"style":839},[4350],{"type":54,"value":3543},{"type":48,"tag":777,"props":4352,"children":4353},{"style":790},[4354],{"type":54,"value":847},{"type":48,"tag":777,"props":4356,"children":4357},{"style":784},[4358],{"type":54,"value":3313},{"type":48,"tag":777,"props":4360,"children":4361},{"style":790},[4362],{"type":54,"value":857},{"type":48,"tag":777,"props":4364,"children":4365},{"style":839},[4366],{"type":54,"value":3560},{"type":48,"tag":777,"props":4368,"children":4369},{"style":784},[4370],{"type":54,"value":2913},{"type":48,"tag":777,"props":4372,"children":4373},{"class":779,"line":829},[4374,4378,4383],{"type":48,"tag":777,"props":4375,"children":4376},{"style":790},[4377],{"type":54,"value":4084},{"type":48,"tag":777,"props":4379,"children":4380},{"style":839},[4381],{"type":54,"value":4382},"GRANT SELECT, INSERT, CREATE TABLE ON default.* TO hyperdx_ingest",{"type":48,"tag":777,"props":4384,"children":4385},{"style":790},[4386],{"type":54,"value":886},{"type":48,"tag":57,"props":4388,"children":4389},{},[4390],{"type":54,"value":4391},"Verify:",{"type":48,"tag":766,"props":4393,"children":4395},{"className":768,"code":4394,"language":770,"meta":771,"style":771},"clickhousectl cloud service query --id \"$SERVICE_ID\" --query \"SHOW GRANTS FOR hyperdx_ingest\"\n",[4396],{"type":48,"tag":70,"props":4397,"children":4398},{"__ignoreMap":771},[4399],{"type":48,"tag":777,"props":4400,"children":4401},{"class":779,"line":780},[4402,4406,4410,4414,4418,4422,4426,4430,4434,4438,4442,4447],{"type":48,"tag":777,"props":4403,"children":4404},{"style":833},[4405],{"type":54,"value":75},{"type":48,"tag":777,"props":4407,"children":4408},{"style":839},[4409],{"type":54,"value":1867},{"type":48,"tag":777,"props":4411,"children":4412},{"style":839},[4413],{"type":54,"value":2160},{"type":48,"tag":777,"props":4415,"children":4416},{"style":839},[4417],{"type":54,"value":3538},{"type":48,"tag":777,"props":4419,"children":4420},{"style":839},[4421],{"type":54,"value":3543},{"type":48,"tag":777,"props":4423,"children":4424},{"style":790},[4425],{"type":54,"value":847},{"type":48,"tag":777,"props":4427,"children":4428},{"style":784},[4429],{"type":54,"value":3313},{"type":48,"tag":777,"props":4431,"children":4432},{"style":790},[4433],{"type":54,"value":857},{"type":48,"tag":777,"props":4435,"children":4436},{"style":839},[4437],{"type":54,"value":3560},{"type":48,"tag":777,"props":4439,"children":4440},{"style":790},[4441],{"type":54,"value":847},{"type":48,"tag":777,"props":4443,"children":4444},{"style":839},[4445],{"type":54,"value":4446},"SHOW GRANTS FOR hyperdx_ingest",{"type":48,"tag":777,"props":4448,"children":4449},{"style":790},[4450],{"type":54,"value":886},{"type":48,"tag":57,"props":4452,"children":4453},{},[4454,4456,4461],{"type":54,"value":4455},"You should see ",{"type":48,"tag":70,"props":4457,"children":4459},{"className":4458},[],[4460],{"type":54,"value":4265},{"type":54,"value":731},{"type":48,"tag":266,"props":4463,"children":4464},{},[],{"type":48,"tag":270,"props":4466,"children":4468},{"id":4467},"step-6-set-up-the-collector",[4469],{"type":54,"value":4470},"Step 6: Set up the collector",{"type":48,"tag":57,"props":4472,"children":4473},{},[4474,4476,4481,4483,4487,4489,4494,4495,4500,4501,4506],{"type":54,"value":4475},"Follow the sub-section that matches the path and mode you chose in Step 0. All three converge on\nthe same end state: a collector accepting OTLP and writing into the ",{"type":48,"tag":70,"props":4477,"children":4479},{"className":4478},[],[4480],{"type":54,"value":196},{"type":54,"value":4482}," database on the service.\nEvery code block in this step assumes you have run the ",{"type":48,"tag":82,"props":4484,"children":4485},{},[4486],{"type":54,"value":1468},{"type":54,"value":4488}," (Step 2) first, so\n",{"type":48,"tag":70,"props":4490,"children":4492},{"className":4491},[],[4493],{"type":54,"value":852},{"type":54,"value":1238},{"type":48,"tag":70,"props":4496,"children":4498},{"className":4497},[],[4499],{"type":54,"value":1147},{"type":54,"value":1238},{"type":48,"tag":70,"props":4502,"children":4504},{"className":4503},[],[4505],{"type":54,"value":3313},{"type":54,"value":4507},", and the secrets are set in the shell.",{"type":48,"tag":57,"props":4509,"children":4510},{},[4511],{"type":54,"value":4512},"Make sure Docker is running (new-collector path only):",{"type":48,"tag":766,"props":4514,"children":4516},{"className":768,"code":4515,"language":770,"meta":771,"style":771},"WORKDIR=\"${WORKDIR:-$HOME\u002Fclickstack-otel-collector}\"; ENV_FILE=\"$WORKDIR\u002Fcollector.env\"\n[ -f \"$WORKDIR\u002Fcreds.env\" ] && . \"$WORKDIR\u002Fcreds.env\"; set -a; . \"$ENV_FILE\"; set +a\ndocker info > \u002Fdev\u002Fnull\n",[4517],{"type":48,"tag":70,"props":4518,"children":4519},{"__ignoreMap":771},[4520,4587,4686],{"type":48,"tag":777,"props":4521,"children":4522},{"class":779,"line":780},[4523,4527,4531,4535,4539,4543,4547,4551,4555,4559,4563,4567,4571,4575,4579,4583],{"type":48,"tag":777,"props":4524,"children":4525},{"style":784},[4526],{"type":54,"value":787},{"type":48,"tag":777,"props":4528,"children":4529},{"style":790},[4530],{"type":54,"value":793},{"type":48,"tag":777,"props":4532,"children":4533},{"style":790},[4534],{"type":54,"value":798},{"type":48,"tag":777,"props":4536,"children":4537},{"style":784},[4538],{"type":54,"value":787},{"type":48,"tag":777,"props":4540,"children":4541},{"style":790},[4542],{"type":54,"value":807},{"type":48,"tag":777,"props":4544,"children":4545},{"style":784},[4546],{"type":54,"value":812},{"type":48,"tag":777,"props":4548,"children":4549},{"style":790},[4550],{"type":54,"value":817},{"type":48,"tag":777,"props":4552,"children":4553},{"style":784},[4554],{"type":54,"value":4},{"type":48,"tag":777,"props":4556,"children":4557},{"style":790},[4558],{"type":54,"value":1517},{"type":48,"tag":777,"props":4560,"children":4561},{"style":790},[4562],{"type":54,"value":1522},{"type":48,"tag":777,"props":4564,"children":4565},{"style":784},[4566],{"type":54,"value":1527},{"type":48,"tag":777,"props":4568,"children":4569},{"style":790},[4570],{"type":54,"value":793},{"type":48,"tag":777,"props":4572,"children":4573},{"style":790},[4574],{"type":54,"value":857},{"type":48,"tag":777,"props":4576,"children":4577},{"style":784},[4578],{"type":54,"value":852},{"type":48,"tag":777,"props":4580,"children":4581},{"style":839},[4582],{"type":54,"value":912},{"type":48,"tag":777,"props":4584,"children":4585},{"style":790},[4586],{"type":54,"value":886},{"type":48,"tag":777,"props":4588,"children":4589},{"class":779,"line":829},[4590,4594,4598,4602,4606,4610,4614,4618,4622,4626,4630,4634,4638,4642,4646,4650,4654,4658,4662,4666,4670,4674,4678,4682],{"type":48,"tag":777,"props":4591,"children":4592},{"style":790},[4593],{"type":54,"value":1555},{"type":48,"tag":777,"props":4595,"children":4596},{"style":790},[4597],{"type":54,"value":1560},{"type":48,"tag":777,"props":4599,"children":4600},{"style":790},[4601],{"type":54,"value":847},{"type":48,"tag":777,"props":4603,"children":4604},{"style":784},[4605],{"type":54,"value":852},{"type":48,"tag":777,"props":4607,"children":4608},{"style":839},[4609],{"type":54,"value":1573},{"type":48,"tag":777,"props":4611,"children":4612},{"style":790},[4613],{"type":54,"value":857},{"type":48,"tag":777,"props":4615,"children":4616},{"style":790},[4617],{"type":54,"value":1582},{"type":48,"tag":777,"props":4619,"children":4620},{"style":790},[4621],{"type":54,"value":862},{"type":48,"tag":777,"props":4623,"children":4624},{"style":948},[4625],{"type":54,"value":1591},{"type":48,"tag":777,"props":4627,"children":4628},{"style":790},[4629],{"type":54,"value":847},{"type":48,"tag":777,"props":4631,"children":4632},{"style":784},[4633],{"type":54,"value":852},{"type":48,"tag":777,"props":4635,"children":4636},{"style":839},[4637],{"type":54,"value":1573},{"type":48,"tag":777,"props":4639,"children":4640},{"style":790},[4641],{"type":54,"value":857},{"type":48,"tag":777,"props":4643,"children":4644},{"style":790},[4645],{"type":54,"value":1522},{"type":48,"tag":777,"props":4647,"children":4648},{"style":948},[4649],{"type":54,"value":1616},{"type":48,"tag":777,"props":4651,"children":4652},{"style":839},[4653],{"type":54,"value":1621},{"type":48,"tag":777,"props":4655,"children":4656},{"style":790},[4657],{"type":54,"value":1522},{"type":48,"tag":777,"props":4659,"children":4660},{"style":948},[4661],{"type":54,"value":1591},{"type":48,"tag":777,"props":4663,"children":4664},{"style":790},[4665],{"type":54,"value":847},{"type":48,"tag":777,"props":4667,"children":4668},{"style":784},[4669],{"type":54,"value":1147},{"type":48,"tag":777,"props":4671,"children":4672},{"style":790},[4673],{"type":54,"value":857},{"type":48,"tag":777,"props":4675,"children":4676},{"style":790},[4677],{"type":54,"value":1522},{"type":48,"tag":777,"props":4679,"children":4680},{"style":948},[4681],{"type":54,"value":1616},{"type":48,"tag":777,"props":4683,"children":4684},{"style":839},[4685],{"type":54,"value":1654},{"type":48,"tag":777,"props":4687,"children":4688},{"class":779,"line":889},[4689,4693,4698,4702],{"type":48,"tag":777,"props":4690,"children":4691},{"style":833},[4692],{"type":54,"value":114},{"type":48,"tag":777,"props":4694,"children":4695},{"style":839},[4696],{"type":54,"value":4697}," info",{"type":48,"tag":777,"props":4699,"children":4700},{"style":790},[4701],{"type":54,"value":1138},{"type":48,"tag":777,"props":4703,"children":4704},{"style":839},[4705],{"type":54,"value":4706}," \u002Fdev\u002Fnull\n",{"type":48,"tag":4708,"props":4709,"children":4711},"h3",{"id":4710},"step-6a-new-collector-with-docker-compose-deploy_modecompose",[4712,4714,4720],{"type":54,"value":4713},"Step 6a: New collector with Docker Compose (",{"type":48,"tag":70,"props":4715,"children":4717},{"className":4716},[],[4718],{"type":54,"value":4719},"DEPLOY_MODE=compose",{"type":54,"value":1094},{"type":48,"tag":57,"props":4722,"children":4723},{},[4724,4726,4731],{"type":54,"value":4725},"Write a Compose file in the working directory. It reads the same ",{"type":48,"tag":70,"props":4727,"children":4729},{"className":4728},[],[4730],{"type":54,"value":1697},{"type":54,"value":4732}," for secrets,\npublishes the OTLP and health ports, and pins a named network so the telemetry generator in Step 7\ncan reach the collector by container name:",{"type":48,"tag":766,"props":4734,"children":4736},{"className":768,"code":4735,"language":770,"meta":771,"style":771},"cat > \"$WORKDIR\u002Fdocker-compose.yaml\" \u003C\u003C'EOF'\nname: clickstack\nservices:\n  otel-collector:\n    image: clickhouse\u002Fclickstack-otel-collector:latest\n    container_name: clickstack-otel-collector\n    env_file: .\u002Fcollector.env\n    ports:\n      - \"4317:4317\"   # OTLP gRPC\n      - \"4318:4318\"   # OTLP HTTP\n      - \"13133:13133\" # health\n    restart: unless-stopped\n    networks: [clickstack-net]\nnetworks:\n  clickstack-net:\n    name: clickstack-net\nEOF\n\n# Compose refuses to adopt a clickstack-net it did not create (a leftover from the docker run\n# path, a prior failed Compose run, or a DEPLOY_MODE switch), failing with \"network clickstack-net\n# was found but has incorrect label\". If an orphan exists with no containers attached, remove it so\n# Compose can recreate it with its own labels.\nif docker network inspect clickstack-net >\u002Fdev\u002Fnull 2>&1 \\\n   && [ -z \"$(docker network inspect clickstack-net -f '{{range .Containers}}{{.Name}} {{end}}')\" ]; then\n  docker network rm clickstack-net\nfi\n\n( cd \"$WORKDIR\" && docker compose up -d )\n",[4737],{"type":48,"tag":70,"props":4738,"children":4739},{"__ignoreMap":771},[4740,4779,4787,4795,4803,4811,4819,4827,4835,4843,4851,4859,4867,4875,4883,4891,4899,4908,4916,4925,4934,4943,4952,5000,5057,5080,5089,5097],{"type":48,"tag":777,"props":4741,"children":4742},{"class":779,"line":780},[4743,4748,4752,4756,4760,4765,4769,4774],{"type":48,"tag":777,"props":4744,"children":4745},{"style":833},[4746],{"type":54,"value":4747},"cat",{"type":48,"tag":777,"props":4749,"children":4750},{"style":790},[4751],{"type":54,"value":1138},{"type":48,"tag":777,"props":4753,"children":4754},{"style":790},[4755],{"type":54,"value":847},{"type":48,"tag":777,"props":4757,"children":4758},{"style":784},[4759],{"type":54,"value":852},{"type":48,"tag":777,"props":4761,"children":4762},{"style":839},[4763],{"type":54,"value":4764},"\u002Fdocker-compose.yaml",{"type":48,"tag":777,"props":4766,"children":4767},{"style":790},[4768],{"type":54,"value":857},{"type":48,"tag":777,"props":4770,"children":4771},{"style":790},[4772],{"type":54,"value":4773}," \u003C\u003C",{"type":48,"tag":777,"props":4775,"children":4776},{"style":790},[4777],{"type":54,"value":4778},"'EOF'\n",{"type":48,"tag":777,"props":4780,"children":4781},{"class":779,"line":829},[4782],{"type":48,"tag":777,"props":4783,"children":4784},{"style":839},[4785],{"type":54,"value":4786},"name: clickstack\n",{"type":48,"tag":777,"props":4788,"children":4789},{"class":779,"line":889},[4790],{"type":48,"tag":777,"props":4791,"children":4792},{"style":839},[4793],{"type":54,"value":4794},"services:\n",{"type":48,"tag":777,"props":4796,"children":4797},{"class":779,"line":919},[4798],{"type":48,"tag":777,"props":4799,"children":4800},{"style":839},[4801],{"type":54,"value":4802},"  otel-collector:\n",{"type":48,"tag":777,"props":4804,"children":4805},{"class":779,"line":929},[4806],{"type":48,"tag":777,"props":4807,"children":4808},{"style":839},[4809],{"type":54,"value":4810},"    image: clickhouse\u002Fclickstack-otel-collector:latest\n",{"type":48,"tag":777,"props":4812,"children":4813},{"class":779,"line":939},[4814],{"type":48,"tag":777,"props":4815,"children":4816},{"style":839},[4817],{"type":54,"value":4818},"    container_name: clickstack-otel-collector\n",{"type":48,"tag":777,"props":4820,"children":4821},{"class":779,"line":959},[4822],{"type":48,"tag":777,"props":4823,"children":4824},{"style":839},[4825],{"type":54,"value":4826},"    env_file: .\u002Fcollector.env\n",{"type":48,"tag":777,"props":4828,"children":4829},{"class":779,"line":968},[4830],{"type":48,"tag":777,"props":4831,"children":4832},{"style":839},[4833],{"type":54,"value":4834},"    ports:\n",{"type":48,"tag":777,"props":4836,"children":4837},{"class":779,"line":995},[4838],{"type":48,"tag":777,"props":4839,"children":4840},{"style":839},[4841],{"type":54,"value":4842},"      - \"4317:4317\"   # OTLP gRPC\n",{"type":48,"tag":777,"props":4844,"children":4845},{"class":779,"line":1037},[4846],{"type":48,"tag":777,"props":4847,"children":4848},{"style":839},[4849],{"type":54,"value":4850},"      - \"4318:4318\"   # OTLP HTTP\n",{"type":48,"tag":777,"props":4852,"children":4853},{"class":779,"line":1058},[4854],{"type":48,"tag":777,"props":4855,"children":4856},{"style":839},[4857],{"type":54,"value":4858},"      - \"13133:13133\" # health\n",{"type":48,"tag":777,"props":4860,"children":4861},{"class":779,"line":1106},[4862],{"type":48,"tag":777,"props":4863,"children":4864},{"style":839},[4865],{"type":54,"value":4866},"    restart: unless-stopped\n",{"type":48,"tag":777,"props":4868,"children":4869},{"class":779,"line":1127},[4870],{"type":48,"tag":777,"props":4871,"children":4872},{"style":839},[4873],{"type":54,"value":4874},"    networks: [clickstack-net]\n",{"type":48,"tag":777,"props":4876,"children":4877},{"class":779,"line":1154},[4878],{"type":48,"tag":777,"props":4879,"children":4880},{"style":839},[4881],{"type":54,"value":4882},"networks:\n",{"type":48,"tag":777,"props":4884,"children":4885},{"class":779,"line":1163},[4886],{"type":48,"tag":777,"props":4887,"children":4888},{"style":839},[4889],{"type":54,"value":4890},"  clickstack-net:\n",{"type":48,"tag":777,"props":4892,"children":4893},{"class":779,"line":1189},[4894],{"type":48,"tag":777,"props":4895,"children":4896},{"style":839},[4897],{"type":54,"value":4898},"    name: clickstack-net\n",{"type":48,"tag":777,"props":4900,"children":4902},{"class":779,"line":4901},17,[4903],{"type":48,"tag":777,"props":4904,"children":4905},{"style":790},[4906],{"type":54,"value":4907},"EOF\n",{"type":48,"tag":777,"props":4909,"children":4911},{"class":779,"line":4910},18,[4912],{"type":48,"tag":777,"props":4913,"children":4914},{"emptyLinePlaceholder":923},[4915],{"type":54,"value":926},{"type":48,"tag":777,"props":4917,"children":4919},{"class":779,"line":4918},19,[4920],{"type":48,"tag":777,"props":4921,"children":4922},{"style":933},[4923],{"type":54,"value":4924},"# Compose refuses to adopt a clickstack-net it did not create (a leftover from the docker run\n",{"type":48,"tag":777,"props":4926,"children":4928},{"class":779,"line":4927},20,[4929],{"type":48,"tag":777,"props":4930,"children":4931},{"style":933},[4932],{"type":54,"value":4933},"# path, a prior failed Compose run, or a DEPLOY_MODE switch), failing with \"network clickstack-net\n",{"type":48,"tag":777,"props":4935,"children":4937},{"class":779,"line":4936},21,[4938],{"type":48,"tag":777,"props":4939,"children":4940},{"style":933},[4941],{"type":54,"value":4942},"# was found but has incorrect label\". If an orphan exists with no containers attached, remove it so\n",{"type":48,"tag":777,"props":4944,"children":4946},{"class":779,"line":4945},22,[4947],{"type":48,"tag":777,"props":4948,"children":4949},{"style":933},[4950],{"type":54,"value":4951},"# Compose can recreate it with its own labels.\n",{"type":48,"tag":777,"props":4953,"children":4955},{"class":779,"line":4954},23,[4956,4962,4967,4972,4977,4982,4986,4991,4996],{"type":48,"tag":777,"props":4957,"children":4959},{"style":4958},"--shiki-light:#39ADB5;--shiki-light-font-style:italic;--shiki-default:#89DDFF;--shiki-default-font-style:italic;--shiki-dark:#89DDFF;--shiki-dark-font-style:italic",[4960],{"type":54,"value":4961},"if",{"type":48,"tag":777,"props":4963,"children":4964},{"style":833},[4965],{"type":54,"value":4966}," docker",{"type":48,"tag":777,"props":4968,"children":4969},{"style":839},[4970],{"type":54,"value":4971}," network",{"type":48,"tag":777,"props":4973,"children":4974},{"style":839},[4975],{"type":54,"value":4976}," inspect",{"type":48,"tag":777,"props":4978,"children":4979},{"style":839},[4980],{"type":54,"value":4981}," clickstack-net",{"type":48,"tag":777,"props":4983,"children":4984},{"style":790},[4985],{"type":54,"value":1138},{"type":48,"tag":777,"props":4987,"children":4988},{"style":839},[4989],{"type":54,"value":4990},"\u002Fdev\u002Fnull",{"type":48,"tag":777,"props":4992,"children":4993},{"style":790},[4994],{"type":54,"value":4995}," 2>&1",{"type":48,"tag":777,"props":4997,"children":4998},{"style":784},[4999],{"type":54,"value":2913},{"type":48,"tag":777,"props":5001,"children":5003},{"class":779,"line":5002},24,[5004,5009,5014,5019,5024,5028,5033,5037,5042,5047,5052],{"type":48,"tag":777,"props":5005,"children":5006},{"style":790},[5007],{"type":54,"value":5008},"   &&",{"type":48,"tag":777,"props":5010,"children":5011},{"style":790},[5012],{"type":54,"value":5013}," [",{"type":48,"tag":777,"props":5015,"children":5016},{"style":790},[5017],{"type":54,"value":5018}," -z",{"type":48,"tag":777,"props":5020,"children":5021},{"style":790},[5022],{"type":54,"value":5023}," \"$(",{"type":48,"tag":777,"props":5025,"children":5026},{"style":833},[5027],{"type":54,"value":114},{"type":48,"tag":777,"props":5029,"children":5030},{"style":839},[5031],{"type":54,"value":5032}," network inspect clickstack-net -f ",{"type":48,"tag":777,"props":5034,"children":5035},{"style":790},[5036],{"type":54,"value":2961},{"type":48,"tag":777,"props":5038,"children":5039},{"style":839},[5040],{"type":54,"value":5041},"{{range .Containers}}{{.Name}} {{end}}",{"type":48,"tag":777,"props":5043,"children":5044},{"style":790},[5045],{"type":54,"value":5046},"')\"",{"type":48,"tag":777,"props":5048,"children":5049},{"style":790},[5050],{"type":54,"value":5051}," ];",{"type":48,"tag":777,"props":5053,"children":5054},{"style":4958},[5055],{"type":54,"value":5056}," then\n",{"type":48,"tag":777,"props":5058,"children":5060},{"class":779,"line":5059},25,[5061,5066,5070,5075],{"type":48,"tag":777,"props":5062,"children":5063},{"style":833},[5064],{"type":54,"value":5065},"  docker",{"type":48,"tag":777,"props":5067,"children":5068},{"style":839},[5069],{"type":54,"value":4971},{"type":48,"tag":777,"props":5071,"children":5072},{"style":839},[5073],{"type":54,"value":5074}," rm",{"type":48,"tag":777,"props":5076,"children":5077},{"style":839},[5078],{"type":54,"value":5079}," clickstack-net\n",{"type":48,"tag":777,"props":5081,"children":5083},{"class":779,"line":5082},26,[5084],{"type":48,"tag":777,"props":5085,"children":5086},{"style":4958},[5087],{"type":54,"value":5088},"fi\n",{"type":48,"tag":777,"props":5090,"children":5092},{"class":779,"line":5091},27,[5093],{"type":48,"tag":777,"props":5094,"children":5095},{"emptyLinePlaceholder":923},[5096],{"type":54,"value":926},{"type":48,"tag":777,"props":5098,"children":5100},{"class":779,"line":5099},28,[5101,5105,5110,5114,5118,5122,5126,5130,5135,5140,5145],{"type":48,"tag":777,"props":5102,"children":5103},{"style":790},[5104],{"type":54,"value":945},{"type":48,"tag":777,"props":5106,"children":5107},{"style":948},[5108],{"type":54,"value":5109}," cd",{"type":48,"tag":777,"props":5111,"children":5112},{"style":790},[5113],{"type":54,"value":847},{"type":48,"tag":777,"props":5115,"children":5116},{"style":784},[5117],{"type":54,"value":852},{"type":48,"tag":777,"props":5119,"children":5120},{"style":790},[5121],{"type":54,"value":857},{"type":48,"tag":777,"props":5123,"children":5124},{"style":790},[5125],{"type":54,"value":862},{"type":48,"tag":777,"props":5127,"children":5128},{"style":833},[5129],{"type":54,"value":4966},{"type":48,"tag":777,"props":5131,"children":5132},{"style":839},[5133],{"type":54,"value":5134}," compose",{"type":48,"tag":777,"props":5136,"children":5137},{"style":839},[5138],{"type":54,"value":5139}," up",{"type":48,"tag":777,"props":5141,"children":5142},{"style":839},[5143],{"type":54,"value":5144}," -d",{"type":48,"tag":777,"props":5146,"children":5147},{"style":790},[5148],{"type":54,"value":5149}," )\n",{"type":48,"tag":57,"props":5151,"children":5152},{},[5153,5155,5161,5163,5168],{"type":54,"value":5154},"Compose creates the ",{"type":48,"tag":70,"props":5156,"children":5158},{"className":5157},[],[5159],{"type":54,"value":5160},"clickstack-net",{"type":54,"value":5162}," network for you (the guard above clears an orphaned one from a\nprior run first). Skip to ",{"type":48,"tag":82,"props":5164,"children":5165},{},[5166],{"type":54,"value":5167},"Step 6d",{"type":54,"value":5169}," to confirm health.",{"type":48,"tag":4708,"props":5171,"children":5173},{"id":5172},"step-6b-new-collector-with-individual-docker-commands-deploy_moderun",[5174,5176,5182],{"type":54,"value":5175},"Step 6b: New collector with individual Docker commands (",{"type":48,"tag":70,"props":5177,"children":5179},{"className":5178},[],[5180],{"type":54,"value":5181},"DEPLOY_MODE=run",{"type":54,"value":1094},{"type":48,"tag":57,"props":5184,"children":5185},{},[5186],{"type":54,"value":5187},"Create a user-defined network so the telemetry generator in Step 7 can reach the collector by\ncontainer name:",{"type":48,"tag":766,"props":5189,"children":5191},{"className":768,"code":5190,"language":770,"meta":771,"style":771},"docker network create clickstack-net 2>\u002Fdev\u002Fnull || true\n",[5192],{"type":48,"tag":70,"props":5193,"children":5194},{"__ignoreMap":771},[5195],{"type":48,"tag":777,"props":5196,"children":5197},{"class":779,"line":780},[5198,5202,5206,5211,5215,5220,5224,5228],{"type":48,"tag":777,"props":5199,"children":5200},{"style":833},[5201],{"type":54,"value":114},{"type":48,"tag":777,"props":5203,"children":5204},{"style":839},[5205],{"type":54,"value":4971},{"type":48,"tag":777,"props":5207,"children":5208},{"style":839},[5209],{"type":54,"value":5210}," create",{"type":48,"tag":777,"props":5212,"children":5213},{"style":839},[5214],{"type":54,"value":4981},{"type":48,"tag":777,"props":5216,"children":5217},{"style":790},[5218],{"type":54,"value":5219}," 2>",{"type":48,"tag":777,"props":5221,"children":5222},{"style":839},[5223],{"type":54,"value":4990},{"type":48,"tag":777,"props":5225,"children":5226},{"style":790},[5227],{"type":54,"value":3295},{"type":48,"tag":777,"props":5229,"children":5230},{"style":948},[5231],{"type":54,"value":5232}," true\n",{"type":48,"tag":57,"props":5234,"children":5235},{},[5236,5238,5248,5250,5256,5258,5263,5265,5271],{"type":54,"value":5237},"Start the collector, passing ",{"type":48,"tag":82,"props":5239,"children":5240},{},[5241,5243],{"type":54,"value":5242},"all secrets via ",{"type":48,"tag":70,"props":5244,"children":5246},{"className":5245},[],[5247],{"type":54,"value":249},{"type":54,"value":5249}," (never ",{"type":48,"tag":70,"props":5251,"children":5253},{"className":5252},[],[5254],{"type":54,"value":5255},"-e",{"type":54,"value":5257},", which would put the\nsecret on the command line, in shell history, and in ",{"type":48,"tag":70,"props":5259,"children":5261},{"className":5260},[],[5262],{"type":54,"value":3705},{"type":54,"value":5264},"). The ",{"type":48,"tag":70,"props":5266,"children":5268},{"className":5267},[],[5269],{"type":54,"value":5270},"docker rm -f",{"type":54,"value":5272}," first makes the step\nsafe to re-run:",{"type":48,"tag":766,"props":5274,"children":5276},{"className":768,"code":5275,"language":770,"meta":771,"style":771},"docker rm -f clickstack-otel-collector 2>\u002Fdev\u002Fnull || true\ndocker run -d \\\n  --name clickstack-otel-collector \\\n  --network clickstack-net \\\n  --env-file \"$ENV_FILE\" \\\n  -p 4317:4317 \\\n  -p 4318:4318 \\\n  -p 13133:13133 \\\n  clickhouse\u002Fclickstack-otel-collector:latest\n",[5277],{"type":48,"tag":70,"props":5278,"children":5279},{"__ignoreMap":771},[5280,5316,5336,5352,5368,5392,5409,5425,5441],{"type":48,"tag":777,"props":5281,"children":5282},{"class":779,"line":780},[5283,5287,5291,5295,5300,5304,5308,5312],{"type":48,"tag":777,"props":5284,"children":5285},{"style":833},[5286],{"type":54,"value":114},{"type":48,"tag":777,"props":5288,"children":5289},{"style":839},[5290],{"type":54,"value":5074},{"type":48,"tag":777,"props":5292,"children":5293},{"style":839},[5294],{"type":54,"value":1560},{"type":48,"tag":777,"props":5296,"children":5297},{"style":839},[5298],{"type":54,"value":5299}," clickstack-otel-collector",{"type":48,"tag":777,"props":5301,"children":5302},{"style":790},[5303],{"type":54,"value":5219},{"type":48,"tag":777,"props":5305,"children":5306},{"style":839},[5307],{"type":54,"value":4990},{"type":48,"tag":777,"props":5309,"children":5310},{"style":790},[5311],{"type":54,"value":3295},{"type":48,"tag":777,"props":5313,"children":5314},{"style":948},[5315],{"type":54,"value":5232},{"type":48,"tag":777,"props":5317,"children":5318},{"class":779,"line":829},[5319,5323,5328,5332],{"type":48,"tag":777,"props":5320,"children":5321},{"style":833},[5322],{"type":54,"value":114},{"type":48,"tag":777,"props":5324,"children":5325},{"style":839},[5326],{"type":54,"value":5327}," run",{"type":48,"tag":777,"props":5329,"children":5330},{"style":839},[5331],{"type":54,"value":5144},{"type":48,"tag":777,"props":5333,"children":5334},{"style":784},[5335],{"type":54,"value":2913},{"type":48,"tag":777,"props":5337,"children":5338},{"class":779,"line":889},[5339,5344,5348],{"type":48,"tag":777,"props":5340,"children":5341},{"style":839},[5342],{"type":54,"value":5343},"  --name",{"type":48,"tag":777,"props":5345,"children":5346},{"style":839},[5347],{"type":54,"value":5299},{"type":48,"tag":777,"props":5349,"children":5350},{"style":784},[5351],{"type":54,"value":2913},{"type":48,"tag":777,"props":5353,"children":5354},{"class":779,"line":919},[5355,5360,5364],{"type":48,"tag":777,"props":5356,"children":5357},{"style":839},[5358],{"type":54,"value":5359},"  --network",{"type":48,"tag":777,"props":5361,"children":5362},{"style":839},[5363],{"type":54,"value":4981},{"type":48,"tag":777,"props":5365,"children":5366},{"style":784},[5367],{"type":54,"value":2913},{"type":48,"tag":777,"props":5369,"children":5370},{"class":779,"line":929},[5371,5376,5380,5384,5388],{"type":48,"tag":777,"props":5372,"children":5373},{"style":839},[5374],{"type":54,"value":5375},"  --env-file",{"type":48,"tag":777,"props":5377,"children":5378},{"style":790},[5379],{"type":54,"value":847},{"type":48,"tag":777,"props":5381,"children":5382},{"style":784},[5383],{"type":54,"value":1147},{"type":48,"tag":777,"props":5385,"children":5386},{"style":790},[5387],{"type":54,"value":857},{"type":48,"tag":777,"props":5389,"children":5390},{"style":784},[5391],{"type":54,"value":2913},{"type":48,"tag":777,"props":5393,"children":5394},{"class":779,"line":939},[5395,5400,5405],{"type":48,"tag":777,"props":5396,"children":5397},{"style":839},[5398],{"type":54,"value":5399},"  -p",{"type":48,"tag":777,"props":5401,"children":5402},{"style":839},[5403],{"type":54,"value":5404}," 4317:4317",{"type":48,"tag":777,"props":5406,"children":5407},{"style":784},[5408],{"type":54,"value":2913},{"type":48,"tag":777,"props":5410,"children":5411},{"class":779,"line":959},[5412,5416,5421],{"type":48,"tag":777,"props":5413,"children":5414},{"style":839},[5415],{"type":54,"value":5399},{"type":48,"tag":777,"props":5417,"children":5418},{"style":839},[5419],{"type":54,"value":5420}," 4318:4318",{"type":48,"tag":777,"props":5422,"children":5423},{"style":784},[5424],{"type":54,"value":2913},{"type":48,"tag":777,"props":5426,"children":5427},{"class":779,"line":968},[5428,5432,5437],{"type":48,"tag":777,"props":5429,"children":5430},{"style":839},[5431],{"type":54,"value":5399},{"type":48,"tag":777,"props":5433,"children":5434},{"style":839},[5435],{"type":54,"value":5436}," 13133:13133",{"type":48,"tag":777,"props":5438,"children":5439},{"style":784},[5440],{"type":54,"value":2913},{"type":48,"tag":777,"props":5442,"children":5443},{"class":779,"line":995},[5444],{"type":48,"tag":777,"props":5445,"children":5446},{"style":839},[5447],{"type":54,"value":5448},"  clickhouse\u002Fclickstack-otel-collector:latest\n",{"type":48,"tag":57,"props":5450,"children":5451},{},[5452,5454,5459,5460,5465,5466,5471,5472,5477,5479,5484,5486,5492,5494,5500,5502,5506],{"type":54,"value":5453},"The image reads ",{"type":48,"tag":70,"props":5455,"children":5457},{"className":5456},[],[5458],{"type":54,"value":1417},{"type":54,"value":1238},{"type":48,"tag":70,"props":5461,"children":5463},{"className":5462},[],[5464],{"type":54,"value":1252},{"type":54,"value":1238},{"type":48,"tag":70,"props":5467,"children":5469},{"className":5468},[],[5470],{"type":54,"value":1236},{"type":54,"value":1238},{"type":48,"tag":70,"props":5473,"children":5475},{"className":5474},[],[5476],{"type":54,"value":1244},{"type":54,"value":5478},",\nand ",{"type":48,"tag":70,"props":5480,"children":5482},{"className":5481},[],[5483],{"type":54,"value":1260},{"type":54,"value":5485}," from the env file. It enables bearer-token auth on\nthe OTLP receiver with an empty scheme, so callers send the raw token as the ",{"type":48,"tag":70,"props":5487,"children":5489},{"className":5488},[],[5490],{"type":54,"value":5491},"authorization",{"type":54,"value":5493}," header\n(no ",{"type":48,"tag":70,"props":5495,"children":5497},{"className":5496},[],[5498],{"type":54,"value":5499},"Bearer ",{"type":54,"value":5501}," prefix). Continue to ",{"type":48,"tag":82,"props":5503,"children":5504},{},[5505],{"type":54,"value":5167},{"type":54,"value":731},{"type":48,"tag":4708,"props":5508,"children":5510},{"id":5509},"step-6c-configure-your-existing-collector-collector_pathexisting",[5511,5513,5519],{"type":54,"value":5512},"Step 6c: Configure your existing collector (",{"type":48,"tag":70,"props":5514,"children":5516},{"className":5515},[],[5517],{"type":54,"value":5518},"COLLECTOR_PATH=existing",{"type":54,"value":1094},{"type":48,"tag":57,"props":5521,"children":5522},{},[5523,5525,5531,5533,5538],{"type":54,"value":5524},"Add the ClickHouse exporter to your existing collector configuration. The config below matches the\nbehavior of the ClickStack distribution, including the Session Replay (",{"type":48,"tag":70,"props":5526,"children":5528},{"className":5527},[],[5529],{"type":54,"value":5530},"rrweb",{"type":54,"value":5532},") routing path, and\nwrites into the ",{"type":48,"tag":70,"props":5534,"children":5536},{"className":5535},[],[5537],{"type":54,"value":196},{"type":54,"value":5539}," database the ClickStack UI expects.",{"type":48,"tag":57,"props":5541,"children":5542},{},[5543,5556,5558,5564,5566,5571],{"type":48,"tag":82,"props":5544,"children":5545},{},[5546,5548,5554],{"type":54,"value":5547},"Reference the endpoint and password as environment variables (",{"type":48,"tag":70,"props":5549,"children":5551},{"className":5550},[],[5552],{"type":54,"value":5553},"${env:…}",{"type":54,"value":5555},"), do not hardcode them\ninto the config file.",{"type":54,"value":5557}," The contrib collector expands ",{"type":48,"tag":70,"props":5559,"children":5561},{"className":5560},[],[5562],{"type":54,"value":5563},"${env:VAR}",{"type":54,"value":5565}," at load time, so keeping the\nplaintext password out of the config file is both safer and consistent with the rest of this skill.\nStart your collector with the env vars available, the simplest way is the same ",{"type":48,"tag":70,"props":5567,"children":5569},{"className":5568},[],[5570],{"type":54,"value":249},{"type":54,"value":5572}," the\nlocal collector uses:",{"type":48,"tag":766,"props":5574,"children":5576},{"className":768,"code":5575,"language":770,"meta":771,"style":771},"# When running the contrib collector in Docker, pass collector.env so ${env:CLICKHOUSE_*} resolve:\n#   docker run -d --env-file \"$ENV_FILE\" -p 4317:4317 -p 4318:4318 \\\n#     -v \"$WORKDIR\u002Fyour-config.yaml:\u002Fetc\u002Fotelcol-contrib\u002Fconfig.yaml:ro\" \\\n#     otel\u002Fopentelemetry-collector-contrib:latest\n# For a non-Docker collector, export CLICKHOUSE_ENDPOINT and CLICKHOUSE_PASSWORD into its\n# environment (e.g. an EnvironmentFile= in the systemd unit) before it starts.\n",[5577],{"type":48,"tag":70,"props":5578,"children":5579},{"__ignoreMap":771},[5580,5588,5596,5604,5612,5620],{"type":48,"tag":777,"props":5581,"children":5582},{"class":779,"line":780},[5583],{"type":48,"tag":777,"props":5584,"children":5585},{"style":933},[5586],{"type":54,"value":5587},"# When running the contrib collector in Docker, pass collector.env so ${env:CLICKHOUSE_*} resolve:\n",{"type":48,"tag":777,"props":5589,"children":5590},{"class":779,"line":829},[5591],{"type":48,"tag":777,"props":5592,"children":5593},{"style":933},[5594],{"type":54,"value":5595},"#   docker run -d --env-file \"$ENV_FILE\" -p 4317:4317 -p 4318:4318 \\\n",{"type":48,"tag":777,"props":5597,"children":5598},{"class":779,"line":889},[5599],{"type":48,"tag":777,"props":5600,"children":5601},{"style":933},[5602],{"type":54,"value":5603},"#     -v \"$WORKDIR\u002Fyour-config.yaml:\u002Fetc\u002Fotelcol-contrib\u002Fconfig.yaml:ro\" \\\n",{"type":48,"tag":777,"props":5605,"children":5606},{"class":779,"line":919},[5607],{"type":48,"tag":777,"props":5608,"children":5609},{"style":933},[5610],{"type":54,"value":5611},"#     otel\u002Fopentelemetry-collector-contrib:latest\n",{"type":48,"tag":777,"props":5613,"children":5614},{"class":779,"line":929},[5615],{"type":48,"tag":777,"props":5616,"children":5617},{"style":933},[5618],{"type":54,"value":5619},"# For a non-Docker collector, export CLICKHOUSE_ENDPOINT and CLICKHOUSE_PASSWORD into its\n",{"type":48,"tag":777,"props":5621,"children":5622},{"class":779,"line":939},[5623],{"type":48,"tag":777,"props":5624,"children":5625},{"style":933},[5626],{"type":54,"value":5627},"# environment (e.g. an EnvironmentFile= in the systemd unit) before it starts.\n",{"type":48,"tag":57,"props":5629,"children":5630},{},[5631],{"type":54,"value":5632},"Add this to your collector config and reload it:",{"type":48,"tag":766,"props":5634,"children":5638},{"className":5635,"code":5636,"language":5637,"meta":771,"style":771},"language-yaml shiki shiki-themes material-theme-lighter material-theme material-theme-palenight","receivers:\n  otlp\u002Fhyperdx:\n    protocols:\n      grpc:\n        include_metadata: true\n        endpoint: \"0.0.0.0:4317\"\n      http:\n        cors:\n          allowed_origins: [\"*\"]\n          allowed_headers: [\"*\"]\n        include_metadata: true\n        endpoint: \"0.0.0.0:4318\"\n\nprocessors:\n  batch:\n  memory_limiter:\n    limit_mib: 1500\n    spike_limit_mib: 512\n    check_interval: 5s\n\nconnectors:\n  routing\u002Flogs:\n    default_pipelines: [logs\u002Fout-default]\n    error_mode: ignore\n    table:\n      - context: log\n        statement: route() where IsMatch(attributes[\"rr-web.event\"], \".*\")\n        pipelines: [logs\u002Fout-rrweb]\n\nexporters:\n  clickhouse:\n    database: otel\n    endpoint: ${env:CLICKHOUSE_ENDPOINT}\n    username: hyperdx_ingest\n    password: ${env:CLICKHOUSE_PASSWORD}\n    ttl: 720h\n    timeout: 5s\n    retry_on_failure:\n      enabled: true\n      initial_interval: 5s\n      max_interval: 30s\n      max_elapsed_time: 300s\n  clickhouse\u002Frrweb:\n    database: otel\n    endpoint: ${env:CLICKHOUSE_ENDPOINT}\n    username: hyperdx_ingest\n    password: ${env:CLICKHOUSE_PASSWORD}\n    ttl: 720h\n    logs_table_name: hyperdx_sessions\n    timeout: 5s\n    retry_on_failure:\n      enabled: true\n      initial_interval: 5s\n      max_interval: 30s\n      max_elapsed_time: 300s\n\nservice:\n  pipelines:\n    traces:\n      receivers: [otlp\u002Fhyperdx]\n      processors: [memory_limiter, batch]\n      exporters: [clickhouse]\n    metrics:\n      receivers: [otlp\u002Fhyperdx]\n      processors: [memory_limiter, batch]\n      exporters: [clickhouse]\n    logs\u002Fin:\n      receivers: [otlp\u002Fhyperdx]\n      exporters: [routing\u002Flogs]\n    logs\u002Fout-default:\n      receivers: [routing\u002Flogs]\n      processors: [memory_limiter, batch]\n      exporters: [clickhouse]\n    logs\u002Fout-rrweb:\n      receivers: [routing\u002Flogs]\n      processors: [memory_limiter, batch]\n      exporters: [clickhouse\u002Frrweb]\n","yaml",[5639],{"type":48,"tag":70,"props":5640,"children":5641},{"__ignoreMap":771},[5642,5656,5668,5680,5692,5709,5734,5746,5758,5792,5824,5839,5863,5870,5882,5894,5906,5923,5940,5957,5964,5976,5988,6013,6030,6042,6064,6081,6106,6114,6127,6140,6158,6176,6194,6212,6230,6247,6260,6277,6294,6312,6330,6343,6359,6375,6391,6407,6423,6441,6457,6469,6485,6501,6517,6533,6541,6554,6567,6580,6606,6642,6667,6680,6704,6736,6760,6773,6797,6822,6835,6859,6891,6915,6928,6952,6984],{"type":48,"tag":777,"props":5643,"children":5644},{"class":779,"line":780},[5645,5651],{"type":48,"tag":777,"props":5646,"children":5648},{"style":5647},"--shiki-light:#E53935;--shiki-default:#F07178;--shiki-dark:#F07178",[5649],{"type":54,"value":5650},"receivers",{"type":48,"tag":777,"props":5652,"children":5653},{"style":790},[5654],{"type":54,"value":5655},":\n",{"type":48,"tag":777,"props":5657,"children":5658},{"class":779,"line":829},[5659,5664],{"type":48,"tag":777,"props":5660,"children":5661},{"style":5647},[5662],{"type":54,"value":5663},"  otlp\u002Fhyperdx",{"type":48,"tag":777,"props":5665,"children":5666},{"style":790},[5667],{"type":54,"value":5655},{"type":48,"tag":777,"props":5669,"children":5670},{"class":779,"line":889},[5671,5676],{"type":48,"tag":777,"props":5672,"children":5673},{"style":5647},[5674],{"type":54,"value":5675},"    protocols",{"type":48,"tag":777,"props":5677,"children":5678},{"style":790},[5679],{"type":54,"value":5655},{"type":48,"tag":777,"props":5681,"children":5682},{"class":779,"line":919},[5683,5688],{"type":48,"tag":777,"props":5684,"children":5685},{"style":5647},[5686],{"type":54,"value":5687},"      grpc",{"type":48,"tag":777,"props":5689,"children":5690},{"style":790},[5691],{"type":54,"value":5655},{"type":48,"tag":777,"props":5693,"children":5694},{"class":779,"line":929},[5695,5700,5704],{"type":48,"tag":777,"props":5696,"children":5697},{"style":5647},[5698],{"type":54,"value":5699},"        include_metadata",{"type":48,"tag":777,"props":5701,"children":5702},{"style":790},[5703],{"type":54,"value":1313},{"type":48,"tag":777,"props":5705,"children":5707},{"style":5706},"--shiki-light:#FF5370;--shiki-default:#FF9CAC;--shiki-dark:#FF9CAC",[5708],{"type":54,"value":5232},{"type":48,"tag":777,"props":5710,"children":5711},{"class":779,"line":939},[5712,5717,5721,5725,5730],{"type":48,"tag":777,"props":5713,"children":5714},{"style":5647},[5715],{"type":54,"value":5716},"        endpoint",{"type":48,"tag":777,"props":5718,"children":5719},{"style":790},[5720],{"type":54,"value":1313},{"type":48,"tag":777,"props":5722,"children":5723},{"style":790},[5724],{"type":54,"value":847},{"type":48,"tag":777,"props":5726,"children":5727},{"style":839},[5728],{"type":54,"value":5729},"0.0.0.0:4317",{"type":48,"tag":777,"props":5731,"children":5732},{"style":790},[5733],{"type":54,"value":886},{"type":48,"tag":777,"props":5735,"children":5736},{"class":779,"line":959},[5737,5742],{"type":48,"tag":777,"props":5738,"children":5739},{"style":5647},[5740],{"type":54,"value":5741},"      http",{"type":48,"tag":777,"props":5743,"children":5744},{"style":790},[5745],{"type":54,"value":5655},{"type":48,"tag":777,"props":5747,"children":5748},{"class":779,"line":968},[5749,5754],{"type":48,"tag":777,"props":5750,"children":5751},{"style":5647},[5752],{"type":54,"value":5753},"        cors",{"type":48,"tag":777,"props":5755,"children":5756},{"style":790},[5757],{"type":54,"value":5655},{"type":48,"tag":777,"props":5759,"children":5760},{"class":779,"line":995},[5761,5766,5770,5774,5778,5783,5787],{"type":48,"tag":777,"props":5762,"children":5763},{"style":5647},[5764],{"type":54,"value":5765},"          allowed_origins",{"type":48,"tag":777,"props":5767,"children":5768},{"style":790},[5769],{"type":54,"value":1313},{"type":48,"tag":777,"props":5771,"children":5772},{"style":790},[5773],{"type":54,"value":5013},{"type":48,"tag":777,"props":5775,"children":5776},{"style":790},[5777],{"type":54,"value":857},{"type":48,"tag":777,"props":5779,"children":5780},{"style":839},[5781],{"type":54,"value":5782},"*",{"type":48,"tag":777,"props":5784,"children":5785},{"style":790},[5786],{"type":54,"value":857},{"type":48,"tag":777,"props":5788,"children":5789},{"style":790},[5790],{"type":54,"value":5791},"]\n",{"type":48,"tag":777,"props":5793,"children":5794},{"class":779,"line":1037},[5795,5800,5804,5808,5812,5816,5820],{"type":48,"tag":777,"props":5796,"children":5797},{"style":5647},[5798],{"type":54,"value":5799},"          allowed_headers",{"type":48,"tag":777,"props":5801,"children":5802},{"style":790},[5803],{"type":54,"value":1313},{"type":48,"tag":777,"props":5805,"children":5806},{"style":790},[5807],{"type":54,"value":5013},{"type":48,"tag":777,"props":5809,"children":5810},{"style":790},[5811],{"type":54,"value":857},{"type":48,"tag":777,"props":5813,"children":5814},{"style":839},[5815],{"type":54,"value":5782},{"type":48,"tag":777,"props":5817,"children":5818},{"style":790},[5819],{"type":54,"value":857},{"type":48,"tag":777,"props":5821,"children":5822},{"style":790},[5823],{"type":54,"value":5791},{"type":48,"tag":777,"props":5825,"children":5826},{"class":779,"line":1058},[5827,5831,5835],{"type":48,"tag":777,"props":5828,"children":5829},{"style":5647},[5830],{"type":54,"value":5699},{"type":48,"tag":777,"props":5832,"children":5833},{"style":790},[5834],{"type":54,"value":1313},{"type":48,"tag":777,"props":5836,"children":5837},{"style":5706},[5838],{"type":54,"value":5232},{"type":48,"tag":777,"props":5840,"children":5841},{"class":779,"line":1106},[5842,5846,5850,5854,5859],{"type":48,"tag":777,"props":5843,"children":5844},{"style":5647},[5845],{"type":54,"value":5716},{"type":48,"tag":777,"props":5847,"children":5848},{"style":790},[5849],{"type":54,"value":1313},{"type":48,"tag":777,"props":5851,"children":5852},{"style":790},[5853],{"type":54,"value":847},{"type":48,"tag":777,"props":5855,"children":5856},{"style":839},[5857],{"type":54,"value":5858},"0.0.0.0:4318",{"type":48,"tag":777,"props":5860,"children":5861},{"style":790},[5862],{"type":54,"value":886},{"type":48,"tag":777,"props":5864,"children":5865},{"class":779,"line":1127},[5866],{"type":48,"tag":777,"props":5867,"children":5868},{"emptyLinePlaceholder":923},[5869],{"type":54,"value":926},{"type":48,"tag":777,"props":5871,"children":5872},{"class":779,"line":1154},[5873,5878],{"type":48,"tag":777,"props":5874,"children":5875},{"style":5647},[5876],{"type":54,"value":5877},"processors",{"type":48,"tag":777,"props":5879,"children":5880},{"style":790},[5881],{"type":54,"value":5655},{"type":48,"tag":777,"props":5883,"children":5884},{"class":779,"line":1163},[5885,5890],{"type":48,"tag":777,"props":5886,"children":5887},{"style":5647},[5888],{"type":54,"value":5889},"  batch",{"type":48,"tag":777,"props":5891,"children":5892},{"style":790},[5893],{"type":54,"value":5655},{"type":48,"tag":777,"props":5895,"children":5896},{"class":779,"line":1189},[5897,5902],{"type":48,"tag":777,"props":5898,"children":5899},{"style":5647},[5900],{"type":54,"value":5901},"  memory_limiter",{"type":48,"tag":777,"props":5903,"children":5904},{"style":790},[5905],{"type":54,"value":5655},{"type":48,"tag":777,"props":5907,"children":5908},{"class":779,"line":4901},[5909,5914,5918],{"type":48,"tag":777,"props":5910,"children":5911},{"style":5647},[5912],{"type":54,"value":5913},"    limit_mib",{"type":48,"tag":777,"props":5915,"children":5916},{"style":790},[5917],{"type":54,"value":1313},{"type":48,"tag":777,"props":5919,"children":5920},{"style":870},[5921],{"type":54,"value":5922}," 1500\n",{"type":48,"tag":777,"props":5924,"children":5925},{"class":779,"line":4910},[5926,5931,5935],{"type":48,"tag":777,"props":5927,"children":5928},{"style":5647},[5929],{"type":54,"value":5930},"    spike_limit_mib",{"type":48,"tag":777,"props":5932,"children":5933},{"style":790},[5934],{"type":54,"value":1313},{"type":48,"tag":777,"props":5936,"children":5937},{"style":870},[5938],{"type":54,"value":5939}," 512\n",{"type":48,"tag":777,"props":5941,"children":5942},{"class":779,"line":4918},[5943,5948,5952],{"type":48,"tag":777,"props":5944,"children":5945},{"style":5647},[5946],{"type":54,"value":5947},"    check_interval",{"type":48,"tag":777,"props":5949,"children":5950},{"style":790},[5951],{"type":54,"value":1313},{"type":48,"tag":777,"props":5953,"children":5954},{"style":839},[5955],{"type":54,"value":5956}," 5s\n",{"type":48,"tag":777,"props":5958,"children":5959},{"class":779,"line":4927},[5960],{"type":48,"tag":777,"props":5961,"children":5962},{"emptyLinePlaceholder":923},[5963],{"type":54,"value":926},{"type":48,"tag":777,"props":5965,"children":5966},{"class":779,"line":4936},[5967,5972],{"type":48,"tag":777,"props":5968,"children":5969},{"style":5647},[5970],{"type":54,"value":5971},"connectors",{"type":48,"tag":777,"props":5973,"children":5974},{"style":790},[5975],{"type":54,"value":5655},{"type":48,"tag":777,"props":5977,"children":5978},{"class":779,"line":4945},[5979,5984],{"type":48,"tag":777,"props":5980,"children":5981},{"style":5647},[5982],{"type":54,"value":5983},"  routing\u002Flogs",{"type":48,"tag":777,"props":5985,"children":5986},{"style":790},[5987],{"type":54,"value":5655},{"type":48,"tag":777,"props":5989,"children":5990},{"class":779,"line":4954},[5991,5996,6000,6004,6009],{"type":48,"tag":777,"props":5992,"children":5993},{"style":5647},[5994],{"type":54,"value":5995},"    default_pipelines",{"type":48,"tag":777,"props":5997,"children":5998},{"style":790},[5999],{"type":54,"value":1313},{"type":48,"tag":777,"props":6001,"children":6002},{"style":790},[6003],{"type":54,"value":5013},{"type":48,"tag":777,"props":6005,"children":6006},{"style":839},[6007],{"type":54,"value":6008},"logs\u002Fout-default",{"type":48,"tag":777,"props":6010,"children":6011},{"style":790},[6012],{"type":54,"value":5791},{"type":48,"tag":777,"props":6014,"children":6015},{"class":779,"line":5002},[6016,6021,6025],{"type":48,"tag":777,"props":6017,"children":6018},{"style":5647},[6019],{"type":54,"value":6020},"    error_mode",{"type":48,"tag":777,"props":6022,"children":6023},{"style":790},[6024],{"type":54,"value":1313},{"type":48,"tag":777,"props":6026,"children":6027},{"style":839},[6028],{"type":54,"value":6029}," ignore\n",{"type":48,"tag":777,"props":6031,"children":6032},{"class":779,"line":5059},[6033,6038],{"type":48,"tag":777,"props":6034,"children":6035},{"style":5647},[6036],{"type":54,"value":6037},"    table",{"type":48,"tag":777,"props":6039,"children":6040},{"style":790},[6041],{"type":54,"value":5655},{"type":48,"tag":777,"props":6043,"children":6044},{"class":779,"line":5082},[6045,6050,6055,6059],{"type":48,"tag":777,"props":6046,"children":6047},{"style":790},[6048],{"type":54,"value":6049},"      -",{"type":48,"tag":777,"props":6051,"children":6052},{"style":5647},[6053],{"type":54,"value":6054}," context",{"type":48,"tag":777,"props":6056,"children":6057},{"style":790},[6058],{"type":54,"value":1313},{"type":48,"tag":777,"props":6060,"children":6061},{"style":839},[6062],{"type":54,"value":6063}," log\n",{"type":48,"tag":777,"props":6065,"children":6066},{"class":779,"line":5091},[6067,6072,6076],{"type":48,"tag":777,"props":6068,"children":6069},{"style":5647},[6070],{"type":54,"value":6071},"        statement",{"type":48,"tag":777,"props":6073,"children":6074},{"style":790},[6075],{"type":54,"value":1313},{"type":48,"tag":777,"props":6077,"children":6078},{"style":839},[6079],{"type":54,"value":6080}," route() where IsMatch(attributes[\"rr-web.event\"], \".*\")\n",{"type":48,"tag":777,"props":6082,"children":6083},{"class":779,"line":5099},[6084,6089,6093,6097,6102],{"type":48,"tag":777,"props":6085,"children":6086},{"style":5647},[6087],{"type":54,"value":6088},"        pipelines",{"type":48,"tag":777,"props":6090,"children":6091},{"style":790},[6092],{"type":54,"value":1313},{"type":48,"tag":777,"props":6094,"children":6095},{"style":790},[6096],{"type":54,"value":5013},{"type":48,"tag":777,"props":6098,"children":6099},{"style":839},[6100],{"type":54,"value":6101},"logs\u002Fout-rrweb",{"type":48,"tag":777,"props":6103,"children":6104},{"style":790},[6105],{"type":54,"value":5791},{"type":48,"tag":777,"props":6107,"children":6109},{"class":779,"line":6108},29,[6110],{"type":48,"tag":777,"props":6111,"children":6112},{"emptyLinePlaceholder":923},[6113],{"type":54,"value":926},{"type":48,"tag":777,"props":6115,"children":6117},{"class":779,"line":6116},30,[6118,6123],{"type":48,"tag":777,"props":6119,"children":6120},{"style":5647},[6121],{"type":54,"value":6122},"exporters",{"type":48,"tag":777,"props":6124,"children":6125},{"style":790},[6126],{"type":54,"value":5655},{"type":48,"tag":777,"props":6128,"children":6130},{"class":779,"line":6129},31,[6131,6136],{"type":48,"tag":777,"props":6132,"children":6133},{"style":5647},[6134],{"type":54,"value":6135},"  clickhouse",{"type":48,"tag":777,"props":6137,"children":6138},{"style":790},[6139],{"type":54,"value":5655},{"type":48,"tag":777,"props":6141,"children":6143},{"class":779,"line":6142},32,[6144,6149,6153],{"type":48,"tag":777,"props":6145,"children":6146},{"style":5647},[6147],{"type":54,"value":6148},"    database",{"type":48,"tag":777,"props":6150,"children":6151},{"style":790},[6152],{"type":54,"value":1313},{"type":48,"tag":777,"props":6154,"children":6155},{"style":839},[6156],{"type":54,"value":6157}," otel\n",{"type":48,"tag":777,"props":6159,"children":6161},{"class":779,"line":6160},33,[6162,6167,6171],{"type":48,"tag":777,"props":6163,"children":6164},{"style":5647},[6165],{"type":54,"value":6166},"    endpoint",{"type":48,"tag":777,"props":6168,"children":6169},{"style":790},[6170],{"type":54,"value":1313},{"type":48,"tag":777,"props":6172,"children":6173},{"style":839},[6174],{"type":54,"value":6175}," ${env:CLICKHOUSE_ENDPOINT}\n",{"type":48,"tag":777,"props":6177,"children":6179},{"class":779,"line":6178},34,[6180,6185,6189],{"type":48,"tag":777,"props":6181,"children":6182},{"style":5647},[6183],{"type":54,"value":6184},"    username",{"type":48,"tag":777,"props":6186,"children":6187},{"style":790},[6188],{"type":54,"value":1313},{"type":48,"tag":777,"props":6190,"children":6191},{"style":839},[6192],{"type":54,"value":6193}," hyperdx_ingest\n",{"type":48,"tag":777,"props":6195,"children":6197},{"class":779,"line":6196},35,[6198,6203,6207],{"type":48,"tag":777,"props":6199,"children":6200},{"style":5647},[6201],{"type":54,"value":6202},"    password",{"type":48,"tag":777,"props":6204,"children":6205},{"style":790},[6206],{"type":54,"value":1313},{"type":48,"tag":777,"props":6208,"children":6209},{"style":839},[6210],{"type":54,"value":6211}," ${env:CLICKHOUSE_PASSWORD}\n",{"type":48,"tag":777,"props":6213,"children":6215},{"class":779,"line":6214},36,[6216,6221,6225],{"type":48,"tag":777,"props":6217,"children":6218},{"style":5647},[6219],{"type":54,"value":6220},"    ttl",{"type":48,"tag":777,"props":6222,"children":6223},{"style":790},[6224],{"type":54,"value":1313},{"type":48,"tag":777,"props":6226,"children":6227},{"style":839},[6228],{"type":54,"value":6229}," 720h\n",{"type":48,"tag":777,"props":6231,"children":6233},{"class":779,"line":6232},37,[6234,6239,6243],{"type":48,"tag":777,"props":6235,"children":6236},{"style":5647},[6237],{"type":54,"value":6238},"    timeout",{"type":48,"tag":777,"props":6240,"children":6241},{"style":790},[6242],{"type":54,"value":1313},{"type":48,"tag":777,"props":6244,"children":6245},{"style":839},[6246],{"type":54,"value":5956},{"type":48,"tag":777,"props":6248,"children":6250},{"class":779,"line":6249},38,[6251,6256],{"type":48,"tag":777,"props":6252,"children":6253},{"style":5647},[6254],{"type":54,"value":6255},"    retry_on_failure",{"type":48,"tag":777,"props":6257,"children":6258},{"style":790},[6259],{"type":54,"value":5655},{"type":48,"tag":777,"props":6261,"children":6263},{"class":779,"line":6262},39,[6264,6269,6273],{"type":48,"tag":777,"props":6265,"children":6266},{"style":5647},[6267],{"type":54,"value":6268},"      enabled",{"type":48,"tag":777,"props":6270,"children":6271},{"style":790},[6272],{"type":54,"value":1313},{"type":48,"tag":777,"props":6274,"children":6275},{"style":5706},[6276],{"type":54,"value":5232},{"type":48,"tag":777,"props":6278,"children":6280},{"class":779,"line":6279},40,[6281,6286,6290],{"type":48,"tag":777,"props":6282,"children":6283},{"style":5647},[6284],{"type":54,"value":6285},"      initial_interval",{"type":48,"tag":777,"props":6287,"children":6288},{"style":790},[6289],{"type":54,"value":1313},{"type":48,"tag":777,"props":6291,"children":6292},{"style":839},[6293],{"type":54,"value":5956},{"type":48,"tag":777,"props":6295,"children":6297},{"class":779,"line":6296},41,[6298,6303,6307],{"type":48,"tag":777,"props":6299,"children":6300},{"style":5647},[6301],{"type":54,"value":6302},"      max_interval",{"type":48,"tag":777,"props":6304,"children":6305},{"style":790},[6306],{"type":54,"value":1313},{"type":48,"tag":777,"props":6308,"children":6309},{"style":839},[6310],{"type":54,"value":6311}," 30s\n",{"type":48,"tag":777,"props":6313,"children":6315},{"class":779,"line":6314},42,[6316,6321,6325],{"type":48,"tag":777,"props":6317,"children":6318},{"style":5647},[6319],{"type":54,"value":6320},"      max_elapsed_time",{"type":48,"tag":777,"props":6322,"children":6323},{"style":790},[6324],{"type":54,"value":1313},{"type":48,"tag":777,"props":6326,"children":6327},{"style":839},[6328],{"type":54,"value":6329}," 300s\n",{"type":48,"tag":777,"props":6331,"children":6333},{"class":779,"line":6332},43,[6334,6339],{"type":48,"tag":777,"props":6335,"children":6336},{"style":5647},[6337],{"type":54,"value":6338},"  clickhouse\u002Frrweb",{"type":48,"tag":777,"props":6340,"children":6341},{"style":790},[6342],{"type":54,"value":5655},{"type":48,"tag":777,"props":6344,"children":6346},{"class":779,"line":6345},44,[6347,6351,6355],{"type":48,"tag":777,"props":6348,"children":6349},{"style":5647},[6350],{"type":54,"value":6148},{"type":48,"tag":777,"props":6352,"children":6353},{"style":790},[6354],{"type":54,"value":1313},{"type":48,"tag":777,"props":6356,"children":6357},{"style":839},[6358],{"type":54,"value":6157},{"type":48,"tag":777,"props":6360,"children":6362},{"class":779,"line":6361},45,[6363,6367,6371],{"type":48,"tag":777,"props":6364,"children":6365},{"style":5647},[6366],{"type":54,"value":6166},{"type":48,"tag":777,"props":6368,"children":6369},{"style":790},[6370],{"type":54,"value":1313},{"type":48,"tag":777,"props":6372,"children":6373},{"style":839},[6374],{"type":54,"value":6175},{"type":48,"tag":777,"props":6376,"children":6378},{"class":779,"line":6377},46,[6379,6383,6387],{"type":48,"tag":777,"props":6380,"children":6381},{"style":5647},[6382],{"type":54,"value":6184},{"type":48,"tag":777,"props":6384,"children":6385},{"style":790},[6386],{"type":54,"value":1313},{"type":48,"tag":777,"props":6388,"children":6389},{"style":839},[6390],{"type":54,"value":6193},{"type":48,"tag":777,"props":6392,"children":6394},{"class":779,"line":6393},47,[6395,6399,6403],{"type":48,"tag":777,"props":6396,"children":6397},{"style":5647},[6398],{"type":54,"value":6202},{"type":48,"tag":777,"props":6400,"children":6401},{"style":790},[6402],{"type":54,"value":1313},{"type":48,"tag":777,"props":6404,"children":6405},{"style":839},[6406],{"type":54,"value":6211},{"type":48,"tag":777,"props":6408,"children":6410},{"class":779,"line":6409},48,[6411,6415,6419],{"type":48,"tag":777,"props":6412,"children":6413},{"style":5647},[6414],{"type":54,"value":6220},{"type":48,"tag":777,"props":6416,"children":6417},{"style":790},[6418],{"type":54,"value":1313},{"type":48,"tag":777,"props":6420,"children":6421},{"style":839},[6422],{"type":54,"value":6229},{"type":48,"tag":777,"props":6424,"children":6426},{"class":779,"line":6425},49,[6427,6432,6436],{"type":48,"tag":777,"props":6428,"children":6429},{"style":5647},[6430],{"type":54,"value":6431},"    logs_table_name",{"type":48,"tag":777,"props":6433,"children":6434},{"style":790},[6435],{"type":54,"value":1313},{"type":48,"tag":777,"props":6437,"children":6438},{"style":839},[6439],{"type":54,"value":6440}," hyperdx_sessions\n",{"type":48,"tag":777,"props":6442,"children":6444},{"class":779,"line":6443},50,[6445,6449,6453],{"type":48,"tag":777,"props":6446,"children":6447},{"style":5647},[6448],{"type":54,"value":6238},{"type":48,"tag":777,"props":6450,"children":6451},{"style":790},[6452],{"type":54,"value":1313},{"type":48,"tag":777,"props":6454,"children":6455},{"style":839},[6456],{"type":54,"value":5956},{"type":48,"tag":777,"props":6458,"children":6460},{"class":779,"line":6459},51,[6461,6465],{"type":48,"tag":777,"props":6462,"children":6463},{"style":5647},[6464],{"type":54,"value":6255},{"type":48,"tag":777,"props":6466,"children":6467},{"style":790},[6468],{"type":54,"value":5655},{"type":48,"tag":777,"props":6470,"children":6472},{"class":779,"line":6471},52,[6473,6477,6481],{"type":48,"tag":777,"props":6474,"children":6475},{"style":5647},[6476],{"type":54,"value":6268},{"type":48,"tag":777,"props":6478,"children":6479},{"style":790},[6480],{"type":54,"value":1313},{"type":48,"tag":777,"props":6482,"children":6483},{"style":5706},[6484],{"type":54,"value":5232},{"type":48,"tag":777,"props":6486,"children":6488},{"class":779,"line":6487},53,[6489,6493,6497],{"type":48,"tag":777,"props":6490,"children":6491},{"style":5647},[6492],{"type":54,"value":6285},{"type":48,"tag":777,"props":6494,"children":6495},{"style":790},[6496],{"type":54,"value":1313},{"type":48,"tag":777,"props":6498,"children":6499},{"style":839},[6500],{"type":54,"value":5956},{"type":48,"tag":777,"props":6502,"children":6504},{"class":779,"line":6503},54,[6505,6509,6513],{"type":48,"tag":777,"props":6506,"children":6507},{"style":5647},[6508],{"type":54,"value":6302},{"type":48,"tag":777,"props":6510,"children":6511},{"style":790},[6512],{"type":54,"value":1313},{"type":48,"tag":777,"props":6514,"children":6515},{"style":839},[6516],{"type":54,"value":6311},{"type":48,"tag":777,"props":6518,"children":6520},{"class":779,"line":6519},55,[6521,6525,6529],{"type":48,"tag":777,"props":6522,"children":6523},{"style":5647},[6524],{"type":54,"value":6320},{"type":48,"tag":777,"props":6526,"children":6527},{"style":790},[6528],{"type":54,"value":1313},{"type":48,"tag":777,"props":6530,"children":6531},{"style":839},[6532],{"type":54,"value":6329},{"type":48,"tag":777,"props":6534,"children":6536},{"class":779,"line":6535},56,[6537],{"type":48,"tag":777,"props":6538,"children":6539},{"emptyLinePlaceholder":923},[6540],{"type":54,"value":926},{"type":48,"tag":777,"props":6542,"children":6544},{"class":779,"line":6543},57,[6545,6550],{"type":48,"tag":777,"props":6546,"children":6547},{"style":5647},[6548],{"type":54,"value":6549},"service",{"type":48,"tag":777,"props":6551,"children":6552},{"style":790},[6553],{"type":54,"value":5655},{"type":48,"tag":777,"props":6555,"children":6557},{"class":779,"line":6556},58,[6558,6563],{"type":48,"tag":777,"props":6559,"children":6560},{"style":5647},[6561],{"type":54,"value":6562},"  pipelines",{"type":48,"tag":777,"props":6564,"children":6565},{"style":790},[6566],{"type":54,"value":5655},{"type":48,"tag":777,"props":6568,"children":6570},{"class":779,"line":6569},59,[6571,6576],{"type":48,"tag":777,"props":6572,"children":6573},{"style":5647},[6574],{"type":54,"value":6575},"    traces",{"type":48,"tag":777,"props":6577,"children":6578},{"style":790},[6579],{"type":54,"value":5655},{"type":48,"tag":777,"props":6581,"children":6583},{"class":779,"line":6582},60,[6584,6589,6593,6597,6602],{"type":48,"tag":777,"props":6585,"children":6586},{"style":5647},[6587],{"type":54,"value":6588},"      receivers",{"type":48,"tag":777,"props":6590,"children":6591},{"style":790},[6592],{"type":54,"value":1313},{"type":48,"tag":777,"props":6594,"children":6595},{"style":790},[6596],{"type":54,"value":5013},{"type":48,"tag":777,"props":6598,"children":6599},{"style":839},[6600],{"type":54,"value":6601},"otlp\u002Fhyperdx",{"type":48,"tag":777,"props":6603,"children":6604},{"style":790},[6605],{"type":54,"value":5791},{"type":48,"tag":777,"props":6607,"children":6609},{"class":779,"line":6608},61,[6610,6615,6619,6623,6628,6633,6638],{"type":48,"tag":777,"props":6611,"children":6612},{"style":5647},[6613],{"type":54,"value":6614},"      processors",{"type":48,"tag":777,"props":6616,"children":6617},{"style":790},[6618],{"type":54,"value":1313},{"type":48,"tag":777,"props":6620,"children":6621},{"style":790},[6622],{"type":54,"value":5013},{"type":48,"tag":777,"props":6624,"children":6625},{"style":839},[6626],{"type":54,"value":6627},"memory_limiter",{"type":48,"tag":777,"props":6629,"children":6630},{"style":790},[6631],{"type":54,"value":6632},",",{"type":48,"tag":777,"props":6634,"children":6635},{"style":839},[6636],{"type":54,"value":6637}," batch",{"type":48,"tag":777,"props":6639,"children":6640},{"style":790},[6641],{"type":54,"value":5791},{"type":48,"tag":777,"props":6643,"children":6645},{"class":779,"line":6644},62,[6646,6651,6655,6659,6663],{"type":48,"tag":777,"props":6647,"children":6648},{"style":5647},[6649],{"type":54,"value":6650},"      exporters",{"type":48,"tag":777,"props":6652,"children":6653},{"style":790},[6654],{"type":54,"value":1313},{"type":48,"tag":777,"props":6656,"children":6657},{"style":790},[6658],{"type":54,"value":5013},{"type":48,"tag":777,"props":6660,"children":6661},{"style":839},[6662],{"type":54,"value":8},{"type":48,"tag":777,"props":6664,"children":6665},{"style":790},[6666],{"type":54,"value":5791},{"type":48,"tag":777,"props":6668,"children":6670},{"class":779,"line":6669},63,[6671,6676],{"type":48,"tag":777,"props":6672,"children":6673},{"style":5647},[6674],{"type":54,"value":6675},"    metrics",{"type":48,"tag":777,"props":6677,"children":6678},{"style":790},[6679],{"type":54,"value":5655},{"type":48,"tag":777,"props":6681,"children":6683},{"class":779,"line":6682},64,[6684,6688,6692,6696,6700],{"type":48,"tag":777,"props":6685,"children":6686},{"style":5647},[6687],{"type":54,"value":6588},{"type":48,"tag":777,"props":6689,"children":6690},{"style":790},[6691],{"type":54,"value":1313},{"type":48,"tag":777,"props":6693,"children":6694},{"style":790},[6695],{"type":54,"value":5013},{"type":48,"tag":777,"props":6697,"children":6698},{"style":839},[6699],{"type":54,"value":6601},{"type":48,"tag":777,"props":6701,"children":6702},{"style":790},[6703],{"type":54,"value":5791},{"type":48,"tag":777,"props":6705,"children":6707},{"class":779,"line":6706},65,[6708,6712,6716,6720,6724,6728,6732],{"type":48,"tag":777,"props":6709,"children":6710},{"style":5647},[6711],{"type":54,"value":6614},{"type":48,"tag":777,"props":6713,"children":6714},{"style":790},[6715],{"type":54,"value":1313},{"type":48,"tag":777,"props":6717,"children":6718},{"style":790},[6719],{"type":54,"value":5013},{"type":48,"tag":777,"props":6721,"children":6722},{"style":839},[6723],{"type":54,"value":6627},{"type":48,"tag":777,"props":6725,"children":6726},{"style":790},[6727],{"type":54,"value":6632},{"type":48,"tag":777,"props":6729,"children":6730},{"style":839},[6731],{"type":54,"value":6637},{"type":48,"tag":777,"props":6733,"children":6734},{"style":790},[6735],{"type":54,"value":5791},{"type":48,"tag":777,"props":6737,"children":6739},{"class":779,"line":6738},66,[6740,6744,6748,6752,6756],{"type":48,"tag":777,"props":6741,"children":6742},{"style":5647},[6743],{"type":54,"value":6650},{"type":48,"tag":777,"props":6745,"children":6746},{"style":790},[6747],{"type":54,"value":1313},{"type":48,"tag":777,"props":6749,"children":6750},{"style":790},[6751],{"type":54,"value":5013},{"type":48,"tag":777,"props":6753,"children":6754},{"style":839},[6755],{"type":54,"value":8},{"type":48,"tag":777,"props":6757,"children":6758},{"style":790},[6759],{"type":54,"value":5791},{"type":48,"tag":777,"props":6761,"children":6763},{"class":779,"line":6762},67,[6764,6769],{"type":48,"tag":777,"props":6765,"children":6766},{"style":5647},[6767],{"type":54,"value":6768},"    logs\u002Fin",{"type":48,"tag":777,"props":6770,"children":6771},{"style":790},[6772],{"type":54,"value":5655},{"type":48,"tag":777,"props":6774,"children":6776},{"class":779,"line":6775},68,[6777,6781,6785,6789,6793],{"type":48,"tag":777,"props":6778,"children":6779},{"style":5647},[6780],{"type":54,"value":6588},{"type":48,"tag":777,"props":6782,"children":6783},{"style":790},[6784],{"type":54,"value":1313},{"type":48,"tag":777,"props":6786,"children":6787},{"style":790},[6788],{"type":54,"value":5013},{"type":48,"tag":777,"props":6790,"children":6791},{"style":839},[6792],{"type":54,"value":6601},{"type":48,"tag":777,"props":6794,"children":6795},{"style":790},[6796],{"type":54,"value":5791},{"type":48,"tag":777,"props":6798,"children":6800},{"class":779,"line":6799},69,[6801,6805,6809,6813,6818],{"type":48,"tag":777,"props":6802,"children":6803},{"style":5647},[6804],{"type":54,"value":6650},{"type":48,"tag":777,"props":6806,"children":6807},{"style":790},[6808],{"type":54,"value":1313},{"type":48,"tag":777,"props":6810,"children":6811},{"style":790},[6812],{"type":54,"value":5013},{"type":48,"tag":777,"props":6814,"children":6815},{"style":839},[6816],{"type":54,"value":6817},"routing\u002Flogs",{"type":48,"tag":777,"props":6819,"children":6820},{"style":790},[6821],{"type":54,"value":5791},{"type":48,"tag":777,"props":6823,"children":6825},{"class":779,"line":6824},70,[6826,6831],{"type":48,"tag":777,"props":6827,"children":6828},{"style":5647},[6829],{"type":54,"value":6830},"    logs\u002Fout-default",{"type":48,"tag":777,"props":6832,"children":6833},{"style":790},[6834],{"type":54,"value":5655},{"type":48,"tag":777,"props":6836,"children":6838},{"class":779,"line":6837},71,[6839,6843,6847,6851,6855],{"type":48,"tag":777,"props":6840,"children":6841},{"style":5647},[6842],{"type":54,"value":6588},{"type":48,"tag":777,"props":6844,"children":6845},{"style":790},[6846],{"type":54,"value":1313},{"type":48,"tag":777,"props":6848,"children":6849},{"style":790},[6850],{"type":54,"value":5013},{"type":48,"tag":777,"props":6852,"children":6853},{"style":839},[6854],{"type":54,"value":6817},{"type":48,"tag":777,"props":6856,"children":6857},{"style":790},[6858],{"type":54,"value":5791},{"type":48,"tag":777,"props":6860,"children":6862},{"class":779,"line":6861},72,[6863,6867,6871,6875,6879,6883,6887],{"type":48,"tag":777,"props":6864,"children":6865},{"style":5647},[6866],{"type":54,"value":6614},{"type":48,"tag":777,"props":6868,"children":6869},{"style":790},[6870],{"type":54,"value":1313},{"type":48,"tag":777,"props":6872,"children":6873},{"style":790},[6874],{"type":54,"value":5013},{"type":48,"tag":777,"props":6876,"children":6877},{"style":839},[6878],{"type":54,"value":6627},{"type":48,"tag":777,"props":6880,"children":6881},{"style":790},[6882],{"type":54,"value":6632},{"type":48,"tag":777,"props":6884,"children":6885},{"style":839},[6886],{"type":54,"value":6637},{"type":48,"tag":777,"props":6888,"children":6889},{"style":790},[6890],{"type":54,"value":5791},{"type":48,"tag":777,"props":6892,"children":6894},{"class":779,"line":6893},73,[6895,6899,6903,6907,6911],{"type":48,"tag":777,"props":6896,"children":6897},{"style":5647},[6898],{"type":54,"value":6650},{"type":48,"tag":777,"props":6900,"children":6901},{"style":790},[6902],{"type":54,"value":1313},{"type":48,"tag":777,"props":6904,"children":6905},{"style":790},[6906],{"type":54,"value":5013},{"type":48,"tag":777,"props":6908,"children":6909},{"style":839},[6910],{"type":54,"value":8},{"type":48,"tag":777,"props":6912,"children":6913},{"style":790},[6914],{"type":54,"value":5791},{"type":48,"tag":777,"props":6916,"children":6918},{"class":779,"line":6917},74,[6919,6924],{"type":48,"tag":777,"props":6920,"children":6921},{"style":5647},[6922],{"type":54,"value":6923},"    logs\u002Fout-rrweb",{"type":48,"tag":777,"props":6925,"children":6926},{"style":790},[6927],{"type":54,"value":5655},{"type":48,"tag":777,"props":6929,"children":6931},{"class":779,"line":6930},75,[6932,6936,6940,6944,6948],{"type":48,"tag":777,"props":6933,"children":6934},{"style":5647},[6935],{"type":54,"value":6588},{"type":48,"tag":777,"props":6937,"children":6938},{"style":790},[6939],{"type":54,"value":1313},{"type":48,"tag":777,"props":6941,"children":6942},{"style":790},[6943],{"type":54,"value":5013},{"type":48,"tag":777,"props":6945,"children":6946},{"style":839},[6947],{"type":54,"value":6817},{"type":48,"tag":777,"props":6949,"children":6950},{"style":790},[6951],{"type":54,"value":5791},{"type":48,"tag":777,"props":6953,"children":6955},{"class":779,"line":6954},76,[6956,6960,6964,6968,6972,6976,6980],{"type":48,"tag":777,"props":6957,"children":6958},{"style":5647},[6959],{"type":54,"value":6614},{"type":48,"tag":777,"props":6961,"children":6962},{"style":790},[6963],{"type":54,"value":1313},{"type":48,"tag":777,"props":6965,"children":6966},{"style":790},[6967],{"type":54,"value":5013},{"type":48,"tag":777,"props":6969,"children":6970},{"style":839},[6971],{"type":54,"value":6627},{"type":48,"tag":777,"props":6973,"children":6974},{"style":790},[6975],{"type":54,"value":6632},{"type":48,"tag":777,"props":6977,"children":6978},{"style":839},[6979],{"type":54,"value":6637},{"type":48,"tag":777,"props":6981,"children":6982},{"style":790},[6983],{"type":54,"value":5791},{"type":48,"tag":777,"props":6985,"children":6987},{"class":779,"line":6986},77,[6988,6992,6996,7000,7005],{"type":48,"tag":777,"props":6989,"children":6990},{"style":5647},[6991],{"type":54,"value":6650},{"type":48,"tag":777,"props":6993,"children":6994},{"style":790},[6995],{"type":54,"value":1313},{"type":48,"tag":777,"props":6997,"children":6998},{"style":790},[6999],{"type":54,"value":5013},{"type":48,"tag":777,"props":7001,"children":7002},{"style":839},[7003],{"type":54,"value":7004},"clickhouse\u002Frrweb",{"type":48,"tag":777,"props":7006,"children":7007},{"style":790},[7008],{"type":54,"value":5791},{"type":48,"tag":57,"props":7010,"children":7011},{},[7012],{"type":54,"value":7013},"Notes for this path:",{"type":48,"tag":162,"props":7015,"children":7016},{},[7017,7031,7050],{"type":48,"tag":94,"props":7018,"children":7019},{},[7020,7022,7029],{"type":54,"value":7021},"If you use your own distribution, ensure it includes the ClickHouse exporter. The upstream\n",{"type":48,"tag":63,"props":7023,"children":7026},{"href":7024,"rel":7025},"https:\u002F\u002Fgithub.com\u002Fopen-telemetry\u002Fopentelemetry-collector-contrib",[67],[7027],{"type":54,"value":7028},"contrib image",{"type":54,"value":7030}," already does.",{"type":48,"tag":94,"props":7032,"children":7033},{},[7034,7036,7041,7043,7049],{"type":54,"value":7035},"Authentication on the OTLP receivers is your existing setup. The ",{"type":48,"tag":70,"props":7037,"children":7039},{"className":7038},[],[7040],{"type":54,"value":1417},{"type":54,"value":7042}," generated in\nStep 2 is not used here unless you wire it into your own auth (for example ",{"type":48,"tag":70,"props":7044,"children":7046},{"className":7045},[],[7047],{"type":54,"value":7048},"bearertokenauth",{"type":54,"value":1721},{"type":48,"tag":94,"props":7051,"children":7052},{},[7053,7055,7060],{"type":54,"value":7054},"After reloading, skip the health check below (that is specific to the local container) and go\nstraight to ",{"type":48,"tag":82,"props":7056,"children":7057},{},[7058],{"type":54,"value":7059},"Step 7",{"type":54,"value":7061}," to send a verification burst (point the generator at your own collector's\nOTLP endpoint).",{"type":48,"tag":4708,"props":7063,"children":7065},{"id":7064},"step-6d-confirm-the-local-collector-is-healthy-new-collector-path",[7066],{"type":54,"value":7067},"Step 6d: Confirm the local collector is healthy (new-collector path)",{"type":48,"tag":766,"props":7069,"children":7071},{"className":768,"code":7070,"language":770,"meta":771,"style":771},"docker ps --filter name=clickstack-otel-collector --format '{{.Status}}'\ncurl -fsS http:\u002F\u002Flocalhost:13133\u002F && echo\ndocker logs --tail 40 clickstack-otel-collector 2>&1 | tail -40\n",[7072],{"type":48,"tag":70,"props":7073,"children":7074},{"__ignoreMap":771},[7075,7115,7141],{"type":48,"tag":777,"props":7076,"children":7077},{"class":779,"line":780},[7078,7082,7087,7092,7097,7102,7106,7111],{"type":48,"tag":777,"props":7079,"children":7080},{"style":833},[7081],{"type":54,"value":114},{"type":48,"tag":777,"props":7083,"children":7084},{"style":839},[7085],{"type":54,"value":7086}," ps",{"type":48,"tag":777,"props":7088,"children":7089},{"style":839},[7090],{"type":54,"value":7091}," --filter",{"type":48,"tag":777,"props":7093,"children":7094},{"style":839},[7095],{"type":54,"value":7096}," name=clickstack-otel-collector",{"type":48,"tag":777,"props":7098,"children":7099},{"style":839},[7100],{"type":54,"value":7101}," --format",{"type":48,"tag":777,"props":7103,"children":7104},{"style":790},[7105],{"type":54,"value":2189},{"type":48,"tag":777,"props":7107,"children":7108},{"style":839},[7109],{"type":54,"value":7110},"{{.Status}}",{"type":48,"tag":777,"props":7112,"children":7113},{"style":790},[7114],{"type":54,"value":2199},{"type":48,"tag":777,"props":7116,"children":7117},{"class":779,"line":829},[7118,7122,7127,7132,7136],{"type":48,"tag":777,"props":7119,"children":7120},{"style":833},[7121],{"type":54,"value":631},{"type":48,"tag":777,"props":7123,"children":7124},{"style":839},[7125],{"type":54,"value":7126}," -fsS",{"type":48,"tag":777,"props":7128,"children":7129},{"style":839},[7130],{"type":54,"value":7131}," http:\u002F\u002Flocalhost:13133\u002F",{"type":48,"tag":777,"props":7133,"children":7134},{"style":790},[7135],{"type":54,"value":862},{"type":48,"tag":777,"props":7137,"children":7138},{"style":948},[7139],{"type":54,"value":7140}," echo\n",{"type":48,"tag":777,"props":7142,"children":7143},{"class":779,"line":889},[7144,7148,7153,7158,7163,7167,7171,7175,7180],{"type":48,"tag":777,"props":7145,"children":7146},{"style":833},[7147],{"type":54,"value":114},{"type":48,"tag":777,"props":7149,"children":7150},{"style":839},[7151],{"type":54,"value":7152}," logs",{"type":48,"tag":777,"props":7154,"children":7155},{"style":839},[7156],{"type":54,"value":7157}," --tail",{"type":48,"tag":777,"props":7159,"children":7160},{"style":870},[7161],{"type":54,"value":7162}," 40",{"type":48,"tag":777,"props":7164,"children":7165},{"style":839},[7166],{"type":54,"value":5299},{"type":48,"tag":777,"props":7168,"children":7169},{"style":790},[7170],{"type":54,"value":4995},{"type":48,"tag":777,"props":7172,"children":7173},{"style":790},[7174],{"type":54,"value":1838},{"type":48,"tag":777,"props":7176,"children":7177},{"style":833},[7178],{"type":54,"value":7179}," tail",{"type":48,"tag":777,"props":7181,"children":7182},{"style":839},[7183],{"type":54,"value":7184}," -40\n",{"type":48,"tag":57,"props":7186,"children":7187},{},[7188,7190,7196,7198,7204,7206,7212,7214,7220,7222,7228,7230,7236,7238,7243],{"type":54,"value":7189},"A healthy start shows the seed migrations running to completion (",{"type":48,"tag":70,"props":7191,"children":7193},{"className":7192},[],[7194],{"type":54,"value":7195},"[seed] OK ...",{"type":54,"value":7197}," lines ending in\n",{"type":48,"tag":70,"props":7199,"children":7201},{"className":7200},[],[7202],{"type":54,"value":7203},"goose: up to current file version: N",{"type":54,"value":7205},"), then ",{"type":48,"tag":70,"props":7207,"children":7209},{"className":7208},[],[7210],{"type":54,"value":7211},"Everything is ready. Begin running and processing data.",{"type":54,"value":7213}," (or equivalent), ",{"type":48,"tag":70,"props":7215,"children":7217},{"className":7216},[],[7218],{"type":54,"value":7219},"docker ps",{"type":54,"value":7221}," reporting ",{"type":48,"tag":70,"props":7223,"children":7225},{"className":7224},[],[7226],{"type":54,"value":7227},"Up ... (healthy)",{"type":54,"value":7229},", and the health check returning\nHTTP 200. A seed line like ",{"type":48,"tag":70,"props":7231,"children":7233},{"className":7232},[],[7234],{"type":54,"value":7235},"ClickHouse 25.12 \u003C 26.2, falling back to compatibility logs and traces schemas",{"type":54,"value":7237}," on an older server version is ",{"type":48,"tag":82,"props":7239,"children":7240},{},[7241],{"type":54,"value":7242},"expected and harmless",{"type":54,"value":7244},", not an error; do not pause on it.\nIf instead the container exits, the cause is almost always in the seed step:",{"type":48,"tag":162,"props":7246,"children":7247},{},[7248,7288,7306,7334],{"type":48,"tag":94,"props":7249,"children":7250},{},[7251,7257,7259,7264,7266,7271,7273,7278,7280,7286],{"type":48,"tag":70,"props":7252,"children":7254},{"className":7253},[],[7255],{"type":54,"value":7256},"code: 516, Authentication failed: password is incorrect",{"type":54,"value":7258}," -> ",{"type":48,"tag":70,"props":7260,"children":7262},{"className":7261},[],[7263],{"type":54,"value":1244},{"type":54,"value":7265}," is empty or\nwrong in the env file. The most common slip is storing the password under a different key name\n(it ",{"type":48,"tag":82,"props":7267,"children":7268},{},[7269],{"type":54,"value":7270},"must",{"type":54,"value":7272}," be ",{"type":48,"tag":70,"props":7274,"children":7276},{"className":7275},[],[7277],{"type":54,"value":1244},{"type":54,"value":7279},"), or using a password containing ",{"type":48,"tag":70,"props":7281,"children":7283},{"className":7282},[],[7284],{"type":54,"value":7285},"@ : \u002F ? # %",{"type":54,"value":7287},", which\ncorrupts the migration tool's connection URL.",{"type":48,"tag":94,"props":7289,"children":7290},{},[7291,7297,7298,7304],{"type":48,"tag":70,"props":7292,"children":7294},{"className":7293},[],[7295],{"type":54,"value":7296},"[HTTP 403]",{"type":54,"value":543},{"type":48,"tag":70,"props":7299,"children":7301},{"className":7300},[],[7302],{"type":54,"value":7303},"data size should be 0 \u003C \u003Chuge number>",{"type":54,"value":7305}," at \"server hello\" -> same root cause: an\nempty\u002Fwrong password against the HTTPS endpoint.",{"type":48,"tag":94,"props":7307,"children":7308},{},[7309,7311,7316,7318,7324,7326,7332],{"type":54,"value":7310},"TLS \u002F dial errors -> ",{"type":48,"tag":70,"props":7312,"children":7314},{"className":7313},[],[7315],{"type":54,"value":1252},{"type":54,"value":7317}," is malformed (it must be ",{"type":48,"tag":70,"props":7319,"children":7321},{"className":7320},[],[7322],{"type":54,"value":7323},"https:\u002F\u002F\u003Chost>:8443",{"type":54,"value":7325},", with\nno ",{"type":48,"tag":70,"props":7327,"children":7329},{"className":7328},[],[7330],{"type":54,"value":7331},".0",{"type":54,"value":7333}," on the port).",{"type":48,"tag":94,"props":7335,"children":7336},{},[7337,7342,7343,7348,7350,7355],{"type":48,"tag":70,"props":7338,"children":7340},{"className":7339},[],[7341],{"type":54,"value":4296},{"type":54,"value":4313},{"type":48,"tag":70,"props":7344,"children":7346},{"className":7345},[],[7347],{"type":54,"value":4288},{"type":54,"value":7349}," -> only on older image builds; apply the ",{"type":48,"tag":70,"props":7351,"children":7353},{"className":7352},[],[7354],{"type":54,"value":4304},{"type":54,"value":7356}," grant\nfrom the Step 5 note and restart.",{"type":48,"tag":266,"props":7358,"children":7359},{},[],{"type":48,"tag":270,"props":7361,"children":7363},{"id":7362},"step-7-send-rich-synthetic-telemetry-and-verify-ingestion",[7364],{"type":54,"value":7365},"Step 7: Send rich synthetic telemetry and verify ingestion",{"type":48,"tag":57,"props":7367,"children":7368},{},[7369,7371,7377,7379,7384,7386,7391,7392,7397,7398,7403,7404,7409],{"type":54,"value":7370},"Use ",{"type":48,"tag":70,"props":7372,"children":7374},{"className":7373},[],[7375],{"type":54,"value":7376},"telemetrygen",{"type":54,"value":7378}," (the OpenTelemetry Collector Contrib generator) from its ",{"type":48,"tag":82,"props":7380,"children":7381},{},[7382],{"type":54,"value":7383},"Docker image",{"type":54,"value":7385},", so\nnothing is installed on the host. Instead of one flat burst, send telemetry across several\n",{"type":48,"tag":82,"props":7387,"children":7388},{},[7389],{"type":54,"value":7390},"services",{"type":54,"value":1238},{"type":48,"tag":82,"props":7393,"children":7394},{},[7395],{"type":54,"value":7396},"severities",{"type":54,"value":1238},{"type":48,"tag":82,"props":7399,"children":7400},{},[7401],{"type":54,"value":7402},"span statuses",{"type":54,"value":1254},{"type":48,"tag":82,"props":7405,"children":7406},{},[7407],{"type":54,"value":7408},"metric types",{"type":54,"value":7410},", so ClickStack's Search,\nService Map, and dashboards have realistic, varied data rather than a single uniform stream.",{"type":48,"tag":57,"props":7412,"children":7413},{},[7414,7416,7422,7424,7430,7432,7437,7439,7444,7446,7458,7460,7465,7467,7473],{"type":54,"value":7415},"Load the env file so the token is available, then reference ",{"type":48,"tag":70,"props":7417,"children":7419},{"className":7418},[],[7420],{"type":54,"value":7421},"$OTLP_AUTH_TOKEN",{"type":54,"value":7423},". The ",{"type":48,"tag":70,"props":7425,"children":7427},{"className":7426},[],[7428],{"type":54,"value":7429},"tg",{"type":54,"value":7431}," helper\nbelow ",{"type":48,"tag":82,"props":7433,"children":7434},{},[7435],{"type":54,"value":7436},"redirects all generator output to a log file",{"type":54,"value":7438}," and prints only an exit code, because\n",{"type":48,"tag":70,"props":7440,"children":7442},{"className":7441},[],[7443],{"type":54,"value":7376},{"type":54,"value":7445}," echoes its full config, ",{"type":48,"tag":82,"props":7447,"children":7448},{},[7449,7451,7456],{"type":54,"value":7450},"including the ",{"type":48,"tag":70,"props":7452,"children":7454},{"className":7453},[],[7455],{"type":54,"value":5491},{"type":54,"value":7457}," header (your OTLP token)",{"type":54,"value":7459},",\nto stdout. Never surface that raw output in the chat. ",{"type":48,"tag":70,"props":7461,"children":7463},{"className":7462},[],[7464],{"type":54,"value":7376},{"type":54,"value":7466},"'s header syntax requires the\nvalue to be a quoted string: ",{"type":48,"tag":70,"props":7468,"children":7470},{"className":7469},[],[7471],{"type":54,"value":7472},"key=\"value\"",{"type":54,"value":731},{"type":48,"tag":766,"props":7475,"children":7477},{"className":768,"code":7476,"language":770,"meta":771,"style":771},"WORKDIR=\"${WORKDIR:-$HOME\u002Fclickstack-otel-collector}\"; ENV_FILE=\"$WORKDIR\u002Fcollector.env\"\n[ -f \"$WORKDIR\u002Fcreds.env\" ] && . \"$WORKDIR\u002Fcreds.env\"; set -a; . \"$ENV_FILE\"; set +a\n\nTG_IMAGE=ghcr.io\u002Fopen-telemetry\u002Fopentelemetry-collector-contrib\u002Ftelemetrygen:latest\nNET=clickstack-net\nENDPOINT=clickstack-otel-collector:4317\nTG_LOG=\"$WORKDIR\u002Ftelemetrygen.log\"; : > \"$TG_LOG\"\n\ntg() {\n  # usage: tg \u003Clogs|traces|metrics> [extra telemetrygen flags...]\n  # Output (which contains the token in the echoed config) goes to $TG_LOG, never the terminal.\n  local signal=\"$1\"; shift\n  docker run --rm --network \"$NET\" \"$TG_IMAGE\" \"$signal\" \\\n    --otlp-endpoint \"$ENDPOINT\" \\\n    --otlp-insecure \\\n    --otlp-header \"authorization=\\\"$OTLP_AUTH_TOKEN\\\"\" \\\n    --rate 10 --duration 15s \"$@\" >>\"$TG_LOG\" 2>&1\n  echo \"$signal exit=$?\"\n}\n",[7478],{"type":48,"tag":70,"props":7479,"children":7480},{"__ignoreMap":771},[7481,7548,7647,7654,7671,7688,7705,7760,7767,7784,7792,7800,7841,7905,7930,7942,7972,8029,8059],{"type":48,"tag":777,"props":7482,"children":7483},{"class":779,"line":780},[7484,7488,7492,7496,7500,7504,7508,7512,7516,7520,7524,7528,7532,7536,7540,7544],{"type":48,"tag":777,"props":7485,"children":7486},{"style":784},[7487],{"type":54,"value":787},{"type":48,"tag":777,"props":7489,"children":7490},{"style":790},[7491],{"type":54,"value":793},{"type":48,"tag":777,"props":7493,"children":7494},{"style":790},[7495],{"type":54,"value":798},{"type":48,"tag":777,"props":7497,"children":7498},{"style":784},[7499],{"type":54,"value":787},{"type":48,"tag":777,"props":7501,"children":7502},{"style":790},[7503],{"type":54,"value":807},{"type":48,"tag":777,"props":7505,"children":7506},{"style":784},[7507],{"type":54,"value":812},{"type":48,"tag":777,"props":7509,"children":7510},{"style":790},[7511],{"type":54,"value":817},{"type":48,"tag":777,"props":7513,"children":7514},{"style":784},[7515],{"type":54,"value":4},{"type":48,"tag":777,"props":7517,"children":7518},{"style":790},[7519],{"type":54,"value":1517},{"type":48,"tag":777,"props":7521,"children":7522},{"style":790},[7523],{"type":54,"value":1522},{"type":48,"tag":777,"props":7525,"children":7526},{"style":784},[7527],{"type":54,"value":1527},{"type":48,"tag":777,"props":7529,"children":7530},{"style":790},[7531],{"type":54,"value":793},{"type":48,"tag":777,"props":7533,"children":7534},{"style":790},[7535],{"type":54,"value":857},{"type":48,"tag":777,"props":7537,"children":7538},{"style":784},[7539],{"type":54,"value":852},{"type":48,"tag":777,"props":7541,"children":7542},{"style":839},[7543],{"type":54,"value":912},{"type":48,"tag":777,"props":7545,"children":7546},{"style":790},[7547],{"type":54,"value":886},{"type":48,"tag":777,"props":7549,"children":7550},{"class":779,"line":829},[7551,7555,7559,7563,7567,7571,7575,7579,7583,7587,7591,7595,7599,7603,7607,7611,7615,7619,7623,7627,7631,7635,7639,7643],{"type":48,"tag":777,"props":7552,"children":7553},{"style":790},[7554],{"type":54,"value":1555},{"type":48,"tag":777,"props":7556,"children":7557},{"style":790},[7558],{"type":54,"value":1560},{"type":48,"tag":777,"props":7560,"children":7561},{"style":790},[7562],{"type":54,"value":847},{"type":48,"tag":777,"props":7564,"children":7565},{"style":784},[7566],{"type":54,"value":852},{"type":48,"tag":777,"props":7568,"children":7569},{"style":839},[7570],{"type":54,"value":1573},{"type":48,"tag":777,"props":7572,"children":7573},{"style":790},[7574],{"type":54,"value":857},{"type":48,"tag":777,"props":7576,"children":7577},{"style":790},[7578],{"type":54,"value":1582},{"type":48,"tag":777,"props":7580,"children":7581},{"style":790},[7582],{"type":54,"value":862},{"type":48,"tag":777,"props":7584,"children":7585},{"style":948},[7586],{"type":54,"value":1591},{"type":48,"tag":777,"props":7588,"children":7589},{"style":790},[7590],{"type":54,"value":847},{"type":48,"tag":777,"props":7592,"children":7593},{"style":784},[7594],{"type":54,"value":852},{"type":48,"tag":777,"props":7596,"children":7597},{"style":839},[7598],{"type":54,"value":1573},{"type":48,"tag":777,"props":7600,"children":7601},{"style":790},[7602],{"type":54,"value":857},{"type":48,"tag":777,"props":7604,"children":7605},{"style":790},[7606],{"type":54,"value":1522},{"type":48,"tag":777,"props":7608,"children":7609},{"style":948},[7610],{"type":54,"value":1616},{"type":48,"tag":777,"props":7612,"children":7613},{"style":839},[7614],{"type":54,"value":1621},{"type":48,"tag":777,"props":7616,"children":7617},{"style":790},[7618],{"type":54,"value":1522},{"type":48,"tag":777,"props":7620,"children":7621},{"style":948},[7622],{"type":54,"value":1591},{"type":48,"tag":777,"props":7624,"children":7625},{"style":790},[7626],{"type":54,"value":847},{"type":48,"tag":777,"props":7628,"children":7629},{"style":784},[7630],{"type":54,"value":1147},{"type":48,"tag":777,"props":7632,"children":7633},{"style":790},[7634],{"type":54,"value":857},{"type":48,"tag":777,"props":7636,"children":7637},{"style":790},[7638],{"type":54,"value":1522},{"type":48,"tag":777,"props":7640,"children":7641},{"style":948},[7642],{"type":54,"value":1616},{"type":48,"tag":777,"props":7644,"children":7645},{"style":839},[7646],{"type":54,"value":1654},{"type":48,"tag":777,"props":7648,"children":7649},{"class":779,"line":889},[7650],{"type":48,"tag":777,"props":7651,"children":7652},{"emptyLinePlaceholder":923},[7653],{"type":54,"value":926},{"type":48,"tag":777,"props":7655,"children":7656},{"class":779,"line":919},[7657,7662,7666],{"type":48,"tag":777,"props":7658,"children":7659},{"style":784},[7660],{"type":54,"value":7661},"TG_IMAGE",{"type":48,"tag":777,"props":7663,"children":7664},{"style":790},[7665],{"type":54,"value":793},{"type":48,"tag":777,"props":7667,"children":7668},{"style":839},[7669],{"type":54,"value":7670},"ghcr.io\u002Fopen-telemetry\u002Fopentelemetry-collector-contrib\u002Ftelemetrygen:latest\n",{"type":48,"tag":777,"props":7672,"children":7673},{"class":779,"line":929},[7674,7679,7683],{"type":48,"tag":777,"props":7675,"children":7676},{"style":784},[7677],{"type":54,"value":7678},"NET",{"type":48,"tag":777,"props":7680,"children":7681},{"style":790},[7682],{"type":54,"value":793},{"type":48,"tag":777,"props":7684,"children":7685},{"style":839},[7686],{"type":54,"value":7687},"clickstack-net\n",{"type":48,"tag":777,"props":7689,"children":7690},{"class":779,"line":939},[7691,7696,7700],{"type":48,"tag":777,"props":7692,"children":7693},{"style":784},[7694],{"type":54,"value":7695},"ENDPOINT",{"type":48,"tag":777,"props":7697,"children":7698},{"style":790},[7699],{"type":54,"value":793},{"type":48,"tag":777,"props":7701,"children":7702},{"style":839},[7703],{"type":54,"value":7704},"clickstack-otel-collector:4317\n",{"type":48,"tag":777,"props":7706,"children":7707},{"class":779,"line":959},[7708,7713,7717,7721,7725,7730,7734,7738,7743,7747,7751,7756],{"type":48,"tag":777,"props":7709,"children":7710},{"style":784},[7711],{"type":54,"value":7712},"TG_LOG",{"type":48,"tag":777,"props":7714,"children":7715},{"style":790},[7716],{"type":54,"value":793},{"type":48,"tag":777,"props":7718,"children":7719},{"style":790},[7720],{"type":54,"value":857},{"type":48,"tag":777,"props":7722,"children":7723},{"style":784},[7724],{"type":54,"value":852},{"type":48,"tag":777,"props":7726,"children":7727},{"style":839},[7728],{"type":54,"value":7729},"\u002Ftelemetrygen.log",{"type":48,"tag":777,"props":7731,"children":7732},{"style":790},[7733],{"type":54,"value":857},{"type":48,"tag":777,"props":7735,"children":7736},{"style":790},[7737],{"type":54,"value":1522},{"type":48,"tag":777,"props":7739,"children":7740},{"style":948},[7741],{"type":54,"value":7742}," :",{"type":48,"tag":777,"props":7744,"children":7745},{"style":790},[7746],{"type":54,"value":1138},{"type":48,"tag":777,"props":7748,"children":7749},{"style":790},[7750],{"type":54,"value":847},{"type":48,"tag":777,"props":7752,"children":7753},{"style":784},[7754],{"type":54,"value":7755},"$TG_LOG",{"type":48,"tag":777,"props":7757,"children":7758},{"style":790},[7759],{"type":54,"value":886},{"type":48,"tag":777,"props":7761,"children":7762},{"class":779,"line":968},[7763],{"type":48,"tag":777,"props":7764,"children":7765},{"emptyLinePlaceholder":923},[7766],{"type":54,"value":926},{"type":48,"tag":777,"props":7768,"children":7769},{"class":779,"line":995},[7770,7774,7779],{"type":48,"tag":777,"props":7771,"children":7772},{"style":948},[7773],{"type":54,"value":7429},{"type":48,"tag":777,"props":7775,"children":7776},{"style":790},[7777],{"type":54,"value":7778},"()",{"type":48,"tag":777,"props":7780,"children":7781},{"style":790},[7782],{"type":54,"value":7783}," {\n",{"type":48,"tag":777,"props":7785,"children":7786},{"class":779,"line":1037},[7787],{"type":48,"tag":777,"props":7788,"children":7789},{"style":933},[7790],{"type":54,"value":7791},"  # usage: tg \u003Clogs|traces|metrics> [extra telemetrygen flags...]\n",{"type":48,"tag":777,"props":7793,"children":7794},{"class":779,"line":1058},[7795],{"type":48,"tag":777,"props":7796,"children":7797},{"style":933},[7798],{"type":54,"value":7799},"  # Output (which contains the token in the echoed config) goes to $TG_LOG, never the terminal.\n",{"type":48,"tag":777,"props":7801,"children":7802},{"class":779,"line":1106},[7803,7809,7814,7818,7822,7828,7832,7836],{"type":48,"tag":777,"props":7804,"children":7806},{"style":7805},"--shiki-light:#9C3EDA;--shiki-default:#C792EA;--shiki-dark:#C792EA",[7807],{"type":54,"value":7808},"  local",{"type":48,"tag":777,"props":7810,"children":7811},{"style":784},[7812],{"type":54,"value":7813}," signal",{"type":48,"tag":777,"props":7815,"children":7816},{"style":790},[7817],{"type":54,"value":793},{"type":48,"tag":777,"props":7819,"children":7820},{"style":790},[7821],{"type":54,"value":857},{"type":48,"tag":777,"props":7823,"children":7825},{"style":7824},"--shiki-light:#90A4AE;--shiki-light-font-style:italic;--shiki-default:#EEFFFF;--shiki-default-font-style:italic;--shiki-dark:#BABED8;--shiki-dark-font-style:italic",[7826],{"type":54,"value":7827},"$1",{"type":48,"tag":777,"props":7829,"children":7830},{"style":790},[7831],{"type":54,"value":857},{"type":48,"tag":777,"props":7833,"children":7834},{"style":790},[7835],{"type":54,"value":1522},{"type":48,"tag":777,"props":7837,"children":7838},{"style":948},[7839],{"type":54,"value":7840}," shift\n",{"type":48,"tag":777,"props":7842,"children":7843},{"class":779,"line":1127},[7844,7848,7852,7857,7862,7866,7871,7875,7879,7884,7888,7892,7897,7901],{"type":48,"tag":777,"props":7845,"children":7846},{"style":833},[7847],{"type":54,"value":5065},{"type":48,"tag":777,"props":7849,"children":7850},{"style":839},[7851],{"type":54,"value":5327},{"type":48,"tag":777,"props":7853,"children":7854},{"style":839},[7855],{"type":54,"value":7856}," --rm",{"type":48,"tag":777,"props":7858,"children":7859},{"style":839},[7860],{"type":54,"value":7861}," --network",{"type":48,"tag":777,"props":7863,"children":7864},{"style":790},[7865],{"type":54,"value":847},{"type":48,"tag":777,"props":7867,"children":7868},{"style":784},[7869],{"type":54,"value":7870},"$NET",{"type":48,"tag":777,"props":7872,"children":7873},{"style":790},[7874],{"type":54,"value":857},{"type":48,"tag":777,"props":7876,"children":7877},{"style":790},[7878],{"type":54,"value":847},{"type":48,"tag":777,"props":7880,"children":7881},{"style":784},[7882],{"type":54,"value":7883},"$TG_IMAGE",{"type":48,"tag":777,"props":7885,"children":7886},{"style":790},[7887],{"type":54,"value":857},{"type":48,"tag":777,"props":7889,"children":7890},{"style":790},[7891],{"type":54,"value":847},{"type":48,"tag":777,"props":7893,"children":7894},{"style":784},[7895],{"type":54,"value":7896},"$signal",{"type":48,"tag":777,"props":7898,"children":7899},{"style":790},[7900],{"type":54,"value":857},{"type":48,"tag":777,"props":7902,"children":7903},{"style":784},[7904],{"type":54,"value":2913},{"type":48,"tag":777,"props":7906,"children":7907},{"class":779,"line":1154},[7908,7913,7917,7922,7926],{"type":48,"tag":777,"props":7909,"children":7910},{"style":839},[7911],{"type":54,"value":7912},"    --otlp-endpoint",{"type":48,"tag":777,"props":7914,"children":7915},{"style":790},[7916],{"type":54,"value":847},{"type":48,"tag":777,"props":7918,"children":7919},{"style":784},[7920],{"type":54,"value":7921},"$ENDPOINT",{"type":48,"tag":777,"props":7923,"children":7924},{"style":790},[7925],{"type":54,"value":857},{"type":48,"tag":777,"props":7927,"children":7928},{"style":784},[7929],{"type":54,"value":2913},{"type":48,"tag":777,"props":7931,"children":7932},{"class":779,"line":1163},[7933,7938],{"type":48,"tag":777,"props":7934,"children":7935},{"style":839},[7936],{"type":54,"value":7937},"    --otlp-insecure",{"type":48,"tag":777,"props":7939,"children":7940},{"style":784},[7941],{"type":54,"value":2913},{"type":48,"tag":777,"props":7943,"children":7944},{"class":779,"line":1189},[7945,7950,7954,7959,7964,7968],{"type":48,"tag":777,"props":7946,"children":7947},{"style":839},[7948],{"type":54,"value":7949},"    --otlp-header",{"type":48,"tag":777,"props":7951,"children":7952},{"style":790},[7953],{"type":54,"value":847},{"type":48,"tag":777,"props":7955,"children":7956},{"style":839},[7957],{"type":54,"value":7958},"authorization=",{"type":48,"tag":777,"props":7960,"children":7961},{"style":784},[7962],{"type":54,"value":7963},"\\\"$OTLP_AUTH_TOKEN\\\"",{"type":48,"tag":777,"props":7965,"children":7966},{"style":790},[7967],{"type":54,"value":857},{"type":48,"tag":777,"props":7969,"children":7970},{"style":784},[7971],{"type":54,"value":2913},{"type":48,"tag":777,"props":7973,"children":7974},{"class":779,"line":4901},[7975,7980,7985,7990,7995,7999,8004,8008,8012,8016,8020,8024],{"type":48,"tag":777,"props":7976,"children":7977},{"style":839},[7978],{"type":54,"value":7979},"    --rate",{"type":48,"tag":777,"props":7981,"children":7982},{"style":870},[7983],{"type":54,"value":7984}," 10",{"type":48,"tag":777,"props":7986,"children":7987},{"style":839},[7988],{"type":54,"value":7989}," --duration",{"type":48,"tag":777,"props":7991,"children":7992},{"style":839},[7993],{"type":54,"value":7994}," 15s",{"type":48,"tag":777,"props":7996,"children":7997},{"style":790},[7998],{"type":54,"value":847},{"type":48,"tag":777,"props":8000,"children":8001},{"style":7824},[8002],{"type":54,"value":8003},"$@",{"type":48,"tag":777,"props":8005,"children":8006},{"style":790},[8007],{"type":54,"value":857},{"type":48,"tag":777,"props":8009,"children":8010},{"style":790},[8011],{"type":54,"value":3322},{"type":48,"tag":777,"props":8013,"children":8014},{"style":790},[8015],{"type":54,"value":857},{"type":48,"tag":777,"props":8017,"children":8018},{"style":784},[8019],{"type":54,"value":7755},{"type":48,"tag":777,"props":8021,"children":8022},{"style":790},[8023],{"type":54,"value":857},{"type":48,"tag":777,"props":8025,"children":8026},{"style":790},[8027],{"type":54,"value":8028}," 2>&1\n",{"type":48,"tag":777,"props":8030,"children":8031},{"class":779,"line":4910},[8032,8037,8041,8045,8050,8055],{"type":48,"tag":777,"props":8033,"children":8034},{"style":948},[8035],{"type":54,"value":8036},"  echo",{"type":48,"tag":777,"props":8038,"children":8039},{"style":790},[8040],{"type":54,"value":847},{"type":48,"tag":777,"props":8042,"children":8043},{"style":784},[8044],{"type":54,"value":7896},{"type":48,"tag":777,"props":8046,"children":8047},{"style":839},[8048],{"type":54,"value":8049}," exit=",{"type":48,"tag":777,"props":8051,"children":8052},{"style":784},[8053],{"type":54,"value":8054},"$?",{"type":48,"tag":777,"props":8056,"children":8057},{"style":790},[8058],{"type":54,"value":886},{"type":48,"tag":777,"props":8060,"children":8061},{"class":779,"line":4918},[8062],{"type":48,"tag":777,"props":8063,"children":8064},{"style":790},[8065],{"type":54,"value":8066},"}\n",{"type":48,"tag":1924,"props":8068,"children":8069},{},[8070],{"type":48,"tag":57,"props":8071,"children":8072},{},[8073,8078,8080,8085,8086,8091,8093,8098,8100,8106,8108,8113,8115,8120],{"type":48,"tag":82,"props":8074,"children":8075},{},[8076],{"type":54,"value":8077},"Existing-collector path:",{"type":54,"value":8079}," set ",{"type":48,"tag":70,"props":8081,"children":8083},{"className":8082},[],[8084],{"type":54,"value":7678},{"type":54,"value":625},{"type":48,"tag":70,"props":8087,"children":8089},{"className":8088},[],[8090],{"type":54,"value":7695},{"type":54,"value":8092}," to reach ",{"type":48,"tag":217,"props":8094,"children":8095},{},[8096],{"type":54,"value":8097},"your",{"type":54,"value":8099}," collector instead. If it\nruns on this host, use ",{"type":48,"tag":70,"props":8101,"children":8103},{"className":8102},[],[8104],{"type":54,"value":8105},"--network host",{"type":54,"value":8107}," style access or point ",{"type":48,"tag":70,"props":8109,"children":8111},{"className":8110},[],[8112],{"type":54,"value":7695},{"type":54,"value":8114}," at its published\naddress, and set the ",{"type":48,"tag":70,"props":8116,"children":8118},{"className":8117},[],[8119],{"type":54,"value":5491},{"type":54,"value":8121}," header (or other auth) to whatever your receiver expects.\nEverything below is otherwise identical.",{"type":48,"tag":57,"props":8123,"children":8124},{},[8125,8130,8132,8138,8140,8146,8148,8153,8154,8159,8161,8167,8169,8175,8177,8182],{"type":48,"tag":82,"props":8126,"children":8127},{},[8128],{"type":54,"value":8129},"Judge success by exit code and row counts, never by the generator's logs.",{"type":54,"value":8131}," Two reasons. First,\nthe log contains your OTLP token (see above), so do not print it. Second, it is noisy and every run\nends with ",{"type":48,"tag":70,"props":8133,"children":8135},{"className":8134},[],[8136],{"type":54,"value":8137},"rpc error: code = Canceled desc = grpc: the client connection is closing",{"type":54,"value":8139}," once\n",{"type":48,"tag":70,"props":8141,"children":8143},{"className":8142},[],[8144],{"type":54,"value":8145},"--duration",{"type":54,"value":8147}," elapses, which is ",{"type":48,"tag":82,"props":8149,"children":8150},{},[8151],{"type":54,"value":8152},"expected shutdown, not a failure",{"type":54,"value":7423},{"type":48,"tag":70,"props":8155,"children":8157},{"className":8156},[],[8158],{"type":54,"value":7429},{"type":54,"value":8160}," helper already prints\n",{"type":48,"tag":70,"props":8162,"children":8164},{"className":8163},[],[8165],{"type":54,"value":8166},"\u003Csignal> exit=0",{"type":54,"value":8168}," on success. If you must inspect a failure, grep the log for the real signal\nwithout dumping it, for example ",{"type":48,"tag":70,"props":8170,"children":8172},{"className":8171},[],[8173],{"type":54,"value":8174},"grep -c Unauthenticated \"$TG_LOG\"",{"type":54,"value":8176}," (a non-zero count plus a\nnon-zero exit means the ",{"type":48,"tag":70,"props":8178,"children":8180},{"className":8179},[],[8181],{"type":54,"value":5491},{"type":54,"value":8183}," header did not match). Confirm overall success with the row\ncounts in the verification queries below.",{"type":48,"tag":57,"props":8185,"children":8186},{},[8187,8192,8194,8199,8201,8206,8208,8214,8216,8222,8224,8230,8232,8238,8240,8245,8247,8252],{"type":48,"tag":82,"props":8188,"children":8189},{},[8190],{"type":54,"value":8191},"Quote attribute values so the inner double quotes survive the shell.",{"type":54,"value":8193}," ",{"type":48,"tag":70,"props":8195,"children":8197},{"className":8196},[],[8198],{"type":54,"value":7376},{"type":54,"value":8200}," requires\neach attribute as ",{"type":48,"tag":70,"props":8202,"children":8204},{"className":8203},[],[8205],{"type":54,"value":7472},{"type":54,"value":8207}," (with literal double quotes), and rejects a bare ",{"type":48,"tag":70,"props":8209,"children":8211},{"className":8210},[],[8212],{"type":54,"value":8213},"key=value",{"type":54,"value":8215}," with\n",{"type":48,"tag":70,"props":8217,"children":8219},{"className":8218},[],[8220],{"type":54,"value":8221},"value should be a string wrapped in double quotes",{"type":54,"value":8223},". If you write ",{"type":48,"tag":70,"props":8225,"children":8227},{"className":8226},[],[8228],{"type":54,"value":8229},"--otlp-attributes deployment.environment=\"production\"",{"type":54,"value":8231},", bash strips the quotes and the container receives\n",{"type":48,"tag":70,"props":8233,"children":8235},{"className":8234},[],[8236],{"type":54,"value":8237},"deployment.environment=production",{"type":54,"value":8239},", which hard-fails. Wrap the ",{"type":48,"tag":82,"props":8241,"children":8242},{},[8243],{"type":54,"value":8244},"whole argument in single quotes",{"type":54,"value":8246},"\nso the inner double quotes reach the container, exactly as the ",{"type":48,"tag":70,"props":8248,"children":8250},{"className":8249},[],[8251],{"type":54,"value":7429},{"type":54,"value":8253}," helper already does for the\nauth header.",{"type":48,"tag":57,"props":8255,"children":8256},{},[8257],{"type":54,"value":8258},"Logs across two services with different severities and bodies, including an error line:",{"type":48,"tag":766,"props":8260,"children":8262},{"className":768,"code":8261,"language":770,"meta":771,"style":771},"tg logs --service checkout --severity-text Info  --severity-number 9 \\\n  --body \"checkout completed\" \\\n  --otlp-attributes 'deployment.environment=\"production\"' \\\n  --telemetry-attributes 'http.method=\"POST\"'\ntg logs --service payment  --severity-text Error --severity-number 17 \\\n  --body \"payment gateway timeout\" \\\n  --otlp-attributes 'deployment.environment=\"production\"' \\\n  --telemetry-attributes 'http.status_code=\"500\"'\n",[8263],{"type":48,"tag":70,"props":8264,"children":8265},{"__ignoreMap":771},[8266,8311,8336,8361,8382,8426,8450,8473],{"type":48,"tag":777,"props":8267,"children":8268},{"class":779,"line":780},[8269,8273,8277,8282,8287,8292,8297,8302,8307],{"type":48,"tag":777,"props":8270,"children":8271},{"style":833},[8272],{"type":54,"value":7429},{"type":48,"tag":777,"props":8274,"children":8275},{"style":839},[8276],{"type":54,"value":7152},{"type":48,"tag":777,"props":8278,"children":8279},{"style":839},[8280],{"type":54,"value":8281}," --service",{"type":48,"tag":777,"props":8283,"children":8284},{"style":839},[8285],{"type":54,"value":8286}," checkout",{"type":48,"tag":777,"props":8288,"children":8289},{"style":839},[8290],{"type":54,"value":8291}," --severity-text",{"type":48,"tag":777,"props":8293,"children":8294},{"style":839},[8295],{"type":54,"value":8296}," Info",{"type":48,"tag":777,"props":8298,"children":8299},{"style":839},[8300],{"type":54,"value":8301},"  --severity-number",{"type":48,"tag":777,"props":8303,"children":8304},{"style":870},[8305],{"type":54,"value":8306}," 9",{"type":48,"tag":777,"props":8308,"children":8309},{"style":784},[8310],{"type":54,"value":2913},{"type":48,"tag":777,"props":8312,"children":8313},{"class":779,"line":829},[8314,8319,8323,8328,8332],{"type":48,"tag":777,"props":8315,"children":8316},{"style":839},[8317],{"type":54,"value":8318},"  --body",{"type":48,"tag":777,"props":8320,"children":8321},{"style":790},[8322],{"type":54,"value":847},{"type":48,"tag":777,"props":8324,"children":8325},{"style":839},[8326],{"type":54,"value":8327},"checkout completed",{"type":48,"tag":777,"props":8329,"children":8330},{"style":790},[8331],{"type":54,"value":857},{"type":48,"tag":777,"props":8333,"children":8334},{"style":784},[8335],{"type":54,"value":2913},{"type":48,"tag":777,"props":8337,"children":8338},{"class":779,"line":889},[8339,8344,8348,8353,8357],{"type":48,"tag":777,"props":8340,"children":8341},{"style":839},[8342],{"type":54,"value":8343},"  --otlp-attributes",{"type":48,"tag":777,"props":8345,"children":8346},{"style":790},[8347],{"type":54,"value":2189},{"type":48,"tag":777,"props":8349,"children":8350},{"style":839},[8351],{"type":54,"value":8352},"deployment.environment=\"production\"",{"type":48,"tag":777,"props":8354,"children":8355},{"style":790},[8356],{"type":54,"value":2961},{"type":48,"tag":777,"props":8358,"children":8359},{"style":784},[8360],{"type":54,"value":2913},{"type":48,"tag":777,"props":8362,"children":8363},{"class":779,"line":919},[8364,8369,8373,8378],{"type":48,"tag":777,"props":8365,"children":8366},{"style":839},[8367],{"type":54,"value":8368},"  --telemetry-attributes",{"type":48,"tag":777,"props":8370,"children":8371},{"style":790},[8372],{"type":54,"value":2189},{"type":48,"tag":777,"props":8374,"children":8375},{"style":839},[8376],{"type":54,"value":8377},"http.method=\"POST\"",{"type":48,"tag":777,"props":8379,"children":8380},{"style":790},[8381],{"type":54,"value":2199},{"type":48,"tag":777,"props":8383,"children":8384},{"class":779,"line":929},[8385,8389,8393,8397,8402,8407,8412,8417,8422],{"type":48,"tag":777,"props":8386,"children":8387},{"style":833},[8388],{"type":54,"value":7429},{"type":48,"tag":777,"props":8390,"children":8391},{"style":839},[8392],{"type":54,"value":7152},{"type":48,"tag":777,"props":8394,"children":8395},{"style":839},[8396],{"type":54,"value":8281},{"type":48,"tag":777,"props":8398,"children":8399},{"style":839},[8400],{"type":54,"value":8401}," payment",{"type":48,"tag":777,"props":8403,"children":8404},{"style":839},[8405],{"type":54,"value":8406},"  --severity-text",{"type":48,"tag":777,"props":8408,"children":8409},{"style":839},[8410],{"type":54,"value":8411}," Error",{"type":48,"tag":777,"props":8413,"children":8414},{"style":839},[8415],{"type":54,"value":8416}," --severity-number",{"type":48,"tag":777,"props":8418,"children":8419},{"style":870},[8420],{"type":54,"value":8421}," 17",{"type":48,"tag":777,"props":8423,"children":8424},{"style":784},[8425],{"type":54,"value":2913},{"type":48,"tag":777,"props":8427,"children":8428},{"class":779,"line":939},[8429,8433,8437,8442,8446],{"type":48,"tag":777,"props":8430,"children":8431},{"style":839},[8432],{"type":54,"value":8318},{"type":48,"tag":777,"props":8434,"children":8435},{"style":790},[8436],{"type":54,"value":847},{"type":48,"tag":777,"props":8438,"children":8439},{"style":839},[8440],{"type":54,"value":8441},"payment gateway timeout",{"type":48,"tag":777,"props":8443,"children":8444},{"style":790},[8445],{"type":54,"value":857},{"type":48,"tag":777,"props":8447,"children":8448},{"style":784},[8449],{"type":54,"value":2913},{"type":48,"tag":777,"props":8451,"children":8452},{"class":779,"line":959},[8453,8457,8461,8465,8469],{"type":48,"tag":777,"props":8454,"children":8455},{"style":839},[8456],{"type":54,"value":8343},{"type":48,"tag":777,"props":8458,"children":8459},{"style":790},[8460],{"type":54,"value":2189},{"type":48,"tag":777,"props":8462,"children":8463},{"style":839},[8464],{"type":54,"value":8352},{"type":48,"tag":777,"props":8466,"children":8467},{"style":790},[8468],{"type":54,"value":2961},{"type":48,"tag":777,"props":8470,"children":8471},{"style":784},[8472],{"type":54,"value":2913},{"type":48,"tag":777,"props":8474,"children":8475},{"class":779,"line":968},[8476,8480,8484,8489],{"type":48,"tag":777,"props":8477,"children":8478},{"style":839},[8479],{"type":54,"value":8368},{"type":48,"tag":777,"props":8481,"children":8482},{"style":790},[8483],{"type":54,"value":2189},{"type":48,"tag":777,"props":8485,"children":8486},{"style":839},[8487],{"type":54,"value":8488},"http.status_code=\"500\"",{"type":48,"tag":777,"props":8490,"children":8491},{"style":790},[8492],{"type":54,"value":2199},{"type":48,"tag":57,"props":8494,"children":8495},{},[8496],{"type":54,"value":8497},"Traces with child spans, a healthy service and an erroring one (this is what populates the Service\nMap and the error views):",{"type":48,"tag":766,"props":8499,"children":8501},{"className":768,"code":8500,"language":770,"meta":771,"style":771},"tg traces --service checkout --child-spans 4 --span-duration 120ms --status-code Ok \\\n  --otlp-attributes 'deployment.environment=\"production\"' \\\n  --telemetry-attributes 'http.route=\"\u002Fcart\"'\ntg traces --service payment  --child-spans 3 --span-duration 400ms --status-code Error \\\n  --otlp-attributes 'deployment.environment=\"production\"' \\\n  --telemetry-attributes 'http.route=\"\u002Fcharge\"'\n",[8502],{"type":48,"tag":70,"props":8503,"children":8504},{"__ignoreMap":771},[8505,8559,8582,8602,8652,8675],{"type":48,"tag":777,"props":8506,"children":8507},{"class":779,"line":780},[8508,8512,8517,8521,8525,8530,8535,8540,8545,8550,8555],{"type":48,"tag":777,"props":8509,"children":8510},{"style":833},[8511],{"type":54,"value":7429},{"type":48,"tag":777,"props":8513,"children":8514},{"style":839},[8515],{"type":54,"value":8516}," traces",{"type":48,"tag":777,"props":8518,"children":8519},{"style":839},[8520],{"type":54,"value":8281},{"type":48,"tag":777,"props":8522,"children":8523},{"style":839},[8524],{"type":54,"value":8286},{"type":48,"tag":777,"props":8526,"children":8527},{"style":839},[8528],{"type":54,"value":8529}," --child-spans",{"type":48,"tag":777,"props":8531,"children":8532},{"style":870},[8533],{"type":54,"value":8534}," 4",{"type":48,"tag":777,"props":8536,"children":8537},{"style":839},[8538],{"type":54,"value":8539}," --span-duration",{"type":48,"tag":777,"props":8541,"children":8542},{"style":839},[8543],{"type":54,"value":8544}," 120ms",{"type":48,"tag":777,"props":8546,"children":8547},{"style":839},[8548],{"type":54,"value":8549}," --status-code",{"type":48,"tag":777,"props":8551,"children":8552},{"style":839},[8553],{"type":54,"value":8554}," Ok",{"type":48,"tag":777,"props":8556,"children":8557},{"style":784},[8558],{"type":54,"value":2913},{"type":48,"tag":777,"props":8560,"children":8561},{"class":779,"line":829},[8562,8566,8570,8574,8578],{"type":48,"tag":777,"props":8563,"children":8564},{"style":839},[8565],{"type":54,"value":8343},{"type":48,"tag":777,"props":8567,"children":8568},{"style":790},[8569],{"type":54,"value":2189},{"type":48,"tag":777,"props":8571,"children":8572},{"style":839},[8573],{"type":54,"value":8352},{"type":48,"tag":777,"props":8575,"children":8576},{"style":790},[8577],{"type":54,"value":2961},{"type":48,"tag":777,"props":8579,"children":8580},{"style":784},[8581],{"type":54,"value":2913},{"type":48,"tag":777,"props":8583,"children":8584},{"class":779,"line":889},[8585,8589,8593,8598],{"type":48,"tag":777,"props":8586,"children":8587},{"style":839},[8588],{"type":54,"value":8368},{"type":48,"tag":777,"props":8590,"children":8591},{"style":790},[8592],{"type":54,"value":2189},{"type":48,"tag":777,"props":8594,"children":8595},{"style":839},[8596],{"type":54,"value":8597},"http.route=\"\u002Fcart\"",{"type":48,"tag":777,"props":8599,"children":8600},{"style":790},[8601],{"type":54,"value":2199},{"type":48,"tag":777,"props":8603,"children":8604},{"class":779,"line":919},[8605,8609,8613,8617,8621,8626,8631,8635,8640,8644,8648],{"type":48,"tag":777,"props":8606,"children":8607},{"style":833},[8608],{"type":54,"value":7429},{"type":48,"tag":777,"props":8610,"children":8611},{"style":839},[8612],{"type":54,"value":8516},{"type":48,"tag":777,"props":8614,"children":8615},{"style":839},[8616],{"type":54,"value":8281},{"type":48,"tag":777,"props":8618,"children":8619},{"style":839},[8620],{"type":54,"value":8401},{"type":48,"tag":777,"props":8622,"children":8623},{"style":839},[8624],{"type":54,"value":8625},"  --child-spans",{"type":48,"tag":777,"props":8627,"children":8628},{"style":870},[8629],{"type":54,"value":8630}," 3",{"type":48,"tag":777,"props":8632,"children":8633},{"style":839},[8634],{"type":54,"value":8539},{"type":48,"tag":777,"props":8636,"children":8637},{"style":839},[8638],{"type":54,"value":8639}," 400ms",{"type":48,"tag":777,"props":8641,"children":8642},{"style":839},[8643],{"type":54,"value":8549},{"type":48,"tag":777,"props":8645,"children":8646},{"style":839},[8647],{"type":54,"value":8411},{"type":48,"tag":777,"props":8649,"children":8650},{"style":784},[8651],{"type":54,"value":2913},{"type":48,"tag":777,"props":8653,"children":8654},{"class":779,"line":929},[8655,8659,8663,8667,8671],{"type":48,"tag":777,"props":8656,"children":8657},{"style":839},[8658],{"type":54,"value":8343},{"type":48,"tag":777,"props":8660,"children":8661},{"style":790},[8662],{"type":54,"value":2189},{"type":48,"tag":777,"props":8664,"children":8665},{"style":839},[8666],{"type":54,"value":8352},{"type":48,"tag":777,"props":8668,"children":8669},{"style":790},[8670],{"type":54,"value":2961},{"type":48,"tag":777,"props":8672,"children":8673},{"style":784},[8674],{"type":54,"value":2913},{"type":48,"tag":777,"props":8676,"children":8677},{"class":779,"line":939},[8678,8682,8686,8691],{"type":48,"tag":777,"props":8679,"children":8680},{"style":839},[8681],{"type":54,"value":8368},{"type":48,"tag":777,"props":8683,"children":8684},{"style":790},[8685],{"type":54,"value":2189},{"type":48,"tag":777,"props":8687,"children":8688},{"style":839},[8689],{"type":54,"value":8690},"http.route=\"\u002Fcharge\"",{"type":48,"tag":777,"props":8692,"children":8693},{"style":790},[8694],{"type":54,"value":2199},{"type":48,"tag":57,"props":8696,"children":8697},{},[8698],{"type":54,"value":8699},"Metrics across the three common types, so dashboards have gauges, counters, and a distribution:",{"type":48,"tag":766,"props":8701,"children":8703},{"className":768,"code":8702,"language":770,"meta":771,"style":771},"tg metrics --service checkout --metric-type Sum\ntg metrics --service checkout --metric-type Gauge\ntg metrics --service payment  --metric-type Histogram\n",[8704],{"type":48,"tag":70,"props":8705,"children":8706},{"__ignoreMap":771},[8707,8737,8765],{"type":48,"tag":777,"props":8708,"children":8709},{"class":779,"line":780},[8710,8714,8719,8723,8727,8732],{"type":48,"tag":777,"props":8711,"children":8712},{"style":833},[8713],{"type":54,"value":7429},{"type":48,"tag":777,"props":8715,"children":8716},{"style":839},[8717],{"type":54,"value":8718}," metrics",{"type":48,"tag":777,"props":8720,"children":8721},{"style":839},[8722],{"type":54,"value":8281},{"type":48,"tag":777,"props":8724,"children":8725},{"style":839},[8726],{"type":54,"value":8286},{"type":48,"tag":777,"props":8728,"children":8729},{"style":839},[8730],{"type":54,"value":8731}," --metric-type",{"type":48,"tag":777,"props":8733,"children":8734},{"style":839},[8735],{"type":54,"value":8736}," Sum\n",{"type":48,"tag":777,"props":8738,"children":8739},{"class":779,"line":829},[8740,8744,8748,8752,8756,8760],{"type":48,"tag":777,"props":8741,"children":8742},{"style":833},[8743],{"type":54,"value":7429},{"type":48,"tag":777,"props":8745,"children":8746},{"style":839},[8747],{"type":54,"value":8718},{"type":48,"tag":777,"props":8749,"children":8750},{"style":839},[8751],{"type":54,"value":8281},{"type":48,"tag":777,"props":8753,"children":8754},{"style":839},[8755],{"type":54,"value":8286},{"type":48,"tag":777,"props":8757,"children":8758},{"style":839},[8759],{"type":54,"value":8731},{"type":48,"tag":777,"props":8761,"children":8762},{"style":839},[8763],{"type":54,"value":8764}," Gauge\n",{"type":48,"tag":777,"props":8766,"children":8767},{"class":779,"line":889},[8768,8772,8776,8780,8784,8789],{"type":48,"tag":777,"props":8769,"children":8770},{"style":833},[8771],{"type":54,"value":7429},{"type":48,"tag":777,"props":8773,"children":8774},{"style":839},[8775],{"type":54,"value":8718},{"type":48,"tag":777,"props":8777,"children":8778},{"style":839},[8779],{"type":54,"value":8281},{"type":48,"tag":777,"props":8781,"children":8782},{"style":839},[8783],{"type":54,"value":8401},{"type":48,"tag":777,"props":8785,"children":8786},{"style":839},[8787],{"type":54,"value":8788},"  --metric-type",{"type":48,"tag":777,"props":8790,"children":8791},{"style":839},[8792],{"type":54,"value":8793}," Histogram\n",{"type":48,"tag":57,"props":8795,"children":8796},{},[8797,8798,8804,8806,8812,8813,8819,8820,8826,8828,8834,8836,8842,8844,8850],{"type":54,"value":945},{"type":48,"tag":70,"props":8799,"children":8801},{"className":8800},[],[8802],{"type":54,"value":8803},"--metric-type",{"type":54,"value":8805}," accepts ",{"type":48,"tag":70,"props":8807,"children":8809},{"className":8808},[],[8810],{"type":54,"value":8811},"Gauge",{"type":54,"value":1238},{"type":48,"tag":70,"props":8814,"children":8816},{"className":8815},[],[8817],{"type":54,"value":8818},"Sum",{"type":54,"value":1238},{"type":48,"tag":70,"props":8821,"children":8823},{"className":8822},[],[8824],{"type":54,"value":8825},"Histogram",{"type":54,"value":8827},", or ",{"type":48,"tag":70,"props":8829,"children":8831},{"className":8830},[],[8832],{"type":54,"value":8833},"ExponentialHistogram",{"type":54,"value":8835},". Add ",{"type":48,"tag":70,"props":8837,"children":8839},{"className":8838},[],[8840],{"type":54,"value":8841},"--otlp-http",{"type":54,"value":8843},"\nwith ",{"type":48,"tag":70,"props":8845,"children":8847},{"className":8846},[],[8848],{"type":54,"value":8849},"--otlp-endpoint clickstack-otel-collector:4318",{"type":54,"value":8851}," to exercise the HTTP path instead of gRPC.)",{"type":48,"tag":57,"props":8853,"children":8854},{},[8855],{"type":54,"value":8856},"Wait ~15 seconds for the collector to flush its batch, then confirm the tables exist:",{"type":48,"tag":766,"props":8858,"children":8860},{"className":768,"code":8859,"language":770,"meta":771,"style":771},"clickhousectl cloud service query --id \"$SERVICE_ID\" --query \\\n  \"SELECT name FROM system.tables WHERE database='otel' ORDER BY name\"\n",[8861],{"type":48,"tag":70,"props":8862,"children":8863},{"__ignoreMap":771},[8864,8907],{"type":48,"tag":777,"props":8865,"children":8866},{"class":779,"line":780},[8867,8871,8875,8879,8883,8887,8891,8895,8899,8903],{"type":48,"tag":777,"props":8868,"children":8869},{"style":833},[8870],{"type":54,"value":75},{"type":48,"tag":777,"props":8872,"children":8873},{"style":839},[8874],{"type":54,"value":1867},{"type":48,"tag":777,"props":8876,"children":8877},{"style":839},[8878],{"type":54,"value":2160},{"type":48,"tag":777,"props":8880,"children":8881},{"style":839},[8882],{"type":54,"value":3538},{"type":48,"tag":777,"props":8884,"children":8885},{"style":839},[8886],{"type":54,"value":3543},{"type":48,"tag":777,"props":8888,"children":8889},{"style":790},[8890],{"type":54,"value":847},{"type":48,"tag":777,"props":8892,"children":8893},{"style":784},[8894],{"type":54,"value":3313},{"type":48,"tag":777,"props":8896,"children":8897},{"style":790},[8898],{"type":54,"value":857},{"type":48,"tag":777,"props":8900,"children":8901},{"style":839},[8902],{"type":54,"value":3560},{"type":48,"tag":777,"props":8904,"children":8905},{"style":784},[8906],{"type":54,"value":2913},{"type":48,"tag":777,"props":8908,"children":8909},{"class":779,"line":829},[8910,8914,8919],{"type":48,"tag":777,"props":8911,"children":8912},{"style":790},[8913],{"type":54,"value":4084},{"type":48,"tag":777,"props":8915,"children":8916},{"style":839},[8917],{"type":54,"value":8918},"SELECT name FROM system.tables WHERE database='otel' ORDER BY name",{"type":48,"tag":777,"props":8920,"children":8921},{"style":790},[8922],{"type":54,"value":886},{"type":48,"tag":57,"props":8924,"children":8925},{},[8926,8928,8934],{"type":54,"value":8927},"Then confirm rows are landing. Count by ",{"type":48,"tag":70,"props":8929,"children":8931},{"className":8930},[],[8932],{"type":54,"value":8933},"parts.rows",{"type":54,"value":8935},", which is signal-agnostic and avoids\nhard-coding per-signal column names:",{"type":48,"tag":766,"props":8937,"children":8939},{"className":768,"code":8938,"language":770,"meta":771,"style":771},"clickhousectl cloud service query --id \"$SERVICE_ID\" --query \\\n  \"SELECT table, sum(rows) AS rows\n   FROM system.parts\n   WHERE database='otel' AND active\n     AND table IN ('otel_logs','otel_traces',\n                   'otel_metrics_sum','otel_metrics_gauge',\n                   'otel_metrics_histogram','otel_metrics_exponential_histogram',\n                   'otel_metrics_summary')\n   GROUP BY table ORDER BY table\"\n",[8940],{"type":48,"tag":70,"props":8941,"children":8942},{"__ignoreMap":771},[8943,8986,8998,9006,9014,9022,9030,9038,9046],{"type":48,"tag":777,"props":8944,"children":8945},{"class":779,"line":780},[8946,8950,8954,8958,8962,8966,8970,8974,8978,8982],{"type":48,"tag":777,"props":8947,"children":8948},{"style":833},[8949],{"type":54,"value":75},{"type":48,"tag":777,"props":8951,"children":8952},{"style":839},[8953],{"type":54,"value":1867},{"type":48,"tag":777,"props":8955,"children":8956},{"style":839},[8957],{"type":54,"value":2160},{"type":48,"tag":777,"props":8959,"children":8960},{"style":839},[8961],{"type":54,"value":3538},{"type":48,"tag":777,"props":8963,"children":8964},{"style":839},[8965],{"type":54,"value":3543},{"type":48,"tag":777,"props":8967,"children":8968},{"style":790},[8969],{"type":54,"value":847},{"type":48,"tag":777,"props":8971,"children":8972},{"style":784},[8973],{"type":54,"value":3313},{"type":48,"tag":777,"props":8975,"children":8976},{"style":790},[8977],{"type":54,"value":857},{"type":48,"tag":777,"props":8979,"children":8980},{"style":839},[8981],{"type":54,"value":3560},{"type":48,"tag":777,"props":8983,"children":8984},{"style":784},[8985],{"type":54,"value":2913},{"type":48,"tag":777,"props":8987,"children":8988},{"class":779,"line":829},[8989,8993],{"type":48,"tag":777,"props":8990,"children":8991},{"style":790},[8992],{"type":54,"value":4084},{"type":48,"tag":777,"props":8994,"children":8995},{"style":839},[8996],{"type":54,"value":8997},"SELECT table, sum(rows) AS rows\n",{"type":48,"tag":777,"props":8999,"children":9000},{"class":779,"line":889},[9001],{"type":48,"tag":777,"props":9002,"children":9003},{"style":839},[9004],{"type":54,"value":9005},"   FROM system.parts\n",{"type":48,"tag":777,"props":9007,"children":9008},{"class":779,"line":919},[9009],{"type":48,"tag":777,"props":9010,"children":9011},{"style":839},[9012],{"type":54,"value":9013},"   WHERE database='otel' AND active\n",{"type":48,"tag":777,"props":9015,"children":9016},{"class":779,"line":929},[9017],{"type":48,"tag":777,"props":9018,"children":9019},{"style":839},[9020],{"type":54,"value":9021},"     AND table IN ('otel_logs','otel_traces',\n",{"type":48,"tag":777,"props":9023,"children":9024},{"class":779,"line":939},[9025],{"type":48,"tag":777,"props":9026,"children":9027},{"style":839},[9028],{"type":54,"value":9029},"                   'otel_metrics_sum','otel_metrics_gauge',\n",{"type":48,"tag":777,"props":9031,"children":9032},{"class":779,"line":959},[9033],{"type":48,"tag":777,"props":9034,"children":9035},{"style":839},[9036],{"type":54,"value":9037},"                   'otel_metrics_histogram','otel_metrics_exponential_histogram',\n",{"type":48,"tag":777,"props":9039,"children":9040},{"class":779,"line":968},[9041],{"type":48,"tag":777,"props":9042,"children":9043},{"style":839},[9044],{"type":54,"value":9045},"                   'otel_metrics_summary')\n",{"type":48,"tag":777,"props":9047,"children":9048},{"class":779,"line":995},[9049,9054],{"type":48,"tag":777,"props":9050,"children":9051},{"style":839},[9052],{"type":54,"value":9053},"   GROUP BY table ORDER BY table",{"type":48,"tag":777,"props":9055,"children":9056},{"style":790},[9057],{"type":54,"value":886},{"type":48,"tag":57,"props":9059,"children":9060},{},[9061,9063,9069,9071,9077,9078,9084,9085,9091,9092,9098,9099,9105],{"type":54,"value":9062},"You should see non-zero ",{"type":48,"tag":70,"props":9064,"children":9066},{"className":9065},[],[9067],{"type":54,"value":9068},"rows",{"type":54,"value":9070}," for ",{"type":48,"tag":70,"props":9072,"children":9074},{"className":9073},[],[9075],{"type":54,"value":9076},"otel_logs",{"type":54,"value":1238},{"type":48,"tag":70,"props":9079,"children":9081},{"className":9080},[],[9082],{"type":54,"value":9083},"otel_traces",{"type":54,"value":1238},{"type":48,"tag":70,"props":9086,"children":9088},{"className":9087},[],[9089],{"type":54,"value":9090},"otel_metrics_sum",{"type":54,"value":1246},{"type":48,"tag":70,"props":9093,"children":9095},{"className":9094},[],[9096],{"type":54,"value":9097},"otel_metrics_gauge",{"type":54,"value":1254},{"type":48,"tag":70,"props":9100,"children":9102},{"className":9101},[],[9103],{"type":54,"value":9104},"otel_metrics_histogram",{"type":54,"value":9106},". If a signal is missing:",{"type":48,"tag":90,"props":9108,"children":9109},{},[9110,9123,9157,9185],{"type":48,"tag":94,"props":9111,"children":9112},{},[9113,9115,9121],{"type":54,"value":9114},"Tail the collector logs (",{"type":48,"tag":70,"props":9116,"children":9118},{"className":9117},[],[9119],{"type":54,"value":9120},"docker logs --tail 50 clickstack-otel-collector",{"type":54,"value":9122},") for export errors.",{"type":48,"tag":94,"props":9124,"children":9125},{},[9126,9128,9133,9135,9140,9142,9147,9149,9155],{"type":54,"value":9127},"Confirm the ",{"type":48,"tag":70,"props":9129,"children":9131},{"className":9130},[],[9132],{"type":54,"value":5491},{"type":54,"value":9134}," header matches ",{"type":48,"tag":70,"props":9136,"children":9138},{"className":9137},[],[9139],{"type":54,"value":7421},{"type":54,"value":9141},": ",{"type":48,"tag":70,"props":9143,"children":9145},{"className":9144},[],[9146],{"type":54,"value":8174},{"type":54,"value":9148}," (a non-zero count means a mismatch, the full message is ",{"type":48,"tag":70,"props":9150,"children":9152},{"className":9151},[],[9153],{"type":54,"value":9154},"code = Unauthenticated desc = provided authorization does not match expected scheme or token",{"type":54,"value":9156},"). Grep rather than print the\nlog, since it contains the token.",{"type":48,"tag":94,"props":9158,"children":9159},{},[9160,9162,9167,9169,9175,9177,9183],{"type":54,"value":9161},"Re-check ",{"type":48,"tag":70,"props":9163,"children":9165},{"className":9164},[],[9166],{"type":54,"value":1252},{"type":54,"value":9168}," has the ",{"type":48,"tag":70,"props":9170,"children":9172},{"className":9171},[],[9173],{"type":54,"value":9174},"https:\u002F\u002F",{"type":54,"value":9176}," scheme and ",{"type":48,"tag":70,"props":9178,"children":9180},{"className":9179},[],[9181],{"type":54,"value":9182},":8443",{"type":54,"value":9184}," port.",{"type":48,"tag":94,"props":9186,"children":9187},{},[9188],{"type":54,"value":9189},"Some metric kinds flush slowly. Re-run the count after another 30 seconds before declaring\nfailure.",{"type":48,"tag":57,"props":9191,"children":9192},{},[9193],{"type":54,"value":9194},"Do not proceed until every expected signal has non-zero rows.",{"type":48,"tag":266,"props":9196,"children":9197},{},[],{"type":48,"tag":270,"props":9199,"children":9201},{"id":9200},"step-8-confirm-the-service-is-awake-then-complete-onboarding-in-clickstack",[9202],{"type":54,"value":9203},"Step 8: Confirm the service is awake, then complete onboarding in ClickStack",{"type":48,"tag":57,"props":9205,"children":9206},{},[9207,9209,9213],{"type":54,"value":9208},"Rows in ClickHouse are ",{"type":48,"tag":82,"props":9210,"children":9211},{},[9212],{"type":54,"value":1711},{"type":54,"value":9214}," the same as the user seeing telemetry in ClickStack. The ClickStack\nUI requires a one-time onboarding step that auto-detects the data sources, and that step fails if\nthe ClickHouse service has idle-suspended in the meantime.",{"type":48,"tag":57,"props":9216,"children":9217},{},[9218,9223],{"type":48,"tag":82,"props":9219,"children":9220},{},[9221],{"type":54,"value":9222},"First, confirm the service is awake.",{"type":54,"value":9224}," Do not skip this; it is the most common reason onboarding\nshows no sources. Run a real query and require it to succeed:",{"type":48,"tag":766,"props":9226,"children":9228},{"className":768,"code":9227,"language":770,"meta":771,"style":771},"clickhousectl cloud service query --id \"$SERVICE_ID\" --query \"SELECT 1\"\n",[9229],{"type":48,"tag":70,"props":9230,"children":9231},{"__ignoreMap":771},[9232],{"type":48,"tag":777,"props":9233,"children":9234},{"class":779,"line":780},[9235,9239,9243,9247,9251,9255,9259,9263,9267,9271,9275,9280],{"type":48,"tag":777,"props":9236,"children":9237},{"style":833},[9238],{"type":54,"value":75},{"type":48,"tag":777,"props":9240,"children":9241},{"style":839},[9242],{"type":54,"value":1867},{"type":48,"tag":777,"props":9244,"children":9245},{"style":839},[9246],{"type":54,"value":2160},{"type":48,"tag":777,"props":9248,"children":9249},{"style":839},[9250],{"type":54,"value":3538},{"type":48,"tag":777,"props":9252,"children":9253},{"style":839},[9254],{"type":54,"value":3543},{"type":48,"tag":777,"props":9256,"children":9257},{"style":790},[9258],{"type":54,"value":847},{"type":48,"tag":777,"props":9260,"children":9261},{"style":784},[9262],{"type":54,"value":3313},{"type":48,"tag":777,"props":9264,"children":9265},{"style":790},[9266],{"type":54,"value":857},{"type":48,"tag":777,"props":9268,"children":9269},{"style":839},[9270],{"type":54,"value":3560},{"type":48,"tag":777,"props":9272,"children":9273},{"style":790},[9274],{"type":54,"value":847},{"type":48,"tag":777,"props":9276,"children":9277},{"style":839},[9278],{"type":54,"value":9279},"SELECT 1",{"type":48,"tag":777,"props":9281,"children":9282},{"style":790},[9283],{"type":54,"value":886},{"type":48,"tag":57,"props":9285,"children":9286},{},[9287,9289,9295,9297,9302],{"type":54,"value":9288},"If this returns ",{"type":48,"tag":70,"props":9290,"children":9292},{"className":9291},[],[9293],{"type":54,"value":9294},"1",{"type":54,"value":9296},", the service is awake; continue immediately to the console steps below while it\nstays warm. If it errors or times out, the service was asleep and this call is waking it: wait a\nfew seconds and re-run until it returns ",{"type":48,"tag":70,"props":9298,"children":9300},{"className":9299},[],[9301],{"type":54,"value":9294},{"type":54,"value":9303},". Only proceed once it succeeds.",{"type":48,"tag":57,"props":9305,"children":9306},{},[9307,9312],{"type":48,"tag":82,"props":9308,"children":9309},{},[9310],{"type":54,"value":9311},"Then walk the user through onboarding explicitly.",{"type":54,"value":9313}," Do not just say \"done\"; spell out each click,\nbecause the sources only appear after this flow is completed:",{"type":48,"tag":90,"props":9315,"children":9316},{},[9317,9330,9340,9352,9362],{"type":48,"tag":94,"props":9318,"children":9319},{},[9320,9322,9328],{"type":54,"value":9321},"Go to the ",{"type":48,"tag":63,"props":9323,"children":9325},{"href":1949,"rel":9324},[67],[9326],{"type":54,"value":9327},"ClickHouse Cloud console",{"type":54,"value":9329}," and open the target\nservice.",{"type":48,"tag":94,"props":9331,"children":9332},{},[9333,9334,9339],{"type":54,"value":1946},{"type":48,"tag":82,"props":9335,"children":9336},{},[9337],{"type":54,"value":9338},"left-hand menu, select ClickStack",{"type":54,"value":731},{"type":48,"tag":94,"props":9341,"children":9342},{},[9343,9345,9350],{"type":54,"value":9344},"Click through to ",{"type":48,"tag":82,"props":9346,"children":9347},{},[9348],{"type":54,"value":9349},"Getting Started",{"type":54,"value":9351}," and follow the onboarding flow.",{"type":48,"tag":94,"props":9353,"children":9354},{},[9355,9360],{"type":48,"tag":82,"props":9356,"children":9357},{},[9358],{"type":54,"value":9359},"Ignore any prompt that asks you to set up or configure a collector \u002F start ingestion.",{"type":54,"value":9361}," You\nhave already done that in the steps above. Skip straight past those screens (click through \u002F\n\"Next\") to source detection. Re-running the console's collector setup is unnecessary and only\ncauses confusion.",{"type":48,"tag":94,"props":9363,"children":9364},{},[9365,9367,9372,9374,9379],{"type":54,"value":9366},"The data sources are ",{"type":48,"tag":82,"props":9368,"children":9369},{},[9370],{"type":54,"value":9371},"auto-detected",{"type":54,"value":9373},": logs, traces, and metrics for the ",{"type":48,"tag":70,"props":9375,"children":9377},{"className":9376},[],[9378],{"type":54,"value":196},{"type":54,"value":9380}," database are\npicked up automatically, and your data appears in the Search and dashboard views.",{"type":48,"tag":57,"props":9382,"children":9383},{},[9384,9386,9392,9394,9399],{"type":54,"value":9385},"The direct link is ",{"type":48,"tag":70,"props":9387,"children":9389},{"className":9388},[],[9390],{"type":54,"value":9391},"https:\u002F\u002Fconsole.clickhouse.cloud\u002Fservices\u002F\u003CSERVICE_ID>\u002Fclickstack",{"type":54,"value":9393}," (substitute\n",{"type":48,"tag":70,"props":9395,"children":9397},{"className":9396},[],[9398],{"type":54,"value":3313},{"type":54,"value":1721},{"type":48,"tag":57,"props":9401,"children":9402},{},[9403,9408,9410,9415],{"type":48,"tag":82,"props":9404,"children":9405},{},[9406],{"type":54,"value":9407},"If source detection shows nothing",{"type":54,"value":9409},", the service almost certainly idle-suspended between the data\nsend and the console step. Re-run the ",{"type":48,"tag":70,"props":9411,"children":9413},{"className":9412},[],[9414],{"type":54,"value":9279},{"type":54,"value":9416}," wake query above for the user, then have them\nre-run the detection, rather than leaving them to debug an opaque failure.",{"type":48,"tag":266,"props":9418,"children":9419},{},[],{"type":48,"tag":270,"props":9421,"children":9423},{"id":9422},"step-9-summarize-and-hand-off-without-echoing-secrets",[9424],{"type":54,"value":9425},"Step 9: Summarize and hand off (without echoing secrets)",{"type":48,"tag":57,"props":9427,"children":9428},{},[9429,9431,9436],{"type":54,"value":9430},"Print a summary in roughly this format. Note the token is ",{"type":48,"tag":82,"props":9432,"children":9433},{},[9434],{"type":54,"value":9435},"referenced, not printed",{"type":54,"value":9437},", the SQL\npassword is not shown at all, and the collector keeps running until the user stops it. Adjust the\n\"how to stop\" line to the deploy mode they chose.",{"type":48,"tag":766,"props":9439,"children":9443},{"className":9440,"code":9442,"language":54},[9441],"language-text","✅ ClickStack is set up and ingesting telemetry for service \u003CSERVICE_NAME> (\u003CSERVICE_ID>).\n   Complete onboarding in the console (Step 8) to auto-detect the sources and see your data.\n\nCollector\n  ▸ New local collector via \u003CDocker Compose | docker run>  (or: configured your existing collector)\n  ▸ Send OTLP gRPC to: localhost:4317\n  ▸ Send OTLP HTTP to: localhost:4318\n  ▸ Health check:      http:\u002F\u002Flocalhost:13133\u002F   (local collector only)\n  ▸ Required header:   authorization: \u003COTLP token>\n       (retrieve with:  grep OTLP_AUTH_TOKEN \u003CWORKDIR>\u002Fcollector.env)\n\nClickHouse target\n  ▸ Endpoint: \u003CCLICKHOUSE_ENDPOINT>\n  ▸ SQL user: hyperdx_ingest   (password in \u003CWORKDIR>\u002Fcollector.env, mode 0600)\n  ▸ Database: otel\n\nFinish in the ClickHouse Cloud console:\n  ▸ Open the service, select ClickStack in the left menu, then Getting Started,\n    and complete onboarding to auto-detect sources.\n  ▸ https:\u002F\u002Fconsole.clickhouse.cloud\u002Fservices\u002F\u003CSERVICE_ID>\u002Fclickstack\n",[9444],{"type":48,"tag":70,"props":9445,"children":9446},{"__ignoreMap":771},[9447],{"type":54,"value":9442},{"type":48,"tag":57,"props":9449,"children":9450},{},[9451],{"type":54,"value":9452},"Then tell the user, in your own words, that:",{"type":48,"tag":90,"props":9454,"children":9455},{},[9456,9483,9518,9546],{"type":48,"tag":94,"props":9457,"children":9458},{},[9459,9461,9467,9468,9473,9475,9481],{"type":54,"value":9460},"All secrets live in ",{"type":48,"tag":70,"props":9462,"children":9464},{"className":9463},[],[9465],{"type":54,"value":9466},"\u003CWORKDIR>\u002Fcollector.env",{"type":54,"value":1699},{"type":48,"tag":70,"props":9469,"children":9471},{"className":9470},[],[9472],{"type":54,"value":241},{"type":54,"value":9474},"). Nothing sensitive was pasted into\nthis chat or passed on a ",{"type":48,"tag":70,"props":9476,"children":9478},{"className":9477},[],[9479],{"type":54,"value":9480},"docker run",{"type":54,"value":9482}," command line.",{"type":48,"tag":94,"props":9484,"children":9485},{},[9486,9488,9494,9496,9502,9504,9510,9511,9517],{"type":54,"value":9487},"The collector keeps running until they stop it. For Compose:\n",{"type":48,"tag":70,"props":9489,"children":9491},{"className":9490},[],[9492],{"type":54,"value":9493},"cd \u003CWORKDIR> && docker compose down",{"type":54,"value":9495}," stops it, ",{"type":48,"tag":70,"props":9497,"children":9499},{"className":9498},[],[9500],{"type":54,"value":9501},"docker compose up -d",{"type":54,"value":9503}," brings it back. For\nindividual Docker: ",{"type":48,"tag":70,"props":9505,"children":9507},{"className":9506},[],[9508],{"type":54,"value":9509},"docker stop clickstack-otel-collector",{"type":54,"value":625},{"type":48,"tag":70,"props":9512,"children":9514},{"className":9513},[],[9515],{"type":54,"value":9516},"docker start clickstack-otel-collector",{"type":54,"value":731},{"type":48,"tag":94,"props":9519,"children":9520},{},[9521,9523,9529,9531,9537,9539,9544],{"type":54,"value":9522},"Any application, SDK, or agent on this host can now send OTLP to ",{"type":48,"tag":70,"props":9524,"children":9526},{"className":9525},[],[9527],{"type":54,"value":9528},"localhost:4317",{"type":54,"value":9530}," (gRPC) or\n",{"type":48,"tag":70,"props":9532,"children":9534},{"className":9533},[],[9535],{"type":54,"value":9536},"localhost:4318",{"type":54,"value":9538}," (HTTP) with the ",{"type":48,"tag":70,"props":9540,"children":9542},{"className":9541},[],[9543],{"type":54,"value":5491},{"type":54,"value":9545}," header from the env file.",{"type":48,"tag":94,"props":9547,"children":9548},{},[9549],{"type":54,"value":9550},"The ClickHouse Cloud service idle-suspends. If ClickStack later shows no recent data, the\nservice may simply be asleep; sending new telemetry or running any query wakes it.",{"type":48,"tag":266,"props":9552,"children":9553},{},[],{"type":48,"tag":270,"props":9555,"children":9557},{"id":9556},"cleanup-only-if-the-user-explicitly-asks",[9558],{"type":54,"value":9559},"Cleanup (only if the user explicitly asks)",{"type":48,"tag":766,"props":9561,"children":9563},{"className":768,"code":9562,"language":770,"meta":771,"style":771},"# Docker Compose deployment:\n( cd \"$WORKDIR\" && docker compose down )\n\n# Individual Docker deployment:\ndocker rm -f clickstack-otel-collector\ndocker network rm clickstack-net 2>\u002Fdev\u002Fnull || true\n\n# Either deployment, remove the ingest user:\nclickhousectl cloud service query --id \"$SERVICE_ID\" --query \"DROP USER IF EXISTS hyperdx_ingest\"\n\n# Optionally remove the local files once they are no longer needed:\n# rm -f \"$WORKDIR\u002Fcollector.env\" \"$WORKDIR\u002Fsvc.json\" \"$WORKDIR\u002Fdocker-compose.yaml\"\n",[9564],{"type":48,"tag":70,"props":9565,"children":9566},{"__ignoreMap":771},[9567,9575,9619,9626,9634,9654,9689,9696,9704,9756,9763,9771],{"type":48,"tag":777,"props":9568,"children":9569},{"class":779,"line":780},[9570],{"type":48,"tag":777,"props":9571,"children":9572},{"style":933},[9573],{"type":54,"value":9574},"# Docker Compose deployment:\n",{"type":48,"tag":777,"props":9576,"children":9577},{"class":779,"line":829},[9578,9582,9586,9590,9594,9598,9602,9606,9610,9615],{"type":48,"tag":777,"props":9579,"children":9580},{"style":790},[9581],{"type":54,"value":945},{"type":48,"tag":777,"props":9583,"children":9584},{"style":948},[9585],{"type":54,"value":5109},{"type":48,"tag":777,"props":9587,"children":9588},{"style":790},[9589],{"type":54,"value":847},{"type":48,"tag":777,"props":9591,"children":9592},{"style":784},[9593],{"type":54,"value":852},{"type":48,"tag":777,"props":9595,"children":9596},{"style":790},[9597],{"type":54,"value":857},{"type":48,"tag":777,"props":9599,"children":9600},{"style":790},[9601],{"type":54,"value":862},{"type":48,"tag":777,"props":9603,"children":9604},{"style":833},[9605],{"type":54,"value":4966},{"type":48,"tag":777,"props":9607,"children":9608},{"style":839},[9609],{"type":54,"value":5134},{"type":48,"tag":777,"props":9611,"children":9612},{"style":839},[9613],{"type":54,"value":9614}," down",{"type":48,"tag":777,"props":9616,"children":9617},{"style":790},[9618],{"type":54,"value":5149},{"type":48,"tag":777,"props":9620,"children":9621},{"class":779,"line":889},[9622],{"type":48,"tag":777,"props":9623,"children":9624},{"emptyLinePlaceholder":923},[9625],{"type":54,"value":926},{"type":48,"tag":777,"props":9627,"children":9628},{"class":779,"line":919},[9629],{"type":48,"tag":777,"props":9630,"children":9631},{"style":933},[9632],{"type":54,"value":9633},"# Individual Docker deployment:\n",{"type":48,"tag":777,"props":9635,"children":9636},{"class":779,"line":929},[9637,9641,9645,9649],{"type":48,"tag":777,"props":9638,"children":9639},{"style":833},[9640],{"type":54,"value":114},{"type":48,"tag":777,"props":9642,"children":9643},{"style":839},[9644],{"type":54,"value":5074},{"type":48,"tag":777,"props":9646,"children":9647},{"style":839},[9648],{"type":54,"value":1560},{"type":48,"tag":777,"props":9650,"children":9651},{"style":839},[9652],{"type":54,"value":9653}," clickstack-otel-collector\n",{"type":48,"tag":777,"props":9655,"children":9656},{"class":779,"line":939},[9657,9661,9665,9669,9673,9677,9681,9685],{"type":48,"tag":777,"props":9658,"children":9659},{"style":833},[9660],{"type":54,"value":114},{"type":48,"tag":777,"props":9662,"children":9663},{"style":839},[9664],{"type":54,"value":4971},{"type":48,"tag":777,"props":9666,"children":9667},{"style":839},[9668],{"type":54,"value":5074},{"type":48,"tag":777,"props":9670,"children":9671},{"style":839},[9672],{"type":54,"value":4981},{"type":48,"tag":777,"props":9674,"children":9675},{"style":790},[9676],{"type":54,"value":5219},{"type":48,"tag":777,"props":9678,"children":9679},{"style":839},[9680],{"type":54,"value":4990},{"type":48,"tag":777,"props":9682,"children":9683},{"style":790},[9684],{"type":54,"value":3295},{"type":48,"tag":777,"props":9686,"children":9687},{"style":948},[9688],{"type":54,"value":5232},{"type":48,"tag":777,"props":9690,"children":9691},{"class":779,"line":959},[9692],{"type":48,"tag":777,"props":9693,"children":9694},{"emptyLinePlaceholder":923},[9695],{"type":54,"value":926},{"type":48,"tag":777,"props":9697,"children":9698},{"class":779,"line":968},[9699],{"type":48,"tag":777,"props":9700,"children":9701},{"style":933},[9702],{"type":54,"value":9703},"# Either deployment, remove the ingest user:\n",{"type":48,"tag":777,"props":9705,"children":9706},{"class":779,"line":995},[9707,9711,9715,9719,9723,9727,9731,9735,9739,9743,9747,9752],{"type":48,"tag":777,"props":9708,"children":9709},{"style":833},[9710],{"type":54,"value":75},{"type":48,"tag":777,"props":9712,"children":9713},{"style":839},[9714],{"type":54,"value":1867},{"type":48,"tag":777,"props":9716,"children":9717},{"style":839},[9718],{"type":54,"value":2160},{"type":48,"tag":777,"props":9720,"children":9721},{"style":839},[9722],{"type":54,"value":3538},{"type":48,"tag":777,"props":9724,"children":9725},{"style":839},[9726],{"type":54,"value":3543},{"type":48,"tag":777,"props":9728,"children":9729},{"style":790},[9730],{"type":54,"value":847},{"type":48,"tag":777,"props":9732,"children":9733},{"style":784},[9734],{"type":54,"value":3313},{"type":48,"tag":777,"props":9736,"children":9737},{"style":790},[9738],{"type":54,"value":857},{"type":48,"tag":777,"props":9740,"children":9741},{"style":839},[9742],{"type":54,"value":3560},{"type":48,"tag":777,"props":9744,"children":9745},{"style":790},[9746],{"type":54,"value":847},{"type":48,"tag":777,"props":9748,"children":9749},{"style":839},[9750],{"type":54,"value":9751},"DROP USER IF EXISTS hyperdx_ingest",{"type":48,"tag":777,"props":9753,"children":9754},{"style":790},[9755],{"type":54,"value":886},{"type":48,"tag":777,"props":9757,"children":9758},{"class":779,"line":1037},[9759],{"type":48,"tag":777,"props":9760,"children":9761},{"emptyLinePlaceholder":923},[9762],{"type":54,"value":926},{"type":48,"tag":777,"props":9764,"children":9765},{"class":779,"line":1058},[9766],{"type":48,"tag":777,"props":9767,"children":9768},{"style":933},[9769],{"type":54,"value":9770},"# Optionally remove the local files once they are no longer needed:\n",{"type":48,"tag":777,"props":9772,"children":9773},{"class":779,"line":1106},[9774],{"type":48,"tag":777,"props":9775,"children":9776},{"style":933},[9777],{"type":54,"value":9778},"# rm -f \"$WORKDIR\u002Fcollector.env\" \"$WORKDIR\u002Fsvc.json\" \"$WORKDIR\u002Fdocker-compose.yaml\"\n",{"type":48,"tag":57,"props":9780,"children":9781},{},[9782,9784,9788,9790,9795],{"type":54,"value":9783},"Do ",{"type":48,"tag":82,"props":9785,"children":9786},{},[9787],{"type":54,"value":1711},{"type":54,"value":9789}," drop the ",{"type":48,"tag":70,"props":9791,"children":9793},{"className":9792},[],[9794],{"type":54,"value":196},{"type":54,"value":9796}," database: it contains telemetry the user may want to retain.",{"type":48,"tag":9798,"props":9799,"children":9800},"style",{},[9801],{"type":54,"value":9802},"html .light .shiki span {color: var(--shiki-light);background: var(--shiki-light-bg);font-style: var(--shiki-light-font-style);font-weight: var(--shiki-light-font-weight);text-decoration: var(--shiki-light-text-decoration);}html.light .shiki span {color: var(--shiki-light);background: var(--shiki-light-bg);font-style: var(--shiki-light-font-style);font-weight: var(--shiki-light-font-weight);text-decoration: var(--shiki-light-text-decoration);}html .default .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html.dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}",{"items":9804,"total":1106},[9805,9827,9841,9857,9871,9889,9911,9929,9942,9959,9971,9979],{"slug":9806,"name":9806,"fn":9807,"description":9808,"org":9809,"tags":9810,"stars":9824,"repoUrl":9825,"updatedAt":9826},"chdb-datastore","accelerate pandas with chDB datastore","Use when the user has tabular data (pandas DataFrame, parquet, csv, Arrow, json) and wants to filter, group, aggregate, join, or speed up slow pandas. Provides chDB DataStore — same pandas API, ClickHouse engine underneath. Also handles reading from S3, MySQL, PostgreSQL, MongoDB, ClickHouse Cloud, Iceberg, Delta Lake as DataFrames and joining across sources. TRIGGER when: user mentions DataFrame, parquet, csv, \"fast pandas\", \"speed up pandas\", or cross-source DataFrame joins; user imports `chdb.datastore` or `from datastore import DataStore`. SKIP this skill for raw SQL syntax (use chdb-sql instead), ClickHouse server administration, or non-Python DataStore API work.",{"slug":8,"name":9,"logoUrl":10,"githubOrg":9},[9811,9812,9815,9818,9821],{"name":9,"slug":8,"type":13},{"name":9813,"slug":9814,"type":13},"Data Analysis","data-analysis",{"name":9816,"slug":9817,"type":13},"Data Engineering","data-engineering",{"name":9819,"slug":9820,"type":13},"Performance","performance",{"name":9822,"slug":9823,"type":13},"Python","python",493,"https:\u002F\u002Fgithub.com\u002FClickHouse\u002Fagent-skills","2026-04-15T04:56:32.0629",{"slug":9828,"name":9828,"fn":9829,"description":9830,"org":9831,"tags":9832,"stars":9824,"repoUrl":9825,"updatedAt":9840},"chdb-sql","run ClickHouse SQL queries in Python","Use when the user wants to run SQL — especially analytical SQL — on local files (parquet\u002Fcsv\u002Fjson), URLs, S3 paths, or remote databases (Postgres, MySQL, MongoDB, ClickHouse Cloud, Iceberg, Delta Lake) without setting up a server. Provides chDB — embedded ClickHouse SQL in Python with 1000+ functions, Session for stateful multi-step pipelines, parametrized queries, and cross-source joins via `s3()`, `mysql()`, `postgresql()`, `iceberg()`, `deltaLake()`, `remoteSecure()` table functions. TRIGGER when: user wants SQL on parquet\u002Fcsv\u002Ffiles or across remote analytical sources; uses ClickHouse SQL features (window functions, windowFunnel, geoToH3, JSON path ops, Session, parametrized queries); imports `chdb` or calls `chdb.query()`. SKIP this skill for pandas-style DataFrame method-chaining (use chdb-datastore instead) or ClickHouse server administration.",{"slug":8,"name":9,"logoUrl":10,"githubOrg":9},[9833,9834,9835,9836,9837],{"name":9,"slug":8,"type":13},{"name":9813,"slug":9814,"type":13},{"name":9816,"slug":9817,"type":13},{"name":9822,"slug":9823,"type":13},{"name":9838,"slug":9839,"type":13},"SQL","sql","2026-04-15T04:56:33.299509",{"slug":9842,"name":9842,"fn":9843,"description":9844,"org":9845,"tags":9846,"stars":9824,"repoUrl":9825,"updatedAt":9856},"clickhouse-architecture-advisor","advise on ClickHouse architectures","MUST USE when designing ClickHouse architectures, selecting between ingestion or modeling patterns, or translating best practices into workload-specific system designs. Complements clickhouse-best-practices with decision frameworks and explicit provenance labels.",{"slug":8,"name":9,"logoUrl":10,"githubOrg":9},[9847,9850,9851,9852,9855],{"name":9848,"slug":9849,"type":13},"Architecture","architecture",{"name":9,"slug":8,"type":13},{"name":9816,"slug":9817,"type":13},{"name":9853,"slug":9854,"type":13},"Database","database",{"name":9819,"slug":9820,"type":13},"2026-04-15T04:56:34.534001",{"slug":9858,"name":9858,"fn":9859,"description":9860,"org":9861,"tags":9862,"stars":9824,"repoUrl":9825,"updatedAt":9870},"clickhouse-best-practices","review ClickHouse schemas and queries","MUST USE when reviewing ClickHouse schemas, queries, or configurations. Contains 31 rules that MUST be checked before providing recommendations. Always read relevant rule files and cite specific rules in responses.",{"slug":8,"name":9,"logoUrl":10,"githubOrg":9},[9863,9864,9867,9868,9869],{"name":9,"slug":8,"type":13},{"name":9865,"slug":9866,"type":13},"Code Review","code-review",{"name":9853,"slug":9854,"type":13},{"name":9819,"slug":9820,"type":13},{"name":9838,"slug":9839,"type":13},"2026-04-06T18:07:18.953931",{"slug":9872,"name":9872,"fn":9873,"description":9874,"org":9875,"tags":9876,"stars":9824,"repoUrl":9825,"updatedAt":9888},"clickhouse-js-node-rowbinary","encode and decode ClickHouse RowBinary streams","Generate TypeScript\u002FJavaScript code that reads\u002Fdecodes AND writes\u002Fencodes ClickHouse RowBinary streams for the ClickHouse HTTP server. Use this skill whenever a user wants to parse or produce `RowBinary`, `RowBinaryWithNames`, or `RowBinaryWithNamesAndTypes`. Node.js only, doesn't cover browsers.\n",{"slug":8,"name":9,"logoUrl":10,"githubOrg":9},[9877,9880,9881,9882,9885],{"name":9878,"slug":9879,"type":13},"API Development","api-development",{"name":9,"slug":8,"type":13},{"name":9853,"slug":9854,"type":13},{"name":9883,"slug":9884,"type":13},"JavaScript","javascript",{"name":9886,"slug":9887,"type":13},"TypeScript","typescript","2026-07-01T08:16:19.314713",{"slug":9890,"name":9890,"fn":9891,"description":9892,"org":9893,"tags":9894,"stars":9824,"repoUrl":9825,"updatedAt":9910},"clickhouse-managed-postgres-rca","diagnose performance issues on ClickHouse-managed Postgres","MUST USE when investigating performance issues on a ClickHouse-managed Postgres instance. Provides an evidence-based RCA workflow that scrapes the Prometheus endpoint for system signal, pulls per-digest evidence from the Slow Query Patterns API, and recommends (does not apply) a fix.",{"slug":8,"name":9,"logoUrl":10,"githubOrg":9},[9895,9896,9899,9902,9903,9904,9907],{"name":9,"slug":8,"type":13},{"name":9897,"slug":9898,"type":13},"Debugging","debugging",{"name":9900,"slug":9901,"type":13},"Monitoring","monitoring",{"name":15,"slug":16,"type":13},{"name":9819,"slug":9820,"type":13},{"name":9905,"slug":9906,"type":13},"PostgreSQL","postgresql",{"name":9908,"slug":9909,"type":13},"Prometheus","prometheus","2026-06-08T08:19:31.589978",{"slug":9912,"name":9912,"fn":9913,"description":9914,"org":9915,"tags":9916,"stars":9824,"repoUrl":9825,"updatedAt":9928},"infra-clickhouse","manage ClickHouse server instances","Sets up and manages ClickHouse using the clickhousectl CLI — installs and runs a local ClickHouse server for development, and creates managed ClickHouse Cloud services for production (authentication, service creation, schema migration, application connection). Use when the user wants to build an application with ClickHouse, set up a local ClickHouse dev environment, create tables and start querying, deploy ClickHouse to production or ClickHouse Cloud, or migrate from a local setup to the cloud.",{"slug":8,"name":9,"logoUrl":10,"githubOrg":9},[9917,9920,9921,9922,9925],{"name":9918,"slug":9919,"type":13},"CLI","cli",{"name":9,"slug":8,"type":13},{"name":9853,"slug":9854,"type":13},{"name":9923,"slug":9924,"type":13},"Deployment","deployment",{"name":9926,"slug":9927,"type":13},"Infrastructure","infrastructure","2026-07-28T06:06:00.02089",{"slug":9930,"name":9930,"fn":9931,"description":9932,"org":9933,"tags":9934,"stars":9824,"repoUrl":9825,"updatedAt":9941},"infra-postgres","manage PostgreSQL database instances","Sets up and manages Postgres using the clickhousectl CLI — runs a local Docker-backed Postgres for development, and creates and operates managed ClickHouse Cloud Postgres services (connections, TLS, runtime config, read replicas, failover, point-in-time restore). Use when the user wants a Postgres or PostgreSQL database for their application, a local Postgres dev environment, psql access, or a managed\u002Fproduction Postgres in ClickHouse Cloud, or mentions moving a local Postgres to production.",{"slug":8,"name":9,"logoUrl":10,"githubOrg":9},[9935,9936,9937,9939,9940],{"name":9853,"slug":9854,"type":13},{"name":9923,"slug":9924,"type":13},{"name":9938,"slug":114,"type":13},"Docker",{"name":9926,"slug":9927,"type":13},{"name":9905,"slug":9906,"type":13},"2026-07-28T06:06:07.151976",{"slug":9943,"name":9943,"fn":9944,"description":9945,"org":9946,"tags":9947,"stars":9956,"repoUrl":9957,"updatedAt":9958},"clickhouse-js-node-coding","build Node.js applications with ClickHouse","Write idiomatic application code with the ClickHouse Node.js client (`@clickhouse\u002Fclient`). Use this skill whenever a user is *building* against the Node.js client — configuring the client, pinging, inserting rows in JSON or raw formats, selecting and parsing results, binding query parameters, managing sessions and temporary tables, working with data types or customizing JSON parsing. Do NOT use for browser\u002FWeb client code.\n",{"slug":8,"name":9,"logoUrl":10,"githubOrg":9},[9948,9951,9952,9953],{"name":9949,"slug":9950,"type":13},"Backend","backend",{"name":9,"slug":8,"type":13},{"name":9853,"slug":9854,"type":13},{"name":9954,"slug":9955,"type":13},"Node.js","node-js",321,"https:\u002F\u002Fgithub.com\u002FClickHouse\u002Fclickhouse-js","2026-05-06T05:41:40.923776",{"slug":9960,"name":9960,"fn":9961,"description":9962,"org":9963,"tags":9964,"stars":9956,"repoUrl":9957,"updatedAt":9970},"clickhouse-js-node-troubleshooting","troubleshoot ClickHouse Node.js client","Troubleshoot and resolve common issues with the ClickHouse Node.js client (@clickhouse\u002Fclient). Use this skill whenever a user reports errors, unexpected behavior, or configuration questions involving the Node.js client specifically — including socket hang-up errors, Keep-Alive problems, stream handling issues, data type mismatches, read-only user restrictions, proxy\u002FTLS setup problems, or long-running query timeouts. Trigger even when the user hasn't precisely named the issue; vague symptoms like \"my inserts keep failing\" or \"connection drops randomly\" in a Node.js context are strong signals to use this skill. Do NOT use for browser\u002FWeb client issues.\n",{"slug":8,"name":9,"logoUrl":10,"githubOrg":9},[9965,9966,9967,9969],{"name":9,"slug":8,"type":13},{"name":9897,"slug":9898,"type":13},{"name":9954,"slug":9968,"type":13},"nodejs",{"name":9886,"slug":9887,"type":13},"2026-04-14T04:56:39.447406",{"slug":4,"name":4,"fn":5,"description":6,"org":9972,"tags":9973,"stars":26,"repoUrl":27,"updatedAt":28},{"slug":8,"name":9,"logoUrl":10,"githubOrg":9},[9974,9975,9976,9977,9978],{"name":9,"slug":8,"type":13},{"name":18,"slug":19,"type":13},{"name":24,"slug":25,"type":13},{"name":15,"slug":16,"type":13},{"name":21,"slug":22,"type":13},{"slug":9980,"name":9980,"fn":9981,"description":9982,"org":9983,"tags":9984,"stars":919,"repoUrl":9993,"updatedAt":9994},"setup","set up ClickHouse MCP server connections","Guides users through setting up the ClickHouse MCP server connection bundled with this plugin. Use when the user first installs the plugin or has trouble connecting to ClickHouse.",{"slug":8,"name":9,"logoUrl":10,"githubOrg":9},[9985,9986,9987,9990],{"name":9,"slug":8,"type":13},{"name":9853,"slug":9854,"type":13},{"name":9988,"slug":9989,"type":13},"Local Development","local-development",{"name":9991,"slug":9992,"type":13},"MCP","mcp","https:\u002F\u002Fgithub.com\u002FClickHouse\u002Fclickhouse-claude-code-plugin","2026-04-19T04:59:29.849185",{"items":9996,"total":780},[9997],{"slug":4,"name":4,"fn":5,"description":6,"org":9998,"tags":9999,"stars":26,"repoUrl":27,"updatedAt":28},{"slug":8,"name":9,"logoUrl":10,"githubOrg":9},[10000,10001,10002,10003,10004],{"name":9,"slug":8,"type":13},{"name":18,"slug":19,"type":13},{"name":24,"slug":25,"type":13},{"name":15,"slug":16,"type":13},{"name":21,"slug":22,"type":13}]